Skip to content

sanity-io/mendoza-js

Folders and files

NameName
Last commit message
Last commit date
Dec 4, 2024
Dec 4, 2024
Aug 4, 2023
Aug 4, 2023
Aug 4, 2023
Aug 4, 2023
Aug 4, 2023
Dec 4, 2024
Jan 25, 2024
Apr 16, 2024
Dec 4, 2024
Aug 4, 2023
Dec 4, 2024
Aug 4, 2023
Dec 4, 2024
Dec 4, 2024
Jan 25, 2024

Repository files navigation

mendoza-js

npm stat npm version gzip size size

Mendoza decoder in TypeScript.

Installation

npm install mendoza

or

pnpm install mendoza

or

yarn add mendoza

Usage

Basic example:

import {applyPatch} from "mendoza"

let left = {};
let patch = [];
let right = applyPatch(left, patch);

Incremental patcher:

import {incremental} from "mendoza"

const {Value, rebaseValue, wrap, unwrap, getType, applyPatch} = incremental

// Create an empty initial version:
const ROOT = wrap(null, null);

// Input of patches:
let patches = [];

// `origin` can be whatever you want to identify where a change comes from:
let origin = 0;

// Reference to the latest version:
let value = ROOT;

// Rebasing is for maintaing history across deleted versions:
let rebaseTarget;

for (let patch of patches) {
  // Apply the patch:
  let newValue = applyPatch(value, patch, origin);

  // Rebase if needed:
  if (rebaseTarget) {
    newValue = rebaseValue(rebaseTarget, newValue);
  }

  // If the document was deleted, store the previous version so we can rebase:
  if (getType(newValue) === "null") {
    rebaseTarget = value;
  } else {
    rebaseTarget = null;
  }

  value = newValue;
  origin++;
}

// Return the final full object:
console.log(unwrap(value));

License

MIT © Sanity.io

Release new version

Run the "CI & Release" workflow. Make sure to select the main branch and check "Release new version".

Semantic release will only release on configured branches, so it is safe to run release on any branch.