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 CHANGED
@@ -6,7 +6,7 @@
6
6
  [![Known Vulnerabilities](https://snyk.io/test/github/Tada5hi/smob/badge.svg?targetFile=package.json)](https://snyk.io/test/github/Tada5hi/smob?targetFile=package.json)
7
7
  [![semantic-release: angular](https://img.shields.io/badge/semantic--release-angular-e10079?logo=semantic-release)](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
- - **distinct**: `false` Remove duplicates, when merging array elements.
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
- console.log(merge({ a: 1 }, { b: 2 }, { c: 3 }));
48
- // => { a: 1, b: 2, c: 3 }
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
- **Priority**
60
+ **Array**
56
61
  ```typescript
57
62
  import { createMerger } from 'smob';
58
63
 
59
- const merge = createMerger({ priority: 'right' });
64
+ const merge = createMerger({ array: false });
60
65
 
61
- console.log(merge({ a: 1 }, { a: 2 }, { a: 3 }));
62
- // => { a: 3 }
66
+ merge({ a: [1,2,3] }, { a: [4,5,6] });
67
+ // { a: [1,2,3] }
63
68
  ```
64
69
 
65
- **Array**
70
+ **ArrayDistinct**
66
71
  ```typescript
67
72
  import { createMerger } from 'smob';
68
73
 
69
- const merge = createMerger({ array: false });
74
+ const merge = createMerger({ arrayDistinct: true });
70
75
 
71
- console.log(merge({ a: [1,2,3] }, { a: [4,5,6] }));
72
- // => { a: [1,2,3] }
76
+ merge({ a: [1,2,3] }, { a: [3,4,5] });
77
+ // { a: [1,2,3,4,5] }
73
78
  ```
74
79
 
75
- **Distinct**
80
+ **Priority**
76
81
  ```typescript
77
82
  import { createMerger } from 'smob';
78
83
 
79
- const merge = createMerger({ distinct: true });
84
+ const merge = createMerger({ priority: 'right' });
80
85
 
81
- console.log(merge({ a: [1,2,3] }, { a: [3,4,5] }));
82
- // => { a: [1,2,3,4,5] }
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
- console.log(merge({ a: 1 }, { a: 2 }, { a: 3 }));
102
- // => { a: 6 }
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 clone(value) {
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
- if (isObject(value)) {
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(options, ...sources) {
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(options, ...sources, target);
199
+ if (context.options.priority === exports.PriorityName.RIGHT) {
200
+ return baseMerger(context, ...sources, target);
217
201
  }
218
- return baseMerger(options, target, ...sources);
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 (!isSafeInput(source[key])) {
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(options, source[key], target[key]);
229
+ if (context.options.priority === exports.PriorityName.RIGHT) {
230
+ target[key] = baseMerger(context, source[key], target[key]);
240
231
  } else {
241
- target[key] = baseMerger(options, target[key], source[key]);
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(options, target[key], source[key])
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(options, source[key], target[key])
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
- if (options.priority === exports.PriorityName.RIGHT) {
267
- return baseMerger(options, ...sources, target);
257
+ context.map = new WeakMap();
258
+ if (context.options.priority === exports.PriorityName.RIGHT) {
259
+ return baseMerger(context, ...sources, target);
268
260
  }
269
- return baseMerger(options, target, ...sources);
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(options, ...clone(sources));
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(options, ...sources);
289
+ return baseMerger(ctx, ...sources);
291
290
  };
292
291
  }
293
292
  const merge = createMerger();
294
- function assign(target, ...sources) {
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.mergeArrays = mergeArrays;
315
- exports.mergeArraysDistinct = mergeArraysDistinct;
318
+ exports.polyfillClone = polyfillClone;
316
319
  //# sourceMappingURL=index.cjs.map
@@ -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
@@ -1,4 +1,5 @@
1
1
  export * from './constants';
2
2
  export * from './module';
3
3
  export * from './utils';
4
+ export * from './presets';
4
5
  export * from './type';
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 clone(value) {
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
- if (isObject(value)) {
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(options, ...sources) {
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(options, ...sources, target);
197
+ if (context.options.priority === PriorityName.RIGHT) {
198
+ return baseMerger(context, ...sources, target);
215
199
  }
216
- return baseMerger(options, target, ...sources);
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 (!isSafeInput(source[key])) {
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(options, source[key], target[key]);
227
+ if (context.options.priority === PriorityName.RIGHT) {
228
+ target[key] = baseMerger(context, source[key], target[key]);
238
229
  } else {
239
- target[key] = baseMerger(options, target[key], source[key]);
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(options, target[key], source[key])
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(options, source[key], target[key])
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
- if (options.priority === PriorityName.RIGHT) {
265
- return baseMerger(options, ...sources, target);
255
+ context.map = new WeakMap();
256
+ if (context.options.priority === PriorityName.RIGHT) {
257
+ return baseMerger(context, ...sources, target);
266
258
  }
267
- return baseMerger(options, target, ...sources);
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(options, ...clone(sources));
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(options, ...sources);
287
+ return baseMerger(ctx, ...sources);
289
288
  };
290
289
  }
291
290
  const merge = createMerger();
292
- function assign(target, ...sources) {
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, isSafeInput, isSafeKey, merge, mergeArrays, mergeArraysDistinct };
305
+ export { PriorityName, assign, buildOptions, clone, createMerger, cutObject, distinctArray, hasOwnProperty, isEqual, isObject, isSafeKey, merge, polyfillClone };
301
306
  //# sourceMappingURL=index.mjs.map
@@ -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":"AAAA;;;;;IAOO,IAAA,aAAA;UAAKA,YAAY,EAAA;AAAZA,IAAAA,YAAAA,CACRC,MAAO,CAAA,GAAA,MAAA,CAAA;AADCD,IAAAA,YAAAA,CAERE,OAAQ,CAAA,GAAA,OAAA,CAAA;GAFAF,YAAAA,KAAAA,YAAAA,GAAAA,EAAAA,CAAAA,CAAAA;;ACPZ;;;;;IAOO,SAASG,QAAAA,CAASC,IAAa,EAAA;IAClC,OACI,CAAC,CAACA,IACF,IAAA,OAAOA,SAAS,QAChB,IAAA,CAACC,MAAMC,OAAQF,CAAAA,IAAAA,CAAAA,CAAAA;AAEvB,CAAA;AAEO,SAASG,YAAYC,MAAW,EAAA;IACnC,IAAI;AACAC,QAAAA,IAAAA,CAAKC,SAAUF,CAAAA,MAAAA,CAAAA,CAAAA;QACf,OAAO,IAAA,CAAA;AACX,KAAA,CAAE,OAAOG,CAAG,EAAA;QACR,OAAO,KAAA,CAAA;AACX,KAAA;AACJ,CAAA;AAEO,SAASC,UAAUC,GAAW,EAAA;AACjC,IAAA,OAAOA,GAAQ,KAAA,WAAA,IACXA,GAAQ,KAAA,WAAA,IACRA,GAAQ,KAAA,aAAA,CAAA;AAChB,CAAA;AAEO,SAASC,OAAAA,CAAQC,CAAM,EAAEC,CAAM,EAAA;AAClC,IAAA,IAAIC,MAAOC,CAAAA,EAAAA,CAAGH,CAAGC,EAAAA,CAAAA,CAAAA,EAAI,OAAO,IAAA,CAAA;IAE5B,IAAID,CAAAA,YAAaI,IAAQH,IAAAA,CAAAA,YAAaG,IAAM,EAAA;QACxC,OAAOJ,CAAAA,CAAEK,cAAcJ,CAAEI,CAAAA,OAAAA,EAAAA,CAAAA;AAC7B,KAAA;IAEA,IAAIL,CAAAA,YAAaM,MAAUL,IAAAA,CAAAA,YAAaK,MAAQ,EAAA;QAC5C,OAAON,CAAAA,CAAEO,eAAeN,CAAEM,CAAAA,QAAAA,EAAAA,CAAAA;AAC9B,KAAA;IAEA,IACInB,QAAAA,CAASY,CACTZ,CAAAA,IAAAA,QAAAA,CAASa,CACX,CAAA,EAAA;QACE,MAAMO,KAAAA,GAAQC,QAAQC,OAAQV,CAAAA,CAAAA,CAAAA,CAAAA;QAC9B,MAAMW,KAAAA,GAAQF,QAAQC,OAAQT,CAAAA,CAAAA,CAAAA,CAAAA;QAC9B,IAAIO,KAAAA,CAAMI,MAAWD,KAAAA,KAAAA,CAAMC,MAAQ,EAAA;YAC/B,OAAO,KAAA,CAAA;AACX,SAAA;AAEA,QAAA,IAAK,IAAIC,CAAI,GAAA,CAAA,EAAGA,CAAIL,GAAAA,KAAAA,CAAMI,QAAQC,CAAK,EAAA,CAAA;YACnC,MAAMf,GAAAA,GAAMU,KAAK,CAACK,CAAE,CAAA,CAAA;AACpB,YAAA,IAAI,CAACJ,OAAAA,CAAQK,GAAIb,CAAAA,CAAAA,EAAGH,QAAQ,CAACC,OAAAA,CAAQC,CAAC,CAACF,GAAI,CAAA,EAAEG,CAAC,CAACH,IAAI,CAAG,EAAA;gBAClD,OAAO,KAAA,CAAA;AACX,aAAA;AACJ,SAAA;QAEA,OAAO,IAAA,CAAA;AACX,KAAA;AAEA,IAAA,IACIR,KAAMC,CAAAA,OAAAA,CAAQS,CACdV,CAAAA,IAAAA,KAAAA,CAAMC,QAAQU,CAChB,CAAA,EAAA;QACE,IAAID,CAAAA,CAAEY,MAAWX,KAAAA,CAAAA,CAAEW,MAAQ,EAAA;YACvB,OAAO,KAAA,CAAA;AACX,SAAA;AAEA,QAAA,IAAK,IAAIC,CAAI,GAAA,CAAA,EAAGA,CAAIb,GAAAA,CAAAA,CAAEY,QAAQC,CAAK,EAAA,CAAA;YAC/B,IAAI,CAACd,QAAQC,CAAC,CAACa,EAAE,EAAEZ,CAAC,CAACY,CAAAA,CAAE,CAAG,EAAA;gBACtB,OAAO,KAAA,CAAA;AACX,aAAA;AACJ,SAAA;QAEA,OAAO,IAAA,CAAA;AACX,KAAA;IAEA,OAAO,KAAA,CAAA;AACX;;ACtEO,SAASE,cAAuBC,GAAQ,EAAA;AAC3C,IAAA,IAAK,IAAIH,CAAI,GAAA,CAAA,EAAGA,CAAIG,GAAAA,GAAAA,CAAIJ,QAAQC,CAAK,EAAA,CAAA;AACjC,QAAA,IAAK,IAAII,CAAID,GAAAA,GAAAA,CAAIJ,SAAS,CAAGK,EAAAA,CAAAA,GAAIJ,GAAGI,CAAK,EAAA,CAAA;YACrC,IAAIlB,OAAAA,CAAQiB,GAAG,CAACH,CAAAA,CAAE,EAAEG,GAAG,CAACC,EAAE,CAAG,EAAA;AACzBD,gBAAAA,GAAAA,CAAIE,OAAOD,CAAG,EAAA,CAAA,CAAA,CAAA;AAClB,aAAA;AACJ,SAAA;AACJ,KAAA;IAEA,OAAOD,GAAAA,CAAAA;AACX,CAAA;AAEO,SAASG,WAAY,CAAA,GAAGC,OAAgB,EAAA;AAC3C,IAAA,OAAO,EAAG,CAAWC,MAAOC,CAAAA,KAAAA,CAAM,EAAE,EAAE;AAAIF,QAAAA,GAAAA,OAAAA;AAAQ,KAAA,CAAA,CAAA;AACtD,CAAA;AAEO,SAASG,mBAAoB,CAAA,GAAGH,OAAgB,EAAA;AACnD,IAAA,OAAOL,cAAcI,WAAeC,CAAAA,GAAAA,OAAAA,CAAAA,CAAAA,CAAAA;AACxC;;AC3BA;;;;;AAKC,IAAA,SAAAI,UAAA,GAAA;;;;;;;;;;;;;;AAID,2BACA,MAAMC,EAAK,GAAC,CAAA,IAAA;IACR,IAAI,OAAOC,eAAe,WAAa,EAAA;QACnC,OAAOA,UAAAA,CAAAA;AACX,KAAA;;IAGA,IAAI,OAAOC,SAAS,WAAa,EAAA;;QAE7B,OAAOA,IAAAA,CAAAA;AACX,KAAA;IAEA,IAAI,OAAOC,WAAW,WAAa,EAAA;QAC/B,OAAOA,MAAAA,CAAAA;AACX,KAAA;IAEA,IAAI,OAAOC,WAAW,WAAa,EAAA;QAC/B,OAAOA,MAAAA,CAAAA;AACX,KAAA;AAEA,IAAA,MAAM,IAAIC,KAAM,CAAA,gCAAA,CAAA,CAAA;AACpB,CAAA,GAAA,CAAA;AAEO,SAASC,MAASC,KAAQ,EAAA;AAC7B,IAAA,IAAIP,GAAGQ,eAAiB,EAAA;AACpB,QAAA,OAAOR,GAAGQ,eAAgBD,CAAAA,KAAAA,CAAAA,CAAAA;AAC9B,KAAA;AAEA,IAAA,IAAI5C,SAAS4C,KAAQ,CAAA,EAAA;AACjB,QAAA,OAAOR,UAAKQ,CAAAA,EAAAA,EAAAA,KAAAA,CAAAA,CAAAA;AAChB,KAAA;IAEA,IAAI1C,KAAAA,CAAMC,QAAQyC,KAAQ,CAAA,EAAA;QACtB,OAAO;AAAIA,YAAAA,GAAAA,KAAAA;AAAM,SAAA,CAAA;AACrB,KAAA;IAEA,OAAOA,KAAAA,CAAAA;AACX;;AC9CA;;;;;AAKC,IAAA,SAAA,QAAA,GAAA;;;;;;;;;;;;;;AAIM,SAASE,SAAAA,CAAyCC,KAAQ,EAAEC,KAAa,EAAA;AAC5E,IAAA,IAAIA,QAAQ,CAAG,EAAA;AACX,QAAA,OAAO,EAAC,CAAA;AACZ,KAAA;AAEA,IAAA,MAAMJ,QAAQ,QAAKG,CAAAA,EAAAA,EAAAA,KAAAA,CAAAA,CAAAA;IACnB,MAAME,IAAAA,GAAqBnC,OAAOmC,IAAKL,CAAAA,KAAAA,CAAAA,CAAAA;AAEvC,IAAA,IAAK,IAAInB,CAAI,GAAA,CAAA,EAAGA,CAAIwB,GAAAA,IAAAA,CAAKzB,QAAQC,CAAK,EAAA,CAAA;AAClC,QAAA,IAAIzB,SAAS4C,KAAK,CAACK,IAAI,CAACxB,CAAAA,CAAE,CAAC,CAAG,EAAA;AAC1BmB,YAAAA,KAAK,CAACK,IAAI,CAACxB,CAAAA,CAAE,CAAC,GAAGqB,SAAAA,CAAUF,KAAK,CAACK,IAAI,CAACxB,CAAE,CAAA,CAAC,EAAEuB,KAAQ,GAAA,CAAA,CAAA,CAAA;AACvD,SAAA;AACJ,KAAA;IAEA,OAAOJ,KAAAA,CAAAA;AACX;;ACxBA;;;;;AAKC;AAGM,SAASM,cAAAA,CAAoDC,GAAM,EAAEC,IAAO,EAAA;AAC/E,IAAA,OAAOtC,MAAOuC,CAAAA,SAAAA,CAAUH,cAAeI,CAAAA,IAAAA,CAAKH,GAAKC,EAAAA,IAAAA,CAAAA,CAAAA;AACrD;;ACAO,SAASG,aAAaC,OAAsB,EAAA;AAC/CA,IAAAA,OAAAA,GAAUA,WAAW,EAAC,CAAA;AAENA,IAAAA,IAAAA,cAAAA,CAAAA;AAAhBA,IAAAA,OAAAA,CAAQC,KAAQD,GAAAA,CAAAA,cAAAA,GAAAA,OAAAA,CAAQC,iBAARD,cAAiB,GAAA,IAAA,CAAA;AACTA,IAAAA,IAAAA,sBAAAA,CAAAA;AAAxBA,IAAAA,OAAAA,CAAQE,aAAgBF,GAAAA,CAAAA,sBAAAA,GAAAA,OAAAA,CAAQE,yBAARF,sBAAyB,GAAA,KAAA,CAAA;AAC/BA,IAAAA,IAAAA,gBAAAA,CAAAA;AAAlBA,IAAAA,OAAAA,CAAQG,OAAUH,GAAAA,CAAAA,gBAAAA,GAAAA,OAAAA,CAAQG,mBAARH,gBAAmB,GAAA,KAAA,CAAA;IACrCA,OAAQI,CAAAA,QAAAA,GAAWJ,OAAQI,CAAAA,QAAAA,IAAY/D,YAAaC,CAAAA,IAAAA,CAAAA;IAEpD,OAAO0D,OAAAA,CAAAA;AACX;;ACQA,SAASK,UACLL,CAAAA,OAAgB,EAChB,GAAGxB,OAAU,EAAA;IAEb,IAAI,CAACA,QAAQR,MAAQ,EAAA;AACjB,QAAA,MAAM,IAAIsC,WAAY,CAAA,yCAAA,CAAA,CAAA;AAC1B,KAAA;IAEA,IAAIC,MAAAA,CAAAA;IACJ,IAAIC,MAAAA,CAAAA;IACJ,IAAIR,OAAAA,CAAQI,QAAa/D,KAAAA,YAAAA,CAAaE,KAAO,EAAA;AACzCgE,QAAAA,MAAAA,GAAS/B,OAAQiC,CAAAA,GAAAA,EAAAA,CAAAA;AACjBD,QAAAA,MAAAA,GAAShC,OAAQiC,CAAAA,GAAAA,EAAAA,CAAAA;KACd,MAAA;AACHF,QAAAA,MAAAA,GAAS/B,OAAQkC,CAAAA,KAAAA,EAAAA,CAAAA;AACjBF,QAAAA,MAAAA,GAAShC,OAAQkC,CAAAA,KAAAA,EAAAA,CAAAA;AACrB,KAAA;AAEA,IAAA,IAAI,CAACF,MAAQ,EAAA;AACT,QAAA,IACI9D,KAAMC,CAAAA,OAAAA,CAAQ4D,MACdP,CAAAA,IAAAA,OAAAA,CAAQE,aACV,EAAA;AACE,YAAA,OAAO/B,aAAcoC,CAAAA,MAAAA,CAAAA,CAAAA;AACzB,SAAA;QAEA,OAAOA,MAAAA,CAAAA;AACX,KAAA;AAEA,IAAA,IACI7D,KAAMC,CAAAA,OAAAA,CAAQ4D,MACd7D,CAAAA,IAAAA,KAAAA,CAAMC,QAAQ6D,MAChB,CAAA,EAAA;AACED,QAAAA,MAAAA,CAAOI,IAAQH,CAAAA,GAAAA,MAAAA,CAAAA,CAAAA;QAEf,IAAIR,OAAAA,CAAQI,QAAa/D,KAAAA,YAAAA,CAAaE,KAAO,EAAA;YACzC,OAAO8D,UAAAA,CACHL,YACGxB,OACH+B,EAAAA,MAAAA,CAAAA,CAAAA;AAER,SAAA;QAEA,OAAOF,UAAAA,CACHL,SACAO,MACG/B,EAAAA,GAAAA,OAAAA,CAAAA,CAAAA;AAEX,KAAA;IAEA,IACIhC,QAAAA,CAAS+D,MACT/D,CAAAA,IAAAA,QAAAA,CAASgE,MACX,CAAA,EAAA;QACE,MAAMf,IAAAA,GAAOnC,OAAOmC,IAAKe,CAAAA,MAAAA,CAAAA,CAAAA;AACzB,QAAA,IAAK,IAAIvC,CAAI,GAAA,CAAA,EAAGA,CAAIwB,GAAAA,IAAAA,CAAKzB,QAAQC,CAAK,EAAA,CAAA;YAClC,MAAMf,GAAAA,GAAMuC,IAAI,CAACxB,CAAE,CAAA,CAAA;YAEnB,IAAIyB,cAAAA,CAAea,QAAQrD,GAAM,CAAA,EAAA;gBAC7B,IAAI,CAACD,UAAUC,GAAgB,CAAA,EAAA;AAC3B,oBAAA,SAAA;AACJ,iBAAA;AAEA,gBAAA,IAAI8C,QAAQY,QAAU,EAAA;AAClB,oBAAA,MAAMC,UAAUb,OAAQY,CAAAA,QAAAA,CAASL,QAAQrD,GAAesD,EAAAA,MAAM,CAACtD,GAAI,CAAA,CAAA,CAAA;oBACnE,IAAI,OAAO2D,YAAY,WAAa,EAAA;AAChC,wBAAA,SAAA;AACJ,qBAAA;AACJ,iBAAA;gBAEA,IACIrE,QAAAA,CAAS+D,MAAM,CAACrD,GAAAA,CAAI,KACpBV,QAASgE,CAAAA,MAAM,CAACtD,GAAAA,CAAI,CACtB,EAAA;AACE,oBAAA,IAAI,CAACN,WAAAA,CAAY4D,MAAM,CAACtD,IAAI,CAAG,EAAA;AAC3B,wBAAA,SAAA;AACJ,qBAAA;oBAEA,IAAI8C,OAAAA,CAAQI,QAAa/D,KAAAA,YAAAA,CAAaE,KAAO,EAAA;wBACzCgE,MAAM,CAACrD,GAAI,CAAA,GAAGmD,UACVL,CAAAA,OAAAA,EACAQ,MAAM,CAACtD,GAAI,CAAA,EACXqD,MAAM,CAACrD,GAAI,CAAA,CAAA,CAAA;qBAEZ,MAAA;wBACHqD,MAAM,CAACrD,GAAI,CAAA,GAAGmD,UACVL,CAAAA,OAAAA,EACAO,MAAM,CAACrD,GAAI,CAAA,EACXsD,MAAM,CAACtD,GAAI,CAAA,CAAA,CAAA;AAEnB,qBAAA;AAEA,oBAAA,SAAA;AACJ,iBAAA;AAEA,gBAAA,IACI8C,OAAQC,CAAAA,KAAAA,IACRvD,KAAMC,CAAAA,OAAAA,CAAQ4D,MAAM,CAACrD,GAAI,CAAA,CAAA,IACzBR,KAAMC,CAAAA,OAAAA,CAAQ6D,MAAM,CAACtD,IAAI,CAC3B,EAAA;AACE,oBAAA,OAAQ8C,OAAQI,CAAAA,QAAAA;AACZ,wBAAA,KAAK/D,YAAaC,CAAAA,IAAAA;AACdgB,4BAAAA,MAAAA,CAAOwD,OAAOP,MAAQ,EAAA;gCAClB,CAACrD,GAAAA,GAAMmD,UAAAA,CAAWL,OAASO,EAAAA,MAAM,CAACrD,GAAI,CAAA,EAAkBsD,MAAM,CAACtD,GAAI,CAAA,CAAA;AACvE,6BAAA,CAAA,CAAA;AACA,4BAAA,MAAA;AACJ,wBAAA,KAAKb,YAAaE,CAAAA,KAAAA;AACde,4BAAAA,MAAAA,CAAOwD,OAAOP,MAAQ,EAAA;gCAClB,CAACrD,GAAAA,GAAMmD,UAAAA,CAAWL,OAASQ,EAAAA,MAAM,CAACtD,GAAI,CAAA,EAAkBqD,MAAM,CAACrD,GAAI,CAAA,CAAA;AACvE,6BAAA,CAAA,CAAA;AACA,4BAAA,MAAA;AACR,qBAAA;AACJ,iBAAA;aACG,MAAA;AACHI,gBAAAA,MAAAA,CAAOwD,OAAOP,MAAQ,EAAA;AAClB,oBAAA,CAACrD,GAAI,GAAEsD,MAAM,CAACtD,GAAI,CAAA;AACtB,iBAAA,CAAA,CAAA;AACJ,aAAA;AACJ,SAAA;AACJ,KAAA;IAEA,IAAI8C,OAAAA,CAAQI,QAAa/D,KAAAA,YAAAA,CAAaE,KAAO,EAAA;QACzC,OAAO8D,UAAAA,CAAWL,YAAYxB,OAAS+B,EAAAA,MAAAA,CAAAA,CAAAA;AAC3C,KAAA;IAEA,OAAOF,UAAAA,CAAWL,SAASO,MAAW/B,EAAAA,GAAAA,OAAAA,CAAAA,CAAAA;AAC1C,CAAA;AAEO,SAASuC,aAAaxB,KAAoB,EAAA;AAC7C,IAAA,MAAMS,UAAUD,YAAaR,CAAAA,KAAAA,CAAAA,CAAAA;AAE7B,IAAA,OAAO,CACH,GAAGf,OAAAA,GAAAA;AAEH,QAAA,IAAIwB,QAAQb,KAAO,EAAA;YACf,OAAOkB,UAAAA,CAAWL,YAAYb,KAAMX,CAAAA,OAAAA,CAAAA,CAAAA,CAAAA;AACxC,SAAA;QAEA,IAAI,CAACwB,QAAQG,OAAS,EAAA;YAClB,IAAIH,OAAAA,CAAQI,QAAa/D,KAAAA,YAAAA,CAAaC,IAAM,EAAA;AACxC,gBAAA,IAAII,KAAMC,CAAAA,OAAAA,CAAQ6B,OAAO,CAAC,EAAE,CAAG,EAAA;AAC3BA,oBAAAA,OAAAA,CAAQwC,QAAQ,EAAE,CAAA,CAAA;iBACf,MAAA;AACHxC,oBAAAA,OAAAA,CAAQwC,QAAQ,EAAC,CAAA,CAAA;AACrB,iBAAA;AACJ,aAAA,MAAO,IAAItE,KAAMC,CAAAA,OAAAA,CAAQ6B,OAAO,CAAC,EAAE,CAAG,EAAA;AAClCA,gBAAAA,OAAAA,CAAQmC,KAAK,EAAE,CAAA,CAAA;aACZ,MAAA;AACHnC,gBAAAA,OAAAA,CAAQmC,KAAK,EAAC,CAAA,CAAA;AAClB,aAAA;AACJ,SAAA;AAEA,QAAA,OAAON,WAAWL,OAAYxB,EAAAA,GAAAA,OAAAA,CAAAA,CAAAA;AAClC,KAAA,CAAA;AACJ,CAAA;AAEO,MAAMyC,QAAQF,YAAe,GAAA;AAE7B,SAASD,MAAAA,CACZP,MAAS,EACT,GAAG/B,OAAU,EAAA;AAEb,IAAA,OAAOuC,YAAa,CAAA;QAChBZ,OAAS,EAAA,IAAA;QACTC,QAAU,EAAA,MAAA;QACVH,KAAO,EAAA,KAAA;AACX,KAAA,CAAA,CAAGM,MAAW/B,EAAAA,GAAAA,OAAAA,CAAAA,CAAAA;AAClB;;;;"}
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":"AAAA;;;;;IAOO,IAAA,aAAA;UAAKA,YAAY,EAAA;AAAZA,IAAAA,YAAAA,CACRC,MAAO,CAAA,GAAA,MAAA,CAAA;AADCD,IAAAA,YAAAA,CAERE,OAAQ,CAAA,GAAA,OAAA,CAAA;GAFAF,YAAAA,KAAAA,YAAAA,GAAAA,EAAAA,CAAAA,CAAAA;;ACPZ;;;;;IAOO,SAASG,QAAAA,CAASC,IAAa,EAAA;IAClC,OACI,CAAC,CAACA,IACF,IAAA,OAAOA,SAAS,QAChB,IAAA,CAACC,MAAMC,OAAQF,CAAAA,IAAAA,CAAAA,CAAAA;AAEvB,CAAA;AAEO,SAASG,UAAUC,GAAW,EAAA;AACjC,IAAA,OAAOA,GAAQ,KAAA,WAAA,IACXA,GAAQ,KAAA,WAAA,IACRA,GAAQ,KAAA,aAAA,CAAA;AAChB,CAAA;AAEO,SAASC,OAAAA,CAAQC,CAAM,EAAEC,CAAM,EAAA;AAClC,IAAA,IAAIC,MAAOC,CAAAA,EAAAA,CAAGH,CAAGC,EAAAA,CAAAA,CAAAA,EAAI,OAAO,IAAA,CAAA;IAE5B,IAAID,CAAAA,YAAaI,IAAQH,IAAAA,CAAAA,YAAaG,IAAM,EAAA;QACxC,OAAOJ,CAAAA,CAAEK,cAAcJ,CAAEI,CAAAA,OAAAA,EAAAA,CAAAA;AAC7B,KAAA;IAEA,IAAIL,CAAAA,YAAaM,MAAUL,IAAAA,CAAAA,YAAaK,MAAQ,EAAA;QAC5C,OAAON,CAAAA,CAAEO,eAAeN,CAAEM,CAAAA,QAAAA,EAAAA,CAAAA;AAC9B,KAAA;IAEA,IACId,QAAAA,CAASO,CACTP,CAAAA,IAAAA,QAAAA,CAASQ,CACX,CAAA,EAAA;QACE,MAAMO,KAAAA,GAAQC,QAAQC,OAAQV,CAAAA,CAAAA,CAAAA,CAAAA;QAC9B,MAAMW,KAAAA,GAAQF,QAAQC,OAAQT,CAAAA,CAAAA,CAAAA,CAAAA;QAC9B,IAAIO,KAAAA,CAAMI,MAAWD,KAAAA,KAAAA,CAAMC,MAAQ,EAAA;YAC/B,OAAO,KAAA,CAAA;AACX,SAAA;AAEA,QAAA,IAAK,IAAIC,CAAI,GAAA,CAAA,EAAGA,CAAIL,GAAAA,KAAAA,CAAMI,QAAQC,CAAK,EAAA,CAAA;YACnC,MAAMf,GAAAA,GAAMU,KAAK,CAACK,CAAE,CAAA,CAAA;AACpB,YAAA,IAAI,CAACJ,OAAAA,CAAQK,GAAIb,CAAAA,CAAAA,EAAGH,QAAQ,CAACC,OAAAA,CAAQC,CAAC,CAACF,GAAI,CAAA,EAAEG,CAAC,CAACH,IAAI,CAAG,EAAA;gBAClD,OAAO,KAAA,CAAA;AACX,aAAA;AACJ,SAAA;QAEA,OAAO,IAAA,CAAA;AACX,KAAA;AAEA,IAAA,IACIH,KAAMC,CAAAA,OAAAA,CAAQI,CACdL,CAAAA,IAAAA,KAAAA,CAAMC,QAAQK,CAChB,CAAA,EAAA;QACE,IAAID,CAAAA,CAAEY,MAAWX,KAAAA,CAAAA,CAAEW,MAAQ,EAAA;YACvB,OAAO,KAAA,CAAA;AACX,SAAA;AAEA,QAAA,IAAK,IAAIC,CAAI,GAAA,CAAA,EAAGA,CAAIb,GAAAA,CAAAA,CAAEY,QAAQC,CAAK,EAAA,CAAA;YAC/B,IAAI,CAACd,QAAQC,CAAC,CAACa,EAAE,EAAEZ,CAAC,CAACY,CAAAA,CAAE,CAAG,EAAA;gBACtB,OAAO,KAAA,CAAA;AACX,aAAA;AACJ,SAAA;QAEA,OAAO,IAAA,CAAA;AACX,KAAA;IAEA,OAAO,KAAA,CAAA;AACX;;AC7DO,SAASE,cAAuBC,GAAQ,EAAA;AAC3C,IAAA,IAAK,IAAIH,CAAI,GAAA,CAAA,EAAGA,CAAIG,GAAAA,GAAAA,CAAIJ,QAAQC,CAAK,EAAA,CAAA;AACjC,QAAA,IAAK,IAAII,CAAID,GAAAA,GAAAA,CAAIJ,SAAS,CAAGK,EAAAA,CAAAA,GAAIJ,GAAGI,CAAK,EAAA,CAAA;YACrC,IAAIlB,OAAAA,CAAQiB,GAAG,CAACH,CAAAA,CAAE,EAAEG,GAAG,CAACC,EAAE,CAAG,EAAA;AACzBD,gBAAAA,GAAAA,CAAIE,OAAOD,CAAG,EAAA,CAAA,CAAA,CAAA;AAClB,aAAA;AACJ,SAAA;AACJ,KAAA;IAEA,OAAOD,GAAAA,CAAAA;AACX;;ACVA,2BACA,MAAMG,EAAK,GAAC,CAAA,IAAA;IACR,IAAI,OAAOC,eAAe,WAAa,EAAA;QACnC,OAAOA,UAAAA,CAAAA;AACX,KAAA;;IAGA,IAAI,OAAOC,SAAS,WAAa,EAAA;;QAE7B,OAAOA,IAAAA,CAAAA;AACX,KAAA;IAEA,IAAI,OAAOC,WAAW,WAAa,EAAA;QAC/B,OAAOA,MAAAA,CAAAA;AACX,KAAA;IAEA,IAAI,OAAOC,WAAW,WAAa,EAAA;QAC/B,OAAOA,MAAAA,CAAAA;AACX,KAAA;AAEA,IAAA,MAAM,IAAIC,KAAM,CAAA,gCAAA,CAAA,CAAA;AACpB,CAAA,GAAA,CAAA;AAEO,SAASC,cAAiBC,KAAQ,EAAA;AACrC,IAAA,MAAMC,MAAM,IAAIC,OAAAA,EAAAA,CAAAA;AAEhB,IAAA,MAAMC,KAAK,CAAIC,KAAAA,GAAAA;QACX,IAAInC,KAAAA,CAAMC,QAAQkC,KAAQ,CAAA,EAAA;YACtB,IAAIH,GAAAA,CAAIb,IAAIgB,KAAQ,CAAA,EAAA;AAChB,gBAAA,OAAOH,IAAII,GAAID,CAAAA,KAAAA,CAAAA,CAAAA;AACnB,aAAA;AAEA,YAAA,MAAME,SAAS,EAAE,CAAA;AACjBL,YAAAA,GAAAA,CAAIM,IAAIH,KAAOE,EAAAA,MAAAA,CAAAA,CAAAA;AAEfF,YAAAA,KAAAA,CAAMH,IAAI,CAACO,EAAAA,GAAO,MAACF,CAAiBG,KAAKN,EAAGK,CAAAA,EAAAA,CAAAA,CAAAA,CAAAA,CAAAA;YAE5C,OAAOF,MAAAA,CAAAA;AACX,SAAA;AAEA,QAAA,IAAIvC,SAASqC,KAAQ,CAAA,EAAA;YACjB,IAAIH,GAAAA,CAAIb,IAAIgB,KAAQ,CAAA,EAAA;AAChB,gBAAA,OAAOH,IAAII,GAAID,CAAAA,KAAAA,CAAAA,CAAAA;AACnB,aAAA;AAEA,YAAA,MAAMM,SAAS,EAAC,CAAA;YAChB,MAAMC,IAAAA,GAAOnC,OAAOmC,IAAKP,CAAAA,KAAAA,CAAAA,CAAAA;AAEzBH,YAAAA,GAAAA,CAAIM,IAAIH,KAAOM,EAAAA,MAAAA,CAAAA,CAAAA;AACf,YAAA,IAAK,IAAIvB,CAAI,GAAA,CAAA,EAAGA,CAAIwB,GAAAA,IAAAA,CAAKzB,QAAQC,CAAK,EAAA,CAAA;AAClCuB,gBAAAA,MAAM,CAACC,IAAI,CAACxB,CAAAA,CAAE,CAAY,GAAGgB,EAAGC,CAAAA,KAAK,CAACO,IAAI,CAACxB,CAAAA,CAAE,CAAC,CAAA,CAAA;AAClD,aAAA;YAEA,OAAOuB,MAAAA,CAAAA;AACX,SAAA;QAEA,OAAON,KAAAA,CAAAA;AACX,KAAA,CAAA;AAEA,IAAA,OAAOD,EAAGH,CAAAA,KAAAA,CAAAA,CAAAA;AACd,CAAA;AAEA,2BACO,SAASY,KAAAA,CAASR,KAAQ,EAAA;AAC7B,IAAA,IAAIX,GAAGoB,eAAiB,EAAA;AACpB,QAAA,OAAOpB,GAAGoB,eAAgBT,CAAAA,KAAAA,CAAAA,CAAAA;AAC9B,KAAA;+BAGA,OAAOL,aAAcK,CAAAA,KAAAA,CAAAA,CAAAA;AACzB;;AC/EA;;;;;AAKC,IAAA,SAAA,QAAA,GAAA;;;;;;;;;;;;;;AAIM,SAASU,SAAAA,CAAyCd,KAAQ,EAAEe,KAAa,EAAA;AAC5E,IAAA,IAAIA,QAAQ,CAAG,EAAA;AACX,QAAA,OAAO,EAAC,CAAA;AACZ,KAAA;AAEA,IAAA,MAAMX,QAAQ,QAAKJ,CAAAA,EAAAA,EAAAA,KAAAA,CAAAA,CAAAA;IACnB,MAAMW,IAAAA,GAAqBnC,OAAOmC,IAAKP,CAAAA,KAAAA,CAAAA,CAAAA;AAEvC,IAAA,IAAK,IAAIjB,CAAI,GAAA,CAAA,EAAGA,CAAIwB,GAAAA,IAAAA,CAAKzB,QAAQC,CAAK,EAAA,CAAA;AAClC,QAAA,IAAIpB,SAASqC,KAAK,CAACO,IAAI,CAACxB,CAAAA,CAAE,CAAC,CAAG,EAAA;AAC1BiB,YAAAA,KAAK,CAACO,IAAI,CAACxB,CAAAA,CAAE,CAAC,GAAG2B,SAAAA,CAAUV,KAAK,CAACO,IAAI,CAACxB,CAAE,CAAA,CAAC,EAAE4B,KAAQ,GAAA,CAAA,CAAA,CAAA;AACvD,SAAA;AACJ,KAAA;IAEA,OAAOX,KAAAA,CAAAA;AACX;;ACxBA;;;;;AAKC;AAGM,SAASY,cAAAA,CAAoDC,GAAM,EAAEC,IAAO,EAAA;AAC/E,IAAA,OAAO1C,MAAO2C,CAAAA,SAAAA,CAAUH,cAAeI,CAAAA,IAAAA,CAAKH,GAAKC,EAAAA,IAAAA,CAAAA,CAAAA;AACrD;;ACAO,SAASG,aAAaC,OAAsB,EAAA;AAC/CA,IAAAA,OAAAA,GAAUA,WAAW,EAAC,CAAA;AAENA,IAAAA,IAAAA,cAAAA,CAAAA;AAAhBA,IAAAA,OAAAA,CAAQC,KAAQD,GAAAA,CAAAA,cAAAA,GAAAA,OAAAA,CAAQC,iBAARD,cAAiB,GAAA,IAAA,CAAA;AACTA,IAAAA,IAAAA,sBAAAA,CAAAA;AAAxBA,IAAAA,OAAAA,CAAQE,aAAgBF,GAAAA,CAAAA,sBAAAA,GAAAA,OAAAA,CAAQE,yBAARF,sBAAyB,GAAA,KAAA,CAAA;AACjCA,IAAAA,IAAAA,cAAAA,CAAAA;AAAhBA,IAAAA,OAAAA,CAAQV,KAAQU,GAAAA,CAAAA,cAAAA,GAAAA,OAAAA,CAAQV,iBAARU,cAAiB,GAAA,KAAA,CAAA;AACfA,IAAAA,IAAAA,gBAAAA,CAAAA;AAAlBA,IAAAA,OAAAA,CAAQG,OAAUH,GAAAA,CAAAA,gBAAAA,GAAAA,OAAAA,CAAQG,mBAARH,gBAAmB,GAAA,KAAA,CAAA;IACrCA,OAAQI,CAAAA,QAAAA,GAAWJ,OAAQI,CAAAA,QAAAA,IAAY9D,YAAaC,CAAAA,IAAAA,CAAAA;IAEpD,OAAOyD,OAAAA,CAAAA;AACX;;ACKA,SAASK,UACLC,CAAAA,OAAsB,EACtB,GAAGC,OAAU,EAAA;IAEb,IAAIC,MAAAA,CAAAA;IACJ,IAAIC,MAAAA,CAAAA;AACJ,IAAA,IAAIH,OAAQN,CAAAA,OAAAA,CAAQI,QAAa9D,KAAAA,YAAAA,CAAaE,KAAO,EAAA;AACjDgE,QAAAA,MAAAA,GAASD,OAAQG,CAAAA,GAAAA,EAAAA,CAAAA;AACjBD,QAAAA,MAAAA,GAASF,OAAQG,CAAAA,GAAAA,EAAAA,CAAAA;KACd,MAAA;AACHF,QAAAA,MAAAA,GAASD,OAAQI,CAAAA,KAAAA,EAAAA,CAAAA;AACjBF,QAAAA,MAAAA,GAASF,OAAQI,CAAAA,KAAAA,EAAAA,CAAAA;AACrB,KAAA;AAEA,IAAA,IAAI,CAACF,MAAQ,EAAA;AACT,QAAA,IACI9D,KAAMC,CAAAA,OAAAA,CAAQ4D,MACdF,CAAAA,IAAAA,OAAAA,CAAQN,QAAQE,aAClB,EAAA;AACE,YAAA,OAAOnC,aAAcyC,CAAAA,MAAAA,CAAAA,CAAAA;AACzB,SAAA;QAEA,OAAOA,MAAAA,CAAAA;AACX,KAAA;AAEA,IAAA,IACI7D,KAAMC,CAAAA,OAAAA,CAAQ4D,MACd7D,CAAAA,IAAAA,KAAAA,CAAMC,QAAQ6D,MAChB,CAAA,EAAA;AACED,QAAAA,MAAAA,CAAOrB,IAAQsB,CAAAA,GAAAA,MAAAA,CAAAA,CAAAA;AAEf,QAAA,IAAIH,OAAQN,CAAAA,OAAAA,CAAQI,QAAa9D,KAAAA,YAAAA,CAAaE,KAAO,EAAA;YACjD,OAAO6D,UAAAA,CACHC,YACGC,OACHC,EAAAA,MAAAA,CAAAA,CAAAA;AAER,SAAA;QAEA,OAAOH,UAAAA,CACHC,SACAE,MACGD,EAAAA,GAAAA,OAAAA,CAAAA,CAAAA;AAEX,KAAA;IAEAD,OAAQ3B,CAAAA,GAAAA,CAAIM,IAAIwB,MAAQ,EAAA,IAAA,CAAA,CAAA;IAExB,IACIhE,QAAAA,CAAS+D,MACT/D,CAAAA,IAAAA,QAAAA,CAASgE,MACX,CAAA,EAAA;QACE,MAAMpB,IAAAA,GAAOnC,OAAOmC,IAAKoB,CAAAA,MAAAA,CAAAA,CAAAA;AACzB,QAAA,IAAK,IAAI5C,CAAI,GAAA,CAAA,EAAGA,CAAIwB,GAAAA,IAAAA,CAAKzB,QAAQC,CAAK,EAAA,CAAA;YAClC,MAAMf,GAAAA,GAAMuC,IAAI,CAACxB,CAAE,CAAA,CAAA;YAEnB,IAAI6B,cAAAA,CAAec,QAAQ1D,GAAM,CAAA,EAAA;gBAC7B,IAAI,CAACD,UAAUC,GAAgB,CAAA,EAAA;AAC3B,oBAAA,SAAA;AACJ,iBAAA;gBAEA,IAAIwD,OAAAA,CAAQN,QAAQY,QAAU,EAAA;oBAC1B,MAAMC,OAAAA,GAAUP,QAAQN,OAAQY,CAAAA,QAAAA,CAASJ,QAAQ1D,GAAe2D,EAAAA,MAAM,CAAC3D,GAAI,CAAA,CAAA,CAAA;oBAC3E,IAAI,OAAO+D,YAAY,WAAa,EAAA;AAChC,wBAAA,SAAA;AACJ,qBAAA;AACJ,iBAAA;gBAEA,IACIpE,QAAAA,CAAS+D,MAAM,CAAC1D,GAAAA,CAAI,KACpBL,QAASgE,CAAAA,MAAM,CAAC3D,GAAAA,CAAI,CACtB,EAAA;AACE,oBAAA,IAAIwD,QAAQ3B,GAAIb,CAAAA,GAAAA,CAAI2C,MAAM,CAAC3D,IAAI,CAAG,EAAA;AAC9B,wBAAA,MAAMgE,UAAa5D,GAAAA,MAAAA,CAAOmC,IAAKoB,CAAAA,MAAM,CAAC3D,GAAI,CAAA,CAAA,CAAA;AAC1C,wBAAA,IAAK,IAAImB,CAAI,GAAA,CAAA,EAAGA,CAAI6C,GAAAA,UAAAA,CAAWlD,QAAQK,CAAK,EAAA,CAAA;AACxC,4BAAA,IACIpB,SAAUiE,CAAAA,UAAU,CAAC7C,CAAAA,CAAE,KACvB,CAACyB,cAAAA,CAAec,MAAM,CAAC1D,GAAI,CAAA,EAAyBgE,UAAU,CAAC7C,EAAE,CACnE,EAAA;AACGuC,gCAAAA,MAAM,CAAC1D,GAAI,CAAwB,CAACgE,UAAU,CAAC7C,EAAE,CAAC,GAAG,MAAO,CAACnB,GAAI,CAAwB,CAACgE,UAAU,CAAC7C,EAAE,CAAC,CAAA;AAC7G,6BAAA;AACJ,yBAAA;AAEA,wBAAA,SAAA;AACJ,qBAAA;AAEA,oBAAA,IAAIqC,OAAQN,CAAAA,OAAAA,CAAQI,QAAa9D,KAAAA,YAAAA,CAAaE,KAAO,EAAA;wBACjDgE,MAAM,CAAC1D,GAAI,CAAA,GAAGuD,UACVC,CAAAA,OAAAA,EACAG,MAAM,CAAC3D,GAAI,CAAA,EACX0D,MAAM,CAAC1D,GAAI,CAAA,CAAA,CAAA;qBAEZ,MAAA;wBACH0D,MAAM,CAAC1D,GAAI,CAAA,GAAGuD,UACVC,CAAAA,OAAAA,EACAE,MAAM,CAAC1D,GAAI,CAAA,EACX2D,MAAM,CAAC3D,GAAI,CAAA,CAAA,CAAA;AAEnB,qBAAA;AAEA,oBAAA,SAAA;AACJ,iBAAA;AAEA,gBAAA,IACIwD,OAAQN,CAAAA,OAAAA,CAAQC,KAChBtD,IAAAA,KAAAA,CAAMC,QAAQ4D,MAAM,CAAC1D,GAAI,CAAA,CAAA,IACzBH,KAAMC,CAAAA,OAAAA,CAAQ6D,MAAM,CAAC3D,IAAI,CAC3B,EAAA;AACE,oBAAA,OAAQwD,QAAQN,OAAQI,CAAAA,QAAAA;AACpB,wBAAA,KAAK9D,YAAaC,CAAAA,IAAAA;AACdW,4BAAAA,MAAAA,CAAO6D,OAAOP,MAAQ,EAAA;gCAClB,CAAC1D,GAAAA,GAAMuD,UAAAA,CAAWC,OAASE,EAAAA,MAAM,CAAC1D,GAAI,CAAA,EAAkB2D,MAAM,CAAC3D,GAAI,CAAA,CAAA;AACvE,6BAAA,CAAA,CAAA;AACA,4BAAA,MAAA;AACJ,wBAAA,KAAKR,YAAaE,CAAAA,KAAAA;AACdU,4BAAAA,MAAAA,CAAO6D,OAAOP,MAAQ,EAAA;gCAClB,CAAC1D,GAAAA,GAAMuD,UAAAA,CAAWC,OAASG,EAAAA,MAAM,CAAC3D,GAAI,CAAA,EAAkB0D,MAAM,CAAC1D,GAAI,CAAA,CAAA;AACvE,6BAAA,CAAA,CAAA;AACA,4BAAA,MAAA;AACR,qBAAA;AACJ,iBAAA;aACG,MAAA;AACHI,gBAAAA,MAAAA,CAAO6D,OAAOP,MAAQ,EAAA;AAClB,oBAAA,CAAC1D,GAAI,GAAE2D,MAAM,CAAC3D,GAAI,CAAA;AACtB,iBAAA,CAAA,CAAA;AACJ,aAAA;AACJ,SAAA;AACJ,KAAA;AAEAwD,IAAAA,OAAAA,CAAQ3B,MAAM,IAAIC,OAAAA,EAAAA,CAAAA;AAElB,IAAA,IAAI0B,OAAQN,CAAAA,OAAAA,CAAQI,QAAa9D,KAAAA,YAAAA,CAAaE,KAAO,EAAA;QACjD,OAAO6D,UAAAA,CAAWC,YAAYC,OAASC,EAAAA,MAAAA,CAAAA,CAAAA;AAC3C,KAAA;IAEA,OAAOH,UAAAA,CAAWC,SAASE,MAAWD,EAAAA,GAAAA,OAAAA,CAAAA,CAAAA;AAC1C,CAAA;AAEO,SAASS,aAAatC,KAAoB,EAAA;AAC7C,IAAA,MAAMsB,UAAUD,YAAarB,CAAAA,KAAAA,CAAAA,CAAAA;AAE7B,IAAA,OAAO,CACH,GAAG6B,OAAAA,GAAAA;QAEH,IAAI,CAACA,QAAQ3C,MAAQ,EAAA;AACjB,YAAA,MAAM,IAAIqD,WAAY,CAAA,yCAAA,CAAA,CAAA;AAC1B,SAAA;AAEA,QAAA,MAAMC,GAAsB,GAAA;AACxBlB,YAAAA,OAAAA;AACArB,YAAAA,GAAAA,EAAK,IAAIC,OAAAA,EAAAA;AACb,SAAA,CAAA;AAEA,QAAA,IAAIoB,QAAQV,KAAO,EAAA;YACf,OAAOe,UAAAA,CAAWa,QAAQ5B,KAAMiB,CAAAA,OAAAA,CAAAA,CAAAA,CAAAA;AACpC,SAAA;QAEA,IAAI,CAACP,QAAQG,OAAS,EAAA;YAClB,IAAIH,OAAAA,CAAQI,QAAa9D,KAAAA,YAAAA,CAAaC,IAAM,EAAA;AACxC,gBAAA,IAAII,KAAMC,CAAAA,OAAAA,CAAQ2D,OAAO,CAAC,EAAE,CAAG,EAAA;AAC3BA,oBAAAA,OAAAA,CAAQY,QAAQ,EAAE,CAAA,CAAA;iBACf,MAAA;AACHZ,oBAAAA,OAAAA,CAAQY,QAAQ,EAAC,CAAA,CAAA;AACrB,iBAAA;AACJ,aAAA,MAAO,IAAIxE,KAAMC,CAAAA,OAAAA,CAAQ2D,OAAO,CAAC,EAAE,CAAG,EAAA;AAClCA,gBAAAA,OAAAA,CAAQpB,KAAK,EAAE,CAAA,CAAA;aACZ,MAAA;AACHoB,gBAAAA,OAAAA,CAAQpB,KAAK,EAAC,CAAA,CAAA;AAClB,aAAA;AACJ,SAAA;AAEA,QAAA,OAAOkB,WAAWa,GAAQX,EAAAA,GAAAA,OAAAA,CAAAA,CAAAA;AAC9B,KAAA,CAAA;AACJ,CAAA;AAEO,MAAMa,QAAQJ,YAAe;;AC9LpC;;;;;AAKC,IACM,SAASD,MAAAA,CACZP,MAAS,EACT,GAAGD,OAAU,EAAA;AAEb,IAAA,OAAOS,YAAa,CAAA;QAChBb,OAAS,EAAA,IAAA;QACTC,QAAU,EAAA,MAAA;QACVH,KAAO,EAAA,KAAA;AACX,KAAA,CAAA,CAAGO,MAAWD,EAAAA,GAAAA,OAAAA,CAAAA,CAAAA;AAClB;;;;"}
package/dist/module.d.ts CHANGED
@@ -1,4 +1,3 @@
1
- import type { Merger, MergerResult, OptionsInput } from './type';
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 object attributes?
5
+ * Merge object array properties.
6
+ *
7
+ * default: true
10
8
  */
11
9
  array: boolean;
12
10
  /**
13
- * Remove duplicates in array.
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 arrays/objects.
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-right.
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 {};
@@ -1,3 +1 @@
1
1
  export declare function distinctArray<T = any>(arr: T[]): T[];
2
- export declare function mergeArrays(...sources: any[][]): any[];
3
- export declare function mergeArraysDistinct(...sources: any[][]): any[];
@@ -1,4 +1,3 @@
1
1
  export declare function isObject(item: unknown): item is Record<string, any>;
2
- export declare function isSafeInput(object: any): boolean;
3
2
  export declare function isSafeKey(key: string): boolean;
4
3
  export declare function isEqual(x: any, y: any): boolean;
@@ -1 +1,2 @@
1
+ export declare function polyfillClone<T>(input: T): T;
1
2
  export declare function clone<T>(value: T): T;
@@ -2,5 +2,5 @@ export * from './array';
2
2
  export * from './check';
3
3
  export * from './clone';
4
4
  export * from './cut';
5
- export * from './has-own-property';
5
+ export * from './object';
6
6
  export * from './options';
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "smob",
3
- "version": "1.3.0-alpha.2",
3
+ "version": "1.4.0",
4
4
  "description": "Zero dependency library to safe merge objects.",
5
5
  "main": "dist/index.cjs",
6
6
  "module": "dist/index.mjs",