smob 1.3.0-alpha.2 → 1.4.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/README.MD +25 -20
- package/dist/index.cjs +76 -73
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.ts +1 -0
- package/dist/index.mjs +76 -71
- package/dist/index.mjs.map +1 -1
- package/dist/module.d.ts +1 -2
- package/dist/presets.d.ts +8 -0
- package/dist/type.d.ts +22 -8
- package/dist/utils/array.d.ts +0 -2
- package/dist/utils/check.d.ts +0 -1
- package/dist/utils/clone.d.ts +1 -0
- package/dist/utils/index.d.ts +1 -1
- package/package.json +1 -1
- /package/dist/utils/{has-own-property.d.ts → object.d.ts} +0 -0
package/README.MD
CHANGED
|
@@ -6,7 +6,7 @@
|
|
|
6
6
|
[](https://snyk.io/test/github/Tada5hi/smob?targetFile=package.json)
|
|
7
7
|
[](https://github.com/semantic-release/semantic-release)
|
|
8
8
|
|
|
9
|
-
Zero dependency library to **s**afe **m**erge **ob**jects.
|
|
9
|
+
Zero dependency library to **s**afe **m**erge **ob**jects and arrays.
|
|
10
10
|
|
|
11
11
|
**Table of Contents**
|
|
12
12
|
|
|
@@ -31,10 +31,11 @@ const output = merge(...sources);
|
|
|
31
31
|
```
|
|
32
32
|
|
|
33
33
|
The following merge options are set by default:
|
|
34
|
-
- **priority**: `left`
|
|
35
|
-
The source aka leftmost array/object has by **default** the highest priority.
|
|
36
34
|
- **array**: `true` Merge object array properties.
|
|
37
|
-
- **
|
|
35
|
+
- **arrayDistinct**: `false` Remove duplicates, when merging array elements.
|
|
36
|
+
- **clone**: `false` Deep clone input sources.
|
|
37
|
+
- **inPlace**: `false` Merge sources in place.
|
|
38
|
+
- **priority**: `left` The source aka leftmost array/object has by **default** the highest priority.
|
|
38
39
|
|
|
39
40
|
The merge behaviour can be changed by creating a custom [merger](#merger).
|
|
40
41
|
|
|
@@ -44,42 +45,46 @@ The merge behaviour can be changed by creating a custom [merger](#merger).
|
|
|
44
45
|
```typescript
|
|
45
46
|
import { merge } from 'smob';
|
|
46
47
|
|
|
47
|
-
|
|
48
|
-
//
|
|
48
|
+
merge({ a: 1 }, { b: 2 }, { c: 3 });
|
|
49
|
+
// { a: 1, b: 2, c: 3 }
|
|
50
|
+
|
|
51
|
+
merge(['foo'], ['bar']);
|
|
52
|
+
// ['foo', 'bar']
|
|
53
|
+
|
|
49
54
|
```
|
|
50
55
|
|
|
51
56
|
### Merger
|
|
52
57
|
|
|
53
58
|
A custom merger can simply be created by using the `createMerger` method.
|
|
54
59
|
|
|
55
|
-
**
|
|
60
|
+
**Array**
|
|
56
61
|
```typescript
|
|
57
62
|
import { createMerger } from 'smob';
|
|
58
63
|
|
|
59
|
-
const merge = createMerger({
|
|
64
|
+
const merge = createMerger({ array: false });
|
|
60
65
|
|
|
61
|
-
|
|
62
|
-
//
|
|
66
|
+
merge({ a: [1,2,3] }, { a: [4,5,6] });
|
|
67
|
+
// { a: [1,2,3] }
|
|
63
68
|
```
|
|
64
69
|
|
|
65
|
-
**
|
|
70
|
+
**ArrayDistinct**
|
|
66
71
|
```typescript
|
|
67
72
|
import { createMerger } from 'smob';
|
|
68
73
|
|
|
69
|
-
const merge = createMerger({
|
|
74
|
+
const merge = createMerger({ arrayDistinct: true });
|
|
70
75
|
|
|
71
|
-
|
|
72
|
-
//
|
|
76
|
+
merge({ a: [1,2,3] }, { a: [3,4,5] });
|
|
77
|
+
// { a: [1,2,3,4,5] }
|
|
73
78
|
```
|
|
74
79
|
|
|
75
|
-
**
|
|
80
|
+
**Priority**
|
|
76
81
|
```typescript
|
|
77
82
|
import { createMerger } from 'smob';
|
|
78
83
|
|
|
79
|
-
const merge = createMerger({
|
|
84
|
+
const merge = createMerger({ priority: 'right' });
|
|
80
85
|
|
|
81
|
-
|
|
82
|
-
//
|
|
86
|
+
merge({ a: 1 }, { a: 2 }, { a: 3 })
|
|
87
|
+
// { a: 3 }
|
|
83
88
|
```
|
|
84
89
|
|
|
85
90
|
**Strategy**
|
|
@@ -98,8 +103,8 @@ const merge = createMerger({
|
|
|
98
103
|
}
|
|
99
104
|
});
|
|
100
105
|
|
|
101
|
-
|
|
102
|
-
//
|
|
106
|
+
merge({ a: 1 }, { a: 2 }, { a: 3 });
|
|
107
|
+
// { a: 6 }
|
|
103
108
|
```
|
|
104
109
|
|
|
105
110
|
A returned value indicates that the strategy has been applied.
|
package/dist/index.cjs
CHANGED
|
@@ -19,14 +19,6 @@
|
|
|
19
19
|
*/ function isObject(item) {
|
|
20
20
|
return !!item && typeof item === 'object' && !Array.isArray(item);
|
|
21
21
|
}
|
|
22
|
-
function isSafeInput(object) {
|
|
23
|
-
try {
|
|
24
|
-
JSON.stringify(object);
|
|
25
|
-
return true;
|
|
26
|
-
} catch (e) {
|
|
27
|
-
return false;
|
|
28
|
-
}
|
|
29
|
-
}
|
|
30
22
|
function isSafeKey(key) {
|
|
31
23
|
return key !== '__proto__' && key !== 'prototype' && key !== 'constructor';
|
|
32
24
|
}
|
|
@@ -76,34 +68,7 @@ function distinctArray(arr) {
|
|
|
76
68
|
}
|
|
77
69
|
return arr;
|
|
78
70
|
}
|
|
79
|
-
function mergeArrays(...sources) {
|
|
80
|
-
return [].concat.apply([], [
|
|
81
|
-
...sources
|
|
82
|
-
]);
|
|
83
|
-
}
|
|
84
|
-
function mergeArraysDistinct(...sources) {
|
|
85
|
-
return distinctArray(mergeArrays(...sources));
|
|
86
|
-
}
|
|
87
71
|
|
|
88
|
-
/*
|
|
89
|
-
* Copyright (c) 2023.
|
|
90
|
-
* Author Peter Placzek (tada5hi)
|
|
91
|
-
* For the full copyright and license information,
|
|
92
|
-
* view the LICENSE file that was distributed with this source code.
|
|
93
|
-
*/ function _extends$1() {
|
|
94
|
-
_extends$1 = Object.assign || function(target) {
|
|
95
|
-
for(var i = 1; i < arguments.length; i++){
|
|
96
|
-
var source = arguments[i];
|
|
97
|
-
for(var key in source){
|
|
98
|
-
if (Object.prototype.hasOwnProperty.call(source, key)) {
|
|
99
|
-
target[key] = source[key];
|
|
100
|
-
}
|
|
101
|
-
}
|
|
102
|
-
}
|
|
103
|
-
return target;
|
|
104
|
-
};
|
|
105
|
-
return _extends$1.apply(this, arguments);
|
|
106
|
-
}
|
|
107
72
|
/* istanbul ignore next */ const gT = (()=>{
|
|
108
73
|
if (typeof globalThis !== 'undefined') {
|
|
109
74
|
return globalThis;
|
|
@@ -121,19 +86,39 @@ function mergeArraysDistinct(...sources) {
|
|
|
121
86
|
}
|
|
122
87
|
throw new Error('unable to locate global object');
|
|
123
88
|
})();
|
|
124
|
-
function
|
|
89
|
+
function polyfillClone(input) {
|
|
90
|
+
const map = new WeakMap();
|
|
91
|
+
const fn = (value)=>{
|
|
92
|
+
if (Array.isArray(value)) {
|
|
93
|
+
if (map.has(value)) {
|
|
94
|
+
return map.get(value);
|
|
95
|
+
}
|
|
96
|
+
const cloned = [];
|
|
97
|
+
map.set(value, cloned);
|
|
98
|
+
value.map((el)=>cloned.push(fn(el)));
|
|
99
|
+
return cloned;
|
|
100
|
+
}
|
|
101
|
+
if (isObject(value)) {
|
|
102
|
+
if (map.has(value)) {
|
|
103
|
+
return map.get(value);
|
|
104
|
+
}
|
|
105
|
+
const output = {};
|
|
106
|
+
const keys = Object.keys(value);
|
|
107
|
+
map.set(value, output);
|
|
108
|
+
for(let i = 0; i < keys.length; i++){
|
|
109
|
+
output[keys[i]] = fn(value[keys[i]]);
|
|
110
|
+
}
|
|
111
|
+
return output;
|
|
112
|
+
}
|
|
113
|
+
return value;
|
|
114
|
+
};
|
|
115
|
+
return fn(input);
|
|
116
|
+
}
|
|
117
|
+
/* istanbul ignore next */ function clone(value) {
|
|
125
118
|
if (gT.structuredClone) {
|
|
126
119
|
return gT.structuredClone(value);
|
|
127
120
|
}
|
|
128
|
-
|
|
129
|
-
return _extends$1({}, value);
|
|
130
|
-
}
|
|
131
|
-
if (Array.isArray(value)) {
|
|
132
|
-
return [
|
|
133
|
-
...value
|
|
134
|
-
];
|
|
135
|
-
}
|
|
136
|
-
return value;
|
|
121
|
+
/* istanbul ignore next */ return polyfillClone(value);
|
|
137
122
|
}
|
|
138
123
|
|
|
139
124
|
/*
|
|
@@ -185,19 +170,18 @@ function buildOptions(options) {
|
|
|
185
170
|
options.array = (_options_array = options.array) != null ? _options_array : true;
|
|
186
171
|
var _options_arrayDistinct;
|
|
187
172
|
options.arrayDistinct = (_options_arrayDistinct = options.arrayDistinct) != null ? _options_arrayDistinct : false;
|
|
173
|
+
var _options_clone;
|
|
174
|
+
options.clone = (_options_clone = options.clone) != null ? _options_clone : false;
|
|
188
175
|
var _options_inPlace;
|
|
189
176
|
options.inPlace = (_options_inPlace = options.inPlace) != null ? _options_inPlace : false;
|
|
190
177
|
options.priority = options.priority || exports.PriorityName.LEFT;
|
|
191
178
|
return options;
|
|
192
179
|
}
|
|
193
180
|
|
|
194
|
-
function baseMerger(
|
|
195
|
-
if (!sources.length) {
|
|
196
|
-
throw new SyntaxError('At least one input element is required.');
|
|
197
|
-
}
|
|
181
|
+
function baseMerger(context, ...sources) {
|
|
198
182
|
let target;
|
|
199
183
|
let source;
|
|
200
|
-
if (options.priority === exports.PriorityName.RIGHT) {
|
|
184
|
+
if (context.options.priority === exports.PriorityName.RIGHT) {
|
|
201
185
|
target = sources.pop();
|
|
202
186
|
source = sources.pop();
|
|
203
187
|
} else {
|
|
@@ -205,18 +189,19 @@ function baseMerger(options, ...sources) {
|
|
|
205
189
|
source = sources.shift();
|
|
206
190
|
}
|
|
207
191
|
if (!source) {
|
|
208
|
-
if (Array.isArray(target) && options.arrayDistinct) {
|
|
192
|
+
if (Array.isArray(target) && context.options.arrayDistinct) {
|
|
209
193
|
return distinctArray(target);
|
|
210
194
|
}
|
|
211
195
|
return target;
|
|
212
196
|
}
|
|
213
197
|
if (Array.isArray(target) && Array.isArray(source)) {
|
|
214
198
|
target.push(...source);
|
|
215
|
-
if (options.priority === exports.PriorityName.RIGHT) {
|
|
216
|
-
return baseMerger(
|
|
199
|
+
if (context.options.priority === exports.PriorityName.RIGHT) {
|
|
200
|
+
return baseMerger(context, ...sources, target);
|
|
217
201
|
}
|
|
218
|
-
return baseMerger(
|
|
202
|
+
return baseMerger(context, target, ...sources);
|
|
219
203
|
}
|
|
204
|
+
context.map.set(source, true);
|
|
220
205
|
if (isObject(target) && isObject(source)) {
|
|
221
206
|
const keys = Object.keys(source);
|
|
222
207
|
for(let i = 0; i < keys.length; i++){
|
|
@@ -225,33 +210,39 @@ function baseMerger(options, ...sources) {
|
|
|
225
210
|
if (!isSafeKey(key)) {
|
|
226
211
|
continue;
|
|
227
212
|
}
|
|
228
|
-
if (options.strategy) {
|
|
229
|
-
const applied = options.strategy(target, key, source[key]);
|
|
213
|
+
if (context.options.strategy) {
|
|
214
|
+
const applied = context.options.strategy(target, key, source[key]);
|
|
230
215
|
if (typeof applied !== 'undefined') {
|
|
231
216
|
continue;
|
|
232
217
|
}
|
|
233
218
|
}
|
|
234
219
|
if (isObject(target[key]) && isObject(source[key])) {
|
|
235
|
-
if (
|
|
220
|
+
if (context.map.has(source[key])) {
|
|
221
|
+
const sourceKeys = Object.keys(source[key]);
|
|
222
|
+
for(let j = 0; j < sourceKeys.length; j++){
|
|
223
|
+
if (isSafeKey(sourceKeys[j]) && !hasOwnProperty(target[key], sourceKeys[j])) {
|
|
224
|
+
target[key][sourceKeys[j]] = source[key][sourceKeys[j]];
|
|
225
|
+
}
|
|
226
|
+
}
|
|
236
227
|
continue;
|
|
237
228
|
}
|
|
238
|
-
if (options.priority === exports.PriorityName.RIGHT) {
|
|
239
|
-
target[key] = baseMerger(
|
|
229
|
+
if (context.options.priority === exports.PriorityName.RIGHT) {
|
|
230
|
+
target[key] = baseMerger(context, source[key], target[key]);
|
|
240
231
|
} else {
|
|
241
|
-
target[key] = baseMerger(
|
|
232
|
+
target[key] = baseMerger(context, target[key], source[key]);
|
|
242
233
|
}
|
|
243
234
|
continue;
|
|
244
235
|
}
|
|
245
|
-
if (options.array && Array.isArray(target[key]) && Array.isArray(source[key])) {
|
|
246
|
-
switch(options.priority){
|
|
236
|
+
if (context.options.array && Array.isArray(target[key]) && Array.isArray(source[key])) {
|
|
237
|
+
switch(context.options.priority){
|
|
247
238
|
case exports.PriorityName.LEFT:
|
|
248
239
|
Object.assign(target, {
|
|
249
|
-
[key]: baseMerger(
|
|
240
|
+
[key]: baseMerger(context, target[key], source[key])
|
|
250
241
|
});
|
|
251
242
|
break;
|
|
252
243
|
case exports.PriorityName.RIGHT:
|
|
253
244
|
Object.assign(target, {
|
|
254
|
-
[key]: baseMerger(
|
|
245
|
+
[key]: baseMerger(context, source[key], target[key])
|
|
255
246
|
});
|
|
256
247
|
break;
|
|
257
248
|
}
|
|
@@ -263,16 +254,24 @@ function baseMerger(options, ...sources) {
|
|
|
263
254
|
}
|
|
264
255
|
}
|
|
265
256
|
}
|
|
266
|
-
|
|
267
|
-
|
|
257
|
+
context.map = new WeakMap();
|
|
258
|
+
if (context.options.priority === exports.PriorityName.RIGHT) {
|
|
259
|
+
return baseMerger(context, ...sources, target);
|
|
268
260
|
}
|
|
269
|
-
return baseMerger(
|
|
261
|
+
return baseMerger(context, target, ...sources);
|
|
270
262
|
}
|
|
271
263
|
function createMerger(input) {
|
|
272
264
|
const options = buildOptions(input);
|
|
273
265
|
return (...sources)=>{
|
|
266
|
+
if (!sources.length) {
|
|
267
|
+
throw new SyntaxError('At least one input element is required.');
|
|
268
|
+
}
|
|
269
|
+
const ctx = {
|
|
270
|
+
options,
|
|
271
|
+
map: new WeakMap()
|
|
272
|
+
};
|
|
274
273
|
if (options.clone) {
|
|
275
|
-
return baseMerger(
|
|
274
|
+
return baseMerger(ctx, ...clone(sources));
|
|
276
275
|
}
|
|
277
276
|
if (!options.inPlace) {
|
|
278
277
|
if (options.priority === exports.PriorityName.LEFT) {
|
|
@@ -287,11 +286,17 @@ function createMerger(input) {
|
|
|
287
286
|
sources.push({});
|
|
288
287
|
}
|
|
289
288
|
}
|
|
290
|
-
return baseMerger(
|
|
289
|
+
return baseMerger(ctx, ...sources);
|
|
291
290
|
};
|
|
292
291
|
}
|
|
293
292
|
const merge = createMerger();
|
|
294
|
-
|
|
293
|
+
|
|
294
|
+
/**
|
|
295
|
+
* Assign source attributes to a target object.
|
|
296
|
+
*
|
|
297
|
+
* @param target
|
|
298
|
+
* @param sources
|
|
299
|
+
*/ function assign(target, ...sources) {
|
|
295
300
|
return createMerger({
|
|
296
301
|
inPlace: true,
|
|
297
302
|
priority: 'left',
|
|
@@ -308,9 +313,7 @@ exports.distinctArray = distinctArray;
|
|
|
308
313
|
exports.hasOwnProperty = hasOwnProperty;
|
|
309
314
|
exports.isEqual = isEqual;
|
|
310
315
|
exports.isObject = isObject;
|
|
311
|
-
exports.isSafeInput = isSafeInput;
|
|
312
316
|
exports.isSafeKey = isSafeKey;
|
|
313
317
|
exports.merge = merge;
|
|
314
|
-
exports.
|
|
315
|
-
exports.mergeArraysDistinct = mergeArraysDistinct;
|
|
318
|
+
exports.polyfillClone = polyfillClone;
|
|
316
319
|
//# sourceMappingURL=index.cjs.map
|
package/dist/index.cjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.cjs","sources":["../src/constants.ts","../src/utils/check.ts","../src/utils/array.ts","../src/utils/clone.ts","../src/utils/cut.ts","../src/utils/has-own-property.ts","../src/utils/options.ts","../src/module.ts"],"sourcesContent":["/*\n * Copyright (c) 2023.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nexport enum PriorityName {\n LEFT = 'left',\n RIGHT = 'right',\n}\n","/*\n * Copyright (c) 2022.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nexport function isObject(item: unknown) : item is Record<string, any> {\n return (\n !!item &&\n typeof item === 'object' &&\n !Array.isArray(item)\n );\n}\n\nexport function isSafeInput(object: any) : boolean {\n try {\n JSON.stringify(object);\n return true;\n } catch (e) {\n return false;\n }\n}\n\nexport function isSafeKey(key: string) : boolean {\n return key !== '__proto__' &&\n key !== 'prototype' &&\n key !== 'constructor';\n}\n\nexport function isEqual(x: any, y: any): boolean {\n if (Object.is(x, y)) return true;\n\n if (x instanceof Date && y instanceof Date) {\n return x.getTime() === y.getTime();\n }\n\n if (x instanceof RegExp && y instanceof RegExp) {\n return x.toString() === y.toString();\n }\n\n if (\n isObject(x) &&\n isObject(y)\n ) {\n const keysX = Reflect.ownKeys(x) as string[];\n const keysY = Reflect.ownKeys(y) as string[];\n if (keysX.length !== keysY.length) {\n return false;\n }\n\n for (let i = 0; i < keysX.length; i++) {\n const key = keysX[i];\n if (!Reflect.has(y, key) || !isEqual(x[key], y[key])) {\n return false;\n }\n }\n\n return true;\n }\n\n if (\n Array.isArray(x) &&\n Array.isArray(y)\n ) {\n if (x.length !== y.length) {\n return false;\n }\n\n for (let i = 0; i < x.length; i++) {\n if (!isEqual(x[i], y[i])) {\n return false;\n }\n }\n\n return true;\n }\n\n return false;\n}\n","/*\n * Copyright (c) 2022.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nimport { isEqual } from './check';\n\nexport function distinctArray<T = any>(arr: T[]) : T[] {\n for (let i = 0; i < arr.length; i++) {\n for (let j = arr.length - 1; j > i; j--) {\n if (isEqual(arr[i], arr[j])) {\n arr.splice(j, 1);\n }\n }\n }\n\n return arr;\n}\n\nexport function mergeArrays(...sources: any[][]) : any[] {\n return ([] as any[]).concat.apply([], [...sources]);\n}\n\nexport function mergeArraysDistinct(...sources: any[][]) : any[] {\n return distinctArray(mergeArrays(...sources));\n}\n","/*\n * Copyright (c) 2023.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nimport { isObject } from './check';\n\n/* istanbul ignore next */\nconst gT = (() => {\n if (typeof globalThis !== 'undefined') {\n return globalThis;\n }\n\n // eslint-disable-next-line no-restricted-globals\n if (typeof self !== 'undefined') {\n // eslint-disable-next-line no-restricted-globals\n return self;\n }\n\n if (typeof window !== 'undefined') {\n return window;\n }\n\n if (typeof global !== 'undefined') {\n return global;\n }\n\n throw new Error('unable to locate global object');\n})();\n\nexport function clone<T>(value: T) : T {\n if (gT.structuredClone) {\n return gT.structuredClone(value);\n }\n\n if (isObject(value)) {\n return { ...value };\n }\n\n if (Array.isArray(value)) {\n return [...value] as T;\n }\n\n return value;\n}\n","/*\n * Copyright (c) 2022.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nimport { isObject } from './check';\n\nexport function cutObject<T extends Record<string, any>>(input: T, depth: number) : T {\n if (depth < 0) {\n return {} as T;\n }\n\n const value = { ...input };\n const keys : (keyof T)[] = Object.keys(value);\n\n for (let i = 0; i < keys.length; i++) {\n if (isObject(value[keys[i]])) {\n value[keys[i]] = cutObject(value[keys[i]], depth - 1);\n }\n }\n\n return value;\n}\n","/*\n * Copyright (c) 2021.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\n// eslint-disable-next-line @typescript-eslint/ban-types\nexport function hasOwnProperty<X extends {}, Y extends PropertyKey>(obj: X, prop: Y): obj is X & Record<Y, unknown> {\n return Object.prototype.hasOwnProperty.call(obj, prop);\n}\n","/*\n * Copyright (c) 2022.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nimport { PriorityName } from '../constants';\nimport type { Options, OptionsInput } from '../type';\n\nexport function buildOptions(options?: OptionsInput) : Options {\n options = options || {};\n\n options.array = options.array ?? true;\n options.arrayDistinct = options.arrayDistinct ?? false;\n options.inPlace = options.inPlace ?? false;\n options.priority = options.priority || PriorityName.LEFT;\n\n return options as Options;\n}\n","/*\n * Copyright (c) 2022.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nimport { PriorityName } from './constants';\nimport type {\n Merger,\n MergerResult,\n MergerSource,\n MergerSourceUnwrap,\n Options,\n OptionsInput,\n} from './type';\n\nimport {\n buildOptions,\n clone,\n distinctArray,\n hasOwnProperty,\n isObject,\n isSafeInput,\n isSafeKey,\n} from './utils';\n\nfunction baseMerger<B extends MergerSource[]>(\n options: Options,\n ...sources: B\n) : MergerResult<B> {\n if (!sources.length) {\n throw new SyntaxError('At least one input element is required.');\n }\n\n let target : MergerSourceUnwrap<B>;\n let source : MergerSourceUnwrap<B> | undefined;\n if (options.priority === PriorityName.RIGHT) {\n target = sources.pop() as MergerSourceUnwrap<B>;\n source = sources.pop() as MergerSourceUnwrap<B>;\n } else {\n target = sources.shift() as MergerSourceUnwrap<B>;\n source = sources.shift() as MergerSourceUnwrap<B>;\n }\n\n if (!source) {\n if (\n Array.isArray(target) &&\n options.arrayDistinct\n ) {\n return distinctArray(target) as MergerResult<B>;\n }\n\n return target as MergerResult<B>;\n }\n\n if (\n Array.isArray(target) &&\n Array.isArray(source)\n ) {\n target.push(...source as MergerSource[]);\n\n if (options.priority === PriorityName.RIGHT) {\n return baseMerger(\n options,\n ...sources,\n target,\n ) as MergerResult<B>;\n }\n\n return baseMerger(\n options,\n target,\n ...sources,\n ) as MergerResult<B>;\n }\n\n if (\n isObject(target) &&\n isObject(source)\n ) {\n const keys = Object.keys(source);\n for (let i = 0; i < keys.length; i++) {\n const key = keys[i] as (keyof MergerSourceUnwrap<B>);\n\n if (hasOwnProperty(target, key)) {\n if (!isSafeKey(key as string)) {\n continue;\n }\n\n if (options.strategy) {\n const applied = options.strategy(target, key as string, source[key]);\n if (typeof applied !== 'undefined') {\n continue;\n }\n }\n\n if (\n isObject(target[key]) &&\n isObject(source[key])\n ) {\n if (!isSafeInput(source[key])) {\n continue;\n }\n\n if (options.priority === PriorityName.RIGHT) {\n target[key] = baseMerger(\n options,\n source[key] as MergerSource,\n target[key] as MergerSource,\n ) as MergerSourceUnwrap<B>[keyof MergerSourceUnwrap<B>];\n } else {\n target[key] = baseMerger(\n options,\n target[key] as MergerSource,\n source[key] as MergerSource,\n ) as MergerSourceUnwrap<B>[keyof MergerSourceUnwrap<B>];\n }\n\n continue;\n }\n\n if (\n options.array &&\n Array.isArray(target[key]) &&\n Array.isArray(source[key])\n ) {\n switch (options.priority) {\n case PriorityName.LEFT:\n Object.assign(target, {\n [key]: baseMerger(options, target[key] as MergerSource, source[key] as MergerSource),\n });\n break;\n case PriorityName.RIGHT:\n Object.assign(target, {\n [key]: baseMerger(options, source[key] as MergerSource, target[key] as MergerSource),\n });\n break;\n }\n }\n } else {\n Object.assign(target, {\n [key]: source[key],\n });\n }\n }\n }\n\n if (options.priority === PriorityName.RIGHT) {\n return baseMerger(options, ...sources, target) as MergerResult<B>;\n }\n\n return baseMerger(options, target, ...sources) as MergerResult<B>;\n}\n\nexport function createMerger(input?: OptionsInput) : Merger {\n const options = buildOptions(input);\n\n return <B extends MergerSource[]>(\n ...sources: B\n ) : MergerResult<B> => {\n if (options.clone) {\n return baseMerger(options, ...clone(sources));\n }\n\n if (!options.inPlace) {\n if (options.priority === PriorityName.LEFT) {\n if (Array.isArray(sources[0])) {\n sources.unshift([]);\n } else {\n sources.unshift({});\n }\n } else if (Array.isArray(sources[0])) {\n sources.push([]);\n } else {\n sources.push({});\n }\n }\n\n return baseMerger(options, ...sources);\n };\n}\n\nexport const merge = createMerger();\n\nexport function assign<A extends Record<string, any>, B extends Record<string, any>[]>(\n target: A,\n ...sources: B\n) : A & MergerResult<B> {\n return createMerger({\n inPlace: true,\n priority: 'left',\n array: false,\n })(target, ...sources) as A & MergerResult<B>;\n}\n"],"names":["PriorityName","LEFT","RIGHT","isObject","item","Array","isArray","isSafeInput","object","JSON","stringify","e","isSafeKey","key","isEqual","x","y","Object","is","Date","getTime","RegExp","toString","keysX","Reflect","ownKeys","keysY","length","i","has","distinctArray","arr","j","splice","mergeArrays","sources","concat","apply","mergeArraysDistinct","_extends","gT","globalThis","self","window","global","Error","clone","value","structuredClone","cutObject","input","depth","keys","hasOwnProperty","obj","prop","prototype","call","buildOptions","options","array","arrayDistinct","inPlace","priority","baseMerger","SyntaxError","target","source","pop","shift","push","strategy","applied","assign","createMerger","unshift","merge"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.cjs","sources":["../src/constants.ts","../src/utils/check.ts","../src/utils/array.ts","../src/utils/clone.ts","../src/utils/cut.ts","../src/utils/object.ts","../src/utils/options.ts","../src/module.ts","../src/presets.ts"],"sourcesContent":["/*\n * Copyright (c) 2023.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nexport enum PriorityName {\n LEFT = 'left',\n RIGHT = 'right',\n}\n","/*\n * Copyright (c) 2022.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nexport function isObject(item: unknown) : item is Record<string, any> {\n return (\n !!item &&\n typeof item === 'object' &&\n !Array.isArray(item)\n );\n}\n\nexport function isSafeKey(key: string) : boolean {\n return key !== '__proto__' &&\n key !== 'prototype' &&\n key !== 'constructor';\n}\n\nexport function isEqual(x: any, y: any): boolean {\n if (Object.is(x, y)) return true;\n\n if (x instanceof Date && y instanceof Date) {\n return x.getTime() === y.getTime();\n }\n\n if (x instanceof RegExp && y instanceof RegExp) {\n return x.toString() === y.toString();\n }\n\n if (\n isObject(x) &&\n isObject(y)\n ) {\n const keysX = Reflect.ownKeys(x) as string[];\n const keysY = Reflect.ownKeys(y) as string[];\n if (keysX.length !== keysY.length) {\n return false;\n }\n\n for (let i = 0; i < keysX.length; i++) {\n const key = keysX[i];\n if (!Reflect.has(y, key) || !isEqual(x[key], y[key])) {\n return false;\n }\n }\n\n return true;\n }\n\n if (\n Array.isArray(x) &&\n Array.isArray(y)\n ) {\n if (x.length !== y.length) {\n return false;\n }\n\n for (let i = 0; i < x.length; i++) {\n if (!isEqual(x[i], y[i])) {\n return false;\n }\n }\n\n return true;\n }\n\n return false;\n}\n","/*\n * Copyright (c) 2022.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nimport { isEqual } from './check';\n\nexport function distinctArray<T = any>(arr: T[]) : T[] {\n for (let i = 0; i < arr.length; i++) {\n for (let j = arr.length - 1; j > i; j--) {\n if (isEqual(arr[i], arr[j])) {\n arr.splice(j, 1);\n }\n }\n }\n\n return arr;\n}\n","/*\n * Copyright (c) 2023.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nimport { isObject } from './check';\n\n/* istanbul ignore next */\nconst gT = (() => {\n if (typeof globalThis !== 'undefined') {\n return globalThis;\n }\n\n // eslint-disable-next-line no-restricted-globals\n if (typeof self !== 'undefined') {\n // eslint-disable-next-line no-restricted-globals\n return self;\n }\n\n if (typeof window !== 'undefined') {\n return window;\n }\n\n if (typeof global !== 'undefined') {\n return global;\n }\n\n throw new Error('unable to locate global object');\n})();\n\nexport function polyfillClone<T>(input: T) {\n const map = new WeakMap();\n\n const fn = <A>(value: A) : A => {\n if (Array.isArray(value)) {\n if (map.has(value)) {\n return map.get(value);\n }\n\n const cloned = [] as A;\n map.set(value, cloned);\n\n value.map((el) => (cloned as any[]).push(fn(el)));\n\n return cloned;\n }\n\n if (isObject(value)) {\n if (map.has(value)) {\n return map.get(value);\n }\n\n const output = {} as A;\n const keys = Object.keys(value);\n\n map.set(value, output);\n for (let i = 0; i < keys.length; i++) {\n output[keys[i] as keyof A] = fn(value[keys[i]]);\n }\n\n return output;\n }\n\n return value;\n };\n\n return fn(input);\n}\n\n/* istanbul ignore next */\nexport function clone<T>(value: T) : T {\n if (gT.structuredClone) {\n return gT.structuredClone(value);\n }\n\n /* istanbul ignore next */\n return polyfillClone(value);\n}\n","/*\n * Copyright (c) 2022.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nimport { isObject } from './check';\n\nexport function cutObject<T extends Record<string, any>>(input: T, depth: number) : T {\n if (depth < 0) {\n return {} as T;\n }\n\n const value = { ...input };\n const keys : (keyof T)[] = Object.keys(value);\n\n for (let i = 0; i < keys.length; i++) {\n if (isObject(value[keys[i]])) {\n value[keys[i]] = cutObject(value[keys[i]], depth - 1);\n }\n }\n\n return value;\n}\n","/*\n * Copyright (c) 2021.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\n// eslint-disable-next-line @typescript-eslint/ban-types\nexport function hasOwnProperty<X extends {}, Y extends PropertyKey>(obj: X, prop: Y): obj is X & Record<Y, unknown> {\n return Object.prototype.hasOwnProperty.call(obj, prop);\n}\n","/*\n * Copyright (c) 2022.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nimport { PriorityName } from '../constants';\nimport type { Options, OptionsInput } from '../type';\n\nexport function buildOptions(options?: OptionsInput) : Options {\n options = options || {};\n\n options.array = options.array ?? true;\n options.arrayDistinct = options.arrayDistinct ?? false;\n options.clone = options.clone ?? false;\n options.inPlace = options.inPlace ?? false;\n options.priority = options.priority || PriorityName.LEFT;\n\n return options as Options;\n}\n","/*\n * Copyright (c) 2022.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nimport { PriorityName } from './constants';\nimport type {\n Merger, MergerContext,\n MergerResult,\n MergerSource,\n MergerSourceUnwrap,\n OptionsInput,\n} from './type';\n\nimport {\n buildOptions,\n clone,\n distinctArray,\n hasOwnProperty,\n isObject,\n isSafeKey,\n} from './utils';\n\nfunction baseMerger<B extends MergerSource[]>(\n context: MergerContext,\n ...sources: B\n) : MergerResult<B> {\n let target : MergerSourceUnwrap<B>;\n let source : MergerSourceUnwrap<B> | undefined;\n if (context.options.priority === PriorityName.RIGHT) {\n target = sources.pop() as MergerSourceUnwrap<B>;\n source = sources.pop() as MergerSourceUnwrap<B>;\n } else {\n target = sources.shift() as MergerSourceUnwrap<B>;\n source = sources.shift() as MergerSourceUnwrap<B>;\n }\n\n if (!source) {\n if (\n Array.isArray(target) &&\n context.options.arrayDistinct\n ) {\n return distinctArray(target) as MergerResult<B>;\n }\n\n return target as MergerResult<B>;\n }\n\n if (\n Array.isArray(target) &&\n Array.isArray(source)\n ) {\n target.push(...source as MergerSource[]);\n\n if (context.options.priority === PriorityName.RIGHT) {\n return baseMerger(\n context,\n ...sources,\n target,\n ) as MergerResult<B>;\n }\n\n return baseMerger(\n context,\n target,\n ...sources,\n ) as MergerResult<B>;\n }\n\n context.map.set(source, true);\n\n if (\n isObject(target) &&\n isObject(source)\n ) {\n const keys = Object.keys(source);\n for (let i = 0; i < keys.length; i++) {\n const key = keys[i] as (keyof MergerSourceUnwrap<B>);\n\n if (hasOwnProperty(target, key)) {\n if (!isSafeKey(key as string)) {\n continue;\n }\n\n if (context.options.strategy) {\n const applied = context.options.strategy(target, key as string, source[key]);\n if (typeof applied !== 'undefined') {\n continue;\n }\n }\n\n if (\n isObject(target[key]) &&\n isObject(source[key])\n ) {\n if (context.map.has(source[key])) {\n const sourceKeys = Object.keys(source[key] as Record<string, any>);\n for (let j = 0; j < sourceKeys.length; j++) {\n if (\n isSafeKey(sourceKeys[j]) &&\n !hasOwnProperty(target[key] as Record<string, any>, sourceKeys[j])\n ) {\n (target[key] as Record<string, any>)[sourceKeys[j]] = (source[key] as Record<string, any>)[sourceKeys[j]];\n }\n }\n\n continue;\n }\n\n if (context.options.priority === PriorityName.RIGHT) {\n target[key] = baseMerger(\n context,\n source[key] as MergerSource,\n target[key] as MergerSource,\n ) as MergerSourceUnwrap<B>[keyof MergerSourceUnwrap<B>];\n } else {\n target[key] = baseMerger(\n context,\n target[key] as MergerSource,\n source[key] as MergerSource,\n ) as MergerSourceUnwrap<B>[keyof MergerSourceUnwrap<B>];\n }\n\n continue;\n }\n\n if (\n context.options.array &&\n Array.isArray(target[key]) &&\n Array.isArray(source[key])\n ) {\n switch (context.options.priority) {\n case PriorityName.LEFT:\n Object.assign(target, {\n [key]: baseMerger(context, target[key] as MergerSource, source[key] as MergerSource),\n });\n break;\n case PriorityName.RIGHT:\n Object.assign(target, {\n [key]: baseMerger(context, source[key] as MergerSource, target[key] as MergerSource),\n });\n break;\n }\n }\n } else {\n Object.assign(target, {\n [key]: source[key],\n });\n }\n }\n }\n\n context.map = new WeakMap();\n\n if (context.options.priority === PriorityName.RIGHT) {\n return baseMerger(context, ...sources, target) as MergerResult<B>;\n }\n\n return baseMerger(context, target, ...sources) as MergerResult<B>;\n}\n\nexport function createMerger(input?: OptionsInput) : Merger {\n const options = buildOptions(input);\n\n return <B extends MergerSource[]>(\n ...sources: B\n ) : MergerResult<B> => {\n if (!sources.length) {\n throw new SyntaxError('At least one input element is required.');\n }\n\n const ctx : MergerContext = {\n options,\n map: new WeakMap<any, any>(),\n };\n\n if (options.clone) {\n return baseMerger(ctx, ...clone(sources));\n }\n\n if (!options.inPlace) {\n if (options.priority === PriorityName.LEFT) {\n if (Array.isArray(sources[0])) {\n sources.unshift([]);\n } else {\n sources.unshift({});\n }\n } else if (Array.isArray(sources[0])) {\n sources.push([]);\n } else {\n sources.push({});\n }\n }\n\n return baseMerger(ctx, ...sources);\n };\n}\n\nexport const merge = createMerger();\n","/*\n * Copyright (c) 2023.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nimport { createMerger } from './module';\nimport type { MergerResult } from './type';\n\n/**\n * Assign source attributes to a target object.\n *\n * @param target\n * @param sources\n */\nexport function assign<A extends Record<string, any>, B extends Record<string, any>[]>(\n target: A,\n ...sources: B\n) : A & MergerResult<B> {\n return createMerger({\n inPlace: true,\n priority: 'left',\n array: false,\n })(target, ...sources) as A & MergerResult<B>;\n}\n"],"names":["PriorityName","LEFT","RIGHT","isObject","item","Array","isArray","isSafeKey","key","isEqual","x","y","Object","is","Date","getTime","RegExp","toString","keysX","Reflect","ownKeys","keysY","length","i","has","distinctArray","arr","j","splice","gT","globalThis","self","window","global","Error","polyfillClone","input","map","WeakMap","fn","value","get","cloned","set","el","push","output","keys","clone","structuredClone","cutObject","depth","hasOwnProperty","obj","prop","prototype","call","buildOptions","options","array","arrayDistinct","inPlace","priority","baseMerger","context","sources","target","source","pop","shift","strategy","applied","sourceKeys","assign","createMerger","SyntaxError","ctx","unshift","merge"],"mappings":"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"}
|
package/dist/index.d.ts
CHANGED
package/dist/index.mjs
CHANGED
|
@@ -17,14 +17,6 @@
|
|
|
17
17
|
*/ function isObject(item) {
|
|
18
18
|
return !!item && typeof item === 'object' && !Array.isArray(item);
|
|
19
19
|
}
|
|
20
|
-
function isSafeInput(object) {
|
|
21
|
-
try {
|
|
22
|
-
JSON.stringify(object);
|
|
23
|
-
return true;
|
|
24
|
-
} catch (e) {
|
|
25
|
-
return false;
|
|
26
|
-
}
|
|
27
|
-
}
|
|
28
20
|
function isSafeKey(key) {
|
|
29
21
|
return key !== '__proto__' && key !== 'prototype' && key !== 'constructor';
|
|
30
22
|
}
|
|
@@ -74,34 +66,7 @@ function distinctArray(arr) {
|
|
|
74
66
|
}
|
|
75
67
|
return arr;
|
|
76
68
|
}
|
|
77
|
-
function mergeArrays(...sources) {
|
|
78
|
-
return [].concat.apply([], [
|
|
79
|
-
...sources
|
|
80
|
-
]);
|
|
81
|
-
}
|
|
82
|
-
function mergeArraysDistinct(...sources) {
|
|
83
|
-
return distinctArray(mergeArrays(...sources));
|
|
84
|
-
}
|
|
85
69
|
|
|
86
|
-
/*
|
|
87
|
-
* Copyright (c) 2023.
|
|
88
|
-
* Author Peter Placzek (tada5hi)
|
|
89
|
-
* For the full copyright and license information,
|
|
90
|
-
* view the LICENSE file that was distributed with this source code.
|
|
91
|
-
*/ function _extends$1() {
|
|
92
|
-
_extends$1 = Object.assign || function(target) {
|
|
93
|
-
for(var i = 1; i < arguments.length; i++){
|
|
94
|
-
var source = arguments[i];
|
|
95
|
-
for(var key in source){
|
|
96
|
-
if (Object.prototype.hasOwnProperty.call(source, key)) {
|
|
97
|
-
target[key] = source[key];
|
|
98
|
-
}
|
|
99
|
-
}
|
|
100
|
-
}
|
|
101
|
-
return target;
|
|
102
|
-
};
|
|
103
|
-
return _extends$1.apply(this, arguments);
|
|
104
|
-
}
|
|
105
70
|
/* istanbul ignore next */ const gT = (()=>{
|
|
106
71
|
if (typeof globalThis !== 'undefined') {
|
|
107
72
|
return globalThis;
|
|
@@ -119,19 +84,39 @@ function mergeArraysDistinct(...sources) {
|
|
|
119
84
|
}
|
|
120
85
|
throw new Error('unable to locate global object');
|
|
121
86
|
})();
|
|
122
|
-
function
|
|
87
|
+
function polyfillClone(input) {
|
|
88
|
+
const map = new WeakMap();
|
|
89
|
+
const fn = (value)=>{
|
|
90
|
+
if (Array.isArray(value)) {
|
|
91
|
+
if (map.has(value)) {
|
|
92
|
+
return map.get(value);
|
|
93
|
+
}
|
|
94
|
+
const cloned = [];
|
|
95
|
+
map.set(value, cloned);
|
|
96
|
+
value.map((el)=>cloned.push(fn(el)));
|
|
97
|
+
return cloned;
|
|
98
|
+
}
|
|
99
|
+
if (isObject(value)) {
|
|
100
|
+
if (map.has(value)) {
|
|
101
|
+
return map.get(value);
|
|
102
|
+
}
|
|
103
|
+
const output = {};
|
|
104
|
+
const keys = Object.keys(value);
|
|
105
|
+
map.set(value, output);
|
|
106
|
+
for(let i = 0; i < keys.length; i++){
|
|
107
|
+
output[keys[i]] = fn(value[keys[i]]);
|
|
108
|
+
}
|
|
109
|
+
return output;
|
|
110
|
+
}
|
|
111
|
+
return value;
|
|
112
|
+
};
|
|
113
|
+
return fn(input);
|
|
114
|
+
}
|
|
115
|
+
/* istanbul ignore next */ function clone(value) {
|
|
123
116
|
if (gT.structuredClone) {
|
|
124
117
|
return gT.structuredClone(value);
|
|
125
118
|
}
|
|
126
|
-
|
|
127
|
-
return _extends$1({}, value);
|
|
128
|
-
}
|
|
129
|
-
if (Array.isArray(value)) {
|
|
130
|
-
return [
|
|
131
|
-
...value
|
|
132
|
-
];
|
|
133
|
-
}
|
|
134
|
-
return value;
|
|
119
|
+
/* istanbul ignore next */ return polyfillClone(value);
|
|
135
120
|
}
|
|
136
121
|
|
|
137
122
|
/*
|
|
@@ -183,19 +168,18 @@ function buildOptions(options) {
|
|
|
183
168
|
options.array = (_options_array = options.array) != null ? _options_array : true;
|
|
184
169
|
var _options_arrayDistinct;
|
|
185
170
|
options.arrayDistinct = (_options_arrayDistinct = options.arrayDistinct) != null ? _options_arrayDistinct : false;
|
|
171
|
+
var _options_clone;
|
|
172
|
+
options.clone = (_options_clone = options.clone) != null ? _options_clone : false;
|
|
186
173
|
var _options_inPlace;
|
|
187
174
|
options.inPlace = (_options_inPlace = options.inPlace) != null ? _options_inPlace : false;
|
|
188
175
|
options.priority = options.priority || PriorityName.LEFT;
|
|
189
176
|
return options;
|
|
190
177
|
}
|
|
191
178
|
|
|
192
|
-
function baseMerger(
|
|
193
|
-
if (!sources.length) {
|
|
194
|
-
throw new SyntaxError('At least one input element is required.');
|
|
195
|
-
}
|
|
179
|
+
function baseMerger(context, ...sources) {
|
|
196
180
|
let target;
|
|
197
181
|
let source;
|
|
198
|
-
if (options.priority === PriorityName.RIGHT) {
|
|
182
|
+
if (context.options.priority === PriorityName.RIGHT) {
|
|
199
183
|
target = sources.pop();
|
|
200
184
|
source = sources.pop();
|
|
201
185
|
} else {
|
|
@@ -203,18 +187,19 @@ function baseMerger(options, ...sources) {
|
|
|
203
187
|
source = sources.shift();
|
|
204
188
|
}
|
|
205
189
|
if (!source) {
|
|
206
|
-
if (Array.isArray(target) && options.arrayDistinct) {
|
|
190
|
+
if (Array.isArray(target) && context.options.arrayDistinct) {
|
|
207
191
|
return distinctArray(target);
|
|
208
192
|
}
|
|
209
193
|
return target;
|
|
210
194
|
}
|
|
211
195
|
if (Array.isArray(target) && Array.isArray(source)) {
|
|
212
196
|
target.push(...source);
|
|
213
|
-
if (options.priority === PriorityName.RIGHT) {
|
|
214
|
-
return baseMerger(
|
|
197
|
+
if (context.options.priority === PriorityName.RIGHT) {
|
|
198
|
+
return baseMerger(context, ...sources, target);
|
|
215
199
|
}
|
|
216
|
-
return baseMerger(
|
|
200
|
+
return baseMerger(context, target, ...sources);
|
|
217
201
|
}
|
|
202
|
+
context.map.set(source, true);
|
|
218
203
|
if (isObject(target) && isObject(source)) {
|
|
219
204
|
const keys = Object.keys(source);
|
|
220
205
|
for(let i = 0; i < keys.length; i++){
|
|
@@ -223,33 +208,39 @@ function baseMerger(options, ...sources) {
|
|
|
223
208
|
if (!isSafeKey(key)) {
|
|
224
209
|
continue;
|
|
225
210
|
}
|
|
226
|
-
if (options.strategy) {
|
|
227
|
-
const applied = options.strategy(target, key, source[key]);
|
|
211
|
+
if (context.options.strategy) {
|
|
212
|
+
const applied = context.options.strategy(target, key, source[key]);
|
|
228
213
|
if (typeof applied !== 'undefined') {
|
|
229
214
|
continue;
|
|
230
215
|
}
|
|
231
216
|
}
|
|
232
217
|
if (isObject(target[key]) && isObject(source[key])) {
|
|
233
|
-
if (
|
|
218
|
+
if (context.map.has(source[key])) {
|
|
219
|
+
const sourceKeys = Object.keys(source[key]);
|
|
220
|
+
for(let j = 0; j < sourceKeys.length; j++){
|
|
221
|
+
if (isSafeKey(sourceKeys[j]) && !hasOwnProperty(target[key], sourceKeys[j])) {
|
|
222
|
+
target[key][sourceKeys[j]] = source[key][sourceKeys[j]];
|
|
223
|
+
}
|
|
224
|
+
}
|
|
234
225
|
continue;
|
|
235
226
|
}
|
|
236
|
-
if (options.priority === PriorityName.RIGHT) {
|
|
237
|
-
target[key] = baseMerger(
|
|
227
|
+
if (context.options.priority === PriorityName.RIGHT) {
|
|
228
|
+
target[key] = baseMerger(context, source[key], target[key]);
|
|
238
229
|
} else {
|
|
239
|
-
target[key] = baseMerger(
|
|
230
|
+
target[key] = baseMerger(context, target[key], source[key]);
|
|
240
231
|
}
|
|
241
232
|
continue;
|
|
242
233
|
}
|
|
243
|
-
if (options.array && Array.isArray(target[key]) && Array.isArray(source[key])) {
|
|
244
|
-
switch(options.priority){
|
|
234
|
+
if (context.options.array && Array.isArray(target[key]) && Array.isArray(source[key])) {
|
|
235
|
+
switch(context.options.priority){
|
|
245
236
|
case PriorityName.LEFT:
|
|
246
237
|
Object.assign(target, {
|
|
247
|
-
[key]: baseMerger(
|
|
238
|
+
[key]: baseMerger(context, target[key], source[key])
|
|
248
239
|
});
|
|
249
240
|
break;
|
|
250
241
|
case PriorityName.RIGHT:
|
|
251
242
|
Object.assign(target, {
|
|
252
|
-
[key]: baseMerger(
|
|
243
|
+
[key]: baseMerger(context, source[key], target[key])
|
|
253
244
|
});
|
|
254
245
|
break;
|
|
255
246
|
}
|
|
@@ -261,16 +252,24 @@ function baseMerger(options, ...sources) {
|
|
|
261
252
|
}
|
|
262
253
|
}
|
|
263
254
|
}
|
|
264
|
-
|
|
265
|
-
|
|
255
|
+
context.map = new WeakMap();
|
|
256
|
+
if (context.options.priority === PriorityName.RIGHT) {
|
|
257
|
+
return baseMerger(context, ...sources, target);
|
|
266
258
|
}
|
|
267
|
-
return baseMerger(
|
|
259
|
+
return baseMerger(context, target, ...sources);
|
|
268
260
|
}
|
|
269
261
|
function createMerger(input) {
|
|
270
262
|
const options = buildOptions(input);
|
|
271
263
|
return (...sources)=>{
|
|
264
|
+
if (!sources.length) {
|
|
265
|
+
throw new SyntaxError('At least one input element is required.');
|
|
266
|
+
}
|
|
267
|
+
const ctx = {
|
|
268
|
+
options,
|
|
269
|
+
map: new WeakMap()
|
|
270
|
+
};
|
|
272
271
|
if (options.clone) {
|
|
273
|
-
return baseMerger(
|
|
272
|
+
return baseMerger(ctx, ...clone(sources));
|
|
274
273
|
}
|
|
275
274
|
if (!options.inPlace) {
|
|
276
275
|
if (options.priority === PriorityName.LEFT) {
|
|
@@ -285,11 +284,17 @@ function createMerger(input) {
|
|
|
285
284
|
sources.push({});
|
|
286
285
|
}
|
|
287
286
|
}
|
|
288
|
-
return baseMerger(
|
|
287
|
+
return baseMerger(ctx, ...sources);
|
|
289
288
|
};
|
|
290
289
|
}
|
|
291
290
|
const merge = createMerger();
|
|
292
|
-
|
|
291
|
+
|
|
292
|
+
/**
|
|
293
|
+
* Assign source attributes to a target object.
|
|
294
|
+
*
|
|
295
|
+
* @param target
|
|
296
|
+
* @param sources
|
|
297
|
+
*/ function assign(target, ...sources) {
|
|
293
298
|
return createMerger({
|
|
294
299
|
inPlace: true,
|
|
295
300
|
priority: 'left',
|
|
@@ -297,5 +302,5 @@ function assign(target, ...sources) {
|
|
|
297
302
|
})(target, ...sources);
|
|
298
303
|
}
|
|
299
304
|
|
|
300
|
-
export { PriorityName, assign, buildOptions, clone, createMerger, cutObject, distinctArray, hasOwnProperty, isEqual, isObject,
|
|
305
|
+
export { PriorityName, assign, buildOptions, clone, createMerger, cutObject, distinctArray, hasOwnProperty, isEqual, isObject, isSafeKey, merge, polyfillClone };
|
|
301
306
|
//# sourceMappingURL=index.mjs.map
|
package/dist/index.mjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.mjs","sources":["../src/constants.ts","../src/utils/check.ts","../src/utils/array.ts","../src/utils/clone.ts","../src/utils/cut.ts","../src/utils/has-own-property.ts","../src/utils/options.ts","../src/module.ts"],"sourcesContent":["/*\n * Copyright (c) 2023.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nexport enum PriorityName {\n LEFT = 'left',\n RIGHT = 'right',\n}\n","/*\n * Copyright (c) 2022.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nexport function isObject(item: unknown) : item is Record<string, any> {\n return (\n !!item &&\n typeof item === 'object' &&\n !Array.isArray(item)\n );\n}\n\nexport function isSafeInput(object: any) : boolean {\n try {\n JSON.stringify(object);\n return true;\n } catch (e) {\n return false;\n }\n}\n\nexport function isSafeKey(key: string) : boolean {\n return key !== '__proto__' &&\n key !== 'prototype' &&\n key !== 'constructor';\n}\n\nexport function isEqual(x: any, y: any): boolean {\n if (Object.is(x, y)) return true;\n\n if (x instanceof Date && y instanceof Date) {\n return x.getTime() === y.getTime();\n }\n\n if (x instanceof RegExp && y instanceof RegExp) {\n return x.toString() === y.toString();\n }\n\n if (\n isObject(x) &&\n isObject(y)\n ) {\n const keysX = Reflect.ownKeys(x) as string[];\n const keysY = Reflect.ownKeys(y) as string[];\n if (keysX.length !== keysY.length) {\n return false;\n }\n\n for (let i = 0; i < keysX.length; i++) {\n const key = keysX[i];\n if (!Reflect.has(y, key) || !isEqual(x[key], y[key])) {\n return false;\n }\n }\n\n return true;\n }\n\n if (\n Array.isArray(x) &&\n Array.isArray(y)\n ) {\n if (x.length !== y.length) {\n return false;\n }\n\n for (let i = 0; i < x.length; i++) {\n if (!isEqual(x[i], y[i])) {\n return false;\n }\n }\n\n return true;\n }\n\n return false;\n}\n","/*\n * Copyright (c) 2022.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nimport { isEqual } from './check';\n\nexport function distinctArray<T = any>(arr: T[]) : T[] {\n for (let i = 0; i < arr.length; i++) {\n for (let j = arr.length - 1; j > i; j--) {\n if (isEqual(arr[i], arr[j])) {\n arr.splice(j, 1);\n }\n }\n }\n\n return arr;\n}\n\nexport function mergeArrays(...sources: any[][]) : any[] {\n return ([] as any[]).concat.apply([], [...sources]);\n}\n\nexport function mergeArraysDistinct(...sources: any[][]) : any[] {\n return distinctArray(mergeArrays(...sources));\n}\n","/*\n * Copyright (c) 2023.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nimport { isObject } from './check';\n\n/* istanbul ignore next */\nconst gT = (() => {\n if (typeof globalThis !== 'undefined') {\n return globalThis;\n }\n\n // eslint-disable-next-line no-restricted-globals\n if (typeof self !== 'undefined') {\n // eslint-disable-next-line no-restricted-globals\n return self;\n }\n\n if (typeof window !== 'undefined') {\n return window;\n }\n\n if (typeof global !== 'undefined') {\n return global;\n }\n\n throw new Error('unable to locate global object');\n})();\n\nexport function clone<T>(value: T) : T {\n if (gT.structuredClone) {\n return gT.structuredClone(value);\n }\n\n if (isObject(value)) {\n return { ...value };\n }\n\n if (Array.isArray(value)) {\n return [...value] as T;\n }\n\n return value;\n}\n","/*\n * Copyright (c) 2022.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nimport { isObject } from './check';\n\nexport function cutObject<T extends Record<string, any>>(input: T, depth: number) : T {\n if (depth < 0) {\n return {} as T;\n }\n\n const value = { ...input };\n const keys : (keyof T)[] = Object.keys(value);\n\n for (let i = 0; i < keys.length; i++) {\n if (isObject(value[keys[i]])) {\n value[keys[i]] = cutObject(value[keys[i]], depth - 1);\n }\n }\n\n return value;\n}\n","/*\n * Copyright (c) 2021.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\n// eslint-disable-next-line @typescript-eslint/ban-types\nexport function hasOwnProperty<X extends {}, Y extends PropertyKey>(obj: X, prop: Y): obj is X & Record<Y, unknown> {\n return Object.prototype.hasOwnProperty.call(obj, prop);\n}\n","/*\n * Copyright (c) 2022.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nimport { PriorityName } from '../constants';\nimport type { Options, OptionsInput } from '../type';\n\nexport function buildOptions(options?: OptionsInput) : Options {\n options = options || {};\n\n options.array = options.array ?? true;\n options.arrayDistinct = options.arrayDistinct ?? false;\n options.inPlace = options.inPlace ?? false;\n options.priority = options.priority || PriorityName.LEFT;\n\n return options as Options;\n}\n","/*\n * Copyright (c) 2022.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nimport { PriorityName } from './constants';\nimport type {\n Merger,\n MergerResult,\n MergerSource,\n MergerSourceUnwrap,\n Options,\n OptionsInput,\n} from './type';\n\nimport {\n buildOptions,\n clone,\n distinctArray,\n hasOwnProperty,\n isObject,\n isSafeInput,\n isSafeKey,\n} from './utils';\n\nfunction baseMerger<B extends MergerSource[]>(\n options: Options,\n ...sources: B\n) : MergerResult<B> {\n if (!sources.length) {\n throw new SyntaxError('At least one input element is required.');\n }\n\n let target : MergerSourceUnwrap<B>;\n let source : MergerSourceUnwrap<B> | undefined;\n if (options.priority === PriorityName.RIGHT) {\n target = sources.pop() as MergerSourceUnwrap<B>;\n source = sources.pop() as MergerSourceUnwrap<B>;\n } else {\n target = sources.shift() as MergerSourceUnwrap<B>;\n source = sources.shift() as MergerSourceUnwrap<B>;\n }\n\n if (!source) {\n if (\n Array.isArray(target) &&\n options.arrayDistinct\n ) {\n return distinctArray(target) as MergerResult<B>;\n }\n\n return target as MergerResult<B>;\n }\n\n if (\n Array.isArray(target) &&\n Array.isArray(source)\n ) {\n target.push(...source as MergerSource[]);\n\n if (options.priority === PriorityName.RIGHT) {\n return baseMerger(\n options,\n ...sources,\n target,\n ) as MergerResult<B>;\n }\n\n return baseMerger(\n options,\n target,\n ...sources,\n ) as MergerResult<B>;\n }\n\n if (\n isObject(target) &&\n isObject(source)\n ) {\n const keys = Object.keys(source);\n for (let i = 0; i < keys.length; i++) {\n const key = keys[i] as (keyof MergerSourceUnwrap<B>);\n\n if (hasOwnProperty(target, key)) {\n if (!isSafeKey(key as string)) {\n continue;\n }\n\n if (options.strategy) {\n const applied = options.strategy(target, key as string, source[key]);\n if (typeof applied !== 'undefined') {\n continue;\n }\n }\n\n if (\n isObject(target[key]) &&\n isObject(source[key])\n ) {\n if (!isSafeInput(source[key])) {\n continue;\n }\n\n if (options.priority === PriorityName.RIGHT) {\n target[key] = baseMerger(\n options,\n source[key] as MergerSource,\n target[key] as MergerSource,\n ) as MergerSourceUnwrap<B>[keyof MergerSourceUnwrap<B>];\n } else {\n target[key] = baseMerger(\n options,\n target[key] as MergerSource,\n source[key] as MergerSource,\n ) as MergerSourceUnwrap<B>[keyof MergerSourceUnwrap<B>];\n }\n\n continue;\n }\n\n if (\n options.array &&\n Array.isArray(target[key]) &&\n Array.isArray(source[key])\n ) {\n switch (options.priority) {\n case PriorityName.LEFT:\n Object.assign(target, {\n [key]: baseMerger(options, target[key] as MergerSource, source[key] as MergerSource),\n });\n break;\n case PriorityName.RIGHT:\n Object.assign(target, {\n [key]: baseMerger(options, source[key] as MergerSource, target[key] as MergerSource),\n });\n break;\n }\n }\n } else {\n Object.assign(target, {\n [key]: source[key],\n });\n }\n }\n }\n\n if (options.priority === PriorityName.RIGHT) {\n return baseMerger(options, ...sources, target) as MergerResult<B>;\n }\n\n return baseMerger(options, target, ...sources) as MergerResult<B>;\n}\n\nexport function createMerger(input?: OptionsInput) : Merger {\n const options = buildOptions(input);\n\n return <B extends MergerSource[]>(\n ...sources: B\n ) : MergerResult<B> => {\n if (options.clone) {\n return baseMerger(options, ...clone(sources));\n }\n\n if (!options.inPlace) {\n if (options.priority === PriorityName.LEFT) {\n if (Array.isArray(sources[0])) {\n sources.unshift([]);\n } else {\n sources.unshift({});\n }\n } else if (Array.isArray(sources[0])) {\n sources.push([]);\n } else {\n sources.push({});\n }\n }\n\n return baseMerger(options, ...sources);\n };\n}\n\nexport const merge = createMerger();\n\nexport function assign<A extends Record<string, any>, B extends Record<string, any>[]>(\n target: A,\n ...sources: B\n) : A & MergerResult<B> {\n return createMerger({\n inPlace: true,\n priority: 'left',\n array: false,\n })(target, ...sources) as A & MergerResult<B>;\n}\n"],"names":["PriorityName","LEFT","RIGHT","isObject","item","Array","isArray","isSafeInput","object","JSON","stringify","e","isSafeKey","key","isEqual","x","y","Object","is","Date","getTime","RegExp","toString","keysX","Reflect","ownKeys","keysY","length","i","has","distinctArray","arr","j","splice","mergeArrays","sources","concat","apply","mergeArraysDistinct","_extends","gT","globalThis","self","window","global","Error","clone","value","structuredClone","cutObject","input","depth","keys","hasOwnProperty","obj","prop","prototype","call","buildOptions","options","array","arrayDistinct","inPlace","priority","baseMerger","SyntaxError","target","source","pop","shift","push","strategy","applied","assign","createMerger","unshift","merge"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.mjs","sources":["../src/constants.ts","../src/utils/check.ts","../src/utils/array.ts","../src/utils/clone.ts","../src/utils/cut.ts","../src/utils/object.ts","../src/utils/options.ts","../src/module.ts","../src/presets.ts"],"sourcesContent":["/*\n * Copyright (c) 2023.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nexport enum PriorityName {\n LEFT = 'left',\n RIGHT = 'right',\n}\n","/*\n * Copyright (c) 2022.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nexport function isObject(item: unknown) : item is Record<string, any> {\n return (\n !!item &&\n typeof item === 'object' &&\n !Array.isArray(item)\n );\n}\n\nexport function isSafeKey(key: string) : boolean {\n return key !== '__proto__' &&\n key !== 'prototype' &&\n key !== 'constructor';\n}\n\nexport function isEqual(x: any, y: any): boolean {\n if (Object.is(x, y)) return true;\n\n if (x instanceof Date && y instanceof Date) {\n return x.getTime() === y.getTime();\n }\n\n if (x instanceof RegExp && y instanceof RegExp) {\n return x.toString() === y.toString();\n }\n\n if (\n isObject(x) &&\n isObject(y)\n ) {\n const keysX = Reflect.ownKeys(x) as string[];\n const keysY = Reflect.ownKeys(y) as string[];\n if (keysX.length !== keysY.length) {\n return false;\n }\n\n for (let i = 0; i < keysX.length; i++) {\n const key = keysX[i];\n if (!Reflect.has(y, key) || !isEqual(x[key], y[key])) {\n return false;\n }\n }\n\n return true;\n }\n\n if (\n Array.isArray(x) &&\n Array.isArray(y)\n ) {\n if (x.length !== y.length) {\n return false;\n }\n\n for (let i = 0; i < x.length; i++) {\n if (!isEqual(x[i], y[i])) {\n return false;\n }\n }\n\n return true;\n }\n\n return false;\n}\n","/*\n * Copyright (c) 2022.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nimport { isEqual } from './check';\n\nexport function distinctArray<T = any>(arr: T[]) : T[] {\n for (let i = 0; i < arr.length; i++) {\n for (let j = arr.length - 1; j > i; j--) {\n if (isEqual(arr[i], arr[j])) {\n arr.splice(j, 1);\n }\n }\n }\n\n return arr;\n}\n","/*\n * Copyright (c) 2023.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nimport { isObject } from './check';\n\n/* istanbul ignore next */\nconst gT = (() => {\n if (typeof globalThis !== 'undefined') {\n return globalThis;\n }\n\n // eslint-disable-next-line no-restricted-globals\n if (typeof self !== 'undefined') {\n // eslint-disable-next-line no-restricted-globals\n return self;\n }\n\n if (typeof window !== 'undefined') {\n return window;\n }\n\n if (typeof global !== 'undefined') {\n return global;\n }\n\n throw new Error('unable to locate global object');\n})();\n\nexport function polyfillClone<T>(input: T) {\n const map = new WeakMap();\n\n const fn = <A>(value: A) : A => {\n if (Array.isArray(value)) {\n if (map.has(value)) {\n return map.get(value);\n }\n\n const cloned = [] as A;\n map.set(value, cloned);\n\n value.map((el) => (cloned as any[]).push(fn(el)));\n\n return cloned;\n }\n\n if (isObject(value)) {\n if (map.has(value)) {\n return map.get(value);\n }\n\n const output = {} as A;\n const keys = Object.keys(value);\n\n map.set(value, output);\n for (let i = 0; i < keys.length; i++) {\n output[keys[i] as keyof A] = fn(value[keys[i]]);\n }\n\n return output;\n }\n\n return value;\n };\n\n return fn(input);\n}\n\n/* istanbul ignore next */\nexport function clone<T>(value: T) : T {\n if (gT.structuredClone) {\n return gT.structuredClone(value);\n }\n\n /* istanbul ignore next */\n return polyfillClone(value);\n}\n","/*\n * Copyright (c) 2022.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nimport { isObject } from './check';\n\nexport function cutObject<T extends Record<string, any>>(input: T, depth: number) : T {\n if (depth < 0) {\n return {} as T;\n }\n\n const value = { ...input };\n const keys : (keyof T)[] = Object.keys(value);\n\n for (let i = 0; i < keys.length; i++) {\n if (isObject(value[keys[i]])) {\n value[keys[i]] = cutObject(value[keys[i]], depth - 1);\n }\n }\n\n return value;\n}\n","/*\n * Copyright (c) 2021.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\n// eslint-disable-next-line @typescript-eslint/ban-types\nexport function hasOwnProperty<X extends {}, Y extends PropertyKey>(obj: X, prop: Y): obj is X & Record<Y, unknown> {\n return Object.prototype.hasOwnProperty.call(obj, prop);\n}\n","/*\n * Copyright (c) 2022.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nimport { PriorityName } from '../constants';\nimport type { Options, OptionsInput } from '../type';\n\nexport function buildOptions(options?: OptionsInput) : Options {\n options = options || {};\n\n options.array = options.array ?? true;\n options.arrayDistinct = options.arrayDistinct ?? false;\n options.clone = options.clone ?? false;\n options.inPlace = options.inPlace ?? false;\n options.priority = options.priority || PriorityName.LEFT;\n\n return options as Options;\n}\n","/*\n * Copyright (c) 2022.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nimport { PriorityName } from './constants';\nimport type {\n Merger, MergerContext,\n MergerResult,\n MergerSource,\n MergerSourceUnwrap,\n OptionsInput,\n} from './type';\n\nimport {\n buildOptions,\n clone,\n distinctArray,\n hasOwnProperty,\n isObject,\n isSafeKey,\n} from './utils';\n\nfunction baseMerger<B extends MergerSource[]>(\n context: MergerContext,\n ...sources: B\n) : MergerResult<B> {\n let target : MergerSourceUnwrap<B>;\n let source : MergerSourceUnwrap<B> | undefined;\n if (context.options.priority === PriorityName.RIGHT) {\n target = sources.pop() as MergerSourceUnwrap<B>;\n source = sources.pop() as MergerSourceUnwrap<B>;\n } else {\n target = sources.shift() as MergerSourceUnwrap<B>;\n source = sources.shift() as MergerSourceUnwrap<B>;\n }\n\n if (!source) {\n if (\n Array.isArray(target) &&\n context.options.arrayDistinct\n ) {\n return distinctArray(target) as MergerResult<B>;\n }\n\n return target as MergerResult<B>;\n }\n\n if (\n Array.isArray(target) &&\n Array.isArray(source)\n ) {\n target.push(...source as MergerSource[]);\n\n if (context.options.priority === PriorityName.RIGHT) {\n return baseMerger(\n context,\n ...sources,\n target,\n ) as MergerResult<B>;\n }\n\n return baseMerger(\n context,\n target,\n ...sources,\n ) as MergerResult<B>;\n }\n\n context.map.set(source, true);\n\n if (\n isObject(target) &&\n isObject(source)\n ) {\n const keys = Object.keys(source);\n for (let i = 0; i < keys.length; i++) {\n const key = keys[i] as (keyof MergerSourceUnwrap<B>);\n\n if (hasOwnProperty(target, key)) {\n if (!isSafeKey(key as string)) {\n continue;\n }\n\n if (context.options.strategy) {\n const applied = context.options.strategy(target, key as string, source[key]);\n if (typeof applied !== 'undefined') {\n continue;\n }\n }\n\n if (\n isObject(target[key]) &&\n isObject(source[key])\n ) {\n if (context.map.has(source[key])) {\n const sourceKeys = Object.keys(source[key] as Record<string, any>);\n for (let j = 0; j < sourceKeys.length; j++) {\n if (\n isSafeKey(sourceKeys[j]) &&\n !hasOwnProperty(target[key] as Record<string, any>, sourceKeys[j])\n ) {\n (target[key] as Record<string, any>)[sourceKeys[j]] = (source[key] as Record<string, any>)[sourceKeys[j]];\n }\n }\n\n continue;\n }\n\n if (context.options.priority === PriorityName.RIGHT) {\n target[key] = baseMerger(\n context,\n source[key] as MergerSource,\n target[key] as MergerSource,\n ) as MergerSourceUnwrap<B>[keyof MergerSourceUnwrap<B>];\n } else {\n target[key] = baseMerger(\n context,\n target[key] as MergerSource,\n source[key] as MergerSource,\n ) as MergerSourceUnwrap<B>[keyof MergerSourceUnwrap<B>];\n }\n\n continue;\n }\n\n if (\n context.options.array &&\n Array.isArray(target[key]) &&\n Array.isArray(source[key])\n ) {\n switch (context.options.priority) {\n case PriorityName.LEFT:\n Object.assign(target, {\n [key]: baseMerger(context, target[key] as MergerSource, source[key] as MergerSource),\n });\n break;\n case PriorityName.RIGHT:\n Object.assign(target, {\n [key]: baseMerger(context, source[key] as MergerSource, target[key] as MergerSource),\n });\n break;\n }\n }\n } else {\n Object.assign(target, {\n [key]: source[key],\n });\n }\n }\n }\n\n context.map = new WeakMap();\n\n if (context.options.priority === PriorityName.RIGHT) {\n return baseMerger(context, ...sources, target) as MergerResult<B>;\n }\n\n return baseMerger(context, target, ...sources) as MergerResult<B>;\n}\n\nexport function createMerger(input?: OptionsInput) : Merger {\n const options = buildOptions(input);\n\n return <B extends MergerSource[]>(\n ...sources: B\n ) : MergerResult<B> => {\n if (!sources.length) {\n throw new SyntaxError('At least one input element is required.');\n }\n\n const ctx : MergerContext = {\n options,\n map: new WeakMap<any, any>(),\n };\n\n if (options.clone) {\n return baseMerger(ctx, ...clone(sources));\n }\n\n if (!options.inPlace) {\n if (options.priority === PriorityName.LEFT) {\n if (Array.isArray(sources[0])) {\n sources.unshift([]);\n } else {\n sources.unshift({});\n }\n } else if (Array.isArray(sources[0])) {\n sources.push([]);\n } else {\n sources.push({});\n }\n }\n\n return baseMerger(ctx, ...sources);\n };\n}\n\nexport const merge = createMerger();\n","/*\n * Copyright (c) 2023.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nimport { createMerger } from './module';\nimport type { MergerResult } from './type';\n\n/**\n * Assign source attributes to a target object.\n *\n * @param target\n * @param sources\n */\nexport function assign<A extends Record<string, any>, B extends Record<string, any>[]>(\n target: A,\n ...sources: B\n) : A & MergerResult<B> {\n return createMerger({\n inPlace: true,\n priority: 'left',\n array: false,\n })(target, ...sources) as A & MergerResult<B>;\n}\n"],"names":["PriorityName","LEFT","RIGHT","isObject","item","Array","isArray","isSafeKey","key","isEqual","x","y","Object","is","Date","getTime","RegExp","toString","keysX","Reflect","ownKeys","keysY","length","i","has","distinctArray","arr","j","splice","gT","globalThis","self","window","global","Error","polyfillClone","input","map","WeakMap","fn","value","get","cloned","set","el","push","output","keys","clone","structuredClone","cutObject","depth","hasOwnProperty","obj","prop","prototype","call","buildOptions","options","array","arrayDistinct","inPlace","priority","baseMerger","context","sources","target","source","pop","shift","strategy","applied","sourceKeys","assign","createMerger","SyntaxError","ctx","unshift","merge"],"mappings":"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"}
|
package/dist/module.d.ts
CHANGED
|
@@ -1,4 +1,3 @@
|
|
|
1
|
-
import type { Merger,
|
|
1
|
+
import type { Merger, OptionsInput } from './type';
|
|
2
2
|
export declare function createMerger(input?: OptionsInput): Merger;
|
|
3
3
|
export declare const merge: Merger;
|
|
4
|
-
export declare function assign<A extends Record<string, any>, B extends Record<string, any>[]>(target: A, ...sources: B): A & MergerResult<B>;
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import type { MergerResult } from './type';
|
|
2
|
+
/**
|
|
3
|
+
* Assign source attributes to a target object.
|
|
4
|
+
*
|
|
5
|
+
* @param target
|
|
6
|
+
* @param sources
|
|
7
|
+
*/
|
|
8
|
+
export declare function assign<A extends Record<string, any>, B extends Record<string, any>[]>(target: A, ...sources: B): A & MergerResult<B>;
|
package/dist/type.d.ts
CHANGED
|
@@ -1,16 +1,16 @@
|
|
|
1
1
|
import type { PriorityName } from './constants';
|
|
2
2
|
type UnionToIntersection<U> = (U extends any ? (k: U) => void : never) extends ((k: infer I) => void) ? I : never;
|
|
3
|
-
export type MergerSource = any[] | Record<string, any>;
|
|
4
|
-
export type MergerSourceUnwrap<T extends MergerSource> = T extends Array<infer Return> ? Return : T;
|
|
5
|
-
export type MergerResult<B extends MergerSource> = UnionToIntersection<MergerSourceUnwrap<B>>;
|
|
6
|
-
export type Merger = <B extends MergerSource[]>(...sources: B) => MergerResult<B>;
|
|
7
3
|
export type Options = {
|
|
8
4
|
/**
|
|
9
|
-
* Merge array
|
|
5
|
+
* Merge object array properties.
|
|
6
|
+
*
|
|
7
|
+
* default: true
|
|
10
8
|
*/
|
|
11
9
|
array: boolean;
|
|
12
10
|
/**
|
|
13
|
-
* Remove duplicates
|
|
11
|
+
* Remove duplicates, when merging array elements.
|
|
12
|
+
*
|
|
13
|
+
* default: false
|
|
14
14
|
*/
|
|
15
15
|
arrayDistinct: boolean;
|
|
16
16
|
/**
|
|
@@ -23,16 +23,30 @@ export type Options = {
|
|
|
23
23
|
strategy?: (target: Record<string, any>, key: string, value: unknown) => Record<string, any> | undefined;
|
|
24
24
|
/**
|
|
25
25
|
* Merge sources in place.
|
|
26
|
+
*
|
|
27
|
+
* default: false
|
|
26
28
|
*/
|
|
27
29
|
inPlace?: boolean;
|
|
28
30
|
/**
|
|
29
|
-
* Deep clone input
|
|
31
|
+
* Deep clone input sources.
|
|
32
|
+
*
|
|
33
|
+
* default: false
|
|
30
34
|
*/
|
|
31
35
|
clone?: boolean;
|
|
32
36
|
/**
|
|
33
|
-
* Merge sources from left-right or left
|
|
37
|
+
* Merge sources from left-to-right or right-to-left.
|
|
38
|
+
*
|
|
39
|
+
* default: left
|
|
34
40
|
*/
|
|
35
41
|
priority: `${PriorityName}`;
|
|
36
42
|
};
|
|
37
43
|
export type OptionsInput = Partial<Options>;
|
|
44
|
+
export type MergerSource = any[] | Record<string, any>;
|
|
45
|
+
export type MergerSourceUnwrap<T extends MergerSource> = T extends Array<infer Return> ? Return : T;
|
|
46
|
+
export type MergerResult<B extends MergerSource> = UnionToIntersection<MergerSourceUnwrap<B>>;
|
|
47
|
+
export type MergerContext = {
|
|
48
|
+
options: Options;
|
|
49
|
+
map: WeakMap<any, any>;
|
|
50
|
+
};
|
|
51
|
+
export type Merger = <B extends MergerSource[]>(...sources: B) => MergerResult<B>;
|
|
38
52
|
export {};
|
package/dist/utils/array.d.ts
CHANGED
package/dist/utils/check.d.ts
CHANGED
package/dist/utils/clone.d.ts
CHANGED
package/dist/utils/index.d.ts
CHANGED
package/package.json
CHANGED
|
File without changes
|