@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.
Files changed (78) hide show
  1. package/CHANGELOG.md +340 -0
  2. package/README.md +137 -548
  3. package/index.js +80 -35
  4. package/package.json +161 -33
  5. package/src/Arr.js +1050 -418
  6. package/src/Async.js +817 -0
  7. package/src/Cache.js +433 -0
  8. package/src/Checker.js +1202 -539
  9. package/src/Cli.js +1293 -0
  10. package/src/Color.js +556 -0
  11. package/src/Crypto.js +1082 -0
  12. package/src/Emitter.js +356 -0
  13. package/src/Env.js +689 -0
  14. package/src/FS.js +1626 -894
  15. package/src/Func.js +823 -356
  16. package/src/Http.js +700 -0
  17. package/src/Id.js +568 -200
  18. package/src/Logger.js +963 -378
  19. package/src/Num.js +965 -360
  20. package/src/Obj.js +1077 -379
  21. package/src/SQLite.js +1629 -1005
  22. package/src/Schema.js +2101 -0
  23. package/src/Str.js +1209 -432
  24. package/src/Sys.js +654 -0
  25. package/src/Time.js +1533 -440
  26. package/src/Utils.js +342 -325
  27. package/src/errors.js +335 -0
  28. package/src/internal/shared.js +415 -0
  29. package/types/index.d.ts +735 -526
  30. package/types/src/Arr.d.ts +533 -145
  31. package/types/src/Arr.d.ts.map +1 -1
  32. package/types/src/Async.d.ts +372 -0
  33. package/types/src/Async.d.ts.map +1 -0
  34. package/types/src/Cache.d.ts +221 -0
  35. package/types/src/Cache.d.ts.map +1 -0
  36. package/types/src/Checker.d.ts +651 -232
  37. package/types/src/Checker.d.ts.map +1 -1
  38. package/types/src/Cli.d.ts +664 -0
  39. package/types/src/Cli.d.ts.map +1 -0
  40. package/types/src/Color.d.ts +300 -0
  41. package/types/src/Color.d.ts.map +1 -0
  42. package/types/src/Crypto.d.ts +620 -0
  43. package/types/src/Crypto.d.ts.map +1 -0
  44. package/types/src/Emitter.d.ts +189 -0
  45. package/types/src/Emitter.d.ts.map +1 -0
  46. package/types/src/Env.d.ts +412 -0
  47. package/types/src/Env.d.ts.map +1 -0
  48. package/types/src/FS.d.ts +717 -238
  49. package/types/src/FS.d.ts.map +1 -1
  50. package/types/src/Func.d.ts +508 -135
  51. package/types/src/Func.d.ts.map +1 -1
  52. package/types/src/Http.d.ts +444 -0
  53. package/types/src/Http.d.ts.map +1 -0
  54. package/types/src/Id.d.ts +199 -66
  55. package/types/src/Id.d.ts.map +1 -1
  56. package/types/src/Logger.d.ts +414 -46
  57. package/types/src/Logger.d.ts.map +1 -1
  58. package/types/src/Num.d.ts +514 -137
  59. package/types/src/Num.d.ts.map +1 -1
  60. package/types/src/Obj.d.ts +453 -104
  61. package/types/src/Obj.d.ts.map +1 -1
  62. package/types/src/SQLite.d.ts +754 -308
  63. package/types/src/SQLite.d.ts.map +1 -1
  64. package/types/src/Schema.d.ts +1189 -0
  65. package/types/src/Schema.d.ts.map +1 -0
  66. package/types/src/Str.d.ts +617 -166
  67. package/types/src/Str.d.ts.map +1 -1
  68. package/types/src/Sys.d.ts +314 -0
  69. package/types/src/Sys.d.ts.map +1 -0
  70. package/types/src/Time.d.ts +759 -204
  71. package/types/src/Time.d.ts.map +1 -1
  72. package/types/src/Utils.d.ts +158 -102
  73. package/types/src/Utils.d.ts.map +1 -1
  74. package/types/src/errors.d.ts +316 -0
  75. package/types/src/errors.d.ts.map +1 -0
  76. package/types/src/internal/shared.d.ts +123 -0
  77. package/types/src/internal/shared.d.ts.map +1 -0
  78. package/types/index.d.ts.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"file":"Arr.d.ts","sourceRoot":"","sources":["../../src/Arr.js"],"names":[],"mappings":"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"}
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"}