Strings Comparing To Operations (OT model)
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!
yarn add scto
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'] */
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
}