@xstd/async-function 1.0.0 → 1.1.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.
- package/README.md +19 -8
- package/package.json +1 -1
- package/src/async-function.d.ts +2 -3
- package/src/async-function.js +2 -2
- package/src/async-function.js.map +1 -1
package/README.md
CHANGED
|
@@ -76,13 +76,21 @@ const data = await fetchJson.call(new AbortController().signal, 'https://example
|
|
|
76
76
|
#### Constructor
|
|
77
77
|
|
|
78
78
|
```ts
|
|
79
|
-
new AsyncFunction<GArguments, GReturn>(call:
|
|
79
|
+
new AsyncFunction<GArguments, GReturn>(call: AsyncFunctionLike<GArguments, GReturn>)
|
|
80
80
|
```
|
|
81
81
|
|
|
82
82
|
Creates an instance of the `AsyncFunction` class.
|
|
83
83
|
|
|
84
84
|
- **Parameters**
|
|
85
|
-
- `call:
|
|
85
|
+
- `call: AsyncFunctionLike<GArguments, GReturn>` — A call function, or an existing `AsyncFunction`, which defines the action to perform on invocation. It receives the call's `AbortSignal` as first argument, followed by the call's arguments, and returns the result (or a promise of it). If an `AsyncFunction` is provided, its underlying call function is reused instead of being wrapped.
|
|
86
|
+
|
|
87
|
+
```ts
|
|
88
|
+
// from a call function:
|
|
89
|
+
const fnc = new AsyncFunction(async (signal, url: string) => fetch(url, { signal }));
|
|
90
|
+
|
|
91
|
+
// from an existing AsyncFunction (reuses its underlying call function):
|
|
92
|
+
const copy = new AsyncFunction(fnc);
|
|
93
|
+
```
|
|
86
94
|
|
|
87
95
|
#### Static methods
|
|
88
96
|
|
|
@@ -181,7 +189,9 @@ Maps and transforms the arguments of the current async function using the provid
|
|
|
181
189
|
|
|
182
190
|
```ts
|
|
183
191
|
const fnc = new AsyncFunction(async (signal, a: number, b: number) => a + b);
|
|
184
|
-
const doubled = fnc.mapArguments(
|
|
192
|
+
const doubled = fnc.mapArguments(
|
|
193
|
+
(...args: [number]) => [args[0], args[0]] satisfies [number, number],
|
|
194
|
+
);
|
|
185
195
|
const result = await doubled.call(signal, 21); // 42
|
|
186
196
|
```
|
|
187
197
|
|
|
@@ -258,8 +268,9 @@ The first call starts the underlying call with its own `AbortController`. Each c
|
|
|
258
268
|
- **Returns** A new async function sharing concurrent calls with identical keys.
|
|
259
269
|
|
|
260
270
|
```ts
|
|
261
|
-
const loadUser = new AsyncFunction(async (signal, id: string) =>
|
|
262
|
-
|
|
271
|
+
const loadUser = new AsyncFunction(async (signal, id: string) =>
|
|
272
|
+
fetchUser(id, { signal }),
|
|
273
|
+
).shareConcurentCalls({ keyGenerator: ([id]) => id });
|
|
263
274
|
|
|
264
275
|
// 'fetchUser' is called once, both calls await the same result:
|
|
265
276
|
const [a, b] = await Promise.all([loadUser.call(signal, 'a'), loadUser.call(signal, 'a')]);
|
|
@@ -267,7 +278,7 @@ const [a, b] = await Promise.all([loadUser.call(signal, 'a'), loadUser.call(sign
|
|
|
267
278
|
|
|
268
279
|
#### Types
|
|
269
280
|
|
|
270
|
-
| Type
|
|
271
|
-
|
|
|
272
|
-
| `CallAsyncFunction<GArguments, GReturn>` | `(signal: AbortSignal, ...args: GArguments) => PromiseLike<GReturn> \| GReturn` — the shape of the underlying call function.
|
|
281
|
+
| Type | Description |
|
|
282
|
+
| ---------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------- |
|
|
283
|
+
| `CallAsyncFunction<GArguments, GReturn>` | `(signal: AbortSignal, ...args: GArguments) => PromiseLike<GReturn> \| GReturn` — the shape of the underlying call function. |
|
|
273
284
|
| `AsyncFunctionLike<GArguments, GReturn>` | `AsyncFunction<GArguments, GReturn> \| CallAsyncFunction<GArguments, GReturn>` — accepted by the constructor, `of` and `fromSendAndReceive`. |
|
package/package.json
CHANGED
package/src/async-function.d.ts
CHANGED
|
@@ -1,5 +1,4 @@
|
|
|
1
1
|
import { type AsyncFunctionLike } from './types/async-function-like.ts';
|
|
2
|
-
import { type CallAsyncFunction } from './types/call-async-function.ts';
|
|
3
2
|
import { type MapFunctionArguments } from './types/methods/map-arguments/map-function-arguments.ts';
|
|
4
3
|
import { type ShareConcurentCallsOptions } from './types/methods/share-concurent-calls/share-concurent-calls-options.js';
|
|
5
4
|
import { type AsyncFunctionThenOnFulfilledFunction } from './types/methods/then/async-function.then.on-fulfilled-function.ts';
|
|
@@ -68,9 +67,9 @@ export declare class AsyncFunction<GArguments extends readonly unknown[], GRetur
|
|
|
68
67
|
/**
|
|
69
68
|
* Creates an instance of the `AsyncFunction` class.
|
|
70
69
|
*
|
|
71
|
-
* @param {
|
|
70
|
+
* @param {AsyncFunctionLike<GArguments, GReturn>} call A call function, or an existing `AsyncFunction`, to be invoked, which defines the action to perform on invocation. If an `AsyncFunction` is provided, its underlying call function is reused instead of being wrapped.
|
|
72
71
|
*/
|
|
73
|
-
constructor(call:
|
|
72
|
+
constructor(call: AsyncFunctionLike<GArguments, GReturn>);
|
|
74
73
|
/**
|
|
75
74
|
* Executes the specified async function with the provided arguments and options.
|
|
76
75
|
*
|
package/src/async-function.js
CHANGED
|
@@ -92,10 +92,10 @@ export class AsyncFunction {
|
|
|
92
92
|
/**
|
|
93
93
|
* Creates an instance of the `AsyncFunction` class.
|
|
94
94
|
*
|
|
95
|
-
* @param {
|
|
95
|
+
* @param {AsyncFunctionLike<GArguments, GReturn>} call A call function, or an existing `AsyncFunction`, to be invoked, which defines the action to perform on invocation. If an `AsyncFunction` is provided, its underlying call function is reused instead of being wrapped.
|
|
96
96
|
*/
|
|
97
97
|
constructor(call) {
|
|
98
|
-
this.#call = call;
|
|
98
|
+
this.#call = call instanceof AsyncFunction ? call.#call : call;
|
|
99
99
|
}
|
|
100
100
|
/**
|
|
101
101
|
* Executes the specified async function with the provided arguments and options.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"async-function.js","sourceRoot":"","sources":["../../src/async-function.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,iBAAiB,CAAC;AAC3C,OAAO,EAA0B,MAAM,gCAAgC,CAAC;AACxE,OAAO,EAA0B,MAAM,gCAAgC,CAAC;AACxE,OAAO,EAA6B,MAAM,yDAAyD,CAAC;AACpG,OAAO,EAAmC,MAAM,wEAAwE,CAAC;AACzH,OAAO,EAA6C,MAAM,mEAAmE,CAAC;AAC9H,OAAO,EAA4C,MAAM,kEAAkE,CAAC;AAC5H,OAAO,EAAE,iDAAiD,EAAE,MAAM,mFAAmF,CAAC;AACtJ,OAAO,EAAE,gDAAgD,EAAE,MAAM,kFAAkF,CAAC;AACpJ,OAAO,EAAuC,MAAM,gEAAgE,CAAC;AACrH,OAAO,EAA+C,MAAM,8FAA8F,CAAC;AAE3J;;;;;GAKG;AACH,MAAM,OAAO,aAAa;IACxB;;;;;;;;;;;;;OAaG;IACH,MAAM,CAAC,EAAE,CACP,KAA6C;QAE7C,OAAO,KAAK,YAAY,aAAa,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,aAAa,CAAsB,KAAK,CAAC,CAAC;IAChG,CAAC;IAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;OAkCG;IACH,MAAM,CAAC,kBAAkB,CAAiD,EACxE,IAAI,EACJ,OAAO,GACqD;QAI5D,IAAI,GAAG,aAAa,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC;QAC9B,OAAO,GAAG,aAAa,CAAC,EAAE,CAAC,OAAO,CAAC,CAAC;QAEpC,OAAO,IAAI,aAAa,CACtB,KAAK,EAAE,MAAmB,EAAE,GAAG,IAAgB,EAAoB,EAAE;YACnE,MAAM,UAAU,GAAoB,IAAI,eAAe,EAAE,CAAC;YAC1D,MAAM,YAAY,GAAgB,WAAW,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC;YAC/E,IAAI,CAAC;gBACH,OAAO,CACL,MAAM,OAAO,CAAC,GAAG,CAAC;oBAChB,OAAO,CAAC,KAAK,CAAC,YAAY,EAAE,GAAG,IAAI,CAAC;oBACpC,IAAI,CAAC,KAAK,CAAC,YAAY,EAAE,GAAG,IAAI,CAAC;iBAClC,CAAC,CACH,CAAC,CAAC,CAAC,CAAC;YACP,CAAC;oBAAS,CAAC;gBACT,UAAU,CAAC,KAAK,EAAE,CAAC;YACrB,CAAC;QACH,CAAC,CACF,CAAC;IACJ,CAAC;IAED;;OAEG;IACM,KAAK,CAAyC;IAEvD;;;;OAIG;IACH,YAAY,IAA4C;QACtD,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC;
|
|
1
|
+
{"version":3,"file":"async-function.js","sourceRoot":"","sources":["../../src/async-function.ts"],"names":[],"mappings":"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"}
|