1.2.4 • Published 9 years ago

kristi v1.2.4

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

Literate programming NPM version

Kristi

Kristi is an asynchronous finite state machine engine. It allows you to describe a program (or part of it) using an automata-based approach.

In addition, this is my first experiment with literate programming (with help of a literate-programming-lib).

Kristi is inspired by Machina.js library.

Usage

Import

Users of npm can use npm install kristi. In other case, use gulp build-min to get minified UMD-compatible build.

FSM Construction

import { Automaton, EVENTS } from 'kristi';

let fsm = new Automaton({
	'login-screen-is-shown': {
		transitions: {
			'user-authenticated'           : 'todo-screen-is-shown',
			'password-recovery-requested'  : 'password-recovery-screen-is-shown',
		},
		coming() {
			let fsm = this; // Automaton instance is set as `this` in `coming` and `leaving`;

			// AJAX requests for screen template, etc...
			return new Promise((resolve) => {
				$('#btn-recover-passw').click(() => {
					fsm.processEvent('password-recovery-requested');
				});

				resolve();
			});
		},

		leaving() {
			// Some clean-up
		}
	},

	'todo-screen-is-shown' : {
		...
	},

	...
});

fsm.startWith('login-screen-is-shown');

The "best practice" is to move transition functions out of fsm-schema definition:

let fsm = new Automaton({
	'login-screen-is-shown': {
		transitions: {
			'user-authenticated'           : 'todo-screen-is-shown',
			'password-recovery-requested'  : 'password-recovery-screen-is-show',
		},
		coming:  showLoginScreen,
		leaving: hideLoginScreen
	}
	...
});

Events

Kristi provides simple on/off interface, so you can subscribe to some events from fsm instance.

fsm.on(EVENTS.TRANSITION, ({from, to}) => {...});

fsm.on(EVENTS.PROCESSING, ({state, event}) => {...});

TODO: add full Event API description.

API

The full API description could be found here.

License

MIT-LICENSE

1.2.4

9 years ago

1.2.3

9 years ago

1.2.2

9 years ago

0.2.2

9 years ago

0.1.2

9 years ago

0.1.1

9 years ago

0.1.0

9 years ago