UNPKG

json-joy

Version:

Collection of libraries for building collaborative editing apps.

109 lines (108 loc) 3.67 kB
import * as operations from './operations'; import { type ITimestampStruct } from './clock'; import type { Printable } from 'tree-dump/lib/types'; /** * A union type of all possible JSON CRDT patch operations. */ export type JsonCrdtPatchOperation = operations.NewConOp | operations.NewValOp | operations.NewVecOp | operations.NewObjOp | operations.NewStrOp | operations.NewBinOp | operations.NewArrOp | operations.InsValOp | operations.InsObjOp | operations.InsVecOp | operations.InsStrOp | operations.InsBinOp | operations.InsArrOp | operations.DelOp | operations.NopOp; /** * Represents a JSON CRDT patch. * * Normally, you would create a new patch using the {@link PatchBuilder} class. * * ```ts * import {Patch, PatchBuilder, LogicalClock} from 'json-joy/lib/json-crdt-patch'; * * const clock = new LogicalClock(3, 100); * const builder = new PatchBuilder(clock); * const patch = builder.flush(); * ``` * * Save patch to a binary representation: * * ```ts * const binary = patch.toBinary(); * ``` * * Load patch from a binary representation: * * ```ts * const patch = Patch.fromBinary(binary); * ``` * * @category Patch */ export declare class Patch implements Printable { /** * Un-marshals a JSON CRDT patch from a binary representation. */ static fromBinary(data: Uint8Array): Patch; /** * A list of operations in the patch. */ ops: JsonCrdtPatchOperation[]; /** * Arbitrary metadata associated with the patch, which is not used by the * library. */ meta: unknown; /** * Returns the patch ID, which is equal to the ID of the first operation * in the patch. * * @returns The ID of the first operation in the patch. */ getId(): ITimestampStruct | undefined; /** * Returns the total time span of the patch, which is the sum of all * operation spans. * * @returns The length of the patch. */ span(): number; /** * Returns the expected time of the next inserted operation. */ nextTime(): number; /** * Creates a new patch where all timestamps are transformed using the * provided function. * * @param ts Timestamp transformation function. * @returns A new patch with transformed timestamps. */ rewriteTime(ts: (id: ITimestampStruct) => ITimestampStruct): Patch; /** * The `.rebase()` operation is meant to be applied to patches which have not * yet been advertised to the server (other peers), or when * the server clock is used and concurrent change on the server happened. * * The .rebase() operation returns a new `Patch` with the IDs recalculated * such that the first operation has the `time` equal to `newTime`. * * @param newTime Time where the patch ID should begin (ID of the first operation). * @param transformAfter Time after (and including) which the IDs should be * transformed. If not specified, equals to the time of the first operation. */ rebase(newTime: number, transformAfter?: number): Patch; /** * Creates a deep clone of the patch. * * @returns A deep clone of the patch. */ clone(): Patch; /** * Marshals the patch into a binary representation. * * @returns A binary representation of the patch. */ toBinary(): Uint8Array<ArrayBufferLike>; /** * Returns a textual human-readable representation of the patch. This can be * used for debugging purposes. * * @param tab Start string for each line. * @returns Text representation of the patch. */ toString(tab?: string): string; }