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.
@@ -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> = 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>>>>;
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
- * Splits an array into two at the specified `Index`.
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, similar to `array.splice()`.
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], 4> // [[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], 5> // [[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
- ], ArraySplitAtDevice<A, [], IndexAt<A, Index>>>;
30
- /**
31
- * Splits an array into two at the specified `Index`.
32
- * The device does not work on negative index nor out of bound index.
33
- */
34
- export type ArraySplitAtDevice<A extends unknown[], B extends unknown[], Index extends number> = Index extends B['length'] ? [B, A] : A extends [infer Head, ...infer Tail] ? ArraySplitAtDevice<Tail, [...B, Head], Index> : never;
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;;;;;;;;;;;;;;;;;;;;;;GAsBG;AACH,MAAM,MAAM,OAAO,CAAC,CAAC,SAAS,OAAO,EAAE,EAAE,KAAK,SAAS,MAAM,IAAI,SAAS,CACzE,CAAC,EACD;IAAC,CAAC;IAAE,CAAC;CAAC,EACN,kBAAkB,CAAC,CAAC,EAAE,EAAE,EAAE,OAAO,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,CAC5C,CAAA;AAED;;;GAGG;AACH,MAAM,MAAM,kBAAkB,CAC7B,CAAC,SAAS,OAAO,EAAE,EACnB,CAAC,SAAS,OAAO,EAAE,EACnB,KAAK,SAAS,MAAM,IACjB,KAAK,SAAS,CAAC,CAAC,QAAQ,CAAC,GAC1B,CAAC,CAAC,EAAE,CAAC,CAAC,GACN,CAAC,SAAS,CAAC,MAAM,IAAI,EAAE,GAAG,MAAM,IAAI,CAAC,GACrC,kBAAkB,CAAC,IAAI,EAAE,CAAC,GAAG,CAAC,EAAE,IAAI,CAAC,EAAE,KAAK,CAAC,GAC7C,KAAK,CAAA"}
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> = 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>>>>;
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
- * Splits an array into two at the specified `Index`.
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, similar to `array.splice()`.
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], 4> // [[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], 5> // [[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
- ], ArraySplitAtDevice<A, [], IndexAt<A, Index>>>;
30
- /**
31
- * Splits an array into two at the specified `Index`.
32
- * The device does not work on negative index nor out of bound index.
33
- */
34
- export type ArraySplitAtDevice<A extends unknown[], B extends unknown[], Index extends number> = Index extends B['length'] ? [B, A] : A extends [infer Head, ...infer Tail] ? ArraySplitAtDevice<Tail, [...B, Head], Index> : never;
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;;;;;;;;;;;;;;;;;;;;;;GAsBG;AACH,MAAM,MAAM,OAAO,CAAC,CAAC,SAAS,OAAO,EAAE,EAAE,KAAK,SAAS,MAAM,IAAI,SAAS,CACzE,CAAC,EACD;IAAC,CAAC;IAAE,CAAC;CAAC,EACN,kBAAkB,CAAC,CAAC,EAAE,EAAE,EAAE,OAAO,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,CAC5C,CAAA;AAED;;;GAGG;AACH,MAAM,MAAM,kBAAkB,CAC7B,CAAC,SAAS,OAAO,EAAE,EACnB,CAAC,SAAS,OAAO,EAAE,EACnB,KAAK,SAAS,MAAM,IACjB,KAAK,SAAS,CAAC,CAAC,QAAQ,CAAC,GAC1B,CAAC,CAAC,EAAE,CAAC,CAAC,GACN,CAAC,SAAS,CAAC,MAAM,IAAI,EAAE,GAAG,MAAM,IAAI,CAAC,GACrC,kBAAkB,CAAC,IAAI,EAAE,CAAC,GAAG,CAAC,EAAE,IAAI,CAAC,EAAE,KAAK,CAAC,GAC7C,KAAK,CAAA"}
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.5.0",
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"
@@ -25,35 +25,45 @@ export type IndexAt<
25
25
  Fail = never,
26
26
  Upper = A['length'],
27
27
  Lower = 0
28
- > = IsEqual<
29
- A['length'],
30
- 0,
31
- Fail,
32
- Integer<
33
- N,
34
- StrictNumberType<
35
- A['length'],
36
- // A: array
37
- N,
38
- // A: tuple
39
- Negative<
40
- N,
41
- GreaterThan<Abs<N>, A['length']> extends true ? Lower : Subtract<A['length'], Abs<N>>,
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
- // TODO: handle tuple to union of indexes
52
- N
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
- * Splits an array into two at the specified `Index`.
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, similar to `array.splice()`.
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], 4> // [[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], 5> // [[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<A extends unknown[], Index extends number> = ArrayType<
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
- ArraySplitAtDevice<A, [], IndexAt<A, Index>>
38
+ SplitAt._<A, [], [], IndexAt._<A, Index>, DeleteCount, Insert>
31
39
  >
32
40
 
33
- /**
34
- * Splits an array into two at the specified `Index`.
35
- * The device does not work on negative index nor out of bound index.
36
- */
37
- export type ArraySplitAtDevice<
38
- A extends unknown[],
39
- B extends unknown[],
40
- Index extends number
41
- > = Index extends B['length']
42
- ? [B, A]
43
- : A extends [infer Head, ...infer Tail]
44
- ? ArraySplitAtDevice<Tail, [...B, Head], Index>
45
- : never
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
+
@@ -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
- > `ArrayPlus.SplitAt<A, Index>`
397
+ `ArrayPlus.SplitAt<A, Index>`
398
398
 
399
- Splits the array or tuple at `Index`.
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
- ArrayPlus.SplitAt<[1, 2, 3], 1> // [[1, 2], [3]]
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
- - 🚧 `splice`:
487
+ - ✴️ `splice`: [`ArrayPlus.SplitAt`](#arrayplussplitat)
468
488
  - 🧬 `unshift`: `[T, ...A]`
469
489
  - 🧬 `values`: `keyof A`
470
490