0.0.5 • Published 1 year ago

@chanim/js-fsm v0.0.5

Weekly downloads
-
License
ISC
Repository
github
Last release
1 year ago

js-fsm

fsm library for javascript.

Installation

npm install @chanim/js-fsm

Example

diagram

import FSM from '@chanim/js-fsm';

const fsm = new FSM([
  {
    status: 'IDLE',
    from: ['STATUS_2'],
    to: ['STATUS_1', 'STATUS_2'],
    isFirst: true,
  },
  {
    status: 'STATUS_1',
    from: ['IDLE'],
    to: ['STATUS_2'],
  },
  {
    status: 'STATUS_2',
    from: ['STATUS_1', 'IDLE'],
    to: ['IDLE'],
  },
]);

console.log(fsm.configure);
/*
{
  IDLE: {
    from: [ 'STATUS_2' ],
    to: [ 'STATUS_1', 'STATUS_2' ],
    isFirst: true
  },
  STATUS_1: { from: [ 'IDLE' ], to: [ 'STATUS_2' ] },
  STATUS_2: { from: [ 'STATUS_1', 'IDLE' ], to: [ 'IDLE' ] }
}
*/

fsm.to('STATUS_1');
console.log(fsm.previousStatus, '->', fsm.currentStatus); // IDLE -> STATUS_1
fsm.to('STATUS_2');
console.log(fsm.previousStatus, '->', fsm.currentStatus); // STATUS_1 -> STATUS_2
fsm.to('IDLE');
console.log(fsm.previousStatus, '->', fsm.currentStatus); // STATUS_2 -> IDLE
fsm.to('STATUS_2');
console.log(fsm.previousStatus, '->', fsm.currentStatus); // IDLE -> STATUS_2

fsm.to('STATUS_1'); // Error: Cannot change status from 'STATUS_2' to 'STATUS_1'.

fsm.reset();
console.log(fsm.previousStatus, '->', fsm.currentStatus); // null -> IDLE

Usage

FSM

class for making fsm instance.

parameter

Array of configure data.

If isFirst is true, the first status of fsm will be setting as that status. (* isFirst must given at least by one.) |key|value type|required|default|example| |---|---|---|---|---| |status|string|o|x|'IDLE'| |from|string[]|o|x|['STATUS_2']| |to|string[]|o|x|['IDLE', 'STATUS_1']| |isFirst|boolean|x|false|true|

ConfigureData {
  status: string;
  from: string[];
  to: string[];
  isFirst: boolean;
}

to

method for changing status to next status.

parameter

STATUS

fsm.to('STATUS_1');

reset

method for reset status.

  • previousStatus to be null.
  • currentStatus to be firstStatus.
fsm.reset();

configure

variable for fsm configure.

console.log(fsm.configure);
/*
{
  IDLE: {
    from: [ 'STATUS_2' ],
    to: [ 'STATUS_1', 'STATUS_2' ],
    isFirst: true
  },
  STATUS_1: { from: [ 'IDLE' ], to: [ 'STATUS_2' ] },
  STATUS_2: { from: [ 'STATUS_1', 'IDLE' ], to: [ 'IDLE' ] }
}
*/

previousStatus

variable for previous status.

console.log(fsm.previousStatus); // IDLE

currentStatus

variable for current status.

console.log(fsm.currentStatus); // STATUS_1
0.0.5

1 year ago

0.0.4

1 year ago

0.0.3

1 year ago

0.0.2

1 year ago

0.0.1

1 year ago