Stone.js API
    Preparing search index...

    What a builder does, per command.

    Every method is optional: a target that cannot be served, or has nothing to export, simply does not implement that step, and the command says so instead of failing obscurely.

    interface StoneBuilder {
        build?: (event: IncomingEvent) => Promiseable<void>;
        console?: (event: IncomingEvent) => Promiseable<void>;
        dev?: (event: IncomingEvent, restart?: boolean) => Promiseable<void>;
        export?: (event: IncomingEvent) => Promiseable<void>;
        preview?: (event: IncomingEvent) => Promiseable<void>;
        watchFiles?: (
            listener: (path: string, count: number) => void | Promise<void>,
        ) => void;
    }
    Index
    build?: (event: IncomingEvent) => Promiseable<void>

    Build for production.

    console?: (event: IncomingEvent) => Promiseable<void>

    Build for a console run (stone <custom-command>, stone list).

    dev?: (event: IncomingEvent, restart?: boolean) => Promiseable<void>

    Run the development server.

    export?: (event: IncomingEvent) => Promiseable<void>

    Export a template or a config file into the project.

    preview?: (event: IncomingEvent) => Promiseable<void>

    Serve what was built.

    watchFiles?: (
        listener: (path: string, count: number) => void | Promise<void>,
    ) => void

    Watch the sources a rebuild depends on.

    Only a supervised target needs it: the CLI restarts the child, but what to watch is the build's own knowledge.