commandych
v0.0.1
Published
Async commands runner
Maintainers
Readme
commandych
Async commands runner for simple control of your application. Without any extra abstractions just use simple command as bricks of your applicaton, and Commandych for control them.
Example of usage:
import { ConsoleLoggych } from "loggych";
import { CmdMap, Commandych } from "../src";
/**
* Example of shell maker
*/
const deps = {
depData: "data from deps",
log: ConsoleLoggych.createDefault(),
};
function createShell() {
return Promise.resolve(deps);
}
/**
* Map of all public commands and processes of your project
* (Example)
*/
const map: CmdMap<typeof deps> = {
"cmd1": async (deps) => {
await deps.log.log({info: "start cmd1"});
await new Promise(resolve => {setTimeout(() => {resolve(null);}, 3000)});
await deps.log.log({info: "waited 3 sec"});
},
"cmd2": async (deps) => {
await deps.log.log({info: "start cmd2"});
await new Promise(resolve => {setTimeout(() => {resolve(null);}, 5000)});
await deps.log.log({info: "waited 5 sec"});
},
}
/**
* Your process runner function will look like this
*/
async function run() {
const shell = await makeShell();
const cmdrun = new Commandych(map, (s) => {
console.log("shell update");
return Promise.resolve(s);
});
await cmdrun.runCyclic(shell, "cmd2", 7000);
}
run();
//Will output to console:
// => Iteration 1762648159897
// => info:
// => waited 5 sec
// =>
// => shell update
// => Iteration 1762648166898
// => info:
// => start cmd2
// =>
// => Iteration 1762648166898
// => info:
// => waited 5 sec
// ...API
import { ILoggych } from "loggych"; //See loggych package
export type Cmd<S extends {
log: ILoggych;
}> = (shell: S) => Promise<void>;
export type CmdMap<S extends {
log: ILoggych;
}> = Record<string, Cmd<S>>;
export declare class Commandych<S extends {
log: ILoggych;
}, Map extends CmdMap<S>>
{
constructor(
cmdMap: Map,
shellUpdate?: ((s: S) => Promise<S>) | null
);
runOnce(shell: S, script: keyof Map): Promise<void>;
runCyclic(shell: S, script: keyof Map, duration?: number, errDuration?: number): Promise<void>;
stop(): void;
isRun(): boolean;
}Author
Anatoly Starodubtsev [email protected]
License
MIT
