44 * A lightweight wrapper around minimist that provides a more structured API
55 * for defining and parsing command-line options.
66 */
7- var util = require ( 'util' ) ;
87var minimist = require ( 'minimist' ) ;
98
109/**
1110 * Formats an option definition into a help text string
12- *
13- * @param {Object } optdef - Option definition object
14- * @returns {String } Formatted description string for the option
1511 */
1612function describe ( optdef ) {
1713 var desc = ' --' + optdef . name ;
@@ -21,32 +17,19 @@ function describe(optdef) {
2117 return desc ;
2218}
2319
24- /**
25- * Simple wrapper for console.log
26- *
27- * @param {String } s - String to print
28- */
29- function print ( s ) {
30- console . log ( s ) ;
31- }
32-
3320/**
3421 * Displays usage information for all options
35- *
36- * @param {Array } options - Array of option definition objects
37- * @param {String } usage - Optional custom usage text
3822 */
3923function usage ( options , usage ) {
4024 console . log ( usage || 'options:' ) ;
41- options . map ( describe ) . forEach ( print ) ;
25+ options . map ( describe ) . forEach ( function ( desc ) {
26+ console . log ( desc ) ;
27+ } ) ;
4228}
4329
4430/**
4531 * Converts an options object into an array of option definitions
4632 * Ensures each option has a name property (derived from the object key or alias)
47- *
48- * @param {Object } options - Options definition object
49- * @returns {Array } Array of option definition objects
5033 */
5134function as_array ( options ) {
5235 var out = [ ] ;
@@ -70,9 +53,6 @@ function as_array(options) {
7053
7154/**
7255 * Options constructor - Initializes the options parser
73- *
74- * @param {Array } options - Array of option definitions
75- * @constructor
7656 */
7757function Options ( options ) {
7858 this . options = options ;
@@ -87,7 +67,7 @@ function Options(options) {
8767
8868 // Convert our option definitions to minimist format
8969 this . options . forEach ( function ( definition ) {
90- // Set up aliases
70+ // Set up aliases
9171 if ( definition . alias ) {
9272 minimist_opts . alias [ definition . name ] = definition . alias ;
9373 }
@@ -107,43 +87,38 @@ function Options(options) {
10787
10888/**
10989 * Adds help functionality
110- * If the specified option (default 'help') is present, displays usage and exits
111- *
112- * @param {String } name - Option name to trigger help (default: 'help')
113- * @returns {Options } - This Options instance for chaining
90+ * If the specified option (default 'help') is present, displays usage and throws an error
11491 */
11592Options . prototype . help = function ( name ) {
11693 var field = name || 'help' ;
117- if ( this . argv [ name ] ) {
94+ if ( this . argv [ field ] ) {
11895 usage ( this . options , this . usage_text ) ;
119- process . exit ( 0 ) ;
96+ throw new Error ( 'Help displayed' ) ;
12097 }
12198 return this ;
12299} ;
123100
124101/**
125102 * Sets custom usage text for help display
126- *
127- * @param {String } usage - Custom usage message
128- * @returns {Options } - This Options instance for chaining
129103 */
130104Options . prototype . usage = function ( usage ) {
131105 this . usage_text = usage ;
132106 return this ;
133107} ;
134108
135- /**
136- * Module exports
137- * Provides a factory function to create Options instances
138- */
139109module . exports = {
140110 /**
141- * Creates a new Options instance with the specified option definitions
142- *
143- * @param {Object } options - Object containing option definitions
144- * @returns {Options } - Configured Options instance
145- */
111+ * Creates a new Options instance with the specified option definitions
112+ */
146113 options : function ( options ) {
147- return new Options ( as_array ( options ) ) ;
114+ try {
115+ return new Options ( as_array ( options ) ) ;
116+ } catch ( error ) {
117+ if ( error . message === 'Help displayed' ) {
118+ // eslint-disable-next-line no-process-exit
119+ process . exit ( 0 ) ;
120+ }
121+ throw error ;
122+ }
148123 } ,
149124} ;
0 commit comments