@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/Num.d.ts
CHANGED
|
@@ -1,242 +1,578 @@
|
|
|
1
1
|
/**
|
|
2
|
-
*
|
|
2
|
+
* Options for `formatBytes()`.
|
|
3
|
+
*/
|
|
4
|
+
export type FormatBytesOptions = {
|
|
5
|
+
/**
|
|
6
|
+
* Maximum decimals. Defaults to `1`.
|
|
7
|
+
*/
|
|
8
|
+
decimals?: number | undefined;
|
|
9
|
+
/**
|
|
10
|
+
* 1 KB is 1024 bytes when `true`, 1000 when `false`. Defaults to `true`.
|
|
11
|
+
*/
|
|
12
|
+
binary?: boolean | undefined;
|
|
13
|
+
/**
|
|
14
|
+
* Use `KiB`, `MiB`, `GiB` labels.
|
|
15
|
+
*/
|
|
16
|
+
iec?: boolean | undefined;
|
|
17
|
+
/**
|
|
18
|
+
* Formats the number for a language, like `"fr"` for `"1,5 KB"`.
|
|
19
|
+
*/
|
|
20
|
+
locale?: string | undefined;
|
|
21
|
+
/**
|
|
22
|
+
* Your own labels from bytes up, like `["o", "Ko", "Mo", "Go", "To"]`.
|
|
23
|
+
*/
|
|
24
|
+
units?: string[] | undefined;
|
|
25
|
+
};
|
|
26
|
+
/**
|
|
27
|
+
* Options for `parseBytes()`.
|
|
28
|
+
*/
|
|
29
|
+
export type ParseBytesOptions = {
|
|
30
|
+
/**
|
|
31
|
+
* 1 KB is 1024 bytes when `true`, 1000 when `false`. `KiB` units are always 1024. Defaults to `true`.
|
|
32
|
+
*/
|
|
33
|
+
binary?: boolean | undefined;
|
|
34
|
+
};
|
|
35
|
+
/**
|
|
36
|
+
* Options for `format()`.
|
|
37
|
+
*/
|
|
38
|
+
export type FormatNumberOptions = {
|
|
39
|
+
/**
|
|
40
|
+
* Language, like `"fr"` or `"en-US"`. Defaults to the one set with `setLocale()`, or `"en"`.
|
|
41
|
+
*/
|
|
42
|
+
locale?: string | undefined;
|
|
43
|
+
/**
|
|
44
|
+
* Exact number of decimals.
|
|
45
|
+
*/
|
|
46
|
+
decimals?: number | undefined;
|
|
47
|
+
/**
|
|
48
|
+
* Minimum decimals.
|
|
49
|
+
*/
|
|
50
|
+
minDecimals?: number | undefined;
|
|
51
|
+
/**
|
|
52
|
+
* Maximum decimals. Defaults to `3`.
|
|
53
|
+
*/
|
|
54
|
+
maxDecimals?: number | undefined;
|
|
55
|
+
/**
|
|
56
|
+
* Short notation like `1.2K` or `3.4M`.
|
|
57
|
+
*/
|
|
58
|
+
compact?: boolean | undefined;
|
|
59
|
+
/**
|
|
60
|
+
* `"percent"` multiplies by 100 and adds `%`.
|
|
61
|
+
*/
|
|
62
|
+
style?: "decimal" | "percent" | undefined;
|
|
63
|
+
/**
|
|
64
|
+
* Any `Intl` unit: `"kilometer"`, `"celsius"`, `"megabyte"`...
|
|
65
|
+
*/
|
|
66
|
+
unit?: string | undefined;
|
|
67
|
+
/**
|
|
68
|
+
* How the unit is written. Defaults to `"short"`.
|
|
69
|
+
*/
|
|
70
|
+
unitDisplay?: "long" | "short" | "narrow" | undefined;
|
|
71
|
+
/**
|
|
72
|
+
* When to show the sign. `"exceptZero"` gives `+5`.
|
|
73
|
+
*/
|
|
74
|
+
signDisplay?: "always" | "auto" | "never" | "exceptZero" | undefined;
|
|
75
|
+
/**
|
|
76
|
+
* Thousands separators. Defaults to `true`.
|
|
77
|
+
*/
|
|
78
|
+
grouping?: boolean | undefined;
|
|
79
|
+
};
|
|
80
|
+
/**
|
|
81
|
+
* Options for `currency()`.
|
|
82
|
+
*/
|
|
83
|
+
export type CurrencyOptions = {
|
|
84
|
+
/**
|
|
85
|
+
* Language. Defaults to the one set with `setLocale()`, or `"en"`.
|
|
86
|
+
*/
|
|
87
|
+
locale?: string | undefined;
|
|
88
|
+
/**
|
|
89
|
+
* Defaults to the currency's usual decimals (2 for EUR, 0 for JPY).
|
|
90
|
+
*/
|
|
91
|
+
decimals?: number | undefined;
|
|
92
|
+
/**
|
|
93
|
+
* `€`, `€`, `EUR` or `euros`. Defaults to `"symbol"`.
|
|
94
|
+
*/
|
|
95
|
+
display?: "symbol" | "code" | "name" | "narrowSymbol" | undefined;
|
|
96
|
+
/**
|
|
97
|
+
* Show negative amounts in parentheses, like `($5.00)`.
|
|
98
|
+
*/
|
|
99
|
+
accounting?: boolean | undefined;
|
|
100
|
+
};
|
|
101
|
+
/**
|
|
102
|
+
* Options for `ordinal()`.
|
|
103
|
+
*/
|
|
104
|
+
export type OrdinalOptions = {
|
|
105
|
+
/**
|
|
106
|
+
* Built in: `en`, `fr`, `es`, `it`, `pt`, `de`, `nl`. Defaults to the one set with `setLocale()`, or `"en"`.
|
|
107
|
+
*/
|
|
108
|
+
locale?: string | undefined;
|
|
109
|
+
/**
|
|
110
|
+
* Your own suffixes, for other languages.
|
|
111
|
+
*/
|
|
112
|
+
suffixes?: Partial<Record<Intl.LDMLPluralRule, string>> | undefined;
|
|
113
|
+
};
|
|
114
|
+
/**
|
|
115
|
+
* Options for `variance()` and `stdDev()`.
|
|
116
|
+
*/
|
|
117
|
+
export type VarianceOptions = {
|
|
118
|
+
/**
|
|
119
|
+
* Sample statistic (divides by n - 1) instead of population.
|
|
120
|
+
*/
|
|
121
|
+
sample?: boolean | undefined;
|
|
122
|
+
};
|
|
123
|
+
/**
|
|
124
|
+
* Sets the default language of `format`, `currency`, `percent`,
|
|
125
|
+
* `abbreviate`, `ordinal` and `formatBytes`.
|
|
126
|
+
*
|
|
127
|
+
* @example
|
|
128
|
+
* num.setLocale("fr");
|
|
129
|
+
* num.currency(1234.5, "EUR"); // "1 234,50 €"
|
|
130
|
+
*
|
|
131
|
+
* @param {string} locale Like `"fr"`, `"en-GB"` or `"pt-BR"`.
|
|
132
|
+
* @returns {typeof import("./Num")} The module, so calls chain.
|
|
133
|
+
*/
|
|
134
|
+
export function setLocale(locale: string): typeof import("./Num");
|
|
135
|
+
/**
|
|
136
|
+
* The current default language.
|
|
137
|
+
*
|
|
138
|
+
* @example
|
|
139
|
+
* num.getLocale(); // "en"
|
|
140
|
+
*
|
|
141
|
+
* @returns {string}
|
|
142
|
+
*/
|
|
143
|
+
export function getLocale(): string;
|
|
144
|
+
/**
|
|
145
|
+
* Keeps a number between `min` and `max`.
|
|
3
146
|
*
|
|
4
147
|
* @example
|
|
5
|
-
*
|
|
6
|
-
*
|
|
148
|
+
* num.clamp(150, 0, 100); // 100
|
|
149
|
+
* num.clamp(-5, 0, 100); // 0
|
|
7
150
|
*
|
|
8
|
-
* @param {number} value
|
|
9
|
-
* @param {number} min
|
|
10
|
-
* @param {number} max
|
|
11
|
-
* @returns {number}
|
|
151
|
+
* @param {number} value
|
|
152
|
+
* @param {number} min
|
|
153
|
+
* @param {number} max
|
|
154
|
+
* @returns {number}
|
|
12
155
|
*/
|
|
13
156
|
export function clamp(value: number, min: number, max: number): number;
|
|
14
157
|
/**
|
|
15
|
-
*
|
|
158
|
+
* Is the number between `min` and `max`, both included?
|
|
159
|
+
*
|
|
160
|
+
* @example
|
|
161
|
+
* num.inRange(10, 0, 10); // true
|
|
16
162
|
*
|
|
17
|
-
* @param {number} value
|
|
18
|
-
* @param {number} min
|
|
19
|
-
* @param {number} max
|
|
20
|
-
* @returns {boolean}
|
|
163
|
+
* @param {number} value
|
|
164
|
+
* @param {number} min
|
|
165
|
+
* @param {number} max
|
|
166
|
+
* @returns {boolean}
|
|
21
167
|
*/
|
|
22
168
|
export function inRange(value: number, min: number, max: number): boolean;
|
|
23
169
|
/**
|
|
24
|
-
*
|
|
170
|
+
* Wraps a number around a range, like an angle or a carousel index.
|
|
171
|
+
* `max` is excluded.
|
|
25
172
|
*
|
|
26
173
|
* @example
|
|
27
|
-
*
|
|
174
|
+
* num.wrap(370, 0, 360); // 10
|
|
175
|
+
* num.wrap(-1, 0, 5); // 4
|
|
28
176
|
*
|
|
29
|
-
* @param {number} value
|
|
30
|
-
* @param {number}
|
|
31
|
-
* @
|
|
177
|
+
* @param {number} value
|
|
178
|
+
* @param {number} min
|
|
179
|
+
* @param {number} max
|
|
180
|
+
* @returns {number}
|
|
181
|
+
*/
|
|
182
|
+
export function wrap(value: number, min: number, max: number): number;
|
|
183
|
+
/**
|
|
184
|
+
* Rounds to `decimals` places without floating-point surprises:
|
|
185
|
+
* `Math.round(1.005 * 100) / 100` gives `1`, this gives `1.01`. Halves round
|
|
186
|
+
* away from zero, like in a spreadsheet.
|
|
187
|
+
*
|
|
188
|
+
* @example
|
|
189
|
+
* num.round(1.005, 2); // 1.01
|
|
190
|
+
* num.round(1234, -2); // 1200
|
|
191
|
+
* num.round(-2.5); // -3
|
|
192
|
+
*
|
|
193
|
+
* @param {number} value
|
|
194
|
+
* @param {number} [decimals=0] Negative values round to tens, hundreds...
|
|
195
|
+
* @returns {number}
|
|
32
196
|
*/
|
|
33
197
|
export function round(value: number, decimals?: number): number;
|
|
34
198
|
/**
|
|
35
|
-
* Rounds
|
|
199
|
+
* Rounds down to `decimals` places.
|
|
200
|
+
*
|
|
201
|
+
* @example
|
|
202
|
+
* num.floor(1.789, 2); // 1.78
|
|
36
203
|
*
|
|
37
|
-
* @param {number} value
|
|
38
|
-
* @param {number} [decimals=0]
|
|
39
|
-
* @returns {number}
|
|
204
|
+
* @param {number} value
|
|
205
|
+
* @param {number} [decimals=0]
|
|
206
|
+
* @returns {number}
|
|
40
207
|
*/
|
|
41
208
|
export function floor(value: number, decimals?: number): number;
|
|
42
209
|
/**
|
|
43
|
-
* Rounds
|
|
210
|
+
* Rounds up to `decimals` places.
|
|
44
211
|
*
|
|
45
|
-
* @
|
|
46
|
-
*
|
|
47
|
-
*
|
|
212
|
+
* @example
|
|
213
|
+
* num.ceil(1.231, 2); // 1.24
|
|
214
|
+
*
|
|
215
|
+
* @param {number} value
|
|
216
|
+
* @param {number} [decimals=0]
|
|
217
|
+
* @returns {number}
|
|
48
218
|
*/
|
|
49
219
|
export function ceil(value: number, decimals?: number): number;
|
|
50
220
|
/**
|
|
51
|
-
*
|
|
221
|
+
* Rounds to the nearest multiple of `step`.
|
|
52
222
|
*
|
|
53
223
|
* @example
|
|
54
|
-
*
|
|
224
|
+
* num.snap(17, 5); // 15
|
|
225
|
+
* num.snap(0.37, 0.25); // 0.25
|
|
55
226
|
*
|
|
56
|
-
* @param {number}
|
|
57
|
-
* @param {number}
|
|
58
|
-
* @
|
|
59
|
-
* @returns {number} The interpolated value.
|
|
227
|
+
* @param {number} value
|
|
228
|
+
* @param {number} step
|
|
229
|
+
* @returns {number}
|
|
60
230
|
*/
|
|
61
|
-
export function
|
|
231
|
+
export function snap(value: number, step: number): number;
|
|
232
|
+
/**
|
|
233
|
+
* Are two numbers equal within a small tolerance? The right way to compare
|
|
234
|
+
* float results, since `0.1 + 0.2 === 0.3` is `false`.
|
|
235
|
+
*
|
|
236
|
+
* @example
|
|
237
|
+
* num.approxEqual(0.1 + 0.2, 0.3); // true
|
|
238
|
+
*
|
|
239
|
+
* @param {number} a
|
|
240
|
+
* @param {number} b
|
|
241
|
+
* @param {number} [epsilon=Number.EPSILON * 16] Allowed difference, relative to the size of the numbers.
|
|
242
|
+
* @returns {boolean}
|
|
243
|
+
*/
|
|
244
|
+
export function approxEqual(a: number, b: number, epsilon?: number): boolean;
|
|
62
245
|
/**
|
|
63
|
-
*
|
|
246
|
+
* The value at ratio `t` between `start` and `end`.
|
|
64
247
|
*
|
|
65
248
|
* @example
|
|
66
|
-
*
|
|
249
|
+
* num.lerp(0, 100, 0.25); // 25
|
|
67
250
|
*
|
|
68
|
-
* @param {number}
|
|
69
|
-
* @param {number}
|
|
70
|
-
* @param {number}
|
|
71
|
-
* @
|
|
72
|
-
|
|
73
|
-
|
|
251
|
+
* @param {number} start
|
|
252
|
+
* @param {number} end
|
|
253
|
+
* @param {number} t Usually between 0 and 1.
|
|
254
|
+
* @returns {number}
|
|
255
|
+
*/
|
|
256
|
+
export function lerp(start: number, end: number, t: number): number;
|
|
257
|
+
/**
|
|
258
|
+
* Moves a number from one range to another, keeping its relative position.
|
|
259
|
+
*
|
|
260
|
+
* @example
|
|
261
|
+
* num.mapRange(5, 0, 10, 0, 100); // 50
|
|
262
|
+
* num.mapRange(75, 0, 100, 1, 0); // 0.25
|
|
263
|
+
*
|
|
264
|
+
* @param {number} value
|
|
265
|
+
* @param {number} inMin
|
|
266
|
+
* @param {number} inMax
|
|
267
|
+
* @param {number} outMin
|
|
268
|
+
* @param {number} outMax
|
|
269
|
+
* @returns {number}
|
|
74
270
|
*/
|
|
75
271
|
export function mapRange(value: number, inMin: number, inMax: number, outMin: number, outMax: number): number;
|
|
76
272
|
/**
|
|
77
|
-
*
|
|
273
|
+
* A random float from `min` (included) to `max` (excluded). Not for
|
|
274
|
+
* security: it uses `Math.random`.
|
|
78
275
|
*
|
|
79
|
-
*
|
|
276
|
+
* @example
|
|
277
|
+
* num.random(10, 20); // 13.84...
|
|
80
278
|
*
|
|
81
|
-
* @param {number} [min=0]
|
|
82
|
-
* @param {number} [max=1]
|
|
83
|
-
* @returns {number}
|
|
279
|
+
* @param {number} [min=0]
|
|
280
|
+
* @param {number} [max=1]
|
|
281
|
+
* @returns {number}
|
|
84
282
|
*/
|
|
85
283
|
export function random(min?: number, max?: number): number;
|
|
86
284
|
/**
|
|
87
|
-
*
|
|
285
|
+
* A random integer from `min` to `max`, both included. Not for security.
|
|
88
286
|
*
|
|
89
287
|
* @example
|
|
90
|
-
*
|
|
288
|
+
* num.randomInt(1, 6); // a dice roll
|
|
91
289
|
*
|
|
92
|
-
* @param {number} min
|
|
93
|
-
* @param {number} max
|
|
94
|
-
* @returns {number}
|
|
290
|
+
* @param {number} min
|
|
291
|
+
* @param {number} max
|
|
292
|
+
* @returns {number}
|
|
95
293
|
*/
|
|
96
294
|
export function randomInt(min: number, max: number): number;
|
|
97
295
|
/**
|
|
98
|
-
*
|
|
296
|
+
* Adds up numbers.
|
|
99
297
|
*
|
|
100
|
-
* @
|
|
101
|
-
*
|
|
298
|
+
* @example
|
|
299
|
+
* num.sum([1, 2, 3]); // 6
|
|
300
|
+
*
|
|
301
|
+
* @param {Iterable<number>} values
|
|
302
|
+
* @returns {number}
|
|
102
303
|
*/
|
|
103
|
-
export function sum(values: number
|
|
304
|
+
export function sum(values: Iterable<number>): number;
|
|
104
305
|
/**
|
|
105
|
-
*
|
|
306
|
+
* The mean, or `0` for an empty list.
|
|
307
|
+
*
|
|
308
|
+
* @example
|
|
309
|
+
* num.average([2, 4, 9]); // 5
|
|
106
310
|
*
|
|
107
|
-
* @param {number
|
|
108
|
-
* @returns {number}
|
|
311
|
+
* @param {Iterable<number>} values
|
|
312
|
+
* @returns {number}
|
|
109
313
|
*/
|
|
110
|
-
export function average(values: number
|
|
314
|
+
export function average(values: Iterable<number>): number;
|
|
111
315
|
/**
|
|
112
|
-
*
|
|
316
|
+
* The middle value once sorted, or `0` for an empty list.
|
|
113
317
|
*
|
|
114
|
-
* @
|
|
115
|
-
*
|
|
318
|
+
* @example
|
|
319
|
+
* num.median([3, 1, 2]); // 2
|
|
320
|
+
* num.median([1, 2, 3, 4]); // 2.5
|
|
321
|
+
*
|
|
322
|
+
* @param {Iterable<number>} values
|
|
323
|
+
* @returns {number}
|
|
116
324
|
*/
|
|
117
|
-
export function median(values: number
|
|
325
|
+
export function median(values: Iterable<number>): number;
|
|
118
326
|
/**
|
|
119
|
-
*
|
|
327
|
+
* The most frequent values.
|
|
328
|
+
*
|
|
329
|
+
* @example
|
|
330
|
+
* num.mode([1, 1, 2, 2, 3]); // [1, 2]
|
|
120
331
|
*
|
|
121
|
-
* @param {number
|
|
122
|
-
* @returns {number
|
|
332
|
+
* @param {Iterable<number>} values
|
|
333
|
+
* @returns {number[]}
|
|
123
334
|
*/
|
|
124
|
-
export function
|
|
335
|
+
export function mode(values: Iterable<number>): number[];
|
|
125
336
|
/**
|
|
126
|
-
*
|
|
337
|
+
* The variance: the average squared distance from the mean.
|
|
338
|
+
*
|
|
339
|
+
* @example
|
|
340
|
+
* num.variance([2, 4, 4, 4, 5, 5, 7, 9]); // 4
|
|
127
341
|
*
|
|
128
|
-
* @param {number
|
|
129
|
-
* @
|
|
342
|
+
* @param {Iterable<number>} values
|
|
343
|
+
* @param {VarianceOptions} [options]
|
|
344
|
+
* @returns {number}
|
|
130
345
|
*/
|
|
131
|
-
export function
|
|
346
|
+
export function variance(values: Iterable<number>, options?: VarianceOptions): number;
|
|
132
347
|
/**
|
|
133
|
-
*
|
|
348
|
+
* The standard deviation.
|
|
134
349
|
*
|
|
135
350
|
* @example
|
|
136
|
-
*
|
|
351
|
+
* num.stdDev([2, 4, 4, 4, 5, 5, 7, 9]); // 2
|
|
137
352
|
*
|
|
138
|
-
* @param {number}
|
|
139
|
-
* @param {
|
|
140
|
-
* @
|
|
141
|
-
* @returns {number} The percentage.
|
|
353
|
+
* @param {Iterable<number>} values
|
|
354
|
+
* @param {VarianceOptions} [options]
|
|
355
|
+
* @returns {number}
|
|
142
356
|
*/
|
|
143
|
-
export function
|
|
357
|
+
export function stdDev(values: Iterable<number>, options?: VarianceOptions): number;
|
|
358
|
+
/**
|
|
359
|
+
* The value under which `p` percent of the values fall, interpolated like
|
|
360
|
+
* Excel's `PERCENTILE.INC`.
|
|
361
|
+
*
|
|
362
|
+
* @example
|
|
363
|
+
* num.percentile([1, 2, 3, 4, 5], 90); // 4.6
|
|
364
|
+
* num.percentile(responseTimes, 95); // p95 latency
|
|
365
|
+
*
|
|
366
|
+
* @param {Iterable<number>} values
|
|
367
|
+
* @param {number} p From 0 to 100.
|
|
368
|
+
* @returns {number} `NaN` for an empty list.
|
|
369
|
+
*/
|
|
370
|
+
export function percentile(values: Iterable<number>, p: number): number;
|
|
371
|
+
/**
|
|
372
|
+
* The smallest number. Unlike `Math.min(...array)`, huge arrays are fine.
|
|
373
|
+
*
|
|
374
|
+
* @param {Iterable<number>} values
|
|
375
|
+
* @returns {number | undefined} `undefined` for an empty list.
|
|
376
|
+
*/
|
|
377
|
+
export function min(values: Iterable<number>): number | undefined;
|
|
144
378
|
/**
|
|
145
|
-
*
|
|
379
|
+
* The largest number. Unlike `Math.max(...array)`, huge arrays are fine.
|
|
146
380
|
*
|
|
147
|
-
*
|
|
148
|
-
*
|
|
149
|
-
|
|
381
|
+
* @param {Iterable<number>} values
|
|
382
|
+
* @returns {number | undefined} `undefined` for an empty list.
|
|
383
|
+
*/
|
|
384
|
+
export function max(values: Iterable<number>): number | undefined;
|
|
385
|
+
/**
|
|
386
|
+
* What percentage `value` is of `total`. Returns `0` when `total` is `0`.
|
|
150
387
|
*
|
|
151
388
|
* @example
|
|
152
|
-
*
|
|
153
|
-
*
|
|
154
|
-
* nodeComfort.num.formatBytes(1000, { binary: false }); // "1 KB"
|
|
155
|
-
* nodeComfort.num.formatBytes(1024, { iec: true }); // "1 KiB"
|
|
389
|
+
* num.percent(25, 200); // 12.5
|
|
390
|
+
* num.percent(1, 3, 1); // 33.3
|
|
156
391
|
*
|
|
157
|
-
* @param {number}
|
|
158
|
-
* @param {
|
|
159
|
-
* @
|
|
392
|
+
* @param {number} value
|
|
393
|
+
* @param {number} total
|
|
394
|
+
* @param {number} [decimals=2]
|
|
395
|
+
* @returns {number}
|
|
160
396
|
*/
|
|
161
|
-
export function
|
|
162
|
-
decimals?: number;
|
|
163
|
-
binary?: boolean;
|
|
164
|
-
iec?: boolean;
|
|
165
|
-
}): string;
|
|
397
|
+
export function percent(value: number, total: number, decimals?: number): number;
|
|
166
398
|
/**
|
|
167
|
-
*
|
|
399
|
+
* Greatest common divisor.
|
|
168
400
|
*
|
|
169
401
|
* @example
|
|
170
|
-
*
|
|
171
|
-
* nodeComfort.num.abbreviate(2_400_000); // "2.4M"
|
|
402
|
+
* num.gcd(12, 18, 27); // 3
|
|
172
403
|
*
|
|
173
|
-
* @param {number}
|
|
174
|
-
* @
|
|
175
|
-
* @returns {string} The abbreviated number.
|
|
404
|
+
* @param {...number} values
|
|
405
|
+
* @returns {number}
|
|
176
406
|
*/
|
|
177
|
-
export function
|
|
407
|
+
export function gcd(...values: number[]): number;
|
|
178
408
|
/**
|
|
179
|
-
*
|
|
409
|
+
* Least common multiple.
|
|
180
410
|
*
|
|
181
411
|
* @example
|
|
182
|
-
*
|
|
183
|
-
* nodeComfort.num.thousands(1234.5, " "); // "1 234.5"
|
|
412
|
+
* num.lcm(2, 3, 4); // 12
|
|
184
413
|
*
|
|
185
|
-
* @param {number}
|
|
186
|
-
* @
|
|
187
|
-
* @returns {string} The formatted number.
|
|
414
|
+
* @param {...number} values
|
|
415
|
+
* @returns {number}
|
|
188
416
|
*/
|
|
189
|
-
export function
|
|
417
|
+
export function lcm(...values: number[]): number;
|
|
190
418
|
/**
|
|
191
|
-
*
|
|
419
|
+
* Is it a prime number?
|
|
192
420
|
*
|
|
193
421
|
* @example
|
|
194
|
-
*
|
|
195
|
-
*
|
|
422
|
+
* num.isPrime(7); // true
|
|
423
|
+
* num.isPrime(1); // false
|
|
196
424
|
*
|
|
197
|
-
* @param {number} value
|
|
198
|
-
* @returns {
|
|
425
|
+
* @param {number} value
|
|
426
|
+
* @returns {boolean}
|
|
199
427
|
*/
|
|
200
|
-
export function
|
|
428
|
+
export function isPrime(value: number): boolean;
|
|
201
429
|
/**
|
|
202
|
-
*
|
|
430
|
+
* `n!`. Pass `true` to get an exact bigint, since numbers lose precision
|
|
431
|
+
* past 18!.
|
|
203
432
|
*
|
|
204
433
|
* @example
|
|
205
|
-
*
|
|
206
|
-
*
|
|
434
|
+
* num.factorial(5); // 120
|
|
435
|
+
* num.factorial(25, true); // 15511210043330985984000000n
|
|
207
436
|
*
|
|
208
|
-
* @param {
|
|
209
|
-
* @param {
|
|
210
|
-
* @returns {number
|
|
437
|
+
* @param {number} n
|
|
438
|
+
* @param {boolean} [asBigInt=false]
|
|
439
|
+
* @returns {number | bigint}
|
|
440
|
+
* @throws {RangeError} If `n` is negative or not an integer.
|
|
211
441
|
*/
|
|
212
|
-
export function
|
|
442
|
+
export function factorial(n: number, asBigInt?: boolean): number | bigint;
|
|
213
443
|
/**
|
|
214
|
-
*
|
|
215
|
-
*
|
|
216
|
-
* @
|
|
444
|
+
* Is it even?
|
|
445
|
+
*
|
|
446
|
+
* @param {number} value
|
|
447
|
+
* @returns {boolean}
|
|
217
448
|
*/
|
|
218
449
|
export function isEven(value: number): boolean;
|
|
219
450
|
/**
|
|
220
|
-
*
|
|
221
|
-
*
|
|
222
|
-
* @
|
|
451
|
+
* Is it odd? Negative numbers work too.
|
|
452
|
+
*
|
|
453
|
+
* @param {number} value
|
|
454
|
+
* @returns {boolean}
|
|
223
455
|
*/
|
|
224
456
|
export function isOdd(value: number): boolean;
|
|
225
457
|
/**
|
|
226
|
-
*
|
|
458
|
+
* Numbers from `start` up to `end` (excluded). With one argument, counts
|
|
459
|
+
* from 0. Goes down when `end` is smaller.
|
|
227
460
|
*
|
|
228
|
-
*
|
|
461
|
+
* @example
|
|
462
|
+
* num.range(4); // [0, 1, 2, 3]
|
|
463
|
+
* num.range(0, 10, 2); // [0, 2, 4, 6, 8]
|
|
464
|
+
* num.range(5, 0); // [5, 4, 3, 2, 1]
|
|
465
|
+
*
|
|
466
|
+
* @param {number} start
|
|
467
|
+
* @param {number} [end]
|
|
468
|
+
* @param {number} [step] Defaults to `1`, or `-1` when counting down.
|
|
469
|
+
* @returns {number[]}
|
|
470
|
+
*/
|
|
471
|
+
export function range(start: number, end?: number, step?: number): number[];
|
|
472
|
+
/**
|
|
473
|
+
* Reads a number from anything, ignoring trailing text like units.
|
|
229
474
|
*
|
|
230
475
|
* @example
|
|
231
|
-
*
|
|
232
|
-
*
|
|
233
|
-
*
|
|
234
|
-
* nodeComfort.num.range(5, 0); // [5, 4, 3, 2, 1]
|
|
476
|
+
* num.parse("42px"); // 42
|
|
477
|
+
* num.parse(" -3.5 kg"); // -3.5
|
|
478
|
+
* num.parse("nope", 0); // 0
|
|
235
479
|
*
|
|
236
|
-
* @param {
|
|
237
|
-
* @param {number} [
|
|
238
|
-
* @
|
|
239
|
-
* @returns {number[]} The generated range.
|
|
480
|
+
* @param {unknown} value
|
|
481
|
+
* @param {number} [fallback=NaN] Returned when there's no number to read.
|
|
482
|
+
* @returns {number}
|
|
240
483
|
*/
|
|
241
|
-
export function
|
|
484
|
+
export function parse(value: unknown, fallback?: number): number;
|
|
485
|
+
/**
|
|
486
|
+
* Turns a size like `"10 MB"` into bytes. The opposite of `formatBytes()`.
|
|
487
|
+
*
|
|
488
|
+
* @example
|
|
489
|
+
* num.parseBytes("1.5 KB"); // 1536
|
|
490
|
+
* num.parseBytes("2 GiB"); // 2147483648
|
|
491
|
+
* num.parseBytes("1 KB", { binary: false }); // 1000
|
|
492
|
+
*
|
|
493
|
+
* @param {string | number} value A size like `"512kb"` or `"1.5G"`, or a number of bytes.
|
|
494
|
+
* @param {ParseBytesOptions} [options]
|
|
495
|
+
* @returns {number} Bytes, or `NaN` if it can't be read.
|
|
496
|
+
*/
|
|
497
|
+
export function parseBytes(value: string | number, options?: ParseBytesOptions): number;
|
|
498
|
+
/**
|
|
499
|
+
* Formats a byte count as a readable size.
|
|
500
|
+
*
|
|
501
|
+
* @example
|
|
502
|
+
* num.formatBytes(1536); // "1.5 KB"
|
|
503
|
+
* num.formatBytes(1000, { binary: false }); // "1 KB"
|
|
504
|
+
* num.formatBytes(1536, { locale: "fr", units: ["o", "Ko", "Mo", "Go"] }); // "1,5 Ko"
|
|
505
|
+
*
|
|
506
|
+
* @param {number} bytes
|
|
507
|
+
* @param {FormatBytesOptions} [options]
|
|
508
|
+
* @returns {string}
|
|
509
|
+
*/
|
|
510
|
+
export function formatBytes(bytes: number, options?: FormatBytesOptions): string;
|
|
511
|
+
/**
|
|
512
|
+
* Formats a number for display, with `Intl.NumberFormat` doing the work:
|
|
513
|
+
* separators, decimals, compact notation, percentages, units.
|
|
514
|
+
*
|
|
515
|
+
* @example
|
|
516
|
+
* num.format(1234567.891); // "1,234,567.891"
|
|
517
|
+
* num.format(1234567.891, { locale: "fr" }); // "1 234 567,891"
|
|
518
|
+
* num.format(0.256, { style: "percent" }); // "26%"
|
|
519
|
+
* num.format(1500, { compact: true }); // "1.5K"
|
|
520
|
+
* num.format(3.5, { unit: "kilometer" }); // "3.5 km"
|
|
521
|
+
*
|
|
522
|
+
* @param {number | bigint} value
|
|
523
|
+
* @param {FormatNumberOptions} [options]
|
|
524
|
+
* @returns {string}
|
|
525
|
+
*/
|
|
526
|
+
export function format(value: number | bigint, options?: FormatNumberOptions): string;
|
|
527
|
+
/**
|
|
528
|
+
* Formats an amount of money.
|
|
529
|
+
*
|
|
530
|
+
* @example
|
|
531
|
+
* num.currency(1234.5, "USD"); // "$1,234.50"
|
|
532
|
+
* num.currency(1234.5, "EUR", { locale: "fr" }); // "1 234,50 €"
|
|
533
|
+
* num.currency(-5, "USD", { accounting: true }); // "($5.00)"
|
|
534
|
+
*
|
|
535
|
+
* @param {number | bigint} value
|
|
536
|
+
* @param {string} code A currency code like `"EUR"`, `"USD"` or `"JPY"`.
|
|
537
|
+
* @param {CurrencyOptions} [options]
|
|
538
|
+
* @returns {string}
|
|
539
|
+
*/
|
|
540
|
+
export function currency(value: number | bigint, code: string, options?: CurrencyOptions): string;
|
|
541
|
+
/**
|
|
542
|
+
* Shortens big numbers with `K`, `M`, `B` or `T`. For other languages, use
|
|
543
|
+
* `format(value, { compact: true, locale })`.
|
|
544
|
+
*
|
|
545
|
+
* @example
|
|
546
|
+
* num.abbreviate(1500); // "1.5K"
|
|
547
|
+
* num.abbreviate(2_400_000); // "2.4M"
|
|
548
|
+
*
|
|
549
|
+
* @param {number} value
|
|
550
|
+
* @param {number} [decimals=1]
|
|
551
|
+
* @returns {string}
|
|
552
|
+
*/
|
|
553
|
+
export function abbreviate(value: number, decimals?: number): string;
|
|
554
|
+
/**
|
|
555
|
+
* Adds thousands separators, leaving decimals alone.
|
|
556
|
+
*
|
|
557
|
+
* @example
|
|
558
|
+
* num.thousands(1234567.89, " "); // "1 234 567.89"
|
|
559
|
+
*
|
|
560
|
+
* @param {number | string} value
|
|
561
|
+
* @param {string} [separator=","]
|
|
562
|
+
* @returns {string}
|
|
563
|
+
*/
|
|
564
|
+
export function thousands(value: number | string, separator?: string): string;
|
|
565
|
+
/**
|
|
566
|
+
* Adds the ordinal suffix: 1st, 2nd, 3rd... in several languages.
|
|
567
|
+
*
|
|
568
|
+
* @example
|
|
569
|
+
* num.ordinal(22); // "22nd"
|
|
570
|
+
* num.ordinal(1, { locale: "fr" }); // "1er"
|
|
571
|
+
* num.ordinal(3, { locale: "de" }); // "3."
|
|
572
|
+
*
|
|
573
|
+
* @param {number} value
|
|
574
|
+
* @param {OrdinalOptions} [options]
|
|
575
|
+
* @returns {string}
|
|
576
|
+
*/
|
|
577
|
+
export function ordinal(value: number, options?: OrdinalOptions): string;
|
|
242
578
|
//# sourceMappingURL=Num.d.ts.map
|