Skip to content

Latest commit

 

History

History
97 lines (69 loc) · 2.02 KB

README.md

File metadata and controls

97 lines (69 loc) · 2.02 KB

scto

Strings Comparing To Operations (OT model)

Build Status img

This package is similar to jsdiff, but generates OT-friendly operations. Can be useful for comparing strings in OT or CRDT data-transfer model. x30 faster then diff-match-patch and x625 faster than jsdiff in strings comparision!

image

Install

yarn add scto

Example

Text compare:

import { stringDiffToOps, applyOps } from 'scto'

const origin = 'Yet so far hath discretion fought'
const modifyed = 'Yet get far discretion fought!'

const operations = stringDiffToOps(origin, modifyed)

/*
  operations [
    { type: 'replace', offset: 4, data: 'get', shift: 2 },
    { type: 'drop', offset: 12, shift: 5 },
    { type: 'insert', offset: 29, data: '!' }
  ] 
*/

const applyed = applyOps(origin, operations) // Yet get far discretion fought!

console.log(applyed === modifyed) // true

Array compare:

import { collateDiffToOps, applyOps } from 'scto'

const origin = ['foo', 'bar', 'baz']
const modifyed = ['abc', 'foo', 'baz']

const operations = collateDiffToOps(origin, modifyed)

/*
  operations [
    { type: 'insert', offset: 0, data: ['abc'] },
    { type: 'drop', offset: 2, shift: 1 }
  ] 
*/

const applyed = applyOps(origin, operations)

/* ['abc', 'foo', 'baz'] */

Possible operations:

Replace:

export interface Replace {
  type: 'replace'
  offset: number
  shift: number
  data: Collate
}

Drop:

export interface Drop {
  type: 'drop'
  offset: number
  shift: number
}

Insert:

export interface Insert {
  type: 'insert'
  offset: number
  data: Collate
}