smob 1.1.0 → 1.1.1

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
@@ -34,7 +34,7 @@ The following merge options are set by default:
34
34
  The source aka leftmost object has by **default** the highest priority.
35
35
  - **array**: `true`
36
36
  Merge source and target arrays by priority order.
37
- - **arrayDistinct**: `false` Remove duplicates, when merging array properties.
37
+ - **arrayDistinct**: `false` Remove duplicates, when merging array elements.
38
38
 
39
39
  The merge behaviour can be changed by creating a custom [merger](#merger).
40
40
 
@@ -45,8 +45,8 @@ The merge behaviour can be changed by creating a custom [merger](#merger).
45
45
  ```typescript
46
46
  import { merge } from 'smob';
47
47
 
48
- console.log(merge({ a: 1 }, { a: 2 }, { a: 3 }));
49
- // => { a: 1 }
48
+ console.log(merge({ a: 1 }, { b: 2 }, { c: 3 }));
49
+ // => { a: 1, b: 2, c: 3 }
50
50
  ```
51
51
 
52
52
  ### Merger
package/dist/index.cjs CHANGED
@@ -1,2 +1,2 @@
1
- "use strict";var t;function r(t){return!!t&&"object"==typeof t&&!Array.isArray(t)}function e(t){try{return JSON.stringify(t),!0}catch(t){return!1}}function n(t){return"__proto__"!==t&&"prototype"!==t&&"constructor"!==t}function i(t,e){if(Object.is(t,e))return!0;if(t instanceof Date&&e instanceof Date)return t.getTime()===e.getTime();if(t instanceof RegExp&&e instanceof RegExp)return t.toString()===e.toString();if(!r(t)||!r(e))return!1;const n=Reflect.ownKeys(t),o=Reflect.ownKeys(e);if(n.length!==o.length)return!1;for(let r=0;r<n.length;r++){const o=n[r];if(!Reflect.has(e,o)||!i(t[o],e[o]))return!1}return!0}function o(t){const r=[...t];for(let t=0;t<r.length;t++)for(let e=r.length-1;e>t;e--)i(r[t],r[e])&&r.splice(e,1);return r}function s(t,r,e){const n=t.concat(r);return e?o(n):n}function c(){return c=Object.assign||function(t){for(var r=1;r<arguments.length;r++){var e=arguments[r];for(var n in e)Object.prototype.hasOwnProperty.call(e,n)&&(t[n]=e[n])}return t},c.apply(this,arguments)}function a(t,r){return Object.prototype.hasOwnProperty.call(t,r)}function f(t){var r,e;return(t=t||{}).array=null==(r=t.array)||r,t.arrayDistinct=null!=(e=t.arrayDistinct)&&e,t.priority=t.priority||exports.PriorityName.LEFT,t}function u(t,i,...o){if(!o.length)return i;const c=o.shift();if(r(i)&&r(c)){const o=Object.keys(c);for(let f=0;f<o.length;f++){const y=o[f];if(n(y))if(a(i,y)){if(t.strategy){if(void 0!==t.strategy(i,y,c[y]))continue}if(!e(c[y]))continue;if(r(i[y])&&r(c[y])){u(t,i[y],c[y]);continue}if(t.array&&Array.isArray(i[y])&&Array.isArray(c[y])){switch(t.priority){case exports.PriorityName.LEFT:Object.assign(i,{[y]:s(i[y],c[y],t.arrayDistinct)});break;case exports.PriorityName.RIGHT:Object.assign(i,{[y]:s(c[y],i[y],t.arrayDistinct)})}continue}t.priority===exports.PriorityName.RIGHT&&Object.assign(i,{[y]:c[y]})}else Object.assign(i,{[y]:c[y]})}}return u(t,i,...o)}function y(t){const r=f(t);return(t,...e)=>u(r,t,...e)}exports.PriorityName=void 0,(t=exports.PriorityName||(exports.PriorityName={})).LEFT="left",t.RIGHT="right";const p=y();exports.baseMerger=u,exports.buildOptions=f,exports.createMerger=y,exports.cutObject=function t(e,n){if(n<0)return{};const i=c({},e),o=Object.keys(i);for(let e=0;e<o.length;e++)r(i[o[e]])&&(i[o[e]]=t(i[o[e]],n-1));return i},exports.distinctArray=o,exports.hasOwnProperty=a,exports.isEqual=i,exports.isObject=r,exports.isSafeKey=n,exports.isSafeObject=e,exports.merge=p,exports.mergeArrays=s;
1
+ "use strict";var r;function t(r){return!!r&&"object"==typeof r&&!Array.isArray(r)}function e(r){try{return JSON.stringify(r),!0}catch(r){return!1}}function n(r){return"__proto__"!==r&&"prototype"!==r&&"constructor"!==r}function i(r,e){if(Object.is(r,e))return!0;if(r instanceof Date&&e instanceof Date)return r.getTime()===e.getTime();if(r instanceof RegExp&&e instanceof RegExp)return r.toString()===e.toString();if(t(r)&&t(e)){const t=Reflect.ownKeys(r),n=Reflect.ownKeys(e);if(t.length!==n.length)return!1;for(let n=0;n<t.length;n++){const o=t[n];if(!Reflect.has(e,o)||!i(r[o],e[o]))return!1}return!0}if(Array.isArray(r)&&Array.isArray(e)){if(r.length!==e.length)return!1;for(let t=0;t<r.length;t++)if(!i(r[t],e[t]))return!1;return!0}return!1}function o(r){const t=[...r];for(let r=0;r<t.length;r++)for(let e=t.length-1;e>r;e--)i(t[r],t[e])&&t.splice(e,1);return t}function s(r,t,e){const n=r.concat(t);return e?o(n):n}function a(){return a=Object.assign||function(r){for(var t=1;t<arguments.length;t++){var e=arguments[t];for(var n in e)Object.prototype.hasOwnProperty.call(e,n)&&(r[n]=e[n])}return r},a.apply(this,arguments)}function c(r,t){return Object.prototype.hasOwnProperty.call(r,t)}function f(r){var t,e;return(r=r||{}).array=null==(t=r.array)||t,r.arrayDistinct=null!=(e=r.arrayDistinct)&&e,r.priority=r.priority||exports.PriorityName.LEFT,r}function u(r,i,...o){if(!o.length)return i;const a=o.shift();if(t(i)&&t(a)){const o=Object.keys(a);for(let f=0;f<o.length;f++){const y=o[f];if(n(y))if(c(i,y)){if(r.strategy){if(void 0!==r.strategy(i,y,a[y]))continue}if(!e(a[y]))continue;if(t(i[y])&&t(a[y])){u(r,i[y],a[y]);continue}if(r.array&&Array.isArray(i[y])&&Array.isArray(a[y])){switch(r.priority){case exports.PriorityName.LEFT:Object.assign(i,{[y]:s(i[y],a[y],r.arrayDistinct)});break;case exports.PriorityName.RIGHT:Object.assign(i,{[y]:s(a[y],i[y],r.arrayDistinct)})}continue}r.priority===exports.PriorityName.RIGHT&&Object.assign(i,{[y]:a[y]})}else Object.assign(i,{[y]:a[y]})}}return u(r,i,...o)}function y(r){const t=f(r);return(r,...e)=>u(t,r,...e)}exports.PriorityName=void 0,(r=exports.PriorityName||(exports.PriorityName={})).LEFT="left",r.RIGHT="right";const p=y();exports.baseMerger=u,exports.buildOptions=f,exports.createMerger=y,exports.cutObject=function r(e,n){if(n<0)return{};const i=a({},e),o=Object.keys(i);for(let e=0;e<o.length;e++)t(i[o[e]])&&(i[o[e]]=r(i[o[e]],n-1));return i},exports.distinctArray=o,exports.hasOwnProperty=c,exports.isEqual=i,exports.isObject=t,exports.isSafeKey=n,exports.isSafeObject=e,exports.merge=p,exports.mergeArrays=s;
2
2
  //# 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/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 isSafeObject(object: Record<string, 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 (!isObject(x) || !isObject(y)) {\n return false;\n }\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 * 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(arr: any[]) {\n const copy = [...arr];\n\n for (let i = 0; i < copy.length; i++) {\n for (let j = copy.length - 1; j > i; j--) {\n if (isEqual(copy[i], copy[j])) {\n copy.splice(j, 1);\n }\n }\n }\n\n return copy;\n}\n\nexport function mergeArrays(\n first: any[],\n second: any[],\n arrayDistinct: boolean,\n) {\n const merged = first.concat(second);\n\n if (arrayDistinct) {\n return distinctArray(merged);\n }\n\n return merged;\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.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, MergerResult, Options, OptionsInput,\n} from './type';\nimport {\n buildOptions,\n hasOwnProperty,\n isObject,\n isSafeKey,\n isSafeObject,\n mergeArrays,\n} from './utils';\n\nexport function baseMerger<A extends Record<string, any>, B extends Record<string, any>>(\n options: Options,\n target: A,\n ...sources: B[]\n) : MergerResult<A, B> {\n if (!sources.length) return target as MergerResult<A, B>;\n\n const source = sources.shift();\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 : string = keys[i];\n\n if (!isSafeKey(key)) {\n continue;\n }\n\n if (hasOwnProperty(target, key)) {\n if (options.strategy) {\n const applied = options.strategy(target, key, source[key]);\n if (typeof applied !== 'undefined') {\n continue;\n }\n }\n\n if (!isSafeObject(source[key])) {\n continue;\n }\n\n if (\n isObject(target[key]) &&\n isObject(source[key])\n ) {\n baseMerger(options, target[key], source[key]);\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]: mergeArrays(target[key], source[key], options.arrayDistinct),\n });\n break;\n case PriorityName.RIGHT:\n Object.assign(target, {\n [key]: mergeArrays(source[key], target[key], options.arrayDistinct),\n });\n break;\n }\n\n continue;\n }\n\n if (options.priority === PriorityName.RIGHT) {\n Object.assign(target, { [key]: source[key] });\n }\n } else {\n Object.assign(target, { [key]: source[key] });\n }\n }\n }\n\n return baseMerger(options, target, ...sources);\n}\n\nexport function createMerger(input?: OptionsInput) : Merger {\n const options = buildOptions(input);\n\n return <A extends Record<string, any>, B extends Record<string, any>>(\n target: A,\n ...sources: B[]\n ) => baseMerger(options, target, ...sources);\n}\n\nexport const merge = createMerger();\n"],"names":["PriorityName","isObject","item","Array","isArray","isSafeObject","object","JSON","stringify","e","isSafeKey","key","isEqual","x","y","Object","is","Date","getTime","RegExp","toString","keysX","Reflect","ownKeys","keysY","length","i","has","distinctArray","arr","copy","j","splice","mergeArrays","first","second","arrayDistinct","merged","concat","_extends","hasOwnProperty","obj","prop","prototype","call","buildOptions","options","array","priority","LEFT","baseMerger","target","sources","source","shift","keys","strategy","assign","RIGHT","createMerger","input","merge","cutObject","depth","value"],"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/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 isSafeObject(object: Record<string, 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(arr: any[]) {\n const copy = [...arr];\n\n for (let i = 0; i < copy.length; i++) {\n for (let j = copy.length - 1; j > i; j--) {\n if (isEqual(copy[i], copy[j])) {\n copy.splice(j, 1);\n }\n }\n }\n\n return copy;\n}\n\nexport function mergeArrays(\n first: any[],\n second: any[],\n arrayDistinct: boolean,\n) {\n const merged = first.concat(second);\n\n if (arrayDistinct) {\n return distinctArray(merged);\n }\n\n return merged;\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.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, MergerResult, Options, OptionsInput,\n} from './type';\nimport {\n buildOptions,\n hasOwnProperty,\n isObject,\n isSafeKey,\n isSafeObject,\n mergeArrays,\n} from './utils';\n\nexport function baseMerger<A extends Record<string, any>, B extends Record<string, any>>(\n options: Options,\n target: A,\n ...sources: B[]\n) : MergerResult<A, B> {\n if (!sources.length) return target as MergerResult<A, B>;\n\n const source = sources.shift();\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 : string = keys[i];\n\n if (!isSafeKey(key)) {\n continue;\n }\n\n if (hasOwnProperty(target, key)) {\n if (options.strategy) {\n const applied = options.strategy(target, key, source[key]);\n if (typeof applied !== 'undefined') {\n continue;\n }\n }\n\n if (!isSafeObject(source[key])) {\n continue;\n }\n\n if (\n isObject(target[key]) &&\n isObject(source[key])\n ) {\n baseMerger(options, target[key], source[key]);\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]: mergeArrays(target[key], source[key], options.arrayDistinct),\n });\n break;\n case PriorityName.RIGHT:\n Object.assign(target, {\n [key]: mergeArrays(source[key], target[key], options.arrayDistinct),\n });\n break;\n }\n\n continue;\n }\n\n if (options.priority === PriorityName.RIGHT) {\n Object.assign(target, { [key]: source[key] });\n }\n } else {\n Object.assign(target, { [key]: source[key] });\n }\n }\n }\n\n return baseMerger(options, target, ...sources);\n}\n\nexport function createMerger(input?: OptionsInput) : Merger {\n const options = buildOptions(input);\n\n return <A extends Record<string, any>, B extends Record<string, any>>(\n target: A,\n ...sources: B[]\n ) => baseMerger(options, target, ...sources);\n}\n\nexport const merge = createMerger();\n"],"names":["PriorityName","isObject","item","Array","isArray","isSafeObject","object","JSON","stringify","e","isSafeKey","key","isEqual","x","y","Object","is","Date","getTime","RegExp","toString","keysX","Reflect","ownKeys","keysY","length","i","has","distinctArray","arr","copy","j","splice","mergeArrays","first","second","arrayDistinct","merged","concat","_extends","hasOwnProperty","obj","prop","prototype","call","buildOptions","options","array","priority","LEFT","baseMerger","target","sources","source","shift","keys","strategy","assign","RIGHT","createMerger","input","merge","cutObject","depth","value"],"mappings":"iBAOYA,ECAL,SAASC,EAASC,GACrB,QACMA,GACc,iBAATA,IACNC,MAAMC,QAAQF,EAEvB,CAEO,SAASG,EAAaC,GACzB,IAEI,OADAC,KAAKC,UAAUF,IACR,CACX,CAAE,MAAOG,GACL,OAAO,CACX,CACJ,CAEO,SAASC,EAAUC,GACtB,MAAe,cAARA,GACK,cAARA,GACQ,gBAARA,CACR,CAEO,SAASC,EAAQC,EAAQC,GAC5B,GAAIC,OAAOC,GAAGH,EAAGC,GAAI,OAAO,EAE5B,GAAID,aAAaI,MAAQH,aAAaG,KAClC,OAAOJ,EAAEK,YAAcJ,EAAEI,UAG7B,GAAIL,aAAaM,QAAUL,aAAaK,OACpC,OAAON,EAAEO,aAAeN,EAAEM,WAG9B,GACInB,EAASY,IACTZ,EAASa,GACX,CACE,MAAMO,EAAQC,QAAQC,QAAQV,GACxBW,EAAQF,QAAQC,QAAQT,GAC9B,GAAIO,EAAMI,SAAWD,EAAMC,OACvB,OAAO,EAGX,IAAK,IAAIC,EAAI,EAAGA,EAAIL,EAAMI,OAAQC,IAAK,CACnC,MAAMf,EAAMU,EAAMK,GAClB,IAAKJ,QAAQK,IAAIb,EAAGH,KAASC,EAAQC,EAAEF,GAAMG,EAAEH,IAC3C,OAAO,CAEf,CAEA,OAAO,CACX,CAEA,GACIR,MAAMC,QAAQS,IACdV,MAAMC,QAAQU,GAChB,CACE,GAAID,EAAEY,SAAWX,EAAEW,OACf,OAAO,EAGX,IAAK,IAAIC,EAAI,EAAGA,EAAIb,EAAEY,OAAQC,IAC1B,IAAKd,EAAQC,EAAEa,GAAIZ,EAAEY,IACjB,OAAO,EAIf,OAAO,CACX,CAEA,OAAO,CACX,CCtEO,SAASE,EAAcC,GAC1B,MAAMC,EAAO,IAAID,GAEjB,IAAK,IAAIH,EAAI,EAAGA,EAAII,EAAKL,OAAQC,IAC7B,IAAK,IAAIK,EAAID,EAAKL,OAAS,EAAGM,EAAIL,EAAGK,IAC7BnB,EAAQkB,EAAKJ,GAAII,EAAKC,KACtBD,EAAKE,OAAOD,EAAG,GAK3B,OAAOD,CACX,CAEO,SAASG,EACZC,EACAC,EACAC,GAEA,MAAMC,EAASH,EAAMI,OAAOH,GAE5B,OAAIC,EACOR,EAAcS,GAGlBA,CACX,CC9BC,SAAAE,uMCGM,SAASC,EAAoDC,EAAQC,GACxE,OAAO3B,OAAO4B,UAAUH,eAAeI,KAAKH,EAAKC,EACrD,CCAO,SAASG,EAAaC,GAGTA,IAAAA,EACQA,EAGxB,OANAA,EAAUA,GAAW,IAEbC,aAAQD,EAAAA,EAAQC,QAARD,EAChBA,EAAQV,qBAAgBU,EAAAA,EAAQV,gBAARU,EACxBA,EAAQE,SAAWF,EAAQE,UAAYhD,QAAAA,aAAaiD,KAE7CH,CACX,CCEO,SAASI,EACZJ,EACAK,KACGC,GAEH,IAAKA,EAAQ3B,OAAQ,OAAO0B,EAE5B,MAAME,EAASD,EAAQE,QAEvB,GACIrD,EAASkD,IACTlD,EAASoD,GACX,CACE,MAAME,EAAOxC,OAAOwC,KAAKF,GACzB,IAAK,IAAI3B,EAAI,EAAGA,EAAI6B,EAAK9B,OAAQC,IAAK,CAClC,MAAMf,EAAe4C,EAAK7B,GAE1B,GAAKhB,EAAUC,GAIf,GAAI6B,EAAeW,EAAQxC,GAAM,CAC7B,GAAImC,EAAQU,SAAU,CAElB,QAAuB,IADPV,EAAQU,SAASL,EAAQxC,EAAK0C,EAAO1C,IAEjD,QAER,CAEA,IAAKN,EAAagD,EAAO1C,IACrB,SAGJ,GACIV,EAASkD,EAAOxC,KAChBV,EAASoD,EAAO1C,IAClB,CACEuC,EAAWJ,EAASK,EAAOxC,GAAM0C,EAAO1C,IAExC,QACJ,CAEA,GACImC,EAAQC,OACR5C,MAAMC,QAAQ+C,EAAOxC,KACrBR,MAAMC,QAAQiD,EAAO1C,IACvB,CACE,OAAQmC,EAAQE,UACZ,KAAKhD,QAAaiD,aAAAA,KACdlC,OAAO0C,OAAON,EAAQ,CAClBxC,CAACA,GAAMsB,EAAYkB,EAAOxC,GAAM0C,EAAO1C,GAAMmC,EAAQV,iBAEzD,MACJ,KAAKpC,QAAa0D,aAAAA,MACd3C,OAAO0C,OAAON,EAAQ,CAClBxC,CAACA,GAAMsB,EAAYoB,EAAO1C,GAAMwC,EAAOxC,GAAMmC,EAAQV,iBAKjE,QACJ,CAEIU,EAAQE,WAAahD,QAAAA,aAAa0D,OAClC3C,OAAO0C,OAAON,EAAQ,CAAExC,CAACA,GAAM0C,EAAO1C,UAG1CI,OAAO0C,OAAON,EAAQ,CAAExC,CAACA,GAAM0C,EAAO1C,IAE9C,CACJ,CAEA,OAAOuC,EAAWJ,EAASK,KAAWC,EAC1C,CAEO,SAASO,EAAaC,GACzB,MAAMd,EAAUD,EAAae,GAE7B,MAAO,CACHT,KACGC,IACFF,EAAWJ,EAASK,KAAWC,EACxC,CN/FOpD,QAAAA,kBAAA,GAAKA,EAAAA,QAAAA,eAAAA,qBAAAA,CAAAA,IACD,KAAA,OADCA,EAEA,MAAA,QM+FL,MAAM6D,EAAQF,yFH/Fd,SAASG,EAAyCF,EAAUG,GAC/D,GAAIA,EAAQ,EACR,MAAO,GAGX,MAAMC,EAAQzB,EAAKqB,CAAAA,EAAAA,GACbL,EAAqBxC,OAAOwC,KAAKS,GAEvC,IAAK,IAAItC,EAAI,EAAGA,EAAI6B,EAAK9B,OAAQC,IACzBzB,EAAS+D,EAAMT,EAAK7B,OACpBsC,EAAMT,EAAK7B,IAAMoC,EAAUE,EAAMT,EAAK7B,IAAKqC,EAAQ,IAI3D,OAAOC,CACX"}
package/dist/index.mjs CHANGED
@@ -1,2 +1,2 @@
1
- var t;function r(t){return!!t&&"object"==typeof t&&!Array.isArray(t)}function n(t){try{return JSON.stringify(t),!0}catch(t){return!1}}function e(t){return"__proto__"!==t&&"prototype"!==t&&"constructor"!==t}function i(t,n){if(Object.is(t,n))return!0;if(t instanceof Date&&n instanceof Date)return t.getTime()===n.getTime();if(t instanceof RegExp&&n instanceof RegExp)return t.toString()===n.toString();if(!r(t)||!r(n))return!1;const e=Reflect.ownKeys(t),o=Reflect.ownKeys(n);if(e.length!==o.length)return!1;for(let r=0;r<e.length;r++){const o=e[r];if(!Reflect.has(n,o)||!i(t[o],n[o]))return!1}return!0}function o(t){const r=[...t];for(let t=0;t<r.length;t++)for(let n=r.length-1;n>t;n--)i(r[t],r[n])&&r.splice(n,1);return r}function c(t,r,n){const e=t.concat(r);return n?o(e):e}function s(){return s=Object.assign||function(t){for(var r=1;r<arguments.length;r++){var n=arguments[r];for(var e in n)Object.prototype.hasOwnProperty.call(n,e)&&(t[e]=n[e])}return t},s.apply(this,arguments)}function a(t,n){if(n<0)return{};const e=s({},t),i=Object.keys(e);for(let t=0;t<i.length;t++)r(e[i[t]])&&(e[i[t]]=a(e[i[t]],n-1));return e}function f(t,r){return Object.prototype.hasOwnProperty.call(t,r)}function u(r){var n,e;return(r=r||{}).array=null==(n=r.array)||n,r.arrayDistinct=null!=(e=r.arrayDistinct)&&e,r.priority=r.priority||t.LEFT,r}function y(i,o,...s){if(!s.length)return o;const a=s.shift();if(r(o)&&r(a)){const s=Object.keys(a);for(let u=0;u<s.length;u++){const l=s[u];if(e(l))if(f(o,l)){if(i.strategy){if(void 0!==i.strategy(o,l,a[l]))continue}if(!n(a[l]))continue;if(r(o[l])&&r(a[l])){y(i,o[l],a[l]);continue}if(i.array&&Array.isArray(o[l])&&Array.isArray(a[l])){switch(i.priority){case t.LEFT:Object.assign(o,{[l]:c(o[l],a[l],i.arrayDistinct)});break;case t.RIGHT:Object.assign(o,{[l]:c(a[l],o[l],i.arrayDistinct)})}continue}i.priority===t.RIGHT&&Object.assign(o,{[l]:a[l]})}else Object.assign(o,{[l]:a[l]})}}return y(i,o,...s)}function l(t){const r=u(t);return(t,...n)=>y(r,t,...n)}!function(t){t.LEFT="left",t.RIGHT="right"}(t||(t={}));const g=l();export{t as PriorityName,y as baseMerger,u as buildOptions,l as createMerger,a as cutObject,o as distinctArray,f as hasOwnProperty,i as isEqual,r as isObject,e as isSafeKey,n as isSafeObject,g as merge,c as mergeArrays};
1
+ var t;function r(t){return!!t&&"object"==typeof t&&!Array.isArray(t)}function n(t){try{return JSON.stringify(t),!0}catch(t){return!1}}function e(t){return"__proto__"!==t&&"prototype"!==t&&"constructor"!==t}function i(t,n){if(Object.is(t,n))return!0;if(t instanceof Date&&n instanceof Date)return t.getTime()===n.getTime();if(t instanceof RegExp&&n instanceof RegExp)return t.toString()===n.toString();if(r(t)&&r(n)){const r=Reflect.ownKeys(t),e=Reflect.ownKeys(n);if(r.length!==e.length)return!1;for(let e=0;e<r.length;e++){const o=r[e];if(!Reflect.has(n,o)||!i(t[o],n[o]))return!1}return!0}if(Array.isArray(t)&&Array.isArray(n)){if(t.length!==n.length)return!1;for(let r=0;r<t.length;r++)if(!i(t[r],n[r]))return!1;return!0}return!1}function o(t){const r=[...t];for(let t=0;t<r.length;t++)for(let n=r.length-1;n>t;n--)i(r[t],r[n])&&r.splice(n,1);return r}function c(t,r,n){const e=t.concat(r);return n?o(e):e}function a(){return a=Object.assign||function(t){for(var r=1;r<arguments.length;r++){var n=arguments[r];for(var e in n)Object.prototype.hasOwnProperty.call(n,e)&&(t[e]=n[e])}return t},a.apply(this,arguments)}function f(t,n){if(n<0)return{};const e=a({},t),i=Object.keys(e);for(let t=0;t<i.length;t++)r(e[i[t]])&&(e[i[t]]=f(e[i[t]],n-1));return e}function s(t,r){return Object.prototype.hasOwnProperty.call(t,r)}function u(r){var n,e;return(r=r||{}).array=null==(n=r.array)||n,r.arrayDistinct=null!=(e=r.arrayDistinct)&&e,r.priority=r.priority||t.LEFT,r}function y(i,o,...a){if(!a.length)return o;const f=a.shift();if(r(o)&&r(f)){const a=Object.keys(f);for(let u=0;u<a.length;u++){const l=a[u];if(e(l))if(s(o,l)){if(i.strategy){if(void 0!==i.strategy(o,l,f[l]))continue}if(!n(f[l]))continue;if(r(o[l])&&r(f[l])){y(i,o[l],f[l]);continue}if(i.array&&Array.isArray(o[l])&&Array.isArray(f[l])){switch(i.priority){case t.LEFT:Object.assign(o,{[l]:c(o[l],f[l],i.arrayDistinct)});break;case t.RIGHT:Object.assign(o,{[l]:c(f[l],o[l],i.arrayDistinct)})}continue}i.priority===t.RIGHT&&Object.assign(o,{[l]:f[l]})}else Object.assign(o,{[l]:f[l]})}}return y(i,o,...a)}function l(t){const r=u(t);return(t,...n)=>y(r,t,...n)}!function(t){t.LEFT="left",t.RIGHT="right"}(t||(t={}));const g=l();export{t as PriorityName,y as baseMerger,u as buildOptions,l as createMerger,f as cutObject,o as distinctArray,s as hasOwnProperty,i as isEqual,r as isObject,e as isSafeKey,n as isSafeObject,g as merge,c as mergeArrays};
2
2
  //# 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/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 isSafeObject(object: Record<string, 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 (!isObject(x) || !isObject(y)) {\n return false;\n }\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 * 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(arr: any[]) {\n const copy = [...arr];\n\n for (let i = 0; i < copy.length; i++) {\n for (let j = copy.length - 1; j > i; j--) {\n if (isEqual(copy[i], copy[j])) {\n copy.splice(j, 1);\n }\n }\n }\n\n return copy;\n}\n\nexport function mergeArrays(\n first: any[],\n second: any[],\n arrayDistinct: boolean,\n) {\n const merged = first.concat(second);\n\n if (arrayDistinct) {\n return distinctArray(merged);\n }\n\n return merged;\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.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, MergerResult, Options, OptionsInput,\n} from './type';\nimport {\n buildOptions,\n hasOwnProperty,\n isObject,\n isSafeKey,\n isSafeObject,\n mergeArrays,\n} from './utils';\n\nexport function baseMerger<A extends Record<string, any>, B extends Record<string, any>>(\n options: Options,\n target: A,\n ...sources: B[]\n) : MergerResult<A, B> {\n if (!sources.length) return target as MergerResult<A, B>;\n\n const source = sources.shift();\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 : string = keys[i];\n\n if (!isSafeKey(key)) {\n continue;\n }\n\n if (hasOwnProperty(target, key)) {\n if (options.strategy) {\n const applied = options.strategy(target, key, source[key]);\n if (typeof applied !== 'undefined') {\n continue;\n }\n }\n\n if (!isSafeObject(source[key])) {\n continue;\n }\n\n if (\n isObject(target[key]) &&\n isObject(source[key])\n ) {\n baseMerger(options, target[key], source[key]);\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]: mergeArrays(target[key], source[key], options.arrayDistinct),\n });\n break;\n case PriorityName.RIGHT:\n Object.assign(target, {\n [key]: mergeArrays(source[key], target[key], options.arrayDistinct),\n });\n break;\n }\n\n continue;\n }\n\n if (options.priority === PriorityName.RIGHT) {\n Object.assign(target, { [key]: source[key] });\n }\n } else {\n Object.assign(target, { [key]: source[key] });\n }\n }\n }\n\n return baseMerger(options, target, ...sources);\n}\n\nexport function createMerger(input?: OptionsInput) : Merger {\n const options = buildOptions(input);\n\n return <A extends Record<string, any>, B extends Record<string, any>>(\n target: A,\n ...sources: B[]\n ) => baseMerger(options, target, ...sources);\n}\n\nexport const merge = createMerger();\n"],"names":["PriorityName","isObject","item","Array","isArray","isSafeObject","object","JSON","stringify","e","isSafeKey","key","isEqual","x","y","Object","is","Date","getTime","RegExp","toString","keysX","Reflect","ownKeys","keysY","length","i","has","distinctArray","arr","copy","j","splice","mergeArrays","first","second","arrayDistinct","merged","concat","_extends","cutObject","input","depth","value","keys","hasOwnProperty","obj","prop","prototype","call","buildOptions","options","array","priority","LEFT","baseMerger","target","sources","source","shift","strategy","assign","RIGHT","createMerger","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/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 isSafeObject(object: Record<string, 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(arr: any[]) {\n const copy = [...arr];\n\n for (let i = 0; i < copy.length; i++) {\n for (let j = copy.length - 1; j > i; j--) {\n if (isEqual(copy[i], copy[j])) {\n copy.splice(j, 1);\n }\n }\n }\n\n return copy;\n}\n\nexport function mergeArrays(\n first: any[],\n second: any[],\n arrayDistinct: boolean,\n) {\n const merged = first.concat(second);\n\n if (arrayDistinct) {\n return distinctArray(merged);\n }\n\n return merged;\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.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, MergerResult, Options, OptionsInput,\n} from './type';\nimport {\n buildOptions,\n hasOwnProperty,\n isObject,\n isSafeKey,\n isSafeObject,\n mergeArrays,\n} from './utils';\n\nexport function baseMerger<A extends Record<string, any>, B extends Record<string, any>>(\n options: Options,\n target: A,\n ...sources: B[]\n) : MergerResult<A, B> {\n if (!sources.length) return target as MergerResult<A, B>;\n\n const source = sources.shift();\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 : string = keys[i];\n\n if (!isSafeKey(key)) {\n continue;\n }\n\n if (hasOwnProperty(target, key)) {\n if (options.strategy) {\n const applied = options.strategy(target, key, source[key]);\n if (typeof applied !== 'undefined') {\n continue;\n }\n }\n\n if (!isSafeObject(source[key])) {\n continue;\n }\n\n if (\n isObject(target[key]) &&\n isObject(source[key])\n ) {\n baseMerger(options, target[key], source[key]);\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]: mergeArrays(target[key], source[key], options.arrayDistinct),\n });\n break;\n case PriorityName.RIGHT:\n Object.assign(target, {\n [key]: mergeArrays(source[key], target[key], options.arrayDistinct),\n });\n break;\n }\n\n continue;\n }\n\n if (options.priority === PriorityName.RIGHT) {\n Object.assign(target, { [key]: source[key] });\n }\n } else {\n Object.assign(target, { [key]: source[key] });\n }\n }\n }\n\n return baseMerger(options, target, ...sources);\n}\n\nexport function createMerger(input?: OptionsInput) : Merger {\n const options = buildOptions(input);\n\n return <A extends Record<string, any>, B extends Record<string, any>>(\n target: A,\n ...sources: B[]\n ) => baseMerger(options, target, ...sources);\n}\n\nexport const merge = createMerger();\n"],"names":["PriorityName","isObject","item","Array","isArray","isSafeObject","object","JSON","stringify","e","isSafeKey","key","isEqual","x","y","Object","is","Date","getTime","RegExp","toString","keysX","Reflect","ownKeys","keysY","length","i","has","distinctArray","arr","copy","j","splice","mergeArrays","first","second","arrayDistinct","merged","concat","_extends","cutObject","input","depth","value","keys","hasOwnProperty","obj","prop","prototype","call","buildOptions","options","array","priority","LEFT","baseMerger","target","sources","source","shift","strategy","assign","RIGHT","createMerger","merge"],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "smob",
3
- "version": "1.1.0",
3
+ "version": "1.1.1",
4
4
  "description": "Zero dependency library to safe merge objects.",
5
5
  "main": "dist/index.cjs",
6
6
  "module": "dist/index.mjs",