{"_id":"object-deep-merge","_rev":"4249721","name":"object-deep-merge","description":"Strongly-typed deep and recursive object merging. Considers all nested levels of objects, arrays, sets and maps.","dist-tags":{"latest":"2.0.0"},"maintainers":[{"name":"austinpaquette","email":""}],"time":{"modified":"2026-03-29T21:54:16.000Z","created":"2023-07-16T09:03:07.226Z","2.0.0":"2025-10-20T08:54:07.282Z","1.0.5":"2025-09-04T01:38:12.139Z","1.0.4":"2023-08-20T01:32:16.206Z","1.0.3":"2023-08-14T03:14:51.396Z","1.0.2":"2023-08-11T04:04:34.563Z","1.0.1":"2023-08-11T03:24:17.492Z","1.0.0":"2023-07-19T06:39:07.683Z","0.0.0":"2023-07-16T09:03:07.226Z"},"users":{},"author":{"name":"Forcir Engineering","email":"engineering@forcir.com","url":"https://code.forcir.com"},"versions":{"2.0.0":{"name":"object-deep-merge","version":"2.0.0","private":false,"description":"Strongly-typed deep and recursive object merging. Considers all nested levels of objects, arrays, sets and maps.","keywords":["typescript","typescript-library","type-safe","typesafe","object-merge","deep-merge","merge-object","merge-objects","deep-merge-object","object-merging","merge-options","object-deep-merge","object-deep-merging","deep-merging","deep-merge-objects"],"homepage":"https://github.com/forcir/object-deep-merge","bugs":{"url":"https://github.com/forcir/object-deep-merge/issues"},"license":"MIT","author":{"name":"Forcir Engineering","email":"engineering@forcir.com","url":"https://code.forcir.com"},"type":"module","main":"dist/index.js","exports":{".":{"import":{"types":"./dist/index.d.ts","default":"./dist/index.js"},"require":{"types":"./dist/index.d.cts","default":"./dist/index.cjs"}}},"types":"dist/index.d.ts","scripts":{"build":"run-s build:*","build:prepare":"rimraf dist","build:code":"tsup src/index.ts --format cjs,esm --dts --minify","dev":"tsup src/index.ts --format cjs,esm --dts --watch","format":"prettier --check \"**/*.{cjs,js,json,md,ts,tsx}\"","format:fix":"prettier --write \"**/*.{cjs,js,json,md,ts,tsx}\"","lint":"eslint \"**/*.{cjs,cts,js,jsx,mjs,mts,ts,tsx}\"","lint:fix":"eslint --fix \"**/*.{cjs,cts,js,jsx,mjs,mts,ts,tsx}\"","prepublishOnly":"run-s build","test":"NODE_OPTIONS='--experimental-vm-modules --require ./scripts/suppress-experimental-vm-modules-warning.cjs' jest --runInBand","test:coverage":"NODE_OPTIONS='--experimental-vm-modules --require ./scripts/suppress-experimental-vm-modules-warning.cjs' jest --coverage"},"prettier":"@forcir/prettier-config","eslintConfig":{"extends":"@forcir/eslint-config"},"devDependencies":{"@digitak/esrun":"3.2.24","@forcir/eslint-config":"1.0.3","@forcir/prettier-config":"1.0.2","@forcir/tsconfig":"1.0.4","@types/jest":"29.5.14","eslint":"8.47.0","jest":"29.7.0","npm-run-all":"4.1.5","prettier":"3.0.2","rimraf":"6.0.1","ts-jest":"29.1.1","ts-node":"10.9.1","tsup":"8.5.0","typescript":"5.1.6"},"packageManager":"pnpm@10.17.0","_id":"object-deep-merge@2.0.0","gitHead":"3395689aa4d0bb5af9aeca3b66162a39154c3327","_nodeVersion":"22.14.0","_npmVersion":"10.9.2","dist":{"shasum":"94d24cf713d4a7a143653500ff4488a2d494681f","size":3954,"noattachment":false,"key":"/object-deep-merge/-/object-deep-merge-2.0.0.tgz","tarball":"http://registry.cnpm.dingdandao.com/object-deep-merge/download/object-deep-merge-2.0.0.tgz"},"_npmUser":{"name":"austinpaquette","email":"austin+npm@paquette.io"},"directories":{},"maintainers":[{"name":"austinpaquette","email":""}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/object-deep-merge_2.0.0_1760950446996_0.5797529000723911"},"_hasShrinkwrap":false,"_cnpmcore_publish_time":"2025-10-20T08:54:07.282Z","publish_time":1760950447282,"_source_registry_name":"default","_cnpm_publish_time":1760950447282},"1.0.5":{"name":"object-deep-merge","version":"1.0.5","private":false,"description":"Strongly-typed deep and recursive object merging. Considers all nested levels of objects, arrays, sets and maps.","keywords":["typescript","typescript-library","type-safe","typesafe","object-merge","deep-merge","merge-object","merge-objects","deep-merge-object","object-merging","merge-options","object-deep-merge","object-deep-merging","deep-merging","deep-merge-objects"],"homepage":"https://github.com/forcir/object-deep-merge","bugs":{"url":"https://github.com/forcir/object-deep-merge/issues"},"license":"MIT","author":{"name":"Forcir Engineering","email":"engineering@forcir.com","url":"https://code.forcir.com"},"type":"module","main":"dist/index.js","exports":{".":{"import":{"types":"./dist/index.d.ts","default":"./dist/index.js"},"require":{"types":"./dist/index.d.cts","default":"./dist/index.cjs"}}},"types":"dist/index.d.ts","scripts":{"build":"run-s build:*","build:prepare":"rimraf dist","build:code":"tsup src/index.ts --format cjs,esm --dts --minify","dev":"tsup src/index.ts --format cjs,esm --dts --watch","format":"prettier --check \"**/*.{cjs,js,json,md,ts,tsx}\"","format:fix":"prettier --write \"**/*.{cjs,js,json,md,ts,tsx}\"","lint":"eslint \"**/*.{cjs,cts,js,jsx,mjs,mts,ts,tsx}\"","lint:fix":"eslint --fix \"**/*.{cjs,cts,js,jsx,mjs,mts,ts,tsx}\"","prepublishOnly":"run-s build","test":"NODE_OPTIONS='--experimental-vm-modules --require ./scripts/suppress-experimental-vm-modules-warning.cjs' jest --runInBand","test:coverage":"NODE_OPTIONS='--experimental-vm-modules --require ./scripts/suppress-experimental-vm-modules-warning.cjs' jest --coverage"},"prettier":"@forcir/prettier-config","eslintConfig":{"extends":"@forcir/eslint-config"},"devDependencies":{"@digitak/esrun":"3.2.24","@forcir/eslint-config":"1.0.3","@forcir/prettier-config":"1.0.2","@forcir/tsconfig":"1.0.4","@types/jest":"29.5.14","eslint":"8.47.0","jest":"29.7.0","npm-run-all":"4.1.5","prettier":"3.0.2","rimraf":"6.0.1","ts-jest":"29.1.1","ts-node":"10.9.1","tsup":"8.5.0","typescript":"5.1.6"},"packageManager":"pnpm@8.6.11","dependencies":{"type-fest":"4.2.0"},"_id":"object-deep-merge@1.0.5","gitHead":"9cb7450c601ed92cab3690629c7c8e5b0e348078","_nodeVersion":"22.14.0","_npmVersion":"10.9.2","dist":{"shasum":"a5aed81ba02563f6632ea3496451f2b987619538","size":3977,"noattachment":false,"key":"/object-deep-merge/-/object-deep-merge-1.0.5.tgz","tarball":"http://registry.cnpm.dingdandao.com/object-deep-merge/download/object-deep-merge-1.0.5.tgz"},"_npmUser":{"name":"austinpaquette","email":"austin+npm@paquette.io"},"directories":{},"maintainers":[{"name":"austinpaquette","email":""}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/object-deep-merge_1.0.5_1756949891933_0.3814645320092076"},"_hasShrinkwrap":false,"_cnpmcore_publish_time":"2025-09-04T01:38:12.139Z","publish_time":1756949892139,"_source_registry_name":"default","_cnpm_publish_time":1756949892139},"1.0.4":{"name":"object-deep-merge","version":"1.0.4","private":false,"description":"Strongly-typed deep and recursive object merging. Considers all nested levels of objects, arrays, sets and maps.","keywords":["typescript","typescript-library","type-safe","typesafe","object-merge","deep-merge","merge-object","merge-objects","deep-merge-object","object-merging","merge-options","object-deep-merge","object-deep-merging","deep-merging","deep-merge-objects"],"homepage":"https://github.com/forcir/object-deep-merge","bugs":{"url":"https://github.com/forcir/object-deep-merge/issues"},"license":"MIT","author":{"name":"Forcir Engineering","email":"engineering@forcir.com","url":"https://code.forcir.com"},"type":"module","main":"dist/index","types":"dist/index.d.ts","scripts":{"build":"run-s build:*","build:prepare":"rimraf dist","build:code":"tsup src/index.ts --format cjs,esm --dts --minify","dev":"tsup src/index.ts --format cjs,esm --dts --watch","format":"prettier --check \"**/*.{cjs,js,json,md,ts,tsx}\"","format:fix":"prettier --write \"**/*.{cjs,js,json,md,ts,tsx}\"","lint":"eslint \"**/*.{cjs,cts,js,jsx,mjs,mts,ts,tsx}\"","lint:fix":"eslint --fix \"**/*.{cjs,cts,js,jsx,mjs,mts,ts,tsx}\"","prepublishOnly":"run-s build","test":"NODE_OPTIONS='--experimental-vm-modules --require ./scripts/suppress-experimental-vm-modules-warning.cjs' jest","test:coverage":"NODE_OPTIONS='--experimental-vm-modules --require ./scripts/suppress-experimental-vm-modules-warning.cjs' jest --coverage"},"prettier":"@forcir/prettier-config","eslintConfig":{"extends":"@forcir/eslint-config"},"devDependencies":{"@digitak/esrun":"3.2.24","@forcir/eslint-config":"1.0.3","@forcir/prettier-config":"1.0.2","@forcir/tsconfig":"1.0.4","@types/jest":"29.5.3","eslint":"8.47.0","jest":"29.6.2","npm-run-all":"4.1.5","prettier":"3.0.2","rimraf":"5.0.1","ts-jest":"29.1.1","ts-node":"10.9.1","tsup":"7.2.0","typescript":"5.1.6"},"packageManager":"pnpm@8.6.11","dependencies":{"type-fest":"4.2.0"},"gitHead":"673a7619903b5fae67f20244bdeca8c2ce483f48","_id":"object-deep-merge@1.0.4","_nodeVersion":"20.3.1","_npmVersion":"9.6.7","dist":{"shasum":"1963855ef6f7add751e3a0c5f3088e9bf57b77ff","size":3881,"noattachment":false,"key":"/object-deep-merge/-/object-deep-merge-1.0.4.tgz","tarball":"http://registry.cnpm.dingdandao.com/object-deep-merge/download/object-deep-merge-1.0.4.tgz"},"_npmUser":{"name":"austinpaquette","email":"austin+npm@paquette.io"},"directories":{},"maintainers":[{"name":"austinpaquette","email":""}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/object-deep-merge_1.0.4_1692495136073_0.5549240074623387"},"_hasShrinkwrap":false,"_cnpmcore_publish_time":"2023-08-20T01:32:16.206Z","publish_time":1692495136206,"_source_registry_name":"default","_cnpm_publish_time":1692495136206},"1.0.3":{"name":"object-deep-merge","version":"1.0.3","private":false,"description":"Strongly-typed deep and recursive object merging. Considers all nested levels of objects, arrays, sets and maps.","keywords":["typescript","typescript-library","type-safe","typesafe","object-merge","deep-merge","merge-object","merge-objects","deep-merge-object","object-merging","merge-options","object-deep-merge","object-deep-merging","deep-merging","deep-merge-objects"],"homepage":"https://github.com/forcir/object-deep-merge","bugs":{"url":"https://github.com/forcir/object-deep-merge/issues"},"license":"MIT","author":{"name":"Forcir Engineering","email":"engineering@forcir.com","url":"https://code.forcir.com"},"type":"module","main":"dist/index","types":"dist/index.d.ts","scripts":{"build":"run-s build:*","build:prepare":"rimraf dist","build:code":"tsup src/index.ts --format cjs,esm --dts --minify","dev":"tsup src/index.ts --format cjs,esm --dts --watch","format":"prettier --check \"**/*.{cjs,js,json,md,ts,tsx}\"","format:fix":"prettier --write \"**/*.{cjs,js,json,md,ts,tsx}\"","lint":"eslint \"**/*.{cjs,cts,js,jsx,mjs,mts,ts,tsx}\"","lint:fix":"eslint --fix \"**/*.{cjs,cts,js,jsx,mjs,mts,ts,tsx}\"","prepublishOnly":"run-s build","test":"NODE_OPTIONS='--experimental-vm-modules --require ./scripts/suppress-experimental-vm-modules-warning.cjs' jest","test:coverage":"NODE_OPTIONS='--experimental-vm-modules --require ./scripts/suppress-experimental-vm-modules-warning.cjs' jest --coverage"},"prettier":"@forcir/prettier-config","eslintConfig":{"extends":"@forcir/eslint-config"},"devDependencies":{"@digitak/esrun":"3.2.24","@forcir/eslint-config":"1.0.3","@forcir/prettier-config":"1.0.2","@forcir/tsconfig":"1.0.4","@types/jest":"29.5.3","eslint":"8.46.0","jest":"29.6.2","npm-run-all":"4.1.5","prettier":"3.0.1","rimraf":"5.0.1","ts-jest":"29.1.1","ts-node":"10.9.1","tsup":"7.2.0","typescript":"5.1.6"},"packageManager":"pnpm@8.6.11","gitHead":"6ecda1c330559f3ac3e94b8e78700f283833b85b","_id":"object-deep-merge@1.0.3","_nodeVersion":"20.3.1","_npmVersion":"9.6.7","dist":{"shasum":"0ab72a21f9473fb7a76e85f6eb47a628a1e0f5db","size":3203,"noattachment":false,"key":"/object-deep-merge/-/object-deep-merge-1.0.3.tgz","tarball":"http://registry.cnpm.dingdandao.com/object-deep-merge/download/object-deep-merge-1.0.3.tgz"},"_npmUser":{"name":"austinpaquette","email":"austin+npm@paquette.io"},"directories":{},"maintainers":[{"name":"austinpaquette","email":""}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/object-deep-merge_1.0.3_1691982891223_0.026826144420214693"},"_hasShrinkwrap":false,"_cnpmcore_publish_time":"2023-08-14T03:14:51.396Z","publish_time":1691982891396,"_source_registry_name":"default","_cnpm_publish_time":1691982891396},"1.0.2":{"name":"object-deep-merge","version":"1.0.2","private":false,"description":"Strongly-typed deep and recursive object merging. Considers all nested levels of objects, arrays, sets and maps.","keywords":["typescript","typescript-library","type-safe","typesafe","object-merge","deep-merge","merge-object","merge-objects","deep-merge-object","object-merging","merge-options","object-deep-merge","object-deep-merging","deep-merging","deep-merge-objects"],"homepage":"https://github.com/forcir/object-deep-merge","bugs":{"url":"https://github.com/forcir/object-deep-merge/issues"},"license":"MIT","author":{"name":"Forcir Engineering","email":"engineering@forcir.com","url":"https://code.forcir.com"},"type":"module","main":"dist/index","types":"dist/index.d.ts","scripts":{"build":"run-s build:*","build:prepare":"rimraf dist","build:code":"tsup src/index.ts --format cjs,esm --dts --minify","dev":"tsup src/index.ts --format cjs,esm --dts --watch","format":"prettier --check \"**/*.{cjs,js,json,md,ts,tsx}\"","format:fix":"prettier --write \"**/*.{cjs,js,json,md,ts,tsx}\"","lint":"eslint \"**/*.{cjs,cts,js,jsx,mjs,mts,ts,tsx}\"","lint:fix":"eslint --fix \"**/*.{cjs,cts,js,jsx,mjs,mts,ts,tsx}\"","prepublishOnly":"run-s build","test":"NODE_OPTIONS='--experimental-vm-modules --require ./scripts/suppress-experimental-vm-modules-warning.cjs' jest","test:coverage":"NODE_OPTIONS='--experimental-vm-modules --require ./scripts/suppress-experimental-vm-modules-warning.cjs' jest --coverage"},"prettier":"@forcir/prettier-config","eslintConfig":{"extends":"@forcir/eslint-config"},"devDependencies":{"@digitak/esrun":"3.2.24","@forcir/eslint-config":"1.0.1","@forcir/prettier-config":"1.0.0","@forcir/tsconfig":"1.0.0","@types/jest":"29.5.3","eslint":"8.46.0","jest":"29.6.1","npm-run-all":"4.1.5","prettier":"3.0.0","rimraf":"5.0.1","ts-jest":"29.1.1","ts-node":"10.9.1","tsup":"7.1.0","typescript":"5.1.6"},"packageManager":"pnpm@8.6.11","gitHead":"47918d66f576307e9fda193ccb5465fd9bb2fbfe","_id":"object-deep-merge@1.0.2","_nodeVersion":"20.3.1","_npmVersion":"9.6.7","dist":{"shasum":"b8eb5382917ea4f0afe532fbfa645f9fb3a66060","size":3187,"noattachment":false,"key":"/object-deep-merge/-/object-deep-merge-1.0.2.tgz","tarball":"http://registry.cnpm.dingdandao.com/object-deep-merge/download/object-deep-merge-1.0.2.tgz"},"_npmUser":{"name":"austinpaquette","email":"austin+npm@paquette.io"},"directories":{},"maintainers":[{"name":"austinpaquette","email":""}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/object-deep-merge_1.0.2_1691726674385_0.8900102025145673"},"_hasShrinkwrap":false,"_cnpmcore_publish_time":"2023-08-11T04:04:34.563Z","publish_time":1691726674563,"_source_registry_name":"default","_cnpm_publish_time":1691726674563},"1.0.1":{"name":"object-deep-merge","version":"1.0.1","private":false,"description":"Strongly-typed deep and recursive object merging. Considers all nested levels of objects, arrays, sets and maps.","keywords":["typescript","typescript-library","type-safe","typesafe","object-merge","deep-merge","merge-object","merge-objects","deep-merge-object","object-merging","merge-options","object-deep-merge","object-deep-merging","deep-merging","deep-merge-objects"],"homepage":"https://github.com/forcir/object-deep-merge","bugs":{"url":"https://github.com/forcir/object-deep-merge/issues"},"license":"MIT","author":{"name":"Forcir Engineering","email":"engineering@forcir.com","url":"https://code.forcir.com"},"type":"module","main":"dist/index","types":"dist/index.d.ts","scripts":{"build":"tsup src/index.ts --format cjs,esm --dts --minify","dev":"tsup src/index.ts --format cjs,esm --dts --watch","format":"prettier --check \"**/*.{cjs,js,json,md,ts,tsx}\"","format:fix":"prettier --write \"**/*.{cjs,js,json,md,ts,tsx}\"","lint":"eslint \"**/*.{cjs,js,ts,tsx}\"","test":"NODE_OPTIONS='--experimental-vm-modules --require ./scripts/suppress-experimental-vm-modules-warning.cjs' jest","test:coverage":"NODE_OPTIONS='--experimental-vm-modules --require ./scripts/suppress-experimental-vm-modules-warning.cjs' jest --coverage"},"prettier":"@forcir/prettier-config","eslintConfig":{"extends":"../forcir-eslint-config/index.cjs"},"devDependencies":{"@digitak/esrun":"3.2.24","@forcir/eslint-config":"0.0.0","@forcir/prettier-config":"1.0.0","@forcir/tsconfig":"1.0.0","@types/jest":"29.5.3","eslint":"8.46.0","jest":"29.6.1","prettier":"3.0.0","ts-jest":"29.1.1","ts-node":"10.9.1","tsup":"7.1.0","typescript":"5.1.6"},"packageManager":"pnpm@8.6.11","gitHead":"302f5d59188f40776bd982dd6ec2bce50077462c","_id":"object-deep-merge@1.0.1","_nodeVersion":"20.3.1","_npmVersion":"9.6.7","dist":{"shasum":"e7f9701699638dc64c9642ae50942f0cfb021ec3","size":2967,"noattachment":false,"key":"/object-deep-merge/-/object-deep-merge-1.0.1.tgz","tarball":"http://registry.cnpm.dingdandao.com/object-deep-merge/download/object-deep-merge-1.0.1.tgz"},"_npmUser":{"name":"austinpaquette","email":"austin+npm@paquette.io"},"directories":{},"maintainers":[{"name":"austinpaquette","email":""}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/object-deep-merge_1.0.1_1691724257263_0.19790319261526212"},"_hasShrinkwrap":false,"_cnpmcore_publish_time":"2023-08-11T03:24:17.492Z","publish_time":1691724257492,"_source_registry_name":"default","_cnpm_publish_time":1691724257492},"1.0.0":{"name":"object-deep-merge","version":"1.0.0","private":false,"keywords":["typescript","typescript-library","type-safe","typesafe","object-merge","deep-merge","merge-object","merge-objects","deep-merge-object","object-merging","merge-options","object-deep-merge","object-deep-merging","deep-merging","deep-merge-objects"],"license":"MIT","type":"module","main":"dist/index.cjs","types":"dist/index.d.ts","scripts":{"build":"tsup src/index.ts --format cjs,esm --dts --minify","dev":"tsup src/index.ts --format cjs,esm --dts --watch","dev:test":"esrun src/test.ts","format":"prettier --write \"**/*.{js,json,md,ts,tsx}\""},"prettier":"@pqt/prettier-config","devDependencies":{"@digitak/esrun":"3.2.24","@pqt/prettier-config":"1.0.1","@pqt/tsconfig":"1.0.1","prettier":"3.0.0","tsup":"7.1.0","typescript":"5.1.6"},"gitHead":"dfb162e3c793618d831dee566c31f0911cba2e67","description":"<p align=\"center\"></p> <div align=\"center\">     <picture>         <source media=\"(prefers-color-scheme: dark)\" srcset=\"https://pqt.s3.ca-central-1.amazonaws.com/object-deep-merge/assets/images/logos/dark.png\" height=\"64\">         <img alt=\"Object Deep Mer","_id":"object-deep-merge@1.0.0","_nodeVersion":"20.3.1","_npmVersion":"9.6.7","dist":{"shasum":"95208a22654d7cd20806c60f52bd18f3960e1d6c","size":2529,"noattachment":false,"key":"/object-deep-merge/-/object-deep-merge-1.0.0.tgz","tarball":"http://registry.cnpm.dingdandao.com/object-deep-merge/download/object-deep-merge-1.0.0.tgz"},"_npmUser":{"name":"austinpaquette","email":"austin+npm@paquette.io"},"directories":{},"maintainers":[{"name":"austinpaquette","email":""}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/object-deep-merge_1.0.0_1689748747541_0.607674226755748"},"_hasShrinkwrap":false,"_cnpmcore_publish_time":"2023-07-19T06:39:07.683Z","publish_time":1689748747683,"_source_registry_name":"default","_cnpm_publish_time":1689748747683},"0.0.0":{"name":"object-deep-merge","version":"0.0.0","private":false,"license":"MIT","_id":"object-deep-merge@0.0.0","_nodeVersion":"20.3.1","_npmVersion":"9.6.7","dist":{"shasum":"957f9939d092657c3792fa38c62b17e6039a4ce0","size":177,"noattachment":false,"key":"/object-deep-merge/-/object-deep-merge-0.0.0.tgz","tarball":"http://registry.cnpm.dingdandao.com/object-deep-merge/download/object-deep-merge-0.0.0.tgz"},"_npmUser":{"name":"austinpaquette","email":"austin+npm@paquette.io"},"directories":{},"maintainers":[{"name":"austinpaquette","email":""}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/object-deep-merge_0.0.0_1689498187059_0.9929453401733477"},"_hasShrinkwrap":false,"_cnpmcore_publish_time":"2023-07-16T09:03:07.226Z","publish_time":1689498187226,"_source_registry_name":"default","_cnpm_publish_time":1689498187226}},"readme":"<p align=\"center\"></p>\n<div align=\"center\">\n    <picture>\n        <source media=\"(prefers-color-scheme: dark)\" srcset=\"https://cdn.forcir.com/oss/forcir-object-deep-merge/assets/images/logos/dark.png\" height=\"64\">\n        <source media=\"(prefers-color-scheme: light)\" srcset=\"https://cdn.forcir.com/oss/forcir-object-deep-merge/assets/images/logos/light.png\" height=\"64\">\n        <img alt=\"Forcir Object Deep Merge Logo\" src=\"https://cdn.forcir.com/oss/forcir-object-deep-merge/assets/images/logos/light.png\" height=\"64\">\n    </picture>\n</div>\n<p align=\"center\"><strong>Strongly-typed deep and recursive object merging with support for all value types.</strong></p>\n<p align=\"center\"></p>\n\n## Install\n\n```bash\npnpm add object-deep-merge\n```\n\n```bash\nyarn add object-deep-merge\n```\n\n```bash\nnpm install object-deep-merge\n```\n\n## Basic Usage\n\n```ts\nimport { merge } from \"object-deep-merge\";\n```\n\n### Simply merge two objects, with no nested properties\n\n```ts\nconst merged = merge({ foo: false }, { bar: true });\n\nconsole.log({ merged });\n```\n\n<details><summary>Output</summary>\n\n```json\n{\n    \"merged\": {\n        \"foo\": false,\n        \"bar\": true\n    }\n}\n```\n\n</details>\n\n## Typed Usage\n\n### `merge` Type Signature\n\nThe `merge` function accepts two optional type generics. `TData` and `TResult`.\n\n```ts\nfunction merge<TData extends MergeableObject = MergeableObject, TResult extends MergeableObject = TData>(\n    source: TData,\n    target: TData,\n    ...targets: Array<TData>\n): TResult;\n```\n\n> [!IMPORTANT]  \n> The [`Merge`](https://github.com/sindresorhus/type-fest/blob/main/source/merge.d.ts) and [`MergeDeep`](https://github.com/sindresorhus/type-fest/blob/main/source/merge-deep.d.ts) types from [`type-fest`](https://github.com/sindresorhus/type-fest) are great additions to this library. It is not unreasonable to use those types for your merge typing needs.\n\nWithout explicitly passing in types the function will infer the shape of the object(s) passed in.\n\n-   Passing in `TData` will validate the shape of the objects passed in.\n-   Passing in `TResult` will override the output type. While this should be used sparingly, it provides a convenient approach for correctly typing partial types into complete types.\n\n### Simple Example w/o Generics\n\n```ts\ntype Data = {\n    name: string;\n    description: string;\n};\n\nconst base: Data = { name: \"object-deep-merge\", description: \"merge objects\" };\n\nconst overrides: Partial<Data> = { description: \"merge objects, deeply\" };\n\nconst merged = merge(base, overrides);\n\n// Type is inferred so the signature becomes:\n// function merge<Partial<Data>, Partial<Data>>(source: Partial<Data>, target: Partial<Data>, ...targets: Partial<Data>[]): Partial<Data>\n\n// TData    = Partial<Data>\n// TResult  = Data\n\nconsole.log({ merged });\n```\n\n<details><summary>Output</summary>\n\n```json\n{\n    \"merged\": {\n        \"name\": \"object-deep-merge\",\n        \"description\": \"merge objects, deeply\"\n    }\n}\n```\n\n</details>\n\n### Simple Example w/ `TData` Generic\n\n> [!NOTE]\n> Passing in TData will validate the shape of the objects passed in.\n\n```ts\ntype Data = {\n    name: string;\n    description: string;\n};\n\nconst base: Data = { name: \"object-deep-merge\", description: \"merge objects\" };\n\nconst overrides: Partial<Data> = { description: \"merge objects, deeply\" };\n\nconst merged: Partial<Data> = merge<Partial<Data>>(base, overrides);\n\n// TData    = Partial<Data>\n// TResult  = Data\n\nconsole.log({ merged });\n```\n\n<details><summary>Output</summary>\n\n```json\n{\n    \"merged\": {\n        \"name\": \"object-deep-merge\",\n        \"description\": \"merge objects, deeply\"\n    }\n}\n```\n\n</details>\n\n### Simple Example w/ `TData` and `TResult` Generics\n\n> [!NOTE]\n> Passing in `TResult` will override the output type. While this should be used sparingly, it provides a convenient approach for correctly typing partial types into complete types.\n\n```ts\ntype Data = {\n    name: string;\n    description: string;\n};\n\nconst base: Data = { name: \"object-deep-merge\", description: \"merge objects\" };\n\nconst overrides: Partial<Data> = { description: \"merge objects, deeply\" };\n\nconst merged: Data = merge<Partial<Data>, Data>(base, overrides);\n\n// TData    = Partial<Data>\n// TResult  = Data\n\nconsole.log({ merged });\n```\n\n<details><summary>Output</summary>\n\n```json\n{\n    \"merged\": {\n        \"name\": \"object-deep-merge\",\n        \"description\": \"merge objects, deeply\"\n    }\n}\n```\n\n</details>\n","_attachments":{},"homepage":"https://github.com/forcir/object-deep-merge","bugs":{"url":"https://github.com/forcir/object-deep-merge/issues"},"license":"MIT"}