@boneskull/bargs 0.1.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (91) hide show
  1. package/LICENSE +55 -0
  2. package/README.md +483 -0
  3. package/dist/bargs.cjs +167 -0
  4. package/dist/bargs.cjs.map +1 -0
  5. package/dist/bargs.d.cts +31 -0
  6. package/dist/bargs.d.cts.map +1 -0
  7. package/dist/bargs.d.ts +31 -0
  8. package/dist/bargs.d.ts.map +1 -0
  9. package/dist/bargs.js +163 -0
  10. package/dist/bargs.js.map +1 -0
  11. package/dist/errors.cjs +57 -0
  12. package/dist/errors.cjs.map +1 -0
  13. package/dist/errors.d.cts +40 -0
  14. package/dist/errors.d.cts.map +1 -0
  15. package/dist/errors.d.ts +40 -0
  16. package/dist/errors.d.ts.map +1 -0
  17. package/dist/errors.js +51 -0
  18. package/dist/errors.js.map +1 -0
  19. package/dist/help.cjs +309 -0
  20. package/dist/help.cjs.map +1 -0
  21. package/dist/help.d.cts +21 -0
  22. package/dist/help.d.cts.map +1 -0
  23. package/dist/help.d.ts +21 -0
  24. package/dist/help.d.ts.map +1 -0
  25. package/dist/help.js +304 -0
  26. package/dist/help.js.map +1 -0
  27. package/dist/index.cjs +63 -0
  28. package/dist/index.cjs.map +1 -0
  29. package/dist/index.d.cts +96 -0
  30. package/dist/index.d.cts.map +1 -0
  31. package/dist/index.d.ts +96 -0
  32. package/dist/index.d.ts.map +1 -0
  33. package/dist/index.js +47 -0
  34. package/dist/index.js.map +1 -0
  35. package/dist/opt.cjs +205 -0
  36. package/dist/opt.cjs.map +1 -0
  37. package/dist/opt.d.cts +145 -0
  38. package/dist/opt.d.cts.map +1 -0
  39. package/dist/opt.d.ts +145 -0
  40. package/dist/opt.d.ts.map +1 -0
  41. package/dist/opt.js +202 -0
  42. package/dist/opt.js.map +1 -0
  43. package/dist/osc.cjs +190 -0
  44. package/dist/osc.cjs.map +1 -0
  45. package/dist/osc.d.cts +30 -0
  46. package/dist/osc.d.cts.map +1 -0
  47. package/dist/osc.d.ts +30 -0
  48. package/dist/osc.d.ts.map +1 -0
  49. package/dist/osc.js +181 -0
  50. package/dist/osc.js.map +1 -0
  51. package/dist/parser.cjs +293 -0
  52. package/dist/parser.cjs.map +1 -0
  53. package/dist/parser.d.cts +47 -0
  54. package/dist/parser.d.cts.map +1 -0
  55. package/dist/parser.d.ts +47 -0
  56. package/dist/parser.d.ts.map +1 -0
  57. package/dist/parser.js +285 -0
  58. package/dist/parser.js.map +1 -0
  59. package/dist/theme.cjs +203 -0
  60. package/dist/theme.cjs.map +1 -0
  61. package/dist/theme.d.cts +227 -0
  62. package/dist/theme.d.cts.map +1 -0
  63. package/dist/theme.d.ts +227 -0
  64. package/dist/theme.d.ts.map +1 -0
  65. package/dist/theme.js +198 -0
  66. package/dist/theme.js.map +1 -0
  67. package/dist/types.cjs +18 -0
  68. package/dist/types.cjs.map +1 -0
  69. package/dist/types.d.cts +244 -0
  70. package/dist/types.d.cts.map +1 -0
  71. package/dist/types.d.ts +244 -0
  72. package/dist/types.d.ts.map +1 -0
  73. package/dist/types.js +17 -0
  74. package/dist/types.js.map +1 -0
  75. package/dist/validate.cjs +452 -0
  76. package/dist/validate.cjs.map +1 -0
  77. package/dist/validate.d.cts +28 -0
  78. package/dist/validate.d.cts.map +1 -0
  79. package/dist/validate.d.ts +28 -0
  80. package/dist/validate.d.ts.map +1 -0
  81. package/dist/validate.js +448 -0
  82. package/dist/validate.js.map +1 -0
  83. package/dist/version.cjs +134 -0
  84. package/dist/version.cjs.map +1 -0
  85. package/dist/version.d.cts +27 -0
  86. package/dist/version.d.cts.map +1 -0
  87. package/dist/version.d.ts +27 -0
  88. package/dist/version.d.ts.map +1 -0
  89. package/dist/version.js +129 -0
  90. package/dist/version.js.map +1 -0
  91. package/package.json +149 -0
@@ -0,0 +1,293 @@
1
+ "use strict";
2
+ /**
3
+ * Low-level argument parsing logic wrapping Node.js `util.parseArgs()`.
4
+ *
5
+ * Handles the transformation of CLI arguments into typed values by:
6
+ *
7
+ * - Building `parseArgs` configuration from bargs option schemas
8
+ * - Coercing parsed string values to their declared types (number, enum, etc.)
9
+ * - Processing positional arguments including variadic rest args
10
+ * - Running handler functions (sync or async) after successful parsing
11
+ * - Supporting both simple CLIs and command-based CLIs with subcommand dispatch
12
+ *
13
+ * @packageDocumentation
14
+ */
15
+ Object.defineProperty(exports, "__esModule", { value: true });
16
+ exports.parseCommandsAsync = exports.parseCommandsSync = exports.parseSimple = exports.runHandlers = exports.runSyncHandlers = void 0;
17
+ const node_util_1 = require("node:util");
18
+ const errors_js_1 = require("./errors.cjs");
19
+ /**
20
+ * Check if a value is a thenable (Promise-like). Uses duck-typing for
21
+ * cross-realm compatibility.
22
+ */
23
+ const isThenable = (value) => value !== null &&
24
+ typeof value === 'object' &&
25
+ typeof value.then === 'function';
26
+ /**
27
+ * Run a handler or array of handlers synchronously. Throws if any handler
28
+ * returns a thenable.
29
+ */
30
+ const runSyncHandlers = (handler, result) => {
31
+ const handlers = Array.isArray(handler) ? handler : [handler];
32
+ for (const h of handlers) {
33
+ const maybePromise = h(result);
34
+ if (isThenable(maybePromise)) {
35
+ throw new errors_js_1.BargsError('Handler returned a thenable. Use bargsAsync() for async handlers.');
36
+ }
37
+ }
38
+ };
39
+ exports.runSyncHandlers = runSyncHandlers;
40
+ /**
41
+ * Run a handler or array of handlers sequentially (async).
42
+ */
43
+ const runHandlers = async (handler, result) => {
44
+ const handlers = Array.isArray(handler) ? handler : [handler];
45
+ for (const h of handlers) {
46
+ await h(result);
47
+ }
48
+ };
49
+ exports.runHandlers = runHandlers;
50
+ /**
51
+ * Build parseArgs options config from our options schema.
52
+ */
53
+ const buildParseArgsConfig = (schema) => {
54
+ const config = {};
55
+ for (const [name, def] of Object.entries(schema)) {
56
+ const opt = {
57
+ type: def.type === 'boolean' ? 'boolean' : 'string',
58
+ };
59
+ // First single-char alias becomes short option
60
+ const shortAlias = def.aliases?.find((a) => a.length === 1);
61
+ if (shortAlias) {
62
+ opt.short = shortAlias;
63
+ }
64
+ // Arrays need multiple: true
65
+ if (def.type === 'array') {
66
+ opt.multiple = true;
67
+ }
68
+ config[name] = opt;
69
+ }
70
+ return config;
71
+ };
72
+ /**
73
+ * Coerce parsed values to their expected types.
74
+ */
75
+ const coerceValues = (values, schema) => {
76
+ const result = {};
77
+ for (const [name, def] of Object.entries(schema)) {
78
+ let value = values[name];
79
+ // Apply default if undefined
80
+ if (value === undefined && 'default' in def) {
81
+ value = def.default;
82
+ }
83
+ // Type coercion
84
+ if (value !== undefined) {
85
+ switch (def.type) {
86
+ case 'array':
87
+ if (def.items === 'number' && Array.isArray(value)) {
88
+ result[name] = value.map((v) => (typeof v === 'string' ? Number(v) : v));
89
+ }
90
+ else {
91
+ result[name] = value;
92
+ }
93
+ break;
94
+ case 'count':
95
+ // Count options count occurrences
96
+ result[name] = typeof value === 'number' ? value : value ? 1 : 0;
97
+ break;
98
+ case 'enum': {
99
+ const enumValue = value;
100
+ if (value !== undefined && !def.choices.includes(enumValue)) {
101
+ throw new Error(`Invalid value for --${name}: "${enumValue}". Must be one of: ${def.choices.join(', ')}`);
102
+ }
103
+ result[name] = value;
104
+ break;
105
+ }
106
+ case 'number':
107
+ result[name] = typeof value === 'string' ? Number(value) : value;
108
+ break;
109
+ default:
110
+ result[name] = value;
111
+ }
112
+ }
113
+ else {
114
+ result[name] = value;
115
+ }
116
+ }
117
+ return result;
118
+ };
119
+ /**
120
+ * Coerce positional values.
121
+ *
122
+ * Note: Schema validation (variadic last, required order) is done upfront by
123
+ * validateConfig in bargs.ts.
124
+ */
125
+ const coercePositionals = (positionals, schema) => {
126
+ const result = [];
127
+ for (let i = 0; i < schema.length; i++) {
128
+ const def = schema[i];
129
+ const value = positionals[i];
130
+ if (def.type === 'variadic') {
131
+ // Rest of positionals - def is narrowed to VariadicPositional here
132
+ const variadicDef = def;
133
+ const rest = positionals.slice(i);
134
+ if (variadicDef.items === 'number') {
135
+ result.push(rest.map(Number));
136
+ }
137
+ else {
138
+ result.push(rest);
139
+ }
140
+ break;
141
+ }
142
+ if (value !== undefined) {
143
+ if (def.type === 'number') {
144
+ result.push(Number(value));
145
+ }
146
+ else if (def.type === 'enum') {
147
+ // Validate enum choice
148
+ if (!def.choices.includes(value)) {
149
+ throw new Error(`Invalid value for positional ${i}: "${value}". Must be one of: ${def.choices.join(', ')}`);
150
+ }
151
+ result.push(value);
152
+ }
153
+ else {
154
+ result.push(value);
155
+ }
156
+ }
157
+ else if ('default' in def && def.default !== undefined) {
158
+ result.push(def.default);
159
+ }
160
+ else if (def.required) {
161
+ throw new Error(`Missing required positional argument at position ${i}`);
162
+ }
163
+ else {
164
+ result.push(undefined);
165
+ }
166
+ }
167
+ return result;
168
+ };
169
+ /**
170
+ * Parse arguments for a simple CLI (no commands). This is synchronous - it only
171
+ * parses, does not run handlers.
172
+ */
173
+ const parseSimple = (config) => {
174
+ const { args = process.argv.slice(2), options: optionsSchema = {}, positionals: positionalsSchema = [], } = config;
175
+ // Build parseArgs config
176
+ const parseArgsOptions = buildParseArgsConfig(optionsSchema);
177
+ // Parse with Node.js util.parseArgs
178
+ const { positionals, values } = (0, node_util_1.parseArgs)({
179
+ allowPositionals: positionalsSchema.length > 0,
180
+ args,
181
+ options: parseArgsOptions,
182
+ strict: true,
183
+ });
184
+ // Coerce and apply defaults
185
+ const coercedValues = coerceValues(values, optionsSchema);
186
+ const coercedPositionals = coercePositionals(positionals, positionalsSchema);
187
+ return {
188
+ command: undefined,
189
+ positionals: coercedPositionals,
190
+ values: coercedValues,
191
+ };
192
+ };
193
+ exports.parseSimple = parseSimple;
194
+ /**
195
+ * Core command parsing logic (sync, no handler execution). Returns the parsed
196
+ * result and the handler to run.
197
+ */
198
+ const parseCommandsCore = (config) => {
199
+ const { args = process.argv.slice(2), commands, defaultHandler, options: globalOptions = {}, } = config;
200
+ const commandsRecord = commands;
201
+ // Find command name (first non-flag argument)
202
+ const commandIndex = args.findIndex((arg) => !arg.startsWith('-'));
203
+ const commandName = commandIndex >= 0 ? args[commandIndex] : undefined;
204
+ const remainingArgs = commandName
205
+ ? [...args.slice(0, commandIndex), ...args.slice(commandIndex + 1)]
206
+ : args;
207
+ // No command specified
208
+ if (!commandName) {
209
+ if (typeof defaultHandler === 'string') {
210
+ // Use named default command (recursive)
211
+ return parseCommandsCore({
212
+ ...config,
213
+ args: [defaultHandler, ...args],
214
+ defaultHandler: undefined,
215
+ });
216
+ }
217
+ else if (typeof defaultHandler === 'function' ||
218
+ Array.isArray(defaultHandler)) {
219
+ // Parse global options only
220
+ const parseArgsOptions = buildParseArgsConfig(globalOptions);
221
+ const { values } = (0, node_util_1.parseArgs)({
222
+ allowPositionals: false,
223
+ args: remainingArgs,
224
+ options: parseArgsOptions,
225
+ strict: true,
226
+ });
227
+ const coercedValues = coerceValues(values, globalOptions);
228
+ const result = {
229
+ command: undefined,
230
+ positionals: [],
231
+ values: coercedValues,
232
+ };
233
+ return {
234
+ handler: defaultHandler,
235
+ result,
236
+ };
237
+ }
238
+ else {
239
+ throw new errors_js_1.HelpError('No command specified.');
240
+ }
241
+ }
242
+ // Find command config
243
+ const command = commandsRecord[commandName];
244
+ if (!command) {
245
+ throw new errors_js_1.HelpError(`Unknown command: ${commandName}`);
246
+ }
247
+ // Merge global and command options
248
+ const commandOptions = command.options ?? {};
249
+ const mergedOptionsSchema = { ...globalOptions, ...commandOptions };
250
+ const commandPositionals = command.positionals ?? [];
251
+ // Build parseArgs config
252
+ const parseArgsOptions = buildParseArgsConfig(mergedOptionsSchema);
253
+ // Parse
254
+ const { positionals, values } = (0, node_util_1.parseArgs)({
255
+ allowPositionals: commandPositionals.length > 0,
256
+ args: remainingArgs,
257
+ options: parseArgsOptions,
258
+ strict: true,
259
+ });
260
+ // Coerce
261
+ const coercedValues = coerceValues(values, mergedOptionsSchema);
262
+ const coercedPositionals = coercePositionals(positionals, commandPositionals);
263
+ const result = {
264
+ command: commandName,
265
+ positionals: coercedPositionals,
266
+ values: coercedValues,
267
+ };
268
+ return { handler: command.handler, result };
269
+ };
270
+ /**
271
+ * Parse arguments for a command-based CLI (sync). Throws if any handler returns
272
+ * a thenable.
273
+ */
274
+ const parseCommandsSync = (config) => {
275
+ const { handler, result } = parseCommandsCore(config);
276
+ if (handler) {
277
+ (0, exports.runSyncHandlers)(handler, result);
278
+ }
279
+ return result;
280
+ };
281
+ exports.parseCommandsSync = parseCommandsSync;
282
+ /**
283
+ * Parse arguments for a command-based CLI (async).
284
+ */
285
+ const parseCommandsAsync = async (config) => {
286
+ const { handler, result } = parseCommandsCore(config);
287
+ if (handler) {
288
+ await (0, exports.runHandlers)(handler, result);
289
+ }
290
+ return result;
291
+ };
292
+ exports.parseCommandsAsync = parseCommandsAsync;
293
+ //# sourceMappingURL=parser.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"parser.js","sourceRoot":"","sources":["../src/parser.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,47 @@
1
+ /**
2
+ * Low-level argument parsing logic wrapping Node.js `util.parseArgs()`.
3
+ *
4
+ * Handles the transformation of CLI arguments into typed values by:
5
+ *
6
+ * - Building `parseArgs` configuration from bargs option schemas
7
+ * - Coercing parsed string values to their declared types (number, enum, etc.)
8
+ * - Processing positional arguments including variadic rest args
9
+ * - Running handler functions (sync or async) after successful parsing
10
+ * - Supporting both simple CLIs and command-based CLIs with subcommand dispatch
11
+ *
12
+ * @packageDocumentation
13
+ */
14
+ import type { BargsConfigWithCommands, BargsResult, CommandConfigInput, HandlerFn, InferOptions, InferPositionals, OptionsSchema, PositionalsSchema } from "./types.cjs";
15
+ /**
16
+ * Run a handler or array of handlers synchronously. Throws if any handler
17
+ * returns a thenable.
18
+ */
19
+ export declare const runSyncHandlers: <T>(handler: HandlerFn<T> | HandlerFn<T>[], result: T) => void;
20
+ /**
21
+ * Run a handler or array of handlers sequentially (async).
22
+ */
23
+ export declare const runHandlers: <T>(handler: HandlerFn<T> | HandlerFn<T>[], result: T) => Promise<void>;
24
+ /**
25
+ * Options for parseSimple.
26
+ */
27
+ interface ParseSimpleOptions<TOptions extends OptionsSchema = OptionsSchema, TPositionals extends PositionalsSchema = PositionalsSchema> {
28
+ args?: string[];
29
+ options?: TOptions;
30
+ positionals?: TPositionals;
31
+ }
32
+ /**
33
+ * Parse arguments for a simple CLI (no commands). This is synchronous - it only
34
+ * parses, does not run handlers.
35
+ */
36
+ export declare const parseSimple: <TOptions extends OptionsSchema = OptionsSchema, TPositionals extends PositionalsSchema = PositionalsSchema>(config: ParseSimpleOptions<TOptions, TPositionals>) => BargsResult<InferOptions<TOptions>, InferPositionals<TPositionals>, undefined>;
37
+ /**
38
+ * Parse arguments for a command-based CLI (sync). Throws if any handler returns
39
+ * a thenable.
40
+ */
41
+ export declare const parseCommandsSync: <TOptions extends OptionsSchema = OptionsSchema, TCommands extends Record<string, CommandConfigInput> = Record<string, CommandConfigInput>>(config: BargsConfigWithCommands<TOptions, TCommands>) => BargsResult<InferOptions<TOptions>, unknown[], string | undefined>;
42
+ /**
43
+ * Parse arguments for a command-based CLI (async).
44
+ */
45
+ export declare const parseCommandsAsync: <TOptions extends OptionsSchema = OptionsSchema, TCommands extends Record<string, CommandConfigInput> = Record<string, CommandConfigInput>>(config: BargsConfigWithCommands<TOptions, TCommands>) => Promise<BargsResult<InferOptions<TOptions>, unknown[], string | undefined>>;
46
+ export {};
47
+ //# sourceMappingURL=parser.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"parser.d.ts","sourceRoot":"","sources":["../src/parser.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAIH,OAAO,KAAK,EACV,uBAAuB,EACvB,WAAW,EACX,kBAAkB,EAClB,SAAS,EACT,YAAY,EACZ,gBAAgB,EAChB,aAAa,EACb,iBAAiB,EAClB,oBAAmB;AAapB;;;GAGG;AACH,eAAO,MAAM,eAAe,GAAI,CAAC,EAC/B,SAAS,SAAS,CAAC,CAAC,CAAC,GAAG,SAAS,CAAC,CAAC,CAAC,EAAE,EACtC,QAAQ,CAAC,KACR,IAUF,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,WAAW,GAAU,CAAC,EACjC,SAAS,SAAS,CAAC,CAAC,CAAC,GAAG,SAAS,CAAC,CAAC,CAAC,EAAE,EACtC,QAAQ,CAAC,KACR,OAAO,CAAC,IAAI,CAKd,CAAC;AAyJF;;GAEG;AACH,UAAU,kBAAkB,CAC1B,QAAQ,SAAS,aAAa,GAAG,aAAa,EAC9C,YAAY,SAAS,iBAAiB,GAAG,iBAAiB;IAE1D,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC;IAChB,OAAO,CAAC,EAAE,QAAQ,CAAC;IACnB,WAAW,CAAC,EAAE,YAAY,CAAC;CAC5B;AAED;;;GAGG;AACH,eAAO,MAAM,WAAW,GACtB,QAAQ,SAAS,aAAa,GAAG,aAAa,EAC9C,YAAY,SAAS,iBAAiB,GAAG,iBAAiB,EAE1D,QAAQ,kBAAkB,CAAC,QAAQ,EAAE,YAAY,CAAC,KACjD,WAAW,CACZ,YAAY,CAAC,QAAQ,CAAC,EACtB,gBAAgB,CAAC,YAAY,CAAC,EAC9B,SAAS,CA4BV,CAAC;AAoHF;;;GAGG;AACH,eAAO,MAAM,iBAAiB,GAC5B,QAAQ,SAAS,aAAa,GAAG,aAAa,EAC9C,SAAS,SAAS,MAAM,CAAC,MAAM,EAAE,kBAAkB,CAAC,GAAG,MAAM,CAC3D,MAAM,EACN,kBAAkB,CACnB,EAED,QAAQ,uBAAuB,CAAC,QAAQ,EAAE,SAAS,CAAC,KACnD,WAAW,CAAC,YAAY,CAAC,QAAQ,CAAC,EAAE,OAAO,EAAE,EAAE,MAAM,GAAG,SAAS,CAQnE,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,kBAAkB,GAC7B,QAAQ,SAAS,aAAa,GAAG,aAAa,EAC9C,SAAS,SAAS,MAAM,CAAC,MAAM,EAAE,kBAAkB,CAAC,GAAG,MAAM,CAC3D,MAAM,EACN,kBAAkB,CACnB,EAED,QAAQ,uBAAuB,CAAC,QAAQ,EAAE,SAAS,CAAC,KACnD,OAAO,CACR,WAAW,CAAC,YAAY,CAAC,QAAQ,CAAC,EAAE,OAAO,EAAE,EAAE,MAAM,GAAG,SAAS,CAAC,CASnE,CAAC"}
@@ -0,0 +1,47 @@
1
+ /**
2
+ * Low-level argument parsing logic wrapping Node.js `util.parseArgs()`.
3
+ *
4
+ * Handles the transformation of CLI arguments into typed values by:
5
+ *
6
+ * - Building `parseArgs` configuration from bargs option schemas
7
+ * - Coercing parsed string values to their declared types (number, enum, etc.)
8
+ * - Processing positional arguments including variadic rest args
9
+ * - Running handler functions (sync or async) after successful parsing
10
+ * - Supporting both simple CLIs and command-based CLIs with subcommand dispatch
11
+ *
12
+ * @packageDocumentation
13
+ */
14
+ import type { BargsConfigWithCommands, BargsResult, CommandConfigInput, HandlerFn, InferOptions, InferPositionals, OptionsSchema, PositionalsSchema } from "./types.js";
15
+ /**
16
+ * Run a handler or array of handlers synchronously. Throws if any handler
17
+ * returns a thenable.
18
+ */
19
+ export declare const runSyncHandlers: <T>(handler: HandlerFn<T> | HandlerFn<T>[], result: T) => void;
20
+ /**
21
+ * Run a handler or array of handlers sequentially (async).
22
+ */
23
+ export declare const runHandlers: <T>(handler: HandlerFn<T> | HandlerFn<T>[], result: T) => Promise<void>;
24
+ /**
25
+ * Options for parseSimple.
26
+ */
27
+ interface ParseSimpleOptions<TOptions extends OptionsSchema = OptionsSchema, TPositionals extends PositionalsSchema = PositionalsSchema> {
28
+ args?: string[];
29
+ options?: TOptions;
30
+ positionals?: TPositionals;
31
+ }
32
+ /**
33
+ * Parse arguments for a simple CLI (no commands). This is synchronous - it only
34
+ * parses, does not run handlers.
35
+ */
36
+ export declare const parseSimple: <TOptions extends OptionsSchema = OptionsSchema, TPositionals extends PositionalsSchema = PositionalsSchema>(config: ParseSimpleOptions<TOptions, TPositionals>) => BargsResult<InferOptions<TOptions>, InferPositionals<TPositionals>, undefined>;
37
+ /**
38
+ * Parse arguments for a command-based CLI (sync). Throws if any handler returns
39
+ * a thenable.
40
+ */
41
+ export declare const parseCommandsSync: <TOptions extends OptionsSchema = OptionsSchema, TCommands extends Record<string, CommandConfigInput> = Record<string, CommandConfigInput>>(config: BargsConfigWithCommands<TOptions, TCommands>) => BargsResult<InferOptions<TOptions>, unknown[], string | undefined>;
42
+ /**
43
+ * Parse arguments for a command-based CLI (async).
44
+ */
45
+ export declare const parseCommandsAsync: <TOptions extends OptionsSchema = OptionsSchema, TCommands extends Record<string, CommandConfigInput> = Record<string, CommandConfigInput>>(config: BargsConfigWithCommands<TOptions, TCommands>) => Promise<BargsResult<InferOptions<TOptions>, unknown[], string | undefined>>;
46
+ export {};
47
+ //# sourceMappingURL=parser.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"parser.d.ts","sourceRoot":"","sources":["../src/parser.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAIH,OAAO,KAAK,EACV,uBAAuB,EACvB,WAAW,EACX,kBAAkB,EAClB,SAAS,EACT,YAAY,EACZ,gBAAgB,EAChB,aAAa,EACb,iBAAiB,EAClB,mBAAmB;AAapB;;;GAGG;AACH,eAAO,MAAM,eAAe,GAAI,CAAC,EAC/B,SAAS,SAAS,CAAC,CAAC,CAAC,GAAG,SAAS,CAAC,CAAC,CAAC,EAAE,EACtC,QAAQ,CAAC,KACR,IAUF,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,WAAW,GAAU,CAAC,EACjC,SAAS,SAAS,CAAC,CAAC,CAAC,GAAG,SAAS,CAAC,CAAC,CAAC,EAAE,EACtC,QAAQ,CAAC,KACR,OAAO,CAAC,IAAI,CAKd,CAAC;AAyJF;;GAEG;AACH,UAAU,kBAAkB,CAC1B,QAAQ,SAAS,aAAa,GAAG,aAAa,EAC9C,YAAY,SAAS,iBAAiB,GAAG,iBAAiB;IAE1D,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC;IAChB,OAAO,CAAC,EAAE,QAAQ,CAAC;IACnB,WAAW,CAAC,EAAE,YAAY,CAAC;CAC5B;AAED;;;GAGG;AACH,eAAO,MAAM,WAAW,GACtB,QAAQ,SAAS,aAAa,GAAG,aAAa,EAC9C,YAAY,SAAS,iBAAiB,GAAG,iBAAiB,EAE1D,QAAQ,kBAAkB,CAAC,QAAQ,EAAE,YAAY,CAAC,KACjD,WAAW,CACZ,YAAY,CAAC,QAAQ,CAAC,EACtB,gBAAgB,CAAC,YAAY,CAAC,EAC9B,SAAS,CA4BV,CAAC;AAoHF;;;GAGG;AACH,eAAO,MAAM,iBAAiB,GAC5B,QAAQ,SAAS,aAAa,GAAG,aAAa,EAC9C,SAAS,SAAS,MAAM,CAAC,MAAM,EAAE,kBAAkB,CAAC,GAAG,MAAM,CAC3D,MAAM,EACN,kBAAkB,CACnB,EAED,QAAQ,uBAAuB,CAAC,QAAQ,EAAE,SAAS,CAAC,KACnD,WAAW,CAAC,YAAY,CAAC,QAAQ,CAAC,EAAE,OAAO,EAAE,EAAE,MAAM,GAAG,SAAS,CAQnE,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,kBAAkB,GAC7B,QAAQ,SAAS,aAAa,GAAG,aAAa,EAC9C,SAAS,SAAS,MAAM,CAAC,MAAM,EAAE,kBAAkB,CAAC,GAAG,MAAM,CAC3D,MAAM,EACN,kBAAkB,CACnB,EAED,QAAQ,uBAAuB,CAAC,QAAQ,EAAE,SAAS,CAAC,KACnD,OAAO,CACR,WAAW,CAAC,YAAY,CAAC,QAAQ,CAAC,EAAE,OAAO,EAAE,EAAE,MAAM,GAAG,SAAS,CAAC,CASnE,CAAC"}