Skip to content

Deep fast clone JavaScript objects with circular references handling and TypeScript support

License

Notifications You must be signed in to change notification settings

ichernetskii/deeply-clone

Repository files navigation

GitHub package.json version npm bundle size GitHub Workflow Status Testspace pass ratio Coverage Status GitHub license

Deep fast clone JavaScript objects with circular references handling and TypeScript support

Installation

# Install with npm
npm install deeply-clone
# Install with yarn
yarn add deeply-clone

Usage

Once the package is installed, you can import the library using import or require approach:

import { deeplyClone } from "deeply-clone";

or

const deeplyClone = require("deeply-clone");

Features

  • Clones deeply objects
  • Supports Object, Array, Map or Set cloning
  • Objects can have any circular references
  • Fast algorithm with caching
  • Strongly typed merged result with TypeScript
  • No dependencies
  • Small size
  • Works in browser and Node.js

Examples

Objects

const book = {
    title: "Harry Potter",
    price: {
        value: 69,
        currency: "USD"
    }
};

const bookCopy = deeplyClone(book);
console.log(bookCopy === book); // false

//  const bookCopy = {
//    title: "Harry Potter",
//    price: {
//      value: 69,
//      currency: "USD"
//    }
//  };

Circular references

const book = {
    title: "Harry Potter",
    price: 49,
    author: {
        name: "Joanne Rowling",
        books: [] // → [book]
    }
};
book.author.books.push(book); // add circular reference

const bookCopy = deeplyClone(book);
console.log(bookCopy === book); // false
console.log(bookCopy.author.books[0] === bookCopy); // true

//  const bookCopy = {
//    title: "Harry Potter",
//    price: 49,
//    author: {
//      name: "Joanne Rowling",
//      books: [bookCopy] // circular reference → [bookCopy]
//    }
//  };