An open API service indexing awesome lists of open source software.

https://github.com/john-james-gh/tiny-deep-merge

A tiny utility to deeply merge multiple plain objects. Arrays are overwritten. Zero dependencies.
https://github.com/john-james-gh/tiny-deep-merge

cjs deep-merge esm lite merge minimal object tiny typescript utility

Last synced: about 1 year ago
JSON representation

A tiny utility to deeply merge multiple plain objects. Arrays are overwritten. Zero dependencies.

Awesome Lists containing this project

README

          

# tiny-deep-merge

> A utility to deeply merge multiple plain objects.
> Arrays are overwritten (not concatenated).
> No options, no magic โ€” deterministic merges.

---

## ๐Ÿš€ Why use this?

- Deep merge of nested plain objects
- Merges any number of inputs
- Arrays and primitives are **overwritten** by default
- Zero dependencies (404 B minified and gzipped, compared to 723 B for `deepmerge`)
- Fully type-safe (TypeScript inference preserved)
- Does **not** mutate source objects

---

## ๐Ÿ“ฆ Installation

```bash
npm install tiny-deep-merge
# or
pnpm add tiny-deep-merge
# or
yarn add tiny-deep-merge
```

## ๐Ÿงช Usage

```javascript
// ES Module
import { merge } from "tiny-deep-merge"

// CommonJS
const { merge } = require("tiny-deep-merge")

const a = { user: { name: "Jess", age: 25 } }
const b = { user: { age: 31, active: true } }

const result = merge(a, b)
// => { user: { name: "Jess", age: 31, active: true } }
```

## โœ… Multi-object merge

```javascript
merge({ a: 1 }, { b: 2 }, { c: { nested: true } })
// => { a: 1, b: 2, c: { nested: true } }
```

## ๐Ÿงน Arrays are overwritten by default

```javascript
merge({ tags: ["a", "b"] }, { tags: ["c"] })
// => { tags: ["c"] }
```

## ๐Ÿ”’ Does not mutate source objects

```javascript
const a = { count: 1 }
const b = { count: 2 }

const result = merge(a, b)

console.log(a) // { count: 1 }
console.log(result) // { count: 2 }
```

## ๐Ÿง  Type Safety

```javascript
const merged = merge({ id: 1 }, { name: "Alice" }, { profile: { age: 25 } })

// merged: { id: number, name: string, profile: { age: number } }
```

## ๐Ÿคจ What this does not do

- No array concatenation โ€” arrays are overwritten.
- No merging of class instances, Maps, Sets, or Dates.
- No custom merge strategies.
- No runtime bloat.

---

## ๐Ÿ“„ License

MIT @ John James