command
This is what we call "a combinator": command
takes multiple parsers and combine them into one parser that can also take raw user input using its run
function.
Config
name
(required): A name for the commandversion
: A version for the commandhandler
(required): A function that takes all the arguments and do something with itargs
(required): An object where the keys are the argument names (how they'll be treated in code) and the values are parsersaliases
: A list of other names this command can be called with. Useful withsubcommands
Usage
#!/usr/bin/env YARN_SILENT=1 yarn ts-node
import {
run,
boolean,
option,
Type,
flag,
extendType,
command,
string,
} from '../src';
const PrNumber = extendType(string, {
async from(branchName) {
const prNumber = branchName === 'master' ? '10' : undefined;
if (!prNumber) {
throw new Error(`There is no PR associated with branch '${branchName}'`);
}
return prNumber;
},
defaultValue: () => 'Hello',
});
const Repo: Type<string, string> = {
...string,
defaultValue: () => {
throw new Error("Can't infer repo from git");
},
description: 'repository uri',
displayName: 'uri',
};
const app = command({
name: 'build',
args: {
user: option({
type: string,
env: 'APP_USER',
long: 'user',
short: 'u',
}),
password: option({
type: string,
env: 'APP_PASS',
long: 'password',
short: 'p',
}),
repo: option({
type: Repo,
long: 'repo',
short: 'r',
}),
prNumber: option({
type: PrNumber,
short: 'b',
long: 'pr-number',
env: 'APP_BRANCH',
}),
dev: flag({
type: boolean,
long: 'dev',
short: 'D',
}),
},
handler: ({ repo, user, password, prNumber, dev }) => {
console.log({ repo, user, password, prNumber, dev });
},
});
run(app, process.argv.slice(2));