Skip to content

Andy-d-g/json-patch-rfc

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

3 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

json-patch-rfc

⚠️ Forked from fast-json-patch

Tiny, fast utilities fully compatible with RFC 6902 (JSON Patch).

  • compare — compute a patch between beforeafter
  • revertOperations — generate inverse ops for rollback
  • applyOperations — apply a patch (immutable by default)
  • Works in Node and the browser. TypeScript-ready.
  • ESM-only; CJS is not supported.

Commands

# install
pnpm install 

# build
pnpm build

# test
pnpm test

How to use

compare(from: Doc, dest: Doc): Operation[]

Generates a patch that transforms the document from into the document dest.

import { compare } from "json-patch-rfc";

const from = { theme: "light", tags: ["dev"] };
const dest = { theme: "dark", tags: ["dev", "ai"] };

const ops = compare(from, dest);
/*
[
  { op: "replace", path: "/theme", value: "dark" },
  { op: "add", path: "/tags/1", value: "ai" }
]
*/

revertOperations<T extends Doc>(doc: T, ops: Operation[]): Operation[][]

Creates inverse operations for each operation in a patch. Useful to roll back changes step-by-step.

import { revertOperations, applyOperations } from "json-patch-rfc";

const doc = { counter: 0 };
const ops = [
    { op: "replace", path: "/counter", value: 1 }
];

const reverted = revertOperations(doc, ops);
/* 
[
    [{ op: "replace", path: "/counter", value: 0 }]
]
*/

const updated = applyOperations(doc, ops);
const rolledBack = applyOperations(updated, reverted.flat());
// rolledBack = { counter: 0 }

applyOperations<T>(doc: Doc, operations: ReadonlyArray<Operation>, opts?: { mutate?: boolean }): T

Applies a sequence of operations to a document.

  • By default: immutable (returns a new doc).
  • With { mutate: true }: modifies in place.
import { applyOperations } from "json-patch-rfc";

const original = { name: "Ada" };
const ops = [{ op: "replace", path: "/name", value: "Ada Lovelace" }];

const updated = applyOperations(original, ops);
// updated = { name: "Ada Lovelace" }
// original remains unchanged

Todo

  • Need to publish it on NPM package

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published