@ix-xs/node-comfort 1.1.31 → 2.0.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 (77) hide show
  1. package/CHANGELOG.md +190 -0
  2. package/LICENSE +21 -0
  3. package/README.md +210 -748
  4. package/index.js +84 -13
  5. package/package.json +201 -21
  6. package/src/Arr.js +901 -0
  7. package/src/Async.js +585 -0
  8. package/src/Cache.js +329 -0
  9. package/src/Checker.js +979 -188
  10. package/src/Cli.js +1034 -0
  11. package/src/Color.js +415 -0
  12. package/src/Crypto.js +707 -0
  13. package/src/Emitter.js +289 -0
  14. package/src/Env.js +555 -0
  15. package/src/FS.js +1483 -768
  16. package/src/Func.js +692 -0
  17. package/src/Http.js +538 -0
  18. package/src/Id.js +418 -0
  19. package/src/Logger.js +739 -307
  20. package/src/Num.js +849 -0
  21. package/src/Obj.js +904 -0
  22. package/src/SQLite.js +1308 -994
  23. package/src/Schema.js +1586 -0
  24. package/src/Str.js +999 -0
  25. package/src/Sys.js +511 -0
  26. package/src/Time.js +1323 -0
  27. package/src/Utils.js +321 -325
  28. package/src/errors.js +292 -0
  29. package/types/index.d.ts +693 -120
  30. package/types/src/Arr.d.ts +562 -0
  31. package/types/src/Arr.d.ts.map +1 -0
  32. package/types/src/Async.d.ts +321 -0
  33. package/types/src/Async.d.ts.map +1 -0
  34. package/types/src/Cache.d.ts +195 -0
  35. package/types/src/Cache.d.ts.map +1 -0
  36. package/types/src/Checker.d.ts +609 -81
  37. package/types/src/Checker.d.ts.map +1 -1
  38. package/types/src/Cli.d.ts +582 -0
  39. package/types/src/Cli.d.ts.map +1 -0
  40. package/types/src/Color.d.ts +294 -0
  41. package/types/src/Color.d.ts.map +1 -0
  42. package/types/src/Crypto.d.ts +534 -0
  43. package/types/src/Crypto.d.ts.map +1 -0
  44. package/types/src/Emitter.d.ts +170 -0
  45. package/types/src/Emitter.d.ts.map +1 -0
  46. package/types/src/Env.d.ts +382 -0
  47. package/types/src/Env.d.ts.map +1 -0
  48. package/types/src/FS.d.ts +709 -201
  49. package/types/src/FS.d.ts.map +1 -1
  50. package/types/src/Func.d.ts +455 -0
  51. package/types/src/Func.d.ts.map +1 -0
  52. package/types/src/Http.d.ts +374 -0
  53. package/types/src/Http.d.ts.map +1 -0
  54. package/types/src/Id.d.ts +200 -0
  55. package/types/src/Id.d.ts.map +1 -0
  56. package/types/src/Logger.d.ts +374 -24
  57. package/types/src/Logger.d.ts.map +1 -1
  58. package/types/src/Num.d.ts +578 -0
  59. package/types/src/Num.d.ts.map +1 -0
  60. package/types/src/Obj.d.ts +475 -0
  61. package/types/src/Obj.d.ts.map +1 -0
  62. package/types/src/SQLite.d.ts +647 -305
  63. package/types/src/SQLite.d.ts.map +1 -1
  64. package/types/src/Schema.d.ts +940 -0
  65. package/types/src/Schema.d.ts.map +1 -0
  66. package/types/src/Str.d.ts +696 -0
  67. package/types/src/Str.d.ts.map +1 -0
  68. package/types/src/Sys.d.ts +269 -0
  69. package/types/src/Sys.d.ts.map +1 -0
  70. package/types/src/Time.d.ts +664 -0
  71. package/types/src/Time.d.ts.map +1 -0
  72. package/types/src/Utils.d.ts +154 -102
  73. package/types/src/Utils.d.ts.map +1 -1
  74. package/types/src/errors.d.ts +292 -0
  75. package/types/src/errors.d.ts.map +1 -0
  76. package/tsconfig.json +0 -18
  77. package/types/index.d.ts.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"file":"FS.d.ts","sourceRoot":"","sources":["../../src/FS.js"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"FS.d.ts","sourceRoot":"","sources":["../../src/FS.js"],"names":[],"mappings":"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"}
@@ -0,0 +1,455 @@
1
+ /**
2
+ * Options for `debounce()`.
3
+ */
4
+ export type DebounceOptions = {
5
+ /**
6
+ * Call right away at the start of a burst.
7
+ */
8
+ leading?: boolean | undefined;
9
+ /**
10
+ * Call once the burst is over. Defaults to `true`.
11
+ */
12
+ trailing?: boolean | undefined;
13
+ /**
14
+ * Never postpone a call longer than this, in ms, even if calls keep coming.
15
+ */
16
+ maxWait?: number | undefined;
17
+ };
18
+ /**
19
+ * A debounced function. `flush()` runs the pending call now, `cancel()`
20
+ * drops it, `pending()` tells you if there's one.
21
+ */
22
+ export type DebouncedFunction<F extends (...args: any[]) => any> = ((...args: Parameters<F>) => void) & {
23
+ cancel(): void;
24
+ flush(): void;
25
+ pending(): boolean;
26
+ };
27
+ /**
28
+ * Options for `throttle()`.
29
+ */
30
+ export type ThrottleOptions = {
31
+ /**
32
+ * Call right away on the first call. Defaults to `true`.
33
+ */
34
+ leading?: boolean | undefined;
35
+ /**
36
+ * Make a last call with the latest arguments at the end of the interval. Defaults to `true`.
37
+ */
38
+ trailing?: boolean | undefined;
39
+ };
40
+ /**
41
+ * A throttled function, with `cancel()`.
42
+ */
43
+ export type ThrottledFunction<F extends (...args: any[]) => any> = ((...args: Parameters<F>) => void) & {
44
+ cancel(): void;
45
+ };
46
+ /**
47
+ * Options for `memoize()`.
48
+ */
49
+ export type MemoizeOptions = {
50
+ /**
51
+ * Builds the cache key from the arguments. Defaults to the arguments as JSON.
52
+ */
53
+ resolver?: ((...args: any[]) => unknown) | undefined;
54
+ /**
55
+ * How long a result stays cached, in ms.
56
+ */
57
+ ttl?: number | undefined;
58
+ /**
59
+ * Maximum number of results; the least recently used goes first.
60
+ */
61
+ max?: number | undefined;
62
+ /**
63
+ * Keep rejected promises. By default they're dropped so the next call tries again.
64
+ */
65
+ cacheRejections?: boolean | undefined;
66
+ };
67
+ /**
68
+ * A memoized function, with its `cache`, `clear()` and `delete(...args)`.
69
+ */
70
+ export type MemoizedFunction<F extends (...args: any[]) => any> = F & {
71
+ cache: Map<unknown, {
72
+ value: ReturnType<F>;
73
+ expires: number;
74
+ }>;
75
+ clear(): void;
76
+ delete(...args: Parameters<F>): boolean;
77
+ };
78
+ /**
79
+ * Options for `retry()`.
80
+ */
81
+ export type RetryOptions = {
82
+ /**
83
+ * Total attempts, the first one included. Defaults to `3`.
84
+ */
85
+ attempts?: number | undefined;
86
+ /**
87
+ * Wait before the next attempt, in ms, or a function that computes it.
88
+ */
89
+ delay?: number | ((attempt: number, error: unknown) => number) | undefined;
90
+ /**
91
+ * Multiplies the delay after each failure: `2` gives 200, 400, 800... Defaults to `1`.
92
+ */
93
+ backoff?: number | undefined;
94
+ /**
95
+ * Cap for the computed delay, in ms.
96
+ */
97
+ maxDelay?: number | undefined;
98
+ /**
99
+ * Randomizes the delay, from `0` (none) to `1` (anywhere between 0 and 2x). Stops many clients from retrying in sync.
100
+ */
101
+ jitter?: number | undefined;
102
+ /**
103
+ * Return `false` to give up early, for example on a 4xx error.
104
+ */
105
+ shouldRetry?: ((error: unknown, attempt: number) => boolean | Promise<boolean>) | undefined;
106
+ /**
107
+ * Called before each wait, for logs or metrics.
108
+ */
109
+ onRetry?: ((error: unknown, attempt: number, delay: number) => void) | undefined;
110
+ /**
111
+ * Stops retrying. The attempt in progress isn't interrupted.
112
+ */
113
+ signal?: AbortSignal | undefined;
114
+ };
115
+ /**
116
+ * Waits for a pause of `wait` ms between calls, then runs once with the
117
+ * latest arguments. For search boxes, resizing, auto-saving...
118
+ *
119
+ * @example
120
+ * const search = func.debounce((query) => api.search(query), 300);
121
+ * input.on("input", (e) => search(e.target.value));
122
+ *
123
+ * const save = func.debounce(persist, 1000, { maxWait: 5000 }); // saves at least every 5s
124
+ *
125
+ * @template {(...args: any[]) => any} F
126
+ * @param {F} fn
127
+ * @param {number} wait Pause needed, in ms.
128
+ * @param {DebounceOptions} [options]
129
+ * @returns {DebouncedFunction<F>}
130
+ */
131
+ export function debounce<F extends (...args: any[]) => any>(fn: F, wait: number, options?: DebounceOptions): DebouncedFunction<F>;
132
+ /**
133
+ * Runs at most once every `wait` ms, however often it's called. For scroll
134
+ * handlers, progress reports, rate-limited APIs...
135
+ *
136
+ * @example
137
+ * const report = func.throttle((pct) => console.log(`${pct}%`), 1000);
138
+ *
139
+ * @template {(...args: any[]) => any} F
140
+ * @param {F} fn
141
+ * @param {number} wait Minimum gap between calls, in ms.
142
+ * @param {ThrottleOptions} [options]
143
+ * @returns {ThrottledFunction<F>}
144
+ */
145
+ export function throttle<F extends (...args: any[]) => any>(fn: F, wait: number, options?: ThrottleOptions): ThrottledFunction<F>;
146
+ /**
147
+ * Runs `fn` the first time only; later calls return the same result.
148
+ *
149
+ * @example
150
+ * const connect = func.once(() => createPool(config));
151
+ *
152
+ * @template {(...args: any[]) => any} F
153
+ * @param {F} fn
154
+ * @returns {F}
155
+ */
156
+ export function once<F extends (...args: any[]) => any>(fn: F): F;
157
+ /**
158
+ * Caches results by arguments. Supports expiry (`ttl`), a size limit
159
+ * (`max`) and async functions: a failed promise isn't cached, so the next
160
+ * call tries again.
161
+ *
162
+ * @example
163
+ * const getUser = func.memoize((id) => db.users.find(id), { ttl: 60_000, max: 1000 });
164
+ * getUser.delete(42); // forget one entry
165
+ * getUser.clear(); // forget everything
166
+ *
167
+ * @template {(...args: any[]) => any} F
168
+ * @param {F} fn
169
+ * @param {MemoizeOptions | ((...args: Parameters<F>) => unknown)} [options] Options, or a function that builds the cache key.
170
+ * @returns {MemoizedFunction<F>}
171
+ */
172
+ export function memoize<F extends (...args: any[]) => any>(fn: F, options?: MemoizeOptions | ((...args: Parameters<F>) => unknown)): MemoizedFunction<F>;
173
+ /**
174
+ * Calls `fn` until it succeeds, waiting between attempts. If every attempt
175
+ * fails, the last error is thrown.
176
+ *
177
+ * @example
178
+ * const data = await func.retry(() => fetchJSON(url), {
179
+ * attempts: 5,
180
+ * delay: 200,
181
+ * backoff: 2, // 200, 400, 800, 1600 ms
182
+ * shouldRetry: (error) => !(error instanceof nc.errors.HttpError && error.status < 500),
183
+ * });
184
+ *
185
+ * @template T
186
+ * @param {(attempt: number) => T | PromiseLike<T>} fn Receives the attempt number, starting at 1.
187
+ * @param {RetryOptions} [options]
188
+ * @returns {Promise<Awaited<T>>}
189
+ * @throws The last error, or an `AbortError` if the signal fires.
190
+ */
191
+ export function retry<T>(fn: (attempt: number) => T | PromiseLike<T>, options?: RetryOptions): Promise<Awaited<T>>;
192
+ /**
193
+ * Rejects with a `TimeoutError` if the promise takes longer than `ms`.
194
+ *
195
+ * @example
196
+ * const res = await func.timeout(fetch(url), 5000);
197
+ * const rows = await func.timeout(() => slowQuery(), 2000, "Database too slow");
198
+ *
199
+ * @template T
200
+ * @param {PromiseLike<T> | (() => PromiseLike<T> | T)} promise A promise, or a function that returns one.
201
+ * @param {number} ms
202
+ * @param {string} [message]
203
+ * @returns {Promise<Awaited<T>>}
204
+ * @throws {TimeoutError}
205
+ */
206
+ export function timeout<T>(promise: PromiseLike<T> | (() => PromiseLike<T> | T), ms: number, message?: string): Promise<Awaited<T>>;
207
+ /**
208
+ * Waits `ms`, then calls `fn` with the arguments and resolves with its result.
209
+ *
210
+ * @example
211
+ * await func.delay(() => console.log("1s later"), 1000);
212
+ *
213
+ * @template {(...args: any[]) => any} F
214
+ * @param {F} fn
215
+ * @param {number} ms
216
+ * @param {Parameters<F>} args
217
+ * @returns {Promise<Awaited<ReturnType<F>>>}
218
+ */
219
+ export function delay<F extends (...args: any[]) => any>(fn: F, ms: number, ...args: Parameters<F>): Promise<Awaited<ReturnType<F>>>;
220
+ /**
221
+ * Awaits a promise and gives you `[error, value]` instead of throwing, so
222
+ * you don't need a try/catch.
223
+ *
224
+ * @example
225
+ * const [error, user] = await func.to(db.users.find(id));
226
+ * if (error) return res.status(500).send(error.message);
227
+ *
228
+ * @template T
229
+ * @template [E=Error]
230
+ * @param {PromiseLike<T> | (() => PromiseLike<T> | T)} promise A promise, or a function (sync errors are caught too).
231
+ * @returns {Promise<[E, undefined] | [null, Awaited<T>]>}
232
+ */
233
+ export function to<T, E = Error>(promise: PromiseLike<T> | (() => PromiseLike<T> | T)): Promise<[E, undefined] | [null, Awaited<T>]>;
234
+ /**
235
+ * Wraps a function so it resolves to `[error, value]` instead of throwing.
236
+ *
237
+ * @example
238
+ * const safeParse = func.attempt(JSON.parse);
239
+ * const [error, data] = await safeParse(input);
240
+ *
241
+ * @template {(...args: any[]) => any} F
242
+ * @param {F} fn
243
+ * @returns {(...args: Parameters<F>) => Promise<[unknown, undefined] | [null, Awaited<ReturnType<F>>]>}
244
+ */
245
+ export function attempt<F extends (...args: any[]) => any>(fn: F): (...args: Parameters<F>) => Promise<[unknown, undefined] | [null, Awaited<ReturnType<F>>]>;
246
+ /**
247
+ * Turns a callback-style function into one that returns a promise.
248
+ *
249
+ * @example
250
+ * const lookup = func.promisify(dns.lookup);
251
+ * const address = await lookup("nodejs.org");
252
+ *
253
+ * @param {(...args: any[]) => void} fn
254
+ * @returns {(...args: any[]) => Promise<any>}
255
+ */
256
+ export function promisify(fn: (...args: any[]) => void): (...args: any[]) => Promise<any>;
257
+ /**
258
+ * Chains functions from left to right: `pipe(f, g)(x)` is `g(f(x))`.
259
+ * Types flow through up to 6 functions.
260
+ *
261
+ * @example
262
+ * const toSlug = func.pipe(nc.str.deburr, nc.str.kebabCase);
263
+ * toSlug("Crème Brûlée"); // "creme-brulee"
264
+ *
265
+ * @template {any[]} A
266
+ * @template B
267
+ * @overload
268
+ * @param {(...args: A) => B} f1
269
+ * @returns {(...args: A) => B}
270
+ */
271
+ export function pipe<A extends any[], B>(f1: (...args: A) => B): (...args: A) => B;
272
+ /**
273
+ * Chains functions from left to right.
274
+ *
275
+ * @template {any[]} A
276
+ * @template B
277
+ * @template C
278
+ * @overload
279
+ * @param {(...args: A) => B} f1
280
+ * @param {(b: B) => C} f2
281
+ * @returns {(...args: A) => C}
282
+ */
283
+ export function pipe<A extends any[], B, C>(f1: (...args: A) => B, f2: (b: B) => C): (...args: A) => C;
284
+ /**
285
+ * Chains functions from left to right.
286
+ *
287
+ * @template {any[]} A
288
+ * @template B
289
+ * @template C
290
+ * @template D
291
+ * @overload
292
+ * @param {(...args: A) => B} f1
293
+ * @param {(b: B) => C} f2
294
+ * @param {(c: C) => D} f3
295
+ * @returns {(...args: A) => D}
296
+ */
297
+ export function pipe<A extends any[], B, C, D>(f1: (...args: A) => B, f2: (b: B) => C, f3: (c: C) => D): (...args: A) => D;
298
+ /**
299
+ * Chains functions from left to right.
300
+ *
301
+ * @template {any[]} A
302
+ * @template B
303
+ * @template C
304
+ * @template D
305
+ * @template E
306
+ * @overload
307
+ * @param {(...args: A) => B} f1
308
+ * @param {(b: B) => C} f2
309
+ * @param {(c: C) => D} f3
310
+ * @param {(d: D) => E} f4
311
+ * @returns {(...args: A) => E}
312
+ */
313
+ export function pipe<A extends any[], B, C, D, E>(f1: (...args: A) => B, f2: (b: B) => C, f3: (c: C) => D, f4: (d: D) => E): (...args: A) => E;
314
+ /**
315
+ * Chains functions from left to right.
316
+ *
317
+ * @template {any[]} A
318
+ * @template B
319
+ * @template C
320
+ * @template D
321
+ * @template E
322
+ * @template F
323
+ * @overload
324
+ * @param {(...args: A) => B} f1
325
+ * @param {(b: B) => C} f2
326
+ * @param {(c: C) => D} f3
327
+ * @param {(d: D) => E} f4
328
+ * @param {(e: E) => F} f5
329
+ * @returns {(...args: A) => F}
330
+ */
331
+ export function pipe<A extends any[], B, C, D, E, F>(f1: (...args: A) => B, f2: (b: B) => C, f3: (c: C) => D, f4: (d: D) => E, f5: (e: E) => F): (...args: A) => F;
332
+ /**
333
+ * Chains functions from left to right.
334
+ *
335
+ * @template {any[]} A
336
+ * @template B
337
+ * @template C
338
+ * @template D
339
+ * @template E
340
+ * @template F
341
+ * @template G
342
+ * @overload
343
+ * @param {(...args: A) => B} f1
344
+ * @param {(b: B) => C} f2
345
+ * @param {(c: C) => D} f3
346
+ * @param {(d: D) => E} f4
347
+ * @param {(e: E) => F} f5
348
+ * @param {(f: F) => G} f6
349
+ * @returns {(...args: A) => G}
350
+ */
351
+ export function pipe<A extends any[], B, C, D, E, F, G>(f1: (...args: A) => B, f2: (b: B) => C, f3: (c: C) => D, f4: (d: D) => E, f5: (e: E) => F, f6: (f: F) => G): (...args: A) => G;
352
+ /**
353
+ * Chains any number of functions from left to right.
354
+ *
355
+ * @overload
356
+ * @param {...((arg: any) => any)} fns
357
+ * @returns {(...args: any[]) => any}
358
+ */
359
+ export function pipe(...fns: ((arg: any) => any)[]): (...args: any[]) => any;
360
+ /**
361
+ * Chains functions from right to left: `compose(f, g)(x)` is `f(g(x))`.
362
+ * `pipe()` reads in execution order and is better typed.
363
+ *
364
+ * @example
365
+ * const shout = func.compose((s) => s + "!", (s) => s.toUpperCase());
366
+ * shout("hi"); // "HI!"
367
+ *
368
+ * @param {...((...args: any[]) => any)} fns
369
+ * @returns {(...args: any[]) => any}
370
+ */
371
+ export function compose(...fns: ((...args: any[]) => any)[]): (...args: any[]) => any;
372
+ /**
373
+ * Lets you pass a function's arguments a few at a time.
374
+ *
375
+ * @example
376
+ * const add = func.curry((a, b, c) => a + b + c);
377
+ * add(1)(2)(3); // 6
378
+ * add(1, 2)(3); // 6
379
+ *
380
+ * @param {(...args: any[]) => any} fn
381
+ * @param {number} [arity=fn.length] How many arguments to collect before calling.
382
+ * @returns {(...args: any[]) => any}
383
+ */
384
+ export function curry(fn: (...args: any[]) => any, arity?: number): (...args: any[]) => any;
385
+ /**
386
+ * Fixes the first arguments of a function.
387
+ *
388
+ * @example
389
+ * const hello = func.partial((greeting, name) => `${greeting}, ${name}!`, "Hello");
390
+ * hello("Ada"); // "Hello, Ada!"
391
+ *
392
+ * @template {any[]} P
393
+ * @template {any[]} R
394
+ * @template T
395
+ * @param {(...args: [...P, ...R]) => T} fn
396
+ * @param {P} preset
397
+ * @returns {(...args: R) => T}
398
+ */
399
+ export function partial<P extends any[], R extends any[], T>(fn: (...args: [...P, ...R]) => T, ...preset: P): (...args: R) => T;
400
+ /**
401
+ * The opposite of a predicate.
402
+ *
403
+ * @example
404
+ * files.filter(func.negate((name) => name.startsWith(".")));
405
+ *
406
+ * @template {any[]} A
407
+ * @param {(...args: A) => unknown} predicate
408
+ * @returns {(...args: A) => boolean}
409
+ */
410
+ export function negate<A extends any[]>(predicate: (...args: A) => unknown): (...args: A) => boolean;
411
+ /**
412
+ * Does nothing for the first `n - 1` calls, then calls `fn` every time.
413
+ *
414
+ * @example
415
+ * const done = func.after(3, () => console.log("All 3 uploads finished"));
416
+ * uploads.forEach((upload) => upload.on("end", done));
417
+ *
418
+ * @template {(...args: any[]) => any} F
419
+ * @param {number} n
420
+ * @param {F} fn
421
+ * @returns {(...args: Parameters<F>) => ReturnType<F> | undefined}
422
+ */
423
+ export function after<F extends (...args: any[]) => any>(n: number, fn: F): (...args: Parameters<F>) => ReturnType<F> | undefined;
424
+ /**
425
+ * Calls `fn` for the first `n - 1` calls, then keeps returning the last
426
+ * result.
427
+ *
428
+ * @example
429
+ * const tryLogin = func.before(4, login); // 3 real attempts at most
430
+ *
431
+ * @template {(...args: any[]) => any} F
432
+ * @param {number} n
433
+ * @param {F} fn
434
+ * @returns {(...args: Parameters<F>) => ReturnType<F> | undefined}
435
+ */
436
+ export function before<F extends (...args: any[]) => any>(n: number, fn: F): (...args: Parameters<F>) => ReturnType<F> | undefined;
437
+ /**
438
+ * Does nothing. Useful as a default callback.
439
+ *
440
+ * @param {...unknown} _args
441
+ * @returns {void}
442
+ */
443
+ export function noop(..._args: unknown[]): void;
444
+ /**
445
+ * Returns its argument.
446
+ *
447
+ * @example
448
+ * [0, 1, 2].filter(func.identity); // [1, 2]
449
+ *
450
+ * @template T
451
+ * @param {T} value
452
+ * @returns {T}
453
+ */
454
+ export function identity<T>(value: T): T;
455
+ //# sourceMappingURL=Func.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Func.d.ts","sourceRoot":"","sources":["../../src/Func.js"],"names":[],"mappings":"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"}