Passage Shell is an Electron-based testing platform for Twine 2-based projects. Using Express, Passage Shell can remotely "play" projects using a system of inter-process communication (IPC) channels to send information between its main and rendering processes.
The Express framework exposes the same routes across all loaders. However, not all functionality is available for all formats.
All routes return JSON-encoded values. Return objects are based on their route names except in the case of /click/X and /mouseover/X, which can also return an error object, and /file, which only returns the static file.
- /: Information about the file
- /text: The current text of the passage
- /html: The current HTML of the passage
- /links: Listing of all links (or link-like) elements in story area
- /mouseover-links: Listing of all the mouseover links in the story area
- /click/X: The numbered (starting from 0) of the entry of the link (from /links) to "click"
- /mouseover/X: The numbered (starting from 0) of the entry of the mouseover-link (from /mouseover-links) to "mouseover"
- /undo: Attempts to "undo" based on file and loader
- /redo: Attempts to "redo" based on file and loader
- /error: The latest error (if any) to occur
- /reset: Reloads the file (but maintains webserver)
- /file: The file from settings.json
- /source: The inner HTML of the <tw-storydata> element
Passage Shell currently supports the following story formats:
- Harlowe
- SugarCube
- Snowman
The settings.json holds the options of port and file.
- port: Port number for the webserver
- file: The static file to serve. Must be an absolute path.
Passage Shell will not run without proper settings and attempts to prevent invalid values.
Every other route but /file communicates with the renderer process. Therefore, it is possible to work with the other routes and "play" the file served by /file without interfering with each other.
Run npm install
to prepare dependencies and then npm start
to run.
Because of loading times and different formats using transitions, it is recommended to poll every 10ms or more.