@optique/core 0.10.0-dev.296 → 0.10.0-dev.298

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.
@@ -1,7 +1,7 @@
1
1
  import { NonEmptyString } from "./nonempty.js";
2
2
  import { Message } from "./message.js";
3
3
  import { ValueParser, ValueParserResult } from "./valueparser.js";
4
- import { Mode } from "./parser.js";
4
+ import { Mode, Suggestion } from "./parser.js";
5
5
 
6
6
  //#region src/dependency.d.ts
7
7
 
@@ -30,11 +30,23 @@ declare const DependencyId: unique symbol;
30
30
  * @since 0.10.0
31
31
  */
32
32
  declare const DependencyIds: unique symbol;
33
+ /**
34
+ * A unique symbol used to store the default values function on derived parsers.
35
+ * This is used during partial dependency resolution to fill in missing values.
36
+ * @since 0.10.0
37
+ */
38
+ declare const DefaultValues: unique symbol;
33
39
  /**
34
40
  * A unique symbol used to access the parseWithDependency method on derived parsers.
35
41
  * @since 0.10.0
36
42
  */
37
43
  declare const ParseWithDependency: unique symbol;
44
+ /**
45
+ * A unique symbol used to access the suggestWithDependency method on derived parsers.
46
+ * This method generates suggestions using the provided dependency values instead of defaults.
47
+ * @since 0.10.0
48
+ */
49
+ declare const SuggestWithDependency: unique symbol;
38
50
  /**
39
51
  * Combines two modes into a single mode.
40
52
  * If either mode is async, the result is async.
@@ -327,6 +339,12 @@ interface DerivedValueParser<M extends Mode = "sync", T = unknown, S = unknown>
327
339
  * @internal
328
340
  */
329
341
  readonly [DependencyIds]?: readonly symbol[];
342
+ /**
343
+ * The default values function for this parser's dependencies.
344
+ * Used during partial dependency resolution to fill in missing values.
345
+ * @internal
346
+ */
347
+ readonly [DefaultValues]?: () => readonly unknown[];
330
348
  /**
331
349
  * Parses the input using the actual dependency value instead of the default.
332
350
  * This method is used during dependency resolution in `complete()`.
@@ -337,6 +355,16 @@ interface DerivedValueParser<M extends Mode = "sync", T = unknown, S = unknown>
337
355
  * @internal
338
356
  */
339
357
  readonly [ParseWithDependency]: (input: string, dependencyValue: S) => ValueParserResult<T> | Promise<ValueParserResult<T>>;
358
+ /**
359
+ * Generates suggestions using the provided dependency value instead of the default.
360
+ * This method is used during shell completion when dependency sources have been parsed.
361
+ *
362
+ * @param prefix The input prefix to filter suggestions.
363
+ * @param dependencyValue The resolved dependency value.
364
+ * @returns An iterable of suggestions.
365
+ * @internal
366
+ */
367
+ readonly [SuggestWithDependency]?: (prefix: string, dependencyValue: S) => Iterable<Suggestion> | AsyncIterable<Suggestion>;
340
368
  }
341
369
  /**
342
370
  * Creates a dependency source from a {@link ValueParser}.
@@ -484,6 +512,12 @@ interface DeferredParseState<T = unknown> {
484
512
  * If present, this is used instead of `dependencyId`.
485
513
  */
486
514
  readonly dependencyIds?: readonly symbol[];
515
+ /**
516
+ * The default values to use for dependencies that are not provided.
517
+ * For multi-dependency parsers, this is a tuple of default values in order.
518
+ * For single-dependency parsers, this is the single default value.
519
+ */
520
+ readonly defaultValues?: readonly unknown[];
487
521
  /**
488
522
  * The preliminary parse result using the default dependency value.
489
523
  * This is used as a fallback if dependency resolution is not needed
@@ -713,4 +747,4 @@ type DependencyError = {
713
747
  */
714
748
  declare function formatDependencyError(error: DependencyError): Message;
715
749
  //#endregion
716
- export { AnyDependencySource, CombineMode, CombinedDependencyMode, DeferredParseMarker, DeferredParseState, DependencyError, DependencyId, DependencyIds, DependencyMode, DependencyRegistry, DependencySource, DependencySourceMarker, DependencySourceState, DependencySourceStateMarker, DependencyValue, DependencyValues, DeriveAsyncOptions, DeriveFromAsyncOptions, DeriveFromOptions, DeriveFromSyncOptions, DeriveOptions, DeriveSyncOptions, DerivedValueParser, DerivedValueParserMarker, ParseWithDependency, PendingDependencySourceState, PendingDependencySourceStateMarker, ResolvedDependency, TransformsDependencyValueMarker, WrappedDependencySourceMarker, createDeferredParseState, createDependencySourceState, createPendingDependencySourceState, dependency, deriveFrom, deriveFromAsync, deriveFromSync, formatDependencyError, isDeferredParseState, isDependencySource, isDependencySourceState, isDerivedValueParser, isPendingDependencySourceState, isWrappedDependencySource, transformsDependencyValue };
750
+ export { AnyDependencySource, CombineMode, CombinedDependencyMode, DefaultValues, DeferredParseMarker, DeferredParseState, DependencyError, DependencyId, DependencyIds, DependencyMode, DependencyRegistry, DependencySource, DependencySourceMarker, DependencySourceState, DependencySourceStateMarker, DependencyValue, DependencyValues, DeriveAsyncOptions, DeriveFromAsyncOptions, DeriveFromOptions, DeriveFromSyncOptions, DeriveOptions, DeriveSyncOptions, DerivedValueParser, DerivedValueParserMarker, ParseWithDependency, PendingDependencySourceState, PendingDependencySourceStateMarker, ResolvedDependency, SuggestWithDependency, TransformsDependencyValueMarker, WrappedDependencySourceMarker, createDeferredParseState, createDependencySourceState, createPendingDependencySourceState, dependency, deriveFrom, deriveFromAsync, deriveFromSync, formatDependencyError, isDeferredParseState, isDependencySource, isDependencySourceState, isDerivedValueParser, isPendingDependencySourceState, isWrappedDependencySource, transformsDependencyValue };
@@ -27,11 +27,23 @@ const DependencyId = Symbol.for("@optique/core/dependency/DependencyId");
27
27
  */
28
28
  const DependencyIds = Symbol.for("@optique/core/dependency/DependencyIds");
29
29
  /**
30
+ * A unique symbol used to store the default values function on derived parsers.
31
+ * This is used during partial dependency resolution to fill in missing values.
32
+ * @since 0.10.0
33
+ */
34
+ const DefaultValues = Symbol.for("@optique/core/dependency/DefaultValues");
35
+ /**
30
36
  * A unique symbol used to access the parseWithDependency method on derived parsers.
31
37
  * @since 0.10.0
32
38
  */
33
39
  const ParseWithDependency = Symbol.for("@optique/core/dependency/ParseWithDependency");
34
40
  /**
41
+ * A unique symbol used to access the suggestWithDependency method on derived parsers.
42
+ * This method generates suggestions using the provided dependency values instead of defaults.
43
+ * @since 0.10.0
44
+ */
45
+ const SuggestWithDependency = Symbol.for("@optique/core/dependency/SuggestWithDependency");
46
+ /**
35
47
  * Creates a dependency source from a {@link ValueParser}.
36
48
  *
37
49
  * A dependency source wraps an existing value parser and enables creating
@@ -195,6 +207,7 @@ function createSyncDerivedFromParser(sourceId, options) {
195
207
  [DerivedValueParserMarker]: true,
196
208
  [DependencyId]: sourceId,
197
209
  [DependencyIds]: allDependencyIds,
210
+ [DefaultValues]: options.defaultValues,
198
211
  parse(input) {
199
212
  const sourceValues = options.defaultValues();
200
213
  const derivedParser = options.factory(...sourceValues);
@@ -222,6 +235,16 @@ function createSyncDerivedFromParser(sourceId, options) {
222
235
  const sourceValues = options.defaultValues();
223
236
  const derivedParser = options.factory(...sourceValues);
224
237
  if (derivedParser.suggest) yield* derivedParser.suggest(prefix);
238
+ },
239
+ *[SuggestWithDependency](prefix, dependencyValue) {
240
+ let derivedParser;
241
+ try {
242
+ derivedParser = options.factory(...dependencyValue);
243
+ } catch {
244
+ const sourceValues = options.defaultValues();
245
+ derivedParser = options.factory(...sourceValues);
246
+ }
247
+ if (derivedParser.suggest) yield* derivedParser.suggest(prefix);
225
248
  }
226
249
  };
227
250
  }
@@ -237,6 +260,7 @@ function createAsyncDerivedFromParserFromAsyncFactory(sourceId, options) {
237
260
  [DerivedValueParserMarker]: true,
238
261
  [DependencyId]: sourceId,
239
262
  [DependencyIds]: allDependencyIds,
263
+ [DefaultValues]: options.defaultValues,
240
264
  parse(input) {
241
265
  const sourceValues = options.defaultValues();
242
266
  const derivedParser = options.factory(...sourceValues);
@@ -264,6 +288,16 @@ function createAsyncDerivedFromParserFromAsyncFactory(sourceId, options) {
264
288
  const sourceValues = options.defaultValues();
265
289
  const derivedParser = options.factory(...sourceValues);
266
290
  if (derivedParser.suggest) for await (const suggestion of derivedParser.suggest(prefix)) yield suggestion;
291
+ },
292
+ async *[SuggestWithDependency](prefix, dependencyValue) {
293
+ let derivedParser;
294
+ try {
295
+ derivedParser = options.factory(...dependencyValue);
296
+ } catch {
297
+ const sourceValues = options.defaultValues();
298
+ derivedParser = options.factory(...sourceValues);
299
+ }
300
+ if (derivedParser.suggest) for await (const suggestion of derivedParser.suggest(prefix)) yield suggestion;
267
301
  }
268
302
  };
269
303
  }
@@ -279,6 +313,7 @@ function createAsyncDerivedFromParserFromSyncFactory(sourceId, options) {
279
313
  [DerivedValueParserMarker]: true,
280
314
  [DependencyId]: sourceId,
281
315
  [DependencyIds]: allDependencyIds,
316
+ [DefaultValues]: options.defaultValues,
282
317
  parse(input) {
283
318
  const sourceValues = options.defaultValues();
284
319
  const derivedParser = options.factory(...sourceValues);
@@ -306,6 +341,16 @@ function createAsyncDerivedFromParserFromSyncFactory(sourceId, options) {
306
341
  const sourceValues = options.defaultValues();
307
342
  const derivedParser = options.factory(...sourceValues);
308
343
  if (derivedParser.suggest) yield* derivedParser.suggest(prefix);
344
+ },
345
+ *[SuggestWithDependency](prefix, dependencyValue) {
346
+ let derivedParser;
347
+ try {
348
+ derivedParser = options.factory(...dependencyValue);
349
+ } catch {
350
+ const sourceValues = options.defaultValues();
351
+ derivedParser = options.factory(...sourceValues);
352
+ }
353
+ if (derivedParser.suggest) yield* derivedParser.suggest(prefix);
309
354
  }
310
355
  };
311
356
  }
@@ -360,6 +405,15 @@ function createSyncDerivedParser(sourceId, options) {
360
405
  const sourceValue = options.defaultValue();
361
406
  const derivedParser = options.factory(sourceValue);
362
407
  if (derivedParser.suggest) yield* derivedParser.suggest(prefix);
408
+ },
409
+ *[SuggestWithDependency](prefix, dependencyValue) {
410
+ let derivedParser;
411
+ try {
412
+ derivedParser = options.factory(dependencyValue);
413
+ } catch {
414
+ derivedParser = options.factory(options.defaultValue());
415
+ }
416
+ if (derivedParser.suggest) yield* derivedParser.suggest(prefix);
363
417
  }
364
418
  };
365
419
  }
@@ -400,6 +454,15 @@ function createAsyncDerivedParserFromAsyncFactory(sourceId, options) {
400
454
  const sourceValue = options.defaultValue();
401
455
  const derivedParser = options.factory(sourceValue);
402
456
  if (derivedParser.suggest) for await (const suggestion of derivedParser.suggest(prefix)) yield suggestion;
457
+ },
458
+ async *[SuggestWithDependency](prefix, dependencyValue) {
459
+ let derivedParser;
460
+ try {
461
+ derivedParser = options.factory(dependencyValue);
462
+ } catch {
463
+ derivedParser = options.factory(options.defaultValue());
464
+ }
465
+ if (derivedParser.suggest) for await (const suggestion of derivedParser.suggest(prefix)) yield suggestion;
403
466
  }
404
467
  };
405
468
  }
@@ -440,6 +503,15 @@ function createAsyncDerivedParserFromSyncFactory(sourceId, options) {
440
503
  const sourceValue = options.defaultValue();
441
504
  const derivedParser = options.factory(sourceValue);
442
505
  if (derivedParser.suggest) yield* derivedParser.suggest(prefix);
506
+ },
507
+ *[SuggestWithDependency](prefix, dependencyValue) {
508
+ let derivedParser;
509
+ try {
510
+ derivedParser = options.factory(dependencyValue);
511
+ } catch {
512
+ derivedParser = options.factory(options.defaultValue());
513
+ }
514
+ if (derivedParser.suggest) yield* derivedParser.suggest(prefix);
443
515
  }
444
516
  };
445
517
  }
@@ -471,12 +543,15 @@ function isDeferredParseState(value) {
471
543
  */
472
544
  function createDeferredParseState(rawInput, parser, preliminaryResult) {
473
545
  const multipleIds = DependencyIds in parser ? parser[DependencyIds] : void 0;
546
+ const defaultValuesFn = DefaultValues in parser ? parser[DefaultValues] : void 0;
547
+ const defaultVals = defaultValuesFn ? defaultValuesFn() : void 0;
474
548
  return {
475
549
  [DeferredParseMarker]: true,
476
550
  rawInput,
477
551
  parser,
478
552
  dependencyId: parser[DependencyId],
479
553
  dependencyIds: multipleIds,
554
+ defaultValues: defaultVals,
480
555
  preliminaryResult
481
556
  };
482
557
  }
@@ -644,4 +719,4 @@ function formatDependencyError(error) {
644
719
  }
645
720
 
646
721
  //#endregion
647
- export { DeferredParseMarker, DependencyId, DependencyIds, DependencyRegistry, DependencySourceMarker, DependencySourceStateMarker, DerivedValueParserMarker, ParseWithDependency, PendingDependencySourceStateMarker, TransformsDependencyValueMarker, WrappedDependencySourceMarker, createDeferredParseState, createDependencySourceState, createPendingDependencySourceState, dependency, deriveFrom, deriveFromAsync, deriveFromSync, formatDependencyError, isDeferredParseState, isDependencySource, isDependencySourceState, isDerivedValueParser, isPendingDependencySourceState, isWrappedDependencySource, transformsDependencyValue };
722
+ export { DefaultValues, DeferredParseMarker, DependencyId, DependencyIds, DependencyRegistry, DependencySourceMarker, DependencySourceStateMarker, DerivedValueParserMarker, ParseWithDependency, PendingDependencySourceStateMarker, SuggestWithDependency, TransformsDependencyValueMarker, WrappedDependencySourceMarker, createDeferredParseState, createDependencySourceState, createPendingDependencySourceState, dependency, deriveFrom, deriveFromAsync, deriveFromSync, formatDependencyError, isDeferredParseState, isDependencySource, isDependencySourceState, isDerivedValueParser, isPendingDependencySourceState, isWrappedDependencySource, transformsDependencyValue };
package/dist/index.cjs CHANGED
@@ -11,6 +11,7 @@ const require_primitives = require('./primitives.cjs');
11
11
  const require_parser = require('./parser.cjs');
12
12
  const require_facade = require('./facade.cjs');
13
13
 
14
+ exports.DefaultValues = require_dependency.DefaultValues;
14
15
  exports.DeferredParseMarker = require_dependency.DeferredParseMarker;
15
16
  exports.DependencyId = require_dependency.DependencyId;
16
17
  exports.DependencyIds = require_dependency.DependencyIds;
@@ -23,6 +24,7 @@ exports.ParseWithDependency = require_dependency.ParseWithDependency;
23
24
  exports.PendingDependencySourceStateMarker = require_dependency.PendingDependencySourceStateMarker;
24
25
  exports.RunError = require_facade.RunError;
25
26
  exports.RunParserError = require_facade.RunParserError;
27
+ exports.SuggestWithDependency = require_dependency.SuggestWithDependency;
26
28
  exports.TransformsDependencyValueMarker = require_dependency.TransformsDependencyValueMarker;
27
29
  exports.WithDefaultError = require_modifiers.WithDefaultError;
28
30
  exports.WrappedDependencySourceMarker = require_dependency.WrappedDependencySourceMarker;
package/dist/index.d.cts CHANGED
@@ -5,9 +5,9 @@ import { DocEntry, DocFragment, DocFragments, DocPage, DocPageFormatOptions, Doc
5
5
  import { ChoiceOptions, ChoiceOptionsBase, ChoiceOptionsNumber, ChoiceOptionsString, FloatOptions, IntegerOptionsBigInt, IntegerOptionsNumber, LocaleOptions, StringOptions, UrlOptions, Uuid, UuidOptions, ValueParser, ValueParserResult, choice, float, integer, isValueParser, locale, string, url, uuid } from "./valueparser.cjs";
6
6
  import { ConditionalErrorOptions, ConditionalOptions, DuplicateOptionError, LongestMatchErrorOptions, LongestMatchOptions, MergeOptions, NoMatchContext, ObjectErrorOptions, ObjectOptions, OrErrorOptions, OrOptions, TupleOptions, concat, conditional, group, longestMatch, merge, object, or, tuple } from "./constructs.cjs";
7
7
  import { MultipleErrorOptions, MultipleOptions, WithDefaultError, WithDefaultOptions, map, multiple, optional, withDefault } from "./modifiers.cjs";
8
- import { AnyDependencySource, CombineMode, CombinedDependencyMode, DeferredParseMarker, DeferredParseState, DependencyError, DependencyId, DependencyIds, DependencyMode, DependencyRegistry, DependencySource, DependencySourceMarker, DependencySourceState, DependencySourceStateMarker, DependencyValue, DependencyValues, DeriveAsyncOptions, DeriveFromAsyncOptions, DeriveFromOptions, DeriveFromSyncOptions, DeriveOptions, DeriveSyncOptions, DerivedValueParser, DerivedValueParserMarker, ParseWithDependency, PendingDependencySourceState, PendingDependencySourceStateMarker, ResolvedDependency, TransformsDependencyValueMarker, WrappedDependencySourceMarker, createDeferredParseState, createDependencySourceState, createPendingDependencySourceState, dependency, deriveFrom, deriveFromAsync, deriveFromSync, formatDependencyError, isDeferredParseState, isDependencySource, isDependencySourceState, isDerivedValueParser, isPendingDependencySourceState, isWrappedDependencySource, transformsDependencyValue } from "./dependency.cjs";
8
+ import { AnyDependencySource, CombineMode, CombinedDependencyMode, DefaultValues, DeferredParseMarker, DeferredParseState, DependencyError, DependencyId, DependencyIds, DependencyMode, DependencyRegistry, DependencySource, DependencySourceMarker, DependencySourceState, DependencySourceStateMarker, DependencyValue, DependencyValues, DeriveAsyncOptions, DeriveFromAsyncOptions, DeriveFromOptions, DeriveFromSyncOptions, DeriveOptions, DeriveSyncOptions, DerivedValueParser, DerivedValueParserMarker, ParseWithDependency, PendingDependencySourceState, PendingDependencySourceStateMarker, ResolvedDependency, SuggestWithDependency, TransformsDependencyValueMarker, WrappedDependencySourceMarker, createDeferredParseState, createDependencySourceState, createPendingDependencySourceState, dependency, deriveFrom, deriveFromAsync, deriveFromSync, formatDependencyError, isDeferredParseState, isDependencySource, isDependencySourceState, isDerivedValueParser, isPendingDependencySourceState, isWrappedDependencySource, transformsDependencyValue } from "./dependency.cjs";
9
9
  import { ArgumentErrorOptions, ArgumentOptions, CommandErrorOptions, CommandOptions, FlagErrorOptions, FlagOptions, OptionErrorOptions, OptionOptions, OptionState, PassThroughFormat, PassThroughOptions, argument, command, constant, flag, option, passThrough } from "./primitives.cjs";
10
10
  import { CombineModes, DocState, InferMode, InferValue, Mode, ModeIterable, ModeValue, Parser, ParserContext, ParserResult, Result, Suggestion, getDocPage, getDocPageAsync, getDocPageSync, parse, parseAsync, parseSync, suggest, suggestAsync, suggestSync } from "./parser.cjs";
11
11
  import { ShellCompletion, bash, fish, nu, pwsh, zsh } from "./completion.cjs";
12
12
  import { RunError, RunOptions, RunParserError, run, runParser, runParserAsync, runParserSync } from "./facade.cjs";
13
- export { AnyDependencySource, ArgumentErrorOptions, ArgumentOptions, ChoiceOptions, ChoiceOptionsBase, ChoiceOptionsNumber, ChoiceOptionsString, CombineMode, CombineModes, CombinedDependencyMode, CommandErrorOptions, CommandOptions, ConditionalErrorOptions, ConditionalOptions, DeferredParseMarker, DeferredParseState, DependencyError, DependencyId, DependencyIds, DependencyMode, DependencyRegistry, DependencySource, DependencySourceMarker, DependencySourceState, DependencySourceStateMarker, DependencyValue, DependencyValues, DeriveAsyncOptions, DeriveFromAsyncOptions, DeriveFromOptions, DeriveFromSyncOptions, DeriveOptions, DeriveSyncOptions, DerivedValueParser, DerivedValueParserMarker, DocEntry, DocFragment, DocFragments, DocPage, DocPageFormatOptions, DocSection, DocState, DuplicateOptionError, FlagErrorOptions, FlagOptions, FloatOptions, InferMode, InferValue, IntegerOptionsBigInt, IntegerOptionsNumber, LocaleOptions, LongestMatchErrorOptions, LongestMatchOptions, MergeOptions, Message, MessageFormatOptions, MessageTerm, Mode, ModeIterable, ModeValue, MultipleErrorOptions, MultipleOptions, NoMatchContext, NonEmptyString, ObjectErrorOptions, ObjectOptions, OptionErrorOptions, OptionName, OptionOptions, OptionState, OrErrorOptions, OrOptions, ParseWithDependency, Parser, ParserContext, ParserResult, PassThroughFormat, PassThroughOptions, PendingDependencySourceState, PendingDependencySourceStateMarker, ResolvedDependency, Result, RunError, RunOptions, RunParserError, ShellCompletion, ShowDefaultOptions, StringOptions, Suggestion, TransformsDependencyValueMarker, TupleOptions, UrlOptions, Usage, UsageFormatOptions, UsageTerm, UsageTermFormatOptions, Uuid, UuidOptions, ValueParser, ValueParserResult, ValueSetOptions, WithDefaultError, WithDefaultOptions, WrappedDependencySourceMarker, argument, bash, choice, command, commandLine, concat, conditional, constant, createDeferredParseState, createDependencySourceState, createPendingDependencySourceState, dependency, deriveFrom, deriveFromAsync, deriveFromSync, ensureNonEmptyString, envVar, extractArgumentMetavars, extractCommandNames, extractOptionNames, fish, flag, float, formatDependencyError, formatDocPage, formatMessage, formatUsage, formatUsageTerm, getDocPage, getDocPageAsync, getDocPageSync, group, integer, isDeferredParseState, isDependencySource, isDependencySourceState, isDerivedValueParser, isNonEmptyString, isPendingDependencySourceState, isValueParser, isWrappedDependencySource, locale, longestMatch, map, merge, message, metavar, multiple, normalizeUsage, nu, object, option, optionName, optionNames, optional, or, parse, parseAsync, parseSync, passThrough, pwsh, run, runParser, runParserAsync, runParserSync, string, suggest, suggestAsync, suggestSync, text, transformsDependencyValue, tuple, url, uuid, value, valueSet, values, withDefault, zsh };
13
+ export { AnyDependencySource, ArgumentErrorOptions, ArgumentOptions, ChoiceOptions, ChoiceOptionsBase, ChoiceOptionsNumber, ChoiceOptionsString, CombineMode, CombineModes, CombinedDependencyMode, CommandErrorOptions, CommandOptions, ConditionalErrorOptions, ConditionalOptions, DefaultValues, DeferredParseMarker, DeferredParseState, DependencyError, DependencyId, DependencyIds, DependencyMode, DependencyRegistry, DependencySource, DependencySourceMarker, DependencySourceState, DependencySourceStateMarker, DependencyValue, DependencyValues, DeriveAsyncOptions, DeriveFromAsyncOptions, DeriveFromOptions, DeriveFromSyncOptions, DeriveOptions, DeriveSyncOptions, DerivedValueParser, DerivedValueParserMarker, DocEntry, DocFragment, DocFragments, DocPage, DocPageFormatOptions, DocSection, DocState, DuplicateOptionError, FlagErrorOptions, FlagOptions, FloatOptions, InferMode, InferValue, IntegerOptionsBigInt, IntegerOptionsNumber, LocaleOptions, LongestMatchErrorOptions, LongestMatchOptions, MergeOptions, Message, MessageFormatOptions, MessageTerm, Mode, ModeIterable, ModeValue, MultipleErrorOptions, MultipleOptions, NoMatchContext, NonEmptyString, ObjectErrorOptions, ObjectOptions, OptionErrorOptions, OptionName, OptionOptions, OptionState, OrErrorOptions, OrOptions, ParseWithDependency, Parser, ParserContext, ParserResult, PassThroughFormat, PassThroughOptions, PendingDependencySourceState, PendingDependencySourceStateMarker, ResolvedDependency, Result, RunError, RunOptions, RunParserError, ShellCompletion, ShowDefaultOptions, StringOptions, SuggestWithDependency, Suggestion, TransformsDependencyValueMarker, TupleOptions, UrlOptions, Usage, UsageFormatOptions, UsageTerm, UsageTermFormatOptions, Uuid, UuidOptions, ValueParser, ValueParserResult, ValueSetOptions, WithDefaultError, WithDefaultOptions, WrappedDependencySourceMarker, argument, bash, choice, command, commandLine, concat, conditional, constant, createDeferredParseState, createDependencySourceState, createPendingDependencySourceState, dependency, deriveFrom, deriveFromAsync, deriveFromSync, ensureNonEmptyString, envVar, extractArgumentMetavars, extractCommandNames, extractOptionNames, fish, flag, float, formatDependencyError, formatDocPage, formatMessage, formatUsage, formatUsageTerm, getDocPage, getDocPageAsync, getDocPageSync, group, integer, isDeferredParseState, isDependencySource, isDependencySourceState, isDerivedValueParser, isNonEmptyString, isPendingDependencySourceState, isValueParser, isWrappedDependencySource, locale, longestMatch, map, merge, message, metavar, multiple, normalizeUsage, nu, object, option, optionName, optionNames, optional, or, parse, parseAsync, parseSync, passThrough, pwsh, run, runParser, runParserAsync, runParserSync, string, suggest, suggestAsync, suggestSync, text, transformsDependencyValue, tuple, url, uuid, value, valueSet, values, withDefault, zsh };
package/dist/index.d.ts CHANGED
@@ -5,9 +5,9 @@ import { DocEntry, DocFragment, DocFragments, DocPage, DocPageFormatOptions, Doc
5
5
  import { ChoiceOptions, ChoiceOptionsBase, ChoiceOptionsNumber, ChoiceOptionsString, FloatOptions, IntegerOptionsBigInt, IntegerOptionsNumber, LocaleOptions, StringOptions, UrlOptions, Uuid, UuidOptions, ValueParser, ValueParserResult, choice, float, integer, isValueParser, locale, string, url, uuid } from "./valueparser.js";
6
6
  import { ConditionalErrorOptions, ConditionalOptions, DuplicateOptionError, LongestMatchErrorOptions, LongestMatchOptions, MergeOptions, NoMatchContext, ObjectErrorOptions, ObjectOptions, OrErrorOptions, OrOptions, TupleOptions, concat, conditional, group, longestMatch, merge, object, or, tuple } from "./constructs.js";
7
7
  import { MultipleErrorOptions, MultipleOptions, WithDefaultError, WithDefaultOptions, map, multiple, optional, withDefault } from "./modifiers.js";
8
- import { AnyDependencySource, CombineMode, CombinedDependencyMode, DeferredParseMarker, DeferredParseState, DependencyError, DependencyId, DependencyIds, DependencyMode, DependencyRegistry, DependencySource, DependencySourceMarker, DependencySourceState, DependencySourceStateMarker, DependencyValue, DependencyValues, DeriveAsyncOptions, DeriveFromAsyncOptions, DeriveFromOptions, DeriveFromSyncOptions, DeriveOptions, DeriveSyncOptions, DerivedValueParser, DerivedValueParserMarker, ParseWithDependency, PendingDependencySourceState, PendingDependencySourceStateMarker, ResolvedDependency, TransformsDependencyValueMarker, WrappedDependencySourceMarker, createDeferredParseState, createDependencySourceState, createPendingDependencySourceState, dependency, deriveFrom, deriveFromAsync, deriveFromSync, formatDependencyError, isDeferredParseState, isDependencySource, isDependencySourceState, isDerivedValueParser, isPendingDependencySourceState, isWrappedDependencySource, transformsDependencyValue } from "./dependency.js";
8
+ import { AnyDependencySource, CombineMode, CombinedDependencyMode, DefaultValues, DeferredParseMarker, DeferredParseState, DependencyError, DependencyId, DependencyIds, DependencyMode, DependencyRegistry, DependencySource, DependencySourceMarker, DependencySourceState, DependencySourceStateMarker, DependencyValue, DependencyValues, DeriveAsyncOptions, DeriveFromAsyncOptions, DeriveFromOptions, DeriveFromSyncOptions, DeriveOptions, DeriveSyncOptions, DerivedValueParser, DerivedValueParserMarker, ParseWithDependency, PendingDependencySourceState, PendingDependencySourceStateMarker, ResolvedDependency, SuggestWithDependency, TransformsDependencyValueMarker, WrappedDependencySourceMarker, createDeferredParseState, createDependencySourceState, createPendingDependencySourceState, dependency, deriveFrom, deriveFromAsync, deriveFromSync, formatDependencyError, isDeferredParseState, isDependencySource, isDependencySourceState, isDerivedValueParser, isPendingDependencySourceState, isWrappedDependencySource, transformsDependencyValue } from "./dependency.js";
9
9
  import { ArgumentErrorOptions, ArgumentOptions, CommandErrorOptions, CommandOptions, FlagErrorOptions, FlagOptions, OptionErrorOptions, OptionOptions, OptionState, PassThroughFormat, PassThroughOptions, argument, command, constant, flag, option, passThrough } from "./primitives.js";
10
10
  import { CombineModes, DocState, InferMode, InferValue, Mode, ModeIterable, ModeValue, Parser, ParserContext, ParserResult, Result, Suggestion, getDocPage, getDocPageAsync, getDocPageSync, parse, parseAsync, parseSync, suggest, suggestAsync, suggestSync } from "./parser.js";
11
11
  import { ShellCompletion, bash, fish, nu, pwsh, zsh } from "./completion.js";
12
12
  import { RunError, RunOptions, RunParserError, run, runParser, runParserAsync, runParserSync } from "./facade.js";
13
- export { AnyDependencySource, ArgumentErrorOptions, ArgumentOptions, ChoiceOptions, ChoiceOptionsBase, ChoiceOptionsNumber, ChoiceOptionsString, CombineMode, CombineModes, CombinedDependencyMode, CommandErrorOptions, CommandOptions, ConditionalErrorOptions, ConditionalOptions, DeferredParseMarker, DeferredParseState, DependencyError, DependencyId, DependencyIds, DependencyMode, DependencyRegistry, DependencySource, DependencySourceMarker, DependencySourceState, DependencySourceStateMarker, DependencyValue, DependencyValues, DeriveAsyncOptions, DeriveFromAsyncOptions, DeriveFromOptions, DeriveFromSyncOptions, DeriveOptions, DeriveSyncOptions, DerivedValueParser, DerivedValueParserMarker, DocEntry, DocFragment, DocFragments, DocPage, DocPageFormatOptions, DocSection, DocState, DuplicateOptionError, FlagErrorOptions, FlagOptions, FloatOptions, InferMode, InferValue, IntegerOptionsBigInt, IntegerOptionsNumber, LocaleOptions, LongestMatchErrorOptions, LongestMatchOptions, MergeOptions, Message, MessageFormatOptions, MessageTerm, Mode, ModeIterable, ModeValue, MultipleErrorOptions, MultipleOptions, NoMatchContext, NonEmptyString, ObjectErrorOptions, ObjectOptions, OptionErrorOptions, OptionName, OptionOptions, OptionState, OrErrorOptions, OrOptions, ParseWithDependency, Parser, ParserContext, ParserResult, PassThroughFormat, PassThroughOptions, PendingDependencySourceState, PendingDependencySourceStateMarker, ResolvedDependency, Result, RunError, RunOptions, RunParserError, ShellCompletion, ShowDefaultOptions, StringOptions, Suggestion, TransformsDependencyValueMarker, TupleOptions, UrlOptions, Usage, UsageFormatOptions, UsageTerm, UsageTermFormatOptions, Uuid, UuidOptions, ValueParser, ValueParserResult, ValueSetOptions, WithDefaultError, WithDefaultOptions, WrappedDependencySourceMarker, argument, bash, choice, command, commandLine, concat, conditional, constant, createDeferredParseState, createDependencySourceState, createPendingDependencySourceState, dependency, deriveFrom, deriveFromAsync, deriveFromSync, ensureNonEmptyString, envVar, extractArgumentMetavars, extractCommandNames, extractOptionNames, fish, flag, float, formatDependencyError, formatDocPage, formatMessage, formatUsage, formatUsageTerm, getDocPage, getDocPageAsync, getDocPageSync, group, integer, isDeferredParseState, isDependencySource, isDependencySourceState, isDerivedValueParser, isNonEmptyString, isPendingDependencySourceState, isValueParser, isWrappedDependencySource, locale, longestMatch, map, merge, message, metavar, multiple, normalizeUsage, nu, object, option, optionName, optionNames, optional, or, parse, parseAsync, parseSync, passThrough, pwsh, run, runParser, runParserAsync, runParserSync, string, suggest, suggestAsync, suggestSync, text, transformsDependencyValue, tuple, url, uuid, value, valueSet, values, withDefault, zsh };
13
+ export { AnyDependencySource, ArgumentErrorOptions, ArgumentOptions, ChoiceOptions, ChoiceOptionsBase, ChoiceOptionsNumber, ChoiceOptionsString, CombineMode, CombineModes, CombinedDependencyMode, CommandErrorOptions, CommandOptions, ConditionalErrorOptions, ConditionalOptions, DefaultValues, DeferredParseMarker, DeferredParseState, DependencyError, DependencyId, DependencyIds, DependencyMode, DependencyRegistry, DependencySource, DependencySourceMarker, DependencySourceState, DependencySourceStateMarker, DependencyValue, DependencyValues, DeriveAsyncOptions, DeriveFromAsyncOptions, DeriveFromOptions, DeriveFromSyncOptions, DeriveOptions, DeriveSyncOptions, DerivedValueParser, DerivedValueParserMarker, DocEntry, DocFragment, DocFragments, DocPage, DocPageFormatOptions, DocSection, DocState, DuplicateOptionError, FlagErrorOptions, FlagOptions, FloatOptions, InferMode, InferValue, IntegerOptionsBigInt, IntegerOptionsNumber, LocaleOptions, LongestMatchErrorOptions, LongestMatchOptions, MergeOptions, Message, MessageFormatOptions, MessageTerm, Mode, ModeIterable, ModeValue, MultipleErrorOptions, MultipleOptions, NoMatchContext, NonEmptyString, ObjectErrorOptions, ObjectOptions, OptionErrorOptions, OptionName, OptionOptions, OptionState, OrErrorOptions, OrOptions, ParseWithDependency, Parser, ParserContext, ParserResult, PassThroughFormat, PassThroughOptions, PendingDependencySourceState, PendingDependencySourceStateMarker, ResolvedDependency, Result, RunError, RunOptions, RunParserError, ShellCompletion, ShowDefaultOptions, StringOptions, SuggestWithDependency, Suggestion, TransformsDependencyValueMarker, TupleOptions, UrlOptions, Usage, UsageFormatOptions, UsageTerm, UsageTermFormatOptions, Uuid, UuidOptions, ValueParser, ValueParserResult, ValueSetOptions, WithDefaultError, WithDefaultOptions, WrappedDependencySourceMarker, argument, bash, choice, command, commandLine, concat, conditional, constant, createDeferredParseState, createDependencySourceState, createPendingDependencySourceState, dependency, deriveFrom, deriveFromAsync, deriveFromSync, ensureNonEmptyString, envVar, extractArgumentMetavars, extractCommandNames, extractOptionNames, fish, flag, float, formatDependencyError, formatDocPage, formatMessage, formatUsage, formatUsageTerm, getDocPage, getDocPageAsync, getDocPageSync, group, integer, isDeferredParseState, isDependencySource, isDependencySourceState, isDerivedValueParser, isNonEmptyString, isPendingDependencySourceState, isValueParser, isWrappedDependencySource, locale, longestMatch, map, merge, message, metavar, multiple, normalizeUsage, nu, object, option, optionName, optionNames, optional, or, parse, parseAsync, parseSync, passThrough, pwsh, run, runParser, runParserAsync, runParserSync, string, suggest, suggestAsync, suggestSync, text, transformsDependencyValue, tuple, url, uuid, value, valueSet, values, withDefault, zsh };
package/dist/index.js CHANGED
@@ -1,6 +1,6 @@
1
1
  import { commandLine, envVar, formatMessage, message, metavar, optionName, optionNames, text, value, valueSet, values } from "./message.js";
2
2
  import { bash, fish, nu, pwsh, zsh } from "./completion.js";
3
- import { DeferredParseMarker, DependencyId, DependencyIds, DependencyRegistry, DependencySourceMarker, DependencySourceStateMarker, DerivedValueParserMarker, ParseWithDependency, PendingDependencySourceStateMarker, TransformsDependencyValueMarker, WrappedDependencySourceMarker, createDeferredParseState, createDependencySourceState, createPendingDependencySourceState, dependency, deriveFrom, deriveFromAsync, deriveFromSync, formatDependencyError, isDeferredParseState, isDependencySource, isDependencySourceState, isDerivedValueParser, isPendingDependencySourceState, isWrappedDependencySource, transformsDependencyValue } from "./dependency.js";
3
+ import { DefaultValues, DeferredParseMarker, DependencyId, DependencyIds, DependencyRegistry, DependencySourceMarker, DependencySourceStateMarker, DerivedValueParserMarker, ParseWithDependency, PendingDependencySourceStateMarker, SuggestWithDependency, TransformsDependencyValueMarker, WrappedDependencySourceMarker, createDeferredParseState, createDependencySourceState, createPendingDependencySourceState, dependency, deriveFrom, deriveFromAsync, deriveFromSync, formatDependencyError, isDeferredParseState, isDependencySource, isDependencySourceState, isDerivedValueParser, isPendingDependencySourceState, isWrappedDependencySource, transformsDependencyValue } from "./dependency.js";
4
4
  import { extractArgumentMetavars, extractCommandNames, extractOptionNames, formatUsage, formatUsageTerm, normalizeUsage } from "./usage.js";
5
5
  import { DuplicateOptionError, concat, conditional, group, longestMatch, merge, object, or, tuple } from "./constructs.js";
6
6
  import { formatDocPage } from "./doc.js";
@@ -11,4 +11,4 @@ import { argument, command, constant, flag, option, passThrough } from "./primit
11
11
  import { getDocPage, getDocPageAsync, getDocPageSync, parse, parseAsync, parseSync, suggest, suggestAsync, suggestSync } from "./parser.js";
12
12
  import { RunError, RunParserError, run, runParser, runParserAsync, runParserSync } from "./facade.js";
13
13
 
14
- export { DeferredParseMarker, DependencyId, DependencyIds, DependencyRegistry, DependencySourceMarker, DependencySourceStateMarker, DerivedValueParserMarker, DuplicateOptionError, ParseWithDependency, PendingDependencySourceStateMarker, RunError, RunParserError, TransformsDependencyValueMarker, WithDefaultError, WrappedDependencySourceMarker, argument, bash, choice, command, commandLine, concat, conditional, constant, createDeferredParseState, createDependencySourceState, createPendingDependencySourceState, dependency, deriveFrom, deriveFromAsync, deriveFromSync, ensureNonEmptyString, envVar, extractArgumentMetavars, extractCommandNames, extractOptionNames, fish, flag, float, formatDependencyError, formatDocPage, formatMessage, formatUsage, formatUsageTerm, getDocPage, getDocPageAsync, getDocPageSync, group, integer, isDeferredParseState, isDependencySource, isDependencySourceState, isDerivedValueParser, isNonEmptyString, isPendingDependencySourceState, isValueParser, isWrappedDependencySource, locale, longestMatch, map, merge, message, metavar, multiple, normalizeUsage, nu, object, option, optionName, optionNames, optional, or, parse, parseAsync, parseSync, passThrough, pwsh, run, runParser, runParserAsync, runParserSync, string, suggest, suggestAsync, suggestSync, text, transformsDependencyValue, tuple, url, uuid, value, valueSet, values, withDefault, zsh };
14
+ export { DefaultValues, DeferredParseMarker, DependencyId, DependencyIds, DependencyRegistry, DependencySourceMarker, DependencySourceStateMarker, DerivedValueParserMarker, DuplicateOptionError, ParseWithDependency, PendingDependencySourceStateMarker, RunError, RunParserError, SuggestWithDependency, TransformsDependencyValueMarker, WithDefaultError, WrappedDependencySourceMarker, argument, bash, choice, command, commandLine, concat, conditional, constant, createDeferredParseState, createDependencySourceState, createPendingDependencySourceState, dependency, deriveFrom, deriveFromAsync, deriveFromSync, ensureNonEmptyString, envVar, extractArgumentMetavars, extractCommandNames, extractOptionNames, fish, flag, float, formatDependencyError, formatDocPage, formatMessage, formatUsage, formatUsageTerm, getDocPage, getDocPageAsync, getDocPageSync, group, integer, isDeferredParseState, isDependencySource, isDependencySourceState, isDerivedValueParser, isNonEmptyString, isPendingDependencySourceState, isValueParser, isWrappedDependencySource, locale, longestMatch, map, merge, message, metavar, multiple, normalizeUsage, nu, object, option, optionName, optionNames, optional, or, parse, parseAsync, parseSync, passThrough, pwsh, run, runParser, runParserAsync, runParserSync, string, suggest, suggestAsync, suggestSync, text, transformsDependencyValue, tuple, url, uuid, value, valueSet, values, withDefault, zsh };
package/dist/parser.d.cts CHANGED
@@ -187,6 +187,15 @@ interface ParserContext<TState> {
187
187
  * @since 0.7.0
188
188
  */
189
189
  readonly usage: Usage;
190
+ /**
191
+ * A registry containing resolved dependency values from DependencySource parsers.
192
+ * This is used during shell completion to provide suggestions based on
193
+ * the actual dependency values that have been parsed, rather than defaults.
194
+ * The type is `unknown` to avoid circular dependency issues; the actual type
195
+ * is `DependencyRegistry` from `./dependency.ts`.
196
+ * @since 0.10.0
197
+ */
198
+ readonly dependencyRegistry?: unknown;
190
199
  }
191
200
  /**
192
201
  * Represents a suggestion for command-line completion or guidance.
package/dist/parser.d.ts CHANGED
@@ -187,6 +187,15 @@ interface ParserContext<TState> {
187
187
  * @since 0.7.0
188
188
  */
189
189
  readonly usage: Usage;
190
+ /**
191
+ * A registry containing resolved dependency values from DependencySource parsers.
192
+ * This is used during shell completion to provide suggestions based on
193
+ * the actual dependency values that have been parsed, rather than defaults.
194
+ * The type is `unknown` to avoid circular dependency issues; the actual type
195
+ * is `DependencyRegistry` from `./dependency.ts`.
196
+ * @since 0.10.0
197
+ */
198
+ readonly dependencyRegistry?: unknown;
190
199
  }
191
200
  /**
192
201
  * Represents a suggestion for command-line completion or guidance.
@@ -53,6 +53,42 @@ function constant(value) {
53
53
  };
54
54
  }
55
55
  /**
56
+ * Internal helper to get suggestions from a value parser, using dependency values
57
+ * if the parser is a derived parser and dependency values are available.
58
+ * @internal
59
+ */
60
+ function* getSuggestionsWithDependency(valueParser, prefix, dependencyRegistry) {
61
+ if (!valueParser.suggest) return;
62
+ if (require_dependency.isDerivedValueParser(valueParser) && require_dependency.SuggestWithDependency in valueParser) {
63
+ const derived = valueParser;
64
+ const suggestWithDep = derived[require_dependency.SuggestWithDependency];
65
+ if (suggestWithDep && dependencyRegistry) {
66
+ const depIds = require_dependency.DependencyIds in derived ? derived[require_dependency.DependencyIds] : [derived[require_dependency.DependencyId]];
67
+ const defaults = require_dependency.DefaultValues in derived ? derived[require_dependency.DefaultValues]?.() : void 0;
68
+ const registry = dependencyRegistry;
69
+ const dependencyValues = [];
70
+ let hasAnyValue = false;
71
+ for (let i = 0; i < depIds.length; i++) {
72
+ const depId = depIds[i];
73
+ if (registry.has(depId)) {
74
+ dependencyValues.push(registry.get(depId));
75
+ hasAnyValue = true;
76
+ } else if (defaults && i < defaults.length) dependencyValues.push(defaults[i]);
77
+ else {
78
+ yield* valueParser.suggest(prefix);
79
+ return;
80
+ }
81
+ }
82
+ if (hasAnyValue) {
83
+ const depValue = depIds.length === 1 ? dependencyValues[0] : dependencyValues;
84
+ yield* suggestWithDep(prefix, depValue);
85
+ return;
86
+ }
87
+ }
88
+ }
89
+ yield* valueParser.suggest(prefix);
90
+ }
91
+ /**
56
92
  * Internal sync helper for option suggest functionality.
57
93
  * @internal
58
94
  */
@@ -64,7 +100,7 @@ function* suggestOptionSync(optionNames$1, valueParser, hidden, context, prefix)
64
100
  const valuePart = prefix.slice(equalsIndex + 1);
65
101
  if (optionNames$1.includes(optionPart)) {
66
102
  if (valueParser && valueParser.suggest) {
67
- const valueSuggestions = valueParser.suggest(valuePart);
103
+ const valueSuggestions = getSuggestionsWithDependency(valueParser, valuePart, context.dependencyRegistry);
68
104
  for (const suggestion of valueSuggestions) if (suggestion.kind === "literal") yield {
69
105
  kind: "literal",
70
106
  text: `${optionPart}=${suggestion.text}`,
@@ -93,9 +129,45 @@ function* suggestOptionSync(optionNames$1, valueParser, hidden, context, prefix)
93
129
  const lastToken = context.buffer[context.buffer.length - 1];
94
130
  if (optionNames$1.includes(lastToken)) shouldSuggestValues = true;
95
131
  } else if (context.state === void 0 && context.buffer.length === 0) shouldSuggestValues = true;
96
- if (shouldSuggestValues) yield* valueParser.suggest(prefix);
132
+ if (shouldSuggestValues) yield* getSuggestionsWithDependency(valueParser, prefix, context.dependencyRegistry);
133
+ }
134
+ }
135
+ }
136
+ /**
137
+ * Internal async helper to get suggestions from a value parser, using dependency values
138
+ * if the parser is a derived parser and dependency values are available.
139
+ * @internal
140
+ */
141
+ async function* getSuggestionsWithDependencyAsync(valueParser, prefix, dependencyRegistry) {
142
+ if (!valueParser.suggest) return;
143
+ if (require_dependency.isDerivedValueParser(valueParser) && require_dependency.SuggestWithDependency in valueParser) {
144
+ const derived = valueParser;
145
+ const suggestWithDep = derived[require_dependency.SuggestWithDependency];
146
+ if (suggestWithDep && dependencyRegistry) {
147
+ const depIds = require_dependency.DependencyIds in derived ? derived[require_dependency.DependencyIds] : [derived[require_dependency.DependencyId]];
148
+ const defaults = require_dependency.DefaultValues in derived ? derived[require_dependency.DefaultValues]?.() : void 0;
149
+ const registry = dependencyRegistry;
150
+ const dependencyValues = [];
151
+ let hasAnyValue = false;
152
+ for (let i = 0; i < depIds.length; i++) {
153
+ const depId = depIds[i];
154
+ if (registry.has(depId)) {
155
+ dependencyValues.push(registry.get(depId));
156
+ hasAnyValue = true;
157
+ } else if (defaults && i < defaults.length) dependencyValues.push(defaults[i]);
158
+ else {
159
+ for await (const suggestion of valueParser.suggest(prefix)) yield suggestion;
160
+ return;
161
+ }
162
+ }
163
+ if (hasAnyValue) {
164
+ const depValue = depIds.length === 1 ? dependencyValues[0] : dependencyValues;
165
+ for await (const suggestion of suggestWithDep(prefix, depValue)) yield suggestion;
166
+ return;
167
+ }
97
168
  }
98
169
  }
170
+ for await (const suggestion of valueParser.suggest(prefix)) yield suggestion;
99
171
  }
100
172
  /**
101
173
  * Internal async helper for option suggest functionality.
@@ -109,7 +181,7 @@ async function* suggestOptionAsync(optionNames$1, valueParser, hidden, context,
109
181
  const valuePart = prefix.slice(equalsIndex + 1);
110
182
  if (optionNames$1.includes(optionPart)) {
111
183
  if (valueParser && valueParser.suggest) {
112
- const valueSuggestions = valueParser.suggest(valuePart);
184
+ const valueSuggestions = getSuggestionsWithDependencyAsync(valueParser, valuePart, context.dependencyRegistry);
113
185
  for await (const suggestion of valueSuggestions) if (suggestion.kind === "literal") yield {
114
186
  kind: "literal",
115
187
  text: `${optionPart}=${suggestion.text}`,
@@ -138,7 +210,7 @@ async function* suggestOptionAsync(optionNames$1, valueParser, hidden, context,
138
210
  const lastToken = context.buffer[context.buffer.length - 1];
139
211
  if (optionNames$1.includes(lastToken)) shouldSuggestValues = true;
140
212
  } else if (context.state === void 0 && context.buffer.length === 0) shouldSuggestValues = true;
141
- if (shouldSuggestValues) for await (const suggestion of valueParser.suggest(prefix)) yield suggestion;
213
+ if (shouldSuggestValues) for await (const suggestion of getSuggestionsWithDependencyAsync(valueParser, prefix, context.dependencyRegistry)) yield suggestion;
142
214
  }
143
215
  }
144
216
  }
@@ -146,17 +218,17 @@ async function* suggestOptionAsync(optionNames$1, valueParser, hidden, context,
146
218
  * Internal sync helper for argument suggest functionality.
147
219
  * @internal
148
220
  */
149
- function* suggestArgumentSync(valueParser, hidden, prefix) {
221
+ function* suggestArgumentSync(valueParser, hidden, prefix, dependencyRegistry) {
150
222
  if (hidden) return;
151
- if (valueParser.suggest) yield* valueParser.suggest(prefix);
223
+ if (valueParser.suggest) yield* getSuggestionsWithDependency(valueParser, prefix, dependencyRegistry);
152
224
  }
153
225
  /**
154
226
  * Internal async helper for argument suggest functionality.
155
227
  * @internal
156
228
  */
157
- async function* suggestArgumentAsync(valueParser, hidden, prefix) {
229
+ async function* suggestArgumentAsync(valueParser, hidden, prefix, dependencyRegistry) {
158
230
  if (hidden) return;
159
- if (valueParser.suggest) for await (const suggestion of valueParser.suggest(prefix)) yield suggestion;
231
+ if (valueParser.suggest) yield* getSuggestionsWithDependencyAsync(valueParser, prefix, dependencyRegistry);
160
232
  }
161
233
  function option(...args) {
162
234
  const lastArg = args.at(-1);
@@ -709,9 +781,9 @@ function argument(valueParser, options = {}) {
709
781
  error: options.errors?.invalidValue ? typeof options.errors.invalidValue === "function" ? options.errors.invalidValue(state.error) : options.errors.invalidValue : require_message.message`${require_message.metavar(valueParser.metavar)}: ${state.error}`
710
782
  };
711
783
  },
712
- suggest(_context, prefix) {
713
- if (isAsync) return suggestArgumentAsync(valueParser, options.hidden ?? false, prefix);
714
- return suggestArgumentSync(valueParser, options.hidden ?? false, prefix);
784
+ suggest(context, prefix) {
785
+ if (isAsync) return suggestArgumentAsync(valueParser, options.hidden ?? false, prefix, context.dependencyRegistry);
786
+ return suggestArgumentSync(valueParser, options.hidden ?? false, prefix, context.dependencyRegistry);
715
787
  },
716
788
  getDocFragments(_state, defaultValue) {
717
789
  if (options.hidden) return {