@zokugun/xtry 0.7.1 → 0.7.2

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,3 +1,4 @@
1
+ export type { XDeferAsync, XDeferSync } from './defer.cjs';
1
2
  export { xdefer as xdeferUnknown, xdeferAsync as xdefer, xdeferSync } from './defer.cjs';
2
3
  export type { YResult, YSuccess, YFailure } from './partial.cjs';
3
4
  export { yok, yerr, yres as yresUnknown, yresAsync as yres, yresSync, yep, YOK, YOK_NULL, YOK_TRUE, YOK_FALSE } from './partial.cjs';
package/lib/cjs/defer.cjs CHANGED
@@ -5,7 +5,7 @@ exports.xdeferAsync = xdeferAsync;
5
5
  exports.xdeferSync = xdeferSync;
6
6
  const result_js_1 = require("./result.cjs");
7
7
  const is_promise_like_js_1 = require("./utils/is-promise-like.cjs");
8
- function xdefer(callback) {
8
+ function xdefer(callback, bind, ...args) {
9
9
  // eslint-disable-next-line @typescript-eslint/promise-function-async
10
10
  return ((result) => {
11
11
  const finalize = (deferResult) => {
@@ -17,16 +17,36 @@ function xdefer(callback) {
17
17
  }
18
18
  return (result) ?? (0, result_js_1.ok)();
19
19
  };
20
- const deferredValue = callback instanceof Function ? callback() : callback;
20
+ let deferredValue;
21
+ if (callback instanceof Function) {
22
+ if (bind) {
23
+ deferredValue = Reflect.apply(callback, bind, args);
24
+ }
25
+ else {
26
+ deferredValue = callback(...args);
27
+ }
28
+ }
29
+ else {
30
+ deferredValue = callback;
31
+ }
21
32
  if ((0, is_promise_like_js_1.isPromiseLike)(deferredValue)) {
22
33
  return Promise.resolve(deferredValue).then(finalize);
23
34
  }
24
35
  return finalize(deferredValue);
25
36
  });
26
37
  }
27
- function xdeferAsync(callback) {
38
+ function xdeferAsync(callback, bind, ...args) {
28
39
  return (async (result) => {
29
- const deferResult = await (callback instanceof Promise ? callback : callback());
40
+ let deferResult;
41
+ if (callback instanceof Promise) {
42
+ deferResult = await callback;
43
+ }
44
+ else if (bind) {
45
+ deferResult = await callback.apply(bind, args);
46
+ }
47
+ else {
48
+ deferResult = await callback(...args);
49
+ }
30
50
  if (deferResult.fails) {
31
51
  if (result?.fails) {
32
52
  return result;
@@ -36,9 +56,9 @@ function xdeferAsync(callback) {
36
56
  return result ?? (0, result_js_1.ok)();
37
57
  });
38
58
  }
39
- function xdeferSync(callback) {
59
+ function xdeferSync(callback, bind, ...args) {
40
60
  return ((result) => {
41
- const deferResult = callback();
61
+ const deferResult = bind ? callback.apply(bind, args) : callback(...args);
42
62
  if (deferResult.fails) {
43
63
  if (result?.fails) {
44
64
  return result;
@@ -1,19 +1,20 @@
1
1
  import { type Failure, type Result, type Success } from './result.cjs';
2
- import { type NonPromiseCallback, type PromiseCallback } from './utils/types.cjs';
3
- type DeferAsync<E> = {
2
+ import { type NonPromiseCallback } from './utils/types.cjs';
3
+ export type XDeferAsync<E> = {
4
4
  (): Promise<Success<void>>;
5
5
  <T>(result: Success<T>): Promise<Result<T, E>>;
6
6
  <F>(result: Failure<F>): Promise<Failure<F>>;
7
7
  <T, F>(result: Result<T, F>): Promise<Result<T, E | F>>;
8
8
  };
9
- type DeferSync<E> = {
9
+ export type XDeferSync<E> = {
10
10
  (): Success<void>;
11
11
  <T>(result: Success<T>): Result<T, E>;
12
12
  <F>(result: Failure<F>): Failure<F>;
13
13
  <T, F>(result: Result<T, F>): Result<T, E | F>;
14
14
  };
15
- export declare function xdefer<E>(callback: NonPromiseCallback<Result<unknown, E>>): DeferSync<E>;
16
- export declare function xdefer<E>(callback: PromiseCallback<Result<unknown, E>>): DeferAsync<E>;
17
- export declare function xdeferAsync<E>(callback: PromiseCallback<Result<unknown, E>>): DeferAsync<E>;
18
- export declare function xdeferSync<E>(callback: NonPromiseCallback<Result<unknown, E>>): DeferSync<E>;
19
- export {};
15
+ export declare function xdefer<E, Args extends unknown[]>(callback: NonPromiseCallback<Result<unknown, E>, Args>, bind?: object, ...args: Args): XDeferSync<E>;
16
+ export declare function xdefer<E>(callback: Promise<Result<unknown, E>>): XDeferAsync<E>;
17
+ export declare function xdefer<E, Args extends unknown[]>(callback: (...args: Args) => Promise<Result<unknown, E>>, bind?: object, ...args: Args): XDeferAsync<E>;
18
+ export declare function xdeferAsync<E>(callback: Promise<Result<unknown, E>>): XDeferAsync<E>;
19
+ export declare function xdeferAsync<E, Args extends unknown[]>(callback: (...args: Args) => Promise<Result<unknown, E>>, bind?: object, ...args: Args): XDeferAsync<E>;
20
+ export declare function xdeferSync<E, Args extends unknown[]>(callback: NonPromiseCallback<Result<unknown, E>, Args>, bind?: object, ...args: Args): XDeferSync<E>;
@@ -1,3 +1,4 @@
1
+ export type { XDeferAsync, XDeferSync } from './defer.cjs';
1
2
  export { xdefer, xdeferAsync, xdeferSync } from './defer.cjs';
2
3
  export type { YResult, YSuccess, YFailure } from './partial.cjs';
3
4
  export { yok, yerr, yres, yresAsync, yresSync, yep, YOK, YOK_NULL, YOK_TRUE, YOK_FALSE } from './partial.cjs';
@@ -1,3 +1,4 @@
1
+ export type { XDeferAsync, XDeferSync } from './defer.cjs';
1
2
  export { xdefer as xdeferUnknown, xdeferAsync, xdeferSync as xdefer } from './defer.cjs';
2
3
  export type { YResult, YSuccess, YFailure } from './partial.cjs';
3
4
  export { yok, yerr, yres as yresUnknown, yresAsync, yresSync as yres, yep, YOK, YOK_NULL, YOK_TRUE, YOK_FALSE } from './partial.cjs';
@@ -1,5 +1,5 @@
1
1
  export type NotPromise<T> = Exclude<T, Promise<unknown>>;
2
- export type NonPromiseCallback<T> = () => NotPromise<T>;
3
- export type PromiseCallback<T> = (() => Promise<T>) | Promise<T>;
4
- export type Callback<T> = NonPromiseCallback<T> | PromiseCallback<T>;
2
+ export type NonPromiseCallback<T, Args extends unknown[] = []> = (...args: Args) => NotPromise<T>;
3
+ export type PromiseCallback<T, Args extends unknown[] = []> = ((...args: Args) => Promise<T>) | Promise<T>;
4
+ export type Callback<T, Args extends unknown[] = []> = NonPromiseCallback<T, Args> | PromiseCallback<T, Args>;
5
5
  export type MaybePromise<T> = T | Promise<T>;
@@ -1,3 +1,4 @@
1
+ export type { XDeferAsync, XDeferSync } from './defer.mjs';
1
2
  export { xdefer as xdeferUnknown, xdeferAsync as xdefer, xdeferSync } from './defer.mjs';
2
3
  export type { YResult, YSuccess, YFailure } from './partial.mjs';
3
4
  export { yok, yerr, yres as yresUnknown, yresAsync as yres, yresSync, yep, YOK, YOK_NULL, YOK_TRUE, YOK_FALSE } from './partial.mjs';
@@ -1,19 +1,20 @@
1
1
  import { type Failure, type Result, type Success } from './result.mjs';
2
- import { type NonPromiseCallback, type PromiseCallback } from './utils/types.mjs';
3
- type DeferAsync<E> = {
2
+ import { type NonPromiseCallback } from './utils/types.mjs';
3
+ export type XDeferAsync<E> = {
4
4
  (): Promise<Success<void>>;
5
5
  <T>(result: Success<T>): Promise<Result<T, E>>;
6
6
  <F>(result: Failure<F>): Promise<Failure<F>>;
7
7
  <T, F>(result: Result<T, F>): Promise<Result<T, E | F>>;
8
8
  };
9
- type DeferSync<E> = {
9
+ export type XDeferSync<E> = {
10
10
  (): Success<void>;
11
11
  <T>(result: Success<T>): Result<T, E>;
12
12
  <F>(result: Failure<F>): Failure<F>;
13
13
  <T, F>(result: Result<T, F>): Result<T, E | F>;
14
14
  };
15
- export declare function xdefer<E>(callback: NonPromiseCallback<Result<unknown, E>>): DeferSync<E>;
16
- export declare function xdefer<E>(callback: PromiseCallback<Result<unknown, E>>): DeferAsync<E>;
17
- export declare function xdeferAsync<E>(callback: PromiseCallback<Result<unknown, E>>): DeferAsync<E>;
18
- export declare function xdeferSync<E>(callback: NonPromiseCallback<Result<unknown, E>>): DeferSync<E>;
19
- export {};
15
+ export declare function xdefer<E, Args extends unknown[]>(callback: NonPromiseCallback<Result<unknown, E>, Args>, bind?: object, ...args: Args): XDeferSync<E>;
16
+ export declare function xdefer<E>(callback: Promise<Result<unknown, E>>): XDeferAsync<E>;
17
+ export declare function xdefer<E, Args extends unknown[]>(callback: (...args: Args) => Promise<Result<unknown, E>>, bind?: object, ...args: Args): XDeferAsync<E>;
18
+ export declare function xdeferAsync<E>(callback: Promise<Result<unknown, E>>): XDeferAsync<E>;
19
+ export declare function xdeferAsync<E, Args extends unknown[]>(callback: (...args: Args) => Promise<Result<unknown, E>>, bind?: object, ...args: Args): XDeferAsync<E>;
20
+ export declare function xdeferSync<E, Args extends unknown[]>(callback: NonPromiseCallback<Result<unknown, E>, Args>, bind?: object, ...args: Args): XDeferSync<E>;
package/lib/esm/defer.mjs CHANGED
@@ -1,6 +1,6 @@
1
1
  import { ok } from './result.mjs';
2
2
  import { isPromiseLike } from './utils/is-promise-like.mjs';
3
- export function xdefer(callback) {
3
+ export function xdefer(callback, bind, ...args) {
4
4
  // eslint-disable-next-line @typescript-eslint/promise-function-async
5
5
  return ((result) => {
6
6
  const finalize = (deferResult) => {
@@ -12,16 +12,36 @@ export function xdefer(callback) {
12
12
  }
13
13
  return (result) ?? ok();
14
14
  };
15
- const deferredValue = callback instanceof Function ? callback() : callback;
15
+ let deferredValue;
16
+ if (callback instanceof Function) {
17
+ if (bind) {
18
+ deferredValue = Reflect.apply(callback, bind, args);
19
+ }
20
+ else {
21
+ deferredValue = callback(...args);
22
+ }
23
+ }
24
+ else {
25
+ deferredValue = callback;
26
+ }
16
27
  if (isPromiseLike(deferredValue)) {
17
28
  return Promise.resolve(deferredValue).then(finalize);
18
29
  }
19
30
  return finalize(deferredValue);
20
31
  });
21
32
  }
22
- export function xdeferAsync(callback) {
33
+ export function xdeferAsync(callback, bind, ...args) {
23
34
  return (async (result) => {
24
- const deferResult = await (callback instanceof Promise ? callback : callback());
35
+ let deferResult;
36
+ if (callback instanceof Promise) {
37
+ deferResult = await callback;
38
+ }
39
+ else if (bind) {
40
+ deferResult = await callback.apply(bind, args);
41
+ }
42
+ else {
43
+ deferResult = await callback(...args);
44
+ }
25
45
  if (deferResult.fails) {
26
46
  if (result?.fails) {
27
47
  return result;
@@ -31,9 +51,9 @@ export function xdeferAsync(callback) {
31
51
  return result ?? ok();
32
52
  });
33
53
  }
34
- export function xdeferSync(callback) {
54
+ export function xdeferSync(callback, bind, ...args) {
35
55
  return ((result) => {
36
- const deferResult = callback();
56
+ const deferResult = bind ? callback.apply(bind, args) : callback(...args);
37
57
  if (deferResult.fails) {
38
58
  if (result?.fails) {
39
59
  return result;
@@ -1,3 +1,4 @@
1
+ export type { XDeferAsync, XDeferSync } from './defer.mjs';
1
2
  export { xdefer, xdeferAsync, xdeferSync } from './defer.mjs';
2
3
  export type { YResult, YSuccess, YFailure } from './partial.mjs';
3
4
  export { yok, yerr, yres, yresAsync, yresSync, yep, YOK, YOK_NULL, YOK_TRUE, YOK_FALSE } from './partial.mjs';
@@ -1,3 +1,4 @@
1
+ export type { XDeferAsync, XDeferSync } from './defer.mjs';
1
2
  export { xdefer as xdeferUnknown, xdeferAsync, xdeferSync as xdefer } from './defer.mjs';
2
3
  export type { YResult, YSuccess, YFailure } from './partial.mjs';
3
4
  export { yok, yerr, yres as yresUnknown, yresAsync, yresSync as yres, yep, YOK, YOK_NULL, YOK_TRUE, YOK_FALSE } from './partial.mjs';
@@ -1,5 +1,5 @@
1
1
  export type NotPromise<T> = Exclude<T, Promise<unknown>>;
2
- export type NonPromiseCallback<T> = () => NotPromise<T>;
3
- export type PromiseCallback<T> = (() => Promise<T>) | Promise<T>;
4
- export type Callback<T> = NonPromiseCallback<T> | PromiseCallback<T>;
2
+ export type NonPromiseCallback<T, Args extends unknown[] = []> = (...args: Args) => NotPromise<T>;
3
+ export type PromiseCallback<T, Args extends unknown[] = []> = ((...args: Args) => Promise<T>) | Promise<T>;
4
+ export type Callback<T, Args extends unknown[] = []> = NonPromiseCallback<T, Args> | PromiseCallback<T, Args>;
5
5
  export type MaybePromise<T> = T | Promise<T>;
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.7.1",
4
+ "version": "0.7.2",
5
5
  "author": {
6
6
  "name": "Baptiste Augrain",
7
7
  "email": "daiyam@zokugun.org"