merge-anything 5.1.2 → 5.1.4
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/index.cjs +6 -1
- package/dist/index.es.js +6 -1
- package/dist/types/index.d.ts +2 -2
- package/dist/types/merge.d.ts +4 -4
- package/dist/types/typeUtils/Assign.d.ts +8 -8
- package/dist/types/typeUtils/Iteration.d.ts +5 -5
- package/dist/types/typeUtils/List.d.ts +3 -3
- package/dist/types/typeUtils/MergeDeep.d.ts +5 -5
- package/dist/types/typeUtils/PrettyPrint.d.ts +3 -3
- package/package.json +9 -9
package/dist/index.cjs
CHANGED
|
@@ -109,7 +109,12 @@ function mergeAndConcat(object, ...otherObjects) {
|
|
|
109
109
|
// }
|
|
110
110
|
// const ba1: Barguments = { key: 'value1' }
|
|
111
111
|
// const ba2: Barguments = { key: 'value2' }
|
|
112
|
-
// const ba = merge(ba1, ba2)
|
|
112
|
+
// const ba = merge(ba1, ba2)
|
|
113
|
+
// interface Carguments {
|
|
114
|
+
// key: string
|
|
115
|
+
// }
|
|
116
|
+
// const ca = merge<Carguments, Carguments[]>({ key: 'value1' }, { key: 'value2' })
|
|
117
|
+
// type P = Pop<Carguments[]>
|
|
113
118
|
|
|
114
119
|
exports.concatArrays = concatArrays;
|
|
115
120
|
exports.merge = merge;
|
package/dist/index.es.js
CHANGED
|
@@ -107,6 +107,11 @@ function mergeAndConcat(object, ...otherObjects) {
|
|
|
107
107
|
// }
|
|
108
108
|
// const ba1: Barguments = { key: 'value1' }
|
|
109
109
|
// const ba2: Barguments = { key: 'value2' }
|
|
110
|
-
// const ba = merge(ba1, ba2)
|
|
110
|
+
// const ba = merge(ba1, ba2)
|
|
111
|
+
// interface Carguments {
|
|
112
|
+
// key: string
|
|
113
|
+
// }
|
|
114
|
+
// const ca = merge<Carguments, Carguments[]>({ key: 'value1' }, { key: 'value2' })
|
|
115
|
+
// type P = Pop<Carguments[]>
|
|
111
116
|
|
|
112
117
|
export { concatArrays, merge, mergeAndCompare, mergeAndConcat };
|
package/dist/types/index.d.ts
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
export * from './merge';
|
|
2
|
-
export * from './extensions';
|
|
1
|
+
export * from './merge.js';
|
|
2
|
+
export * from './extensions.js';
|
package/dist/types/merge.d.ts
CHANGED
|
@@ -1,12 +1,12 @@
|
|
|
1
|
-
import type { Assign } from './typeUtils/Assign';
|
|
2
|
-
import type { Pop } from './typeUtils/List';
|
|
3
|
-
import type { PrettyPrint } from './typeUtils/PrettyPrint';
|
|
1
|
+
import type { Assign } from './typeUtils/Assign.js';
|
|
2
|
+
import type { Pop } from './typeUtils/List.js';
|
|
3
|
+
import type { PrettyPrint } from './typeUtils/PrettyPrint.js';
|
|
4
4
|
/**
|
|
5
5
|
* The return type of `merge()`. It reflects the type that is returned by JavaScript.
|
|
6
6
|
*
|
|
7
7
|
* This TS Utility can be used as standalone as well
|
|
8
8
|
*/
|
|
9
|
-
export
|
|
9
|
+
export type Merge<T, Ts extends unknown[]> = T extends Record<string | number | symbol, unknown> ? Ts extends Record<string | number | symbol, unknown>[] ? PrettyPrint<Assign<T, Ts>> : Pop<Ts> : Pop<Ts>;
|
|
10
10
|
/**
|
|
11
11
|
* Merge anything recursively.
|
|
12
12
|
* Objects get merged, special objects (classes etc.) are re-assigned "as is".
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import { MergeDeep } from './MergeDeep';
|
|
2
|
-
import { Iteration, IterationOf, Pos, Next } from './Iteration';
|
|
3
|
-
import { Length, List } from './List';
|
|
1
|
+
import type { MergeDeep } from './MergeDeep.js';
|
|
2
|
+
import type { Iteration, IterationOf, Pos, Next } from './Iteration.js';
|
|
3
|
+
import type { Length, List } from './List.js';
|
|
4
4
|
/**
|
|
5
5
|
* Ask TS to re-check that `A1` extends `A2`.
|
|
6
6
|
* And if it fails, `A2` will be enforced anyway.
|
|
@@ -14,7 +14,7 @@ import { Length, List } from './List';
|
|
|
14
14
|
* type test1 = Cast<'42', number> // number
|
|
15
15
|
* ```
|
|
16
16
|
*/
|
|
17
|
-
|
|
17
|
+
type Cast<A1, A2> = A1 extends A2 ? A1 : A2;
|
|
18
18
|
/**
|
|
19
19
|
* Check whether `A1` is part of `A2` or not. The difference with
|
|
20
20
|
* `extends` is that it forces a [[Boolean]] return.
|
|
@@ -33,9 +33,9 @@ declare type Cast<A1, A2> = A1 extends A2 ? A1 : A2;
|
|
|
33
33
|
* /// Nothing cannot extend nothing, use `Equals`
|
|
34
34
|
* ```
|
|
35
35
|
*/
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
36
|
+
type Extends<A1, A2> = [A1] extends [never] ? 0 : A1 extends A2 ? 1 : 0;
|
|
37
|
+
type __Assign<O extends Record<string | number | symbol, unknown>, Os extends List<Record<string | number | symbol, unknown>>, I extends Iteration = IterationOf<0>> = Extends<Pos<I>, Length<Os>> extends 1 ? O : __Assign<MergeDeep<O, Os[Pos<I>]>, Os, Next<I>>;
|
|
38
|
+
type _Assign<O extends Record<string | number | symbol, unknown>, Os extends List<Record<string | number | symbol, unknown>>> = __Assign<O, Os> extends infer X ? Cast<X, Record<string | number | symbol, unknown>> : never;
|
|
39
39
|
/**
|
|
40
40
|
* Assign a list of [[Object]] into `O` with [[MergeDeep]]. Merges from right to
|
|
41
41
|
* left, first items get overridden by the next ones (last-in overrides).
|
|
@@ -46,5 +46,5 @@ declare type _Assign<O extends Record<string | number | symbol, unknown>, Os ext
|
|
|
46
46
|
* ```ts
|
|
47
47
|
* ```
|
|
48
48
|
*/
|
|
49
|
-
export
|
|
49
|
+
export type Assign<O extends Record<string | number | symbol, unknown>, Os extends List<Record<string | number | symbol, unknown>>> = O extends unknown ? (Os extends unknown ? _Assign<O, Os> : never) : never;
|
|
50
50
|
export {};
|
|
@@ -1,14 +1,14 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* An entry of `IterationMap`
|
|
3
3
|
*/
|
|
4
|
-
export
|
|
4
|
+
export type Iteration = [
|
|
5
5
|
value: number,
|
|
6
6
|
sign: '-' | '0' | '+',
|
|
7
7
|
prev: keyof IterationMap,
|
|
8
8
|
next: keyof IterationMap,
|
|
9
9
|
oppo: keyof IterationMap
|
|
10
10
|
];
|
|
11
|
-
export
|
|
11
|
+
export type IterationMap = {
|
|
12
12
|
'__': [number, '-' | '0' | '+', '__', '__', '__'];
|
|
13
13
|
'-100': [-100, '-', '__', '-99', '100'];
|
|
14
14
|
'-99': [-99, '-', '-100', '-98', '99'];
|
|
@@ -228,7 +228,7 @@ export declare type IterationMap = {
|
|
|
228
228
|
* type nprev = Pos<prev> // -1
|
|
229
229
|
* ```
|
|
230
230
|
*/
|
|
231
|
-
export
|
|
231
|
+
export type IterationOf<N extends number> = `${N}` extends keyof IterationMap ? IterationMap[`${N}`] : IterationMap['__'];
|
|
232
232
|
/**
|
|
233
233
|
* Get the position of `I` (**number**)
|
|
234
234
|
* @param I to query
|
|
@@ -241,7 +241,7 @@ export declare type IterationOf<N extends number> = `${N}` extends keyof Iterati
|
|
|
241
241
|
* type test1 = Pos<Next<i>> // 21
|
|
242
242
|
* ```
|
|
243
243
|
*/
|
|
244
|
-
export
|
|
244
|
+
export type Pos<I extends Iteration> = I[0];
|
|
245
245
|
/**
|
|
246
246
|
* Move `I`'s position forward
|
|
247
247
|
* @param I to move
|
|
@@ -254,4 +254,4 @@ export declare type Pos<I extends Iteration> = I[0];
|
|
|
254
254
|
* type test1 = Pos<Next<i>> // 21
|
|
255
255
|
* ```
|
|
256
256
|
*/
|
|
257
|
-
export
|
|
257
|
+
export type Next<I extends Iteration> = IterationMap[I[3]];
|
|
@@ -8,7 +8,7 @@
|
|
|
8
8
|
* type list1 = number[]
|
|
9
9
|
* ```
|
|
10
10
|
*/
|
|
11
|
-
export
|
|
11
|
+
export type List<T = any> = readonly T[];
|
|
12
12
|
/**
|
|
13
13
|
* Get the length of `L`
|
|
14
14
|
* @param L to get length
|
|
@@ -17,7 +17,7 @@ export declare type List<T = any> = readonly T[];
|
|
|
17
17
|
* ```ts
|
|
18
18
|
* ```
|
|
19
19
|
*/
|
|
20
|
-
export
|
|
20
|
+
export type Length<L extends List> = L['length'];
|
|
21
21
|
/**
|
|
22
22
|
* Return the last item out of a [[List]]
|
|
23
23
|
* @param L
|
|
@@ -26,4 +26,4 @@ export declare type Length<L extends List> = L['length'];
|
|
|
26
26
|
* ```ts
|
|
27
27
|
* ```
|
|
28
28
|
*/
|
|
29
|
-
export
|
|
29
|
+
export type Pop<L extends List> = L extends readonly [] ? never : L extends [...unknown[], infer Last] ? Last : L extends (infer T)[] ? T : never;
|
|
@@ -6,7 +6,7 @@
|
|
|
6
6
|
* ```ts
|
|
7
7
|
* ```
|
|
8
8
|
*/
|
|
9
|
-
|
|
9
|
+
type OptionalKeys<O extends object> = O extends unknown ? {
|
|
10
10
|
[K in keyof O]-?: {} extends Pick<O, K> ? K : never;
|
|
11
11
|
}[keyof O] : never;
|
|
12
12
|
/**
|
|
@@ -17,13 +17,13 @@ declare type OptionalKeys<O extends object> = O extends unknown ? {
|
|
|
17
17
|
* ```ts
|
|
18
18
|
* ```
|
|
19
19
|
*/
|
|
20
|
-
|
|
20
|
+
type RequiredKeys<O extends object> = O extends unknown ? {
|
|
21
21
|
[K in keyof O]-?: {} extends Pick<O, K> ? never : K;
|
|
22
22
|
}[keyof O] : never;
|
|
23
|
-
|
|
23
|
+
type MergeObjectDeeply<O extends Record<string | number | symbol, unknown>, O1 extends Record<string | number | symbol, unknown>> = {
|
|
24
24
|
[K in keyof (O & O1)]: K extends RequiredKeys<O1> ? MergeObjectsOrReturnFallback<O[K], O1[K], O1[K]> : K extends OptionalKeys<O1> ? K extends OptionalKeys<O> ? MergeObjectsOrReturnFallback<Exclude<O[K], undefined>, Exclude<O1[K], undefined>, Exclude<O[K], undefined> | Exclude<O1[K], undefined>> : K extends RequiredKeys<O> ? Exclude<O1[K], undefined> extends O[K] ? O[K] : MergeObjectsOrReturnFallback<O[K], Exclude<O1[K], undefined>, O[K] | Exclude<O1[K], undefined>> : O1[K] : O[K];
|
|
25
25
|
};
|
|
26
|
-
|
|
26
|
+
type MergeObjectsOrReturnFallback<O, O1, Fallback> = O extends Record<string | number | symbol, unknown> ? O1 extends Record<string | number | symbol, unknown> ? MergeObjectDeeply<O, O1> : Fallback : Fallback;
|
|
27
27
|
/**
|
|
28
28
|
* Accurately merge the fields of `O` with the ones of `O1`. It is
|
|
29
29
|
* equivalent to the spread operator in JavaScript. [[Union]]s and [[Optional]]
|
|
@@ -53,5 +53,5 @@ declare type MergeObjectsOrReturnFallback<O, O1, Fallback> = O extends Record<st
|
|
|
53
53
|
* }
|
|
54
54
|
* ```
|
|
55
55
|
*/
|
|
56
|
-
export
|
|
56
|
+
export type MergeDeep<O extends Record<string | number | symbol, unknown>, O1 extends Record<string | number | symbol, unknown>> = O extends unknown ? (O1 extends unknown ? MergeObjectDeeply<O, O1> : never) : never;
|
|
57
57
|
export {};
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
export
|
|
1
|
+
type Has<U, U1> = [U1] extends [U] ? 1 : 0;
|
|
2
|
+
type If<B extends 0 | 1, Then, Else = never> = B extends 1 ? Then : Else;
|
|
3
|
+
export type PrettyPrint<A, Seen = never> = If<Has<Seen, A>, A, A extends Record<string | number | symbol, unknown> ? {
|
|
4
4
|
[K in keyof A]: PrettyPrint<A[K], A | Seen>;
|
|
5
5
|
} & unknown : A>;
|
|
6
6
|
export {};
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "merge-anything",
|
|
3
|
-
"version": "5.1.
|
|
3
|
+
"version": "5.1.4",
|
|
4
4
|
"sideEffects": false,
|
|
5
5
|
"type": "module",
|
|
6
6
|
"description": "Merge objects & other types recursively. A simple & small integration.",
|
|
@@ -60,21 +60,21 @@
|
|
|
60
60
|
},
|
|
61
61
|
"homepage": "https://github.com/mesqueeb/merge-anything#readme",
|
|
62
62
|
"dependencies": {
|
|
63
|
-
"is-what": "^4.1.
|
|
63
|
+
"is-what": "^4.1.8"
|
|
64
64
|
},
|
|
65
65
|
"devDependencies": {
|
|
66
|
-
"@typescript-eslint/eslint-plugin": "^5.
|
|
67
|
-
"@typescript-eslint/parser": "^5.
|
|
66
|
+
"@typescript-eslint/eslint-plugin": "^5.45.0",
|
|
67
|
+
"@typescript-eslint/parser": "^5.45.0",
|
|
68
68
|
"del-cli": "^5.0.0",
|
|
69
|
-
"eslint": "^8.
|
|
69
|
+
"eslint": "^8.28.0",
|
|
70
70
|
"eslint-config-prettier": "^8.5.0",
|
|
71
71
|
"eslint-plugin-tree-shaking": "^1.10.0",
|
|
72
72
|
"np": "^7.6.2",
|
|
73
|
-
"prettier": "^2.
|
|
74
|
-
"rollup": "^3.
|
|
73
|
+
"prettier": "^2.8.0",
|
|
74
|
+
"rollup": "^3.5.0",
|
|
75
75
|
"rollup-plugin-typescript2": "^0.34.1",
|
|
76
|
-
"typescript": "^4.
|
|
77
|
-
"vitest": "^0.25.
|
|
76
|
+
"typescript": "^4.9.3",
|
|
77
|
+
"vitest": "^0.25.3"
|
|
78
78
|
},
|
|
79
79
|
"np": {
|
|
80
80
|
"yarn": false,
|