@ix-xs/node-comfort 1.2.0 → 2.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/CHANGELOG.md +340 -0
- package/README.md +137 -548
- package/index.js +80 -35
- package/package.json +161 -33
- package/src/Arr.js +1050 -418
- package/src/Async.js +817 -0
- package/src/Cache.js +433 -0
- package/src/Checker.js +1202 -539
- package/src/Cli.js +1293 -0
- package/src/Color.js +556 -0
- package/src/Crypto.js +1082 -0
- package/src/Emitter.js +356 -0
- package/src/Env.js +689 -0
- package/src/FS.js +1626 -894
- package/src/Func.js +823 -356
- package/src/Http.js +700 -0
- package/src/Id.js +568 -200
- package/src/Logger.js +963 -378
- package/src/Num.js +965 -360
- package/src/Obj.js +1077 -379
- package/src/SQLite.js +1629 -1005
- package/src/Schema.js +2101 -0
- package/src/Str.js +1209 -432
- package/src/Sys.js +654 -0
- package/src/Time.js +1533 -440
- package/src/Utils.js +342 -325
- package/src/errors.js +335 -0
- package/src/internal/shared.js +415 -0
- package/types/index.d.ts +735 -526
- package/types/src/Arr.d.ts +533 -145
- package/types/src/Arr.d.ts.map +1 -1
- package/types/src/Async.d.ts +372 -0
- package/types/src/Async.d.ts.map +1 -0
- package/types/src/Cache.d.ts +221 -0
- package/types/src/Cache.d.ts.map +1 -0
- package/types/src/Checker.d.ts +651 -232
- package/types/src/Checker.d.ts.map +1 -1
- package/types/src/Cli.d.ts +664 -0
- package/types/src/Cli.d.ts.map +1 -0
- package/types/src/Color.d.ts +300 -0
- package/types/src/Color.d.ts.map +1 -0
- package/types/src/Crypto.d.ts +620 -0
- package/types/src/Crypto.d.ts.map +1 -0
- package/types/src/Emitter.d.ts +189 -0
- package/types/src/Emitter.d.ts.map +1 -0
- package/types/src/Env.d.ts +412 -0
- package/types/src/Env.d.ts.map +1 -0
- package/types/src/FS.d.ts +717 -238
- package/types/src/FS.d.ts.map +1 -1
- package/types/src/Func.d.ts +508 -135
- package/types/src/Func.d.ts.map +1 -1
- package/types/src/Http.d.ts +444 -0
- package/types/src/Http.d.ts.map +1 -0
- package/types/src/Id.d.ts +199 -66
- package/types/src/Id.d.ts.map +1 -1
- package/types/src/Logger.d.ts +414 -46
- package/types/src/Logger.d.ts.map +1 -1
- package/types/src/Num.d.ts +514 -137
- package/types/src/Num.d.ts.map +1 -1
- package/types/src/Obj.d.ts +453 -104
- package/types/src/Obj.d.ts.map +1 -1
- package/types/src/SQLite.d.ts +754 -308
- package/types/src/SQLite.d.ts.map +1 -1
- package/types/src/Schema.d.ts +1189 -0
- package/types/src/Schema.d.ts.map +1 -0
- package/types/src/Str.d.ts +617 -166
- package/types/src/Str.d.ts.map +1 -1
- package/types/src/Sys.d.ts +314 -0
- package/types/src/Sys.d.ts.map +1 -0
- package/types/src/Time.d.ts +759 -204
- package/types/src/Time.d.ts.map +1 -1
- package/types/src/Utils.d.ts +158 -102
- package/types/src/Utils.d.ts.map +1 -1
- package/types/src/errors.d.ts +316 -0
- package/types/src/errors.d.ts.map +1 -0
- package/types/src/internal/shared.d.ts +123 -0
- package/types/src/internal/shared.d.ts.map +1 -0
- package/types/index.d.ts.map +0 -1
package/types/src/Arr.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Arr.d.ts","sourceRoot":"","sources":["../../src/Arr.js"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"Arr.d.ts","sourceRoot":"","sources":["../../src/Arr.js"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,372 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Options for `map()`, `forEach()` and `filter()`.
|
|
3
|
+
*/
|
|
4
|
+
export type MapOptions = {
|
|
5
|
+
/**
|
|
6
|
+
* How many run at the same time. No limit by default.
|
|
7
|
+
*/
|
|
8
|
+
concurrency?: number | undefined;
|
|
9
|
+
/**
|
|
10
|
+
* Stop at the first error. With `false`, everything runs and you get an `AggregateError` of all failures. Defaults to `true`.
|
|
11
|
+
*/
|
|
12
|
+
stopOnError?: boolean | undefined;
|
|
13
|
+
/**
|
|
14
|
+
* Stops starting new work and rejects with an `AbortError`.
|
|
15
|
+
*/
|
|
16
|
+
signal?: AbortSignal | undefined;
|
|
17
|
+
};
|
|
18
|
+
/**
|
|
19
|
+
* A rate limiter from `rateLimit()`. Call it with a function to run it as
|
|
20
|
+
* soon as the rate allows.
|
|
21
|
+
*/
|
|
22
|
+
export type RateLimiter = (<T>(fn: () => T | PromiseLike<T>) => Promise<Awaited<T>>) & {
|
|
23
|
+
readonly pendingCount: number;
|
|
24
|
+
};
|
|
25
|
+
/**
|
|
26
|
+
* A limiter from `limit()`. Call it with a function to run it when there's room.
|
|
27
|
+
*/
|
|
28
|
+
export type Limiter = (<T>(fn: () => T | PromiseLike<T>) => Promise<Awaited<T>>) & {
|
|
29
|
+
readonly activeCount: number;
|
|
30
|
+
readonly pendingCount: number;
|
|
31
|
+
concurrency: number;
|
|
32
|
+
clearQueue(): void;
|
|
33
|
+
onIdle(): Promise<void>;
|
|
34
|
+
};
|
|
35
|
+
/**
|
|
36
|
+
* Options for `queue()`.
|
|
37
|
+
*/
|
|
38
|
+
export type QueueOptions = {
|
|
39
|
+
/**
|
|
40
|
+
* How many tasks run at the same time. Defaults to `1`.
|
|
41
|
+
*/
|
|
42
|
+
concurrency?: number | undefined;
|
|
43
|
+
/**
|
|
44
|
+
* Start right away. Defaults to `true`.
|
|
45
|
+
*/
|
|
46
|
+
autoStart?: boolean | undefined;
|
|
47
|
+
/**
|
|
48
|
+
* Time limit per task, like `"30s"`. A slower task rejects with a `TimeoutError`.
|
|
49
|
+
*/
|
|
50
|
+
timeout?: string | number | undefined;
|
|
51
|
+
};
|
|
52
|
+
/**
|
|
53
|
+
* Options for `queue.add()`.
|
|
54
|
+
*/
|
|
55
|
+
export type QueueAddOptions = {
|
|
56
|
+
/**
|
|
57
|
+
* Higher goes first; equal priorities keep their order. Defaults to `0`.
|
|
58
|
+
*/
|
|
59
|
+
priority?: number | undefined;
|
|
60
|
+
};
|
|
61
|
+
/**
|
|
62
|
+
* A queue from `queue()`.
|
|
63
|
+
*/
|
|
64
|
+
export type Queue = {
|
|
65
|
+
/**
|
|
66
|
+
* Adds a task; resolves with its result.
|
|
67
|
+
*/
|
|
68
|
+
add: <T>(task: () => T | PromiseLike<T>, options?: QueueAddOptions) => Promise<Awaited<T>>;
|
|
69
|
+
/**
|
|
70
|
+
* Adds several tasks; resolves with all results.
|
|
71
|
+
*/
|
|
72
|
+
addAll: <T>(tasks: Array<() => T | PromiseLike<T>>, options?: QueueAddOptions) => Promise<Array<Awaited<T>>>;
|
|
73
|
+
/**
|
|
74
|
+
* Stops starting tasks. Running ones finish.
|
|
75
|
+
*/
|
|
76
|
+
pause: () => Queue;
|
|
77
|
+
/**
|
|
78
|
+
* Starts again.
|
|
79
|
+
*/
|
|
80
|
+
start: () => Queue;
|
|
81
|
+
/**
|
|
82
|
+
* Drops the tasks that haven't started. Their promises never settle.
|
|
83
|
+
*/
|
|
84
|
+
clear: () => void;
|
|
85
|
+
/**
|
|
86
|
+
* Resolves when nothing is waiting or running.
|
|
87
|
+
*/
|
|
88
|
+
onIdle: () => Promise<void>;
|
|
89
|
+
/**
|
|
90
|
+
* Resolves when nothing is waiting.
|
|
91
|
+
*/
|
|
92
|
+
onEmpty: () => Promise<void>;
|
|
93
|
+
/**
|
|
94
|
+
* Tasks waiting.
|
|
95
|
+
*/
|
|
96
|
+
size: number;
|
|
97
|
+
/**
|
|
98
|
+
* Tasks running.
|
|
99
|
+
*/
|
|
100
|
+
pending: number;
|
|
101
|
+
isPaused: boolean;
|
|
102
|
+
/**
|
|
103
|
+
* Can be changed on the fly.
|
|
104
|
+
*/
|
|
105
|
+
concurrency: number;
|
|
106
|
+
};
|
|
107
|
+
/**
|
|
108
|
+
* A promise with its `resolve` and `reject`.
|
|
109
|
+
*/
|
|
110
|
+
export type Deferred<T> = {
|
|
111
|
+
promise: Promise<T>;
|
|
112
|
+
resolve: (value: T | PromiseLike<T>) => void;
|
|
113
|
+
reject: (reason?: unknown) => void;
|
|
114
|
+
/**
|
|
115
|
+
* Whether it's already resolved or rejected.
|
|
116
|
+
*/
|
|
117
|
+
settled: boolean;
|
|
118
|
+
};
|
|
119
|
+
/**
|
|
120
|
+
* What `settle()` returns.
|
|
121
|
+
*/
|
|
122
|
+
export type Settled<T> = {
|
|
123
|
+
/**
|
|
124
|
+
* Successful values, in order.
|
|
125
|
+
*/
|
|
126
|
+
fulfilled: T[];
|
|
127
|
+
/**
|
|
128
|
+
* Errors, in order.
|
|
129
|
+
*/
|
|
130
|
+
rejected: unknown[];
|
|
131
|
+
/**
|
|
132
|
+
* Everything, like `Promise.allSettled`.
|
|
133
|
+
*/
|
|
134
|
+
results: Array<PromiseSettledResult<T>>;
|
|
135
|
+
};
|
|
136
|
+
/**
|
|
137
|
+
* Options for `poll()`.
|
|
138
|
+
*/
|
|
139
|
+
export type PollOptions = {
|
|
140
|
+
/**
|
|
141
|
+
* Time between tries. Defaults to 100 ms.
|
|
142
|
+
*/
|
|
143
|
+
interval?: string | number | undefined;
|
|
144
|
+
/**
|
|
145
|
+
* Give up with a `TimeoutError` after this long.
|
|
146
|
+
*/
|
|
147
|
+
timeout?: string | number | undefined;
|
|
148
|
+
/**
|
|
149
|
+
* Stops with an `AbortError`.
|
|
150
|
+
*/
|
|
151
|
+
signal?: AbortSignal | undefined;
|
|
152
|
+
};
|
|
153
|
+
/**
|
|
154
|
+
* A mutex from `mutex()`.
|
|
155
|
+
*/
|
|
156
|
+
export type Mutex = {
|
|
157
|
+
/**
|
|
158
|
+
* Runs `fn` once no other `run` is in progress.
|
|
159
|
+
*/
|
|
160
|
+
run: <T>(fn: () => T | PromiseLike<T>) => Promise<Awaited<T>>;
|
|
161
|
+
/**
|
|
162
|
+
* Waits for the lock and gives you the function that releases it.
|
|
163
|
+
*/
|
|
164
|
+
lock: () => Promise<() => void>;
|
|
165
|
+
isLocked: boolean;
|
|
166
|
+
};
|
|
167
|
+
/**
|
|
168
|
+
* Waits for a while. Same as `nc.wait()`.
|
|
169
|
+
*
|
|
170
|
+
* @example
|
|
171
|
+
* await async.sleep("250ms");
|
|
172
|
+
*
|
|
173
|
+
* @param {number | string} duration
|
|
174
|
+
* @param {{ signal?: AbortSignal }} [options]
|
|
175
|
+
* @returns {Promise<void>}
|
|
176
|
+
*/
|
|
177
|
+
export function sleep(duration: number | string, options?: {
|
|
178
|
+
signal?: AbortSignal;
|
|
179
|
+
}): Promise<void>;
|
|
180
|
+
/**
|
|
181
|
+
* Maps items through an async function, with at most `concurrency` calls
|
|
182
|
+
* at once. Results stay in order. Items are taken from the source as slots
|
|
183
|
+
* free up, so a stream is never read faster than it's processed.
|
|
184
|
+
*
|
|
185
|
+
* @example
|
|
186
|
+
* const users = await async.map(ids, (id) => api.getUser(id), { concurrency: 10 });
|
|
187
|
+
* await async.forEach(readline.createInterface({ input }), importLine, { concurrency: 20 });
|
|
188
|
+
*
|
|
189
|
+
* @template T
|
|
190
|
+
* @template R
|
|
191
|
+
* @param {Iterable<T> | AsyncIterable<T>} items
|
|
192
|
+
* @param {(item: T, index: number) => R | PromiseLike<R>} fn
|
|
193
|
+
* @param {MapOptions} [options]
|
|
194
|
+
* @returns {Promise<Array<Awaited<R>>>}
|
|
195
|
+
* @throws The first error, an `AggregateError` with `stopOnError: false`, or an `AbortError`.
|
|
196
|
+
*/
|
|
197
|
+
export function map<T, R>(items: Iterable<T> | AsyncIterable<T>, fn: (item: T, index: number) => R | PromiseLike<R>, options?: MapOptions): Promise<Array<Awaited<R>>>;
|
|
198
|
+
/**
|
|
199
|
+
* Runs an async function for every item, with a concurrency limit.
|
|
200
|
+
*
|
|
201
|
+
* @example
|
|
202
|
+
* await async.forEach(images, (image) => optimize(image), { concurrency: 4 });
|
|
203
|
+
*
|
|
204
|
+
* @template T
|
|
205
|
+
* @param {Iterable<T> | AsyncIterable<T>} items
|
|
206
|
+
* @param {(item: T, index: number) => unknown} fn
|
|
207
|
+
* @param {MapOptions} [options]
|
|
208
|
+
* @returns {Promise<void>}
|
|
209
|
+
*/
|
|
210
|
+
export function forEach<T>(items: Iterable<T> | AsyncIterable<T>, fn: (item: T, index: number) => unknown, options?: MapOptions): Promise<void>;
|
|
211
|
+
/**
|
|
212
|
+
* Keeps the items that pass an async test, with a concurrency limit.
|
|
213
|
+
* Order is preserved.
|
|
214
|
+
*
|
|
215
|
+
* @example
|
|
216
|
+
* const alive = await async.filter(hosts, (host) => ping(host), { concurrency: 20 });
|
|
217
|
+
*
|
|
218
|
+
* @template T
|
|
219
|
+
* @param {Iterable<T> | AsyncIterable<T>} items
|
|
220
|
+
* @param {(item: T, index: number) => unknown} predicate
|
|
221
|
+
* @param {MapOptions} [options]
|
|
222
|
+
* @returns {Promise<T[]>}
|
|
223
|
+
*/
|
|
224
|
+
export function filter<T>(items: Iterable<T> | AsyncIterable<T>, predicate: (item: T, index: number) => unknown, options?: MapOptions): Promise<T[]>;
|
|
225
|
+
/**
|
|
226
|
+
* Runs async functions one after the other and returns their results.
|
|
227
|
+
*
|
|
228
|
+
* @example
|
|
229
|
+
* await async.series([() => migrateUsers(), () => migrateOrders()]);
|
|
230
|
+
*
|
|
231
|
+
* @template T
|
|
232
|
+
* @param {Iterable<() => T | PromiseLike<T>>} tasks
|
|
233
|
+
* @returns {Promise<Array<Awaited<T>>>}
|
|
234
|
+
*/
|
|
235
|
+
export function series<T>(tasks: Iterable<() => T | PromiseLike<T>>): Promise<Array<Awaited<T>>>;
|
|
236
|
+
/**
|
|
237
|
+
* Runs async functions at the same time, or a few at once with
|
|
238
|
+
* `concurrency`, and returns their results in order.
|
|
239
|
+
*
|
|
240
|
+
* @example
|
|
241
|
+
* const [users, posts] = await async.parallel([() => loadUsers(), () => loadPosts()]);
|
|
242
|
+
* await async.parallel(jobs, { concurrency: 4 });
|
|
243
|
+
*
|
|
244
|
+
* @template T
|
|
245
|
+
* @param {Iterable<() => T | PromiseLike<T>>} tasks
|
|
246
|
+
* @param {MapOptions} [options]
|
|
247
|
+
* @returns {Promise<Array<Awaited<T>>>}
|
|
248
|
+
*/
|
|
249
|
+
export function parallel<T>(tasks: Iterable<() => T | PromiseLike<T>>, options?: MapOptions): Promise<Array<Awaited<T>>>;
|
|
250
|
+
/**
|
|
251
|
+
* A limiter: wrap calls with it, and at most `concurrency` run at once
|
|
252
|
+
* while the rest wait their turn. Like `p-limit`.
|
|
253
|
+
*
|
|
254
|
+
* @example
|
|
255
|
+
* const limit = async.limit(3);
|
|
256
|
+
* const results = await Promise.all(urls.map((url) => limit(() => fetch(url))));
|
|
257
|
+
*
|
|
258
|
+
* @param {number} concurrency
|
|
259
|
+
* @returns {Limiter}
|
|
260
|
+
*/
|
|
261
|
+
export function limit(concurrency: number): Limiter;
|
|
262
|
+
/**
|
|
263
|
+
* A rate limiter: at most `max` calls start within any `interval`. Made
|
|
264
|
+
* for APIs that allow, say, 10 requests per second.
|
|
265
|
+
*
|
|
266
|
+
* @example
|
|
267
|
+
* const throttled = async.rateLimit(10, "1s");
|
|
268
|
+
* const pages = await Promise.all(ids.map((id) => throttled(() => api.get(`items/${id}`))));
|
|
269
|
+
*
|
|
270
|
+
* @param {number} max How many calls may start per interval.
|
|
271
|
+
* @param {number | string} interval The window, in ms or like `"1s"`.
|
|
272
|
+
* @returns {RateLimiter}
|
|
273
|
+
*/
|
|
274
|
+
export function rateLimit(max: number, interval: number | string): RateLimiter;
|
|
275
|
+
/**
|
|
276
|
+
* A task queue with a concurrency limit, priorities, pause and per-task
|
|
277
|
+
* timeouts.
|
|
278
|
+
*
|
|
279
|
+
* @example
|
|
280
|
+
* const jobs = async.queue({ concurrency: 2, timeout: "30s" });
|
|
281
|
+
* jobs.add(() => sendEmail(a));
|
|
282
|
+
* jobs.add(() => sendEmail(vip), { priority: 10 }); // jumps the line
|
|
283
|
+
* await jobs.onIdle();
|
|
284
|
+
*
|
|
285
|
+
* @param {QueueOptions} [options]
|
|
286
|
+
* @returns {Queue}
|
|
287
|
+
*/
|
|
288
|
+
export function queue(options?: QueueOptions): Queue;
|
|
289
|
+
/**
|
|
290
|
+
* A mutex: tasks given to `run()` never overlap. Put it around
|
|
291
|
+
* read-modify-write steps, like updating a file or refreshing a token.
|
|
292
|
+
*
|
|
293
|
+
* @example
|
|
294
|
+
* const lock = async.mutex();
|
|
295
|
+
* await lock.run(async () => {
|
|
296
|
+
* const data = nc.readJSON("./counter.json", { n: 0 });
|
|
297
|
+
* nc.writeJSON("./counter.json", { n: data.n + 1 });
|
|
298
|
+
* });
|
|
299
|
+
*
|
|
300
|
+
* @returns {Mutex}
|
|
301
|
+
*/
|
|
302
|
+
export function mutex(): Mutex;
|
|
303
|
+
/**
|
|
304
|
+
* A promise along with its `resolve` and `reject`. Handy to connect
|
|
305
|
+
* callbacks or events to `await`.
|
|
306
|
+
*
|
|
307
|
+
* @example
|
|
308
|
+
* const ready = async.deferred();
|
|
309
|
+
* socket.once("open", () => ready.resolve());
|
|
310
|
+
* await ready.promise;
|
|
311
|
+
*
|
|
312
|
+
* @template [T=void]
|
|
313
|
+
* @returns {Deferred<T>}
|
|
314
|
+
*/
|
|
315
|
+
export function deferred<T = void>(): Deferred<T>;
|
|
316
|
+
/**
|
|
317
|
+
* Waits for every promise and sorts successes from failures.
|
|
318
|
+
*
|
|
319
|
+
* @example
|
|
320
|
+
* const { fulfilled, rejected } = await async.settle(emails.map(send));
|
|
321
|
+
* nc.info(`${fulfilled.length} sent, ${rejected.length} failed`);
|
|
322
|
+
*
|
|
323
|
+
* @template T
|
|
324
|
+
* @param {Iterable<T | PromiseLike<T>>} promises
|
|
325
|
+
* @returns {Promise<Settled<Awaited<T>>>}
|
|
326
|
+
*/
|
|
327
|
+
export function settle<T>(promises: Iterable<T | PromiseLike<T>>): Promise<Settled<Awaited<T>>>;
|
|
328
|
+
/**
|
|
329
|
+
* Like `Promise.all`, for an object of promises.
|
|
330
|
+
*
|
|
331
|
+
* @example
|
|
332
|
+
* const { user, orders } = await async.props({ user: getUser(id), orders: getOrders(id) });
|
|
333
|
+
*
|
|
334
|
+
* @template {Record<string, unknown>} T
|
|
335
|
+
* @param {T} object
|
|
336
|
+
* @returns {Promise<{ [K in keyof T]: Awaited<T[K]> }>}
|
|
337
|
+
*/
|
|
338
|
+
export function props<T extends Record<string, unknown>>(object: T): Promise<{ [K in keyof T]: Awaited<T[K]>; }>;
|
|
339
|
+
/**
|
|
340
|
+
* Calls `fn` until it returns something truthy, and resolves with it.
|
|
341
|
+
* Errors count as "not yet".
|
|
342
|
+
*
|
|
343
|
+
* @example
|
|
344
|
+
* await async.poll(() => fetch(healthUrl).then((res) => res.ok), { interval: "500ms", timeout: "30s" });
|
|
345
|
+
*
|
|
346
|
+
* @template T
|
|
347
|
+
* @param {() => T | PromiseLike<T>} fn
|
|
348
|
+
* @param {PollOptions} [options]
|
|
349
|
+
* @returns {Promise<NonNullable<Awaited<T>>>}
|
|
350
|
+
* @throws {TimeoutError}
|
|
351
|
+
* @throws {AbortError}
|
|
352
|
+
*/
|
|
353
|
+
export function poll<T>(fn: () => T | PromiseLike<T>, options?: PollOptions): Promise<NonNullable<Awaited<T>>>;
|
|
354
|
+
/**
|
|
355
|
+
* Makes any promise give up when a signal fires. The work behind it keeps
|
|
356
|
+
* running unless it listens to the signal too.
|
|
357
|
+
*
|
|
358
|
+
* @example
|
|
359
|
+
* const controller = new AbortController();
|
|
360
|
+
* const rows = await async.abortable(slowQuery(), controller.signal);
|
|
361
|
+
*
|
|
362
|
+
* @template T
|
|
363
|
+
* @param {T | PromiseLike<T>} promise
|
|
364
|
+
* @param {AbortSignal} [signal]
|
|
365
|
+
* @returns {Promise<Awaited<T>>}
|
|
366
|
+
* @throws {AbortError} When the signal fires first.
|
|
367
|
+
*/
|
|
368
|
+
export function abortable<T>(promise: T | PromiseLike<T>, signal?: AbortSignal): Promise<Awaited<T>>;
|
|
369
|
+
import { retry } from "./Func.js";
|
|
370
|
+
import { timeout } from "./Func.js";
|
|
371
|
+
export { retry, timeout };
|
|
372
|
+
//# sourceMappingURL=Async.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Async.d.ts","sourceRoot":"","sources":["../../src/Async.js"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,221 @@
|
|
|
1
|
+
export = Cache;
|
|
2
|
+
/**
|
|
3
|
+
* An in-memory cache with a size limit and expiry.
|
|
4
|
+
*
|
|
5
|
+
* @template K
|
|
6
|
+
* @template V
|
|
7
|
+
*/
|
|
8
|
+
declare class Cache<K, V> {
|
|
9
|
+
/**
|
|
10
|
+
* @example
|
|
11
|
+
* const cache = new nc.Cache({ max: 500, ttl: "1h", updateAgeOnGet: true });
|
|
12
|
+
*
|
|
13
|
+
* @param {CacheOptions<K, V>} [options]
|
|
14
|
+
*/
|
|
15
|
+
constructor(options?: CacheOptions<K, V>);
|
|
16
|
+
/**
|
|
17
|
+
* Reads a value and marks it as recently used.
|
|
18
|
+
*
|
|
19
|
+
* @param {K} key
|
|
20
|
+
* @returns {V | undefined} `undefined` if missing or expired.
|
|
21
|
+
*/
|
|
22
|
+
get(key: K): V | undefined;
|
|
23
|
+
/**
|
|
24
|
+
* Reads a value without counting it as a use or touching the stats.
|
|
25
|
+
*
|
|
26
|
+
* @param {K} key
|
|
27
|
+
* @returns {V | undefined}
|
|
28
|
+
*/
|
|
29
|
+
peek(key: K): V | undefined;
|
|
30
|
+
/**
|
|
31
|
+
* Stores a value. When the cache is full, the least recently used entry
|
|
32
|
+
* goes. A value being loaded for this key by `getOrSet()` is not stored
|
|
33
|
+
* when it arrives: the one you set stays.
|
|
34
|
+
*
|
|
35
|
+
* @example
|
|
36
|
+
* cache.set("token", token, { ttl: "15m" });
|
|
37
|
+
*
|
|
38
|
+
* @param {K} key
|
|
39
|
+
* @param {V} value
|
|
40
|
+
* @param {CacheSetOptions} [options]
|
|
41
|
+
* @returns {this}
|
|
42
|
+
*/
|
|
43
|
+
set(key: K, value: V, options?: CacheSetOptions): this;
|
|
44
|
+
/**
|
|
45
|
+
* Returns the cached value, or calls `loader`, stores the result and
|
|
46
|
+
* returns it. Simultaneous calls for the same key share one `loader` call,
|
|
47
|
+
* and a failed load caches nothing.
|
|
48
|
+
*
|
|
49
|
+
* With `staleWhileRevalidate`, an entry that just expired is returned at
|
|
50
|
+
* once while a new value loads in the background, so callers never wait
|
|
51
|
+
* on a refresh.
|
|
52
|
+
*
|
|
53
|
+
* @example
|
|
54
|
+
* const profile = await cache.getOrSet(`profile:${id}`, () => api.fetchProfile(id), { ttl: "10m" });
|
|
55
|
+
* const rates = await cache.getOrSet("rates", fetchRates, { ttl: "1m", staleWhileRevalidate: "10m" });
|
|
56
|
+
*
|
|
57
|
+
* @param {K} key
|
|
58
|
+
* @param {() => V | PromiseLike<V>} loader
|
|
59
|
+
* @param {CacheSetOptions} [options]
|
|
60
|
+
* @returns {Promise<V>}
|
|
61
|
+
*/
|
|
62
|
+
getOrSet(key: K, loader: () => V | PromiseLike<V>, options?: CacheSetOptions): Promise<V>;
|
|
63
|
+
/**
|
|
64
|
+
* Is there a fresh entry for this key? Doesn't count as a use.
|
|
65
|
+
*
|
|
66
|
+
* @param {K} key
|
|
67
|
+
* @returns {boolean}
|
|
68
|
+
*/
|
|
69
|
+
has(key: K): boolean;
|
|
70
|
+
/**
|
|
71
|
+
* Removes an entry. A value being loaded for this key by `getOrSet()` is
|
|
72
|
+
* not stored when it arrives.
|
|
73
|
+
*
|
|
74
|
+
* @param {K} key
|
|
75
|
+
* @returns {boolean} `true` if there was one.
|
|
76
|
+
*/
|
|
77
|
+
delete(key: K): boolean;
|
|
78
|
+
/**
|
|
79
|
+
* Removes every entry. Stats are kept.
|
|
80
|
+
*
|
|
81
|
+
* @returns {void}
|
|
82
|
+
*/
|
|
83
|
+
clear(): void;
|
|
84
|
+
/**
|
|
85
|
+
* Removes expired entries now instead of waiting for them to be read.
|
|
86
|
+
*
|
|
87
|
+
* @returns {number} How many were removed.
|
|
88
|
+
*/
|
|
89
|
+
prune(): number;
|
|
90
|
+
/**
|
|
91
|
+
* Time left before an entry expires.
|
|
92
|
+
*
|
|
93
|
+
* @param {K} key
|
|
94
|
+
* @returns {number | undefined} Milliseconds, `Infinity` if it never expires, `undefined` if missing.
|
|
95
|
+
*/
|
|
96
|
+
ttl(key: K): number | undefined;
|
|
97
|
+
/**
|
|
98
|
+
* Wraps a function so its results are cached here.
|
|
99
|
+
*
|
|
100
|
+
* @example
|
|
101
|
+
* const getWeather = cache.wrap((city) => api.weather(city), { key: (city) => city.toLowerCase(), ttl: "30m" });
|
|
102
|
+
* await getWeather("Paris");
|
|
103
|
+
*
|
|
104
|
+
* @template {any[]} A
|
|
105
|
+
* @param {(...args: A) => V | PromiseLike<V>} fn
|
|
106
|
+
* @param {{ key?: (...args: A) => K } & CacheSetOptions} [options] `key` builds the cache key from the arguments. By default, primitives are compared by value and plain objects by content.
|
|
107
|
+
* @returns {(...args: A) => Promise<V>}
|
|
108
|
+
*/
|
|
109
|
+
wrap<A extends any[]>(fn: (...args: A) => V | PromiseLike<V>, options?: {
|
|
110
|
+
key?: (...args: A) => K;
|
|
111
|
+
} & CacheSetOptions): (...args: A) => Promise<V>;
|
|
112
|
+
/** Number of entries, including expired ones not yet removed. */
|
|
113
|
+
get size(): number;
|
|
114
|
+
/** Hit and miss counts. */
|
|
115
|
+
get stats(): CacheStats;
|
|
116
|
+
/**
|
|
117
|
+
* Puts every counter of `stats` back to zero.
|
|
118
|
+
*
|
|
119
|
+
* @returns {this}
|
|
120
|
+
*/
|
|
121
|
+
resetStats(): this;
|
|
122
|
+
/**
|
|
123
|
+
* Fresh keys, least recently used first.
|
|
124
|
+
* @returns {K[]}
|
|
125
|
+
*/
|
|
126
|
+
keys(): K[];
|
|
127
|
+
/**
|
|
128
|
+
* Fresh values, least recently used first.
|
|
129
|
+
* @returns {V[]}
|
|
130
|
+
*/
|
|
131
|
+
values(): V[];
|
|
132
|
+
/**
|
|
133
|
+
* Fresh `[key, value]` pairs, least recently used first.
|
|
134
|
+
* @returns {Array<[K, V]>}
|
|
135
|
+
*/
|
|
136
|
+
entries(): Array<[K, V]>;
|
|
137
|
+
/**
|
|
138
|
+
* Lets you write `for (const [key, value] of cache)`.
|
|
139
|
+
* @returns {IterableIterator<[K, V]>}
|
|
140
|
+
*/
|
|
141
|
+
[Symbol.iterator](): IterableIterator<[K, V]>;
|
|
142
|
+
#private;
|
|
143
|
+
}
|
|
144
|
+
declare namespace Cache {
|
|
145
|
+
export { CacheRemovalReason, CacheOptions, CacheSetOptions, CacheStats, CacheEntry };
|
|
146
|
+
}
|
|
147
|
+
/**
|
|
148
|
+
* Why an entry left the cache.
|
|
149
|
+
*/
|
|
150
|
+
type CacheRemovalReason = "evict" | "expire" | "delete" | "set" | "clear";
|
|
151
|
+
/**
|
|
152
|
+
* Options for `new Cache()`.
|
|
153
|
+
*/
|
|
154
|
+
type CacheOptions<K, V> = {
|
|
155
|
+
/**
|
|
156
|
+
* Maximum number of entries. When full, the least recently used goes. No limit by default.
|
|
157
|
+
*/
|
|
158
|
+
max?: number | undefined;
|
|
159
|
+
/**
|
|
160
|
+
* How long entries live, in ms or like `"10m"`. `0` means forever, the default.
|
|
161
|
+
*/
|
|
162
|
+
ttl?: string | number | undefined;
|
|
163
|
+
/**
|
|
164
|
+
* After an entry expires, `getOrSet()` may still return it for this long while it loads a new value in the background.
|
|
165
|
+
*/
|
|
166
|
+
staleWhileRevalidate?: string | number | undefined;
|
|
167
|
+
/**
|
|
168
|
+
* Reading an entry restarts its time to live.
|
|
169
|
+
*/
|
|
170
|
+
updateAgeOnGet?: boolean | undefined;
|
|
171
|
+
/**
|
|
172
|
+
* Called whenever an entry leaves the cache.
|
|
173
|
+
*/
|
|
174
|
+
onRemove?: ((key: K, value: V, reason: CacheRemovalReason) => void) | undefined;
|
|
175
|
+
};
|
|
176
|
+
/**
|
|
177
|
+
* Options for `set()` and `getOrSet()`.
|
|
178
|
+
*/
|
|
179
|
+
type CacheSetOptions = {
|
|
180
|
+
/**
|
|
181
|
+
* Time to live of this entry. `0` means forever.
|
|
182
|
+
*/
|
|
183
|
+
ttl?: string | number | undefined;
|
|
184
|
+
/**
|
|
185
|
+
* How long this entry can be served by `getOrSet()` after it expires, while a new value loads.
|
|
186
|
+
*/
|
|
187
|
+
staleWhileRevalidate?: string | number | undefined;
|
|
188
|
+
};
|
|
189
|
+
/**
|
|
190
|
+
* Cache stats.
|
|
191
|
+
*/
|
|
192
|
+
type CacheStats = {
|
|
193
|
+
/**
|
|
194
|
+
* Reads that found a usable entry.
|
|
195
|
+
*/
|
|
196
|
+
hits: number;
|
|
197
|
+
/**
|
|
198
|
+
* Reads that found nothing or an expired entry.
|
|
199
|
+
*/
|
|
200
|
+
misses: number;
|
|
201
|
+
sets: number;
|
|
202
|
+
/**
|
|
203
|
+
* Entries dropped because the cache was full.
|
|
204
|
+
*/
|
|
205
|
+
evictions: number;
|
|
206
|
+
/**
|
|
207
|
+
* Entries dropped because they expired.
|
|
208
|
+
*/
|
|
209
|
+
expirations: number;
|
|
210
|
+
/**
|
|
211
|
+
* From 0 to 1.
|
|
212
|
+
*/
|
|
213
|
+
hitRate: number;
|
|
214
|
+
};
|
|
215
|
+
type CacheEntry<V> = {
|
|
216
|
+
value: V;
|
|
217
|
+
expires: number;
|
|
218
|
+
ttl: number;
|
|
219
|
+
stale: number;
|
|
220
|
+
};
|
|
221
|
+
//# sourceMappingURL=Cache.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Cache.d.ts","sourceRoot":"","sources":["../../src/Cache.js"],"names":[],"mappings":";AA8DA;;;;;GAKG;AACH,oBAHa,CAAC,EACD,CAAC;IAsBZ;;;;;OAKG;IACH,sBAFW,YAAY,CAAC,CAAC,EAAE,CAAC,CAAC,EAQ5B;IA8CD;;;;;OAKG;IACH,SAHW,CAAC,GACC,CAAC,GAAG,SAAS,CAgBzB;IAED;;;;;OAKG;IACH,UAHW,CAAC,GACC,CAAC,GAAG,SAAS,CAIzB;IAED;;;;;;;;;;;;OAYG;IACH,SALW,CAAC,SACD,CAAC,YACD,eAAe,GACb,IAAI,CAwBhB;IAED;;;;;;;;;;;;;;;;;OAiBG;IACH,cALW,CAAC,UACD,MAAM,CAAC,GAAG,WAAW,CAAC,CAAC,CAAC,YACxB,eAAe,GACb,OAAO,CAAC,CAAC,CAAC,CAmBtB;IA8BD;;;;;OAKG;IACH,SAHW,CAAC,GACC,OAAO,CAInB;IAED;;;;;;OAMG;IACH,YAHW,CAAC,GACC,OAAO,CAQnB;IAED;;;;OAIG;IACH,SAFa,IAAI,CAKhB;IAED;;;;OAIG;IACH,SAFa,MAAM,CAYlB;IAED;;;;;OAKG;IACH,SAHW,CAAC,GACC,MAAM,GAAG,SAAS,CAM9B;IAED;;;;;;;;;;;OAWG;IACH,KALqB,CAAC,SAAR,GAAG,EAAG,MACT,CAAC,GAAG,IAAI,EAAE,CAAC,KAAK,CAAC,GAAG,WAAW,CAAC,CAAC,CAAC,YAClC;QAAE,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,EAAE,CAAC,KAAK,CAAC,CAAA;KAAE,GAAG,eAAe,GAC3C,CAAC,GAAG,IAAI,EAAE,CAAC,KAAK,OAAO,CAAC,CAAC,CAAC,CAQtC;IAED,iEAAiE;IACjE,mBAEC;IAED,2BAA2B;IAC3B,aAEoB,UAAU,CAC7B;IAED;;;;OAIG;IACH,cAFa,IAAI,CAKhB;IAgBD;;;OAGG;IACH,QAFa,CAAC,EAAE,CAIf;IAED;;;OAGG;IACH,UAFa,CAAC,EAAE,CAIf;IAED;;;OAGG;IACH,WAFa,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAIzB;IAED;;;OAGG;IACH,qBAFa,gBAAgB,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAIpC;;CACF;;;;;;;0BA7ZY,OAAO,GAAG,QAAQ,GAAG,QAAQ,GAAG,KAAK,GAAG,OAAO;;;;kBAK/C,CAAC,EACD,CAAC;;;;;;;;;;;;;;;;;;;;sBAMM,CAAC,SAAS,CAAC,UAAU,kBAAkB,KAAK,IAAI;;;;;;;;;;;;;;;;;;;;;;UAatD,MAAM;;;;YACN,MAAM;UACN,MAAM;;;;eACN,MAAM;;;;iBACN,MAAM;;;;aACN,MAAM;;gBAIP,CAAC,IACD;IAAE,KAAK,EAAE,CAAC,CAAC;IAAC,OAAO,EAAE,MAAM,CAAC;IAAC,GAAG,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE"}
|