Important: This documentation covers Yarn 1 (Classic).
For Yarn 2+ docs and migration guide, see yarnpkg.com.

Package detail

@susisu/tesseract

susisu1MIT0.1.0TypeScript support: included

session and transaction

readme

@susisu/tesseract

Build Status

npm i @susisu/tesseract
# or
yarn add @susisu/tesseract

Usage

Database

Manipulating database with transaction.

import { AsyncSession } from "@susisu/tesseract";

const session = new AsyncSession({
  async initialize() {
    await begin();
  },
  async finalize() {
    await commit();
  },
  async handleError() {
    await rollback();
  },
});

await session.transact(async () => {
  await updateA(session);
  await updateB(session);
});

async function updateA(session: AsyncSession): Promise<void> {
  await session.transact(async () => {
    await updateA0(session);
    await updateA1(session);
  });
}

Editor

Executing multiple edit operations while pushing at most one history to the undo buffer.

import { Session } from "@susisu/tesseract";

const session = new Session<State>({
  initialize() {
    return dumpState();
  },
  finalize(oldState: State) {
    const newState = dumpState();
    if (!newState.equals(oldState)) {
      pushHistory(oldState);
    }
  },
});

session.transact(() => {
  editA(session);
  editB(session);
});

Emitter

Updating a state multiple times while emitting at most one update event.

import { Session } from "@susisu/tesseract";

const session = new Session<State>({
  initialize() {
    return dumpState();
  },
  finalize(oldState: State) {
    const newState = dumpState();
    if (!newState.equals(oldState)) {
      emitUpdate();
    }
  },
});

session.transact(() => {
  updateA(session);
  updateB(session);
});

License

MIT License

Author

Susisu (GitHub, Twitter)

changelog

0.1.0 (2019-12-01)

  • First release