export abstract class Change { abstract readonly type : string ; } export enum EdgeBehaviour { preserve , modify } export enum AdjacentBoundaryBehaviour { default , modify , preserveLeading , preserve , preserveTrailing , preserveBoth } export class Deletion extends Change { readonly type = "deletion" ; constructor ( readonly start , readonly end , readonly behaviourLeading = EdgeBehaviour . preserve , readonly behaviourTrailing = EdgeBehaviour . modify ) { super ( ) ; } } export class Insertion extends Change { readonly type = "insertion" ; constructor ( readonly start , readonly text , readonly behaviourLeading = EdgeBehaviour . preserve , readonly behaviourTrailing = EdgeBehaviour . modify ) { super ( ) ; } }