@optique/core 1.0.0-dev.908 → 1.0.0-dev.921

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.
package/dist/facade.cjs CHANGED
@@ -1334,7 +1334,8 @@ async function runWith(parser, programName, contexts, options) {
1334
1334
  return Promise.resolve(runParser(parser, programName, args, options));
1335
1335
  }
1336
1336
  try {
1337
- const { annotations: phase1Annotations, annotationsList: phase1AnnotationsList, hasDynamic: needsTwoPhase } = await collectPhase1Annotations(contexts, options);
1337
+ const ctxOptions = options?.contextOptions;
1338
+ const { annotations: phase1Annotations, annotationsList: phase1AnnotationsList, hasDynamic: needsTwoPhase } = await collectPhase1Annotations(contexts, ctxOptions);
1338
1339
  if (!needsTwoPhase) {
1339
1340
  const augmentedParser = injectAnnotationsIntoParser(parser, phase1Annotations);
1340
1341
  if (parser.$mode === "async") return runParser(augmentedParser, programName, args, options);
@@ -1359,7 +1360,7 @@ async function runWith(parser, programName, contexts, options) {
1359
1360
  if (parser.$mode === "async") return runParser(augmentedParser, programName, args, options);
1360
1361
  return Promise.resolve(runParser(augmentedParser, programName, args, options));
1361
1362
  }
1362
- const { annotationsList: phase2AnnotationsList } = await collectAnnotations(contexts, firstPassResult, options);
1363
+ const { annotationsList: phase2AnnotationsList } = await collectAnnotations(contexts, firstPassResult, ctxOptions);
1363
1364
  const finalAnnotations = mergeTwoPhaseAnnotations(phase1AnnotationsList, phase2AnnotationsList);
1364
1365
  const augmentedParser2 = injectAnnotationsIntoParser(parser, finalAnnotations);
1365
1366
  if (parser.$mode === "async") return runParser(augmentedParser2, programName, args, options);
@@ -1391,7 +1392,8 @@ function runWithSync(parser, programName, contexts, options) {
1391
1392
  if (needsEarlyExit(args, options)) return runParser(parser, programName, args, options);
1392
1393
  if (contexts.length === 0) return runParser(parser, programName, args, options);
1393
1394
  try {
1394
- const { annotations: phase1Annotations, annotationsList: phase1AnnotationsList, hasDynamic: needsTwoPhase } = collectPhase1AnnotationsSync(contexts, options);
1395
+ const ctxOptions = options?.contextOptions;
1396
+ const { annotations: phase1Annotations, annotationsList: phase1AnnotationsList, hasDynamic: needsTwoPhase } = collectPhase1AnnotationsSync(contexts, ctxOptions);
1395
1397
  if (!needsTwoPhase) {
1396
1398
  const augmentedParser = injectAnnotationsIntoParser(parser, phase1Annotations);
1397
1399
  return runParser(augmentedParser, programName, args, options);
@@ -1405,7 +1407,7 @@ function runWithSync(parser, programName, contexts, options) {
1405
1407
  } catch {
1406
1408
  return runParser(augmentedParser1, programName, args, options);
1407
1409
  }
1408
- const { annotationsList: phase2AnnotationsList } = collectAnnotationsSync(contexts, firstPassResult, options);
1410
+ const { annotationsList: phase2AnnotationsList } = collectAnnotationsSync(contexts, firstPassResult, ctxOptions);
1409
1411
  const finalAnnotations = mergeTwoPhaseAnnotations(phase1AnnotationsList, phase2AnnotationsList);
1410
1412
  const augmentedParser2 = injectAnnotationsIntoParser(parser, finalAnnotations);
1411
1413
  return runParser(augmentedParser2, programName, args, options);
package/dist/facade.d.cts CHANGED
@@ -367,7 +367,32 @@ interface RunWithOptions<THelp, TError> extends RunOptions<THelp, TError> {
367
367
  * `process.argv.slice(2)` on Node.js/Bun or `Deno.args` on Deno.
368
368
  */
369
369
  readonly args?: readonly string[];
370
+ /**
371
+ * Options to forward to source contexts. When contexts declare
372
+ * required options (via `$requiredOptions`), pass them here to
373
+ * avoid name collisions with runner-level options such as `args`,
374
+ * `help`, or `colors`.
375
+ *
376
+ * @since 1.0.0
377
+ */
378
+ readonly contextOptions?: Record<string, unknown>;
370
379
  }
380
+ /**
381
+ * When contexts require options, demands a `contextOptions` property
382
+ * typed to those requirements. When no context needs options
383
+ * (`void`, `unknown`, or `{}`), resolves to `unknown` (intersection no-op).
384
+ * When all context option keys are optional, `contextOptions` itself becomes
385
+ * optional so callers are not forced to pass an empty wrapper.
386
+ *
387
+ * @template TContexts The tuple/array type of source contexts.
388
+ * @template TValue The parser value type for placeholder substitution.
389
+ * @since 1.0.0
390
+ */
391
+ type ContextOptionsParam<TContexts extends readonly SourceContext<unknown>[], TValue> = keyof ExtractRequiredOptions<TContexts, TValue> extends never ? unknown : Record<string, never> extends ExtractRequiredOptions<TContexts, TValue> ? {
392
+ readonly contextOptions?: ExtractRequiredOptions<TContexts, TValue>;
393
+ } : {
394
+ readonly contextOptions: ExtractRequiredOptions<TContexts, TValue>;
395
+ };
371
396
  /**
372
397
  * Runs a parser with multiple source contexts.
373
398
  *
@@ -416,7 +441,7 @@ interface RunWithOptions<THelp, TError> extends RunOptions<THelp, TError> {
416
441
  * );
417
442
  * ```
418
443
  */
419
- declare function runWith<TParser extends Parser<Mode, unknown, unknown>, TContexts extends readonly SourceContext<unknown>[], THelp = void, TError = never>(parser: TParser, programName: string, contexts: TContexts, options: RunWithOptions<THelp, TError> & ExtractRequiredOptions<TContexts, InferValue<TParser>>): Promise<InferValue<TParser>>;
444
+ declare function runWith<TParser extends Parser<Mode, unknown, unknown>, TContexts extends readonly SourceContext<unknown>[], THelp = void, TError = never>(parser: TParser, programName: string, contexts: TContexts, options: RunWithOptions<THelp, TError> & ContextOptionsParam<TContexts, InferValue<TParser>>): Promise<InferValue<TParser>>;
420
445
  /**
421
446
  * Runs a synchronous parser with multiple source contexts.
422
447
  *
@@ -435,7 +460,7 @@ declare function runWith<TParser extends Parser<Mode, unknown, unknown>, TContex
435
460
  * `[Symbol.asyncDispose]` returns a Promise.
436
461
  * @since 0.10.0
437
462
  */
438
- declare function runWithSync<TParser extends Parser<"sync", unknown, unknown>, TContexts extends readonly SourceContext<unknown>[], THelp = void, TError = never>(parser: TParser, programName: string, contexts: TContexts, options: RunWithOptions<THelp, TError> & ExtractRequiredOptions<TContexts, InferValue<TParser>>): InferValue<TParser>;
463
+ declare function runWithSync<TParser extends Parser<"sync", unknown, unknown>, TContexts extends readonly SourceContext<unknown>[], THelp = void, TError = never>(parser: TParser, programName: string, contexts: TContexts, options: RunWithOptions<THelp, TError> & ContextOptionsParam<TContexts, InferValue<TParser>>): InferValue<TParser>;
439
464
  /**
440
465
  * Runs any parser asynchronously with multiple source contexts.
441
466
  *
@@ -452,6 +477,6 @@ declare function runWithSync<TParser extends Parser<"sync", unknown, unknown>, T
452
477
  * @returns Promise that resolves to the parsed result.
453
478
  * @since 0.10.0
454
479
  */
455
- declare function runWithAsync<TParser extends Parser<Mode, unknown, unknown>, TContexts extends readonly SourceContext<unknown>[], THelp = void, TError = never>(parser: TParser, programName: string, contexts: TContexts, options: RunWithOptions<THelp, TError> & ExtractRequiredOptions<TContexts, InferValue<TParser>>): Promise<InferValue<TParser>>;
480
+ declare function runWithAsync<TParser extends Parser<Mode, unknown, unknown>, TContexts extends readonly SourceContext<unknown>[], THelp = void, TError = never>(parser: TParser, programName: string, contexts: TContexts, options: RunWithOptions<THelp, TError> & ContextOptionsParam<TContexts, InferValue<TParser>>): Promise<InferValue<TParser>>;
456
481
  //#endregion
457
- export { CommandSubConfig, ExtractRequiredOptions, OptionSubConfig, type ParserValuePlaceholder, RunOptions, RunParserError, RunWithOptions, type SourceContext, SubstituteParserValue, runParser, runParserAsync, runParserSync, runWith, runWithAsync, runWithSync };
482
+ export { CommandSubConfig, ContextOptionsParam, ExtractRequiredOptions, OptionSubConfig, type ParserValuePlaceholder, RunOptions, RunParserError, RunWithOptions, type SourceContext, SubstituteParserValue, runParser, runParserAsync, runParserSync, runWith, runWithAsync, runWithSync };
package/dist/facade.d.ts CHANGED
@@ -367,7 +367,32 @@ interface RunWithOptions<THelp, TError> extends RunOptions<THelp, TError> {
367
367
  * `process.argv.slice(2)` on Node.js/Bun or `Deno.args` on Deno.
368
368
  */
369
369
  readonly args?: readonly string[];
370
+ /**
371
+ * Options to forward to source contexts. When contexts declare
372
+ * required options (via `$requiredOptions`), pass them here to
373
+ * avoid name collisions with runner-level options such as `args`,
374
+ * `help`, or `colors`.
375
+ *
376
+ * @since 1.0.0
377
+ */
378
+ readonly contextOptions?: Record<string, unknown>;
370
379
  }
380
+ /**
381
+ * When contexts require options, demands a `contextOptions` property
382
+ * typed to those requirements. When no context needs options
383
+ * (`void`, `unknown`, or `{}`), resolves to `unknown` (intersection no-op).
384
+ * When all context option keys are optional, `contextOptions` itself becomes
385
+ * optional so callers are not forced to pass an empty wrapper.
386
+ *
387
+ * @template TContexts The tuple/array type of source contexts.
388
+ * @template TValue The parser value type for placeholder substitution.
389
+ * @since 1.0.0
390
+ */
391
+ type ContextOptionsParam<TContexts extends readonly SourceContext<unknown>[], TValue> = keyof ExtractRequiredOptions<TContexts, TValue> extends never ? unknown : Record<string, never> extends ExtractRequiredOptions<TContexts, TValue> ? {
392
+ readonly contextOptions?: ExtractRequiredOptions<TContexts, TValue>;
393
+ } : {
394
+ readonly contextOptions: ExtractRequiredOptions<TContexts, TValue>;
395
+ };
371
396
  /**
372
397
  * Runs a parser with multiple source contexts.
373
398
  *
@@ -416,7 +441,7 @@ interface RunWithOptions<THelp, TError> extends RunOptions<THelp, TError> {
416
441
  * );
417
442
  * ```
418
443
  */
419
- declare function runWith<TParser extends Parser<Mode, unknown, unknown>, TContexts extends readonly SourceContext<unknown>[], THelp = void, TError = never>(parser: TParser, programName: string, contexts: TContexts, options: RunWithOptions<THelp, TError> & ExtractRequiredOptions<TContexts, InferValue<TParser>>): Promise<InferValue<TParser>>;
444
+ declare function runWith<TParser extends Parser<Mode, unknown, unknown>, TContexts extends readonly SourceContext<unknown>[], THelp = void, TError = never>(parser: TParser, programName: string, contexts: TContexts, options: RunWithOptions<THelp, TError> & ContextOptionsParam<TContexts, InferValue<TParser>>): Promise<InferValue<TParser>>;
420
445
  /**
421
446
  * Runs a synchronous parser with multiple source contexts.
422
447
  *
@@ -435,7 +460,7 @@ declare function runWith<TParser extends Parser<Mode, unknown, unknown>, TContex
435
460
  * `[Symbol.asyncDispose]` returns a Promise.
436
461
  * @since 0.10.0
437
462
  */
438
- declare function runWithSync<TParser extends Parser<"sync", unknown, unknown>, TContexts extends readonly SourceContext<unknown>[], THelp = void, TError = never>(parser: TParser, programName: string, contexts: TContexts, options: RunWithOptions<THelp, TError> & ExtractRequiredOptions<TContexts, InferValue<TParser>>): InferValue<TParser>;
463
+ declare function runWithSync<TParser extends Parser<"sync", unknown, unknown>, TContexts extends readonly SourceContext<unknown>[], THelp = void, TError = never>(parser: TParser, programName: string, contexts: TContexts, options: RunWithOptions<THelp, TError> & ContextOptionsParam<TContexts, InferValue<TParser>>): InferValue<TParser>;
439
464
  /**
440
465
  * Runs any parser asynchronously with multiple source contexts.
441
466
  *
@@ -452,6 +477,6 @@ declare function runWithSync<TParser extends Parser<"sync", unknown, unknown>, T
452
477
  * @returns Promise that resolves to the parsed result.
453
478
  * @since 0.10.0
454
479
  */
455
- declare function runWithAsync<TParser extends Parser<Mode, unknown, unknown>, TContexts extends readonly SourceContext<unknown>[], THelp = void, TError = never>(parser: TParser, programName: string, contexts: TContexts, options: RunWithOptions<THelp, TError> & ExtractRequiredOptions<TContexts, InferValue<TParser>>): Promise<InferValue<TParser>>;
480
+ declare function runWithAsync<TParser extends Parser<Mode, unknown, unknown>, TContexts extends readonly SourceContext<unknown>[], THelp = void, TError = never>(parser: TParser, programName: string, contexts: TContexts, options: RunWithOptions<THelp, TError> & ContextOptionsParam<TContexts, InferValue<TParser>>): Promise<InferValue<TParser>>;
456
481
  //#endregion
457
- export { CommandSubConfig, ExtractRequiredOptions, OptionSubConfig, type ParserValuePlaceholder, RunOptions, RunParserError, RunWithOptions, type SourceContext, SubstituteParserValue, runParser, runParserAsync, runParserSync, runWith, runWithAsync, runWithSync };
482
+ export { CommandSubConfig, ContextOptionsParam, ExtractRequiredOptions, OptionSubConfig, type ParserValuePlaceholder, RunOptions, RunParserError, RunWithOptions, type SourceContext, SubstituteParserValue, runParser, runParserAsync, runParserSync, runWith, runWithAsync, runWithSync };
package/dist/facade.js CHANGED
@@ -1334,7 +1334,8 @@ async function runWith(parser, programName, contexts, options) {
1334
1334
  return Promise.resolve(runParser(parser, programName, args, options));
1335
1335
  }
1336
1336
  try {
1337
- const { annotations: phase1Annotations, annotationsList: phase1AnnotationsList, hasDynamic: needsTwoPhase } = await collectPhase1Annotations(contexts, options);
1337
+ const ctxOptions = options?.contextOptions;
1338
+ const { annotations: phase1Annotations, annotationsList: phase1AnnotationsList, hasDynamic: needsTwoPhase } = await collectPhase1Annotations(contexts, ctxOptions);
1338
1339
  if (!needsTwoPhase) {
1339
1340
  const augmentedParser = injectAnnotationsIntoParser(parser, phase1Annotations);
1340
1341
  if (parser.$mode === "async") return runParser(augmentedParser, programName, args, options);
@@ -1359,7 +1360,7 @@ async function runWith(parser, programName, contexts, options) {
1359
1360
  if (parser.$mode === "async") return runParser(augmentedParser, programName, args, options);
1360
1361
  return Promise.resolve(runParser(augmentedParser, programName, args, options));
1361
1362
  }
1362
- const { annotationsList: phase2AnnotationsList } = await collectAnnotations(contexts, firstPassResult, options);
1363
+ const { annotationsList: phase2AnnotationsList } = await collectAnnotations(contexts, firstPassResult, ctxOptions);
1363
1364
  const finalAnnotations = mergeTwoPhaseAnnotations(phase1AnnotationsList, phase2AnnotationsList);
1364
1365
  const augmentedParser2 = injectAnnotationsIntoParser(parser, finalAnnotations);
1365
1366
  if (parser.$mode === "async") return runParser(augmentedParser2, programName, args, options);
@@ -1391,7 +1392,8 @@ function runWithSync(parser, programName, contexts, options) {
1391
1392
  if (needsEarlyExit(args, options)) return runParser(parser, programName, args, options);
1392
1393
  if (contexts.length === 0) return runParser(parser, programName, args, options);
1393
1394
  try {
1394
- const { annotations: phase1Annotations, annotationsList: phase1AnnotationsList, hasDynamic: needsTwoPhase } = collectPhase1AnnotationsSync(contexts, options);
1395
+ const ctxOptions = options?.contextOptions;
1396
+ const { annotations: phase1Annotations, annotationsList: phase1AnnotationsList, hasDynamic: needsTwoPhase } = collectPhase1AnnotationsSync(contexts, ctxOptions);
1395
1397
  if (!needsTwoPhase) {
1396
1398
  const augmentedParser = injectAnnotationsIntoParser(parser, phase1Annotations);
1397
1399
  return runParser(augmentedParser, programName, args, options);
@@ -1405,7 +1407,7 @@ function runWithSync(parser, programName, contexts, options) {
1405
1407
  } catch {
1406
1408
  return runParser(augmentedParser1, programName, args, options);
1407
1409
  }
1408
- const { annotationsList: phase2AnnotationsList } = collectAnnotationsSync(contexts, firstPassResult, options);
1410
+ const { annotationsList: phase2AnnotationsList } = collectAnnotationsSync(contexts, firstPassResult, ctxOptions);
1409
1411
  const finalAnnotations = mergeTwoPhaseAnnotations(phase1AnnotationsList, phase2AnnotationsList);
1410
1412
  const augmentedParser2 = injectAnnotationsIntoParser(parser, finalAnnotations);
1411
1413
  return runParser(augmentedParser2, programName, args, options);
package/dist/index.d.cts CHANGED
@@ -11,5 +11,5 @@ import { ArgumentErrorOptions, ArgumentOptions, CommandErrorOptions, CommandOpti
11
11
  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";
12
12
  import { ShellCompletion, bash, fish, nu, pwsh, zsh } from "./completion.cjs";
13
13
  import { ParserValuePlaceholder, SourceContext } from "./context.cjs";
14
- import { CommandSubConfig, 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, 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, choice, cidr, command, commandLine, concat, conditional, constant, createDeferredParseState, createDependencySourceState, createPendingDependencySourceState, defaultValues, deferredParseMarker, dependency, dependencyId, dependencyIds, dependencySourceMarker, dependencySourceStateMarker, deriveFrom, deriveFromAsync, deriveFromSync, derivedValueParserMarker, domain, email, ensureNonEmptyString, envVar, extractArgumentMetavars, extractCommandNames, 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, 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 };
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, 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, choice, cidr, command, commandLine, concat, conditional, constant, createDeferredParseState, createDependencySourceState, createPendingDependencySourceState, defaultValues, deferredParseMarker, dependency, dependencyId, dependencyIds, dependencySourceMarker, dependencySourceStateMarker, deriveFrom, deriveFromAsync, deriveFromSync, derivedValueParserMarker, domain, email, ensureNonEmptyString, envVar, extractArgumentMetavars, extractCommandNames, 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, 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
@@ -11,5 +11,5 @@ import { ArgumentErrorOptions, ArgumentOptions, CommandErrorOptions, CommandOpti
11
11
  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";
12
12
  import { ShellCompletion, bash, fish, nu, pwsh, zsh } from "./completion.js";
13
13
  import { ParserValuePlaceholder, SourceContext } from "./context.js";
14
- import { CommandSubConfig, 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, 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, choice, cidr, command, commandLine, concat, conditional, constant, createDeferredParseState, createDependencySourceState, createPendingDependencySourceState, defaultValues, deferredParseMarker, dependency, dependencyId, dependencyIds, dependencySourceMarker, dependencySourceStateMarker, deriveFrom, deriveFromAsync, deriveFromSync, derivedValueParserMarker, domain, email, ensureNonEmptyString, envVar, extractArgumentMetavars, extractCommandNames, 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, 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 };
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, 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, choice, cidr, command, commandLine, concat, conditional, constant, createDeferredParseState, createDependencySourceState, createPendingDependencySourceState, defaultValues, deferredParseMarker, dependency, dependencyId, dependencyIds, dependencySourceMarker, dependencySourceStateMarker, deriveFrom, deriveFromAsync, deriveFromSync, derivedValueParserMarker, domain, email, ensureNonEmptyString, envVar, extractArgumentMetavars, extractCommandNames, 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, 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 };
@@ -1386,6 +1386,8 @@ function email(options) {
1386
1386
  *
1387
1387
  * @param options - Options for socket address validation.
1388
1388
  * @returns A value parser for socket addresses.
1389
+ * @throws {TypeError} If `separator` contains digit characters, since digits
1390
+ * in the separator would cause ambiguous splitting of port input.
1389
1391
  * @since 0.10.0
1390
1392
  *
1391
1393
  * @example
@@ -1406,9 +1408,10 @@ function email(options) {
1406
1408
  * ```
1407
1409
  */
1408
1410
  function socketAddress(options) {
1409
- const metavar = options?.metavar ?? "HOST:PORT";
1410
- require_nonempty.ensureNonEmptyString(metavar);
1411
1411
  const separator = options?.separator ?? ":";
1412
+ if (/\p{Nd}/u.test(separator)) throw new TypeError(`Expected separator to not contain digits, but got: ${JSON.stringify(separator)}.`);
1413
+ const metavar = options?.metavar ?? `HOST${separator}PORT`;
1414
+ require_nonempty.ensureNonEmptyString(metavar);
1412
1415
  const defaultPort = options?.defaultPort;
1413
1416
  const requirePort = options?.requirePort ?? false;
1414
1417
  const hostType = options?.host?.type ?? "both";
@@ -1512,9 +1515,10 @@ function socketAddress(options) {
1512
1515
  function portRange(options) {
1513
1516
  if (options?.disallowWellKnown !== void 0 && typeof options.disallowWellKnown !== "boolean") throw new TypeError(`Expected disallowWellKnown to be a boolean, but got ${typeof options.disallowWellKnown}: ${String(options.disallowWellKnown)}.`);
1514
1517
  if (options?.allowSingle !== void 0 && typeof options.allowSingle !== "boolean") throw new TypeError(`Expected allowSingle to be a boolean, but got ${typeof options.allowSingle}: ${String(options.allowSingle)}.`);
1515
- const metavar = options?.metavar ?? "PORT-PORT";
1516
- require_nonempty.ensureNonEmptyString(metavar);
1517
1518
  const separator = options?.separator ?? "-";
1519
+ if (/\p{Nd}/u.test(separator)) throw new TypeError(`Expected separator to not contain digits, but got: ${JSON.stringify(separator)}.`);
1520
+ const metavar = options?.metavar ?? `PORT${separator}PORT`;
1521
+ require_nonempty.ensureNonEmptyString(metavar);
1518
1522
  const allowSingle = options?.allowSingle ?? false;
1519
1523
  const isBigInt = options?.type === "bigint";
1520
1524
  const portParser = isBigInt ? port({
@@ -1049,8 +1049,8 @@ interface SocketAddressValue {
1049
1049
  */
1050
1050
  interface SocketAddressOptions {
1051
1051
  /**
1052
- * The metavariable name for this parser.
1053
- * @default "HOST:PORT"
1052
+ * The metavariable name for this parser. If not specified, it is derived
1053
+ * from the {@link separator} (e.g., `"HOST:PORT"` for `":"`).
1054
1054
  */
1055
1055
  readonly metavar?: NonEmptyString;
1056
1056
  /**
@@ -1123,6 +1123,8 @@ interface SocketAddressOptions {
1123
1123
  *
1124
1124
  * @param options - Options for socket address validation.
1125
1125
  * @returns A value parser for socket addresses.
1126
+ * @throws {TypeError} If `separator` contains digit characters, since digits
1127
+ * in the separator would cause ambiguous splitting of port input.
1126
1128
  * @since 0.10.0
1127
1129
  *
1128
1130
  * @example
@@ -1185,8 +1187,8 @@ interface PortRangeOptionsNumber {
1185
1187
  */
1186
1188
  readonly type?: "number";
1187
1189
  /**
1188
- * The metavariable name for this parser.
1189
- * @default "PORT-PORT"
1190
+ * The metavariable name for this parser. If not specified, it is derived
1191
+ * from the {@link separator} (e.g., `"PORT-PORT"` for `"-"`).
1190
1192
  */
1191
1193
  readonly metavar?: NonEmptyString;
1192
1194
  /**
@@ -1265,8 +1267,8 @@ interface PortRangeOptionsBigInt {
1265
1267
  */
1266
1268
  readonly type: "bigint";
1267
1269
  /**
1268
- * The metavariable name for this parser.
1269
- * @default "PORT-PORT"
1270
+ * The metavariable name for this parser. If not specified, it is derived
1271
+ * from the {@link separator} (e.g., `"PORT-PORT"` for `"-"`).
1270
1272
  */
1271
1273
  readonly metavar?: NonEmptyString;
1272
1274
  /**
@@ -1346,6 +1348,8 @@ interface PortRangeOptionsBigInt {
1346
1348
  *
1347
1349
  * @param options - Options for port range validation.
1348
1350
  * @returns A value parser for port ranges.
1351
+ * @throws {TypeError} If `separator` contains digit characters, since digits
1352
+ * in the separator would cause ambiguous splitting of numeric port input.
1349
1353
  * @since 0.10.0
1350
1354
  *
1351
1355
  * @example
@@ -1049,8 +1049,8 @@ interface SocketAddressValue {
1049
1049
  */
1050
1050
  interface SocketAddressOptions {
1051
1051
  /**
1052
- * The metavariable name for this parser.
1053
- * @default "HOST:PORT"
1052
+ * The metavariable name for this parser. If not specified, it is derived
1053
+ * from the {@link separator} (e.g., `"HOST:PORT"` for `":"`).
1054
1054
  */
1055
1055
  readonly metavar?: NonEmptyString;
1056
1056
  /**
@@ -1123,6 +1123,8 @@ interface SocketAddressOptions {
1123
1123
  *
1124
1124
  * @param options - Options for socket address validation.
1125
1125
  * @returns A value parser for socket addresses.
1126
+ * @throws {TypeError} If `separator` contains digit characters, since digits
1127
+ * in the separator would cause ambiguous splitting of port input.
1126
1128
  * @since 0.10.0
1127
1129
  *
1128
1130
  * @example
@@ -1185,8 +1187,8 @@ interface PortRangeOptionsNumber {
1185
1187
  */
1186
1188
  readonly type?: "number";
1187
1189
  /**
1188
- * The metavariable name for this parser.
1189
- * @default "PORT-PORT"
1190
+ * The metavariable name for this parser. If not specified, it is derived
1191
+ * from the {@link separator} (e.g., `"PORT-PORT"` for `"-"`).
1190
1192
  */
1191
1193
  readonly metavar?: NonEmptyString;
1192
1194
  /**
@@ -1265,8 +1267,8 @@ interface PortRangeOptionsBigInt {
1265
1267
  */
1266
1268
  readonly type: "bigint";
1267
1269
  /**
1268
- * The metavariable name for this parser.
1269
- * @default "PORT-PORT"
1270
+ * The metavariable name for this parser. If not specified, it is derived
1271
+ * from the {@link separator} (e.g., `"PORT-PORT"` for `"-"`).
1270
1272
  */
1271
1273
  readonly metavar?: NonEmptyString;
1272
1274
  /**
@@ -1346,6 +1348,8 @@ interface PortRangeOptionsBigInt {
1346
1348
  *
1347
1349
  * @param options - Options for port range validation.
1348
1350
  * @returns A value parser for port ranges.
1351
+ * @throws {TypeError} If `separator` contains digit characters, since digits
1352
+ * in the separator would cause ambiguous splitting of numeric port input.
1349
1353
  * @since 0.10.0
1350
1354
  *
1351
1355
  * @example
@@ -1386,6 +1386,8 @@ function email(options) {
1386
1386
  *
1387
1387
  * @param options - Options for socket address validation.
1388
1388
  * @returns A value parser for socket addresses.
1389
+ * @throws {TypeError} If `separator` contains digit characters, since digits
1390
+ * in the separator would cause ambiguous splitting of port input.
1389
1391
  * @since 0.10.0
1390
1392
  *
1391
1393
  * @example
@@ -1406,9 +1408,10 @@ function email(options) {
1406
1408
  * ```
1407
1409
  */
1408
1410
  function socketAddress(options) {
1409
- const metavar = options?.metavar ?? "HOST:PORT";
1410
- ensureNonEmptyString(metavar);
1411
1411
  const separator = options?.separator ?? ":";
1412
+ if (/\p{Nd}/u.test(separator)) throw new TypeError(`Expected separator to not contain digits, but got: ${JSON.stringify(separator)}.`);
1413
+ const metavar = options?.metavar ?? `HOST${separator}PORT`;
1414
+ ensureNonEmptyString(metavar);
1412
1415
  const defaultPort = options?.defaultPort;
1413
1416
  const requirePort = options?.requirePort ?? false;
1414
1417
  const hostType = options?.host?.type ?? "both";
@@ -1512,9 +1515,10 @@ function socketAddress(options) {
1512
1515
  function portRange(options) {
1513
1516
  if (options?.disallowWellKnown !== void 0 && typeof options.disallowWellKnown !== "boolean") throw new TypeError(`Expected disallowWellKnown to be a boolean, but got ${typeof options.disallowWellKnown}: ${String(options.disallowWellKnown)}.`);
1514
1517
  if (options?.allowSingle !== void 0 && typeof options.allowSingle !== "boolean") throw new TypeError(`Expected allowSingle to be a boolean, but got ${typeof options.allowSingle}: ${String(options.allowSingle)}.`);
1515
- const metavar = options?.metavar ?? "PORT-PORT";
1516
- ensureNonEmptyString(metavar);
1517
1518
  const separator = options?.separator ?? "-";
1519
+ if (/\p{Nd}/u.test(separator)) throw new TypeError(`Expected separator to not contain digits, but got: ${JSON.stringify(separator)}.`);
1520
+ const metavar = options?.metavar ?? `PORT${separator}PORT`;
1521
+ ensureNonEmptyString(metavar);
1518
1522
  const allowSingle = options?.allowSingle ?? false;
1519
1523
  const isBigInt = options?.type === "bigint";
1520
1524
  const portParser = isBigInt ? port({
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@optique/core",
3
- "version": "1.0.0-dev.908+f60f037d",
3
+ "version": "1.0.0-dev.921+754748bd",
4
4
  "description": "Type-safe combinatorial command-line interface parser",
5
5
  "keywords": [
6
6
  "CLI",