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 +3 -3
- package/dist/index.cjs +1 -1
- package/dist/index.cjs.map +1 -1
- package/dist/index.mjs +1 -1
- package/dist/index.mjs.map +1 -1
- package/package.json +1 -1
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
|
|
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 }, {
|
|
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
|
|
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
|
package/dist/index.cjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.cjs","sources":["../src/constants.ts","../src/utils/check.ts","../src/utils/array.ts","../src/utils/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":"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"}
|
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(
|
|
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
|
package/dist/index.mjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.mjs","sources":["../src/constants.ts","../src/utils/check.ts","../src/utils/array.ts","../src/utils/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":"AAOO,IAAAA,ECAA,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,IAAKnB,EAASY,KAAOZ,EAASa,GAC1B,OAAO,EAGX,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,CClDO,SAASiB,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,uMAIM,SAASC,EAAyCC,EAAUC,GAC/D,GAAIA,EAAQ,EACR,MAAO,GAGX,MAAMC,EAAQJ,EAAKE,CAAAA,EAAAA,GACbG,EAAqB7B,OAAO6B,KAAKD,GAEvC,IAAK,IAAIjB,EAAI,EAAGA,EAAIkB,EAAKnB,OAAQC,IACzBzB,EAAS0C,EAAMC,EAAKlB,OACpBiB,EAAMC,EAAKlB,IAAMc,EAAUG,EAAMC,EAAKlB,IAAKgB,EAAQ,IAI3D,OAAOC,CACX,CChBO,SAASE,EAAoDC,EAAQC,GACxE,OAAOhC,OAAOiC,UAAUH,eAAeI,KAAKH,EAAKC,EACrD,CCAO,SAASG,EAAaC,GAGTA,IAAAA,EACQA,EAGxB,OANAA,EAAUA,GAAW,IAEbC,aAAQD,EAAAA,EAAQC,QAARD,EAChBA,EAAQf,qBAAgBe,EAAAA,EAAQf,gBAARe,EACxBA,EAAQE,SAAWF,EAAQE,UAAYrD,EAAasD,KAE7CH,CACX,CCEO,SAASI,EACZJ,EACAK,KACGC,GAEH,IAAKA,EAAQhC,OAAQ,OAAO+B,EAE5B,MAAME,EAASD,EAAQE,QAEvB,GACI1D,EAASuD,IACTvD,EAASyD,GACX,CACE,MAAMd,EAAO7B,OAAO6B,KAAKc,GACzB,IAAK,IAAIhC,EAAI,EAAGA,EAAIkB,EAAKnB,OAAQC,IAAK,CAClC,MAAMf,EAAeiC,EAAKlB,GAE1B,GAAKhB,EAAUC,GAIf,GAAIkC,EAAeW,EAAQ7C,GAAM,CAC7B,GAAIwC,EAAQS,SAAU,CAElB,QAAuB,IADPT,EAAQS,SAASJ,EAAQ7C,EAAK+C,EAAO/C,IAEjD,QAER,CAEA,IAAKN,EAAaqD,EAAO/C,IACrB,SAGJ,GACIV,EAASuD,EAAO7C,KAChBV,EAASyD,EAAO/C,IAClB,CACE4C,EAAWJ,EAASK,EAAO7C,GAAM+C,EAAO/C,IAExC,QACJ,CAEA,GACIwC,EAAQC,OACRjD,MAAMC,QAAQoD,EAAO7C,KACrBR,MAAMC,QAAQsD,EAAO/C,IACvB,CACE,OAAQwC,EAAQE,UACZ,KAAKrD,EAAasD,KACdvC,OAAO8C,OAAOL,EAAQ,CAClB7C,CAACA,GAAMsB,EAAYuB,EAAO7C,GAAM+C,EAAO/C,GAAMwC,EAAQf,iBAEzD,MACJ,KAAKpC,EAAa8D,MACd/C,OAAO8C,OAAOL,EAAQ,CAClB7C,CAACA,GAAMsB,EAAYyB,EAAO/C,GAAM6C,EAAO7C,GAAMwC,EAAQf,iBAKjE,QACJ,CAEIe,EAAQE,WAAarD,EAAa8D,OAClC/C,OAAO8C,OAAOL,EAAQ,CAAE7C,CAACA,GAAM+C,EAAO/C,UAG1CI,OAAO8C,OAAOL,EAAQ,CAAE7C,CAACA,GAAM+C,EAAO/C,IAE9C,CACJ,CAEA,OAAO4C,EAAWJ,EAASK,KAAWC,EAC1C,CAEO,SAASM,EAAatB,GACzB,MAAMU,EAAUD,EAAaT,GAE7B,MAAO,CACHe,KACGC,IACFF,EAAWJ,EAASK,KAAWC,EACxC,WN/FYzD,GAAAA,EACD,KAAA,OADCA,EAEA,MAAA,SAFAA,IAAAA,EAAAA,CAAAA,IMiGL,MAAMgE,EAAQD"}
|
|
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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"}
|