bluecodex
Version:
Turn repetitive dev tasks into CLI commands with Typescript
59 lines (52 loc) • 1.56 kB
text/typescript
import { ioc } from "../ioc";
import type { RunResultWithOutput } from "./run-result";
import type { RunTarget } from "./run-target";
import type { SpawnStdOption } from "./spawn-std-option";
import { spawnWithStdOption } from "./spawn-with-std-option";
type Args = {
runTarget: RunTarget;
stdOption: SpawnStdOption;
};
export function spawnRunTarget({
runTarget,
stdOption,
}: Args): Promise<RunResultWithOutput> {
switch (runTarget.type) {
case "spawn": {
console.log(ioc.theme.runSpawn(runTarget.name, runTarget.argv));
return spawnWithStdOption({
name: runTarget.name,
argv: runTarget.argv,
stdOption,
});
}
case "spawn-package-bin": {
console.log(ioc.theme.runSpawnPackageBin(runTarget.name, runTarget.argv));
return spawnWithStdOption({
name: runTarget.path,
argv: runTarget.argv,
stdOption,
});
}
case "command": {
console.log(ioc.theme.runCommand(runTarget.command, runTarget.argv));
return spawnWithStdOption({
name: process.argv0,
argv: [process.argv[1], runTarget.name, ...runTarget.argv],
stdOption,
});
}
case "not-found": {
const notFoundMessage = ioc.theme.runNotFound(runTarget.name);
process.stderr.write(notFoundMessage + "\n");
return Promise.resolve({
__objectType__: "run-result-with-output",
output: notFoundMessage,
stdout: "",
stderr: notFoundMessage,
exitCode: 1,
failed: true,
});
}
}
}