smob 1.4.0 → 1.5.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 and arrays.
9
+ A zero dependency library to **s**afe **m**erge **ob**jects and arrays with customizable behavior.
10
10
 
11
11
  **Table of Contents**
12
12
 
@@ -33,9 +33,10 @@ const output = merge(...sources);
33
33
  The following merge options are set by default:
34
34
  - **array**: `true` Merge object array properties.
35
35
  - **arrayDistinct**: `false` Remove duplicates, when merging array elements.
36
+ - **arrayPriority**: `left` (options.priority) The source aka leftmost array has by **default** the highest priority.
36
37
  - **clone**: `false` Deep clone input sources.
37
38
  - **inPlace**: `false` Merge sources in place.
38
- - **priority**: `left` The source aka leftmost array/object has by **default** the highest priority.
39
+ - **priority**: `left` The source aka leftmost object has by **default** the highest priority.
39
40
 
40
41
  The merge behaviour can be changed by creating a custom [merger](#merger).
41
42
 
package/dist/index.cjs CHANGED
@@ -1,22 +1,12 @@
1
1
  'use strict';
2
2
 
3
- /*
4
- * Copyright (c) 2023.
5
- * Author Peter Placzek (tada5hi)
6
- * For the full copyright and license information,
7
- * view the LICENSE file that was distributed with this source code.
8
- */ exports.PriorityName = void 0;
3
+ exports.PriorityName = void 0;
9
4
  (function(PriorityName) {
10
- PriorityName["LEFT"] = 'left';
11
- PriorityName["RIGHT"] = 'right';
5
+ PriorityName["LEFT"] = "left";
6
+ PriorityName["RIGHT"] = "right";
12
7
  })(exports.PriorityName || (exports.PriorityName = {}));
13
8
 
14
- /*
15
- * Copyright (c) 2022.
16
- * Author Peter Placzek (tada5hi)
17
- * For the full copyright and license information,
18
- * view the LICENSE file that was distributed with this source code.
19
- */ function isObject(item) {
9
+ function isObject(item) {
20
10
  return !!item && typeof item === 'object' && !Array.isArray(item);
21
11
  }
22
12
  function isSafeKey(key) {
@@ -121,51 +111,12 @@ function polyfillClone(input) {
121
111
  /* istanbul ignore next */ return polyfillClone(value);
122
112
  }
123
113
 
124
- /*
125
- * Copyright (c) 2022.
126
- * Author Peter Placzek (tada5hi)
127
- * For the full copyright and license information,
128
- * view the LICENSE file that was distributed with this source code.
129
- */ function _extends() {
130
- _extends = Object.assign || function(target) {
131
- for(var i = 1; i < arguments.length; i++){
132
- var source = arguments[i];
133
- for(var key in source){
134
- if (Object.prototype.hasOwnProperty.call(source, key)) {
135
- target[key] = source[key];
136
- }
137
- }
138
- }
139
- return target;
140
- };
141
- return _extends.apply(this, arguments);
142
- }
143
- function cutObject(input, depth) {
144
- if (depth < 0) {
145
- return {};
146
- }
147
- const value = _extends({}, input);
148
- const keys = Object.keys(value);
149
- for(let i = 0; i < keys.length; i++){
150
- if (isObject(value[keys[i]])) {
151
- value[keys[i]] = cutObject(value[keys[i]], depth - 1);
152
- }
153
- }
154
- return value;
155
- }
156
-
157
- /*
158
- * Copyright (c) 2021.
159
- * Author Peter Placzek (tada5hi)
160
- * For the full copyright and license information,
161
- * view the LICENSE file that was distributed with this source code.
162
- */ // eslint-disable-next-line @typescript-eslint/ban-types
114
+ // eslint-disable-next-line @typescript-eslint/ban-types
163
115
  function hasOwnProperty(obj, prop) {
164
116
  return Object.prototype.hasOwnProperty.call(obj, prop);
165
117
  }
166
118
 
167
- function buildOptions(options) {
168
- options = options || {};
119
+ function buildOptions(options = {}) {
169
120
  var _options_array;
170
121
  options.array = (_options_array = options.array) != null ? _options_array : true;
171
122
  var _options_arrayDistinct;
@@ -175,13 +126,23 @@ function buildOptions(options) {
175
126
  var _options_inPlace;
176
127
  options.inPlace = (_options_inPlace = options.inPlace) != null ? _options_inPlace : false;
177
128
  options.priority = options.priority || exports.PriorityName.LEFT;
129
+ options.arrayPriority = options.arrayPriority || options.priority;
178
130
  return options;
179
131
  }
132
+ function togglePriority(priority) {
133
+ return priority === exports.PriorityName.LEFT ? `${exports.PriorityName.RIGHT}` : `${exports.PriorityName.LEFT}`;
134
+ }
180
135
 
181
136
  function baseMerger(context, ...sources) {
182
137
  let target;
183
138
  let source;
184
- if (context.options.priority === exports.PriorityName.RIGHT) {
139
+ let { priority } = context.options;
140
+ if (sources.length >= 2) {
141
+ if (Array.isArray(sources.at(0)) && Array.isArray(sources.at(-1))) {
142
+ priority = context.options.arrayPriority;
143
+ }
144
+ }
145
+ if (priority === exports.PriorityName.RIGHT) {
185
146
  target = sources.pop();
186
147
  source = sources.pop();
187
148
  } else {
@@ -196,7 +157,7 @@ function baseMerger(context, ...sources) {
196
157
  }
197
158
  if (Array.isArray(target) && Array.isArray(source)) {
198
159
  target.push(...source);
199
- if (context.options.priority === exports.PriorityName.RIGHT) {
160
+ if (context.options.arrayPriority === exports.PriorityName.RIGHT) {
200
161
  return baseMerger(context, ...sources, target);
201
162
  }
202
163
  return baseMerger(context, target, ...sources);
@@ -234,7 +195,8 @@ function baseMerger(context, ...sources) {
234
195
  continue;
235
196
  }
236
197
  if (context.options.array && Array.isArray(target[key]) && Array.isArray(source[key])) {
237
- switch(context.options.priority){
198
+ const arrayPriority = context.options.priority !== context.options.arrayPriority ? togglePriority(context.options.arrayPriority) : context.options.arrayPriority;
199
+ switch(arrayPriority){
238
200
  case exports.PriorityName.LEFT:
239
201
  Object.assign(target, {
240
202
  [key]: baseMerger(context, target[key], source[key])
@@ -274,14 +236,16 @@ function createMerger(input) {
274
236
  return baseMerger(ctx, ...clone(sources));
275
237
  }
276
238
  if (!options.inPlace) {
277
- if (options.priority === exports.PriorityName.LEFT) {
278
- if (Array.isArray(sources[0])) {
279
- sources.unshift([]);
280
- } else {
281
- sources.unshift({});
282
- }
283
- } else if (Array.isArray(sources[0])) {
239
+ if (Array.isArray(sources.at(0)) && options.arrayPriority === exports.PriorityName.LEFT) {
240
+ sources.unshift([]);
241
+ return baseMerger(ctx, ...sources);
242
+ }
243
+ if (Array.isArray(sources.at(-1)) && options.arrayPriority === exports.PriorityName.RIGHT) {
284
244
  sources.push([]);
245
+ return baseMerger(ctx, ...sources);
246
+ }
247
+ if (options.priority === exports.PriorityName.LEFT) {
248
+ sources.unshift({});
285
249
  } else {
286
250
  sources.push({});
287
251
  }
@@ -308,7 +272,6 @@ exports.assign = assign;
308
272
  exports.buildOptions = buildOptions;
309
273
  exports.clone = clone;
310
274
  exports.createMerger = createMerger;
311
- exports.cutObject = cutObject;
312
275
  exports.distinctArray = distinctArray;
313
276
  exports.hasOwnProperty = hasOwnProperty;
314
277
  exports.isEqual = isEqual;
@@ -316,4 +279,5 @@ exports.isObject = isObject;
316
279
  exports.isSafeKey = isSafeKey;
317
280
  exports.merge = merge;
318
281
  exports.polyfillClone = polyfillClone;
282
+ exports.togglePriority = togglePriority;
319
283
  //# 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/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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"}
1
+ {"version":3,"file":"index.cjs","sources":["../src/constants.ts","../src/utils/check.ts","../src/utils/array.ts","../src/utils/clone.ts","../src/utils/object.ts","../src/utils/options.ts","../src/module.ts","../src/presets.ts"],"sourcesContent":["export enum PriorityName {\n LEFT = 'left',\n RIGHT = 'right',\n}\n","export 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","import { 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","import { 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","// 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","import { PriorityName } from '../constants';\nimport type { Options, OptionsInput } from '../type';\n\nexport function buildOptions(options: OptionsInput = {}) : Options {\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 options.arrayPriority = options.arrayPriority || options.priority;\n\n return options as Options;\n}\n\nexport function togglePriority(priority: `${PriorityName}`) {\n return priority === PriorityName.LEFT ?\n `${PriorityName.RIGHT}` :\n `${PriorityName.LEFT}`;\n}\n","import { 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, togglePriority,\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\n let { priority } = context.options;\n if (sources.length >= 2) {\n if (\n Array.isArray(sources.at(0)) &&\n Array.isArray(sources.at(-1))\n ) {\n priority = context.options.arrayPriority;\n }\n }\n\n if (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.arrayPriority === 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 const arrayPriority = context.options.priority !== context.options.arrayPriority ?\n togglePriority(context.options.arrayPriority) :\n context.options.arrayPriority;\n\n switch (arrayPriority) {\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 (\n Array.isArray(sources.at(0)) &&\n options.arrayPriority === PriorityName.LEFT\n ) {\n sources.unshift([]);\n return baseMerger(ctx, ...sources);\n }\n\n if (\n Array.isArray(sources.at(-1)) &&\n options.arrayPriority === PriorityName.RIGHT\n ) {\n sources.push([]);\n return baseMerger(ctx, ...sources);\n }\n\n if (options.priority === PriorityName.LEFT) {\n sources.unshift({});\n } else {\n sources.push({});\n }\n }\n\n return baseMerger(ctx, ...sources);\n };\n}\n\nexport const merge = createMerger();\n","import { 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","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","hasOwnProperty","obj","prop","prototype","call","buildOptions","options","array","arrayDistinct","inPlace","priority","LEFT","arrayPriority","togglePriority","RIGHT","baseMerger","context","sources","target","source","at","pop","shift","strategy","applied","sourceKeys","assign","createMerger","SyntaxError","ctx","unshift","merge"],"mappings":"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"}
package/dist/index.mjs CHANGED
@@ -1,20 +1,10 @@
1
- /*
2
- * Copyright (c) 2023.
3
- * Author Peter Placzek (tada5hi)
4
- * For the full copyright and license information,
5
- * view the LICENSE file that was distributed with this source code.
6
- */ var PriorityName;
1
+ var PriorityName;
7
2
  (function(PriorityName) {
8
- PriorityName["LEFT"] = 'left';
9
- PriorityName["RIGHT"] = 'right';
3
+ PriorityName["LEFT"] = "left";
4
+ PriorityName["RIGHT"] = "right";
10
5
  })(PriorityName || (PriorityName = {}));
11
6
 
12
- /*
13
- * Copyright (c) 2022.
14
- * Author Peter Placzek (tada5hi)
15
- * For the full copyright and license information,
16
- * view the LICENSE file that was distributed with this source code.
17
- */ function isObject(item) {
7
+ function isObject(item) {
18
8
  return !!item && typeof item === 'object' && !Array.isArray(item);
19
9
  }
20
10
  function isSafeKey(key) {
@@ -119,51 +109,12 @@ function polyfillClone(input) {
119
109
  /* istanbul ignore next */ return polyfillClone(value);
120
110
  }
121
111
 
122
- /*
123
- * Copyright (c) 2022.
124
- * Author Peter Placzek (tada5hi)
125
- * For the full copyright and license information,
126
- * view the LICENSE file that was distributed with this source code.
127
- */ function _extends() {
128
- _extends = Object.assign || function(target) {
129
- for(var i = 1; i < arguments.length; i++){
130
- var source = arguments[i];
131
- for(var key in source){
132
- if (Object.prototype.hasOwnProperty.call(source, key)) {
133
- target[key] = source[key];
134
- }
135
- }
136
- }
137
- return target;
138
- };
139
- return _extends.apply(this, arguments);
140
- }
141
- function cutObject(input, depth) {
142
- if (depth < 0) {
143
- return {};
144
- }
145
- const value = _extends({}, input);
146
- const keys = Object.keys(value);
147
- for(let i = 0; i < keys.length; i++){
148
- if (isObject(value[keys[i]])) {
149
- value[keys[i]] = cutObject(value[keys[i]], depth - 1);
150
- }
151
- }
152
- return value;
153
- }
154
-
155
- /*
156
- * Copyright (c) 2021.
157
- * Author Peter Placzek (tada5hi)
158
- * For the full copyright and license information,
159
- * view the LICENSE file that was distributed with this source code.
160
- */ // eslint-disable-next-line @typescript-eslint/ban-types
112
+ // eslint-disable-next-line @typescript-eslint/ban-types
161
113
  function hasOwnProperty(obj, prop) {
162
114
  return Object.prototype.hasOwnProperty.call(obj, prop);
163
115
  }
164
116
 
165
- function buildOptions(options) {
166
- options = options || {};
117
+ function buildOptions(options = {}) {
167
118
  var _options_array;
168
119
  options.array = (_options_array = options.array) != null ? _options_array : true;
169
120
  var _options_arrayDistinct;
@@ -173,13 +124,23 @@ function buildOptions(options) {
173
124
  var _options_inPlace;
174
125
  options.inPlace = (_options_inPlace = options.inPlace) != null ? _options_inPlace : false;
175
126
  options.priority = options.priority || PriorityName.LEFT;
127
+ options.arrayPriority = options.arrayPriority || options.priority;
176
128
  return options;
177
129
  }
130
+ function togglePriority(priority) {
131
+ return priority === PriorityName.LEFT ? `${PriorityName.RIGHT}` : `${PriorityName.LEFT}`;
132
+ }
178
133
 
179
134
  function baseMerger(context, ...sources) {
180
135
  let target;
181
136
  let source;
182
- if (context.options.priority === PriorityName.RIGHT) {
137
+ let { priority } = context.options;
138
+ if (sources.length >= 2) {
139
+ if (Array.isArray(sources.at(0)) && Array.isArray(sources.at(-1))) {
140
+ priority = context.options.arrayPriority;
141
+ }
142
+ }
143
+ if (priority === PriorityName.RIGHT) {
183
144
  target = sources.pop();
184
145
  source = sources.pop();
185
146
  } else {
@@ -194,7 +155,7 @@ function baseMerger(context, ...sources) {
194
155
  }
195
156
  if (Array.isArray(target) && Array.isArray(source)) {
196
157
  target.push(...source);
197
- if (context.options.priority === PriorityName.RIGHT) {
158
+ if (context.options.arrayPriority === PriorityName.RIGHT) {
198
159
  return baseMerger(context, ...sources, target);
199
160
  }
200
161
  return baseMerger(context, target, ...sources);
@@ -232,7 +193,8 @@ function baseMerger(context, ...sources) {
232
193
  continue;
233
194
  }
234
195
  if (context.options.array && Array.isArray(target[key]) && Array.isArray(source[key])) {
235
- switch(context.options.priority){
196
+ const arrayPriority = context.options.priority !== context.options.arrayPriority ? togglePriority(context.options.arrayPriority) : context.options.arrayPriority;
197
+ switch(arrayPriority){
236
198
  case PriorityName.LEFT:
237
199
  Object.assign(target, {
238
200
  [key]: baseMerger(context, target[key], source[key])
@@ -272,14 +234,16 @@ function createMerger(input) {
272
234
  return baseMerger(ctx, ...clone(sources));
273
235
  }
274
236
  if (!options.inPlace) {
275
- if (options.priority === PriorityName.LEFT) {
276
- if (Array.isArray(sources[0])) {
277
- sources.unshift([]);
278
- } else {
279
- sources.unshift({});
280
- }
281
- } else if (Array.isArray(sources[0])) {
237
+ if (Array.isArray(sources.at(0)) && options.arrayPriority === PriorityName.LEFT) {
238
+ sources.unshift([]);
239
+ return baseMerger(ctx, ...sources);
240
+ }
241
+ if (Array.isArray(sources.at(-1)) && options.arrayPriority === PriorityName.RIGHT) {
282
242
  sources.push([]);
243
+ return baseMerger(ctx, ...sources);
244
+ }
245
+ if (options.priority === PriorityName.LEFT) {
246
+ sources.unshift({});
283
247
  } else {
284
248
  sources.push({});
285
249
  }
@@ -302,5 +266,5 @@ const merge = createMerger();
302
266
  })(target, ...sources);
303
267
  }
304
268
 
305
- export { PriorityName, assign, buildOptions, clone, createMerger, cutObject, distinctArray, hasOwnProperty, isEqual, isObject, isSafeKey, merge, polyfillClone };
269
+ export { PriorityName, assign, buildOptions, clone, createMerger, distinctArray, hasOwnProperty, isEqual, isObject, isSafeKey, merge, polyfillClone, togglePriority };
306
270
  //# 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/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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"}
1
+ {"version":3,"file":"index.mjs","sources":["../src/constants.ts","../src/utils/check.ts","../src/utils/array.ts","../src/utils/clone.ts","../src/utils/object.ts","../src/utils/options.ts","../src/module.ts","../src/presets.ts"],"sourcesContent":["export enum PriorityName {\n LEFT = 'left',\n RIGHT = 'right',\n}\n","export 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","import { 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","import { 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","// 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","import { PriorityName } from '../constants';\nimport type { Options, OptionsInput } from '../type';\n\nexport function buildOptions(options: OptionsInput = {}) : Options {\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 options.arrayPriority = options.arrayPriority || options.priority;\n\n return options as Options;\n}\n\nexport function togglePriority(priority: `${PriorityName}`) {\n return priority === PriorityName.LEFT ?\n `${PriorityName.RIGHT}` :\n `${PriorityName.LEFT}`;\n}\n","import { 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, togglePriority,\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\n let { priority } = context.options;\n if (sources.length >= 2) {\n if (\n Array.isArray(sources.at(0)) &&\n Array.isArray(sources.at(-1))\n ) {\n priority = context.options.arrayPriority;\n }\n }\n\n if (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.arrayPriority === 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 const arrayPriority = context.options.priority !== context.options.arrayPriority ?\n togglePriority(context.options.arrayPriority) :\n context.options.arrayPriority;\n\n switch (arrayPriority) {\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 (\n Array.isArray(sources.at(0)) &&\n options.arrayPriority === PriorityName.LEFT\n ) {\n sources.unshift([]);\n return baseMerger(ctx, ...sources);\n }\n\n if (\n Array.isArray(sources.at(-1)) &&\n options.arrayPriority === PriorityName.RIGHT\n ) {\n sources.push([]);\n return baseMerger(ctx, ...sources);\n }\n\n if (options.priority === PriorityName.LEFT) {\n sources.unshift({});\n } else {\n sources.push({});\n }\n }\n\n return baseMerger(ctx, ...sources);\n };\n}\n\nexport const merge = createMerger();\n","import { 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","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","hasOwnProperty","obj","prop","prototype","call","buildOptions","options","array","arrayDistinct","inPlace","priority","LEFT","arrayPriority","togglePriority","RIGHT","baseMerger","context","sources","target","source","at","pop","shift","strategy","applied","sourceKeys","assign","createMerger","SyntaxError","ctx","unshift","merge"],"mappings":"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"}
package/dist/type.d.ts CHANGED
@@ -13,6 +13,13 @@ export type Options = {
13
13
  * default: false
14
14
  */
15
15
  arrayDistinct: boolean;
16
+ /**
17
+ * Merge sources from left-to-right or right-to-left.
18
+ * From v2 upwards default to left independent of the option priority.
19
+ *
20
+ * default: left (aka. options.priority)
21
+ */
22
+ arrayPriority: `${PriorityName}`;
16
23
  /**
17
24
  * Strategy to merge different object keys.
18
25
  *
@@ -35,6 +42,7 @@ export type Options = {
35
42
  clone?: boolean;
36
43
  /**
37
44
  * Merge sources from left-to-right or right-to-left.
45
+ * From v2 upwards default to right.
38
46
  *
39
47
  * default: left
40
48
  */
@@ -1,6 +1,5 @@
1
1
  export * from './array';
2
2
  export * from './check';
3
3
  export * from './clone';
4
- export * from './cut';
5
4
  export * from './object';
6
5
  export * from './options';
@@ -1,2 +1,4 @@
1
+ import { PriorityName } from '../constants';
1
2
  import type { Options, OptionsInput } from '../type';
2
3
  export declare function buildOptions(options?: OptionsInput): Options;
4
+ export declare function togglePriority(priority: `${PriorityName}`): "left" | "right";
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "smob",
3
- "version": "1.4.0",
3
+ "version": "1.5.0",
4
4
  "description": "Zero dependency library to safe merge objects.",
5
5
  "main": "dist/index.cjs",
6
6
  "module": "dist/index.mjs",
@@ -51,21 +51,21 @@
51
51
  },
52
52
  "homepage": "https://github.com/Tada5hi/smob#readme",
53
53
  "devDependencies": {
54
- "@rollup/plugin-node-resolve": "^15.0.2",
55
- "@swc/core": "^1.3.60",
56
- "@swc/jest": "^0.2.26",
57
- "@tada5hi/commitlint-config": "^1.0.2",
58
- "@tada5hi/eslint-config-typescript": "^1.1.9",
59
- "@tada5hi/semantic-release": "^0.1.0",
60
- "@tada5hi/tsconfig": "^0.4.0",
61
- "@types/jest": "^29.5.1",
62
- "@types/node": "^20.2.4",
54
+ "@rollup/plugin-node-resolve": "^15.2.3",
55
+ "@swc/core": "^1.4.11",
56
+ "@swc/jest": "^0.2.29",
57
+ "@tada5hi/commitlint-config": "^1.2.0",
58
+ "@tada5hi/eslint-config-typescript": "^1.2.10",
59
+ "@tada5hi/semantic-release": "^0.3.1",
60
+ "@tada5hi/tsconfig": "^0.5.1",
61
+ "@types/jest": "^29.5.3",
62
+ "@types/node": "^20.10.4",
63
63
  "cross-env": "^7.0.3",
64
- "eslint": "^8.41.0",
65
- "husky": "^8.0.3",
66
- "jest": "^29.5.0",
67
- "rollup": "^3.23.0",
68
- "semantic-release": "^19.0.5",
69
- "typescript": "^5.0.4"
64
+ "eslint": "^8.57.0",
65
+ "husky": "^9.0.11",
66
+ "jest": "^29.6.1",
67
+ "rollup": "^4.13.2",
68
+ "semantic-release": "^23.0.6",
69
+ "typescript": "^5.4.3"
70
70
  }
71
71
  }
@@ -1 +0,0 @@
1
- export declare function cutObject<T extends Record<string, any>>(input: T, depth: number): T;