@ix-xs/node-comfort 1.2.0 → 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.
- package/CHANGELOG.md +190 -0
- package/README.md +136 -549
- package/index.js +80 -35
- package/package.json +160 -33
- package/src/Arr.js +887 -419
- package/src/Async.js +585 -0
- package/src/Cache.js +329 -0
- package/src/Checker.js +971 -539
- package/src/Cli.js +1034 -0
- package/src/Color.js +415 -0
- package/src/Crypto.js +707 -0
- package/src/Emitter.js +289 -0
- package/src/Env.js +555 -0
- package/src/FS.js +1483 -894
- package/src/Func.js +670 -353
- package/src/Http.js +538 -0
- package/src/Id.js +384 -201
- package/src/Logger.js +739 -378
- package/src/Num.js +844 -361
- package/src/Obj.js +855 -372
- package/src/SQLite.js +1308 -1005
- package/src/Schema.js +1586 -0
- package/src/Str.js +983 -436
- package/src/Sys.js +511 -0
- package/src/Time.js +1260 -422
- package/src/Utils.js +321 -325
- package/src/errors.js +292 -0
- package/types/index.d.ts +693 -526
- package/types/src/Arr.d.ts +455 -145
- package/types/src/Arr.d.ts.map +1 -1
- package/types/src/Async.d.ts +321 -0
- package/types/src/Async.d.ts.map +1 -0
- package/types/src/Cache.d.ts +195 -0
- package/types/src/Cache.d.ts.map +1 -0
- package/types/src/Checker.d.ts +501 -235
- package/types/src/Checker.d.ts.map +1 -1
- package/types/src/Cli.d.ts +582 -0
- package/types/src/Cli.d.ts.map +1 -0
- package/types/src/Color.d.ts +294 -0
- package/types/src/Color.d.ts.map +1 -0
- package/types/src/Crypto.d.ts +534 -0
- package/types/src/Crypto.d.ts.map +1 -0
- package/types/src/Emitter.d.ts +170 -0
- package/types/src/Emitter.d.ts.map +1 -0
- package/types/src/Env.d.ts +382 -0
- package/types/src/Env.d.ts.map +1 -0
- package/types/src/FS.d.ts +686 -238
- package/types/src/FS.d.ts.map +1 -1
- package/types/src/Func.d.ts +380 -135
- package/types/src/Func.d.ts.map +1 -1
- package/types/src/Http.d.ts +374 -0
- package/types/src/Http.d.ts.map +1 -0
- package/types/src/Id.d.ts +149 -68
- package/types/src/Id.d.ts.map +1 -1
- package/types/src/Logger.d.ts +363 -46
- package/types/src/Logger.d.ts.map +1 -1
- package/types/src/Num.d.ts +473 -137
- package/types/src/Num.d.ts.map +1 -1
- package/types/src/Obj.d.ts +390 -104
- package/types/src/Obj.d.ts.map +1 -1
- package/types/src/SQLite.d.ts +646 -309
- package/types/src/SQLite.d.ts.map +1 -1
- package/types/src/Schema.d.ts +940 -0
- package/types/src/Schema.d.ts.map +1 -0
- package/types/src/Str.d.ts +569 -166
- package/types/src/Str.d.ts.map +1 -1
- package/types/src/Sys.d.ts +269 -0
- package/types/src/Sys.d.ts.map +1 -0
- package/types/src/Time.d.ts +663 -204
- package/types/src/Time.d.ts.map +1 -1
- package/types/src/Utils.d.ts +154 -102
- package/types/src/Utils.d.ts.map +1 -1
- package/types/src/errors.d.ts +292 -0
- package/types/src/errors.d.ts.map +1 -0
- package/types/index.d.ts.map +0 -1
package/types/src/FS.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"FS.d.ts","sourceRoot":"","sources":["../../src/FS.js"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"FS.d.ts","sourceRoot":"","sources":["../../src/FS.js"],"names":[],"mappings":"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"}
|
package/types/src/Func.d.ts
CHANGED
|
@@ -1,210 +1,455 @@
|
|
|
1
1
|
/**
|
|
2
|
-
*
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
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...
|
|
6
118
|
*
|
|
7
119
|
* @example
|
|
8
|
-
* const
|
|
9
|
-
*
|
|
10
|
-
*
|
|
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
|
|
11
124
|
*
|
|
12
125
|
* @template {(...args: any[]) => any} F
|
|
13
|
-
* @param {F} fn
|
|
14
|
-
* @param {number} wait
|
|
15
|
-
* @param {
|
|
16
|
-
* @returns {F
|
|
17
|
-
*/
|
|
18
|
-
export function debounce<F extends (...args: any[]) => any>(fn: F, wait: number, options?:
|
|
19
|
-
leading?: boolean;
|
|
20
|
-
}): F & {
|
|
21
|
-
cancel: () => void;
|
|
22
|
-
flush: () => void;
|
|
23
|
-
};
|
|
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>;
|
|
24
132
|
/**
|
|
25
|
-
*
|
|
26
|
-
*
|
|
133
|
+
* Runs at most once every `wait` ms, however often it's called. For scroll
|
|
134
|
+
* handlers, progress reports, rate-limited APIs...
|
|
27
135
|
*
|
|
28
136
|
* @example
|
|
29
|
-
* const
|
|
137
|
+
* const report = func.throttle((pct) => console.log(`${pct}%`), 1000);
|
|
30
138
|
*
|
|
31
139
|
* @template {(...args: any[]) => any} F
|
|
32
|
-
* @param {F} fn
|
|
33
|
-
* @param {number} wait
|
|
34
|
-
* @param {
|
|
35
|
-
* @returns {F
|
|
36
|
-
*/
|
|
37
|
-
export function throttle<F extends (...args: any[]) => any>(fn: F, wait: number, options?:
|
|
38
|
-
trailing?: boolean;
|
|
39
|
-
}): F & {
|
|
40
|
-
cancel: () => void;
|
|
41
|
-
};
|
|
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>;
|
|
42
146
|
/**
|
|
43
|
-
*
|
|
44
|
-
* the first result.
|
|
147
|
+
* Runs `fn` the first time only; later calls return the same result.
|
|
45
148
|
*
|
|
46
149
|
* @example
|
|
47
|
-
* const
|
|
150
|
+
* const connect = func.once(() => createPool(config));
|
|
48
151
|
*
|
|
49
152
|
* @template {(...args: any[]) => any} F
|
|
50
|
-
* @param {F} fn
|
|
51
|
-
* @returns {F}
|
|
153
|
+
* @param {F} fn
|
|
154
|
+
* @returns {F}
|
|
52
155
|
*/
|
|
53
156
|
export function once<F extends (...args: any[]) => any>(fn: F): F;
|
|
54
157
|
/**
|
|
55
|
-
*
|
|
56
|
-
*
|
|
57
|
-
*
|
|
58
|
-
* `resolver` for custom keys.
|
|
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.
|
|
59
161
|
*
|
|
60
162
|
* @example
|
|
61
|
-
* const
|
|
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
|
|
62
166
|
*
|
|
63
167
|
* @template {(...args: any[]) => any} F
|
|
64
|
-
* @param {F} fn
|
|
65
|
-
* @param {(...args:
|
|
66
|
-
* @returns {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>}
|
|
67
171
|
*/
|
|
68
|
-
export function memoize<F extends (...args: any[]) => any>(fn: F,
|
|
69
|
-
cache: Map<any, any>;
|
|
70
|
-
};
|
|
172
|
+
export function memoize<F extends (...args: any[]) => any>(fn: F, options?: MemoizeOptions | ((...args: Parameters<F>) => unknown)): MemoizedFunction<F>;
|
|
71
173
|
/**
|
|
72
|
-
*
|
|
73
|
-
*
|
|
74
|
-
* Supports fixed or exponential backoff and a `shouldRetry` guard.
|
|
174
|
+
* Calls `fn` until it succeeds, waiting between attempts. If every attempt
|
|
175
|
+
* fails, the last error is thrown.
|
|
75
176
|
*
|
|
76
177
|
* @example
|
|
77
|
-
* const data = await
|
|
178
|
+
* const data = await func.retry(() => fetchJSON(url), {
|
|
78
179
|
* attempts: 5,
|
|
79
180
|
* delay: 200,
|
|
80
|
-
* backoff: 2, // 200, 400, 800,
|
|
181
|
+
* backoff: 2, // 200, 400, 800, 1600 ms
|
|
182
|
+
* shouldRetry: (error) => !(error instanceof nc.errors.HttpError && error.status < 500),
|
|
81
183
|
* });
|
|
82
184
|
*
|
|
83
185
|
* @template T
|
|
84
|
-
* @param {() => T|
|
|
85
|
-
* @param {
|
|
86
|
-
*
|
|
87
|
-
*
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
*
|
|
92
|
-
*
|
|
93
|
-
* @
|
|
94
|
-
*
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
*
|
|
107
|
-
*
|
|
108
|
-
* @example
|
|
109
|
-
* await
|
|
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);
|
|
110
227
|
*
|
|
111
228
|
* @template T
|
|
112
|
-
* @
|
|
113
|
-
* @param {
|
|
114
|
-
* @
|
|
115
|
-
* @returns {Promise<T>} The resolved value.
|
|
116
|
-
* @throws {Error} If the timeout elapses first.
|
|
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>]>}
|
|
117
232
|
*/
|
|
118
|
-
export function
|
|
233
|
+
export function to<T, E = Error>(promise: PromiseLike<T> | (() => PromiseLike<T> | T)): Promise<[E, undefined] | [null, Awaited<T>]>;
|
|
119
234
|
/**
|
|
120
|
-
*
|
|
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");
|
|
121
252
|
*
|
|
122
|
-
*
|
|
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.
|
|
123
260
|
*
|
|
124
261
|
* @example
|
|
125
|
-
* const
|
|
126
|
-
*
|
|
127
|
-
*
|
|
128
|
-
*
|
|
129
|
-
*
|
|
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.
|
|
130
274
|
*
|
|
131
|
-
* @
|
|
132
|
-
* @
|
|
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}
|
|
133
358
|
*/
|
|
134
359
|
export function pipe(...fns: ((arg: any) => any)[]): (...args: any[]) => any;
|
|
135
360
|
/**
|
|
136
|
-
*
|
|
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.
|
|
137
363
|
*
|
|
138
364
|
* @example
|
|
139
|
-
* const
|
|
140
|
-
*
|
|
141
|
-
* (s) => s.trim(),
|
|
142
|
-
* );
|
|
143
|
-
* process(" hi "); // "HI"
|
|
365
|
+
* const shout = func.compose((s) => s + "!", (s) => s.toUpperCase());
|
|
366
|
+
* shout("hi"); // "HI!"
|
|
144
367
|
*
|
|
145
|
-
* @param {...((
|
|
146
|
-
* @returns {(...args: any[]) => any}
|
|
368
|
+
* @param {...((...args: any[]) => any)} fns
|
|
369
|
+
* @returns {(...args: any[]) => any}
|
|
147
370
|
*/
|
|
148
|
-
export function compose(...fns: ((
|
|
371
|
+
export function compose(...fns: ((...args: any[]) => any)[]): (...args: any[]) => any;
|
|
149
372
|
/**
|
|
150
|
-
*
|
|
373
|
+
* Lets you pass a function's arguments a few at a time.
|
|
151
374
|
*
|
|
152
375
|
* @example
|
|
153
|
-
* const add =
|
|
154
|
-
* add(1)(2)(3);
|
|
155
|
-
* add(1, 2)(3);
|
|
376
|
+
* const add = func.curry((a, b, c) => a + b + c);
|
|
377
|
+
* add(1)(2)(3); // 6
|
|
378
|
+
* add(1, 2)(3); // 6
|
|
156
379
|
*
|
|
157
|
-
* @param {(...args: any[]) => any} fn
|
|
158
|
-
* @param {number} [arity=fn.length]
|
|
159
|
-
* @returns {(...args: any[]) => any}
|
|
380
|
+
* @param {(...args: any[]) => any} fn
|
|
381
|
+
* @param {number} [arity=fn.length] How many arguments to collect before calling.
|
|
382
|
+
* @returns {(...args: any[]) => any}
|
|
160
383
|
*/
|
|
161
384
|
export function curry(fn: (...args: any[]) => any, arity?: number): (...args: any[]) => any;
|
|
162
385
|
/**
|
|
163
|
-
*
|
|
386
|
+
* Fixes the first arguments of a function.
|
|
164
387
|
*
|
|
165
388
|
* @example
|
|
166
|
-
* const
|
|
389
|
+
* const hello = func.partial((greeting, name) => `${greeting}, ${name}!`, "Hello");
|
|
390
|
+
* hello("Ada"); // "Hello, Ada!"
|
|
167
391
|
*
|
|
168
|
-
* @
|
|
169
|
-
* @
|
|
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}
|
|
170
398
|
*/
|
|
171
|
-
export function
|
|
399
|
+
export function partial<P extends any[], R extends any[], T>(fn: (...args: [...P, ...R]) => T, ...preset: P): (...args: R) => T;
|
|
172
400
|
/**
|
|
173
|
-
*
|
|
401
|
+
* The opposite of a predicate.
|
|
174
402
|
*
|
|
175
403
|
* @example
|
|
176
|
-
*
|
|
177
|
-
*
|
|
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));
|
|
178
417
|
*
|
|
179
418
|
* @template {(...args: any[]) => any} F
|
|
180
|
-
* @param {number} n
|
|
181
|
-
* @param {F} fn
|
|
182
|
-
* @returns {F
|
|
419
|
+
* @param {number} n
|
|
420
|
+
* @param {F} fn
|
|
421
|
+
* @returns {(...args: Parameters<F>) => ReturnType<F> | undefined}
|
|
183
422
|
*/
|
|
184
|
-
export function after<F extends (...args: any[]) => any>(n: number, fn: F): F;
|
|
423
|
+
export function after<F extends (...args: any[]) => any>(n: number, fn: F): (...args: Parameters<F>) => ReturnType<F> | undefined;
|
|
185
424
|
/**
|
|
186
|
-
*
|
|
187
|
-
*
|
|
425
|
+
* Calls `fn` for the first `n - 1` calls, then keeps returning the last
|
|
426
|
+
* result.
|
|
188
427
|
*
|
|
189
428
|
* @example
|
|
190
|
-
* const
|
|
191
|
-
* const data = await readFile("a.txt", "utf8");
|
|
429
|
+
* const tryLogin = func.before(4, login); // 3 real attempts at most
|
|
192
430
|
*
|
|
193
|
-
* @
|
|
194
|
-
* @
|
|
431
|
+
* @template {(...args: any[]) => any} F
|
|
432
|
+
* @param {number} n
|
|
433
|
+
* @param {F} fn
|
|
434
|
+
* @returns {(...args: Parameters<F>) => ReturnType<F> | undefined}
|
|
195
435
|
*/
|
|
196
|
-
export function
|
|
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;
|
|
197
444
|
/**
|
|
198
|
-
*
|
|
199
|
-
* of throwing • Go-style error handling.
|
|
445
|
+
* Returns its argument.
|
|
200
446
|
*
|
|
201
447
|
* @example
|
|
202
|
-
*
|
|
203
|
-
* if (err) return handle(err);
|
|
448
|
+
* [0, 1, 2].filter(func.identity); // [1, 2]
|
|
204
449
|
*
|
|
205
450
|
* @template T
|
|
206
|
-
* @param {
|
|
207
|
-
* @returns {
|
|
451
|
+
* @param {T} value
|
|
452
|
+
* @returns {T}
|
|
208
453
|
*/
|
|
209
|
-
export function
|
|
454
|
+
export function identity<T>(value: T): T;
|
|
210
455
|
//# sourceMappingURL=Func.d.ts.map
|
package/types/src/Func.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Func.d.ts","sourceRoot":"","sources":["../../src/Func.js"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"Func.d.ts","sourceRoot":"","sources":["../../src/Func.js"],"names":[],"mappings":"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"}
|