Cli Arguments Parser with Zod validator.
$ npm install --save zodiarg zod
// npx ts-node examples/sample.ts --name mizchi --age 34 --dry xxx 1 import { z } from "zod"; import { asNumberString, asBooleanString, parse } from "zodiarg"; const parsed = parse( { // --key value | --key=value options: { name: z.string().describe("input your name"), env: z.enum(['a', 'b']).describe("env"), age: asNumberString.default('1').describe("xxx"), // parse as number active: asBooleanString.default('false') // parse as boolean }, // --flagA, --flagB flags: { dry: z.boolean().default(false), shortable: z.boolean().default(false).describe("shortable example"), }, // ... positional args: miz 10 args: [ z.string().describe("input your first name"), z.string().regex(/^\d+$/).transform(Number) ], // alias map: s => shortable alias: { s: 'shortable', } }, process.argv.slice(2), // Options(default) // { help: true, helpWithNoArgs: true } ); type ParsedInput = typeof parsed; // Inferenced by Zod main(parsed).catch((err) => { console.error(err); process.exit(1); }); async function main(input: ParsedInput) { console.log('Parsed Input', input); }
Run
$ npx ts-node examples/sample.ts --name mizchi --age 34 --dry xxx 1 -s --env a
Parsed Input {
flags: { dry: true, shortable: true },
options: { name: 'mizchi', env: 'a', age: 34 },
args: [ 'xxx', 1 ]
}Show help
$ npx ts-node examples/sample.ts -h
OPTIONS:
--name <string> input your name
--env <enum: [a] [b]> env
--age (Optional: 1) xxx
FLAGS:
--dry
--shortable, -s shortable example
ARGS:
0 input your first name
1
MIT