Sync / foldkit-sync/entity

EditableEntity

namespace · packages/sync/src/entity.ts:218

const EditableEntity = { make }

Its type

type EditableEntity<
  E extends EntityFields,
  Ms extends ReadonlyArray<Member<E>>,
> = ReturnType<typeof make<E, Ms>>

Edits to an Entity's members, kept per cell in a replicated slice and laid over its rows.

Members

EditableEntity.make

function · packages/sync/src/entity.ts:63

make<E extends EntityFields, const Ms extends ReadonlyArray<Member<E>>>(
  entity: E,
  options: {
    readonly members: Ms
  },
): {
  entity: E
  members: Ms
  Member: Schema.Literals<Ms>
  Change: Schema.Codec<Change<E, M>, unknown, never, never>
  Edit: Schema.Codec<CellEdit<E, M>, unknown, never, never>
  edited: {
    changes: Schema.$Array<Schema.Codec<Change<E, M>, unknown, never, never>>
    at: Schema.optionalKey<Schema.Number>
    by: Schema.optionalKey<
      Schema.Struct<{
        readonly actor: Schema.String
        readonly replica: Schema.String
      }>
    >
  }
  absorbed: { through: Schema.Number }
  stamped: (commit: {
    readonly sequence: number
    readonly actorId: string
    readonly replicaId: string
  }) => { at: number; by: { actor: string; replica: string } }
  merge: (
    edits: ReadonlyArray<CellEdit<E, M>>,
    changes: ReadonlyArray<Change<E, M>>,
    at: Option.Option<number>,
    by: Option.Option<Author>,
  ) => ReadonlyArray<CellEdit<E, M>>
  absorb: (
    edits: ReadonlyArray<CellEdit<E, M>>,
    through: number,
  ) => ReadonlyArray<CellEdit<E, M>>
  holdsThrough: (
    edits: ReadonlyArray<CellEdit<E, M>>,
    through: number,
  ) => boolean
  replaced: (
    previous: ReadonlyArray<CellEdit<E, M>>,
    next: ReadonlyArray<CellEdit<E, M>>,
    replica: string,
  ) => ReadonlyArray<Replaced<CellEdit<E, M>>>
  cellsOf: (
    changes: ReadonlyArray<Change<E, M>>,
  ) => ReadonlyArray<{ readonly id: IdOf<E>; readonly member: M }>
  changeAt: (row: RowOf<E, M>, member: M) => Change<E, M>
  editOf: (
    edits: ReadonlyArray<CellEdit<E, M>>,
    row: IdOf<E>,
    member: M,
  ) => Option.Option<CellEdit<E, M>>
  mine: (edit: CellEdit<E, M>, replica: string) => boolean
}