flagstaff
API reference

flagstaff/import

Every export of flagstaff/import, with its signature and doc comment: fromCliSpinners, fromCliBoxes, plus 4 types.

flagstaff/import (R11) — the two data corpora the ecosystem already has, as plugins.

cli-spinners ships ~80 spinner styles and cli-boxes ships eight border sets, both as plain JSON that thousands of programs already depend on. Neither is bundled here: the weight of a corpus nobody asked for is exactly what U5 is about, and a caller who wants one already has it on disk. So these take the JSON and hand back a plugin:

import cliSpinners from 'cli-spinners';
import { fromCliSpinners } from 'flagstaff/import';
import { register } from 'flagstaff/plugin';

register(fromCliSpinners(cliSpinners));
spinner('moon');

The result is an ordinary plugin — it goes through the same register(), is validated against the same schema, and can be replaced by another. That is the point: the gallery opens full, and a third-party plugin starts as a copy of one of these.

import { fromCliSpinners, fromCliBoxes } from 'flagstaff/import';

Functions

fromCliBoxes

Turn cli-boxes' boxes.json into a plugin. Its shape is already ours, so this is a copy.

function fromCliBoxes(corpus: Record<string, CliBox>, { name }?: FromCliBoxesOptions): Plugin;
ParameterType
corpusRecord<string, CliBox>
{ name } (optional)FromCliBoxesOptions

Returns Plugin

fromCliSpinners

Turn cli-spinners' spinners.json into a plugin. The corpus stays the caller's.

function fromCliSpinners(corpus: Record<string, CliSpinner>, { name, staticFor }?: FromCliSpinnersOptions): Plugin;
ParameterType
corpusRecord<string, CliSpinner>
{ name, staticFor } (optional)FromCliSpinnersOptions

Returns Plugin

Interfaces

CliSpinner

cli-spinners' shape: no static, because it has no projection for a pipe.

interface CliSpinner {
    frames: string[];
    interval?: number;
}

FromCliBoxesOptions

interface FromCliBoxesOptions {
    name?: string;
}

FromCliSpinnersOptions

interface FromCliSpinnersOptions {
    /** The plugin's name, which is what `flagstaff check` and the gallery label it with. */
    name?: string;
    /**
     * The static projection for a style, given its name and its frames. Default: `'…'` for
     * every one of them.
     *
     * The design sketched "the first frame" here, and that turned out to be wrong when it met
     * the corpus: a frozen `⠋` or `▰` is an animation stopped mid-stride, not a projection —
     * it tells a pipe, an agent and a screen reader nothing that `…` does not tell them
     * better. The parameter exists because it is the author's call, not this function's.
     */
    staticFor?: (name: string, spinner: CliSpinner) => string;
}

Types

CliBox

cli-boxes' shape — the same eight keys BorderStyle has, which is why it imports whole.

type CliBox = BorderStyle;

On this page