1.0.1 • Published 5 years ago

simple-ot v1.0.1

Weekly downloads
-
License
MIT
Repository
github
Last release
5 years ago

simple-ot

Build Status codecov npm version

A simple operational transform library that uses the domain-agnostic GOTO control algorithm.

The implementation of the GOTO algorithm was written based on this paper.

This repository also contains an implementation of inclusion and exclusion transformation functions, for character-wise operations on plaintext documents, that can be used with the GOTO algorithm.

Install

yarn add simple-ot

or

npm install simple-ot --save

Example

import { charwise, OT } from './mod';
const {
  Delete,
  Insert,
  OperationType,
  deserialize,
  exclusionTransform,
  inclusionTransform,
  serialize,
} = charwise;
const id = /* some function that generates IDs that are unique across all sites (ex. uuid) */;

const siteID = 1;
// create the singleton OT object for this site
const ot = new OT(inclusionTransform, exclusionTransform, siteID);

const localInsert = new Insert('a', 0, id(), siteID, ot.history());

// local operations can just be pushed to ot.historyBuffer
ot.historyBuffer.push(localInsert);

// ... and then sent to other sites
const serializedLocal = serialize(localInsert);
sendToOtherSites(serializedLocal);


// ... some time later we receive an operation from another site

const remoteSerialized = {
  historyBuffer: [] as number[],
  id: 1,
  position: 1,
  siteID: 0,
  type: OperationType.DELETE,
};
const remoteDelete = deserialize(remoteSerialized);

// operations received from other sites need to be transformed before they
// can be applied at this site
const transformed = ot.goto(remoteDelete);

// now its safe to apply the operation and push it to ot.historyBuffer
applyOperation(transformed);
ot.historyBuffer.push(transformed);

API

For the high-level, domain-agnostic control alogrithm see control.ts.

For the implementation of character-wise inclusion and exclusion transformation functions see charwise.ts.

1.0.1

5 years ago

1.0.0

5 years ago