Merge remote-tracking branch 'origin/develop' into develop
All checks were successful
Build / Publish Docs (push) Successful in 1m21s
Build / Build NPM Project (push) Successful in 1m25s
Build / Tag Version (push) Successful in 11s

# Conflicts:
#	package.json
This commit is contained in:
2026-08-24 18:37:59 -04:00
2 changed files with 357 additions and 355 deletions

View File

@@ -1,6 +1,6 @@
{ {
"name": "@ztimson/utils", "name": "@ztimson/utils",
"version": "0.30.7", "version": "0.30.8",
"description": "Utility library", "description": "Utility library",
"author": "Zak Timson", "author": "Zak Timson",
"license": "MIT", "license": "MIT",

View File

@@ -97,8 +97,10 @@ export function deepCopy<T>(value: T): T {
* @return {any} The des * @return {any} The des
*/ */
export function deepMerge<T>(target: any, ...sources: any[]): T { export function deepMerge<T>(target: any, ...sources: any[]): T {
const BLOCKED = new Set(['__proto__', 'constructor', 'prototype']);
sources.forEach(s => { sources.forEach(s => {
for(const key in s) { for(const key in s) {
if(BLOCKED.has(key) || !Object.prototype.hasOwnProperty.call(s, key)) continue;
if(s[key] && typeof s[key] == 'object' && !Array.isArray(s[key])) { if(s[key] && typeof s[key] == 'object' && !Array.isArray(s[key])) {
if(!target[key]) target[key] = {}; if(!target[key]) target[key] = {};
deepMerge(target[key], s[key]); deepMerge(target[key], s[key]);