json-joy
    Preparing search index...

    Class Model<N>

    In instance of Model class represents the underlying data structure, i.e. model, of the JSON CRDT document.

    Type Parameters

    Implements

    • Printable
    Index

    Constructors

    Properties

    Clock that keeps track of logical timestamps of the current editing session and logical clocks of all known peers.

    onbeforepatch?: (patch: Patch) => void = undefined

    Callback called before every applyPatch call.

    onbeforereset?: () => void = undefined

    Callback called before model isi reset using the .reset() method.

    onpatch?: (patch: Patch) => void = undefined

    Callback called after every applyPatch call.

    onreset?: () => void = undefined

    Callback called after model has been reset using the .reset() method.

    root: RootNode<N> = ...

    Root of the JSON document is implemented as Last Write Wins Register, so that the JSON document does not necessarily need to be an object. The JSON document can be any JSON value.

    sid: () => number = randomSessionId

    Generates a random session ID. Use this method to generate a session ID for a new user. Store the session ID in the user's browser or device once and reuse it for all editing sessions of that user.

    Generating a new session ID for each editing session will work, however, that is not recommended. If a user generates a new session ID for each editing session, the session clock table will grow indefinitely.

    Type declaration

      • (): number
      • Generates a random session ID up to 53 bits in size, skips first 0xFFFF values, keeping them reserved for future extensions.

        Returns number

        Random session ID.

    Accessors

    • get $(): JsonNodeToProxyPathNode<N>

      Experimental strictly typed node retrieval API using proxy objects. Automatically resolves nested "val" nodes.

      Returns JsonNodeToProxyPathNode<N>

    • get s(): JsonNodeToProxyNode<N>

      Experimental node retrieval API using proxy objects. Returns a strictly typed proxy wrapper around the value of the root node.

      Returns JsonNodeToProxyNode<N>

    Methods

    • Works like applyPatch, but is intended to be used by the local client for locally generated patches. It checks if the model clock is ahead of the patch clock and rebases the patch if necessary.

      Parameters

      • patch: Patch

        A patch to apply to the document.

      Returns void

    • Applies a single patch to the document. All mutations to the model must go through this method. (With the only exception of local changes through API, which have an alternative path.)

      Parameters

      • patch: Patch

        A patch to apply to the document.

      Returns void

    • Creates a copy of this model with a new session ID. If the session ID is not provided, a random session ID is generated.

      Parameters

      • sessionId: number = ...

        Session ID to use for the new model.

      Returns Model<N>

      A copy of this model with a new session ID.

    • Use this method to generate a random session ID for an existing document. It checks for the uniqueness of the session ID given the current peers in the document. This reduces the chance of collision substantially.

      Returns number

      A random session ID that is not used by any peer in the current document.

    • Strictly types the model and sets the default value of the model, if the document is empty.

      Type Parameters

      Parameters

      • schema: S

        The schema to set for this model.

      • useGlobalSession: boolean = true

      Returns Model<SchemaToJsonNode<S>>

      Strictly typed model.

    • Changes the session ID of the model. By modifying the attached clock vector of the model. Be careful when changing the session ID of the model, as this is an advanced operation.

      Use the Model.load method to load a model with the the right session ID, instead of changing the session ID of the model. When in doubt, use the Model.fork method to create a new model with the right session ID.

      Parameters

      • sid: number

        The new session ID to set for the model.

      Returns void

    • Serialize this model using "binary" structural encoding.

      Returns Uint8Array

      This model encoded in octets.

    • Create a new JSON CRDT model. If a schema is provided, the model is strictly typed and the default value of the model is set to the default value of the schema.

      By default, the model is created with a random session ID and is using a logical clock. It is also possible to create a model which uses a server clock by providing the session ID SESSION.SERVER (1).

      Create a basic model, without schema and default value:

      const model = Model.create();
      

      Create a strictly typed model with a schema and default value:

      const schema = s.obj({
      ticker: s.con<string>('BODEN'),
      name: s.str('Jeo Boden'),
      tags: s.arr(
      s.str('token'),
      ),
      });
      const model = Model.create(schema);
      const patch = model.api.flush();

      Create a model with a custom session ID for your logical clock:

      const schema = s.str('');
      const sid = 123456789;
      const model = Model.create(schema, sid);
      const patch = model.api.flush();

      The session ID must be at least 65,536 or higher, see JSON CRDT Patch specification.

      To create a model with a server clock, use the SESSION.SERVER, which is equal to 1:

      const model = Model.create(undefined, SESSION.SERVER);
      // or
      const model = Model.create(undefined, 1);

      Finally, you can create a model with your clock vector:

      const clock = new ClockVector(123456789, 1);
      const model = Model.create(undefined, clock);

      Type Parameters

      • S extends unknown

      Parameters

      • Optionalschema: S

        The schema (typing and default value) to set for this model. When a schema is provided, the model is strictly typed and the default value of the model is set to the value of the schema. Also, you MUST call model.api.flush() immediately after creating the model to clear the change buffer of the patch that was created during the initialization of the model.

      • sidOrClock: number | ClockVector = ...

        Session ID to use for local operations. Defaults to a random session ID generated by Model.sid.

      Returns Model<Node>

      A strictly typed model.

    • Decodes a model from a "binary" structural encoding.

      Use Model.load instead, if you want to set the session ID of the model and the right schema for the model, during the de-serialization.

      Type Parameters

      Parameters

      • data: Uint8Array

        Binary blob of a model encoded using "binary" structural encoding.

      Returns Model<N>

      An instance of a model.

    • Instantiates a model from a collection of patches. The patches are applied to the model in the order they are provided. The session ID of the model is set to the session ID of the first patch.

      Parameters

      • patches: Patch[]

        A collection of initial patches to apply to the model.

      Returns Model

      A model with the patches applied.

    • Un-serializes a model from "binary" structural encoding. The session ID of the model is set to the provided session ID sid, or the default session ID of the un-serialized model is used.

      Type Parameters

      Parameters

      • data: Uint8Array

        Binary blob of a model encoded using "binary" structural encoding.

      • Optionalsid: number

        Session ID to set for the model.

      • Optionalschema: S

      Returns Model<SchemaToJsonNode<S>>

      An instance of a model.

    • Create a CRDT model which uses server clock. In this model a central server timestamps each operation with a sequence number. Each timestamp consists simply of a sequence number, which was assigned by a server. In this model all operations are approved, persisted and re-distributed to all clients by a central server. The session ID part of the clock is the same for all clients, i.e. SESSION.SERVER.

      Type Parameters

      Parameters

      • Optionalschema: S
      • time: number = 1

        Latest known server sequence number.

      Returns Model<Node>

      CRDT model.