Skip to content

ottypes/docs spec is not supported correctly wrt (de)serialisation #214

Open
@gkubisa

Description

@gkubisa

Spec: https://github.com/ottypes/docs#standard-properties

First of all, according to the spec, initialData, snapshot and data may all be completely different data types in the following function specs create([initialData]) -> snapshot, serialize(snapshot) -> data, deserialize(data) -> snapshot. text-tp2 is an example of such a type. Please note also that create([initialData]) -> snapshot returns a non-serialized snapshot.

Secondly, apply(snapshot, op) -> snapshot' expects a non-serialized snapshot as the first parameter. Again, text-tp2 is an example of a type which relies on the first param being a non-serialized snapshot.

I found a number of problems in ShareDB related to the above:

  1. ShareDB applies an operation to initialData, instead of a snapshot, in tryCompose. I have already opened a PR with a fix.
  2. ShareDB passes a non-serialized snapshot to deserialize here.
  3. ShareDB uses createDeserialized, which is not in the spec and is not needed because the standard create already returns a non-serialized snapshot.
  4. ShareDB never calls serialize and relies on the OT types to define toJSON instead. This is not documented anywhere and violates the spec.
  5. ShareDB applies operations to serialized snapshots on the server-side because it does not deserialize the data coming from the database.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions