@optique/core 1.0.0-dev.1533 → 1.0.0-dev.1547

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.
@@ -9,6 +9,43 @@ const require_suggestion = require('./suggestion.cjs');
9
9
  const require_usage_internals = require('./usage-internals.cjs');
10
10
 
11
11
  //#region src/constructs.ts
12
+ /**
13
+ * A shared empty set used as the `leadingNames` value for parsers that
14
+ * do not match any specific name at the first buffer position.
15
+ */
16
+ const EMPTY_LEADING_NAMES = /* @__PURE__ */ new Set();
17
+ /**
18
+ * Computes the union of `leadingNames` from all given parsers.
19
+ * Used for alternative combinators (`or()`, `longestMatch()`) where all
20
+ * branches compete independently.
21
+ */
22
+ function unionLeadingNames(parsers) {
23
+ const names = /* @__PURE__ */ new Set();
24
+ for (const p of parsers) for (const name of p.leadingNames) names.add(name);
25
+ return names.size === 0 ? EMPTY_LEADING_NAMES : names;
26
+ }
27
+ /**
28
+ * Computes `leadingNames` for shared-buffer compositions (`tuple()`,
29
+ * `object()`, `merge()`, `concat()`).
30
+ *
31
+ * Children are processed in descending priority order (matching the
32
+ * round-robin parse loop). Once a child with `acceptingAnyToken` is
33
+ * encountered, no lower-priority children can match at position 0, so
34
+ * their names are excluded.
35
+ */
36
+ function sharedBufferLeadingNames(parsers) {
37
+ const sorted = parsers.toSorted((a, b) => b.priority - a.priority);
38
+ const names = /* @__PURE__ */ new Set();
39
+ let positionalBlocked = false;
40
+ for (const p of sorted) {
41
+ if (p.leadingNames) for (const name of p.leadingNames) {
42
+ if (positionalBlocked && !name.startsWith("-")) continue;
43
+ names.add(name);
44
+ }
45
+ if (p.acceptingAnyToken) positionalBlocked = true;
46
+ }
47
+ return names.size === 0 ? EMPTY_LEADING_NAMES : names;
48
+ }
12
49
  const inheritParentAnnotationsKey = Symbol.for("@optique/core/inheritParentAnnotations");
13
50
  /**
14
51
  * Internal symbol for exposing field-level parser pairs from `object()`
@@ -463,6 +500,8 @@ function or(...args) {
463
500
  type: "exclusive",
464
501
  terms: parsers.map((p) => p.usage)
465
502
  }],
503
+ leadingNames: unionLeadingNames(parsers),
504
+ acceptingAnyToken: parsers.some((p) => p.acceptingAnyToken),
466
505
  initialState: void 0,
467
506
  complete: createExclusiveComplete(parsers, options, noMatchContext, combinedMode),
468
507
  parse(context) {
@@ -600,6 +639,8 @@ function longestMatch(...args) {
600
639
  type: "exclusive",
601
640
  terms: parsers.map((p) => p.usage)
602
641
  }],
642
+ leadingNames: unionLeadingNames(parsers),
643
+ acceptingAnyToken: parsers.some((p) => p.acceptingAnyToken),
603
644
  initialState: void 0,
604
645
  complete: createExclusiveComplete(parsers, options, noMatchContext, combinedMode),
605
646
  parse(context) {
@@ -1185,6 +1226,8 @@ function object(labelOrParsers, maybeParsersOrOptions, maybeOptions) {
1185
1226
  [fieldParsersKey]: parserPairs,
1186
1227
  priority: Math.max(...parserKeys.map((k) => parsers[k].priority)),
1187
1228
  usage: applyHiddenToUsage(parserPairs.flatMap(([_, p]) => p.usage), options.hidden),
1229
+ leadingNames: sharedBufferLeadingNames(parserPairs.map(([_, p]) => p)),
1230
+ acceptingAnyToken: parserPairs.some(([_, p]) => p.acceptingAnyToken),
1188
1231
  get initialState() {
1189
1232
  return createInitialState();
1190
1233
  },
@@ -1556,6 +1599,8 @@ function tuple(labelOrParsers, maybeParsersOrOptions, maybeOptions) {
1556
1599
  $valueType: [],
1557
1600
  $stateType: [],
1558
1601
  usage: parsers.toSorted((a, b) => b.priority - a.priority).flatMap((p) => p.usage),
1602
+ leadingNames: sharedBufferLeadingNames(parsers),
1603
+ acceptingAnyToken: parsers.some((p) => p.acceptingAnyToken),
1559
1604
  priority: parsers.length > 0 ? Math.max(...parsers.map((p) => p.priority)) : 0,
1560
1605
  initialState: parsers.map((parser) => parser.initialState),
1561
1606
  parse(context) {
@@ -1877,6 +1922,8 @@ function merge(...args) {
1877
1922
  [fieldParsersKey]: mergedFieldParsers,
1878
1923
  priority: Math.max(...parsers.map((p) => p.priority)),
1879
1924
  usage: applyHiddenToUsage(parsers.flatMap((p) => p.usage), options.hidden),
1925
+ leadingNames: sharedBufferLeadingNames(parsers),
1926
+ acceptingAnyToken: parsers.some((p) => p.acceptingAnyToken),
1880
1927
  initialState,
1881
1928
  parse(context) {
1882
1929
  if (isAsync) return parseAsync(context);
@@ -2415,6 +2462,8 @@ function concat(...parsers) {
2415
2462
  $stateType: [],
2416
2463
  priority: parsers.length > 0 ? Math.max(...parsers.map((p) => p.priority)) : 0,
2417
2464
  usage: parsers.flatMap((p) => p.usage),
2465
+ leadingNames: sharedBufferLeadingNames(parsers),
2466
+ acceptingAnyToken: parsers.some((p) => p.acceptingAnyToken),
2418
2467
  initialState,
2419
2468
  parse(context) {
2420
2469
  if (isAsync) return parseAsync(context);
@@ -2492,6 +2541,8 @@ function group(label, parser, options = {}) {
2492
2541
  $stateType: parser.$stateType,
2493
2542
  priority: parser.priority,
2494
2543
  usage: applyHiddenToUsage(parser.usage, options.hidden),
2544
+ leadingNames: parser.leadingNames,
2545
+ acceptingAnyToken: parser.acceptingAnyToken,
2495
2546
  initialState: parser.initialState,
2496
2547
  ...fieldParsersKey in parser ? { [fieldParsersKey]: parser[fieldParsersKey] } : {},
2497
2548
  ...typeof parser.shouldDeferCompletion === "function" ? { shouldDeferCompletion: parser.shouldDeferCompletion.bind(parser) } : {},
@@ -2976,6 +3027,8 @@ function conditional(discriminator, branches, defaultBranch, options) {
2976
3027
  $stateType: [],
2977
3028
  priority: maxPriority,
2978
3029
  usage,
3030
+ leadingNames: defaultBranch ? unionLeadingNames([discriminator, defaultBranch]) : discriminator.leadingNames,
3031
+ acceptingAnyToken: defaultBranch?.acceptingAnyToken ?? false,
2979
3032
  initialState,
2980
3033
  parse(context) {
2981
3034
  if (isAsync) return parseAsync(context);
@@ -9,6 +9,43 @@ import { DEFAULT_FIND_SIMILAR_OPTIONS, createErrorWithSuggestions, createSuggest
9
9
  import { collectLeadingCandidates } from "./usage-internals.js";
10
10
 
11
11
  //#region src/constructs.ts
12
+ /**
13
+ * A shared empty set used as the `leadingNames` value for parsers that
14
+ * do not match any specific name at the first buffer position.
15
+ */
16
+ const EMPTY_LEADING_NAMES = /* @__PURE__ */ new Set();
17
+ /**
18
+ * Computes the union of `leadingNames` from all given parsers.
19
+ * Used for alternative combinators (`or()`, `longestMatch()`) where all
20
+ * branches compete independently.
21
+ */
22
+ function unionLeadingNames(parsers) {
23
+ const names = /* @__PURE__ */ new Set();
24
+ for (const p of parsers) for (const name of p.leadingNames) names.add(name);
25
+ return names.size === 0 ? EMPTY_LEADING_NAMES : names;
26
+ }
27
+ /**
28
+ * Computes `leadingNames` for shared-buffer compositions (`tuple()`,
29
+ * `object()`, `merge()`, `concat()`).
30
+ *
31
+ * Children are processed in descending priority order (matching the
32
+ * round-robin parse loop). Once a child with `acceptingAnyToken` is
33
+ * encountered, no lower-priority children can match at position 0, so
34
+ * their names are excluded.
35
+ */
36
+ function sharedBufferLeadingNames(parsers) {
37
+ const sorted = parsers.toSorted((a, b) => b.priority - a.priority);
38
+ const names = /* @__PURE__ */ new Set();
39
+ let positionalBlocked = false;
40
+ for (const p of sorted) {
41
+ if (p.leadingNames) for (const name of p.leadingNames) {
42
+ if (positionalBlocked && !name.startsWith("-")) continue;
43
+ names.add(name);
44
+ }
45
+ if (p.acceptingAnyToken) positionalBlocked = true;
46
+ }
47
+ return names.size === 0 ? EMPTY_LEADING_NAMES : names;
48
+ }
12
49
  const inheritParentAnnotationsKey = Symbol.for("@optique/core/inheritParentAnnotations");
13
50
  /**
14
51
  * Internal symbol for exposing field-level parser pairs from `object()`
@@ -463,6 +500,8 @@ function or(...args) {
463
500
  type: "exclusive",
464
501
  terms: parsers.map((p) => p.usage)
465
502
  }],
503
+ leadingNames: unionLeadingNames(parsers),
504
+ acceptingAnyToken: parsers.some((p) => p.acceptingAnyToken),
466
505
  initialState: void 0,
467
506
  complete: createExclusiveComplete(parsers, options, noMatchContext, combinedMode),
468
507
  parse(context) {
@@ -600,6 +639,8 @@ function longestMatch(...args) {
600
639
  type: "exclusive",
601
640
  terms: parsers.map((p) => p.usage)
602
641
  }],
642
+ leadingNames: unionLeadingNames(parsers),
643
+ acceptingAnyToken: parsers.some((p) => p.acceptingAnyToken),
603
644
  initialState: void 0,
604
645
  complete: createExclusiveComplete(parsers, options, noMatchContext, combinedMode),
605
646
  parse(context) {
@@ -1185,6 +1226,8 @@ function object(labelOrParsers, maybeParsersOrOptions, maybeOptions) {
1185
1226
  [fieldParsersKey]: parserPairs,
1186
1227
  priority: Math.max(...parserKeys.map((k) => parsers[k].priority)),
1187
1228
  usage: applyHiddenToUsage(parserPairs.flatMap(([_, p]) => p.usage), options.hidden),
1229
+ leadingNames: sharedBufferLeadingNames(parserPairs.map(([_, p]) => p)),
1230
+ acceptingAnyToken: parserPairs.some(([_, p]) => p.acceptingAnyToken),
1188
1231
  get initialState() {
1189
1232
  return createInitialState();
1190
1233
  },
@@ -1556,6 +1599,8 @@ function tuple(labelOrParsers, maybeParsersOrOptions, maybeOptions) {
1556
1599
  $valueType: [],
1557
1600
  $stateType: [],
1558
1601
  usage: parsers.toSorted((a, b) => b.priority - a.priority).flatMap((p) => p.usage),
1602
+ leadingNames: sharedBufferLeadingNames(parsers),
1603
+ acceptingAnyToken: parsers.some((p) => p.acceptingAnyToken),
1559
1604
  priority: parsers.length > 0 ? Math.max(...parsers.map((p) => p.priority)) : 0,
1560
1605
  initialState: parsers.map((parser) => parser.initialState),
1561
1606
  parse(context) {
@@ -1877,6 +1922,8 @@ function merge(...args) {
1877
1922
  [fieldParsersKey]: mergedFieldParsers,
1878
1923
  priority: Math.max(...parsers.map((p) => p.priority)),
1879
1924
  usage: applyHiddenToUsage(parsers.flatMap((p) => p.usage), options.hidden),
1925
+ leadingNames: sharedBufferLeadingNames(parsers),
1926
+ acceptingAnyToken: parsers.some((p) => p.acceptingAnyToken),
1880
1927
  initialState,
1881
1928
  parse(context) {
1882
1929
  if (isAsync) return parseAsync(context);
@@ -2415,6 +2462,8 @@ function concat(...parsers) {
2415
2462
  $stateType: [],
2416
2463
  priority: parsers.length > 0 ? Math.max(...parsers.map((p) => p.priority)) : 0,
2417
2464
  usage: parsers.flatMap((p) => p.usage),
2465
+ leadingNames: sharedBufferLeadingNames(parsers),
2466
+ acceptingAnyToken: parsers.some((p) => p.acceptingAnyToken),
2418
2467
  initialState,
2419
2468
  parse(context) {
2420
2469
  if (isAsync) return parseAsync(context);
@@ -2492,6 +2541,8 @@ function group(label, parser, options = {}) {
2492
2541
  $stateType: parser.$stateType,
2493
2542
  priority: parser.priority,
2494
2543
  usage: applyHiddenToUsage(parser.usage, options.hidden),
2544
+ leadingNames: parser.leadingNames,
2545
+ acceptingAnyToken: parser.acceptingAnyToken,
2495
2546
  initialState: parser.initialState,
2496
2547
  ...fieldParsersKey in parser ? { [fieldParsersKey]: parser[fieldParsersKey] } : {},
2497
2548
  ...typeof parser.shouldDeferCompletion === "function" ? { shouldDeferCompletion: parser.shouldDeferCompletion.bind(parser) } : {},
@@ -2976,6 +3027,8 @@ function conditional(discriminator, branches, defaultBranch, options) {
2976
3027
  $stateType: [],
2977
3028
  priority: maxPriority,
2978
3029
  usage,
3030
+ leadingNames: defaultBranch ? unionLeadingNames([discriminator, defaultBranch]) : discriminator.leadingNames,
3031
+ acceptingAnyToken: defaultBranch?.acceptingAnyToken ?? false,
2979
3032
  initialState,
2980
3033
  parse(context) {
2981
3034
  if (isAsync) return parseAsync(context);
package/dist/facade.cjs CHANGED
@@ -196,6 +196,8 @@ function combineWithHelpVersion(originalParser, helpParsers, versionParsers, com
196
196
  $stateType: [],
197
197
  priority: 200,
198
198
  usage: helpParsers.helpOption.usage,
199
+ leadingNames: helpParsers.helpOption.leadingNames,
200
+ acceptingAnyToken: false,
199
201
  initialState: null,
200
202
  parse(context) {
201
203
  const { buffer, optionsTerminated } = context;
@@ -275,6 +277,8 @@ function combineWithHelpVersion(originalParser, helpParsers, versionParsers, com
275
277
  $stateType: [],
276
278
  priority: 200,
277
279
  usage: versionParsers.versionOption.usage,
280
+ leadingNames: versionParsers.versionOption.leadingNames,
281
+ acceptingAnyToken: false,
278
282
  initialState: null,
279
283
  parse(context) {
280
284
  const { buffer, optionsTerminated } = context;
@@ -620,9 +624,7 @@ function runParser(parserOrProgram, programNameOrArgs, argsOrOptions, optionsPar
620
624
  completionCommandNames
621
625
  ]);
622
626
  require_validate.validateMetaNameCollisions({
623
- leadingOptions: require_usage.extractLeadingOptionNames(parser.usage, true),
624
- leadingCommands: require_usage.extractLeadingCommandNames(parser.usage, true),
625
- leadingLiterals: require_usage.extractLeadingLiteralValues(parser.usage),
627
+ leadingNames: parser.leadingNames,
626
628
  allOptions: require_usage.extractOptionNames(parser.usage, true),
627
629
  allCommands: require_usage.extractCommandNames(parser.usage, true),
628
630
  allLiterals: require_usage.extractLiteralValues(parser.usage)
package/dist/facade.js CHANGED
@@ -3,7 +3,7 @@ import { commandLine, formatMessage, lineBreak, message, optionName, text, value
3
3
  import { bash, fish, nu, pwsh, zsh } from "./completion.js";
4
4
  import { dispatchByMode } from "./mode-dispatch.js";
5
5
  import { validateCommandNames, validateMetaNameCollisions, validateOptionNames } from "./validate.js";
6
- import { extractCommandNames, extractLeadingCommandNames, extractLeadingLiteralValues, extractLeadingOptionNames, extractLiteralValues, extractOptionNames, formatUsage } from "./usage.js";
6
+ import { extractCommandNames, extractLiteralValues, extractOptionNames, formatUsage } from "./usage.js";
7
7
  import { formatDocPage } from "./doc.js";
8
8
  import { group, longestMatch, object } from "./constructs.js";
9
9
  import { multiple, optional, withDefault } from "./modifiers.js";
@@ -196,6 +196,8 @@ function combineWithHelpVersion(originalParser, helpParsers, versionParsers, com
196
196
  $stateType: [],
197
197
  priority: 200,
198
198
  usage: helpParsers.helpOption.usage,
199
+ leadingNames: helpParsers.helpOption.leadingNames,
200
+ acceptingAnyToken: false,
199
201
  initialState: null,
200
202
  parse(context) {
201
203
  const { buffer, optionsTerminated } = context;
@@ -275,6 +277,8 @@ function combineWithHelpVersion(originalParser, helpParsers, versionParsers, com
275
277
  $stateType: [],
276
278
  priority: 200,
277
279
  usage: versionParsers.versionOption.usage,
280
+ leadingNames: versionParsers.versionOption.leadingNames,
281
+ acceptingAnyToken: false,
278
282
  initialState: null,
279
283
  parse(context) {
280
284
  const { buffer, optionsTerminated } = context;
@@ -620,9 +624,7 @@ function runParser(parserOrProgram, programNameOrArgs, argsOrOptions, optionsPar
620
624
  completionCommandNames
621
625
  ]);
622
626
  validateMetaNameCollisions({
623
- leadingOptions: extractLeadingOptionNames(parser.usage, true),
624
- leadingCommands: extractLeadingCommandNames(parser.usage, true),
625
- leadingLiterals: extractLeadingLiteralValues(parser.usage),
627
+ leadingNames: parser.leadingNames,
626
628
  allOptions: extractOptionNames(parser.usage, true),
627
629
  allCommands: extractCommandNames(parser.usage, true),
628
630
  allLiterals: extractLiteralValues(parser.usage)
package/dist/index.cjs CHANGED
@@ -53,9 +53,6 @@ exports.ensureNonEmptyString = require_nonempty.ensureNonEmptyString;
53
53
  exports.envVar = require_message.envVar;
54
54
  exports.extractArgumentMetavars = require_usage.extractArgumentMetavars;
55
55
  exports.extractCommandNames = require_usage.extractCommandNames;
56
- exports.extractLeadingCommandNames = require_usage.extractLeadingCommandNames;
57
- exports.extractLeadingLiteralValues = require_usage.extractLeadingLiteralValues;
58
- exports.extractLeadingOptionNames = require_usage.extractLeadingOptionNames;
59
56
  exports.extractLiteralValues = require_usage.extractLiteralValues;
60
57
  exports.extractOptionNames = require_usage.extractOptionNames;
61
58
  exports.fail = require_primitives.fail;
package/dist/index.d.cts CHANGED
@@ -1,7 +1,7 @@
1
1
  import { Annotations, ParseOptions, annotationKey, getAnnotations } from "./annotations.cjs";
2
2
  import { NonEmptyString, ensureNonEmptyString, isNonEmptyString } from "./nonempty.cjs";
3
3
  import { Message, MessageFormatOptions, MessageTerm, ValueSetOptions, commandLine, envVar, formatMessage, lineBreak, link, message, metavar, optionName, optionNames, text, value, valueSet, values } from "./message.cjs";
4
- import { HiddenVisibility, OptionName, Usage, UsageFormatOptions, UsageTerm, UsageTermFormatOptions, cloneUsage, cloneUsageTerm, extractArgumentMetavars, extractCommandNames, extractLeadingCommandNames, extractLeadingLiteralValues, extractLeadingOptionNames, extractLiteralValues, extractOptionNames, formatUsage, formatUsageTerm, isDocHidden, isSuggestionHidden, isUsageHidden, mergeHidden, normalizeUsage } from "./usage.cjs";
4
+ import { HiddenVisibility, OptionName, Usage, UsageFormatOptions, UsageTerm, UsageTermFormatOptions, cloneUsage, cloneUsageTerm, extractArgumentMetavars, extractCommandNames, extractLiteralValues, extractOptionNames, formatUsage, formatUsageTerm, isDocHidden, isSuggestionHidden, isUsageHidden, mergeHidden, normalizeUsage } from "./usage.cjs";
5
5
  import { DocEntry, DocFragment, DocFragments, DocPage, DocPageFormatOptions, DocSection, ShowChoicesOptions, ShowDefaultOptions, cloneDocEntry, deduplicateDocEntries, deduplicateDocFragments, formatDocPage, isDocEntryHidden } from "./doc.cjs";
6
6
  import { ChoiceOptions, ChoiceOptionsBase, ChoiceOptionsNumber, ChoiceOptionsString, CidrOptions, CidrValue, DeferredMap, DomainOptions, EmailOptions, FloatOptions, HostnameOptions, IntegerOptionsBigInt, IntegerOptionsNumber, IpOptions, Ipv4Options, Ipv6Options, LocaleOptions, MacAddressOptions, PortOptionsBigInt, PortOptionsNumber, PortRangeOptionsBigInt, PortRangeOptionsNumber, PortRangeValueBigInt, PortRangeValueNumber, SocketAddressOptions, SocketAddressValue, StringOptions, UrlOptions, Uuid, UuidOptions, ValueParser, ValueParserResult, checkBooleanOption, checkEnumOption, choice, cidr, domain, email, float, hostname, integer, ip, ipv4, ipv6, isValueParser, locale, macAddress, port, portRange, socketAddress, string, url, uuid } from "./valueparser.cjs";
7
7
  import { ConditionalErrorOptions, ConditionalOptions, DuplicateOptionError, GroupOptions, LongestMatchErrorOptions, LongestMatchOptions, MergeOptions, NoMatchContext, ObjectErrorOptions, ObjectOptions, OrErrorOptions, OrOptions, TupleOptions, concat, conditional, group, longestMatch, merge, object, or, tuple } from "./constructs.cjs";
@@ -12,4 +12,4 @@ import { CombineModes, DocState, InferMode, InferValue, Mode, ModeIterable, Mode
12
12
  import { ShellCompletion, bash, fish, nu, pwsh, zsh } from "./completion.cjs";
13
13
  import { ParserValuePlaceholder, SourceContext } from "./context.cjs";
14
14
  import { CommandSubConfig, ContextOptionsParam, ExtractRequiredOptions, OptionSubConfig, RunOptions, RunParserError, RunWithOptions, SubstituteParserValue, runParser, runParserAsync, runParserSync, runWith, runWithAsync, runWithSync } from "./facade.cjs";
15
- export { type Annotations, AnyDependencySource, ArgumentErrorOptions, ArgumentOptions, ChoiceOptions, ChoiceOptionsBase, ChoiceOptionsNumber, ChoiceOptionsString, CidrOptions, CidrValue, CombineMode, CombineModes, CombinedDependencyMode, CommandErrorOptions, CommandOptions, CommandSubConfig, ConditionalErrorOptions, ConditionalOptions, ContextOptionsParam, DeferredMap, DeferredParseState, DependencyError, DependencyMode, DependencyRegistry, DependencySource, DependencySourceState, DependencyValue, DependencyValues, DeriveAsyncOptions, DeriveFromAsyncOptions, DeriveFromOptions, DeriveFromSyncOptions, DeriveOptions, DeriveSyncOptions, DerivedValueParser, DocEntry, DocFragment, DocFragments, DocPage, DocPageFormatOptions, DocSection, DocState, DomainOptions, DuplicateOptionError, EmailOptions, ExtractRequiredOptions, FlagErrorOptions, FlagOptions, FloatOptions, GroupOptions, HiddenVisibility, HostnameOptions, InferMode, InferValue, IntegerOptionsBigInt, IntegerOptionsNumber, IpOptions, Ipv4Options, Ipv6Options, LocaleOptions, LongestMatchErrorOptions, LongestMatchOptions, MacAddressOptions, MergeOptions, type Message, type MessageFormatOptions, type MessageTerm, Mode, ModeIterable, ModeValue, MultipleErrorOptions, MultipleOptions, NoMatchContext, NonEmptyString, ObjectErrorOptions, ObjectOptions, OptionErrorOptions, OptionName, OptionOptions, OptionState, OptionSubConfig, OrErrorOptions, OrOptions, type ParseOptions, Parser, ParserContext, ParserResult, ParserValuePlaceholder, PassThroughFormat, PassThroughOptions, PendingDependencySourceState, PortOptionsBigInt, PortOptionsNumber, PortRangeOptionsBigInt, PortRangeOptionsNumber, PortRangeValueBigInt, PortRangeValueNumber, ResolvedDependency, Result, RunOptions, RunParserError, RunWithOptions, ShellCompletion, ShowChoicesOptions, ShowDefaultOptions, SocketAddressOptions, SocketAddressValue, SourceContext, StringOptions, SubstituteParserValue, Suggestion, TupleOptions, UrlOptions, Usage, UsageFormatOptions, UsageTerm, UsageTermFormatOptions, Uuid, UuidOptions, ValueParser, ValueParserResult, type ValueSetOptions, WithDefaultError, WithDefaultOptions, annotationKey, argument, bash, checkBooleanOption, checkEnumOption, choice, cidr, cloneDocEntry, cloneUsage, cloneUsageTerm, command, commandLine, concat, conditional, constant, createDeferredParseState, createDependencySourceState, createPendingDependencySourceState, deduplicateDocEntries, deduplicateDocFragments, defaultValues, deferredParseMarker, dependency, dependencyId, dependencyIds, dependencySourceMarker, dependencySourceStateMarker, deriveFrom, deriveFromAsync, deriveFromSync, derivedValueParserMarker, domain, email, ensureNonEmptyString, envVar, extractArgumentMetavars, extractCommandNames, extractLeadingCommandNames, extractLeadingLiteralValues, extractLeadingOptionNames, extractLiteralValues, extractOptionNames, fail, fish, flag, float, formatDependencyError, formatDocPage, formatMessage, formatUsage, formatUsageTerm, getAnnotations, getDefaultValuesFunction, getDependencyIds, getDocPage, getDocPageAsync, getDocPageSync, group, hostname, integer, ip, ipv4, ipv6, isDeferredParseState, isDependencySource, isDependencySourceState, isDerivedValueParser, isDocEntryHidden, isDocHidden, isNonEmptyString, isPendingDependencySourceState, isSuggestionHidden, isUsageHidden, isValueParser, isWrappedDependencySource, lineBreak, link, locale, longestMatch, macAddress, map, merge, mergeHidden, message, metavar, multiple, nonEmpty, normalizeUsage, nu, object, option, optionName, optionNames, optional, or, parse, parseAsync, parseSync, parseWithDependency, passThrough, pendingDependencySourceStateMarker, port, portRange, pwsh, runParser, runParserAsync, runParserSync, runWith, runWithAsync, runWithSync, socketAddress, string, suggest, suggestAsync, suggestSync, suggestWithDependency, text, transformsDependencyValue, transformsDependencyValueMarker, tuple, url, uuid, value, valueSet, values, withDefault, wrappedDependencySourceMarker, zsh };
15
+ export { type Annotations, AnyDependencySource, ArgumentErrorOptions, ArgumentOptions, ChoiceOptions, ChoiceOptionsBase, ChoiceOptionsNumber, ChoiceOptionsString, CidrOptions, CidrValue, CombineMode, CombineModes, CombinedDependencyMode, CommandErrorOptions, CommandOptions, CommandSubConfig, ConditionalErrorOptions, ConditionalOptions, ContextOptionsParam, DeferredMap, DeferredParseState, DependencyError, DependencyMode, DependencyRegistry, DependencySource, DependencySourceState, DependencyValue, DependencyValues, DeriveAsyncOptions, DeriveFromAsyncOptions, DeriveFromOptions, DeriveFromSyncOptions, DeriveOptions, DeriveSyncOptions, DerivedValueParser, DocEntry, DocFragment, DocFragments, DocPage, DocPageFormatOptions, DocSection, DocState, DomainOptions, DuplicateOptionError, EmailOptions, ExtractRequiredOptions, FlagErrorOptions, FlagOptions, FloatOptions, GroupOptions, HiddenVisibility, HostnameOptions, InferMode, InferValue, IntegerOptionsBigInt, IntegerOptionsNumber, IpOptions, Ipv4Options, Ipv6Options, LocaleOptions, LongestMatchErrorOptions, LongestMatchOptions, MacAddressOptions, MergeOptions, type Message, type MessageFormatOptions, type MessageTerm, Mode, ModeIterable, ModeValue, MultipleErrorOptions, MultipleOptions, NoMatchContext, NonEmptyString, ObjectErrorOptions, ObjectOptions, OptionErrorOptions, OptionName, OptionOptions, OptionState, OptionSubConfig, OrErrorOptions, OrOptions, type ParseOptions, Parser, ParserContext, ParserResult, ParserValuePlaceholder, PassThroughFormat, PassThroughOptions, PendingDependencySourceState, PortOptionsBigInt, PortOptionsNumber, PortRangeOptionsBigInt, PortRangeOptionsNumber, PortRangeValueBigInt, PortRangeValueNumber, ResolvedDependency, Result, RunOptions, RunParserError, RunWithOptions, ShellCompletion, ShowChoicesOptions, ShowDefaultOptions, SocketAddressOptions, SocketAddressValue, SourceContext, StringOptions, SubstituteParserValue, Suggestion, TupleOptions, UrlOptions, Usage, UsageFormatOptions, UsageTerm, UsageTermFormatOptions, Uuid, UuidOptions, ValueParser, ValueParserResult, type ValueSetOptions, WithDefaultError, WithDefaultOptions, annotationKey, argument, bash, checkBooleanOption, checkEnumOption, choice, cidr, cloneDocEntry, cloneUsage, cloneUsageTerm, command, commandLine, concat, conditional, constant, createDeferredParseState, createDependencySourceState, createPendingDependencySourceState, deduplicateDocEntries, deduplicateDocFragments, defaultValues, deferredParseMarker, dependency, dependencyId, dependencyIds, dependencySourceMarker, dependencySourceStateMarker, deriveFrom, deriveFromAsync, deriveFromSync, derivedValueParserMarker, domain, email, ensureNonEmptyString, envVar, extractArgumentMetavars, extractCommandNames, extractLiteralValues, extractOptionNames, fail, fish, flag, float, formatDependencyError, formatDocPage, formatMessage, formatUsage, formatUsageTerm, getAnnotations, getDefaultValuesFunction, getDependencyIds, getDocPage, getDocPageAsync, getDocPageSync, group, hostname, integer, ip, ipv4, ipv6, isDeferredParseState, isDependencySource, isDependencySourceState, isDerivedValueParser, isDocEntryHidden, isDocHidden, isNonEmptyString, isPendingDependencySourceState, isSuggestionHidden, isUsageHidden, isValueParser, isWrappedDependencySource, lineBreak, link, locale, longestMatch, macAddress, map, merge, mergeHidden, message, metavar, multiple, nonEmpty, normalizeUsage, nu, object, option, optionName, optionNames, optional, or, parse, parseAsync, parseSync, parseWithDependency, passThrough, pendingDependencySourceStateMarker, port, portRange, pwsh, runParser, runParserAsync, runParserSync, runWith, runWithAsync, runWithSync, socketAddress, string, suggest, suggestAsync, suggestSync, suggestWithDependency, text, transformsDependencyValue, transformsDependencyValueMarker, tuple, url, uuid, value, valueSet, values, withDefault, wrappedDependencySourceMarker, zsh };
package/dist/index.d.ts CHANGED
@@ -1,7 +1,7 @@
1
1
  import { Annotations, ParseOptions, annotationKey, getAnnotations } from "./annotations.js";
2
2
  import { NonEmptyString, ensureNonEmptyString, isNonEmptyString } from "./nonempty.js";
3
3
  import { Message, MessageFormatOptions, MessageTerm, ValueSetOptions, commandLine, envVar, formatMessage, lineBreak, link, message, metavar, optionName, optionNames, text, value, valueSet, values } from "./message.js";
4
- import { HiddenVisibility, OptionName, Usage, UsageFormatOptions, UsageTerm, UsageTermFormatOptions, cloneUsage, cloneUsageTerm, extractArgumentMetavars, extractCommandNames, extractLeadingCommandNames, extractLeadingLiteralValues, extractLeadingOptionNames, extractLiteralValues, extractOptionNames, formatUsage, formatUsageTerm, isDocHidden, isSuggestionHidden, isUsageHidden, mergeHidden, normalizeUsage } from "./usage.js";
4
+ import { HiddenVisibility, OptionName, Usage, UsageFormatOptions, UsageTerm, UsageTermFormatOptions, cloneUsage, cloneUsageTerm, extractArgumentMetavars, extractCommandNames, extractLiteralValues, extractOptionNames, formatUsage, formatUsageTerm, isDocHidden, isSuggestionHidden, isUsageHidden, mergeHidden, normalizeUsage } from "./usage.js";
5
5
  import { DocEntry, DocFragment, DocFragments, DocPage, DocPageFormatOptions, DocSection, ShowChoicesOptions, ShowDefaultOptions, cloneDocEntry, deduplicateDocEntries, deduplicateDocFragments, formatDocPage, isDocEntryHidden } from "./doc.js";
6
6
  import { ChoiceOptions, ChoiceOptionsBase, ChoiceOptionsNumber, ChoiceOptionsString, CidrOptions, CidrValue, DeferredMap, DomainOptions, EmailOptions, FloatOptions, HostnameOptions, IntegerOptionsBigInt, IntegerOptionsNumber, IpOptions, Ipv4Options, Ipv6Options, LocaleOptions, MacAddressOptions, PortOptionsBigInt, PortOptionsNumber, PortRangeOptionsBigInt, PortRangeOptionsNumber, PortRangeValueBigInt, PortRangeValueNumber, SocketAddressOptions, SocketAddressValue, StringOptions, UrlOptions, Uuid, UuidOptions, ValueParser, ValueParserResult, checkBooleanOption, checkEnumOption, choice, cidr, domain, email, float, hostname, integer, ip, ipv4, ipv6, isValueParser, locale, macAddress, port, portRange, socketAddress, string, url, uuid } from "./valueparser.js";
7
7
  import { ConditionalErrorOptions, ConditionalOptions, DuplicateOptionError, GroupOptions, LongestMatchErrorOptions, LongestMatchOptions, MergeOptions, NoMatchContext, ObjectErrorOptions, ObjectOptions, OrErrorOptions, OrOptions, TupleOptions, concat, conditional, group, longestMatch, merge, object, or, tuple } from "./constructs.js";
@@ -12,4 +12,4 @@ import { CombineModes, DocState, InferMode, InferValue, Mode, ModeIterable, Mode
12
12
  import { ShellCompletion, bash, fish, nu, pwsh, zsh } from "./completion.js";
13
13
  import { ParserValuePlaceholder, SourceContext } from "./context.js";
14
14
  import { CommandSubConfig, ContextOptionsParam, ExtractRequiredOptions, OptionSubConfig, RunOptions, RunParserError, RunWithOptions, SubstituteParserValue, runParser, runParserAsync, runParserSync, runWith, runWithAsync, runWithSync } from "./facade.js";
15
- export { type Annotations, AnyDependencySource, ArgumentErrorOptions, ArgumentOptions, ChoiceOptions, ChoiceOptionsBase, ChoiceOptionsNumber, ChoiceOptionsString, CidrOptions, CidrValue, CombineMode, CombineModes, CombinedDependencyMode, CommandErrorOptions, CommandOptions, CommandSubConfig, ConditionalErrorOptions, ConditionalOptions, ContextOptionsParam, DeferredMap, DeferredParseState, DependencyError, DependencyMode, DependencyRegistry, DependencySource, DependencySourceState, DependencyValue, DependencyValues, DeriveAsyncOptions, DeriveFromAsyncOptions, DeriveFromOptions, DeriveFromSyncOptions, DeriveOptions, DeriveSyncOptions, DerivedValueParser, DocEntry, DocFragment, DocFragments, DocPage, DocPageFormatOptions, DocSection, DocState, DomainOptions, DuplicateOptionError, EmailOptions, ExtractRequiredOptions, FlagErrorOptions, FlagOptions, FloatOptions, GroupOptions, HiddenVisibility, HostnameOptions, InferMode, InferValue, IntegerOptionsBigInt, IntegerOptionsNumber, IpOptions, Ipv4Options, Ipv6Options, LocaleOptions, LongestMatchErrorOptions, LongestMatchOptions, MacAddressOptions, MergeOptions, type Message, type MessageFormatOptions, type MessageTerm, Mode, ModeIterable, ModeValue, MultipleErrorOptions, MultipleOptions, NoMatchContext, NonEmptyString, ObjectErrorOptions, ObjectOptions, OptionErrorOptions, OptionName, OptionOptions, OptionState, OptionSubConfig, OrErrorOptions, OrOptions, type ParseOptions, Parser, ParserContext, ParserResult, ParserValuePlaceholder, PassThroughFormat, PassThroughOptions, PendingDependencySourceState, PortOptionsBigInt, PortOptionsNumber, PortRangeOptionsBigInt, PortRangeOptionsNumber, PortRangeValueBigInt, PortRangeValueNumber, ResolvedDependency, Result, RunOptions, RunParserError, RunWithOptions, ShellCompletion, ShowChoicesOptions, ShowDefaultOptions, SocketAddressOptions, SocketAddressValue, SourceContext, StringOptions, SubstituteParserValue, Suggestion, TupleOptions, UrlOptions, Usage, UsageFormatOptions, UsageTerm, UsageTermFormatOptions, Uuid, UuidOptions, ValueParser, ValueParserResult, type ValueSetOptions, WithDefaultError, WithDefaultOptions, annotationKey, argument, bash, checkBooleanOption, checkEnumOption, choice, cidr, cloneDocEntry, cloneUsage, cloneUsageTerm, command, commandLine, concat, conditional, constant, createDeferredParseState, createDependencySourceState, createPendingDependencySourceState, deduplicateDocEntries, deduplicateDocFragments, defaultValues, deferredParseMarker, dependency, dependencyId, dependencyIds, dependencySourceMarker, dependencySourceStateMarker, deriveFrom, deriveFromAsync, deriveFromSync, derivedValueParserMarker, domain, email, ensureNonEmptyString, envVar, extractArgumentMetavars, extractCommandNames, extractLeadingCommandNames, extractLeadingLiteralValues, extractLeadingOptionNames, extractLiteralValues, extractOptionNames, fail, fish, flag, float, formatDependencyError, formatDocPage, formatMessage, formatUsage, formatUsageTerm, getAnnotations, getDefaultValuesFunction, getDependencyIds, getDocPage, getDocPageAsync, getDocPageSync, group, hostname, integer, ip, ipv4, ipv6, isDeferredParseState, isDependencySource, isDependencySourceState, isDerivedValueParser, isDocEntryHidden, isDocHidden, isNonEmptyString, isPendingDependencySourceState, isSuggestionHidden, isUsageHidden, isValueParser, isWrappedDependencySource, lineBreak, link, locale, longestMatch, macAddress, map, merge, mergeHidden, message, metavar, multiple, nonEmpty, normalizeUsage, nu, object, option, optionName, optionNames, optional, or, parse, parseAsync, parseSync, parseWithDependency, passThrough, pendingDependencySourceStateMarker, port, portRange, pwsh, runParser, runParserAsync, runParserSync, runWith, runWithAsync, runWithSync, socketAddress, string, suggest, suggestAsync, suggestSync, suggestWithDependency, text, transformsDependencyValue, transformsDependencyValueMarker, tuple, url, uuid, value, valueSet, values, withDefault, wrappedDependencySourceMarker, zsh };
15
+ export { type Annotations, AnyDependencySource, ArgumentErrorOptions, ArgumentOptions, ChoiceOptions, ChoiceOptionsBase, ChoiceOptionsNumber, ChoiceOptionsString, CidrOptions, CidrValue, CombineMode, CombineModes, CombinedDependencyMode, CommandErrorOptions, CommandOptions, CommandSubConfig, ConditionalErrorOptions, ConditionalOptions, ContextOptionsParam, DeferredMap, DeferredParseState, DependencyError, DependencyMode, DependencyRegistry, DependencySource, DependencySourceState, DependencyValue, DependencyValues, DeriveAsyncOptions, DeriveFromAsyncOptions, DeriveFromOptions, DeriveFromSyncOptions, DeriveOptions, DeriveSyncOptions, DerivedValueParser, DocEntry, DocFragment, DocFragments, DocPage, DocPageFormatOptions, DocSection, DocState, DomainOptions, DuplicateOptionError, EmailOptions, ExtractRequiredOptions, FlagErrorOptions, FlagOptions, FloatOptions, GroupOptions, HiddenVisibility, HostnameOptions, InferMode, InferValue, IntegerOptionsBigInt, IntegerOptionsNumber, IpOptions, Ipv4Options, Ipv6Options, LocaleOptions, LongestMatchErrorOptions, LongestMatchOptions, MacAddressOptions, MergeOptions, type Message, type MessageFormatOptions, type MessageTerm, Mode, ModeIterable, ModeValue, MultipleErrorOptions, MultipleOptions, NoMatchContext, NonEmptyString, ObjectErrorOptions, ObjectOptions, OptionErrorOptions, OptionName, OptionOptions, OptionState, OptionSubConfig, OrErrorOptions, OrOptions, type ParseOptions, Parser, ParserContext, ParserResult, ParserValuePlaceholder, PassThroughFormat, PassThroughOptions, PendingDependencySourceState, PortOptionsBigInt, PortOptionsNumber, PortRangeOptionsBigInt, PortRangeOptionsNumber, PortRangeValueBigInt, PortRangeValueNumber, ResolvedDependency, Result, RunOptions, RunParserError, RunWithOptions, ShellCompletion, ShowChoicesOptions, ShowDefaultOptions, SocketAddressOptions, SocketAddressValue, SourceContext, StringOptions, SubstituteParserValue, Suggestion, TupleOptions, UrlOptions, Usage, UsageFormatOptions, UsageTerm, UsageTermFormatOptions, Uuid, UuidOptions, ValueParser, ValueParserResult, type ValueSetOptions, WithDefaultError, WithDefaultOptions, annotationKey, argument, bash, checkBooleanOption, checkEnumOption, choice, cidr, cloneDocEntry, cloneUsage, cloneUsageTerm, command, commandLine, concat, conditional, constant, createDeferredParseState, createDependencySourceState, createPendingDependencySourceState, deduplicateDocEntries, deduplicateDocFragments, defaultValues, deferredParseMarker, dependency, dependencyId, dependencyIds, dependencySourceMarker, dependencySourceStateMarker, deriveFrom, deriveFromAsync, deriveFromSync, derivedValueParserMarker, domain, email, ensureNonEmptyString, envVar, extractArgumentMetavars, extractCommandNames, extractLiteralValues, extractOptionNames, fail, fish, flag, float, formatDependencyError, formatDocPage, formatMessage, formatUsage, formatUsageTerm, getAnnotations, getDefaultValuesFunction, getDependencyIds, getDocPage, getDocPageAsync, getDocPageSync, group, hostname, integer, ip, ipv4, ipv6, isDeferredParseState, isDependencySource, isDependencySourceState, isDerivedValueParser, isDocEntryHidden, isDocHidden, isNonEmptyString, isPendingDependencySourceState, isSuggestionHidden, isUsageHidden, isValueParser, isWrappedDependencySource, lineBreak, link, locale, longestMatch, macAddress, map, merge, mergeHidden, message, metavar, multiple, nonEmpty, normalizeUsage, nu, object, option, optionName, optionNames, optional, or, parse, parseAsync, parseSync, parseWithDependency, passThrough, pendingDependencySourceStateMarker, port, portRange, pwsh, runParser, runParserAsync, runParserSync, runWith, runWithAsync, runWithSync, socketAddress, string, suggest, suggestAsync, suggestSync, suggestWithDependency, text, transformsDependencyValue, transformsDependencyValueMarker, tuple, url, uuid, value, valueSet, values, withDefault, wrappedDependencySourceMarker, zsh };
package/dist/index.js CHANGED
@@ -2,7 +2,7 @@ import { annotationKey, getAnnotations } from "./annotations.js";
2
2
  import { commandLine, envVar, formatMessage, lineBreak, link, message, metavar, optionName, optionNames, text, value, valueSet, values } from "./message.js";
3
3
  import { bash, fish, nu, pwsh, zsh } from "./completion.js";
4
4
  import { DependencyRegistry, createDeferredParseState, createDependencySourceState, createPendingDependencySourceState, defaultValues, deferredParseMarker, dependency, dependencyId, dependencyIds, dependencySourceMarker, dependencySourceStateMarker, deriveFrom, deriveFromAsync, deriveFromSync, derivedValueParserMarker, formatDependencyError, getDefaultValuesFunction, getDependencyIds, isDeferredParseState, isDependencySource, isDependencySourceState, isDerivedValueParser, isPendingDependencySourceState, isWrappedDependencySource, parseWithDependency, pendingDependencySourceStateMarker, suggestWithDependency, transformsDependencyValue, transformsDependencyValueMarker, wrappedDependencySourceMarker } from "./dependency.js";
5
- import { cloneUsage, cloneUsageTerm, extractArgumentMetavars, extractCommandNames, extractLeadingCommandNames, extractLeadingLiteralValues, extractLeadingOptionNames, extractLiteralValues, extractOptionNames, formatUsage, formatUsageTerm, isDocHidden, isSuggestionHidden, isUsageHidden, mergeHidden, normalizeUsage } from "./usage.js";
5
+ import { cloneUsage, cloneUsageTerm, extractArgumentMetavars, extractCommandNames, extractLiteralValues, extractOptionNames, formatUsage, formatUsageTerm, isDocHidden, isSuggestionHidden, isUsageHidden, mergeHidden, normalizeUsage } from "./usage.js";
6
6
  import { cloneDocEntry, deduplicateDocEntries, deduplicateDocFragments, formatDocPage, isDocEntryHidden } from "./doc.js";
7
7
  import { DuplicateOptionError, concat, conditional, group, longestMatch, merge, object, or, tuple } from "./constructs.js";
8
8
  import { WithDefaultError, map, multiple, nonEmpty, optional, withDefault } from "./modifiers.js";
@@ -12,4 +12,4 @@ import { argument, command, constant, fail, flag, option, passThrough } from "./
12
12
  import { getDocPage, getDocPageAsync, getDocPageSync, parse, parseAsync, parseSync, suggest, suggestAsync, suggestSync } from "./parser.js";
13
13
  import { RunParserError, runParser, runParserAsync, runParserSync, runWith, runWithAsync, runWithSync } from "./facade.js";
14
14
 
15
- export { DependencyRegistry, DuplicateOptionError, RunParserError, WithDefaultError, annotationKey, argument, bash, checkBooleanOption, checkEnumOption, choice, cidr, cloneDocEntry, cloneUsage, cloneUsageTerm, command, commandLine, concat, conditional, constant, createDeferredParseState, createDependencySourceState, createPendingDependencySourceState, deduplicateDocEntries, deduplicateDocFragments, defaultValues, deferredParseMarker, dependency, dependencyId, dependencyIds, dependencySourceMarker, dependencySourceStateMarker, deriveFrom, deriveFromAsync, deriveFromSync, derivedValueParserMarker, domain, email, ensureNonEmptyString, envVar, extractArgumentMetavars, extractCommandNames, extractLeadingCommandNames, extractLeadingLiteralValues, extractLeadingOptionNames, extractLiteralValues, extractOptionNames, fail, fish, flag, float, formatDependencyError, formatDocPage, formatMessage, formatUsage, formatUsageTerm, getAnnotations, getDefaultValuesFunction, getDependencyIds, getDocPage, getDocPageAsync, getDocPageSync, group, hostname, integer, ip, ipv4, ipv6, isDeferredParseState, isDependencySource, isDependencySourceState, isDerivedValueParser, isDocEntryHidden, isDocHidden, isNonEmptyString, isPendingDependencySourceState, isSuggestionHidden, isUsageHidden, isValueParser, isWrappedDependencySource, lineBreak, link, locale, longestMatch, macAddress, map, merge, mergeHidden, message, metavar, multiple, nonEmpty, normalizeUsage, nu, object, option, optionName, optionNames, optional, or, parse, parseAsync, parseSync, parseWithDependency, passThrough, pendingDependencySourceStateMarker, port, portRange, pwsh, runParser, runParserAsync, runParserSync, runWith, runWithAsync, runWithSync, socketAddress, string, suggest, suggestAsync, suggestSync, suggestWithDependency, text, transformsDependencyValue, transformsDependencyValueMarker, tuple, url, uuid, value, valueSet, values, withDefault, wrappedDependencySourceMarker, zsh };
15
+ export { DependencyRegistry, DuplicateOptionError, RunParserError, WithDefaultError, annotationKey, argument, bash, checkBooleanOption, checkEnumOption, choice, cidr, cloneDocEntry, cloneUsage, cloneUsageTerm, command, commandLine, concat, conditional, constant, createDeferredParseState, createDependencySourceState, createPendingDependencySourceState, deduplicateDocEntries, deduplicateDocFragments, defaultValues, deferredParseMarker, dependency, dependencyId, dependencyIds, dependencySourceMarker, dependencySourceStateMarker, deriveFrom, deriveFromAsync, deriveFromSync, derivedValueParserMarker, domain, email, ensureNonEmptyString, envVar, extractArgumentMetavars, extractCommandNames, extractLiteralValues, extractOptionNames, fail, fish, flag, float, formatDependencyError, formatDocPage, formatMessage, formatUsage, formatUsageTerm, getAnnotations, getDefaultValuesFunction, getDependencyIds, getDocPage, getDocPageAsync, getDocPageSync, group, hostname, integer, ip, ipv4, ipv6, isDeferredParseState, isDependencySource, isDependencySourceState, isDerivedValueParser, isDocEntryHidden, isDocHidden, isNonEmptyString, isPendingDependencySourceState, isSuggestionHidden, isUsageHidden, isValueParser, isWrappedDependencySource, lineBreak, link, locale, longestMatch, macAddress, map, merge, mergeHidden, message, metavar, multiple, nonEmpty, normalizeUsage, nu, object, option, optionName, optionNames, optional, or, parse, parseAsync, parseSync, parseWithDependency, passThrough, pendingDependencySourceStateMarker, port, portRange, pwsh, runParser, runParserAsync, runParserSync, runWith, runWithAsync, runWithSync, socketAddress, string, suggest, suggestAsync, suggestSync, suggestWithDependency, text, transformsDependencyValue, transformsDependencyValueMarker, tuple, url, uuid, value, valueSet, values, withDefault, wrappedDependencySourceMarker, zsh };
@@ -128,6 +128,8 @@ function optional(parser) {
128
128
  type: "optional",
129
129
  terms: parser.usage
130
130
  }],
131
+ leadingNames: parser.leadingNames,
132
+ acceptingAnyToken: false,
131
133
  initialState: void 0,
132
134
  ...wrappedDependencyMarker,
133
135
  ...typeof parser.shouldDeferCompletion === "function" ? { shouldDeferCompletion: adaptShouldDeferCompletion(parser.shouldDeferCompletion.bind(parser)) } : {},
@@ -246,6 +248,8 @@ function withDefault(parser, defaultValue, options) {
246
248
  type: "optional",
247
249
  terms: parser.usage
248
250
  }],
251
+ leadingNames: parser.leadingNames,
252
+ acceptingAnyToken: false,
249
253
  initialState: void 0,
250
254
  ...wrappedDependencyMarker,
251
255
  ...typeof parser.shouldDeferCompletion === "function" ? { shouldDeferCompletion: adaptShouldDeferCompletion(parser.shouldDeferCompletion.bind(parser)) } : {},
@@ -650,6 +654,8 @@ function multiple(parser, options = {}) {
650
654
  terms: parser.usage,
651
655
  min
652
656
  }],
657
+ leadingNames: parser.leadingNames,
658
+ acceptingAnyToken: min > 0 && (parser.acceptingAnyToken ?? false),
653
659
  initialState: [],
654
660
  parse(context) {
655
661
  return require_mode_dispatch.dispatchByMode(parser.$mode, () => parseSync(context), () => parseAsync(context));
@@ -886,6 +892,8 @@ function nonEmpty(parser) {
886
892
  $stateType: parser.$stateType,
887
893
  priority: parser.priority,
888
894
  usage: parser.usage,
895
+ leadingNames: parser.leadingNames,
896
+ acceptingAnyToken: parser.acceptingAnyToken,
889
897
  initialState: parser.initialState,
890
898
  ...typeof parser.shouldDeferCompletion === "function" ? { shouldDeferCompletion: parser.shouldDeferCompletion.bind(parser) } : {},
891
899
  parse(context) {
package/dist/modifiers.js CHANGED
@@ -128,6 +128,8 @@ function optional(parser) {
128
128
  type: "optional",
129
129
  terms: parser.usage
130
130
  }],
131
+ leadingNames: parser.leadingNames,
132
+ acceptingAnyToken: false,
131
133
  initialState: void 0,
132
134
  ...wrappedDependencyMarker,
133
135
  ...typeof parser.shouldDeferCompletion === "function" ? { shouldDeferCompletion: adaptShouldDeferCompletion(parser.shouldDeferCompletion.bind(parser)) } : {},
@@ -246,6 +248,8 @@ function withDefault(parser, defaultValue, options) {
246
248
  type: "optional",
247
249
  terms: parser.usage
248
250
  }],
251
+ leadingNames: parser.leadingNames,
252
+ acceptingAnyToken: false,
249
253
  initialState: void 0,
250
254
  ...wrappedDependencyMarker,
251
255
  ...typeof parser.shouldDeferCompletion === "function" ? { shouldDeferCompletion: adaptShouldDeferCompletion(parser.shouldDeferCompletion.bind(parser)) } : {},
@@ -650,6 +654,8 @@ function multiple(parser, options = {}) {
650
654
  terms: parser.usage,
651
655
  min
652
656
  }],
657
+ leadingNames: parser.leadingNames,
658
+ acceptingAnyToken: min > 0 && (parser.acceptingAnyToken ?? false),
653
659
  initialState: [],
654
660
  parse(context) {
655
661
  return dispatchByMode(parser.$mode, () => parseSync(context), () => parseAsync(context));
@@ -886,6 +892,8 @@ function nonEmpty(parser) {
886
892
  $stateType: parser.$stateType,
887
893
  priority: parser.priority,
888
894
  usage: parser.usage,
895
+ leadingNames: parser.leadingNames,
896
+ acceptingAnyToken: parser.acceptingAnyToken,
889
897
  initialState: parser.initialState,
890
898
  ...typeof parser.shouldDeferCompletion === "function" ? { shouldDeferCompletion: parser.shouldDeferCompletion.bind(parser) } : {},
891
899
  parse(context) {
package/dist/parser.cjs CHANGED
@@ -52,7 +52,7 @@ function parseSync(parser, args, options) {
52
52
  };
53
53
  const previousBuffer = context.buffer;
54
54
  context = result.next;
55
- if (context.buffer.length > 0 && context.buffer.length === previousBuffer.length && context.buffer.every((item, i) => item === previousBuffer[i])) return {
55
+ if (isBufferUnchanged(previousBuffer, context.buffer)) return {
56
56
  success: false,
57
57
  error: require_message.message`Unexpected option or argument: ${context.buffer[0]}.`
58
58
  };
@@ -69,6 +69,13 @@ function parseSync(parser, args, options) {
69
69
  };
70
70
  }
71
71
  /**
72
+ * Returns `true` when the buffer has not changed between iterations,
73
+ * indicating a parser is stalling without consuming input.
74
+ */
75
+ function isBufferUnchanged(previous, current) {
76
+ return current.length > 0 && current.length === previous.length && current.every((item, i) => item === previous[i]);
77
+ }
78
+ /**
72
79
  * Parses an array of command-line arguments using the provided combined parser.
73
80
  * This function processes the input arguments, applying the parser to each
74
81
  * argument until all arguments are consumed or an error occurs.
@@ -104,7 +111,7 @@ async function parseAsync(parser, args, options) {
104
111
  };
105
112
  const previousBuffer = context.buffer;
106
113
  context = result.next;
107
- if (context.buffer.length > 0 && context.buffer.length === previousBuffer.length && context.buffer.every((item, i) => item === previousBuffer[i])) return {
114
+ if (isBufferUnchanged(previousBuffer, context.buffer)) return {
108
115
  success: false,
109
116
  error: require_message.message`Unexpected option or argument: ${context.buffer[0]}.`
110
117
  };
@@ -196,7 +203,7 @@ function suggestSync(parser, args, options) {
196
203
  if (!result.success) return Array.from(parser.suggest(context, prefix));
197
204
  const previousBuffer = context.buffer;
198
205
  context = result.next;
199
- if (context.buffer.length > 0 && context.buffer.length === previousBuffer.length && context.buffer.every((item, i) => item === previousBuffer[i])) return [];
206
+ if (isBufferUnchanged(previousBuffer, context.buffer)) return [];
200
207
  }
201
208
  return Array.from(parser.suggest(context, prefix));
202
209
  }
@@ -239,7 +246,7 @@ async function suggestAsync(parser, args, options) {
239
246
  }
240
247
  const previousBuffer = context.buffer;
241
248
  context = result.next;
242
- if (context.buffer.length > 0 && context.buffer.length === previousBuffer.length && context.buffer.every((item, i) => item === previousBuffer[i])) return [];
249
+ if (isBufferUnchanged(previousBuffer, context.buffer)) return [];
243
250
  }
244
251
  const suggestions = [];
245
252
  for await (const suggestion of parser.suggest(context, prefix)) suggestions.push(suggestion);
@@ -359,7 +366,9 @@ function getDocPageSyncImpl(parser, args, options) {
359
366
  while (context.buffer.length > 0) {
360
367
  const result = parser.parse(context);
361
368
  if (!result.success) break;
369
+ const previousBuffer = context.buffer;
362
370
  context = result.next;
371
+ if (isBufferUnchanged(previousBuffer, context.buffer)) break;
363
372
  }
364
373
  return buildDocPage(parser, context, args);
365
374
  }
@@ -377,7 +386,9 @@ async function getDocPageAsyncImpl(parser, args, options) {
377
386
  while (context.buffer.length > 0) {
378
387
  const result = await parser.parse(context);
379
388
  if (!result.success) break;
389
+ const previousBuffer = context.buffer;
380
390
  context = result.next;
391
+ if (isBufferUnchanged(previousBuffer, context.buffer)) break;
381
392
  }
382
393
  return buildDocPage(parser, context, args);
383
394
  }
package/dist/parser.d.cts CHANGED
@@ -105,6 +105,44 @@ interface Parser<M extends Mode = "sync", TValue = unknown, TState = unknown> {
105
105
  * to use it in command-line interfaces.
106
106
  */
107
107
  readonly usage: Usage;
108
+ /**
109
+ * Names that this parser could match at the first buffer position.
110
+ * Used by `runParser()` to detect collisions with built-in meta
111
+ * features (help, version, completion).
112
+ *
113
+ * Each built-in combinator computes this from its structural semantics.
114
+ * Custom parser implementations must include every fixed token that
115
+ * the parser accepts at `argv[0]` — command names, option names, and
116
+ * literal values alike. For example, a parser whose usage declares
117
+ * `{ type: "literal", value: "serve" }` should include `"serve"` in
118
+ * this set. Parsers that accept *any* token (like `argument()`) should
119
+ * return an empty set and set {@link acceptingAnyToken} to `true`
120
+ * instead.
121
+ *
122
+ * @since 1.0.0
123
+ */
124
+ readonly leadingNames: ReadonlySet<string>;
125
+ /**
126
+ * Whether this parser unconditionally consumes any positional token at
127
+ * the first buffer position. A parser with this flag accepts any
128
+ * non-option token but may still reject option-like tokens (those
129
+ * starting with `"-"`).
130
+ *
131
+ * In shared-buffer compositions (`tuple()`, `object()`, `merge()`,
132
+ * `concat()`), a catch-all parser blocks positional names (command
133
+ * names) from lower-priority siblings but does not block option-like
134
+ * names. In `conditional()`, option-like names from the default
135
+ * branch remain reachable even when the discriminator is a catch-all.
136
+ *
137
+ * Only `argument()` is inherently accepting-any-token; combinators
138
+ * like `or()` and `map()` propagate this from their children.
139
+ * Wrappers that can succeed without consuming (`optional()`,
140
+ * `withDefault()`, `multiple()` with `min = 0`) always set this
141
+ * to `false`.
142
+ *
143
+ * @since 1.0.0
144
+ */
145
+ readonly acceptingAnyToken: boolean;
108
146
  /**
109
147
  * The initial state for this parser. This is used to initialize the
110
148
  * state when parsing starts.
package/dist/parser.d.ts CHANGED
@@ -105,6 +105,44 @@ interface Parser<M extends Mode = "sync", TValue = unknown, TState = unknown> {
105
105
  * to use it in command-line interfaces.
106
106
  */
107
107
  readonly usage: Usage;
108
+ /**
109
+ * Names that this parser could match at the first buffer position.
110
+ * Used by `runParser()` to detect collisions with built-in meta
111
+ * features (help, version, completion).
112
+ *
113
+ * Each built-in combinator computes this from its structural semantics.
114
+ * Custom parser implementations must include every fixed token that
115
+ * the parser accepts at `argv[0]` — command names, option names, and
116
+ * literal values alike. For example, a parser whose usage declares
117
+ * `{ type: "literal", value: "serve" }` should include `"serve"` in
118
+ * this set. Parsers that accept *any* token (like `argument()`) should
119
+ * return an empty set and set {@link acceptingAnyToken} to `true`
120
+ * instead.
121
+ *
122
+ * @since 1.0.0
123
+ */
124
+ readonly leadingNames: ReadonlySet<string>;
125
+ /**
126
+ * Whether this parser unconditionally consumes any positional token at
127
+ * the first buffer position. A parser with this flag accepts any
128
+ * non-option token but may still reject option-like tokens (those
129
+ * starting with `"-"`).
130
+ *
131
+ * In shared-buffer compositions (`tuple()`, `object()`, `merge()`,
132
+ * `concat()`), a catch-all parser blocks positional names (command
133
+ * names) from lower-priority siblings but does not block option-like
134
+ * names. In `conditional()`, option-like names from the default
135
+ * branch remain reachable even when the discriminator is a catch-all.
136
+ *
137
+ * Only `argument()` is inherently accepting-any-token; combinators
138
+ * like `or()` and `map()` propagate this from their children.
139
+ * Wrappers that can succeed without consuming (`optional()`,
140
+ * `withDefault()`, `multiple()` with `min = 0`) always set this
141
+ * to `false`.
142
+ *
143
+ * @since 1.0.0
144
+ */
145
+ readonly acceptingAnyToken: boolean;
108
146
  /**
109
147
  * The initial state for this parser. This is used to initialize the
110
148
  * state when parsing starts.