@@ -62,6 +62,10 @@ npm install inquirerer
6262 - [ Custom Resolvers] ( #custom-resolvers )
6363 - [ Resolver Examples] ( #resolver-examples )
6464- [ CLI Helper] ( #cli-helper )
65+ - [ CLI Utilities] ( #cli-utilities )
66+ - [ Package Information] ( #package-information )
67+ - [ Argument Parsing] ( #argument-parsing )
68+ - [ Error Handling] ( #error-handling )
6569- [ UI Components] ( #ui-components )
6670 - [ Spinner] ( #spinner )
6771 - [ Progress Bar] ( #progress-bar )
@@ -1248,6 +1252,130 @@ const cli = new CLI(handler, options);
12481252await cli .run ();
12491253```
12501254
1255+ ## CLI Utilities
1256+
1257+ inquirerer provides a complete set of utilities for building CLI applications, so you can import everything from a single package.
1258+
1259+ ### Package Information
1260+
1261+ Get information about your CLI's package.json for version display and other metadata:
1262+
1263+ ``` typescript
1264+ import { getPackageJson , getPackageVersion , getPackageName } from ' inquirerer' ;
1265+
1266+ // Get the full package.json object
1267+ const pkg = getPackageJson (__dirname );
1268+ console .log (` ${pkg .name }@${pkg .version } ` );
1269+
1270+ // Or use the convenience helpers
1271+ if (argv .version ) {
1272+ console .log (getPackageVersion (__dirname ));
1273+ process .exit (0 );
1274+ }
1275+
1276+ const toolName = getPackageName (__dirname );
1277+ console .log (` Welcome to ${toolName }! ` );
1278+ ```
1279+
1280+ ### Argument Parsing
1281+
1282+ Parse command-line arguments and extract subcommands:
1283+
1284+ ``` typescript
1285+ import { parseArgv , extractFirst } from ' inquirerer' ;
1286+
1287+ const argv = parseArgv (process .argv );
1288+ const { first, newArgv } = extractFirst (argv );
1289+
1290+ // Running: mycli generate --output ./dist
1291+ // first = 'generate'
1292+ // newArgv = { output: './dist', _: [] }
1293+
1294+ switch (first ) {
1295+ case ' generate' :
1296+ await handleGenerate (newArgv );
1297+ break ;
1298+ case ' init' :
1299+ await handleInit (newArgv );
1300+ break ;
1301+ default :
1302+ console .log (' Unknown command' );
1303+ }
1304+ ```
1305+
1306+ ### Error Handling
1307+
1308+ Exit gracefully with error messages and optional cleanup:
1309+
1310+ ``` typescript
1311+ import { cliExitWithError , CliExitOptions } from ' inquirerer' ;
1312+
1313+ try {
1314+ await riskyOperation ();
1315+ } catch (error ) {
1316+ await cliExitWithError (error , {
1317+ context: { operation: ' build' , target: ' production' },
1318+ beforeExit : async () => {
1319+ await cleanup ();
1320+ },
1321+ logger: customLogger // optional, defaults to console
1322+ });
1323+ }
1324+ ```
1325+
1326+ ### Complete CLI Example
1327+
1328+ Here's a complete example using all the CLI utilities:
1329+
1330+ ``` typescript
1331+ import {
1332+ CLI ,
1333+ CLIOptions ,
1334+ Inquirerer ,
1335+ extractFirst ,
1336+ cliExitWithError ,
1337+ getPackageVersion ,
1338+ ParsedArgs
1339+ } from ' inquirerer' ;
1340+
1341+ const options: Partial <CLIOptions > = {
1342+ minimistOpts: {
1343+ alias: { v: ' version' , h: ' help' },
1344+ boolean: [' help' , ' version' ]
1345+ }
1346+ };
1347+
1348+ const handler = async (argv : Partial <ParsedArgs >, prompter : Inquirerer ) => {
1349+ if (argv .version ) {
1350+ console .log (getPackageVersion (__dirname ));
1351+ process .exit (0 );
1352+ }
1353+
1354+ const { first, newArgv } = extractFirst (argv );
1355+
1356+ try {
1357+ switch (first ) {
1358+ case ' init' :
1359+ await handleInit (newArgv , prompter );
1360+ break ;
1361+ case ' build' :
1362+ await handleBuild (newArgv , prompter );
1363+ break ;
1364+ default :
1365+ console .log (' Usage: mycli <command> [options]' );
1366+ console .log (' Commands: init, build' );
1367+ }
1368+ } catch (error ) {
1369+ await cliExitWithError (error , {
1370+ context: { command: first }
1371+ });
1372+ }
1373+ };
1374+
1375+ const cli = new CLI (handler , options );
1376+ await cli .run ();
1377+ ```
1378+
12511379## UI Components
12521380
12531381inquirerer includes a set of UI components for building rich terminal interfaces beyond simple prompts. These are useful for showing progress, loading states, and streaming output.
0 commit comments