@oscarpalmer/atoms 0.76.0 → 0.77.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/dist/js/array/count.cjs +1 -8
- package/dist/js/array/count.js +1 -8
- package/dist/js/array/exists.cjs +1 -8
- package/dist/js/array/exists.js +1 -8
- package/dist/js/array/filter.cjs +1 -8
- package/dist/js/array/filter.js +1 -8
- package/dist/js/array/find.cjs +1 -8
- package/dist/js/array/find.js +1 -8
- package/dist/js/array/index-of.cjs +1 -8
- package/dist/js/array/index-of.js +1 -8
- package/dist/js/array/unique.cjs +1 -1
- package/dist/js/array/unique.js +1 -1
- package/dist/js/internal/array/find.cjs +12 -2
- package/dist/js/internal/array/find.js +12 -2
- package/package.json +11 -4
- package/src/js/array/count.ts +7 -20
- package/src/js/array/exists.ts +7 -22
- package/src/js/array/filter.ts +7 -20
- package/src/js/array/find.ts +7 -20
- package/src/js/array/group-by.ts +19 -21
- package/src/js/array/index-of.ts +7 -20
- package/src/js/array/models.ts +2 -16
- package/src/js/array/sort.ts +3 -7
- package/src/js/array/to-map.ts +19 -21
- package/src/js/array/to-record.ts +17 -19
- package/src/js/array/unique.ts +8 -8
- package/src/js/internal/array/callbacks.ts +4 -4
- package/src/js/internal/array/find.ts +29 -6
- package/types/array/count.d.cts +2 -5
- package/types/array/count.d.ts +3 -3
- package/types/array/exists.d.cts +2 -5
- package/types/array/exists.d.ts +3 -3
- package/types/array/filter.d.cts +2 -5
- package/types/array/filter.d.ts +3 -3
- package/types/array/find.d.cts +2 -5
- package/types/array/find.d.ts +3 -3
- package/types/array/group-by.d.cts +8 -11
- package/types/array/group-by.d.ts +10 -11
- package/types/array/index-of.d.cts +2 -5
- package/types/array/index-of.d.ts +3 -3
- package/types/array/index.d.cts +43 -48
- package/types/array/models.d.cts +2 -7
- package/types/array/models.d.ts +2 -7
- package/types/array/sort.d.cts +3 -4
- package/types/array/sort.d.ts +3 -3
- package/types/array/to-map.d.cts +8 -11
- package/types/array/to-map.d.ts +9 -10
- package/types/array/to-record.d.cts +8 -11
- package/types/array/to-record.d.ts +9 -10
- package/types/array/unique.d.cts +3 -5
- package/types/array/unique.d.ts +4 -4
- package/types/index.d.cts +321 -1019
- package/types/internal/array/find.d.cts +2 -2
- package/types/internal/array/find.d.ts +2 -2
- package/types/models.d.cts +210 -467
- package/types/value/get.d.cts +210 -469
- package/types/value/index.d.cts +223 -514
- package/types/value/set.d.cts +169 -356
- package/types/value/smush.d.cts +209 -463
package/types/value/set.d.cts
CHANGED
|
@@ -5,14 +5,7 @@ Matches any [primitive value](https://developer.mozilla.org/en-US/docs/Glossary/
|
|
|
5
5
|
|
|
6
6
|
@category Type
|
|
7
7
|
*/
|
|
8
|
-
export type Primitive =
|
|
9
|
-
| null
|
|
10
|
-
| undefined
|
|
11
|
-
| string
|
|
12
|
-
| number
|
|
13
|
-
| boolean
|
|
14
|
-
| symbol
|
|
15
|
-
| bigint;
|
|
8
|
+
export type Primitive = null | undefined | string | number | boolean | symbol | bigint;
|
|
16
9
|
declare const emptyObjectSymbol: unique symbol;
|
|
17
10
|
/**
|
|
18
11
|
Represents a strictly empty plain object, the `{}` value.
|
|
@@ -69,11 +62,7 @@ type Includes<Value extends readonly any[], Item> =
|
|
|
69
62
|
@category Type Guard
|
|
70
63
|
@category Utilities
|
|
71
64
|
*/
|
|
72
|
-
export type IsEqual<A, B> = (<G>() => G extends A ? 1 : 2) extends <
|
|
73
|
-
G,
|
|
74
|
-
>() => G extends B ? 1 : 2
|
|
75
|
-
? true
|
|
76
|
-
: false;
|
|
65
|
+
export type IsEqual<A, B> = (<G>() => G extends A ? 1 : 2) extends (<G>() => G extends B ? 1 : 2) ? true : false;
|
|
77
66
|
/**
|
|
78
67
|
Represents an object with `unknown` value. You probably want this instead of `{}`.
|
|
79
68
|
|
|
@@ -140,16 +129,14 @@ type B = StaticPartOfArray<A>;
|
|
|
140
129
|
//=> [string, number, boolean]
|
|
141
130
|
```
|
|
142
131
|
*/
|
|
143
|
-
export type StaticPartOfArray<
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
: T
|
|
152
|
-
: never; // Should never happen
|
|
132
|
+
export type StaticPartOfArray<T extends UnknownArray, Result extends UnknownArray = [
|
|
133
|
+
]> = T extends unknown ? number extends T["length"] ? T extends readonly [
|
|
134
|
+
infer U,
|
|
135
|
+
...infer V
|
|
136
|
+
] ? StaticPartOfArray<V, [
|
|
137
|
+
...Result,
|
|
138
|
+
U
|
|
139
|
+
]> : Result : T : never; // Should never happen
|
|
153
140
|
/**
|
|
154
141
|
Returns the variable, non-fixed-length portion of the given array, excluding static-length parts.
|
|
155
142
|
|
|
@@ -160,11 +147,11 @@ type B = VariablePartOfArray<A>;
|
|
|
160
147
|
//=> string[]
|
|
161
148
|
```
|
|
162
149
|
*/
|
|
163
|
-
export type VariablePartOfArray<T extends UnknownArray> = T extends unknown
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
150
|
+
export type VariablePartOfArray<T extends UnknownArray> = T extends unknown ? T extends readonly [
|
|
151
|
+
...StaticPartOfArray<T>,
|
|
152
|
+
...infer U
|
|
153
|
+
] ? U : [
|
|
154
|
+
] : never; // Should never happen
|
|
168
155
|
/**
|
|
169
156
|
Returns a boolean for whether the given type is `any`.
|
|
170
157
|
|
|
@@ -207,7 +194,7 @@ Please upvote [this issue](https://github.com/microsoft/TypeScript/issues/32277)
|
|
|
207
194
|
*/
|
|
208
195
|
// See https://github.com/microsoft/TypeScript/issues/31752
|
|
209
196
|
// eslint-disable-next-line @typescript-eslint/no-loss-of-precision
|
|
210
|
-
export type PositiveInfinity =
|
|
197
|
+
export type PositiveInfinity = Infinity;
|
|
211
198
|
/**
|
|
212
199
|
Matches the hidden `-Infinity` type.
|
|
213
200
|
|
|
@@ -219,7 +206,7 @@ Please upvote [this issue](https://github.com/microsoft/TypeScript/issues/32277)
|
|
|
219
206
|
*/
|
|
220
207
|
// See https://github.com/microsoft/TypeScript/issues/31752
|
|
221
208
|
// eslint-disable-next-line @typescript-eslint/no-loss-of-precision
|
|
222
|
-
export type NegativeInfinity = -
|
|
209
|
+
export type NegativeInfinity = -Infinity;
|
|
223
210
|
/**
|
|
224
211
|
A negative `number`/`bigint` (`-∞ < x < 0`)
|
|
225
212
|
|
|
@@ -230,11 +217,7 @@ Use-case: Validating and documenting parameters.
|
|
|
230
217
|
|
|
231
218
|
@category Numeric
|
|
232
219
|
*/
|
|
233
|
-
export type Negative<T extends Numeric> = T extends Zero
|
|
234
|
-
? never
|
|
235
|
-
: `${T}` extends `-${string}`
|
|
236
|
-
? T
|
|
237
|
-
: never;
|
|
220
|
+
export type Negative<T extends Numeric> = T extends Zero ? never : `${T}` extends `-${string}` ? T : never;
|
|
238
221
|
/**
|
|
239
222
|
Returns a boolean for whether the given number is a negative number.
|
|
240
223
|
|
|
@@ -250,9 +233,7 @@ type ShouldBeTrue = IsNegative<-1>;
|
|
|
250
233
|
|
|
251
234
|
@category Numeric
|
|
252
235
|
*/
|
|
253
|
-
export type IsNegative<T extends Numeric> = T extends Negative<T>
|
|
254
|
-
? true
|
|
255
|
-
: false;
|
|
236
|
+
export type IsNegative<T extends Numeric> = T extends Negative<T> ? true : false;
|
|
256
237
|
/**
|
|
257
238
|
Returns a boolean for whether two given types are both true.
|
|
258
239
|
|
|
@@ -273,12 +254,11 @@ And<true, false>;
|
|
|
273
254
|
*/
|
|
274
255
|
export type And<A extends boolean, B extends boolean> = [
|
|
275
256
|
A,
|
|
276
|
-
B
|
|
277
|
-
][number] extends true
|
|
278
|
-
|
|
279
|
-
|
|
280
|
-
|
|
281
|
-
: never;
|
|
257
|
+
B
|
|
258
|
+
][number] extends true ? true : true extends [
|
|
259
|
+
IsEqual<A, false>,
|
|
260
|
+
IsEqual<B, false>
|
|
261
|
+
][number] ? false : never;
|
|
282
262
|
/**
|
|
283
263
|
Returns a boolean for whether either of two given types are true.
|
|
284
264
|
|
|
@@ -299,12 +279,11 @@ Or<false, false>;
|
|
|
299
279
|
*/
|
|
300
280
|
export type Or<A extends boolean, B extends boolean> = [
|
|
301
281
|
A,
|
|
302
|
-
B
|
|
303
|
-
][number] extends false
|
|
304
|
-
|
|
305
|
-
|
|
306
|
-
|
|
307
|
-
: never;
|
|
282
|
+
B
|
|
283
|
+
][number] extends false ? false : true extends [
|
|
284
|
+
IsEqual<A, true>,
|
|
285
|
+
IsEqual<B, true>
|
|
286
|
+
][number] ? true : never;
|
|
308
287
|
/**
|
|
309
288
|
Returns a boolean for whether a given number is greater than another number.
|
|
310
289
|
|
|
@@ -322,44 +301,32 @@ GreaterThan<1, 5>;
|
|
|
322
301
|
//=> false
|
|
323
302
|
```
|
|
324
303
|
*/
|
|
325
|
-
export type GreaterThan<A extends number, B extends number> = number extends
|
|
326
|
-
|
|
327
|
-
|
|
328
|
-
|
|
329
|
-
|
|
330
|
-
|
|
331
|
-
|
|
332
|
-
|
|
333
|
-
|
|
334
|
-
|
|
335
|
-
|
|
336
|
-
|
|
337
|
-
|
|
338
|
-
|
|
339
|
-
|
|
340
|
-
|
|
341
|
-
|
|
342
|
-
|
|
343
|
-
|
|
344
|
-
|
|
345
|
-
|
|
346
|
-
|
|
347
|
-
|
|
348
|
-
|
|
349
|
-
|
|
350
|
-
|
|
351
|
-
? [true, false] extends R
|
|
352
|
-
? false
|
|
353
|
-
: [false, true] extends R
|
|
354
|
-
? true
|
|
355
|
-
: [false, false] extends R
|
|
356
|
-
? PositiveNumericStringGt<`${A}`, `${B}`>
|
|
357
|
-
: PositiveNumericStringGt<
|
|
358
|
-
`${NumberAbsolute<B>}`,
|
|
359
|
-
`${NumberAbsolute<A>}`
|
|
360
|
-
>
|
|
361
|
-
: never
|
|
362
|
-
: never;
|
|
304
|
+
export type GreaterThan<A extends number, B extends number> = number extends A | B ? never : [
|
|
305
|
+
IsEqual<A, PositiveInfinity>,
|
|
306
|
+
IsEqual<A, NegativeInfinity>,
|
|
307
|
+
IsEqual<B, PositiveInfinity>,
|
|
308
|
+
IsEqual<B, NegativeInfinity>
|
|
309
|
+
] extends infer R extends [
|
|
310
|
+
boolean,
|
|
311
|
+
boolean,
|
|
312
|
+
boolean,
|
|
313
|
+
boolean
|
|
314
|
+
] ? Or<And<IsEqual<R[0], true>, IsEqual<R[2], false>>, And<IsEqual<R[3], true>, IsEqual<R[1], false>>> extends true ? true : Or<And<IsEqual<R[1], true>, IsEqual<R[3], false>>, And<IsEqual<R[2], true>, IsEqual<R[0], false>>> extends true ? false : true extends R[number] ? false : [
|
|
315
|
+
IsNegative<A>,
|
|
316
|
+
IsNegative<B>
|
|
317
|
+
] extends infer R extends [
|
|
318
|
+
boolean,
|
|
319
|
+
boolean
|
|
320
|
+
] ? [
|
|
321
|
+
true,
|
|
322
|
+
false
|
|
323
|
+
] extends R ? false : [
|
|
324
|
+
false,
|
|
325
|
+
true
|
|
326
|
+
] extends R ? true : [
|
|
327
|
+
false,
|
|
328
|
+
false
|
|
329
|
+
] extends R ? PositiveNumericStringGt<`${A}`, `${B}`> : PositiveNumericStringGt<`${NumberAbsolute<B>}`, `${NumberAbsolute<A>}`> : never : never;
|
|
363
330
|
/**
|
|
364
331
|
Returns a boolean for whether a given number is greater than or equal to another number.
|
|
365
332
|
|
|
@@ -377,10 +344,7 @@ GreaterThanOrEqual<1, 5>;
|
|
|
377
344
|
//=> false
|
|
378
345
|
```
|
|
379
346
|
*/
|
|
380
|
-
export type GreaterThanOrEqual<
|
|
381
|
-
A extends number,
|
|
382
|
-
B extends number,
|
|
383
|
-
> = number extends A | B ? never : A extends B ? true : GreaterThan<A, B>;
|
|
347
|
+
export type GreaterThanOrEqual<A extends number, B extends number> = number extends A | B ? never : A extends B ? true : GreaterThan<A, B>;
|
|
384
348
|
/**
|
|
385
349
|
Returns a boolean for whether a given number is less than another number.
|
|
386
350
|
|
|
@@ -398,11 +362,7 @@ LessThan<1, 5>;
|
|
|
398
362
|
//=> true
|
|
399
363
|
```
|
|
400
364
|
*/
|
|
401
|
-
export type LessThan<A extends number, B extends number> = number extends A | B
|
|
402
|
-
? never
|
|
403
|
-
: GreaterThanOrEqual<A, B> extends true
|
|
404
|
-
? false
|
|
405
|
-
: true;
|
|
365
|
+
export type LessThan<A extends number, B extends number> = number extends A | B ? never : GreaterThanOrEqual<A, B> extends true ? false : true;
|
|
406
366
|
/**
|
|
407
367
|
Create a tuple type of the given length `<L>` and fill it with the given type `<Fill>`.
|
|
408
368
|
|
|
@@ -410,11 +370,11 @@ If `<Fill>` is not provided, it will default to `unknown`.
|
|
|
410
370
|
|
|
411
371
|
@link https://itnext.io/implementing-arithmetic-within-typescripts-type-system-a1ef140a6f6f
|
|
412
372
|
*/
|
|
413
|
-
export type BuildTuple<
|
|
414
|
-
|
|
415
|
-
|
|
416
|
-
|
|
417
|
-
|
|
373
|
+
export type BuildTuple<L extends number, Fill = unknown, T extends readonly unknown[] = [
|
|
374
|
+
]> = T["length"] extends L ? T : BuildTuple<L, Fill, [
|
|
375
|
+
...T,
|
|
376
|
+
Fill
|
|
377
|
+
]>;
|
|
418
378
|
/**
|
|
419
379
|
Returns the maximum value from a tuple of integers.
|
|
420
380
|
|
|
@@ -430,16 +390,10 @@ ArrayMax<[1, 2, 5, 3, 99, -1]>;
|
|
|
430
390
|
//=> 99
|
|
431
391
|
```
|
|
432
392
|
*/
|
|
433
|
-
export type TupleMax<
|
|
434
|
-
|
|
435
|
-
|
|
436
|
-
|
|
437
|
-
? never
|
|
438
|
-
: A extends [infer F extends number, ...infer R extends number[]]
|
|
439
|
-
? GreaterThan<F, Result> extends true
|
|
440
|
-
? TupleMax<R, F>
|
|
441
|
-
: TupleMax<R, Result>
|
|
442
|
-
: Result;
|
|
393
|
+
export type TupleMax<A extends number[], Result extends number = NegativeInfinity> = number extends A[number] ? never : A extends [
|
|
394
|
+
infer F extends number,
|
|
395
|
+
...infer R extends number[]
|
|
396
|
+
] ? GreaterThan<F, Result> extends true ? TupleMax<R, F> : TupleMax<R, Result> : Result;
|
|
443
397
|
/**
|
|
444
398
|
Returns the minimum value from a tuple of integers.
|
|
445
399
|
|
|
@@ -455,16 +409,10 @@ ArrayMin<[1, 2, 5, 3, -5]>;
|
|
|
455
409
|
//=> -5
|
|
456
410
|
```
|
|
457
411
|
*/
|
|
458
|
-
export type TupleMin<
|
|
459
|
-
|
|
460
|
-
|
|
461
|
-
|
|
462
|
-
? never
|
|
463
|
-
: A extends [infer F extends number, ...infer R extends number[]]
|
|
464
|
-
? LessThan<F, Result> extends true
|
|
465
|
-
? TupleMin<R, F>
|
|
466
|
-
: TupleMin<R, Result>
|
|
467
|
-
: Result;
|
|
412
|
+
export type TupleMin<A extends number[], Result extends number = PositiveInfinity> = number extends A[number] ? never : A extends [
|
|
413
|
+
infer F extends number,
|
|
414
|
+
...infer R extends number[]
|
|
415
|
+
] ? LessThan<F, Result> extends true ? TupleMin<R, F> : TupleMin<R, Result> : Result;
|
|
468
416
|
/**
|
|
469
417
|
Return a string representation of the given string or number.
|
|
470
418
|
|
|
@@ -499,14 +447,7 @@ type NegativeInfinity = StringToNumber<'-Infinity'>;
|
|
|
499
447
|
@category Numeric
|
|
500
448
|
@category Template literal
|
|
501
449
|
*/
|
|
502
|
-
export type StringToNumber<S extends string> =
|
|
503
|
-
S extends `${infer N extends number}`
|
|
504
|
-
? N
|
|
505
|
-
: S extends 'Infinity'
|
|
506
|
-
? PositiveInfinity
|
|
507
|
-
: S extends '-Infinity'
|
|
508
|
-
? NegativeInfinity
|
|
509
|
-
: never;
|
|
450
|
+
export type StringToNumber<S extends string> = S extends `${infer N extends number}` ? N : S extends "Infinity" ? PositiveInfinity : S extends "-Infinity" ? NegativeInfinity : never;
|
|
510
451
|
/**
|
|
511
452
|
Returns an array of the characters of the string.
|
|
512
453
|
|
|
@@ -521,14 +462,11 @@ StringToArray<string>;
|
|
|
521
462
|
|
|
522
463
|
@category String
|
|
523
464
|
*/
|
|
524
|
-
export type StringToArray<
|
|
525
|
-
|
|
526
|
-
Result
|
|
527
|
-
|
|
528
|
-
|
|
529
|
-
: S extends `${infer F}${infer R}`
|
|
530
|
-
? StringToArray<R, [...Result, F]>
|
|
531
|
-
: Result;
|
|
465
|
+
export type StringToArray<S extends string, Result extends string[] = [
|
|
466
|
+
]> = string extends S ? never : S extends `${infer F}${infer R}` ? StringToArray<R, [
|
|
467
|
+
...Result,
|
|
468
|
+
F
|
|
469
|
+
]> : Result;
|
|
532
470
|
/**
|
|
533
471
|
Returns the length of the given string.
|
|
534
472
|
|
|
@@ -544,9 +482,7 @@ StringLength<string>;
|
|
|
544
482
|
@category String
|
|
545
483
|
@category Template literal
|
|
546
484
|
*/
|
|
547
|
-
export type StringLength<S extends string> = string extends S
|
|
548
|
-
? never
|
|
549
|
-
: StringToArray<S>['length'];
|
|
485
|
+
export type StringLength<S extends string> = string extends S ? never : StringToArray<S>["length"];
|
|
550
486
|
/**
|
|
551
487
|
Returns a boolean for whether `A` represents a number greater than `B`, where `A` and `B` are both numeric strings and have the same length.
|
|
552
488
|
|
|
@@ -559,17 +495,8 @@ SameLengthPositiveNumericStringGt<'10', '10'>;
|
|
|
559
495
|
//=> false
|
|
560
496
|
```
|
|
561
497
|
*/
|
|
562
|
-
export type SameLengthPositiveNumericStringGt<
|
|
563
|
-
|
|
564
|
-
B extends string,
|
|
565
|
-
> = A extends `${infer FirstA}${infer RestA}`
|
|
566
|
-
? B extends `${infer FirstB}${infer RestB}`
|
|
567
|
-
? FirstA extends FirstB
|
|
568
|
-
? SameLengthPositiveNumericStringGt<RestA, RestB>
|
|
569
|
-
: PositiveNumericCharacterGt<FirstA, FirstB>
|
|
570
|
-
: never
|
|
571
|
-
: false;
|
|
572
|
-
export type NumericString = '0123456789';
|
|
498
|
+
export type SameLengthPositiveNumericStringGt<A extends string, B extends string> = A extends `${infer FirstA}${infer RestA}` ? B extends `${infer FirstB}${infer RestB}` ? FirstA extends FirstB ? SameLengthPositiveNumericStringGt<RestA, RestB> : PositiveNumericCharacterGt<FirstA, FirstB> : never : false;
|
|
499
|
+
export type NumericString = "0123456789";
|
|
573
500
|
/**
|
|
574
501
|
Returns a boolean for whether `A` is greater than `B`, where `A` and `B` are both positive numeric strings.
|
|
575
502
|
|
|
@@ -585,21 +512,16 @@ PositiveNumericStringGt<'1', '500'>;
|
|
|
585
512
|
//=> false
|
|
586
513
|
```
|
|
587
514
|
*/
|
|
588
|
-
export type PositiveNumericStringGt<
|
|
589
|
-
A
|
|
590
|
-
B
|
|
591
|
-
|
|
592
|
-
|
|
593
|
-
|
|
594
|
-
|
|
595
|
-
|
|
596
|
-
|
|
597
|
-
|
|
598
|
-
? 0 extends Remain['length']
|
|
599
|
-
? SameLengthPositiveNumericStringGt<A, B>
|
|
600
|
-
: true
|
|
601
|
-
: false
|
|
602
|
-
: never;
|
|
515
|
+
export type PositiveNumericStringGt<A extends string, B extends string> = A extends B ? false : [
|
|
516
|
+
BuildTuple<StringLength<A>, 0>,
|
|
517
|
+
BuildTuple<StringLength<B>, 0>
|
|
518
|
+
] extends infer R extends [
|
|
519
|
+
readonly unknown[],
|
|
520
|
+
readonly unknown[]
|
|
521
|
+
] ? R[0] extends [
|
|
522
|
+
...R[1],
|
|
523
|
+
...infer Remain extends readonly unknown[]
|
|
524
|
+
] ? 0 extends Remain["length"] ? SameLengthPositiveNumericStringGt<A, B> : true : false : never;
|
|
603
525
|
/**
|
|
604
526
|
Returns a boolean for whether `A` represents a number greater than `B`, where `A` and `B` are both positive numeric characters.
|
|
605
527
|
|
|
@@ -612,16 +534,7 @@ PositiveNumericCharacterGt<'1', '1'>;
|
|
|
612
534
|
//=> false
|
|
613
535
|
```
|
|
614
536
|
*/
|
|
615
|
-
export type PositiveNumericCharacterGt<
|
|
616
|
-
A extends string,
|
|
617
|
-
B extends string,
|
|
618
|
-
> = NumericString extends `${infer HeadA}${A}${infer TailA}`
|
|
619
|
-
? NumericString extends `${infer HeadB}${B}${infer TailB}`
|
|
620
|
-
? HeadA extends `${HeadB}${infer _}${infer __}`
|
|
621
|
-
? true
|
|
622
|
-
: false
|
|
623
|
-
: never
|
|
624
|
-
: never;
|
|
537
|
+
export type PositiveNumericCharacterGt<A extends string, B extends string> = NumericString extends `${infer HeadA}${A}${infer TailA}` ? NumericString extends `${infer HeadB}${B}${infer TailB}` ? HeadA extends `${HeadB}${infer _}${infer __}` ? true : false : never : never;
|
|
625
538
|
/**
|
|
626
539
|
Returns the absolute value of a given value.
|
|
627
540
|
|
|
@@ -637,10 +550,7 @@ NumberAbsolute<NegativeInfinity>
|
|
|
637
550
|
//=> PositiveInfinity
|
|
638
551
|
```
|
|
639
552
|
*/
|
|
640
|
-
export type NumberAbsolute<N extends number> =
|
|
641
|
-
`${N}` extends `-${infer StringPositiveN}`
|
|
642
|
-
? StringToNumber<StringPositiveN>
|
|
643
|
-
: N;
|
|
553
|
+
export type NumberAbsolute<N extends number> = `${N}` extends `-${infer StringPositiveN}` ? StringToNumber<StringPositiveN> : N;
|
|
644
554
|
/**
|
|
645
555
|
Check whether the given type is a number or a number string.
|
|
646
556
|
|
|
@@ -660,13 +570,7 @@ type C = IsNumberLike<1>;
|
|
|
660
570
|
type D = IsNumberLike<'a'>;
|
|
661
571
|
//=> false
|
|
662
572
|
*/
|
|
663
|
-
export type IsNumberLike<N> = N extends number
|
|
664
|
-
? true
|
|
665
|
-
: N extends `${number}`
|
|
666
|
-
? true
|
|
667
|
-
: N extends `${number}.${number}`
|
|
668
|
-
? true
|
|
669
|
-
: false;
|
|
573
|
+
export type IsNumberLike<N> = N extends number ? true : N extends `${number}` ? true : N extends `${number}.${number}` ? true : false;
|
|
670
574
|
/**
|
|
671
575
|
Matches any primitive, `void`, `Date`, or `RegExp` value.
|
|
672
576
|
*/
|
|
@@ -674,12 +578,7 @@ export type BuiltIns = Primitive | void | Date | RegExp;
|
|
|
674
578
|
/**
|
|
675
579
|
Matches non-recursive types.
|
|
676
580
|
*/
|
|
677
|
-
export type NonRecursiveType =
|
|
678
|
-
| BuiltIns
|
|
679
|
-
| Function
|
|
680
|
-
| (new (
|
|
681
|
-
...arguments_: any[]
|
|
682
|
-
) => unknown);
|
|
581
|
+
export type NonRecursiveType = BuiltIns | Function | (new (...arguments_: any[]) => unknown);
|
|
683
582
|
/**
|
|
684
583
|
Returns the sum of two numbers.
|
|
685
584
|
|
|
@@ -711,45 +610,35 @@ Sum<PositiveInfinity, NegativeInfinity>;
|
|
|
711
610
|
@category Numeric
|
|
712
611
|
*/
|
|
713
612
|
// TODO: Support big integer and negative number.
|
|
714
|
-
export type Sum<A extends number, B extends number> = number extends A | B
|
|
715
|
-
|
|
716
|
-
|
|
717
|
-
|
|
718
|
-
|
|
719
|
-
|
|
720
|
-
|
|
721
|
-
|
|
722
|
-
|
|
723
|
-
|
|
724
|
-
|
|
725
|
-
|
|
726
|
-
|
|
727
|
-
|
|
728
|
-
|
|
729
|
-
|
|
730
|
-
|
|
731
|
-
|
|
732
|
-
|
|
733
|
-
|
|
734
|
-
|
|
735
|
-
|
|
736
|
-
|
|
737
|
-
|
|
738
|
-
|
|
739
|
-
|
|
740
|
-
|
|
741
|
-
|
|
742
|
-
|
|
743
|
-
[NumberAbsolute<A>, NumberAbsolute<B>]
|
|
744
|
-
> extends infer Min_ extends number
|
|
745
|
-
? Max_ extends A | B
|
|
746
|
-
? Subtract<Max_, Min_>
|
|
747
|
-
: number
|
|
748
|
-
: never
|
|
749
|
-
: never
|
|
750
|
-
: never) &
|
|
751
|
-
number
|
|
752
|
-
: never;
|
|
613
|
+
export type Sum<A extends number, B extends number> = number extends A | B ? number : [
|
|
614
|
+
IsEqual<A, PositiveInfinity>,
|
|
615
|
+
IsEqual<A, NegativeInfinity>,
|
|
616
|
+
IsEqual<B, PositiveInfinity>,
|
|
617
|
+
IsEqual<B, NegativeInfinity>
|
|
618
|
+
] extends infer R extends [
|
|
619
|
+
boolean,
|
|
620
|
+
boolean,
|
|
621
|
+
boolean,
|
|
622
|
+
boolean
|
|
623
|
+
] ? Or<And<IsEqual<R[0], true>, IsEqual<R[3], false>>, And<IsEqual<R[2], true>, IsEqual<R[1], false>>> extends true ? PositiveInfinity : Or<And<IsEqual<R[1], true>, IsEqual<R[2], false>>, And<IsEqual<R[3], true>, IsEqual<R[0], false>>> extends true ? NegativeInfinity : true extends R[number] ? number : ([
|
|
624
|
+
IsNegative<A>,
|
|
625
|
+
IsNegative<B>
|
|
626
|
+
] extends infer R ? [
|
|
627
|
+
false,
|
|
628
|
+
false
|
|
629
|
+
] extends R ? [
|
|
630
|
+
...BuildTuple<A>,
|
|
631
|
+
...BuildTuple<B>
|
|
632
|
+
]["length"] : [
|
|
633
|
+
true,
|
|
634
|
+
true
|
|
635
|
+
] extends R ? number : TupleMax<[
|
|
636
|
+
NumberAbsolute<A>,
|
|
637
|
+
NumberAbsolute<B>
|
|
638
|
+
]> extends infer Max_ ? TupleMin<[
|
|
639
|
+
NumberAbsolute<A>,
|
|
640
|
+
NumberAbsolute<B>
|
|
641
|
+
]> extends infer Min_ extends number ? Max_ extends A | B ? Subtract<Max_, Min_> : number : never : never : never) & number : never;
|
|
753
642
|
/**
|
|
754
643
|
Returns the difference between two numbers.
|
|
755
644
|
|
|
@@ -780,40 +669,29 @@ Subtract<PositiveInfinity, PositiveInfinity>;
|
|
|
780
669
|
@category Numeric
|
|
781
670
|
*/
|
|
782
671
|
// TODO: Support big integer and negative number.
|
|
783
|
-
export type Subtract<A extends number, B extends number> = number extends A | B
|
|
784
|
-
|
|
785
|
-
|
|
786
|
-
|
|
787
|
-
|
|
788
|
-
|
|
789
|
-
|
|
790
|
-
|
|
791
|
-
|
|
792
|
-
|
|
793
|
-
|
|
794
|
-
|
|
795
|
-
|
|
796
|
-
|
|
797
|
-
|
|
798
|
-
|
|
799
|
-
|
|
800
|
-
|
|
801
|
-
|
|
802
|
-
|
|
803
|
-
|
|
804
|
-
|
|
805
|
-
|
|
806
|
-
? R extends [...BuildTuple<B>, ...infer R]
|
|
807
|
-
? R['length']
|
|
808
|
-
: number
|
|
809
|
-
: never
|
|
810
|
-
: LessThan<A, B> extends true
|
|
811
|
-
? number
|
|
812
|
-
: [false, true] extends R
|
|
813
|
-
? Sum<A, NumberAbsolute<B>>
|
|
814
|
-
: Subtract<NumberAbsolute<B>, NumberAbsolute<A>>
|
|
815
|
-
: never
|
|
816
|
-
: never;
|
|
672
|
+
export type Subtract<A extends number, B extends number> = number extends A | B ? number : [
|
|
673
|
+
IsEqual<A, PositiveInfinity>,
|
|
674
|
+
IsEqual<A, NegativeInfinity>,
|
|
675
|
+
IsEqual<B, PositiveInfinity>,
|
|
676
|
+
IsEqual<B, NegativeInfinity>
|
|
677
|
+
] extends infer R extends [
|
|
678
|
+
boolean,
|
|
679
|
+
boolean,
|
|
680
|
+
boolean,
|
|
681
|
+
boolean
|
|
682
|
+
] ? Or<And<IsEqual<R[0], true>, IsEqual<R[2], false>>, And<IsEqual<R[3], true>, IsEqual<R[1], false>>> extends true ? PositiveInfinity : Or<And<IsEqual<R[1], true>, IsEqual<R[3], false>>, And<IsEqual<R[2], true>, IsEqual<R[0], false>>> extends true ? NegativeInfinity : true extends R[number] ? number : [
|
|
683
|
+
IsNegative<A>,
|
|
684
|
+
IsNegative<B>
|
|
685
|
+
] extends infer R ? [
|
|
686
|
+
false,
|
|
687
|
+
false
|
|
688
|
+
] extends R ? BuildTuple<A> extends infer R ? R extends [
|
|
689
|
+
...BuildTuple<B>,
|
|
690
|
+
...infer R
|
|
691
|
+
] ? R["length"] : number : never : LessThan<A, B> extends true ? number : [
|
|
692
|
+
false,
|
|
693
|
+
true
|
|
694
|
+
] extends R ? Sum<A, NumberAbsolute<B>> : Subtract<NumberAbsolute<B>, NumberAbsolute<A>> : never : never;
|
|
817
695
|
/**
|
|
818
696
|
Paths options.
|
|
819
697
|
|
|
@@ -904,85 +782,28 @@ open('listB.1'); // TypeError. Because listB only has one element.
|
|
|
904
782
|
@category Object
|
|
905
783
|
@category Array
|
|
906
784
|
*/
|
|
907
|
-
export type Paths<T, Options extends PathsOptions = {}> = _Paths<
|
|
908
|
-
|
|
909
|
-
|
|
910
|
-
|
|
911
|
-
|
|
912
|
-
|
|
913
|
-
|
|
914
|
-
|
|
915
|
-
|
|
916
|
-
|
|
917
|
-
|
|
918
|
-
}
|
|
919
|
-
|
|
920
|
-
|
|
921
|
-
|
|
922
|
-
|
|
923
|
-
|
|
924
|
-
|
|
925
|
-
|
|
926
|
-
|
|
927
|
-
|
|
928
|
-
|
|
929
|
-
?
|
|
930
|
-
| InternalPaths<StaticPartOfArray<T>, Options>
|
|
931
|
-
| InternalPaths<Array<VariablePartOfArray<T>[number]>, Options>
|
|
932
|
-
: InternalPaths<T, Options>
|
|
933
|
-
: T extends object
|
|
934
|
-
? InternalPaths<T, Options>
|
|
935
|
-
: never;
|
|
936
|
-
export type InternalPaths<
|
|
937
|
-
T,
|
|
938
|
-
Options extends Required<PathsOptions>,
|
|
939
|
-
> = Options['maxRecursionDepth'] extends infer MaxDepth extends number
|
|
940
|
-
? Required<T> extends infer T
|
|
941
|
-
? T extends EmptyObject | readonly []
|
|
942
|
-
? never
|
|
943
|
-
: {
|
|
944
|
-
[Key in keyof T]: Key extends string | number // Limit `Key` to string or number.
|
|
945
|
-
? (
|
|
946
|
-
Options['bracketNotation'] extends true
|
|
947
|
-
? IsNumberLike<Key> extends true
|
|
948
|
-
? `[${Key}]`
|
|
949
|
-
: Key | ToString<Key>
|
|
950
|
-
: never | Options['bracketNotation'] extends false
|
|
951
|
-
? Key | ToString<Key>
|
|
952
|
-
: never
|
|
953
|
-
) extends infer TranformedKey extends string | number
|
|
954
|
-
? // 1. If style is 'a[0].b' and 'Key' is a numberlike value like 3 or '3', transform 'Key' to `[${Key}]`, else to `${Key}` | Key
|
|
955
|
-
// 2. If style is 'a.0.b', transform 'Key' to `${Key}` | Key
|
|
956
|
-
| TranformedKey
|
|
957
|
-
// Recursively generate paths for the current key
|
|
958
|
-
| (GreaterThan<MaxDepth, 0> extends true // Limit the depth to prevent infinite recursion
|
|
959
|
-
? _Paths<
|
|
960
|
-
T[Key],
|
|
961
|
-
{
|
|
962
|
-
bracketNotation: Options['bracketNotation'];
|
|
963
|
-
maxRecursionDepth: Subtract<MaxDepth, 1>;
|
|
964
|
-
}
|
|
965
|
-
> extends infer SubPath
|
|
966
|
-
? SubPath extends string | number
|
|
967
|
-
?
|
|
968
|
-
| (Options['bracketNotation'] extends true
|
|
969
|
-
? SubPath extends
|
|
970
|
-
| `[${any}]`
|
|
971
|
-
| `[${any}]${string}`
|
|
972
|
-
? `${TranformedKey}${SubPath}` // If next node is number key like `[3]`, no need to add `.` before it.
|
|
973
|
-
: `${TranformedKey}.${SubPath}`
|
|
974
|
-
: never)
|
|
975
|
-
| (Options['bracketNotation'] extends false
|
|
976
|
-
? `${TranformedKey}.${SubPath}`
|
|
977
|
-
: never)
|
|
978
|
-
: never
|
|
979
|
-
: never
|
|
980
|
-
: never)
|
|
981
|
-
: never
|
|
982
|
-
: never;
|
|
983
|
-
}[keyof T & (T extends UnknownArray ? number : unknown)]
|
|
984
|
-
: never
|
|
985
|
-
: never;
|
|
785
|
+
export type Paths<T, Options extends PathsOptions = {}> = _Paths<T, {
|
|
786
|
+
// Set default maxRecursionDepth to 10
|
|
787
|
+
maxRecursionDepth: Options["maxRecursionDepth"] extends number ? Options["maxRecursionDepth"] : DefaultPathsOptions["maxRecursionDepth"];
|
|
788
|
+
// Set default bracketNotation to false
|
|
789
|
+
bracketNotation: Options["bracketNotation"] extends boolean ? Options["bracketNotation"] : DefaultPathsOptions["bracketNotation"];
|
|
790
|
+
}>;
|
|
791
|
+
export type _Paths<T, Options extends Required<PathsOptions>> = T extends NonRecursiveType | ReadonlyMap<unknown, unknown> | ReadonlySet<unknown> ? never : IsAny<T> extends true ? never : T extends UnknownArray ? number extends T["length"] ? InternalPaths<StaticPartOfArray<T>, Options> | InternalPaths<Array<VariablePartOfArray<T>[number]>, Options> : InternalPaths<T, Options> : T extends object ? InternalPaths<T, Options> : never;
|
|
792
|
+
export type InternalPaths<T, Options extends Required<PathsOptions>> = Options["maxRecursionDepth"] extends infer MaxDepth extends number ? Required<T> extends infer T ? T extends EmptyObject | readonly [
|
|
793
|
+
] ? never : {
|
|
794
|
+
[Key in keyof T]: Key extends string | number // Limit `Key` to string or number.
|
|
795
|
+
? (Options["bracketNotation"] extends true ? IsNumberLike<Key> extends true ? `[${Key}]` : (Key | ToString<Key>) : never | Options["bracketNotation"] extends false ? (Key | ToString<Key>) : never) extends infer TranformedKey extends string | number ?
|
|
796
|
+
// 1. If style is 'a[0].b' and 'Key' is a numberlike value like 3 or '3', transform 'Key' to `[${Key}]`, else to `${Key}` | Key
|
|
797
|
+
// 2. If style is 'a.0.b', transform 'Key' to `${Key}` | Key
|
|
798
|
+
TranformedKey | (
|
|
799
|
+
// Recursively generate paths for the current key
|
|
800
|
+
GreaterThan<MaxDepth, 0> extends true // Limit the depth to prevent infinite recursion
|
|
801
|
+
? _Paths<T[Key], {
|
|
802
|
+
bracketNotation: Options["bracketNotation"];
|
|
803
|
+
maxRecursionDepth: Subtract<MaxDepth, 1>;
|
|
804
|
+
}> extends infer SubPath ? SubPath extends string | number ? (Options["bracketNotation"] extends true ? SubPath extends `[${any}]` | `[${any}]${string}` ? `${TranformedKey}${SubPath}` // If next node is number key like `[3]`, no need to add `.` before it.
|
|
805
|
+
: `${TranformedKey}.${SubPath}` : never) | (Options["bracketNotation"] extends false ? `${TranformedKey}.${SubPath}` : never) : never : never : never) : never : never;
|
|
806
|
+
}[keyof T & (T extends UnknownArray ? number : unknown)] : never : never;
|
|
986
807
|
export type PlainObject = UnknownRecord;
|
|
987
808
|
/**
|
|
988
809
|
* - Set the value in an object using a known path
|
|
@@ -990,10 +811,7 @@ export type PlainObject = UnknownRecord;
|
|
|
990
811
|
* - If a part of the path does not exist, it will be created, either as an array or a generic object, depending on the path
|
|
991
812
|
* - Returns the original object
|
|
992
813
|
*/
|
|
993
|
-
export declare function setValue<
|
|
994
|
-
Data extends PlainObject,
|
|
995
|
-
Path extends Paths<Data>,
|
|
996
|
-
>(data: Data, path: Path, value: unknown): Data;
|
|
814
|
+
export declare function setValue<Data extends PlainObject, Path extends Paths<Data>>(data: Data, path: Path, value: unknown): Data;
|
|
997
815
|
/**
|
|
998
816
|
* - Set the value in an object using an unknown path
|
|
999
817
|
* - You can set a nested value by using dot notation, e.g., `foo.bar.baz`
|
|
@@ -1001,11 +819,6 @@ export declare function setValue<
|
|
|
1001
819
|
* - If `ignoreCase` is `true`, path matching will be case-insensitive
|
|
1002
820
|
* - Returns the original object
|
|
1003
821
|
*/
|
|
1004
|
-
export declare function setValue<Data extends PlainObject>(
|
|
1005
|
-
data: Data,
|
|
1006
|
-
path: string,
|
|
1007
|
-
value: unknown,
|
|
1008
|
-
ignoreCase?: boolean,
|
|
1009
|
-
): Data;
|
|
822
|
+
export declare function setValue<Data extends PlainObject>(data: Data, path: string, value: unknown, ignoreCase?: boolean): Data;
|
|
1010
823
|
|
|
1011
824
|
export {};
|