Options
All
  • Public
  • Public/Protected
  • All
Menu

Type Parameters

  • mDT

Hierarchy

  • Machine

Index

Constructors

Properties

Accessors

Methods

Constructors

Properties

_actions: Map<string, Map<string, number>>
_active_state_style: Partial<JssmStateDeclaration>
_after_mapping: Map<string, [string, number]>
_any_action_hook: HookHandler<mDT>
_any_transition_hook: HookHandler<mDT>
_arrange_declaration: string[][]
_arrange_end_declaration: string[][]
_arrange_start_declaration: string[][]
_clear_timeout_source: ((h: any) => void)

Type declaration

    • (h: any): void
    • Parameters

      • h: any

      Returns void

_code_allows_override: JssmAllowsOverride
_config_allows_override: JssmAllowsOverride
_create_started: number
_created: number
_data?: mDT
_default_properties: Map<string, any>
_dot_preamble: string
_edge_map: Map<string, Map<string, number>>
_edges: JssmTransition<string, mDT>[]
_end_state_style: Partial<JssmStateDeclaration>
_end_states: Set<string>
_entry_hooks: Map<string, HookHandler<mDT>>
_exit_hooks: Map<string, HookHandler<mDT>>
_flow: "up" | "right" | "down" | "left"
_forced_transition_hook: HookHandler<mDT>
_fsl_version?: string
_global_action_hooks: Map<string, HookHandler<mDT>>
_graph_layout: JssmLayout
_has_basic_hooks: boolean
_has_entry_hooks: boolean
_has_exit_hooks: boolean
_has_forced_transitions: boolean
_has_global_action_hooks: boolean
_has_hooks: boolean
_has_named_hooks: boolean
_has_post_basic_hooks: boolean
_has_post_entry_hooks: boolean
_has_post_exit_hooks: boolean
_has_post_global_action_hooks: boolean
_has_post_hooks: boolean
_has_post_named_hooks: boolean
_has_post_transition_hooks: boolean
_has_transition_hooks: boolean
_history: JssmHistory<mDT>
_history_length: number
_hooked_state_style: Partial<JssmStateDeclaration>
_hooks: Map<string, HookHandler<mDT>>
_instance_name: string
_machine_author?: string[]
_machine_comment?: string
_machine_contributor?: string[]
_machine_definition?: string
_machine_language?: string
_machine_license?: string
_machine_name?: string
_machine_version?: string
_main_transition_hook: HookHandler<mDT>
_named_hooks: Map<string, HookHandler<mDT>>
_named_transitions: Map<string, number>
_post_any_action_hook: HookHandler<mDT>
_post_any_transition_hook: HookHandler<mDT>
_post_entry_hooks: Map<string, HookHandler<mDT>>
_post_exit_hooks: Map<string, HookHandler<mDT>>
_post_forced_transition_hook: HookHandler<mDT>
_post_global_action_hooks: Map<string, HookHandler<mDT>>
_post_hooks: Map<string, HookHandler<mDT>>
_post_main_transition_hook: HookHandler<mDT>
_post_named_hooks: Map<string, HookHandler<mDT>>
_post_standard_transition_hook: HookHandler<mDT>
_property_keys: Set<string>
_raw_state_declaration?: <internal>.Object[]
_required_properties: Set<string>
_reverse_action_targets: Map<string, Map<string, number>>
_reverse_actions: Map<string, Map<string, number>>
_rng: JssmRng
_rng_seed: number
_standard_transition_hook: HookHandler<mDT>
_start_state_style: Partial<JssmStateDeclaration>
_start_states: Set<string>
_state: string
_state_declarations: Map<string, JssmStateDeclaration>
_state_labels: Map<string, string>
_state_properties: Map<string, any>
_states: Map<string, JssmGenericState>
_terminal_state_style: Partial<JssmStateDeclaration>
_themes: ("default" | "modern" | "ocean" | "bold" | "plain")[]
_time_source: (() => number)

Type declaration

    • (): number
    • Returns number

_timeout_handle: number
_timeout_source: ((Function: any, number: any) => number)

Type declaration

    • (Function: any, number: any): number
    • Parameters

      • Function: any
      • number: any

      Returns number

_timeout_target: string
_timeout_target_time: number

Accessors

  • Get the style for the active state. Does not include composition from an applied theme, or things from the underlying base stylesheet; only the modifications applied by this machine.

    const light = sm`a -> b;`;
    console.log(light.active_state_style);
    // {}

    const light = sm`a -> b; active_state: { shape: circle; };`;
    console.log(light.active_state_style);
    // { shape: 'circle' }

    Returns Partial<JssmStateDeclaration>

  • get create_start_time(): number
  • get creation_date(): Date
  • get creation_timestamp(): number
  • Get the end state style. Does not include composition from an applied theme, or things from the underlying base stylesheet; only the modifications applied by this machine.

    End states are defined in the directive end_states, and are distinct from terminal states. End states are voluntary successful endpoints for a process. Terminal states are states that cannot be exited. By example, most error states are terminal states, but not end states. Also, since some end states can be exited and are determined by hooks, such as recursive or iterative nodes, there is such a thing as an end state that is not a terminal state.

    const light = sm`a -> b;`;
    console.log(light.standard_state_style);
    // {}

    const light = sm`a -> b; end_state: { shape: circle; };`;
    console.log(light.standard_state_style);
    // { shape: 'circle' }

    Returns Partial<JssmStateDeclaration>

  • get history(): [string, mDT][]
  • Get a truncated history of the recent states and data of the machine. Turned off by default; configure with .from('...', {data: 5}) by length, or set .history_length at runtime.

    History does not contain the current state. If you want that, call .history_inclusive instead.

    const foo = jssm.from(
    "a 'next' -> b 'next' -> c 'next' -> d 'next' -> e;",
    { history: 3 }
    );

    foo.action('next');
    foo.action('next');
    foo.action('next');
    foo.action('next');

    foo.history; // [ ['b',undefined], ['c',undefined], ['d',undefined] ]

    Notice that the machine's current state, e, is not in the returned list.

    Returns [string, mDT][]

  • get history_inclusive(): [string, mDT][]
  • Get a truncated history of the recent states and data of the machine, including the current state. Turned off by default; configure with .from('...', {data: 5}) by length, or set .history_length at runtime.

    History inclusive contains the current state. If you only want past states, call .history instead.

    The list returned will be one longer than the history buffer kept, as the history buffer kept gets the current state added to it to produce this list.

    const foo = jssm.from(
    "a 'next' -> b 'next' -> c 'next' -> d 'next' -> e;",
    { history: 3 }
    );

    foo.action('next');
    foo.action('next');
    foo.action('next');
    foo.action('next');

    foo.history_inclusive; // [ ['b',undefined], ['c',undefined], ['d',undefined], ['e',undefined] ]

    Notice that the machine's current state, e, is in the returned list.

    Returns [string, mDT][]

  • get history_length(): number
  • set history_length(to: number): void
  • Find out how long a history this machine is keeping. Defaults to zero. Settable directly.

    const foo = jssm.from("a -> b;");
    foo.history_length; // 0

    const bar = jssm.from("a -> b;", { history: 3 });
    foo.history_length; // 3
    foo.history_length = 5;
    foo.history_length; // 5

    Returns number

  • Find out how long a history this machine is keeping. Defaults to zero. Settable directly.

    const foo = jssm.from("a -> b;");
    foo.history_length; // 0

    const bar = jssm.from("a -> b;", { history: 3 });
    foo.history_length; // 3
    foo.history_length = 5;
    foo.history_length; // 5

    Parameters

    • to: number

    Returns void

  • Get the hooked state style. Does not include composition from an applied theme, or things from the underlying base stylesheet; only the modifications applied by this machine.

    The hooked style is only applied to nodes which have a named hook in the graph. Open hooks set through the external API aren't graphed, because that would be literally every node.

    const light = sm`a -> b;`;
    console.log(light.hooked_state_style);
    // {}

    const light = sm`a -> b; hooked_state: { shape: circle; };`;
    console.log(light.hooked_state_style);
    // { shape: 'circle' }

    Returns Partial<JssmStateDeclaration>

  • get rng_seed(): number
  • set rng_seed(to: number): void
  • Get the standard style for a single state. Does not include composition from an applied theme, or things from the underlying base stylesheet; only the modifications applied by this machine.

    const light = sm`a -> b;`;
    console.log(light.standard_state_style);
    // {}

    const light = sm`a -> b; state: { shape: circle; };`;
    console.log(light.standard_state_style);
    // { shape: 'circle' }

    Returns Partial<JssmStateDeclaration>

  • Get the start state style. Does not include composition from an applied theme, or things from the underlying base stylesheet; only the modifications applied by this machine.

    Start states are defined by the directive start_states, or in absentia, are the first mentioned state.

    const light = sm`a -> b;`;
    console.log(light.start_state_style);
    // {}

    const light = sm`a -> b; start_state: { shape: circle; };`;
    console.log(light.start_state_style);
    // { shape: 'circle' }

    Returns Partial<JssmStateDeclaration>

  • Get the terminal state style. Does not include composition from an applied theme, or things from the underlying base stylesheet; only the modifications applied by this machine.

    Terminal state styles are automatically determined by the machine. Any state without a valid exit transition is terminal.

    const light = sm`a -> b;`;
    console.log(light.terminal_state_style);
    // {}

    const light = sm`a -> b; terminal_state: { shape: circle; };`;
    console.log(light.terminal_state_style);
    // { shape: 'circle' }

    Returns Partial<JssmStateDeclaration>

  • get themes(): "default" | "modern" | "ocean" | "bold" | "plain" | ("default" | "modern" | "ocean" | "bold" | "plain")[]
  • set themes(to: "default" | "modern" | "ocean" | "bold" | "plain" | ("default" | "modern" | "ocean" | "bold" | "plain")[]): void
  • Returns "default" | "modern" | "ocean" | "bold" | "plain" | ("default" | "modern" | "ocean" | "bold" | "plain")[]

  • Parameters

    • to: "default" | "modern" | "ocean" | "bold" | "plain" | ("default" | "modern" | "ocean" | "bold" | "plain")[]

    Returns void

  • get uses_actions(): boolean
  • get uses_forced_transitions(): boolean

Methods

  • action(actionName: string, newData?: mDT): boolean
  • Instruct the machine to complete an action. Synonym for do.

    const light = sm`red 'next' -> green 'next' -> yellow 'next' -> red; [red yellow green] 'shutdown' ~> off 'start' -> red;`;

    light.state(); // 'red'
    light.action('next'); // true
    light.state(); // 'green'

    Parameters

    • actionName: string

      The action to engage

    • Optional newData: mDT

      The data change to insert during the action

    Returns boolean

  • actions(whichState?: string): string[]
  • List all actions available from this state. Please note that the order of the actions is not guaranteed.

    import { sm } from 'jssm';

    const machine = sm`
    red 'next' -> green 'next' -> yellow 'next' -> red;
    [red yellow green] 'shutdown' ~> off 'start' -> red;
    `;

    console.log( machine.state() ); // logs 'red'
    console.log( machine.actions() ); // logs ['next', 'shutdown']

    machine.action('next'); // true
    console.log( machine.state() ); // logs 'green'
    console.log( machine.actions() ); // logs ['next', 'shutdown']

    machine.action('shutdown'); // true
    console.log( machine.state() ); // logs 'off'
    console.log( machine.actions() ); // logs ['start']

    machine.action('start'); // true
    console.log( machine.state() ); // logs 'red'
    console.log( machine.actions() ); // logs ['next', 'shutdown']

    Parameters

    • whichState: string = ...

      The state whose actions to have listed

    Returns string[]

  • all_themes(): ("default" | "modern" | "ocean" | "bold" | "plain")[]
  • auto_set_state_timeout(): void
  • clear_state_timeout(): void
  • current_action_for(action: string): number
  • current_state_timeout(): [string, number]
  • data(): mDT
  • Get the current data of a machine.

    import * as jssm from 'jssm';

    const lswitch = jssm.from('on <=> off;', {data: 1});
    console.log( lswitch.data() ); // 1

    Returns mDT

  • display_text(state: string): string
  • Get whatever the node should show as text.

    Currently, this means to get the label for a given state, if any; otherwise to return the node's name. However, this definition is expected to grow with time, and it is currently considered ill-advised to manually parse this text.

    See also label_for.

    import * as jssm from 'jssm';

    const lswitch = jssm.from('a -> b; state a: { label: "Foo!"; };');
    console.log( lswitch.display_text('a') ); // 'Foo!'
    console.log( lswitch.display_text('b') ); // 'b'

    Parameters

    • state: string

    Returns string

  • do(actionName: string, newData?: mDT): boolean
  • Instruct the machine to complete an action. Synonym for action.

    const light = sm`
    off 'start' -> red;
    red 'next' -> green 'next' -> yellow 'next' -> red;
    [red yellow green] 'shutdown' ~> off;
    `;

    light.state(); // 'off'
    light.do('start'); // true
    light.state(); // 'red'
    light.do('next'); // true
    light.state(); // 'green'
    light.do('next'); // true
    light.state(); // 'yellow'
    light.do('dance'); // !! false - no such action
    light.state(); // 'yellow'
    light.do('start'); // !! false - yellow does not have the action start
    light.state(); // 'yellow'

    Parameters

    • actionName: string

      The action to engage

    • Optional newData: mDT

      The data change to insert during the action

    Returns boolean

  • dot_preamble(): string
  • edges_between(from: string, to: string): JssmTransition<string, mDT>[]
  • flow(): "up" | "right" | "down" | "left"
  • force_transition(newState: string, newData?: mDT): boolean
  • Instruct the machine to complete a forced transition (which will reject if called with a normal transition call.)

    const light = sm`red -> green -> yellow -> red; [red yellow green] 'shutdown' ~> off 'start' -> red;`;

    light.state(); // 'red'
    light.transition('off'); // false
    light.state(); // 'red'
    light.force_transition('off'); // true
    light.state(); // 'off'

    Parameters

    • newState: string

      The state to switch to

    • Optional newData: mDT

      The data change to insert during the transition

    Returns boolean

  • fsl_version(): string
  • get_transition_by_state_names(from: string, to: string): number
  • go(newState: string, newData?: mDT): boolean
  • Instruct the machine to complete a transition. Synonym for transition.

    const light = sm`red -> green -> yellow -> red; [red yellow green] 'shutdown' ~> off 'start' -> red;`;

    light.state(); // 'red'
    light.go('green'); // true
    light.state(); // 'green'

    Parameters

    • newState: string

      The state to switch to

    • Optional newData: mDT

      The data change to insert during the transition

    Returns boolean

  • graph_layout(): string
  • has_completes(): boolean
  • has_state(whichState: string): boolean
  • Check whether the machine knows a given state.

    import * as jssm from 'jssm';

    const lswitch = jssm.from('on <=> off;');

    console.log( lswitch.has_state('off') ); // true
    console.log( lswitch.has_state('dance') ); // false

    Parameters

    • whichState: string

      The state to be checked for extance

    Returns boolean

  • has_terminals(): boolean
  • has_unenterables(): boolean
  • hook_action(from: string, to: string, action: string, handler: HookHandler<mDT>): Machine<mDT>
  • instance_name(): string
  • is_complete(): boolean
  • is_end_state(whichState: string): boolean
  • Check whether a given state is a valid start state (either because it was explicitly named as such, or because it was the first mentioned state.)

    import { sm, is_end_state } from 'jssm';

    const example = sm`a -> b;`;

    console.log( final_test.is_start_state('a') ); // false
    console.log( final_test.is_start_state('b') ); // true

    const example = sm`end_states: [a b]; a -> b;`;

    console.log( final_test.is_start_state('a') ); // true
    console.log( final_test.is_start_state('b') ); // true

    Parameters

    • whichState: string

      The name of the state to check

    Returns boolean

  • is_final(): boolean
  • Check whether the current state is final (either has no exits or is marked complete.)

    import { sm, is_final } from 'jssm';

    const final_test = sm`first -> second;`;

    console.log( final_test.is_final() ); // false
    state.transition('second');
    console.log( final_test.is_final() ); // true

    Returns boolean

  • is_start_state(whichState: string): boolean
  • Check whether a given state is a valid start state (either because it was explicitly named as such, or because it was the first mentioned state.)

    import { sm, is_start_state } from 'jssm';

    const example = sm`a -> b;`;

    console.log( final_test.is_start_state('a') ); // true
    console.log( final_test.is_start_state('b') ); // false

    const example = sm`start_states: [a b]; a -> b;`;

    console.log( final_test.is_start_state('a') ); // true
    console.log( final_test.is_start_state('b') ); // true

    Parameters

    • whichState: string

      The name of the state to check

    Returns boolean

  • is_terminal(): boolean
  • is_unenterable(whichState: string): boolean
  • known_prop(prop_name: string): boolean
  • Check whether a given string is a known property's name.

    const example = sm`property foo default 1; a->b;`;

    example.known_prop('foo'); // true
    example.known_prop('bar'); // false

    Parameters

    • prop_name: string

      The relevant property name to look up

    Returns boolean

  • known_props(): string[]
  • List all known property names. If you'd also like values, use props instead. The order of the properties is not defined, and the properties generally will not be sorted.

    
    

    Returns string[]

  • label_for(state: string): string
  • Get the label for a given state, if any; return undefined otherwise.

    import * as jssm from 'jssm';

    const lswitch = jssm.from('a -> b; state a: { label: "Foo!"; };');
    console.log( lswitch.label_for('a') ); // 'Foo!'
    console.log( lswitch.label_for('b') ); // undefined

    See also display_text.

    Parameters

    • state: string

    Returns string

  • list_actions(): string[]
  • Lists all edges of a machine.

    import { sm } from 'jssm';

    const lswitch = sm`on 'toggle' <=> 'toggle' off;`;

    lswitch.list_edges();
    [
    {
    from: 'on',
    to: 'off',
    kind: 'main',
    forced_only: false,
    main_path: true,
    action: 'toggle'
    },
    {
    from: 'off',
    to: 'on',
    kind: 'main',
    forced_only: false,
    main_path: true,
    action: 'toggle'
    }
    ]

    Returns JssmTransition<string, mDT>[]

  • list_entrances(whichState?: string): string[]
  • List all entrances attached to the current state. Please note that the order of the list is not defined. This list includes both unforced and forced entrances; if this isn't desired, consider {@link list_unforced_entrances} or {@link list_forced_entrances} as appropriate.

    import { sm } from 'jssm';

    const light = sm`red 'next' -> green 'next' -> yellow 'next' -> red; [red yellow green] 'shutdown' ~> off 'start' -> red;`;

    light.state(); // 'red'
    light.list_entrances(); // [ 'yellow', 'off' ]

    Parameters

    • whichState: string = ...

      The state whose entrances to have listed

    Returns string[]

  • list_exit_actions(whichState?: string): string[]
  • list_exits(whichState?: string): string[]
  • List all exits attached to the current state. Please note that the order of the list is not defined. This list includes both unforced and forced exits; if this isn't desired, consider {@link list_unforced_exits} or {@link list_forced_exits} as appropriate.

    import { sm } from 'jssm';

    const light = sm`red 'next' -> green 'next' -> yellow 'next' -> red; [red yellow green] 'shutdown' ~> off 'start' -> red;`;

    light.state(); // 'red'
    light.list_exits(); // [ 'green', 'off' ]

    Parameters

    • whichState: string = ...

      The state whose exits to have listed

    Returns string[]

  • list_named_transitions(): Map<string, number>
  • list_states_having_action(whichState: string): string[]
  • List all states that have a specific action attached. Please note that the order of the states is not guaranteed.

    import { sm } from 'jssm';

    const machine = sm`
    red 'next' -> green 'next' -> yellow 'next' -> red;
    [red yellow green] 'shutdown' ~> off 'start' -> red;
    `;

    console.log( machine.list_states_having_action('next') ); // ['red', 'green', 'yellow']
    console.log( machine.list_states_having_action('start') ); // ['off']

    Parameters

    • whichState: string

      The action to be checked for associated states

    Returns string[]

  • List all transitions attached to the current state, sorted by entrance and exit. The order of each sublist is not defined. A node could appear in both lists.

    import { sm } from 'jssm';

    const light = sm`red 'next' -> green 'next' -> yellow 'next' -> red; [red yellow green] 'shutdown' ~> off 'start' -> red;`;

    light.state(); // 'red'
    light.list_transitions(); // { entrances: [ 'yellow', 'off' ], exits: [ 'green', 'off' ] }

    Parameters

    • whichState: string = ...

      The state whose transitions to have listed

    Returns JssmTransitionList

  • lookup_transition_for(from: string, to: string): JssmTransition<string, mDT>
  • machine_author(): string[]
  • machine_comment(): string
  • machine_contributor(): string[]
  • machine_definition(): string
  • machine_language(): string
  • machine_license(): string
  • machine_name(): string
  • machine_version(): string
  • override(newState: string, newData?: mDT): void
  • Replace the current state and data with no regard to the graph.

    import { sm } from 'jssm';

    const machine = sm`a -> b -> c;`;
    console.log( machine.state() ); // 'a'

    machine.go('b');
    machine.go('c');
    console.log( machine.state() ); // 'c'

    machine.override('a');
    console.log( machine.state() ); // 'a'

    Parameters

    • newState: string
    • Optional newData: mDT

    Returns void

  • post_hook_action(from: string, to: string, action: string, handler: HookHandler<mDT>): Machine<mDT>
  • probabilistic_histo_walk(n: number): Map<string, number>
  • probabilistic_transition(): boolean
  • probabilistic_walk(n: number): string[]
  • probable_action_exits(whichState?: string): any[]
  • prop(name: string): any
  • Get the current value of a given property name.

    
    

    Parameters

    • name: string

      The relevant property name to look up

    Returns any

    The value behind the prop name. Because functional props are evaluated as getters, this can be anything.

  • props(): object
  • Get the current value of every prop, as an object. If no current definition exists for a prop - that is, if the prop was defined without a default and the current state also doesn't define the prop - then that prop will be listed in the returned object with a value of undefined.

    const traffic_light = sm`

    property can_go default true;
    property hesitate default true;
    property stop_first default false;

    Off -> Red => Green => Yellow => Red;
    [Red Yellow Green] ~> [Off FlashingRed];
    FlashingRed -> Red;

    state Red: { property stop_first true; property can_go false; };
    state Off: { property stop_first true; };
    state FlashingRed: { property stop_first true; };
    state Green: { property hesitate false; };

    `;

    traffic_light.state(); // Off
    traffic_light.props(); // { can_go: true, hesitate: true, stop_first: true; }

    traffic_light.go('Red');
    traffic_light.props(); // { can_go: false, hesitate: true, stop_first: true; }

    traffic_light.go('Green');
    traffic_light.props(); // { can_go: true, hesitate: false, stop_first: false; }

    Returns object

  • Serialize the current machine, including all defining state but not the machine string, to a structure. This means you will need the machine string to recreate (to not waste repeated space;) if you want the machine string embedded, call {@link serialize_with_string} instead.

    Parameters

    • Optional comment: string

    Returns JssmSerialization<mDT>

  • set_state_timeout(next_state: string, after_time: number): void
  • state(): string
  • Get the current state of a machine.

    import * as jssm from 'jssm';

    const lswitch = jssm.from('on <=> off;');
    console.log( lswitch.state() ); // 'on'

    lswitch.transition('off');
    console.log( lswitch.state() ); // 'off'

    Returns string

  • state_is_complete(whichState: string): boolean
  • state_is_final(whichState: string): boolean
  • Check whether a given state is final (either has no exits or is marked complete.)

    import { sm, state_is_final } from 'jssm';

    const final_test = sm`first -> second;`;

    console.log( final_test.state_is_final('first') ); // false
    console.log( final_test.state_is_final('second') ); // true

    Parameters

    • whichState: string

      The name of the state to check for finality

    Returns boolean

  • state_is_terminal(whichState: string): boolean
  • state_timeout_for(which_state: string): [string, number]
  • states(): string[]
  • List all the states known by the machine. Please note that the order of these states is not guaranteed.

    import * as jssm from 'jssm';

    const lswitch = jssm.from('on <=> off;');
    console.log( lswitch.states() ); // ['on', 'off']

    Returns string[]

  • strict_prop(name: string): any
  • Get the current value of a given property name. If missing on the state and without a global default, throw, unlike prop, which would return undefined instead.

    
    

    Parameters

    • name: string

      The relevant property name to look up

    Returns any

    The value behind the prop name. Because functional props are evaluated as getters, this can be anything.

  • Gets the composite style for a specific node by individually imposing the style layers on a given object, after determining which layers are appropriate.

    The order of composition is base, then theme, then user content. Each item in the stack will be composited independently. First, the base state style, then the theme state style, then the user state style.

    After the three state styles, we'll composite the hooked styles; then the terminal styles; then the start styles; then the end styles; finally, the active styles. Remember, last wins.

    The base state style must exist. All other styles are optional.

    Parameters

    • state: string

    Returns Partial<JssmStateDeclaration>

  • transition(newState: string, newData?: mDT): boolean
  • Instruct the machine to complete a transition. Synonym for go.

    const light = sm`
    off 'start' -> red;
    red 'next' -> green 'next' -> yellow 'next' -> red;
    [red yellow green] 'shutdown' ~> off;
    `;

    light.state(); // 'off'
    light.go('red'); // true
    light.state(); // 'red'
    light.go('green'); // true
    light.state(); // 'green'
    light.go('blue'); // !! false - no such state
    light.state(); // 'green'
    light.go('red'); // !! false - green may not go directly to red, only to yellow
    light.state(); // 'green'

    Parameters

    • newState: string

      The state to switch to

    • Optional newData: mDT

      The data change to insert during the transition

    Returns boolean

  • transition_impl(newStateOrAction: string, newData: mDT, wasForced: boolean, wasAction: boolean): boolean
  • Parameters

    • newStateOrAction: string
    • newData: mDT
    • wasForced: boolean
    • wasAction: boolean

    Returns boolean

  • valid_action(action: string, _newData?: mDT): boolean
  • valid_force_transition(newState: string, _newData?: mDT): boolean
  • valid_transition(newState: string, _newData?: mDT): boolean

Generated using TypeDoc