@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.
- package/CHANGELOG.md +190 -0
- package/LICENSE +21 -0
- package/README.md +210 -748
- package/index.js +84 -13
- package/package.json +201 -21
- package/src/Arr.js +901 -0
- package/src/Async.js +585 -0
- package/src/Cache.js +329 -0
- package/src/Checker.js +979 -188
- 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 -768
- package/src/Func.js +692 -0
- package/src/Http.js +538 -0
- package/src/Id.js +418 -0
- package/src/Logger.js +739 -307
- package/src/Num.js +849 -0
- package/src/Obj.js +904 -0
- package/src/SQLite.js +1308 -994
- package/src/Schema.js +1586 -0
- package/src/Str.js +999 -0
- package/src/Sys.js +511 -0
- package/src/Time.js +1323 -0
- package/src/Utils.js +321 -325
- package/src/errors.js +292 -0
- package/types/index.d.ts +693 -120
- package/types/src/Arr.d.ts +562 -0
- package/types/src/Arr.d.ts.map +1 -0
- 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 +609 -81
- 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 +709 -201
- package/types/src/FS.d.ts.map +1 -1
- package/types/src/Func.d.ts +455 -0
- package/types/src/Func.d.ts.map +1 -0
- package/types/src/Http.d.ts +374 -0
- package/types/src/Http.d.ts.map +1 -0
- package/types/src/Id.d.ts +200 -0
- package/types/src/Id.d.ts.map +1 -0
- package/types/src/Logger.d.ts +374 -24
- package/types/src/Logger.d.ts.map +1 -1
- package/types/src/Num.d.ts +578 -0
- package/types/src/Num.d.ts.map +1 -0
- package/types/src/Obj.d.ts +475 -0
- package/types/src/Obj.d.ts.map +1 -0
- package/types/src/SQLite.d.ts +647 -305
- 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 +696 -0
- package/types/src/Str.d.ts.map +1 -0
- package/types/src/Sys.d.ts +269 -0
- package/types/src/Sys.d.ts.map +1 -0
- package/types/src/Time.d.ts +664 -0
- package/types/src/Time.d.ts.map +1 -0
- 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/tsconfig.json +0 -18
- package/types/index.d.ts.map +0 -1
|
@@ -0,0 +1,562 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* How to get a value out of an item: a property name, or a function
|
|
3
|
+
* `(item, index) => value`.
|
|
4
|
+
*/
|
|
5
|
+
export type Iteratee<T> = (T extends object ? keyof T & (string | number) : never) | ((item: T, index: number) => unknown);
|
|
6
|
+
/**
|
|
7
|
+
* A sort key for `sortBy()`: an iteratee, or `[iteratee, "asc" | "desc"]`
|
|
8
|
+
* to give that key its own direction.
|
|
9
|
+
*/
|
|
10
|
+
export type SortKey<T> = Iteratee<T> | [Iteratee<T>, "asc" | "desc"];
|
|
11
|
+
/**
|
|
12
|
+
* Options for `sortBy()`.
|
|
13
|
+
*/
|
|
14
|
+
export type SortByOptions = {
|
|
15
|
+
/**
|
|
16
|
+
* Direction for keys that don't set their own. Defaults to `"asc"`.
|
|
17
|
+
*/
|
|
18
|
+
order?: "asc" | "desc" | undefined;
|
|
19
|
+
/**
|
|
20
|
+
* Sort text like a person would: ignore case, respect accents, `"item2"` before `"item10"`.
|
|
21
|
+
*/
|
|
22
|
+
natural?: boolean | undefined;
|
|
23
|
+
/**
|
|
24
|
+
* Language used by `natural`. Defaults to the system's.
|
|
25
|
+
*/
|
|
26
|
+
locale?: string | undefined;
|
|
27
|
+
};
|
|
28
|
+
/**
|
|
29
|
+
* A page returned by `paginate()`.
|
|
30
|
+
*/
|
|
31
|
+
export type Page<T> = {
|
|
32
|
+
/**
|
|
33
|
+
* The items on this page.
|
|
34
|
+
*/
|
|
35
|
+
items: T[];
|
|
36
|
+
/**
|
|
37
|
+
* The page number, starting at 1.
|
|
38
|
+
*/
|
|
39
|
+
page: number;
|
|
40
|
+
perPage: number;
|
|
41
|
+
/**
|
|
42
|
+
* Total number of items.
|
|
43
|
+
*/
|
|
44
|
+
total: number;
|
|
45
|
+
/**
|
|
46
|
+
* Number of pages, at least 1.
|
|
47
|
+
*/
|
|
48
|
+
pages: number;
|
|
49
|
+
hasPrev: boolean;
|
|
50
|
+
hasNext: boolean;
|
|
51
|
+
};
|
|
52
|
+
/**
|
|
53
|
+
* Splits an array into groups of `size` items. The last group can be shorter.
|
|
54
|
+
*
|
|
55
|
+
* @example
|
|
56
|
+
* arr.chunk([1, 2, 3, 4, 5], 2); // [[1, 2], [3, 4], [5]]
|
|
57
|
+
* arr.chunk(emails, 100).forEach(sendBatch);
|
|
58
|
+
*
|
|
59
|
+
* @template T
|
|
60
|
+
* @param {readonly T[]} array
|
|
61
|
+
* @param {number} size
|
|
62
|
+
* @returns {T[][]}
|
|
63
|
+
*/
|
|
64
|
+
export function chunk<T>(array: readonly T[], size: number): T[][];
|
|
65
|
+
/**
|
|
66
|
+
* Sliding windows of `size` items, moving by `step`. Good for moving
|
|
67
|
+
* averages and comparing neighbours.
|
|
68
|
+
*
|
|
69
|
+
* @example
|
|
70
|
+
* arr.windows([1, 2, 3, 4], 2); // [[1, 2], [2, 3], [3, 4]]
|
|
71
|
+
* arr.windows([1, 2, 3, 4, 5], 3, 2); // [[1, 2, 3], [3, 4, 5]]
|
|
72
|
+
*
|
|
73
|
+
* @template T
|
|
74
|
+
* @param {readonly T[]} array
|
|
75
|
+
* @param {number} size
|
|
76
|
+
* @param {number} [step=1]
|
|
77
|
+
* @returns {T[][]}
|
|
78
|
+
*/
|
|
79
|
+
export function windows<T>(array: readonly T[], size: number, step?: number): T[][];
|
|
80
|
+
/**
|
|
81
|
+
* The first item, or the first `n` items.
|
|
82
|
+
*
|
|
83
|
+
* @example
|
|
84
|
+
* arr.first([1, 2, 3]); // 1
|
|
85
|
+
* arr.first([1, 2, 3], 2); // [1, 2]
|
|
86
|
+
*
|
|
87
|
+
* @template T
|
|
88
|
+
* @overload
|
|
89
|
+
* @param {readonly T[]} array
|
|
90
|
+
* @returns {T | undefined}
|
|
91
|
+
*/
|
|
92
|
+
export function first<T>(array: readonly T[]): T | undefined;
|
|
93
|
+
/**
|
|
94
|
+
* The first `n` items.
|
|
95
|
+
*
|
|
96
|
+
* @template T
|
|
97
|
+
* @overload
|
|
98
|
+
* @param {readonly T[]} array
|
|
99
|
+
* @param {number} n
|
|
100
|
+
* @returns {T[]}
|
|
101
|
+
*/
|
|
102
|
+
export function first<T>(array: readonly T[], n: number): T[];
|
|
103
|
+
/**
|
|
104
|
+
* The last item, or the last `n` items.
|
|
105
|
+
*
|
|
106
|
+
* @example
|
|
107
|
+
* arr.last([1, 2, 3]); // 3
|
|
108
|
+
* arr.last([1, 2, 3], 2); // [2, 3]
|
|
109
|
+
*
|
|
110
|
+
* @template T
|
|
111
|
+
* @overload
|
|
112
|
+
* @param {readonly T[]} array
|
|
113
|
+
* @returns {T | undefined}
|
|
114
|
+
*/
|
|
115
|
+
export function last<T>(array: readonly T[]): T | undefined;
|
|
116
|
+
/**
|
|
117
|
+
* The last `n` items.
|
|
118
|
+
*
|
|
119
|
+
* @template T
|
|
120
|
+
* @overload
|
|
121
|
+
* @param {readonly T[]} array
|
|
122
|
+
* @param {number} n
|
|
123
|
+
* @returns {T[]}
|
|
124
|
+
*/
|
|
125
|
+
export function last<T>(array: readonly T[], n: number): T[];
|
|
126
|
+
/**
|
|
127
|
+
* One page of an array, with what you need to draw pagination controls.
|
|
128
|
+
* Pages start at 1; an out-of-range page is brought back into range.
|
|
129
|
+
*
|
|
130
|
+
* @example
|
|
131
|
+
* arr.paginate(products, 2, 20);
|
|
132
|
+
* // { items: [...], page: 2, perPage: 20, total: 95, pages: 5, hasPrev: true, hasNext: true }
|
|
133
|
+
*
|
|
134
|
+
* @template T
|
|
135
|
+
* @param {readonly T[]} array
|
|
136
|
+
* @param {number} [page=1]
|
|
137
|
+
* @param {number} [perPage=20]
|
|
138
|
+
* @returns {Page<T>}
|
|
139
|
+
*/
|
|
140
|
+
export function paginate<T>(array: readonly T[], page?: number, perPage?: number): Page<T>;
|
|
141
|
+
/**
|
|
142
|
+
* Removes duplicates. With an iteratee, items that give the same value are
|
|
143
|
+
* duplicates; the first one is kept.
|
|
144
|
+
*
|
|
145
|
+
* @example
|
|
146
|
+
* arr.unique([1, 1, 2, 3]); // [1, 2, 3]
|
|
147
|
+
* arr.unique(users, "email"); // one user per email
|
|
148
|
+
* arr.unique(tags, (t) => t.toLowerCase());
|
|
149
|
+
*
|
|
150
|
+
* @template T
|
|
151
|
+
* @param {readonly T[]} array
|
|
152
|
+
* @param {Iteratee<T>} [iteratee]
|
|
153
|
+
* @returns {T[]}
|
|
154
|
+
*/
|
|
155
|
+
export function unique<T>(array: readonly T[], iteratee?: Iteratee<T>): T[];
|
|
156
|
+
/**
|
|
157
|
+
* Groups items by key.
|
|
158
|
+
*
|
|
159
|
+
* @example
|
|
160
|
+
* arr.groupBy(users, "role"); // { admin: [...], user: [...] }
|
|
161
|
+
* arr.groupBy([1, 2, 3, 4], (n) => (n % 2 ? "odd" : "even")); // { odd: [1, 3], even: [2, 4] }
|
|
162
|
+
*
|
|
163
|
+
* @template T
|
|
164
|
+
* @param {readonly T[]} array
|
|
165
|
+
* @param {Iteratee<T>} iteratee
|
|
166
|
+
* @returns {Record<string, T[]>}
|
|
167
|
+
*/
|
|
168
|
+
export function groupBy<T>(array: readonly T[], iteratee: Iteratee<T>): Record<string, T[]>;
|
|
169
|
+
/**
|
|
170
|
+
* Indexes items by key. If two items share a key, the last one wins.
|
|
171
|
+
*
|
|
172
|
+
* @example
|
|
173
|
+
* const byId = arr.keyBy(users, "id");
|
|
174
|
+
* byId[42]; // user 42
|
|
175
|
+
*
|
|
176
|
+
* @template T
|
|
177
|
+
* @param {readonly T[]} array
|
|
178
|
+
* @param {Iteratee<T>} iteratee
|
|
179
|
+
* @returns {Record<string, T>}
|
|
180
|
+
*/
|
|
181
|
+
export function keyBy<T>(array: readonly T[], iteratee: Iteratee<T>): Record<string, T>;
|
|
182
|
+
/**
|
|
183
|
+
* Builds a `Map` from an array. Unlike `keyBy()`, keys keep their type.
|
|
184
|
+
*
|
|
185
|
+
* @example
|
|
186
|
+
* arr.toMap(users, "id"); // Map<number, User>
|
|
187
|
+
* arr.toMap(users, "id", (u) => u.name); // Map<number, string>
|
|
188
|
+
*
|
|
189
|
+
* @template T
|
|
190
|
+
* @template [V=T]
|
|
191
|
+
* @param {readonly T[]} array
|
|
192
|
+
* @param {Iteratee<T>} key
|
|
193
|
+
* @param {(item: T, index: number) => V} [value] The value to store. Defaults to the item.
|
|
194
|
+
* @returns {Map<any, V>}
|
|
195
|
+
*/
|
|
196
|
+
export function toMap<T, V = T>(array: readonly T[], key: Iteratee<T>, value?: (item: T, index: number) => V): Map<any, V>;
|
|
197
|
+
/**
|
|
198
|
+
* Counts items per key.
|
|
199
|
+
*
|
|
200
|
+
* @example
|
|
201
|
+
* arr.countBy(["a", "b", "a"]); // { a: 2, b: 1 }
|
|
202
|
+
* arr.countBy(users, "country"); // { FR: 12, US: 7 }
|
|
203
|
+
*
|
|
204
|
+
* @template T
|
|
205
|
+
* @param {readonly T[]} array
|
|
206
|
+
* @param {Iteratee<T>} [iteratee] Defaults to the item itself.
|
|
207
|
+
* @returns {Record<string, number>}
|
|
208
|
+
*/
|
|
209
|
+
export function countBy<T>(array: readonly T[], iteratee?: Iteratee<T>): Record<string, number>;
|
|
210
|
+
/**
|
|
211
|
+
* Counts the items that pass a test.
|
|
212
|
+
*
|
|
213
|
+
* @example
|
|
214
|
+
* arr.count(users, (u) => u.active);
|
|
215
|
+
*
|
|
216
|
+
* @template T
|
|
217
|
+
* @param {readonly T[]} array
|
|
218
|
+
* @param {(item: T, index: number) => unknown} predicate
|
|
219
|
+
* @returns {number}
|
|
220
|
+
*/
|
|
221
|
+
export function count<T>(array: readonly T[], predicate: (item: T, index: number) => unknown): number;
|
|
222
|
+
/**
|
|
223
|
+
* Splits items into those that pass a test and those that don't.
|
|
224
|
+
*
|
|
225
|
+
* @example
|
|
226
|
+
* const [adults, minors] = arr.partition(people, (p) => p.age >= 18);
|
|
227
|
+
*
|
|
228
|
+
* @template T
|
|
229
|
+
* @param {readonly T[]} array
|
|
230
|
+
* @param {(item: T, index: number) => unknown} predicate
|
|
231
|
+
* @returns {[T[], T[]]}
|
|
232
|
+
*/
|
|
233
|
+
export function partition<T>(array: readonly T[], predicate: (item: T, index: number) => unknown): [T[], T[]];
|
|
234
|
+
/**
|
|
235
|
+
* Takes one property from every item.
|
|
236
|
+
*
|
|
237
|
+
* @example
|
|
238
|
+
* arr.pluck(users, "email"); // ["ada@x.io", "bob@x.io"]
|
|
239
|
+
*
|
|
240
|
+
* @template T
|
|
241
|
+
* @template {keyof T} K
|
|
242
|
+
* @param {readonly T[]} array
|
|
243
|
+
* @param {K} key
|
|
244
|
+
* @returns {Array<T[K]>}
|
|
245
|
+
*/
|
|
246
|
+
export function pluck<T, K extends keyof T>(array: readonly T[], key: K): Array<T[K]>;
|
|
247
|
+
/**
|
|
248
|
+
* Sorts by one or more keys, each with its own direction if you like.
|
|
249
|
+
* The sort is stable and `null`/`undefined` always go last.
|
|
250
|
+
*
|
|
251
|
+
* @example
|
|
252
|
+
* arr.sortBy(users, "age"); // youngest first
|
|
253
|
+
* arr.sortBy(users, "age", "desc"); // oldest first
|
|
254
|
+
* arr.sortBy(users, [["age", "desc"], "lastName"]);
|
|
255
|
+
* arr.sortBy(files, "name", { natural: true }); // "file2" before "file10"
|
|
256
|
+
*
|
|
257
|
+
* @template T
|
|
258
|
+
* @param {readonly T[]} array
|
|
259
|
+
* @param {SortKey<T> | Array<SortKey<T>>} keys
|
|
260
|
+
* @param {"asc" | "desc" | SortByOptions} [order="asc"]
|
|
261
|
+
* @returns {T[]}
|
|
262
|
+
*/
|
|
263
|
+
export function sortBy<T>(array: readonly T[], keys: SortKey<T> | Array<SortKey<T>>, order?: "asc" | "desc" | SortByOptions): T[];
|
|
264
|
+
/**
|
|
265
|
+
* A shuffled copy (Fisher-Yates).
|
|
266
|
+
*
|
|
267
|
+
* @template T
|
|
268
|
+
* @param {readonly T[]} array
|
|
269
|
+
* @returns {T[]}
|
|
270
|
+
*/
|
|
271
|
+
export function shuffle<T>(array: readonly T[]): T[];
|
|
272
|
+
/**
|
|
273
|
+
* One random item, or `undefined` if the array is empty.
|
|
274
|
+
*
|
|
275
|
+
* @template T
|
|
276
|
+
* @param {readonly T[]} array
|
|
277
|
+
* @returns {T | undefined}
|
|
278
|
+
*/
|
|
279
|
+
export function sample<T>(array: readonly T[]): T | undefined;
|
|
280
|
+
/**
|
|
281
|
+
* `n` random items, never the same one twice.
|
|
282
|
+
*
|
|
283
|
+
* @example
|
|
284
|
+
* arr.sampleSize(players, 3);
|
|
285
|
+
*
|
|
286
|
+
* @template T
|
|
287
|
+
* @param {readonly T[]} array
|
|
288
|
+
* @param {number} n
|
|
289
|
+
* @returns {T[]}
|
|
290
|
+
*/
|
|
291
|
+
export function sampleSize<T>(array: readonly T[], n: number): T[];
|
|
292
|
+
/**
|
|
293
|
+
* Rotates items. Positive `n` moves items from the start to the end,
|
|
294
|
+
* negative `n` the other way.
|
|
295
|
+
*
|
|
296
|
+
* @example
|
|
297
|
+
* arr.rotate([1, 2, 3, 4], 1); // [2, 3, 4, 1]
|
|
298
|
+
* arr.rotate([1, 2, 3, 4], -1); // [4, 1, 2, 3]
|
|
299
|
+
*
|
|
300
|
+
* @template T
|
|
301
|
+
* @param {readonly T[]} array
|
|
302
|
+
* @param {number} [n=1]
|
|
303
|
+
* @returns {T[]}
|
|
304
|
+
*/
|
|
305
|
+
export function rotate<T>(array: readonly T[], n?: number): T[];
|
|
306
|
+
/**
|
|
307
|
+
* Moves one item to another position. Negative indexes count from the end.
|
|
308
|
+
*
|
|
309
|
+
* @example
|
|
310
|
+
* arr.move(["a", "b", "c"], 0, 2); // ["b", "c", "a"]
|
|
311
|
+
*
|
|
312
|
+
* @template T
|
|
313
|
+
* @param {readonly T[]} array
|
|
314
|
+
* @param {number} from
|
|
315
|
+
* @param {number} to
|
|
316
|
+
* @returns {T[]}
|
|
317
|
+
*/
|
|
318
|
+
export function move<T>(array: readonly T[], from: number, to: number): T[];
|
|
319
|
+
/**
|
|
320
|
+
* Swaps two items.
|
|
321
|
+
*
|
|
322
|
+
* @example
|
|
323
|
+
* arr.swap(["a", "b", "c"], 0, 2); // ["c", "b", "a"]
|
|
324
|
+
*
|
|
325
|
+
* @template T
|
|
326
|
+
* @param {readonly T[]} array
|
|
327
|
+
* @param {number} i
|
|
328
|
+
* @param {number} j
|
|
329
|
+
* @returns {T[]}
|
|
330
|
+
*/
|
|
331
|
+
export function swap<T>(array: readonly T[], i: number, j: number): T[];
|
|
332
|
+
/**
|
|
333
|
+
* Items of `array` that appear in none of the others.
|
|
334
|
+
*
|
|
335
|
+
* @example
|
|
336
|
+
* arr.difference([1, 2, 3, 4], [2, 4]); // [1, 3]
|
|
337
|
+
*
|
|
338
|
+
* @template T
|
|
339
|
+
* @param {readonly T[]} array
|
|
340
|
+
* @param {...ReadonlyArray<T>} others
|
|
341
|
+
* @returns {T[]}
|
|
342
|
+
*/
|
|
343
|
+
export function difference<T>(array: readonly T[], ...others: ReadonlyArray<T>[]): T[];
|
|
344
|
+
/**
|
|
345
|
+
* Items present in every array, without duplicates.
|
|
346
|
+
*
|
|
347
|
+
* @example
|
|
348
|
+
* arr.intersection([1, 2, 3], [2, 3, 4], [3, 2]); // [2, 3]
|
|
349
|
+
*
|
|
350
|
+
* @template T
|
|
351
|
+
* @param {...ReadonlyArray<T>} arrays
|
|
352
|
+
* @returns {T[]}
|
|
353
|
+
*/
|
|
354
|
+
export function intersection<T>(...arrays: ReadonlyArray<T>[]): T[];
|
|
355
|
+
/**
|
|
356
|
+
* Items present in any array, without duplicates.
|
|
357
|
+
*
|
|
358
|
+
* @example
|
|
359
|
+
* arr.union([1, 2], [2, 3], [3, 4]); // [1, 2, 3, 4]
|
|
360
|
+
*
|
|
361
|
+
* @template T
|
|
362
|
+
* @param {...ReadonlyArray<T>} arrays
|
|
363
|
+
* @returns {T[]}
|
|
364
|
+
*/
|
|
365
|
+
export function union<T>(...arrays: ReadonlyArray<T>[]): T[];
|
|
366
|
+
/**
|
|
367
|
+
* A copy without the given values. `NaN` works too.
|
|
368
|
+
*
|
|
369
|
+
* @example
|
|
370
|
+
* arr.without([1, 2, 3, 2], 2); // [1, 3]
|
|
371
|
+
*
|
|
372
|
+
* @template T
|
|
373
|
+
* @param {readonly T[]} array
|
|
374
|
+
* @param {...T} values
|
|
375
|
+
* @returns {T[]}
|
|
376
|
+
*/
|
|
377
|
+
export function without<T>(array: readonly T[], ...values: T[]): T[];
|
|
378
|
+
/**
|
|
379
|
+
* A copy without the items that pass the test.
|
|
380
|
+
*
|
|
381
|
+
* @example
|
|
382
|
+
* arr.remove([1, 2, 3, 4], (n) => n % 2 === 0); // [1, 3]
|
|
383
|
+
*
|
|
384
|
+
* @template T
|
|
385
|
+
* @param {readonly T[]} array
|
|
386
|
+
* @param {(item: T, index: number) => unknown} predicate
|
|
387
|
+
* @returns {T[]}
|
|
388
|
+
*/
|
|
389
|
+
export function remove<T>(array: readonly T[], predicate: (item: T, index: number) => unknown): T[];
|
|
390
|
+
/**
|
|
391
|
+
* Removes falsy values (`false`, `null`, `undefined`, `0`, `""`, `NaN`).
|
|
392
|
+
*
|
|
393
|
+
* @example
|
|
394
|
+
* arr.compact([0, 1, false, 2, "", 3, null]); // [1, 2, 3]
|
|
395
|
+
*
|
|
396
|
+
* @template T
|
|
397
|
+
* @param {readonly T[]} array
|
|
398
|
+
* @returns {Array<Exclude<T, false | 0 | 0n | "" | null | undefined>>}
|
|
399
|
+
*/
|
|
400
|
+
export function compact<T>(array: readonly T[]): Array<Exclude<T, false | 0 | 0n | "" | null | undefined>>;
|
|
401
|
+
/**
|
|
402
|
+
* Adds the item if it's missing, removes it if it's there. Handy for
|
|
403
|
+
* multi-select state.
|
|
404
|
+
*
|
|
405
|
+
* @example
|
|
406
|
+
* arr.toggle(["a", "b"], "b"); // ["a"]
|
|
407
|
+
* arr.toggle(["a"], "b"); // ["a", "b"]
|
|
408
|
+
*
|
|
409
|
+
* @template T
|
|
410
|
+
* @param {readonly T[]} array
|
|
411
|
+
* @param {T} item
|
|
412
|
+
* @returns {T[]}
|
|
413
|
+
*/
|
|
414
|
+
export function toggle<T>(array: readonly T[], item: T): T[];
|
|
415
|
+
/**
|
|
416
|
+
* Replaces the item with the same identity, or appends it if there's none.
|
|
417
|
+
*
|
|
418
|
+
* @example
|
|
419
|
+
* arr.upsert(users, { id: 2, name: "Bob" }, "id");
|
|
420
|
+
*
|
|
421
|
+
* @template T
|
|
422
|
+
* @param {readonly T[]} array
|
|
423
|
+
* @param {T} item
|
|
424
|
+
* @param {Iteratee<T>} identity What makes two items "the same", like `"id"`.
|
|
425
|
+
* @returns {T[]}
|
|
426
|
+
*/
|
|
427
|
+
export function upsert<T>(array: readonly T[], item: T, identity: Iteratee<T>): T[];
|
|
428
|
+
/**
|
|
429
|
+
* Inserts items at an index. Negative indexes count from the end.
|
|
430
|
+
*
|
|
431
|
+
* @example
|
|
432
|
+
* arr.insert(["a", "d"], 1, "b", "c"); // ["a", "b", "c", "d"]
|
|
433
|
+
*
|
|
434
|
+
* @template T
|
|
435
|
+
* @param {readonly T[]} array
|
|
436
|
+
* @param {number} index
|
|
437
|
+
* @param {...T} items
|
|
438
|
+
* @returns {T[]}
|
|
439
|
+
*/
|
|
440
|
+
export function insert<T>(array: readonly T[], index: number, ...items: T[]): T[];
|
|
441
|
+
/**
|
|
442
|
+
* Flattens nested arrays, one level by default.
|
|
443
|
+
*
|
|
444
|
+
* @example
|
|
445
|
+
* arr.flatten([1, [2, [3, [4]]]]); // [1, 2, [3, [4]]]
|
|
446
|
+
* arr.flatten([1, [2, [3, [4]]]], Infinity); // [1, 2, 3, 4]
|
|
447
|
+
*
|
|
448
|
+
* @template T
|
|
449
|
+
* @template {number} [D=1]
|
|
450
|
+
* @param {readonly T[]} array
|
|
451
|
+
* @param {D} [depth]
|
|
452
|
+
* @returns {FlatArray<T[], D>[]}
|
|
453
|
+
*/
|
|
454
|
+
export function flatten<T, D extends number = 1>(array: readonly T[], depth?: D): FlatArray<T[], D>[];
|
|
455
|
+
/**
|
|
456
|
+
* Pairs items by position. Shorter arrays leave `undefined` holes.
|
|
457
|
+
*
|
|
458
|
+
* @example
|
|
459
|
+
* arr.zip(["a", "b"], [1, 2]); // [["a", 1], ["b", 2]]
|
|
460
|
+
*
|
|
461
|
+
* @template T
|
|
462
|
+
* @param {...ReadonlyArray<T>} arrays
|
|
463
|
+
* @returns {Array<Array<T | undefined>>}
|
|
464
|
+
*/
|
|
465
|
+
export function zip<T>(...arrays: ReadonlyArray<T>[]): Array<Array<T | undefined>>;
|
|
466
|
+
/**
|
|
467
|
+
* The opposite of `zip()`: rows become columns.
|
|
468
|
+
*
|
|
469
|
+
* @example
|
|
470
|
+
* arr.unzip([["a", 1], ["b", 2]]); // [["a", "b"], [1, 2]]
|
|
471
|
+
*
|
|
472
|
+
* @template T
|
|
473
|
+
* @param {ReadonlyArray<ReadonlyArray<T>>} tuples
|
|
474
|
+
* @returns {Array<Array<T | undefined>>}
|
|
475
|
+
*/
|
|
476
|
+
export function unzip<T>(tuples: ReadonlyArray<ReadonlyArray<T>>): Array<Array<T | undefined>>;
|
|
477
|
+
/**
|
|
478
|
+
* Takes items from each array in turn, then appends the rest.
|
|
479
|
+
*
|
|
480
|
+
* @example
|
|
481
|
+
* arr.interleave([1, 3, 5], [2, 4]); // [1, 2, 3, 4, 5]
|
|
482
|
+
*
|
|
483
|
+
* @template T
|
|
484
|
+
* @param {...ReadonlyArray<T>} arrays
|
|
485
|
+
* @returns {T[]}
|
|
486
|
+
*/
|
|
487
|
+
export function interleave<T>(...arrays: ReadonlyArray<T>[]): T[];
|
|
488
|
+
/**
|
|
489
|
+
* Every combination of one item from each array.
|
|
490
|
+
*
|
|
491
|
+
* @example
|
|
492
|
+
* arr.cartesian(["S", "M"], ["red", "blue"]);
|
|
493
|
+
* // [["S", "red"], ["S", "blue"], ["M", "red"], ["M", "blue"]]
|
|
494
|
+
*
|
|
495
|
+
* @template T
|
|
496
|
+
* @param {...ReadonlyArray<T>} arrays
|
|
497
|
+
* @returns {T[][]}
|
|
498
|
+
*/
|
|
499
|
+
export function cartesian<T>(...arrays: ReadonlyArray<T>[]): T[][];
|
|
500
|
+
/**
|
|
501
|
+
* An array of `n` items, from a value or a function of the index.
|
|
502
|
+
*
|
|
503
|
+
* @example
|
|
504
|
+
* arr.times(3, "x"); // ["x", "x", "x"]
|
|
505
|
+
* arr.times(3, (i) => i * 2); // [0, 2, 4]
|
|
506
|
+
*
|
|
507
|
+
* @template T
|
|
508
|
+
* @param {number} n
|
|
509
|
+
* @param {T | ((index: number) => T)} [value]
|
|
510
|
+
* @returns {T[]}
|
|
511
|
+
*/
|
|
512
|
+
export function times<T>(n: number, value?: T | ((index: number) => T)): T[];
|
|
513
|
+
/**
|
|
514
|
+
* Adds up a number from each item. Non-numbers count as 0.
|
|
515
|
+
*
|
|
516
|
+
* @example
|
|
517
|
+
* arr.sumBy(cart, "price");
|
|
518
|
+
* arr.sumBy(cart, (item) => item.price * item.quantity);
|
|
519
|
+
*
|
|
520
|
+
* @template T
|
|
521
|
+
* @param {readonly T[]} array
|
|
522
|
+
* @param {Iteratee<T>} [iteratee]
|
|
523
|
+
* @returns {number}
|
|
524
|
+
*/
|
|
525
|
+
export function sumBy<T>(array: readonly T[], iteratee?: Iteratee<T>): number;
|
|
526
|
+
/**
|
|
527
|
+
* The average of a number from each item, or `0` for an empty array.
|
|
528
|
+
*
|
|
529
|
+
* @example
|
|
530
|
+
* arr.averageBy(reviews, "rating"); // 4.3
|
|
531
|
+
*
|
|
532
|
+
* @template T
|
|
533
|
+
* @param {readonly T[]} array
|
|
534
|
+
* @param {Iteratee<T>} [iteratee]
|
|
535
|
+
* @returns {number}
|
|
536
|
+
*/
|
|
537
|
+
export function averageBy<T>(array: readonly T[], iteratee?: Iteratee<T>): number;
|
|
538
|
+
/**
|
|
539
|
+
* The item with the highest value.
|
|
540
|
+
*
|
|
541
|
+
* @example
|
|
542
|
+
* arr.maxBy(players, "score");
|
|
543
|
+
*
|
|
544
|
+
* @template T
|
|
545
|
+
* @param {readonly T[]} array
|
|
546
|
+
* @param {Iteratee<T>} [iteratee]
|
|
547
|
+
* @returns {T | undefined}
|
|
548
|
+
*/
|
|
549
|
+
export function maxBy<T>(array: readonly T[], iteratee?: Iteratee<T>): T | undefined;
|
|
550
|
+
/**
|
|
551
|
+
* The item with the lowest value.
|
|
552
|
+
*
|
|
553
|
+
* @example
|
|
554
|
+
* arr.minBy(products, "price");
|
|
555
|
+
*
|
|
556
|
+
* @template T
|
|
557
|
+
* @param {readonly T[]} array
|
|
558
|
+
* @param {Iteratee<T>} [iteratee]
|
|
559
|
+
* @returns {T | undefined}
|
|
560
|
+
*/
|
|
561
|
+
export function minBy<T>(array: readonly T[], iteratee?: Iteratee<T>): T | undefined;
|
|
562
|
+
//# sourceMappingURL=Arr.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Arr.d.ts","sourceRoot":"","sources":["../../src/Arr.js"],"names":[],"mappings":"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"}
|