Skip to content

Repository files navigation

self-help


Interactive Q&A Guides for Web and the Command Line.
Create decision trees that users and LLMs can navigate to find answers.

Installation

npm install --global self-help

Commands

interactive

Navigate a Self-Help Document from the Command Line interactively.

Examples

# Run an interactive Q&A session
self-help interactive --source ./path/to/help-document.js

screenshot

markdown

Generate Markdown from a Self-Help Document. Markdown is written to stdout for you to pipe into other Command Line Programs or write to a file.

Examples

# Generate markdown documentation
self-help markdown --source ./path/to/help-document.js
# Write output to a file
self-help markdown --source ./path/to/help-document.js > output.md

See the RxJS Operator Decision Tree for an example of exported Markdown.

Writing Documents

A Help Document is a JavaScript Module exporting a getHelpDocument method of type GetHelpDocument.

typeGetHelpDocument=()=>Node|Promise<Node>;

It returns a Nested Hierarchy of Node Objects which form the Decision Tree a User will navigate.

typeNode=Leaf|Branch|AsyncBranch;

Example

exportconstgetHelpDocument=()=>({label: 'Welcome to Milk and Cookies, how can we help?',children: [{label: `I'm Thirsty, and`,children: ()=>http.get('/milks-walkthrough.json'),},{label: `I'm Hungry, and`,children: [{label: 'I love Cookies, so',children: ()=>http.get('/cookies-walkthrough.json'),},{label: `Cookies aren't my thing`,value: fs.readFileSync('/GET-OUT.md','utf8'),},],},],});

Node Types

Branch

A Branch presents multiple options to choose from in the form of its children Array. Children can be a combination of other Branch, AsyncBranch or Leaf Nodes.

{label: 'I just cloned the project, and',children: [...]}

AsyncBranch

An AsyncBranch is the same as a Branch except its children property is a Function which returns a Promise.

This mechanism allows Help Documents to be combined and linked together. Use it to compose higher-level guides which pull together other Help Documents hosted online or break down a large Help Document into smaller files that can be lazily-loaded at runtime.

{label: 'I just cloned the project, and',children: ()=>Promise.resolve([])}

Leaf

A Leaf represents the answer the User has been looking for as they have been navigating a given Help Document. The value can be any String, but is normally the contents of a Markdown Document which explains the answer to the User.

{label: 'I want to install dependencies',value: fs.readFileSync('/installation.md','utf8')}

Badges

  • NPM version
  • NPM downloads

Releases

Sponsor this project

Used by

Contributors

Languages