CARVIEW |
Select Language
HTTP/2 200
date: Wed, 23 Jul 2025 11:06:27 GMT
content-type: text/html; charset=utf-8
vary: X-PJAX, X-PJAX-Container, Turbo-Visit, Turbo-Frame, X-Requested-With,Accept-Encoding, Accept, X-Requested-With
x-robots-tag: none
etag: W/"c14d746c1eb95cc3b5868fb0a6966ffe"
cache-control: max-age=0, private, must-revalidate
strict-transport-security: max-age=31536000; includeSubdomains; preload
x-frame-options: deny
x-content-type-options: nosniff
x-xss-protection: 0
referrer-policy: no-referrer-when-downgrade
content-security-policy: default-src 'none'; base-uri 'self'; child-src github.githubassets.com github.com/assets-cdn/worker/ github.com/assets/ gist.github.com/assets-cdn/worker/; connect-src 'self' uploads.github.com www.githubstatus.com collector.github.com raw.githubusercontent.com api.github.com github-cloud.s3.amazonaws.com github-production-repository-file-5c1aeb.s3.amazonaws.com github-production-upload-manifest-file-7fdce7.s3.amazonaws.com github-production-user-asset-6210df.s3.amazonaws.com *.rel.tunnels.api.visualstudio.com wss://*.rel.tunnels.api.visualstudio.com objects-origin.githubusercontent.com copilot-proxy.githubusercontent.com proxy.individual.githubcopilot.com proxy.business.githubcopilot.com proxy.enterprise.githubcopilot.com *.actions.githubusercontent.com wss://*.actions.githubusercontent.com productionresultssa0.blob.core.windows.net/ productionresultssa1.blob.core.windows.net/ productionresultssa2.blob.core.windows.net/ productionresultssa3.blob.core.windows.net/ productionresultssa4.blob.core.windows.net/ productionresultssa5.blob.core.windows.net/ productionresultssa6.blob.core.windows.net/ productionresultssa7.blob.core.windows.net/ productionresultssa8.blob.core.windows.net/ productionresultssa9.blob.core.windows.net/ productionresultssa10.blob.core.windows.net/ productionresultssa11.blob.core.windows.net/ productionresultssa12.blob.core.windows.net/ productionresultssa13.blob.core.windows.net/ productionresultssa14.blob.core.windows.net/ productionresultssa15.blob.core.windows.net/ productionresultssa16.blob.core.windows.net/ productionresultssa17.blob.core.windows.net/ productionresultssa18.blob.core.windows.net/ productionresultssa19.blob.core.windows.net/ github-production-repository-image-32fea6.s3.amazonaws.com github-production-release-asset-2e65be.s3.amazonaws.com insights.github.com wss://alive.github.com api.githubcopilot.com api.individual.githubcopilot.com api.business.githubcopilot.com api.enterprise.githubcopilot.com; font-src github.githubassets.com; form-action 'self' github.com gist.github.com copilot-workspace.githubnext.com objects-origin.githubusercontent.com; frame-ancestors 'none'; frame-src viewscreen.githubusercontent.com notebooks.githubusercontent.com; img-src 'self' data: blob: github.githubassets.com media.githubusercontent.com camo.githubusercontent.com identicons.github.com avatars.githubusercontent.com private-avatars.githubusercontent.com github-cloud.s3.amazonaws.com objects.githubusercontent.com release-assets.githubusercontent.com secured-user-images.githubusercontent.com/ user-images.githubusercontent.com/ private-user-images.githubusercontent.com opengraph.githubassets.com copilotprodattachments.blob.core.windows.net/github-production-copilot-attachments/ github-production-user-asset-6210df.s3.amazonaws.com customer-stories-feed.github.com spotlights-feed.github.com objects-origin.githubusercontent.com *.githubusercontent.com; manifest-src 'self'; media-src github.com user-images.githubusercontent.com/ secured-user-images.githubusercontent.com/ private-user-images.githubusercontent.com github-production-user-asset-6210df.s3.amazonaws.com gist.github.com; script-src github.githubassets.com; style-src 'unsafe-inline' github.githubassets.com; upgrade-insecure-requests; worker-src github.githubassets.com github.com/assets-cdn/worker/ github.com/assets/ gist.github.com/assets-cdn/worker/
server: github.com
content-encoding: gzip
accept-ranges: bytes
set-cookie: _gh_sess=h56UN53ck37bualOzjjfSM7HSKL0v%2BWNzT0%2FQQP6fLtIfqhjsEwrXR9gW8pJ1UZIi65kpl%2FOwRsSghKbGpi79jzstOiQWHIWqYR3aqcMQzQ88et%2FsjfJ3GO8nQCEyhO%2FYdpcXs6DzuuCPv674jsem%2BtQIaO7PbEDJG%2FBoEen%2Fj5s2KTrki%2BkIS0CxT%2FrHyLCSnnoLSwnyJ3fcr%2BbrFR5HnuAh0eMuPxpxkV4jSV22NIvqLNMtZSgJKd%2BTfZI79RPXhbaR71iVDpUi5KNDA338A%3D%3D--XxbM%2F0XsAZBCQOrZ--cKr39u7imM1xvVY5q3gm6A%3D%3D; Path=/; HttpOnly; Secure; SameSite=Lax
set-cookie: _octo=GH1.1.532379755.1753268787; Path=/; Domain=github.com; Expires=Thu, 23 Jul 2026 11:06:27 GMT; Secure; SameSite=Lax
set-cookie: logged_in=no; Path=/; Domain=github.com; Expires=Thu, 23 Jul 2026 11:06:27 GMT; HttpOnly; Secure; SameSite=Lax
x-github-request-id: A6A4:121670:A05BEF:C0D0C5:6880C233
HierarchicalFsm · ifandelse/machina.js Wiki · GitHub
Skip to content
Navigation Menu
{{ message }}
-
Notifications
You must be signed in to change notification settings - Fork 146
HierarchicalFsm
Nikhil Motiani edited this page Apr 12, 2019
·
2 revisions
Both machina.Fsm
and machina.BehavioralFsm
instances support hierarchical relationships. Any state object under the states
property can be given a _child
member, which can be one of the following:
- an actual FSM instance
- a function which returns an FSM instance
- an object with a
factory
method, which returns an FSM instance
Here's an example of two of these approaches:
var crosswalk = new machina.Fsm( {
namespace: "crosswalk",
initialState: "vehiclesEnabled",
states: {
vehiclesEnabled: {
_onEnter: function() {
this.emit( "pedestrians", { status: DO_NOT_WALK } );
},
timeout: "pedestriansEnabled",
_child: vehicleSignal, // already-existing FSM instance
},
pedestriansEnabled: {
_onEnter: function() {
this.emit( "vehicles", { status: RED } );
},
timeout: "vehiclesEnabled",
// factory function which returns an instance of an FSM
_child: function() {
return new PedestrianSignalFsm();
}
}
}
} );
- Input fed to the parent is passed to a child FSM (if one exists). If the child has a handler for the input, it handles it and any events emitted are bubbled up to the parent FSM and emitted from there (except for
nohandler
events). - If the child FSM does not have a handler for the input, it emits a
nohandler
event (just like any FSM normally would). The parent will detect this event and attempt to handle the input instead. If it doesn't have a handler, it will emit anohandler
event as well. - If input originates at a child FSM (e.g. - through a setTimeout call set up in the child), and the child does not have a handler for that input, it will bubble up to the parent to be handled there. (The parent will not attempt to delegate bubbled input back to the child that bubbled it up to begin with.)
- Whenever the parent FSM transitions to a new state, if the new state has a child FSM, it's told to handle a
_reset
input just after the new state's_onEnter
(if one exists) has completed execution.
Clone this wiki locally
You can’t perform that action at this time.