merge-anything 6.0.3 → 6.0.5

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/dist/merge.d.ts CHANGED
@@ -8,9 +8,8 @@ import type { PrettyPrint } from './typeUtils/PrettyPrint.js';
8
8
  */
9
9
  export type Merge<T, Ts extends unknown[]> = T extends Record<string | number | symbol, unknown> ? Ts extends Record<string | number | symbol, unknown>[] ? PrettyPrint<Assign<T, Ts>> : Pop<Ts> : Pop<Ts>;
10
10
  /**
11
- * Merge anything recursively.
12
- * Objects get merged, special objects (classes etc.) are re-assigned "as is".
13
- * Basic types overwrite objects or other basic types.
11
+ * Merge anything recursively. Objects get merged, special objects (classes etc.) are re-assigned
12
+ * "as is". Basic types overwrite objects or other basic types.
14
13
  */
15
14
  export declare function merge<T, const Tn extends unknown[]>(object: T, ...otherObjects: Tn): Merge<T, Tn>;
16
15
  export declare function mergeAndCompare<T, const Tn extends unknown[]>(compareFn: (prop1: unknown, prop2: unknown, propName: string | symbol) => any, object: T, ...otherObjects: Tn): Merge<T, Tn>;
package/dist/merge.js CHANGED
@@ -25,6 +25,9 @@ function mergeRecursively(origin, newComer, compareFn) {
25
25
  const props = Object.getOwnPropertyNames(origin);
26
26
  const symbols = Object.getOwnPropertySymbols(origin);
27
27
  newObject = [...props, ...symbols].reduce((carry, key) => {
28
+ // Skip __proto__ properties to prevent prototype poisoning
29
+ if (key === '__proto__')
30
+ return carry;
28
31
  const targetVal = origin[key];
29
32
  if ((!isSymbol(key) && !Object.getOwnPropertyNames(newComer).includes(key)) ||
30
33
  (isSymbol(key) && !Object.getOwnPropertySymbols(newComer).includes(key))) {
@@ -37,6 +40,9 @@ function mergeRecursively(origin, newComer, compareFn) {
37
40
  const props = Object.getOwnPropertyNames(newComer);
38
41
  const symbols = Object.getOwnPropertySymbols(newComer);
39
42
  const result = [...props, ...symbols].reduce((carry, key) => {
43
+ // Skip __proto__ properties to prevent prototype poisoning
44
+ if (key === '__proto__')
45
+ return carry;
40
46
  // re-define the origin and newComer as targetVal and newVal
41
47
  let newVal = newComer[key];
42
48
  const targetVal = isPlainObject(origin) ? origin[key] : undefined;
@@ -51,9 +57,8 @@ function mergeRecursively(origin, newComer, compareFn) {
51
57
  return result;
52
58
  }
53
59
  /**
54
- * Merge anything recursively.
55
- * Objects get merged, special objects (classes etc.) are re-assigned "as is".
56
- * Basic types overwrite objects or other basic types.
60
+ * Merge anything recursively. Objects get merged, special objects (classes etc.) are re-assigned
61
+ * "as is". Basic types overwrite objects or other basic types.
57
62
  */
58
63
  export function merge(object, ...otherObjects) {
59
64
  return otherObjects.reduce((result, newComer) => {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "merge-anything",
3
- "version": "6.0.3",
3
+ "version": "6.0.5",
4
4
  "description": "Merge objects & other types recursively. A simple & small integration.",
5
5
  "type": "module",
6
6
  "sideEffects": false,
@@ -17,14 +17,14 @@
17
17
  "release": "npm run lint && npm run build && np"
18
18
  },
19
19
  "dependencies": {
20
- "is-what": "^5.0.1"
20
+ "is-what": "^5.2.0"
21
21
  },
22
22
  "devDependencies": {
23
- "del-cli": "^5.1.0",
24
- "np": "^10.0.5",
25
- "vitest": "^1.6.0",
26
- "@cycraft/eslint": "^0.3.0",
27
- "@cycraft/tsconfig": "^0.1.2"
23
+ "@cycraft/eslint": "^0.4.3",
24
+ "@cycraft/tsconfig": "^0.1.2",
25
+ "del-cli": "^6.0.0",
26
+ "np": "^10.2.0",
27
+ "vitest": "^3.0.6"
28
28
  },
29
29
  "files": [
30
30
  "dist"