0.0.247-alpha • Published 2 years ago

xjog v0.0.247-alpha

Weekly downloads
-
License
MIT
Repository
github
Last release
2 years ago

ALPHA NOTICE

This library is in the alpha phase. The programming interface and the feature set are still changing! The database structure will evolve and future versions may not be able to migrate data from alpha versions. The documentation and test coverage are being improved.

XJog

XJog is a specialized XState statechart runner.

It is made specifically for running long-living, persisted charts. This makes it suitable for driving business processes that can take considerable time to execute. A real-life example is a customer process starting from the cart, going through checkout and managing the delivery of the goods.

The main features:

  • Statechart persistence into a database
  • Automatic recovery after shutdown
  • Optional delta database for tracking changes and traveling in time
  • Comprehensive debug tracing on all classes

On roadmap:

  • Delta listening
  • External identifiers
  • Chart migration
  • Input buffering with back-off
  • Spawn using XState's spawn actions
  • Broadcasting actions

Database adapters

  • SQLite

    Fast and easy, suitable for initial development. No delta capability. Not recommended for NFS because the file system level locking may not work reliably.

  • PostgreSQL

    Robust and suitable for production. Support for deltas and listening for changes on database level (external process can track changes).

Deltas

XJog accepts a persistence adapter for tracking deltas (differences in time). This can be helpful for operators to track the charts, as well as for developers to debug any problems with the charts.

The latest entry in the database will be the full chart, and the rest with the same identifier will contain only the differences, or deltas.

Usage

yarn add xstate xjog
import { createMachine } from 'xstate';
import { SQLitePersistenceAdapter, XJog } from 'xjog';

// Configure a regular xState chart
export const doorMachine = createMachine({
  id: 'door',
  initial: 'closed',
  states: {
    closed: {
      on: {
        open: 'open',
      },
    },
    open: {
      on: {
        close: 'closed',
      },
    },
  },
});

// Use default in-memory database
const persistence = await SQLitePersistenceAdapter.connect();

const xJog = new XJog(persistence);
const door = await xJog.registerMachine(doorMachine);

await xJog.start();

// Create a door
const frontDoor = await door.createChart();
frontDoor.subscribe((stateUpdate) => {
  console.log('Door is', stateUpdate.state.value);
});

await frontDoor.send('open');
await frontDoor.send('close');

// Stop everything
await xJog.kill();
0.0.245-alpha

2 years ago

0.0.244-alpha

2 years ago

0.0.247-alpha

2 years ago

0.0.238-alpha

2 years ago

0.0.241-alpha

2 years ago

0.0.240-alpha

2 years ago

0.0.239-alpha

2 years ago

0.0.246-alpha

2 years ago

0.0.237-alpha

2 years ago

0.0.242-alpha

2 years ago

0.0.243-alpha

2 years ago

0.0.217-alpha

2 years ago

0.0.159-alpha

2 years ago

0.0.222-alpha

2 years ago

0.0.187-alpha

2 years ago

0.0.193-alpha

2 years ago

0.0.163-alpha

2 years ago

0.0.218-alpha

2 years ago

0.0.186-alpha

2 years ago

0.0.221-alpha

2 years ago

0.0.192-alpha

2 years ago

0.0.157-alpha

2 years ago

0.0.215-alpha

2 years ago

0.0.191-alpha

2 years ago

0.0.171-alpha

2 years ago

0.0.161-alpha

2 years ago

0.0.194-alpha

2 years ago

0.0.164-alpha

2 years ago

0.0.184-alpha

2 years ago

0.0.214-alpha

2 years ago

0.0.167-alpha

2 years ago

0.0.225-alpha

2 years ago

0.0.195-alpha

2 years ago

0.0.155-alpha

2 years ago

0.0.183-alpha

2 years ago

0.0.196-alpha

2 years ago

0.0.156-alpha

2 years ago

0.0.189-alpha

2 years ago

0.0.201-alpha

2 years ago

0.0.182-alpha

2 years ago

0.0.162-alpha

2 years ago

0.0.219-alpha

2 years ago

0.0.220-alpha

2 years ago

0.0.200-alpha

2 years ago

0.0.233-alpha

2 years ago

0.0.188-alpha

2 years ago

0.0.190-alpha

2 years ago

0.0.170-alpha

2 years ago

0.0.168-alpha

2 years ago

0.0.213-alpha

2 years ago

0.0.226-alpha

2 years ago

0.0.206-alpha

2 years ago

0.0.181-alpha

2 years ago

0.0.175-alpha

2 years ago

0.0.205-alpha

2 years ago

0.0.210-alpha

2 years ago

0.0.153-alpha

2 years ago

0.0.228-alpha

2 years ago

0.0.176-alpha

2 years ago

0.0.234-alpha

2 years ago

0.0.211-alpha

2 years ago

0.0.169-alpha

2 years ago

0.0.199-alpha

2 years ago

0.0.227-alpha

2 years ago

0.0.207-alpha

2 years ago

0.0.212-alpha

2 years ago

0.0.204-alpha

2 years ago

0.0.232-alpha

2 years ago

0.0.197-alpha

2 years ago

0.0.177-alpha

2 years ago

0.0.235-alpha

2 years ago

0.0.154-alpha

2 years ago

0.0.174-alpha

2 years ago

0.0.202-alpha

2 years ago

0.0.172-alpha

2 years ago

0.0.230-alpha

2 years ago

0.0.209-alpha

2 years ago

0.0.160-alpha

2 years ago

0.0.173-alpha

2 years ago

0.0.208-alpha

2 years ago

0.0.166-alpha

2 years ago

0.0.231-alpha

2 years ago

0.0.179-alpha

2 years ago

0.0.224-alpha

2 years ago

0.0.185-alpha

2 years ago

0.0.165-alpha

2 years ago

0.0.178-alpha

2 years ago

0.0.198-alpha

2 years ago

0.0.180-alpha

2 years ago

0.0.223-alpha

2 years ago

0.0.203-alpha

2 years ago

0.0.158-alpha

2 years ago

0.0.229-alpha

2 years ago

0.0.236-alpha

2 years ago

0.0.216-alpha

2 years ago

0.0.124-alpha

2 years ago

0.0.119-alpha

2 years ago

0.0.152-alpha

2 years ago

0.0.135-alpha

2 years ago

0.0.112-alpha

2 years ago

0.0.140-alpha

2 years ago

0.0.107-alpha

2 years ago

0.0.113-alpha

2 years ago

0.0.123-alpha

2 years ago

0.0.106-alpha

2 years ago

0.0.146-alpha

2 years ago

0.0.136-alpha

2 years ago

0.0.137-alpha

2 years ago

0.0.134-alpha

2 years ago

0.0.129-alpha

2 years ago

0.0.109-alpha

2 years ago

0.0.149-alpha

2 years ago

0.0.114-alpha

2 years ago

0.0.117-alpha

2 years ago

0.0.151-alpha

2 years ago

0.0.141-alpha

2 years ago

0.0.131-alpha

2 years ago

0.0.111-alpha

2 years ago

0.0.121-alpha

2 years ago

0.0.144-alpha

2 years ago

0.0.132-alpha

2 years ago

0.0.139-alpha

2 years ago

0.0.115-alpha

2 years ago

0.0.120-alpha

2 years ago

0.0.127-alpha

2 years ago

0.0.143-alpha

2 years ago

0.0.133-alpha

2 years ago

0.0.116-alpha

2 years ago

0.0.126-alpha

2 years ago

0.0.142-alpha

2 years ago

0.0.122-alpha

2 years ago

0.0.129-alpha-02

2 years ago

0.0.129-alpha-01

2 years ago

0.0.125-alpha

2 years ago

0.0.130-alpha

2 years ago

0.0.110-alpha

2 years ago

0.0.150-alpha

2 years ago

0.0.145-alpha

2 years ago

0.0.148-alpha

2 years ago

0.0.138-alpha

2 years ago

0.0.108-alpha

2 years ago

0.0.128-alpha

2 years ago

0.0.118-alpha

2 years ago

0.0.80-alpha

2 years ago

0.0.75-alpha

2 years ago

0.0.40-alpha

2 years ago

0.0.58-alpha

2 years ago

0.0.47-alpha

2 years ago

0.0.100-alpha

2 years ago

0.0.91-alpha

2 years ago

0.0.63-alpha

2 years ago

0.0.98-alpha

2 years ago

0.0.99-alpha

2 years ago

0.0.69-alpha

2 years ago

0.0.59-alpha

2 years ago

0.0.46-alpha

2 years ago

0.0.86-alpha

2 years ago

0.0.76-alpha

2 years ago

0.0.52-alpha

2 years ago

0.0.62-alpha

2 years ago

0.0.36-alpha

2 years ago

0.0.92-alpha

2 years ago

0.0.90-alpha

2 years ago

0.0.50-alpha

2 years ago

0.0.45-alpha

2 years ago

0.0.65-alpha

2 years ago

0.0.48-alpha

2 years ago

0.0.85-alpha

2 years ago

0.0.70-alpha

2 years ago

0.0.93-alpha

2 years ago

0.0.88-alpha

2 years ago

0.0.68-alpha

2 years ago

0.0.73-alpha

2 years ago

0.0.53-alpha

2 years ago

0.0.101-alpha

2 years ago

0.0.55-alpha

2 years ago

0.0.38-alpha

2 years ago

0.0.60-alpha

2 years ago

0.0.104-alpha

2 years ago

0.0.95-alpha

2 years ago

0.0.43-alpha

2 years ago

0.0.78-alpha

2 years ago

0.0.83-alpha

2 years ago

0.0.89-alpha

2 years ago

0.0.49-alpha

2 years ago

0.0.103-alpha

2 years ago

0.0.39-alpha

2 years ago

0.0.96-alpha

2 years ago

0.0.66-alpha

2 years ago

0.0.72-alpha

2 years ago

0.0.42-alpha

2 years ago

0.0.82-alpha

2 years ago

0.0.79-alpha

2 years ago

0.0.37-alpha

2 years ago

0.0.105-alpha

2 years ago

0.0.102-alpha

2 years ago

0.0.94-alpha

2 years ago

0.0.74-alpha

2 years ago

0.0.81-alpha

2 years ago

0.0.71-alpha

2 years ago

0.0.84-alpha

2 years ago

0.0.61-alpha

2 years ago

0.0.51-alpha

2 years ago

0.0.41-alpha

2 years ago

0.0.97-alpha

2 years ago

0.0.77-alpha

2 years ago

0.0.57-alpha

2 years ago

0.0.67-alpha

2 years ago

0.0.87-alpha

2 years ago

0.0.80-aplha

2 years ago

0.0.64-alpha

2 years ago

0.0.54-alpha

2 years ago

0.0.44-alpha

2 years ago

0.0.35-alpha

2 years ago

0.0.30-alpha

2 years ago

0.0.32-alpha

2 years ago

0.0.28-alpha

2 years ago

0.0.33-alpha

2 years ago

0.0.29-alpha

2 years ago

0.0.31-alpha

2 years ago

0.0.34-alpha

2 years ago

0.0.4-alpha

2 years ago

0.0.15-alpha

2 years ago

0.0.10-alpha

2 years ago

0.0.9-alpha

2 years ago

0.0.20-alpha

2 years ago

0.0.18-alpha

2 years ago

0.0.22-alpha

2 years ago

0.0.12-alpha

2 years ago

0.0.27-alpha

2 years ago

0.0.17-alpha

2 years ago

0.0.13-alpha

2 years ago

0.0.23-alpha

2 years ago

0.0.7-alpha

2 years ago

0.0.25-alpha

2 years ago

0.0.19-alpha

2 years ago

0.0.11-alpha

2 years ago

0.0.14-alpha

2 years ago

0.0.5-alpha

2 years ago

0.0.21-alpha

2 years ago

0.0.6-alpha

2 years ago

0.0.26-alpha

2 years ago

0.0.24-alpha

2 years ago

0.0.16-alpha

2 years ago

0.0.8-alpha

2 years ago

0.0.3-alpha

2 years ago

0.0.2-alpha

2 years ago

0.0.1-alpha

2 years ago