type-plus 7.5.0 → 7.6.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/cjs/array/array_index.d.ts +4 -1
- package/cjs/array/array_index.d.ts.map +1 -1
- package/cjs/array/array_plus.split_at.d.ts +20 -15
- package/cjs/array/array_plus.split_at.d.ts.map +1 -1
- package/esm/array/array_index.d.ts +4 -1
- package/esm/array/array_index.d.ts.map +1 -1
- package/esm/array/array_plus.split_at.d.ts +20 -15
- package/esm/array/array_plus.split_at.d.ts.map +1 -1
- package/package.json +12 -1
- package/ts/array/array_index.ts +33 -23
- package/ts/array/array_plus.split_at.ts +52 -23
- package/ts/array/readme.md +24 -4
|
@@ -18,7 +18,10 @@ import type { Negative } from '../numeric/negative.js';
|
|
|
18
18
|
* type R = IndexAt<['a', 'b', 'c'], -4> // never
|
|
19
19
|
* ```
|
|
20
20
|
*/
|
|
21
|
-
export type IndexAt<A extends Array<unknown>, N extends number, Fail = never, Upper = A['length'], Lower = 0> =
|
|
21
|
+
export type IndexAt<A extends Array<unknown>, N extends number, Fail = never, Upper = A['length'], Lower = 0> = IsNever<A, Fail, IndexAt._<A, N, Fail, Upper, Lower>>;
|
|
22
|
+
export declare namespace IndexAt {
|
|
23
|
+
type _<A extends Array<unknown>, N extends number, Fail = never, Upper = A['length'], Lower = 0> = IsEqual<A['length'], 0, Fail, Integer<N, StrictNumberType<A['length'], N, Negative<N, GreaterThan<Abs<N>, A['length']> extends true ? Lower : Subtract<A['length'], Abs<N>>, GreaterThan<A['length'], N> extends true ? N : Upper>>, IsAny<N, number, StrictNumberType<N, N>>>>;
|
|
24
|
+
}
|
|
22
25
|
/**
|
|
23
26
|
* Is N an out of bound index of A.
|
|
24
27
|
*
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"array_index.d.ts","sourceRoot":"","sources":["../../ts/array/array_index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,oBAAoB,CAAA;AAC/C,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,mBAAmB,CAAA;AAChD,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,gBAAgB,CAAA;AACzC,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,yBAAyB,CAAA;AAC1D,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,qBAAqB,CAAA;AACnD,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,wBAAwB,CAAA;AACrD,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,iCAAiC,CAAA;AACvE,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,uBAAuB,CAAA;AACpD,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,wBAAwB,CAAA;AAEtD;;;;;;;;;;GAUG;AACH,MAAM,MAAM,OAAO,CAClB,CAAC,SAAS,KAAK,CAAC,OAAO,CAAC,EACxB,CAAC,SAAS,MAAM,EAChB,IAAI,GAAG,KAAK,EACZ,KAAK,GAAG,CAAC,CAAC,QAAQ,CAAC,EACnB,KAAK,GAAG,CAAC,IACN,OAAO,CACV,CAAC,CAAC,QAAQ,CAAC,EACX,CAAC,EACD,IAAI,EACJ,OAAO,CACN,CAAC,EACD,gBAAgB,CACf,CAAC,CAAC,QAAQ,CAAC,EAEX,CAAC,EAED,QAAQ,CACP,CAAC,EACD,WAAW,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,SAAS,IAAI,GAAG,KAAK,GAAG,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,EACrF,WAAW,CAAC,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,SAAS,IAAI,GAAG,CAAC,GAAG,KAAK,CACpD,CACD,EAED,KAAK,CACJ,CAAC,EACD,MAAM,EACN,gBAAgB,CACf,CAAC,EAED,CAAC,CACD,CACD,CACD,CACD,CAAA;AAED;;;;;;;;;;GAUG;AACH,MAAM,MAAM,iBAAiB,CAAC,CAAC,SAAS,OAAO,EAAE,EAAE,CAAC,SAAS,MAAM,EAAE,IAAI,GAAG,IAAI,EAAE,IAAI,GAAG,KAAK,IAAI,OAAO,CACxG,OAAO,CAAC,CAAC,EAAE,CAAC,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,CAAC,EAClC,IAAI,EACJ,IAAI,CACJ,CAAA"}
|
|
1
|
+
{"version":3,"file":"array_index.d.ts","sourceRoot":"","sources":["../../ts/array/array_index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,oBAAoB,CAAA;AAC/C,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,mBAAmB,CAAA;AAChD,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,gBAAgB,CAAA;AACzC,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,yBAAyB,CAAA;AAC1D,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,qBAAqB,CAAA;AACnD,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,wBAAwB,CAAA;AACrD,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,iCAAiC,CAAA;AACvE,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,uBAAuB,CAAA;AACpD,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,wBAAwB,CAAA;AAEtD;;;;;;;;;;GAUG;AACH,MAAM,MAAM,OAAO,CAClB,CAAC,SAAS,KAAK,CAAC,OAAO,CAAC,EACxB,CAAC,SAAS,MAAM,EAChB,IAAI,GAAG,KAAK,EACZ,KAAK,GAAG,CAAC,CAAC,QAAQ,CAAC,EACnB,KAAK,GAAG,CAAC,IACN,OAAO,CAAC,CAAC,EAAE,IAAI,EAAE,OAAO,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,KAAK,CAAC,CAAC,CAAA;AAEzD,yBAAiB,OAAO,CAAC;IACxB,KAAY,CAAC,CACZ,CAAC,SAAS,KAAK,CAAC,OAAO,CAAC,EACxB,CAAC,SAAS,MAAM,EAChB,IAAI,GAAG,KAAK,EACZ,KAAK,GAAG,CAAC,CAAC,QAAQ,CAAC,EACnB,KAAK,GAAG,CAAC,IACN,OAAO,CACV,CAAC,CAAC,QAAQ,CAAC,EACX,CAAC,EACD,IAAI,EACJ,OAAO,CACN,CAAC,EACD,gBAAgB,CACf,CAAC,CAAC,QAAQ,CAAC,EAEX,CAAC,EAED,QAAQ,CACP,CAAC,EACD,WAAW,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,SAAS,IAAI,GAAG,KAAK,GAAG,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,EACrF,WAAW,CAAC,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,SAAS,IAAI,GAAG,CAAC,GAAG,KAAK,CACpD,CACD,EAED,KAAK,CACJ,CAAC,EACD,MAAM,EACN,gBAAgB,CACf,CAAC,EAED,CAAC,CACD,CACD,CACD,CACD,CAAA;CACD;AAED;;;;;;;;;;GAUG;AACH,MAAM,MAAM,iBAAiB,CAAC,CAAC,SAAS,OAAO,EAAE,EAAE,CAAC,SAAS,MAAM,EAAE,IAAI,GAAG,IAAI,EAAE,IAAI,GAAG,KAAK,IAAI,OAAO,CACxG,OAAO,CAAC,CAAC,EAAE,CAAC,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,CAAC,EAClC,IAAI,EACJ,IAAI,CACJ,CAAA"}
|
|
@@ -1,35 +1,40 @@
|
|
|
1
|
+
import type { NeverType } from '../never/never_type.js';
|
|
2
|
+
import type { IsTuple } from '../tuple/tuple_type.js';
|
|
1
3
|
import type { IndexAt } from './array_index.js';
|
|
2
4
|
import type { ArrayType } from './array_type.js';
|
|
3
5
|
/**
|
|
4
|
-
*
|
|
6
|
+
* ⚗️ *transform*
|
|
7
|
+
*
|
|
8
|
+
* Splits array or tuple `A` into two at the specified `Index`.
|
|
5
9
|
*
|
|
6
10
|
* If the `Index` is out of bounds,
|
|
7
|
-
* it will set to the boundary value
|
|
11
|
+
* it will set to the boundary value.
|
|
12
|
+
*
|
|
13
|
+
* It is the type level `splice()`.
|
|
8
14
|
*
|
|
9
15
|
* @example
|
|
10
16
|
* ```ts
|
|
11
|
-
* SplitAt<[1, 2, 3, 4, 5], 0> // [[], [1, 2, 3, 4, 5]]
|
|
12
|
-
* SplitAt<[1, 2, 3, 4, 5], -5> // [[], [1, 2, 3, 4, 5]]
|
|
13
|
-
*
|
|
14
17
|
* SplitAt<[1, 2, 3, 4, 5], 2> // [[1, 2], [3, 4, 5]]
|
|
18
|
+
* SplitAt<[1, 2, 3, 4, 5], -3> // [[1, 2], [3, 4, 5]]
|
|
15
19
|
*
|
|
16
|
-
* SplitAt<[1, 2, 3, 4, 5],
|
|
17
|
-
* SplitAt<[1, 2, 3, 4, 5], -1> // [[1, 2, 3, 4], [5]]
|
|
20
|
+
* SplitAt<[1, 2, 3, 4, 5], 2, 2> // [[1, 2, 5], [3, 4]]
|
|
18
21
|
*
|
|
19
|
-
* SplitAt<[1, 2, 3, 4, 5],
|
|
22
|
+
* SplitAt<[1, 2, 3, 4, 5], 2, 2, ['a', 'b']> // [[1, 2, 'a', 'b', 5], [3, 4]]
|
|
20
23
|
*
|
|
21
24
|
* // out of bound resets to boundary
|
|
22
25
|
* SplitAt<[1, 2, 3, 4, 5], 6> // [[1, 2, 3, 4, 5], []]
|
|
23
26
|
* SplitAt<[1, 2, 3, 4, 5], -6> // [[], [1, 2, 3, 4, 5]]
|
|
24
27
|
* ```
|
|
25
28
|
*/
|
|
26
|
-
export type SplitAt<A extends unknown[], Index extends number> = ArrayType<A, [
|
|
29
|
+
export type SplitAt<A extends unknown[], Index extends number, DeleteCount extends number | never = never, Insert extends unknown[] | never = never> = ArrayType<A, [
|
|
27
30
|
A,
|
|
28
31
|
A
|
|
29
|
-
],
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
32
|
+
], SplitAt._<A, [], [], IndexAt._<A, Index>, DeleteCount, Insert>>;
|
|
33
|
+
export declare namespace SplitAt {
|
|
34
|
+
type _<A extends unknown[], B extends unknown[], C extends unknown[], Index extends number, DeleteCount, Insert extends unknown[]> = 0 extends A['length'] ? IsTuple<Insert, [[...Insert, ...B], C], [B, C]> : (Index extends B['length'] ? _D<A, B, C, DeleteCount, Insert> : (A extends [infer Head, ...infer Tail] ? _<Tail, [...B, Head], [], Index, DeleteCount, Insert> : 'unexpected: A does not extends [Head, ...Tail]'));
|
|
35
|
+
type _D<A extends unknown[], B extends unknown[], C extends unknown[], DeleteCount, Insert extends unknown[]> = NeverType<DeleteCount, [
|
|
36
|
+
B,
|
|
37
|
+
A
|
|
38
|
+
], DeleteCount extends C['length'] ? IsTuple<Insert, [[...B, ...Insert, ...A], C], [[...B, ...A], C]> : (A extends [infer Head, ...infer Tail] ? _D<Tail, B, [...C, Head], DeleteCount, Insert> : IsTuple<Insert, [[...Insert, ...B], C], [B, C]>)>;
|
|
39
|
+
}
|
|
35
40
|
//# sourceMappingURL=array_plus.split_at.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"array_plus.split_at.d.ts","sourceRoot":"","sources":["../../ts/array/array_plus.split_at.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,kBAAkB,CAAA;AAC/C,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAA;AAEhD
|
|
1
|
+
{"version":3,"file":"array_plus.split_at.d.ts","sourceRoot":"","sources":["../../ts/array/array_plus.split_at.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,wBAAwB,CAAA;AACvD,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,wBAAwB,CAAA;AACrD,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,kBAAkB,CAAA;AAC/C,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAA;AAEhD;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AACH,MAAM,MAAM,OAAO,CAClB,CAAC,SAAS,OAAO,EAAE,EACnB,KAAK,SAAS,MAAM,EACpB,WAAW,SAAS,MAAM,GAAG,KAAK,GAAG,KAAK,EAC1C,MAAM,SAAS,OAAO,EAAE,GAAG,KAAK,GAAG,KAAK,IACrC,SAAS,CACZ,CAAC,EACD;IAAC,CAAC;IAAE,CAAC;CAAC,EACN,OAAO,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,OAAO,CAAC,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,EAAE,WAAW,EAAE,MAAM,CAAC,CAC9D,CAAA;AAED,yBAAiB,OAAO,CAAC;IACxB,KAAY,CAAC,CACZ,CAAC,SAAS,OAAO,EAAE,EACnB,CAAC,SAAS,OAAO,EAAE,EACnB,CAAC,SAAS,OAAO,EAAE,EACnB,KAAK,SAAS,MAAM,EACpB,WAAW,EACX,MAAM,SAAS,OAAO,EAAE,IACrB,CAAC,SAAS,CAAC,CAAC,QAAQ,CAAC,GACtB,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC,GAAG,MAAM,EAAE,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAC/C,CAAC,KAAK,SAAS,CAAC,CAAC,QAAQ,CAAC,GACzB,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,WAAW,EAAE,MAAM,CAAC,GAChC,CAAC,CAAC,SAAS,CAAC,MAAM,IAAI,EAAE,GAAG,MAAM,IAAI,CAAC,GACrC,CAAC,CAAC,IAAI,EAAE,CAAC,GAAG,CAAC,EAAE,IAAI,CAAC,EAAE,EAAE,EAAE,KAAK,EAAE,WAAW,EAAE,MAAM,CAAC,GACrD,gDAAgD,CAAC,CAAC,CAAA;IAEvD,KAAY,EAAE,CACb,CAAC,SAAS,OAAO,EAAE,EACnB,CAAC,SAAS,OAAO,EAAE,EACnB,CAAC,SAAS,OAAO,EAAE,EACnB,WAAW,EACX,MAAM,SAAS,OAAO,EAAE,IACrB,SAAS,CACZ,WAAW,EACX;QAAC,CAAC;QAAE,CAAC;KAAC,EACN,WAAW,SAAS,CAAC,CAAC,QAAQ,CAAC,GAC7B,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC,GAAG,CAAC,EAAE,GAAG,MAAM,EAAE,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,GAAG,CAAC,EAAE,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAChE,CAAC,CAAC,SAAS,CAAC,MAAM,IAAI,EAAE,GAAG,MAAM,IAAI,CAAC,GACrC,EAAE,CAAC,IAAI,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,IAAI,CAAC,EAAE,WAAW,EAAE,MAAM,CAAC,GAC9C,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC,GAAG,MAAM,EAAE,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CACjD,CACD,CAAA;CACD"}
|
|
@@ -18,7 +18,10 @@ import type { Negative } from '../numeric/negative.js';
|
|
|
18
18
|
* type R = IndexAt<['a', 'b', 'c'], -4> // never
|
|
19
19
|
* ```
|
|
20
20
|
*/
|
|
21
|
-
export type IndexAt<A extends Array<unknown>, N extends number, Fail = never, Upper = A['length'], Lower = 0> =
|
|
21
|
+
export type IndexAt<A extends Array<unknown>, N extends number, Fail = never, Upper = A['length'], Lower = 0> = IsNever<A, Fail, IndexAt._<A, N, Fail, Upper, Lower>>;
|
|
22
|
+
export declare namespace IndexAt {
|
|
23
|
+
type _<A extends Array<unknown>, N extends number, Fail = never, Upper = A['length'], Lower = 0> = IsEqual<A['length'], 0, Fail, Integer<N, StrictNumberType<A['length'], N, Negative<N, GreaterThan<Abs<N>, A['length']> extends true ? Lower : Subtract<A['length'], Abs<N>>, GreaterThan<A['length'], N> extends true ? N : Upper>>, IsAny<N, number, StrictNumberType<N, N>>>>;
|
|
24
|
+
}
|
|
22
25
|
/**
|
|
23
26
|
* Is N an out of bound index of A.
|
|
24
27
|
*
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"array_index.d.ts","sourceRoot":"","sources":["../../ts/array/array_index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,oBAAoB,CAAA;AAC/C,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,mBAAmB,CAAA;AAChD,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,gBAAgB,CAAA;AACzC,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,yBAAyB,CAAA;AAC1D,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,qBAAqB,CAAA;AACnD,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,wBAAwB,CAAA;AACrD,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,iCAAiC,CAAA;AACvE,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,uBAAuB,CAAA;AACpD,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,wBAAwB,CAAA;AAEtD;;;;;;;;;;GAUG;AACH,MAAM,MAAM,OAAO,CAClB,CAAC,SAAS,KAAK,CAAC,OAAO,CAAC,EACxB,CAAC,SAAS,MAAM,EAChB,IAAI,GAAG,KAAK,EACZ,KAAK,GAAG,CAAC,CAAC,QAAQ,CAAC,EACnB,KAAK,GAAG,CAAC,IACN,OAAO,CACV,CAAC,CAAC,QAAQ,CAAC,EACX,CAAC,EACD,IAAI,EACJ,OAAO,CACN,CAAC,EACD,gBAAgB,CACf,CAAC,CAAC,QAAQ,CAAC,EAEX,CAAC,EAED,QAAQ,CACP,CAAC,EACD,WAAW,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,SAAS,IAAI,GAAG,KAAK,GAAG,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,EACrF,WAAW,CAAC,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,SAAS,IAAI,GAAG,CAAC,GAAG,KAAK,CACpD,CACD,EAED,KAAK,CACJ,CAAC,EACD,MAAM,EACN,gBAAgB,CACf,CAAC,EAED,CAAC,CACD,CACD,CACD,CACD,CAAA;AAED;;;;;;;;;;GAUG;AACH,MAAM,MAAM,iBAAiB,CAAC,CAAC,SAAS,OAAO,EAAE,EAAE,CAAC,SAAS,MAAM,EAAE,IAAI,GAAG,IAAI,EAAE,IAAI,GAAG,KAAK,IAAI,OAAO,CACxG,OAAO,CAAC,CAAC,EAAE,CAAC,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,CAAC,EAClC,IAAI,EACJ,IAAI,CACJ,CAAA"}
|
|
1
|
+
{"version":3,"file":"array_index.d.ts","sourceRoot":"","sources":["../../ts/array/array_index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,oBAAoB,CAAA;AAC/C,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,mBAAmB,CAAA;AAChD,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,gBAAgB,CAAA;AACzC,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,yBAAyB,CAAA;AAC1D,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,qBAAqB,CAAA;AACnD,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,wBAAwB,CAAA;AACrD,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,iCAAiC,CAAA;AACvE,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,uBAAuB,CAAA;AACpD,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,wBAAwB,CAAA;AAEtD;;;;;;;;;;GAUG;AACH,MAAM,MAAM,OAAO,CAClB,CAAC,SAAS,KAAK,CAAC,OAAO,CAAC,EACxB,CAAC,SAAS,MAAM,EAChB,IAAI,GAAG,KAAK,EACZ,KAAK,GAAG,CAAC,CAAC,QAAQ,CAAC,EACnB,KAAK,GAAG,CAAC,IACN,OAAO,CAAC,CAAC,EAAE,IAAI,EAAE,OAAO,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,KAAK,CAAC,CAAC,CAAA;AAEzD,yBAAiB,OAAO,CAAC;IACxB,KAAY,CAAC,CACZ,CAAC,SAAS,KAAK,CAAC,OAAO,CAAC,EACxB,CAAC,SAAS,MAAM,EAChB,IAAI,GAAG,KAAK,EACZ,KAAK,GAAG,CAAC,CAAC,QAAQ,CAAC,EACnB,KAAK,GAAG,CAAC,IACN,OAAO,CACV,CAAC,CAAC,QAAQ,CAAC,EACX,CAAC,EACD,IAAI,EACJ,OAAO,CACN,CAAC,EACD,gBAAgB,CACf,CAAC,CAAC,QAAQ,CAAC,EAEX,CAAC,EAED,QAAQ,CACP,CAAC,EACD,WAAW,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,SAAS,IAAI,GAAG,KAAK,GAAG,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,EACrF,WAAW,CAAC,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,SAAS,IAAI,GAAG,CAAC,GAAG,KAAK,CACpD,CACD,EAED,KAAK,CACJ,CAAC,EACD,MAAM,EACN,gBAAgB,CACf,CAAC,EAED,CAAC,CACD,CACD,CACD,CACD,CAAA;CACD;AAED;;;;;;;;;;GAUG;AACH,MAAM,MAAM,iBAAiB,CAAC,CAAC,SAAS,OAAO,EAAE,EAAE,CAAC,SAAS,MAAM,EAAE,IAAI,GAAG,IAAI,EAAE,IAAI,GAAG,KAAK,IAAI,OAAO,CACxG,OAAO,CAAC,CAAC,EAAE,CAAC,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,CAAC,EAClC,IAAI,EACJ,IAAI,CACJ,CAAA"}
|
|
@@ -1,35 +1,40 @@
|
|
|
1
|
+
import type { NeverType } from '../never/never_type.js';
|
|
2
|
+
import type { IsTuple } from '../tuple/tuple_type.js';
|
|
1
3
|
import type { IndexAt } from './array_index.js';
|
|
2
4
|
import type { ArrayType } from './array_type.js';
|
|
3
5
|
/**
|
|
4
|
-
*
|
|
6
|
+
* ⚗️ *transform*
|
|
7
|
+
*
|
|
8
|
+
* Splits array or tuple `A` into two at the specified `Index`.
|
|
5
9
|
*
|
|
6
10
|
* If the `Index` is out of bounds,
|
|
7
|
-
* it will set to the boundary value
|
|
11
|
+
* it will set to the boundary value.
|
|
12
|
+
*
|
|
13
|
+
* It is the type level `splice()`.
|
|
8
14
|
*
|
|
9
15
|
* @example
|
|
10
16
|
* ```ts
|
|
11
|
-
* SplitAt<[1, 2, 3, 4, 5], 0> // [[], [1, 2, 3, 4, 5]]
|
|
12
|
-
* SplitAt<[1, 2, 3, 4, 5], -5> // [[], [1, 2, 3, 4, 5]]
|
|
13
|
-
*
|
|
14
17
|
* SplitAt<[1, 2, 3, 4, 5], 2> // [[1, 2], [3, 4, 5]]
|
|
18
|
+
* SplitAt<[1, 2, 3, 4, 5], -3> // [[1, 2], [3, 4, 5]]
|
|
15
19
|
*
|
|
16
|
-
* SplitAt<[1, 2, 3, 4, 5],
|
|
17
|
-
* SplitAt<[1, 2, 3, 4, 5], -1> // [[1, 2, 3, 4], [5]]
|
|
20
|
+
* SplitAt<[1, 2, 3, 4, 5], 2, 2> // [[1, 2, 5], [3, 4]]
|
|
18
21
|
*
|
|
19
|
-
* SplitAt<[1, 2, 3, 4, 5],
|
|
22
|
+
* SplitAt<[1, 2, 3, 4, 5], 2, 2, ['a', 'b']> // [[1, 2, 'a', 'b', 5], [3, 4]]
|
|
20
23
|
*
|
|
21
24
|
* // out of bound resets to boundary
|
|
22
25
|
* SplitAt<[1, 2, 3, 4, 5], 6> // [[1, 2, 3, 4, 5], []]
|
|
23
26
|
* SplitAt<[1, 2, 3, 4, 5], -6> // [[], [1, 2, 3, 4, 5]]
|
|
24
27
|
* ```
|
|
25
28
|
*/
|
|
26
|
-
export type SplitAt<A extends unknown[], Index extends number> = ArrayType<A, [
|
|
29
|
+
export type SplitAt<A extends unknown[], Index extends number, DeleteCount extends number | never = never, Insert extends unknown[] | never = never> = ArrayType<A, [
|
|
27
30
|
A,
|
|
28
31
|
A
|
|
29
|
-
],
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
32
|
+
], SplitAt._<A, [], [], IndexAt._<A, Index>, DeleteCount, Insert>>;
|
|
33
|
+
export declare namespace SplitAt {
|
|
34
|
+
type _<A extends unknown[], B extends unknown[], C extends unknown[], Index extends number, DeleteCount, Insert extends unknown[]> = 0 extends A['length'] ? IsTuple<Insert, [[...Insert, ...B], C], [B, C]> : (Index extends B['length'] ? _D<A, B, C, DeleteCount, Insert> : (A extends [infer Head, ...infer Tail] ? _<Tail, [...B, Head], [], Index, DeleteCount, Insert> : 'unexpected: A does not extends [Head, ...Tail]'));
|
|
35
|
+
type _D<A extends unknown[], B extends unknown[], C extends unknown[], DeleteCount, Insert extends unknown[]> = NeverType<DeleteCount, [
|
|
36
|
+
B,
|
|
37
|
+
A
|
|
38
|
+
], DeleteCount extends C['length'] ? IsTuple<Insert, [[...B, ...Insert, ...A], C], [[...B, ...A], C]> : (A extends [infer Head, ...infer Tail] ? _D<Tail, B, [...C, Head], DeleteCount, Insert> : IsTuple<Insert, [[...Insert, ...B], C], [B, C]>)>;
|
|
39
|
+
}
|
|
35
40
|
//# sourceMappingURL=array_plus.split_at.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"array_plus.split_at.d.ts","sourceRoot":"","sources":["../../ts/array/array_plus.split_at.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,kBAAkB,CAAA;AAC/C,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAA;AAEhD
|
|
1
|
+
{"version":3,"file":"array_plus.split_at.d.ts","sourceRoot":"","sources":["../../ts/array/array_plus.split_at.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,wBAAwB,CAAA;AACvD,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,wBAAwB,CAAA;AACrD,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,kBAAkB,CAAA;AAC/C,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAA;AAEhD;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AACH,MAAM,MAAM,OAAO,CAClB,CAAC,SAAS,OAAO,EAAE,EACnB,KAAK,SAAS,MAAM,EACpB,WAAW,SAAS,MAAM,GAAG,KAAK,GAAG,KAAK,EAC1C,MAAM,SAAS,OAAO,EAAE,GAAG,KAAK,GAAG,KAAK,IACrC,SAAS,CACZ,CAAC,EACD;IAAC,CAAC;IAAE,CAAC;CAAC,EACN,OAAO,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,OAAO,CAAC,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,EAAE,WAAW,EAAE,MAAM,CAAC,CAC9D,CAAA;AAED,yBAAiB,OAAO,CAAC;IACxB,KAAY,CAAC,CACZ,CAAC,SAAS,OAAO,EAAE,EACnB,CAAC,SAAS,OAAO,EAAE,EACnB,CAAC,SAAS,OAAO,EAAE,EACnB,KAAK,SAAS,MAAM,EACpB,WAAW,EACX,MAAM,SAAS,OAAO,EAAE,IACrB,CAAC,SAAS,CAAC,CAAC,QAAQ,CAAC,GACtB,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC,GAAG,MAAM,EAAE,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAC/C,CAAC,KAAK,SAAS,CAAC,CAAC,QAAQ,CAAC,GACzB,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,WAAW,EAAE,MAAM,CAAC,GAChC,CAAC,CAAC,SAAS,CAAC,MAAM,IAAI,EAAE,GAAG,MAAM,IAAI,CAAC,GACrC,CAAC,CAAC,IAAI,EAAE,CAAC,GAAG,CAAC,EAAE,IAAI,CAAC,EAAE,EAAE,EAAE,KAAK,EAAE,WAAW,EAAE,MAAM,CAAC,GACrD,gDAAgD,CAAC,CAAC,CAAA;IAEvD,KAAY,EAAE,CACb,CAAC,SAAS,OAAO,EAAE,EACnB,CAAC,SAAS,OAAO,EAAE,EACnB,CAAC,SAAS,OAAO,EAAE,EACnB,WAAW,EACX,MAAM,SAAS,OAAO,EAAE,IACrB,SAAS,CACZ,WAAW,EACX;QAAC,CAAC;QAAE,CAAC;KAAC,EACN,WAAW,SAAS,CAAC,CAAC,QAAQ,CAAC,GAC7B,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC,GAAG,CAAC,EAAE,GAAG,MAAM,EAAE,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,GAAG,CAAC,EAAE,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAChE,CAAC,CAAC,SAAS,CAAC,MAAM,IAAI,EAAE,GAAG,MAAM,IAAI,CAAC,GACrC,EAAE,CAAC,IAAI,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,IAAI,CAAC,EAAE,WAAW,EAAE,MAAM,CAAC,GAC9C,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC,GAAG,MAAM,EAAE,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CACjD,CACD,CAAA;CACD"}
|
package/package.json
CHANGED
|
@@ -1,7 +1,18 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "type-plus",
|
|
3
|
-
"version": "7.
|
|
3
|
+
"version": "7.6.0",
|
|
4
4
|
"description": "Provides additional types for TypeScript.",
|
|
5
|
+
"keywords": [
|
|
6
|
+
"assert",
|
|
7
|
+
"test",
|
|
8
|
+
"testing",
|
|
9
|
+
"type-check",
|
|
10
|
+
"type",
|
|
11
|
+
"types",
|
|
12
|
+
"typescript",
|
|
13
|
+
"typings",
|
|
14
|
+
"utils"
|
|
15
|
+
],
|
|
5
16
|
"homepage": "https://github.com/unional/type-plus/tree/main/type-plus#readme",
|
|
6
17
|
"bugs": {
|
|
7
18
|
"url": "https://github.com/unional/type-plus/issues"
|
package/ts/array/array_index.ts
CHANGED
|
@@ -25,35 +25,45 @@ export type IndexAt<
|
|
|
25
25
|
Fail = never,
|
|
26
26
|
Upper = A['length'],
|
|
27
27
|
Lower = 0
|
|
28
|
-
> =
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
N,
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
GreaterThan<A['length'], N> extends true ? N : Upper
|
|
43
|
-
>
|
|
44
|
-
>,
|
|
45
|
-
// N: number or float
|
|
46
|
-
IsAny<
|
|
28
|
+
> = IsNever<A, Fail, IndexAt._<A, N, Fail, Upper, Lower>>
|
|
29
|
+
|
|
30
|
+
export namespace IndexAt {
|
|
31
|
+
export type _<
|
|
32
|
+
A extends Array<unknown>,
|
|
33
|
+
N extends number,
|
|
34
|
+
Fail = never,
|
|
35
|
+
Upper = A['length'],
|
|
36
|
+
Lower = 0
|
|
37
|
+
> = IsEqual<
|
|
38
|
+
A['length'],
|
|
39
|
+
0,
|
|
40
|
+
Fail,
|
|
41
|
+
Integer<
|
|
47
42
|
N,
|
|
48
|
-
number,
|
|
49
43
|
StrictNumberType<
|
|
44
|
+
A['length'],
|
|
45
|
+
// A: array
|
|
46
|
+
N,
|
|
47
|
+
// A: tuple
|
|
48
|
+
Negative<
|
|
49
|
+
N,
|
|
50
|
+
GreaterThan<Abs<N>, A['length']> extends true ? Lower : Subtract<A['length'], Abs<N>>,
|
|
51
|
+
GreaterThan<A['length'], N> extends true ? N : Upper
|
|
52
|
+
>
|
|
53
|
+
>,
|
|
54
|
+
// N: number or float
|
|
55
|
+
IsAny<
|
|
50
56
|
N,
|
|
51
|
-
|
|
52
|
-
|
|
57
|
+
number,
|
|
58
|
+
StrictNumberType<
|
|
59
|
+
N,
|
|
60
|
+
// TODO: handle tuple to union of indexes
|
|
61
|
+
N
|
|
62
|
+
>
|
|
53
63
|
>
|
|
54
64
|
>
|
|
55
65
|
>
|
|
56
|
-
|
|
66
|
+
}
|
|
57
67
|
|
|
58
68
|
/**
|
|
59
69
|
* Is N an out of bound index of A.
|
|
@@ -1,45 +1,74 @@
|
|
|
1
|
+
import type { NeverType } from '../never/never_type.js'
|
|
2
|
+
import type { IsTuple } from '../tuple/tuple_type.js'
|
|
1
3
|
import type { IndexAt } from './array_index.js'
|
|
2
4
|
import type { ArrayType } from './array_type.js'
|
|
3
5
|
|
|
4
6
|
/**
|
|
5
|
-
*
|
|
7
|
+
* ⚗️ *transform*
|
|
8
|
+
*
|
|
9
|
+
* Splits array or tuple `A` into two at the specified `Index`.
|
|
6
10
|
*
|
|
7
11
|
* If the `Index` is out of bounds,
|
|
8
|
-
* it will set to the boundary value
|
|
12
|
+
* it will set to the boundary value.
|
|
13
|
+
*
|
|
14
|
+
* It is the type level `splice()`.
|
|
9
15
|
*
|
|
10
16
|
* @example
|
|
11
17
|
* ```ts
|
|
12
|
-
* SplitAt<[1, 2, 3, 4, 5], 0> // [[], [1, 2, 3, 4, 5]]
|
|
13
|
-
* SplitAt<[1, 2, 3, 4, 5], -5> // [[], [1, 2, 3, 4, 5]]
|
|
14
|
-
*
|
|
15
18
|
* SplitAt<[1, 2, 3, 4, 5], 2> // [[1, 2], [3, 4, 5]]
|
|
19
|
+
* SplitAt<[1, 2, 3, 4, 5], -3> // [[1, 2], [3, 4, 5]]
|
|
16
20
|
*
|
|
17
|
-
* SplitAt<[1, 2, 3, 4, 5],
|
|
18
|
-
* SplitAt<[1, 2, 3, 4, 5], -1> // [[1, 2, 3, 4], [5]]
|
|
21
|
+
* SplitAt<[1, 2, 3, 4, 5], 2, 2> // [[1, 2, 5], [3, 4]]
|
|
19
22
|
*
|
|
20
|
-
* SplitAt<[1, 2, 3, 4, 5],
|
|
23
|
+
* SplitAt<[1, 2, 3, 4, 5], 2, 2, ['a', 'b']> // [[1, 2, 'a', 'b', 5], [3, 4]]
|
|
21
24
|
*
|
|
22
25
|
* // out of bound resets to boundary
|
|
23
26
|
* SplitAt<[1, 2, 3, 4, 5], 6> // [[1, 2, 3, 4, 5], []]
|
|
24
27
|
* SplitAt<[1, 2, 3, 4, 5], -6> // [[], [1, 2, 3, 4, 5]]
|
|
25
28
|
* ```
|
|
26
29
|
*/
|
|
27
|
-
export type SplitAt<
|
|
30
|
+
export type SplitAt<
|
|
31
|
+
A extends unknown[],
|
|
32
|
+
Index extends number,
|
|
33
|
+
DeleteCount extends number | never = never,
|
|
34
|
+
Insert extends unknown[] | never = never
|
|
35
|
+
> = ArrayType<
|
|
28
36
|
A,
|
|
29
37
|
[A, A],
|
|
30
|
-
|
|
38
|
+
SplitAt._<A, [], [], IndexAt._<A, Index>, DeleteCount, Insert>
|
|
31
39
|
>
|
|
32
40
|
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
> =
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
41
|
+
export namespace SplitAt {
|
|
42
|
+
export type _<
|
|
43
|
+
A extends unknown[],
|
|
44
|
+
B extends unknown[],
|
|
45
|
+
C extends unknown[],
|
|
46
|
+
Index extends number,
|
|
47
|
+
DeleteCount,
|
|
48
|
+
Insert extends unknown[],
|
|
49
|
+
> = 0 extends A['length']
|
|
50
|
+
? IsTuple<Insert, [[...Insert, ...B], C], [B, C]>
|
|
51
|
+
: (Index extends B['length']
|
|
52
|
+
? _D<A, B, C, DeleteCount, Insert>
|
|
53
|
+
: (A extends [infer Head, ...infer Tail]
|
|
54
|
+
? _<Tail, [...B, Head], [], Index, DeleteCount, Insert>
|
|
55
|
+
: 'unexpected: A does not extends [Head, ...Tail]'))
|
|
56
|
+
|
|
57
|
+
export type _D<
|
|
58
|
+
A extends unknown[],
|
|
59
|
+
B extends unknown[],
|
|
60
|
+
C extends unknown[],
|
|
61
|
+
DeleteCount,
|
|
62
|
+
Insert extends unknown[],
|
|
63
|
+
> = NeverType<
|
|
64
|
+
DeleteCount,
|
|
65
|
+
[B, A],
|
|
66
|
+
DeleteCount extends C['length']
|
|
67
|
+
? IsTuple<Insert, [[...B, ...Insert, ...A], C], [[...B, ...A], C]>
|
|
68
|
+
: (A extends [infer Head, ...infer Tail]
|
|
69
|
+
? _D<Tail, B, [...C, Head], DeleteCount, Insert>
|
|
70
|
+
: IsTuple<Insert, [[...Insert, ...B], C], [B, C]>
|
|
71
|
+
)
|
|
72
|
+
>
|
|
73
|
+
}
|
|
74
|
+
|
package/ts/array/readme.md
CHANGED
|
@@ -394,12 +394,28 @@ ArrayPlus.Reverse<[1, 2, 3]> // [3, 2, 1]
|
|
|
394
394
|
|
|
395
395
|
### [`ArrayPlus.SplitAt`](./array_plus.split_at.ts#L22)
|
|
396
396
|
|
|
397
|
-
|
|
397
|
+
`ArrayPlus.SplitAt<A, Index>`
|
|
398
398
|
|
|
399
|
-
|
|
399
|
+
⚗️ *transform*
|
|
400
|
+
|
|
401
|
+
Splits array or tuple `A` into two at the specified `Index`.
|
|
402
|
+
|
|
403
|
+
If the `Index` is out of bounds,
|
|
404
|
+
it will set to the boundary value.
|
|
405
|
+
|
|
406
|
+
It is the type level `splice()`.
|
|
400
407
|
|
|
401
408
|
```ts
|
|
402
|
-
|
|
409
|
+
SplitAt<[1, 2, 3, 4, 5], 2> // [[1, 2], [3, 4, 5]]
|
|
410
|
+
SplitAt<[1, 2, 3, 4, 5], -3> // [[1, 2], [3, 4, 5]]
|
|
411
|
+
|
|
412
|
+
SplitAt<[1, 2, 3, 4, 5], 2, 2> // [[1, 2, 5], [3, 4]]
|
|
413
|
+
|
|
414
|
+
SplitAt<[1, 2, 3, 4, 5], 2, 2, ['a', 'b']> // [[1, 2, 'a', 'b', 5], [3, 4]]
|
|
415
|
+
|
|
416
|
+
// out of bound resets to boundary
|
|
417
|
+
SplitAt<[1, 2, 3, 4, 5], 6> // [[1, 2, 3, 4, 5], []]
|
|
418
|
+
SplitAt<[1, 2, 3, 4, 5], -6> // [[], [1, 2, 3, 4, 5]]
|
|
403
419
|
```
|
|
404
420
|
|
|
405
421
|
### [`ArrayPlus.Some`](./array.some.ts#L23)
|
|
@@ -440,6 +456,10 @@ while some common ones are exposed at top-level.
|
|
|
440
456
|
|
|
441
457
|
Here are the list of array methods and their corresponding type-level functions, if available.
|
|
442
458
|
|
|
459
|
+
✅ means it is implemented.
|
|
460
|
+
✴️ means it is implemented with reduced functionality
|
|
461
|
+
🧬 means there is a built-in mechanism or type for it.
|
|
462
|
+
|
|
443
463
|
- ✅ `at`: [`ArrayPlus.At`](#arrayplusat)
|
|
444
464
|
- ✅ `concat`: [`Concat` | `ArrayPlus.Concat`](#arrayplusconcat) (`[...A, ...B]`)
|
|
445
465
|
- 🚧 `copyWithin`: `CopyWithin<A, Target, Start, End>`
|
|
@@ -464,7 +484,7 @@ Here are the list of array methods and their corresponding type-level functions,
|
|
|
464
484
|
- 🚧 `slice`:
|
|
465
485
|
- ✴️ `some`: [`Some` | `ArrayPlus.Some`](#arrayplussome)
|
|
466
486
|
- 🚧 `sort`:
|
|
467
|
-
-
|
|
487
|
+
- ✴️ `splice`: [`ArrayPlus.SplitAt`](#arrayplussplitat)
|
|
468
488
|
- 🧬 `unshift`: `[T, ...A]`
|
|
469
489
|
- 🧬 `values`: `keyof A`
|
|
470
490
|
|