@microstates/union

0.1.0 • Public • Published

@microstates/union

Crisply represent state machines using union types.

import Union from '@microstates/union';

const Task = Union({
  Pending: Task => class extends Task {
    resolve(result) {
      return this.toResolved(result);
    }
    reject(error) {
      return this.toRejected(error);
    }
  },
  Resolved: Task => class extends Task {},
  Rejected: Task => class extends Task {}
});

let pending = Task.Pending.create();
pending instanceof Task //=> true
pending instanceof Task.Pending //=> true
pending.isPending //=> true
pending.isResolved //=> false
pending.isRejected //=> false;


let resolved = pending.resolve('here is some data');
resolved instanceof Task //=> true
resolved instanceof Task.Resolved //=> true
resolved.isPending //=> false
resolved.isResolved //=> true
resolved.isRejected //=> false


let rejected = pending.reject(new Error('something not good happened'));
resolved instanceof Task //=> true
resolved instanceof Task.Rejected //=> true
resolved.isPending //=> false
resolved.isResolved //=> false
resolved.isRejected //=> true

Readme

Keywords

none

Package Sidebar

Install

npm i @microstates/union

Weekly Downloads

0

Version

0.1.0

License

MIT

Unpacked Size

33.2 kB

Total Files

17

Last publish

Collaborators

  • frontsidejack