politty 0.3.0 → 0.3.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (62) hide show
  1. package/README.md +84 -2
  2. package/dist/{arg-registry-w5mMKJkZ.d.ts → arg-registry-B4a4Fj7f.d.cts} +51 -2
  3. package/dist/arg-registry-B4a4Fj7f.d.cts.map +1 -0
  4. package/dist/{arg-registry-i6SA4l-E.d.cts → arg-registry-C3GP-5C9.d.ts} +51 -2
  5. package/dist/arg-registry-C3GP-5C9.d.ts.map +1 -0
  6. package/dist/augment.d.cts +1 -1
  7. package/dist/augment.d.ts +1 -1
  8. package/dist/completion/index.cjs +23 -462
  9. package/dist/completion/index.cjs.map +1 -1
  10. package/dist/completion/index.d.cts +13 -91
  11. package/dist/completion/index.d.cts.map +1 -1
  12. package/dist/completion/index.d.ts +13 -91
  13. package/dist/completion/index.d.ts.map +1 -1
  14. package/dist/completion/index.js +12 -457
  15. package/dist/completion/index.js.map +1 -1
  16. package/dist/docs/index.cjs +718 -280
  17. package/dist/docs/index.cjs.map +1 -1
  18. package/dist/docs/index.d.cts +102 -47
  19. package/dist/docs/index.d.cts.map +1 -1
  20. package/dist/docs/index.d.ts +102 -47
  21. package/dist/docs/index.d.ts.map +1 -1
  22. package/dist/docs/index.js +713 -281
  23. package/dist/docs/index.js.map +1 -1
  24. package/dist/extractor-B7bOwpvP.cjs +970 -0
  25. package/dist/extractor-B7bOwpvP.cjs.map +1 -0
  26. package/dist/extractor-CCi4rjSI.d.ts +238 -0
  27. package/dist/extractor-CCi4rjSI.d.ts.map +1 -0
  28. package/dist/extractor-DsJ6hYqQ.d.cts +238 -0
  29. package/dist/extractor-DsJ6hYqQ.d.cts.map +1 -0
  30. package/dist/extractor-JfoYSoMk.js +898 -0
  31. package/dist/extractor-JfoYSoMk.js.map +1 -0
  32. package/dist/index.cjs +8 -5
  33. package/dist/index.d.cts +5 -3
  34. package/dist/index.d.cts.map +1 -1
  35. package/dist/index.d.ts +5 -3
  36. package/dist/index.d.ts.map +1 -1
  37. package/dist/index.js +5 -4
  38. package/dist/{runner-B38UBqhv.cjs → runner-BFKk3Arg.cjs} +25 -13
  39. package/dist/runner-BFKk3Arg.cjs.map +1 -0
  40. package/dist/{runner-CUN50BqK.js → runner-ElQbBn1U.js} +25 -13
  41. package/dist/runner-ElQbBn1U.js.map +1 -0
  42. package/dist/{schema-extractor-B9D3Rf22.cjs → schema-extractor-BU705qpC.cjs} +43 -4
  43. package/dist/schema-extractor-BU705qpC.cjs.map +1 -0
  44. package/dist/{schema-extractor-CXeUTW_Z.d.cts → schema-extractor-CHiBRT39.d.ts} +6 -1
  45. package/dist/schema-extractor-CHiBRT39.d.ts.map +1 -0
  46. package/dist/{schema-extractor-1YXqFSDT.js → schema-extractor-CP3ar0Wi.js} +43 -4
  47. package/dist/schema-extractor-CP3ar0Wi.js.map +1 -0
  48. package/dist/{schema-extractor-Cl_D04BX.d.ts → schema-extractor-DyfK21m_.d.cts} +6 -1
  49. package/dist/schema-extractor-DyfK21m_.d.cts.map +1 -0
  50. package/package.json +6 -6
  51. package/dist/arg-registry-i6SA4l-E.d.cts.map +0 -1
  52. package/dist/arg-registry-w5mMKJkZ.d.ts.map +0 -1
  53. package/dist/command-Bgd-yIwv.cjs +0 -25
  54. package/dist/command-Bgd-yIwv.cjs.map +0 -1
  55. package/dist/command-D-P2Pc3J.js +0 -20
  56. package/dist/command-D-P2Pc3J.js.map +0 -1
  57. package/dist/runner-B38UBqhv.cjs.map +0 -1
  58. package/dist/runner-CUN50BqK.js.map +0 -1
  59. package/dist/schema-extractor-1YXqFSDT.js.map +0 -1
  60. package/dist/schema-extractor-B9D3Rf22.cjs.map +0 -1
  61. package/dist/schema-extractor-CXeUTW_Z.d.cts.map +0 -1
  62. package/dist/schema-extractor-Cl_D04BX.d.ts.map +0 -1
@@ -0,0 +1 @@
1
+ {"version":3,"file":"extractor-JfoYSoMk.js","names":["resolveValueCompletion","extractOptions"],"sources":["../src/core/command.ts","../src/completion/bash.ts","../src/completion/dynamic/candidate-generator.ts","../src/completion/dynamic/context-parser.ts","../src/completion/dynamic/complete-command.ts","../src/completion/fish.ts","../src/completion/zsh.ts","../src/completion/extractor.ts"],"sourcesContent":["import { z } from \"zod\";\nimport type {\n ArgsSchema,\n Command,\n Example,\n NonRunnableCommand,\n RunnableCommand,\n SubCommandsRecord,\n} from \"../types.js\";\n\n/**\n * Infer args type from schema, defaults to empty object if undefined\n */\ntype InferArgs<TArgsSchema> = TArgsSchema extends z.ZodType\n ? z.infer<TArgsSchema>\n : Record<string, never>;\n\n/**\n * Config for defining a command\n * @template TArgsSchema - The Zod schema type for arguments\n * @template TResult - The return type of run function (void if no run)\n */\ninterface DefineCommandConfig<TArgsSchema extends ArgsSchema | undefined, TResult> {\n name: string;\n description?: string;\n args?: TArgsSchema;\n subCommands?: SubCommandsRecord;\n setup?: (context: { args: InferArgs<TArgsSchema> }) => void | Promise<void>;\n run?: (args: InferArgs<TArgsSchema>) => TResult;\n cleanup?: (context: {\n args: InferArgs<TArgsSchema>;\n error?: Error | undefined;\n }) => void | Promise<void>;\n notes?: string;\n examples?: Example[];\n}\n\n/**\n * Config with run function (runnable command)\n */\ninterface RunnableConfig<\n TArgsSchema extends ArgsSchema | undefined,\n TResult,\n> extends DefineCommandConfig<TArgsSchema, TResult> {\n run: (args: InferArgs<TArgsSchema>) => TResult;\n}\n\n/**\n * Config without run function (non-runnable command)\n */\ninterface NonRunnableConfig<TArgsSchema extends ArgsSchema | undefined> extends Omit<\n DefineCommandConfig<TArgsSchema, void>,\n \"run\"\n> {\n run?: undefined;\n}\n\n/**\n * Define a CLI command with type-safe arguments\n *\n * @param config - Command configuration\n * @returns A defined command with preserved type information\n *\n * @example\n * ```ts\n * import { z } from \"zod\";\n * import { arg, defineCommand } from \"politty\";\n *\n * const command = defineCommand({\n * name: \"greet\",\n * args: z.object({\n * name: arg(z.string(), { description: \"Name to greet\", positional: true }),\n * loud: arg(z.boolean().default(false), { alias: \"l\", description: \"Use uppercase\" }),\n * }),\n * run: (args) => {\n * const greeting = `Hello, ${args.name}!`;\n * console.log(args.loud ? greeting.toUpperCase() : greeting);\n * },\n * });\n *\n * // Type of command.argsSchema is preserved as z.ZodObject<...>\n * // Type of command.run is (args: { name: string; loud: boolean }) => void\n * ```\n *\n * @example\n * ```ts\n * // With discriminated union for subcommand-like behavior\n * const command = defineCommand({\n * name: \"resource\",\n * args: z.discriminatedUnion(\"action\", [\n * z.object({\n * action: z.literal(\"create\"),\n * name: arg(z.string(), { description: \"Resource name\" }),\n * }),\n * z.object({\n * action: z.literal(\"delete\"),\n * id: arg(z.coerce.number(), { description: \"Resource ID\" }),\n * }),\n * ]),\n * run: (args) => {\n * if (args.action === \"create\") {\n * console.log(`Creating ${args.name}`);\n * } else {\n * console.log(`Deleting ${args.id}`);\n * }\n * },\n * });\n * ```\n */\n// Overload 1: with run function - returns RunnableCommand with preserved schema type\nexport function defineCommand<\n TArgsSchema extends ArgsSchema | undefined = undefined,\n TResult = void,\n>(\n config: RunnableConfig<TArgsSchema, TResult>,\n): RunnableCommand<TArgsSchema, InferArgs<TArgsSchema>, TResult>;\n\n// Overload 2: without run function - returns NonRunnableCommand with preserved schema type\nexport function defineCommand<TArgsSchema extends ArgsSchema | undefined = undefined>(\n config: NonRunnableConfig<TArgsSchema>,\n): NonRunnableCommand<TArgsSchema, InferArgs<TArgsSchema>>;\n\n// Implementation\nexport function defineCommand<\n TArgsSchema extends ArgsSchema | undefined = undefined,\n TResult = void,\n>(\n config: RunnableConfig<TArgsSchema, TResult> | NonRunnableConfig<TArgsSchema>,\n): Command<TArgsSchema, InferArgs<TArgsSchema>, TResult> {\n return {\n name: config.name,\n description: config.description,\n args: config.args as TArgsSchema,\n subCommands: config.subCommands,\n setup: config.setup,\n run: config.run,\n cleanup: config.cleanup,\n notes: config.notes,\n examples: config.examples,\n } as Command<TArgsSchema, InferArgs<TArgsSchema>, TResult>;\n}\n","/**\n * Bash completion script generator (dynamic)\n */\n\nimport type { AnyCommand } from \"../types.js\";\nimport type { CompletionOptions, CompletionResult } from \"./types.js\";\n\n/**\n * Generate bash completion script for a command\n *\n * Generates a dynamic script that calls the CLI's __complete command at runtime.\n */\nexport function generateBashCompletion(\n _command: AnyCommand,\n options: CompletionOptions,\n): CompletionResult {\n const programName = options.programName;\n\n return {\n script: `# Bash completion for ${programName}\n# Generated by politty\n\n_${programName}_completions() {\n local cur=\"\\${COMP_WORDS[COMP_CWORD]}\"\n local args=(\"\\${COMP_WORDS[@]:1:COMP_CWORD}\")\n local completion_prefix=\"\"\n local completion_cur=\"$cur\"\n\n # Handle inline option-value completion for long options (e.g. --format=js)\n if [[ \"$cur\" == --*=* ]]; then\n completion_prefix=\"\\${cur%%=*}=\"\n completion_cur=\"\\${cur#*=}\"\n fi\n\n # Call the CLI to get completions\n local output\n if ! output=$(${programName} __complete -- \"\\${args[@]}\" 2>/dev/null); then\n # Backward compatibility for CLIs exposing only completion\n output=$(${programName} completion __complete -- \"\\${args[@]}\" 2>/dev/null)\n fi\n\n local candidates=()\n local directive=0\n local command_completion=\"\"\n local file_extensions=\"\"\n\n # Parse output: value\\\\tdescription lines, ending with :directive\n while IFS=$'\\\\t' read -r name desc; do\n if [[ \"$name\" == :* ]]; then\n directive=\"\\${name:1}\"\n elif [[ \"$name\" == __command:* ]]; then\n command_completion=\"\\${name#__command:}\"\n elif [[ \"$name\" == __extensions:* ]]; then\n file_extensions=\"\\${name#__extensions:}\"\n elif [[ -n \"$name\" ]]; then\n candidates+=(\"$name\")\n fi\n done <<< \"$output\"\n\n # Execute shellCommand completion if requested by __complete\n if [[ -n \"$command_completion\" ]]; then\n while IFS= read -r command_candidate; do\n if [[ -n \"$command_candidate\" ]]; then\n candidates+=(\"$command_candidate\")\n fi\n done < <(eval \"$command_completion\" 2>/dev/null)\n fi\n\n # Handle directives\n # 16 = FileCompletion, 32 = DirectoryCompletion\n if (( directive & 16 )); then\n COMPREPLY=($(compgen -f -- \"$completion_cur\"))\n\n if [[ -n \"$file_extensions\" ]]; then\n local -a filtered=()\n local -a extension_list=()\n local file_candidate ext\n\n IFS=',' read -r -a extension_list <<< \"$file_extensions\"\n\n for file_candidate in \"\\${COMPREPLY[@]}\"; do\n if [[ -d \"$file_candidate\" ]]; then\n filtered+=(\"$file_candidate\")\n continue\n fi\n\n for ext in \"\\${extension_list[@]}\"; do\n if [[ \"$file_candidate\" == *.\"$ext\" ]]; then\n filtered+=(\"$file_candidate\")\n break\n fi\n done\n done\n\n COMPREPLY=(\"\\${filtered[@]}\")\n fi\n elif (( directive & 32 )); then\n COMPREPLY=($(compgen -d -- \"$completion_cur\"))\n elif [[ \\${#candidates[@]} -gt 0 ]]; then\n COMPREPLY=($(compgen -W \"\\${candidates[*]}\" -- \"$completion_cur\"))\n fi\n\n if [[ -n \"$completion_prefix\" && \\${#COMPREPLY[@]} -gt 0 ]]; then\n local -a prefixed=()\n local candidate\n for candidate in \"\\${COMPREPLY[@]}\"; do\n prefixed+=(\"$completion_prefix$candidate\")\n done\n COMPREPLY=(\"\\${prefixed[@]}\")\n fi\n\n return 0\n}\n\n# Register the completion function\ncomplete -F _${programName}_completions ${programName}\n`,\n shell: \"bash\",\n installInstructions: `# To enable completions, add the following to your ~/.bashrc:\n\n# Option 1: Source directly\neval \"$(${programName} completion bash)\"\n\n# Option 2: Save to a file\n${programName} completion bash > ~/.local/share/bash-completion/completions/${programName}\n\n# Then reload your shell or run:\nsource ~/.bashrc`,\n };\n}\n","/**\n * Generate completion candidates based on context\n */\n\nimport type { CompletionContext } from \"./context-parser.js\";\n\n/**\n * Completion directive flags (bitwise)\n */\nexport const CompletionDirective = {\n /** Default completion behavior */\n Default: 0,\n /** Don't add space after completion */\n NoSpace: 1,\n /** Don't offer file completion (even if no other completions) */\n NoFileCompletion: 2,\n /** Filter completions using current word as prefix */\n FilterPrefix: 4,\n /** Keep the order of completions */\n KeepOrder: 8,\n /** Trigger file completion */\n FileCompletion: 16,\n /** Trigger directory completion */\n DirectoryCompletion: 32,\n /** Error occurred during completion */\n Error: 64,\n} as const;\n\n/**\n * A completion candidate\n */\nexport interface CompletionCandidate {\n /** The completion value */\n value: string;\n /** Optional description */\n description?: string | undefined;\n /** Type hint for display purposes */\n type?: \"option\" | \"subcommand\" | \"value\" | \"file\" | \"directory\";\n}\n\n/**\n * Result of candidate generation\n */\nexport interface CandidateResult {\n /** Completion candidates */\n candidates: CompletionCandidate[];\n /** Directive flags for shell behavior */\n directive: number;\n}\n\n/**\n * Generate completion candidates based on context\n */\nexport function generateCandidates(context: CompletionContext): CandidateResult {\n const candidates: CompletionCandidate[] = [];\n let directive = CompletionDirective.Default;\n\n switch (context.completionType) {\n case \"subcommand\":\n return generateSubcommandCandidates(context);\n\n case \"option-name\":\n return generateOptionNameCandidates(context);\n\n case \"option-value\":\n return generateOptionValueCandidates(context);\n\n case \"positional\":\n return generatePositionalCandidates(context);\n\n default:\n return { candidates, directive };\n }\n}\n\nfunction addFileExtensionMetadata(\n candidates: CompletionCandidate[],\n extensions: string[] | undefined,\n): void {\n if (!extensions || extensions.length === 0) {\n return;\n }\n\n const normalized = Array.from(\n new Set(extensions.map((ext) => ext.trim().replace(/^\\./, \"\")).filter((ext) => ext.length > 0)),\n );\n\n if (normalized.length === 0) {\n return;\n }\n\n candidates.push({\n value: `__extensions:${normalized.join(\",\")}`,\n type: \"value\",\n });\n}\n\n/**\n * Generate subcommand candidates\n */\nfunction generateSubcommandCandidates(context: CompletionContext): CandidateResult {\n const candidates: CompletionCandidate[] = [];\n let directive = CompletionDirective.FilterPrefix;\n\n // Add subcommands\n for (const name of context.subcommands) {\n // Get description from the subcommand if possible\n let description: string | undefined;\n if (context.currentCommand.subCommands) {\n const sub = context.currentCommand.subCommands[name];\n if (sub && typeof sub !== \"function\") {\n description = sub.description;\n }\n }\n\n candidates.push({\n value: name,\n description,\n type: \"subcommand\",\n });\n }\n\n // Add options when no subcommands exist, or when typing an option prefix\n if (candidates.length === 0 || context.currentWord.startsWith(\"-\")) {\n const optionResult = generateOptionNameCandidates(context);\n candidates.push(...optionResult.candidates);\n }\n\n return { candidates, directive };\n}\n\n/**\n * Generate option name candidates\n */\nfunction generateOptionNameCandidates(context: CompletionContext): CandidateResult {\n const candidates: CompletionCandidate[] = [];\n const directive = CompletionDirective.FilterPrefix;\n\n // Filter out already used options\n const availableOptions = context.options.filter((opt) => {\n // Array options can be specified multiple times, so keep them available.\n if (opt.valueType === \"array\") {\n return true;\n }\n\n return !context.usedOptions.has(opt.cliName) && !context.usedOptions.has(opt.alias || \"\");\n });\n\n for (const opt of availableOptions) {\n candidates.push({\n value: `--${opt.cliName}`,\n description: opt.description,\n type: \"option\",\n });\n }\n\n // Add help option if not already used\n if (!context.usedOptions.has(\"help\")) {\n candidates.push({\n value: \"--help\",\n description: \"Show help information\",\n type: \"option\",\n });\n }\n\n return { candidates, directive };\n}\n\n/**\n * Generate option value candidates\n */\nfunction generateOptionValueCandidates(context: CompletionContext): CandidateResult {\n const candidates: CompletionCandidate[] = [];\n let directive = CompletionDirective.FilterPrefix;\n\n if (!context.targetOption) {\n return { candidates, directive };\n }\n\n const vc = context.targetOption.valueCompletion;\n if (!vc) {\n // No specific completion, return empty\n return { candidates, directive };\n }\n\n switch (vc.type) {\n case \"choices\":\n if (vc.choices) {\n for (const choice of vc.choices) {\n candidates.push({\n value: choice,\n type: \"value\",\n });\n }\n }\n break;\n\n case \"file\":\n directive |= CompletionDirective.FileCompletion;\n addFileExtensionMetadata(candidates, vc.extensions);\n break;\n\n case \"directory\":\n directive |= CompletionDirective.DirectoryCompletion;\n break;\n\n case \"command\":\n // Shell command completion - the shell script will execute the command\n // We return empty candidates and let the shell handle it\n if (vc.shellCommand) {\n // Return the shell command as a special candidate\n candidates.push({\n value: `__command:${vc.shellCommand}`,\n type: \"value\",\n });\n }\n break;\n\n case \"none\":\n // No completion\n directive |= CompletionDirective.NoFileCompletion;\n break;\n }\n\n return { candidates, directive };\n}\n\n/**\n * Generate positional argument candidates\n */\nfunction generatePositionalCandidates(context: CompletionContext): CandidateResult {\n const candidates: CompletionCandidate[] = [];\n let directive = CompletionDirective.FilterPrefix;\n\n // Get the positional at current index\n const positionalIndex = context.positionalIndex ?? 0;\n const positional = context.positionals[positionalIndex];\n\n if (!positional) {\n // No more positionals expected, maybe return subcommands?\n return { candidates, directive };\n }\n\n const vc = positional.valueCompletion;\n if (!vc) {\n // No specific completion\n return { candidates, directive };\n }\n\n switch (vc.type) {\n case \"choices\":\n if (vc.choices) {\n for (const choice of vc.choices) {\n candidates.push({\n value: choice,\n description: positional.description,\n type: \"value\",\n });\n }\n }\n break;\n\n case \"file\":\n directive |= CompletionDirective.FileCompletion;\n addFileExtensionMetadata(candidates, vc.extensions);\n break;\n\n case \"directory\":\n directive |= CompletionDirective.DirectoryCompletion;\n break;\n\n case \"command\":\n if (vc.shellCommand) {\n candidates.push({\n value: `__command:${vc.shellCommand}`,\n type: \"value\",\n });\n }\n break;\n\n case \"none\":\n directive |= CompletionDirective.NoFileCompletion;\n break;\n }\n\n return { candidates, directive };\n}\n\n/**\n * Format candidates as shell completion output\n *\n * Format: value\\tdescription (tab-separated)\n * Last line: :directive_code\n */\nexport function formatOutput(result: CandidateResult): string {\n const lines: string[] = [];\n\n for (const candidate of result.candidates) {\n if (candidate.description) {\n lines.push(`${candidate.value}\\t${candidate.description}`);\n } else {\n lines.push(candidate.value);\n }\n }\n\n // Add directive as last line\n lines.push(`:${result.directive}`);\n\n return lines.join(\"\\n\");\n}\n","/**\n * Parse completion context from partial command line\n */\n\nimport { extractFields } from \"../../core/schema-extractor.js\";\nimport type { AnyCommand } from \"../../types.js\";\nimport type { CompletableOption, CompletablePositional, ValueCompletion } from \"../types.js\";\n\n/**\n * Completion type indicates what kind of completion is expected\n */\nexport type CompletionType =\n | \"subcommand\" // Completing a subcommand name\n | \"option-name\" // Completing an option name (--xxx, -x)\n | \"option-value\" // Completing an option's value\n | \"positional\"; // Completing a positional argument\n\n/**\n * Context for completion at current cursor position\n */\nexport interface CompletionContext {\n /** Subcommand path from root (e.g., [\"plugin\", \"add\"]) */\n subcommandPath: string[];\n /** The resolved command at current path */\n currentCommand: AnyCommand;\n /** Current word being typed (may be partial) */\n currentWord: string;\n /** Previous word (useful for option value detection) */\n previousWord: string;\n /** What type of completion is expected */\n completionType: CompletionType;\n /** Target option when completing option value */\n targetOption?: CompletableOption | undefined;\n /** Positional index when completing positional argument */\n positionalIndex?: number | undefined;\n /** Available options for current command */\n options: CompletableOption[];\n /** Available subcommands */\n subcommands: string[];\n /** Available positionals */\n positionals: CompletablePositional[];\n /** Options already used (to avoid duplicates) */\n usedOptions: Set<string>;\n /** Number of positional arguments already provided */\n providedPositionalCount: number;\n}\n\n/**\n * Resolve value completion from field metadata\n */\nfunction resolveValueCompletion(field: {\n completion?:\n | {\n type?: string;\n custom?: { choices?: string[]; shellCommand?: string };\n extensions?: string[];\n }\n | undefined;\n enumValues?: string[] | undefined;\n}): ValueCompletion | undefined {\n const meta = field.completion;\n\n // Priority 1: Explicit custom completion\n if (meta?.custom) {\n if (meta.custom.choices && meta.custom.choices.length > 0) {\n return { type: \"choices\", choices: meta.custom.choices };\n }\n if (meta.custom.shellCommand) {\n return { type: \"command\", shellCommand: meta.custom.shellCommand };\n }\n }\n\n // Priority 2: Explicit completion type\n if (meta?.type) {\n if (meta.type === \"file\") {\n return meta.extensions ? { type: \"file\", extensions: meta.extensions } : { type: \"file\" };\n }\n if (meta.type === \"directory\") {\n return { type: \"directory\" };\n }\n if (meta.type === \"none\") {\n return { type: \"none\" };\n }\n }\n\n // Priority 3: Auto-detect from enum schema\n if (field.enumValues && field.enumValues.length > 0) {\n return { type: \"choices\", choices: field.enumValues };\n }\n\n return undefined;\n}\n\n/**\n * Extract options from a command\n */\nfunction extractOptions(command: AnyCommand): CompletableOption[] {\n if (!command.args) {\n return [];\n }\n\n const extracted = extractFields(command.args);\n return extracted.fields\n .filter((field) => !field.positional)\n .map((field) => ({\n name: field.name,\n cliName: field.cliName,\n alias: field.alias,\n description: field.description,\n takesValue: field.type !== \"boolean\",\n valueType: field.type,\n required: field.required,\n valueCompletion: resolveValueCompletion(field),\n }));\n}\n\n/**\n * Extract positionals from a command\n */\nfunction extractPositionalsForContext(command: AnyCommand): CompletablePositional[] {\n if (!command.args) {\n return [];\n }\n\n const extracted = extractFields(command.args);\n return extracted.fields\n .filter((field) => field.positional)\n .map((field, index) => ({\n name: field.name,\n cliName: field.cliName,\n position: index,\n description: field.description,\n required: field.required,\n valueCompletion: resolveValueCompletion(field),\n }));\n}\n\n/**\n * Get subcommand names from a command\n */\nfunction getSubcommandNames(command: AnyCommand): string[] {\n if (!command.subCommands) {\n return [];\n }\n // Filter out internal subcommands (e.g., __complete)\n return Object.keys(command.subCommands).filter((name) => !name.startsWith(\"__\"));\n}\n\n/**\n * Resolve subcommand by name\n */\nfunction resolveSubcommand(command: AnyCommand, name: string): AnyCommand | null {\n if (!command.subCommands) {\n return null;\n }\n\n const sub = command.subCommands[name];\n if (!sub) {\n return null;\n }\n\n // Skip async subcommands (can't inspect statically)\n if (typeof sub === \"function\") {\n return null;\n }\n\n return sub;\n}\n\n/**\n * Check if a word is an option (starts with - or --)\n */\nfunction isOption(word: string): boolean {\n return word.startsWith(\"-\");\n}\n\n/**\n * Parse option name from word (e.g., \"--foo=bar\" -> \"foo\", \"-v\" -> \"v\")\n */\nfunction parseOptionName(word: string): string {\n if (word.startsWith(\"--\")) {\n const withoutPrefix = word.slice(2);\n const eqIndex = withoutPrefix.indexOf(\"=\");\n return eqIndex >= 0 ? withoutPrefix.slice(0, eqIndex) : withoutPrefix;\n }\n if (word.startsWith(\"-\")) {\n return word.slice(1, 2); // First char after -\n }\n return word;\n}\n\n/**\n * Check if option has inline value (e.g., \"--foo=bar\")\n */\nfunction hasInlineValue(word: string): boolean {\n return word.includes(\"=\");\n}\n\n/**\n * Find option by name or alias\n */\nfunction findOption(\n options: CompletableOption[],\n nameOrAlias: string,\n): CompletableOption | undefined {\n return options.find((opt) => opt.cliName === nameOrAlias || opt.alias === nameOrAlias);\n}\n\n/**\n * Parse completion context from command line arguments\n *\n * @param argv - Arguments after the program name (e.g., [\"build\", \"--fo\"])\n * @param rootCommand - The root command\n * @returns Completion context\n */\nexport function parseCompletionContext(argv: string[], rootCommand: AnyCommand): CompletionContext {\n // Initialize with root command\n let currentCommand = rootCommand;\n const subcommandPath: string[] = [];\n\n // Track used options and positional count\n const usedOptions = new Set<string>();\n let positionalCount = 0;\n\n // Process arguments to resolve subcommands and track state\n let i = 0;\n let options = extractOptions(currentCommand);\n let afterDoubleDash = false;\n\n // Traverse subcommands\n while (i < argv.length - 1) {\n const word = argv[i]!;\n\n // \"--\" marks the end of option parsing\n if (!afterDoubleDash && word === \"--\") {\n afterDoubleDash = true;\n i++;\n continue;\n }\n\n // Skip options and their values (before \"--\")\n if (!afterDoubleDash && isOption(word)) {\n const optName = parseOptionName(word);\n const opt = findOption(options, optName);\n\n if (opt) {\n usedOptions.add(opt.cliName);\n if (opt.alias) usedOptions.add(opt.alias);\n\n // Skip next word if option takes value and doesn't have inline value\n if (opt.takesValue && !hasInlineValue(word)) {\n i++;\n }\n }\n i++;\n continue;\n }\n\n // Check if this is a subcommand (before \"--\")\n const subcommand = afterDoubleDash ? null : resolveSubcommand(currentCommand, word);\n if (subcommand) {\n subcommandPath.push(word);\n currentCommand = subcommand;\n options = extractOptions(currentCommand);\n usedOptions.clear(); // Reset for new subcommand\n positionalCount = 0;\n i++;\n continue;\n }\n\n // Otherwise it's a positional argument\n positionalCount++;\n i++;\n }\n\n // Get current and previous word\n const currentWord: string = argv[argv.length - 1] ?? \"\";\n const previousWord: string = argv[argv.length - 2] ?? \"\";\n\n // Extract data for current command\n const positionals = extractPositionalsForContext(currentCommand);\n const subcommands = getSubcommandNames(currentCommand);\n\n // Determine completion type\n let completionType: CompletionType;\n let targetOption: CompletableOption | undefined;\n let positionalIndex: number | undefined;\n\n // Case 1: Previous word is an option that takes a value\n if (!afterDoubleDash && previousWord && isOption(previousWord) && !hasInlineValue(previousWord)) {\n const optName = parseOptionName(previousWord);\n const opt = findOption(options, optName);\n if (opt && opt.takesValue) {\n completionType = \"option-value\";\n targetOption = opt;\n } else {\n completionType = determineDefaultCompletionType(\n currentWord,\n subcommands,\n positionals,\n positionalCount,\n );\n }\n }\n // Case 2: Current word is an option with inline value (--foo=)\n else if (!afterDoubleDash && currentWord.startsWith(\"--\") && hasInlineValue(currentWord)) {\n const optName = parseOptionName(currentWord);\n const opt = findOption(options, optName);\n if (opt && opt.takesValue) {\n completionType = \"option-value\";\n targetOption = opt;\n } else {\n completionType = \"option-name\";\n }\n }\n // Case 3: Current word starts with - (completing option name)\n else if (!afterDoubleDash && currentWord.startsWith(\"-\")) {\n completionType = \"option-name\";\n }\n // Case 4: Determine based on available subcommands and positionals\n else {\n completionType = determineDefaultCompletionType(\n currentWord,\n subcommands,\n positionals,\n positionalCount,\n );\n if (completionType === \"positional\") {\n positionalIndex = positionalCount;\n }\n }\n\n return {\n subcommandPath,\n currentCommand,\n currentWord,\n previousWord,\n completionType,\n targetOption,\n positionalIndex,\n options,\n subcommands,\n positionals,\n usedOptions,\n providedPositionalCount: positionalCount,\n };\n}\n\n/**\n * Determine default completion type when not completing an option\n */\nfunction determineDefaultCompletionType(\n currentWord: string,\n subcommands: string[],\n positionals: CompletablePositional[],\n positionalCount: number,\n): CompletionType {\n // If there are subcommands and current word might match one, suggest subcommands\n if (subcommands.length > 0) {\n // Check if any subcommand starts with current word\n const matchingSubcommands = subcommands.filter((s) => s.startsWith(currentWord));\n if (matchingSubcommands.length > 0 || currentWord === \"\") {\n return \"subcommand\";\n }\n }\n\n // If there are positionals to complete\n if (positionalCount < positionals.length) {\n return \"positional\";\n }\n\n // If the last positional is variadic (array), continue with positional\n if (positionals.length > 0) {\n // TODO: Check if last positional is variadic\n return \"positional\";\n }\n\n // Default to subcommand (will show options too)\n return \"subcommand\";\n}\n","/**\n * Dynamic completion command implementation\n *\n * This creates a hidden `__complete` command that outputs completion candidates\n * for shell scripts to consume. Usage:\n *\n * mycli __complete -- build --fo\n * mycli __complete -- plugin add\n *\n * Output format:\n * value\\tdescription\n * ...\n * :directive_code\n */\n\nimport { z } from \"zod\";\nimport { arg } from \"../../core/arg-registry.js\";\nimport { defineCommand } from \"../../core/command.js\";\nimport type { AnyCommand, Command } from \"../../types.js\";\nimport { formatOutput, generateCandidates } from \"./candidate-generator.js\";\nimport { parseCompletionContext } from \"./context-parser.js\";\n\n/**\n * Schema for the __complete command\n *\n * Arguments after -- are collected as the completion arguments\n */\nconst completeArgsSchema = z.object({\n // The arguments to complete are passed after --\n // We use rest args to capture them\n args: arg(z.array(z.string()).default([]), {\n positional: true,\n description: \"Arguments to complete\",\n variadic: true,\n }),\n});\n\ntype CompleteArgs = z.infer<typeof completeArgsSchema>;\n\n/**\n * Create the dynamic completion command\n *\n * @param rootCommand - The root command to generate completions for\n * @param programName - The program name (optional, defaults to rootCommand.name)\n * @returns A command that outputs completion candidates\n */\nexport function createDynamicCompleteCommand(\n rootCommand: AnyCommand,\n _programName?: string,\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n): Command<typeof completeArgsSchema, CompleteArgs, any> {\n return defineCommand({\n name: \"__complete\",\n // No description - this is a hidden command\n args: completeArgsSchema,\n run(args) {\n // Parse the completion context\n const context = parseCompletionContext(args.args, rootCommand);\n\n // Generate candidates\n const result = generateCandidates(context);\n\n // Output in shell-consumable format\n console.log(formatOutput(result));\n },\n });\n}\n\n/**\n * Check if a command tree contains the __complete command\n */\nexport function hasCompleteCommand(command: AnyCommand): boolean {\n return Boolean(command.subCommands?.[\"__complete\"]);\n}\n","/**\n * Fish completion script generator (dynamic)\n */\n\nimport type { AnyCommand } from \"../types.js\";\nimport type { CompletionOptions, CompletionResult } from \"./types.js\";\n\n/**\n * Generate fish completion script for a command\n *\n * Generates a dynamic script that calls the CLI's __complete command at runtime.\n */\nexport function generateFishCompletion(\n _command: AnyCommand,\n options: CompletionOptions,\n): CompletionResult {\n const programName = options.programName;\n\n return {\n script: `# Fish completion for ${programName}\n# Generated by politty\n# This script calls the CLI to generate completions dynamically\n\nfunction __fish_${programName}_complete\n # Get current command line arguments\n set -l args (commandline -opc)\n # Remove the program name\n set -e args[1]\n\n # Call the CLI to get completions\n set -l directive 0\n set -l command_completion\n set -l file_extensions\n\n for line in (${programName} __complete -- $args 2>/dev/null)\n if string match -q ':*' -- $line\n # Parse directive\n set directive (string sub -s 2 -- $line)\n else if string match -q '__command:*' -- $line\n # Parse shell command completion request\n set command_completion (string sub -s 11 -- $line)\n else if string match -q '__extensions:*' -- $line\n # Parse optional file extension metadata\n set file_extensions (string sub -s 14 -- $line)\n else if test -n \"$line\"\n # Parse completion: value\\\\tdescription\n set -l parts (string split \\\\t -- $line)\n if test (count $parts) -ge 2\n echo $parts[1]\\\\t$parts[2]\n else\n echo $parts[1]\n end\n end\n end\n\n # Execute shellCommand completion if requested by __complete\n if test -n \"$command_completion\"\n for command_candidate in (eval \"$command_completion\" 2>/dev/null)\n if test -n \"$command_candidate\"\n echo $command_candidate\n end\n end\n end\n\n # Handle directives by returning special values\n # The main completion function will check for these\n if test (math \"$directive & 16\") -ne 0\n echo \"__directive:file\"\n else if test (math \"$directive & 32\") -ne 0\n echo \"__directive:directory\"\n end\nend\n\n# Clear existing completions\ncomplete -e -c ${programName}\n\n# Main completion\ncomplete -c ${programName} -f -a '(\n set -l completions (__fish_${programName}_complete)\n for c in $completions\n if string match -q \"__directive:file\" -- $c\n __fish_complete_path\n else if string match -q \"__directive:directory\" -- $c\n __fish_complete_directories\n else\n echo $c\n end\n end\n)'\n`,\n shell: \"fish\",\n installInstructions: `# To enable completions, run one of the following:\n\n# Option 1: Source directly\n${programName} completion fish | source\n\n# Option 2: Save to the fish completions directory\n${programName} completion fish > ~/.config/fish/completions/${programName}.fish\n\n# The completion will be available immediately in new shell sessions.\n# To use in the current session, run:\nsource ~/.config/fish/completions/${programName}.fish`,\n };\n}\n","/**\n * Zsh completion script generator (dynamic)\n */\n\nimport type { AnyCommand } from \"../types.js\";\nimport type { CompletionOptions, CompletionResult } from \"./types.js\";\n\n/**\n * Generate zsh completion script for a command\n *\n * Generates a dynamic script that calls the CLI's __complete command at runtime.\n */\nexport function generateZshCompletion(\n _command: AnyCommand,\n options: CompletionOptions,\n): CompletionResult {\n const programName = options.programName;\n\n return {\n script: `#compdef ${programName}\n\n# Zsh completion for ${programName}\n# Generated by politty\n\n_${programName}() {\n local -a candidates\n local output line directive=0\n local command_completion=\"\"\n local file_extensions=\"\"\n\n # Get the current words being completed\n local -a args\n args=(\"\\${words[@]:1}\")\n\n # Call the CLI to get completions\n output=(\"\\${(@f)$(${programName} __complete -- \"\\${args[@]}\" 2>/dev/null)}\")\n\n # Parse output\n for line in \"\\${output[@]}\"; do\n if [[ \"$line\" == :* ]]; then\n directive=\"\\${line:1}\"\n elif [[ \"$line\" == __command:* ]]; then\n command_completion=\"\\${line#__command:}\"\n elif [[ \"$line\" == __extensions:* ]]; then\n file_extensions=\"\\${line#__extensions:}\"\n elif [[ -n \"$line\" ]]; then\n local name=\"\\${line%%$'\\\\t'*}\"\n local desc=\"\\${line#*$'\\\\t'}\"\n if [[ \"$name\" == \"$desc\" ]]; then\n candidates+=(\"$name\")\n else\n candidates+=(\"$name:$desc\")\n fi\n fi\n done\n\n # Execute shellCommand completion if requested by __complete\n if [[ -n \"$command_completion\" ]]; then\n local command_candidate\n for command_candidate in \"\\${(@f)$(eval \"$command_completion\" 2>/dev/null)}\"; do\n if [[ -n \"$command_candidate\" ]]; then\n candidates+=(\"$command_candidate\")\n fi\n done\n fi\n\n # Handle directives\n # 16 = FileCompletion, 32 = DirectoryCompletion\n if (( directive & 16 )); then\n _files\n elif (( directive & 32 )); then\n _files -/\n elif (( \\${#candidates[@]} > 0 )); then\n _describe 'completions' candidates\n fi\n}\n\ncompdef _${programName} ${programName}\n`,\n shell: \"zsh\",\n installInstructions: `# To enable completions, add the following to your ~/.zshrc:\n\n# Option 1: Source directly (add before compinit)\neval \"$(${programName} completion zsh)\"\n\n# Option 2: Save to a file in your fpath\n${programName} completion zsh > ~/.zsh/completions/_${programName}\n\n# Make sure your fpath includes the completions directory:\n# fpath=(~/.zsh/completions $fpath)\n# autoload -Uz compinit && compinit\n\n# Then reload your shell or run:\nsource ~/.zshrc`,\n };\n}\n","/**\n * Extract completion data from commands\n */\n\nimport { extractFields, type ResolvedFieldMeta } from \"../core/schema-extractor.js\";\nimport type { AnyCommand } from \"../types.js\";\nimport type {\n CompletableOption,\n CompletablePositional,\n CompletableSubcommand,\n CompletionData,\n ValueCompletion,\n} from \"./types.js\";\n\n/**\n * Resolve value completion from field metadata\n *\n * Priority:\n * 1. Explicit custom completion (choices or shellCommand)\n * 2. Explicit completion type (file, directory, none)\n * 3. Auto-detected enum values from schema\n */\nfunction resolveValueCompletion(field: ResolvedFieldMeta): ValueCompletion | undefined {\n const meta = field.completion;\n\n // Priority 1: Explicit custom completion\n if (meta?.custom) {\n if (meta.custom.choices && meta.custom.choices.length > 0) {\n return { type: \"choices\", choices: meta.custom.choices };\n }\n if (meta.custom.shellCommand) {\n return { type: \"command\", shellCommand: meta.custom.shellCommand };\n }\n }\n\n // Priority 2: Explicit completion type\n if (meta?.type) {\n if (meta.type === \"file\") {\n return meta.extensions ? { type: \"file\", extensions: meta.extensions } : { type: \"file\" };\n }\n if (meta.type === \"directory\") {\n return { type: \"directory\" };\n }\n if (meta.type === \"none\") {\n return { type: \"none\" };\n }\n }\n\n // Priority 3: Auto-detect from enum schema\n if (field.enumValues && field.enumValues.length > 0) {\n return { type: \"choices\", choices: field.enumValues };\n }\n\n return undefined;\n}\n\n/**\n * Convert a resolved field to a completable option\n */\nfunction fieldToOption(field: ResolvedFieldMeta): CompletableOption {\n return {\n name: field.name,\n cliName: field.cliName,\n alias: field.alias,\n description: field.description,\n // Booleans are flags that don't require a value\n takesValue: field.type !== \"boolean\",\n valueType: field.type,\n required: field.required,\n valueCompletion: resolveValueCompletion(field),\n };\n}\n\n/**\n * Extract options from a command's args schema\n */\nfunction extractOptions(command: AnyCommand): CompletableOption[] {\n if (!command.args) {\n return [];\n }\n\n const extracted = extractFields(command.args);\n return extracted.fields\n .filter((field) => !field.positional) // Only include flags/options, not positionals\n .map(fieldToOption);\n}\n\n/**\n * Extract positional arguments from a command\n */\nexport function extractPositionals(command: AnyCommand): ResolvedFieldMeta[] {\n if (!command.args) {\n return [];\n }\n\n const extracted = extractFields(command.args);\n return extracted.fields.filter((field) => field.positional);\n}\n\n/**\n * Extract completable positional arguments from a command\n */\nfunction extractCompletablePositionals(command: AnyCommand): CompletablePositional[] {\n if (!command.args) {\n return [];\n }\n\n const extracted = extractFields(command.args);\n return extracted.fields\n .filter((field) => field.positional)\n .map((field, index) => ({\n name: field.name,\n cliName: field.cliName,\n position: index,\n description: field.description,\n required: field.required,\n valueCompletion: resolveValueCompletion(field),\n }));\n}\n\n/**\n * Extract a completable subcommand from a command\n */\nfunction extractSubcommand(name: string, command: AnyCommand): CompletableSubcommand {\n const subcommands: CompletableSubcommand[] = [];\n\n // Extract subcommands recursively (only sync subcommands for now)\n if (command.subCommands) {\n for (const [subName, subCommand] of Object.entries(command.subCommands)) {\n // Skip async subcommands as we can't inspect them statically\n if (typeof subCommand === \"function\") {\n // For async subcommands, add a placeholder\n subcommands.push({\n name: subName,\n description: \"(lazy loaded)\",\n subcommands: [],\n options: [],\n positionals: [],\n });\n } else {\n subcommands.push(extractSubcommand(subName, subCommand));\n }\n }\n }\n\n return {\n name,\n description: command.description,\n subcommands,\n options: extractOptions(command),\n positionals: extractCompletablePositionals(command),\n };\n}\n\n/**\n * Extract completion data from a command tree\n */\nexport function extractCompletionData(command: AnyCommand, programName: string): CompletionData {\n const rootSubcommand = extractSubcommand(programName, command);\n\n return {\n command: rootSubcommand,\n programName,\n // Global options are the options defined on the root command\n globalOptions: rootSubcommand.options,\n };\n}\n"],"mappings":"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"}
package/dist/index.cjs CHANGED
@@ -1,17 +1,19 @@
1
1
  Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
2
- const require_schema_extractor = require('./schema-extractor-B9D3Rf22.cjs');
3
- const require_command = require('./command-Bgd-yIwv.cjs');
4
- const require_runner = require('./runner-B38UBqhv.cjs');
2
+ const require_schema_extractor = require('./schema-extractor-BU705qpC.cjs');
3
+ const require_extractor = require('./extractor-B7bOwpvP.cjs');
4
+ const require_completion_index = require('./completion/index.cjs');
5
+ const require_runner = require('./runner-BFKk3Arg.cjs');
5
6
 
6
7
  exports.DuplicateAliasError = require_runner.DuplicateAliasError;
7
8
  exports.DuplicateFieldError = require_runner.DuplicateFieldError;
8
9
  exports.PositionalConfigError = require_runner.PositionalConfigError;
9
10
  exports.ReservedAliasError = require_runner.ReservedAliasError;
10
11
  exports.arg = require_schema_extractor.arg;
11
- exports.defineCommand = require_command.defineCommand;
12
+ exports.defineCommand = require_extractor.defineCommand;
12
13
  exports.extractFields = require_schema_extractor.extractFields;
13
14
  exports.formatCommandValidationErrors = require_runner.formatCommandValidationErrors;
14
15
  exports.formatValidationErrors = require_runner.formatValidationErrors;
16
+ exports.generateCompletion = require_completion_index.generateCompletion;
15
17
  exports.generateHelp = require_runner.generateHelp;
16
18
  exports.getUnknownKeysMode = require_schema_extractor.getUnknownKeysMode;
17
19
  exports.isColorEnabled = require_runner.isColorEnabled;
@@ -29,4 +31,5 @@ exports.validateCommand = require_runner.validateCommand;
29
31
  exports.validateDuplicateAliases = require_runner.validateDuplicateAliases;
30
32
  exports.validateDuplicateFields = require_runner.validateDuplicateFields;
31
33
  exports.validatePositionalConfig = require_runner.validatePositionalConfig;
32
- exports.validateReservedAliases = require_runner.validateReservedAliases;
34
+ exports.validateReservedAliases = require_runner.validateReservedAliases;
35
+ exports.withCompletionCommand = require_completion_index.withCompletionCommand;
package/dist/index.d.cts CHANGED
@@ -1,5 +1,7 @@
1
- import { n as arg, t as ArgMeta } from "./arg-registry-i6SA4l-E.cjs";
2
- import { C as RunResultSuccess, D as SubCommandsRecord, E as SubCommandValue, S as RunResultFailure, T as SetupContext, _ as Logger, a as getUnknownKeysMode, b as RunCommandOptions, c as ArgsSchema, d as Command, f as CommandBase, g as LogStream, h as LogLevel, i as extractFields, l as CleanupContext, m as LogEntry, n as ResolvedFieldMeta, o as toKebabCase, p as Example, r as UnknownKeysMode, s as AnyCommand, t as ExtractedFields, u as CollectedLogs, v as MainOptions, w as RunnableCommand, x as RunResult, y as NonRunnableCommand } from "./schema-extractor-CXeUTW_Z.cjs";
1
+ import { a as arg, i as CustomCompletion, n as CompletionMeta, r as CompletionType, t as ArgMeta } from "./arg-registry-B4a4Fj7f.cjs";
2
+ import { C as RunResultSuccess, D as SubCommandsRecord, E as SubCommandValue, S as RunResultFailure, T as SetupContext, _ as Logger, a as getUnknownKeysMode, b as RunCommandOptions, c as ArgsSchema, d as Command, f as CommandBase, g as LogStream, h as LogLevel, i as extractFields, l as CleanupContext, m as LogEntry, n as ResolvedFieldMeta, o as toKebabCase, p as Example, r as UnknownKeysMode, s as AnyCommand, t as ExtractedFields, u as CollectedLogs, v as MainOptions, w as RunnableCommand, x as RunResult, y as NonRunnableCommand } from "./schema-extractor-DyfK21m_.cjs";
3
+ import { _ as CompletionOptions, v as CompletionResult } from "./extractor-DsJ6hYqQ.cjs";
4
+ import { WithCompletionOptions, generateCompletion, withCompletionCommand } from "./completion/index.cjs";
3
5
  import { z } from "zod";
4
6
 
5
7
  //#region src/core/command.d.ts
@@ -503,5 +505,5 @@ type ValidationResult<T> = {
503
505
  */
504
506
  declare function formatValidationErrors(errors: ValidationError[]): string;
505
507
  //#endregion
506
- export { type AnyCommand, type ArgMeta, type ArgsSchema, type BuiltinOptionDescriptions, type CleanupContext, type CollectedLogs, type Command, type CommandBase, type CommandContext, type CommandValidationError, type CommandValidationResult, DuplicateAliasError, DuplicateFieldError, type Example, type ExtractedFields, type HelpOptions, type LogEntry, type LogLevel, type LogStream, type Logger, type MainOptions, type NonRunnableCommand, type ParsedArgv, type ParserOptions, PositionalConfigError, ReservedAliasError, type ResolvedFieldMeta, type RunCommandOptions, type RunResult, type RunResultFailure, type RunResultSuccess, type RunnableCommand, type SetupContext, type SubCommandValue, type SubCommandsRecord, type UnknownKeysMode, type ValidationError, type ValidationResult, arg, defineCommand, extractFields, formatCommandValidationErrors, formatValidationErrors, generateHelp, getUnknownKeysMode, isColorEnabled, logger, parseArgv, renderInline, renderMarkdown, runCommand, runMain, setColorEnabled, styles, symbols, toKebabCase, validateCommand, validateDuplicateAliases, validateDuplicateFields, validatePositionalConfig, validateReservedAliases };
508
+ export { type AnyCommand, type ArgMeta, type ArgsSchema, type BuiltinOptionDescriptions, type CleanupContext, type CollectedLogs, type Command, type CommandBase, type CommandContext, type CommandValidationError, type CommandValidationResult, type CompletionMeta, type CompletionOptions, type CompletionResult, type CompletionType, type CustomCompletion, DuplicateAliasError, DuplicateFieldError, type Example, type ExtractedFields, type HelpOptions, type LogEntry, type LogLevel, type LogStream, type Logger, type MainOptions, type NonRunnableCommand, type ParsedArgv, type ParserOptions, PositionalConfigError, ReservedAliasError, type ResolvedFieldMeta, type RunCommandOptions, type RunResult, type RunResultFailure, type RunResultSuccess, type RunnableCommand, type SetupContext, type SubCommandValue, type SubCommandsRecord, type UnknownKeysMode, type ValidationError, type ValidationResult, type WithCompletionOptions, arg, defineCommand, extractFields, formatCommandValidationErrors, formatValidationErrors, generateCompletion, generateHelp, getUnknownKeysMode, isColorEnabled, logger, parseArgv, renderInline, renderMarkdown, runCommand, runMain, setColorEnabled, styles, symbols, toKebabCase, validateCommand, validateDuplicateAliases, validateDuplicateFields, validatePositionalConfig, validateReservedAliases, withCompletionCommand };
507
509
  //# sourceMappingURL=index.d.cts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.cts","names":[],"sources":["../src/core/command.ts","../src/core/runner.ts","../src/output/help-generator.ts","../src/output/logger.ts","../src/output/markdown-renderer.ts","../src/parser/argv-parser.ts","../src/validator/validation-errors.ts","../src/validator/command-validator.ts","../src/validator/zod-validator.ts"],"mappings":"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"}
1
+ {"version":3,"file":"index.d.cts","names":[],"sources":["../src/core/command.ts","../src/core/runner.ts","../src/output/help-generator.ts","../src/output/logger.ts","../src/output/markdown-renderer.ts","../src/parser/argv-parser.ts","../src/validator/validation-errors.ts","../src/validator/command-validator.ts","../src/validator/zod-validator.ts"],"mappings":"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"}
package/dist/index.d.ts CHANGED
@@ -1,5 +1,7 @@
1
- import { n as arg, t as ArgMeta } from "./arg-registry-w5mMKJkZ.js";
2
- import { C as RunResultSuccess, D as SubCommandsRecord, E as SubCommandValue, S as RunResultFailure, T as SetupContext, _ as Logger, a as getUnknownKeysMode, b as RunCommandOptions, c as ArgsSchema, d as Command, f as CommandBase, g as LogStream, h as LogLevel, i as extractFields, l as CleanupContext, m as LogEntry, n as ResolvedFieldMeta, o as toKebabCase, p as Example, r as UnknownKeysMode, s as AnyCommand, t as ExtractedFields, u as CollectedLogs, v as MainOptions, w as RunnableCommand, x as RunResult, y as NonRunnableCommand } from "./schema-extractor-Cl_D04BX.js";
1
+ import { a as arg, i as CustomCompletion, n as CompletionMeta, r as CompletionType, t as ArgMeta } from "./arg-registry-C3GP-5C9.js";
2
+ import { C as RunResultSuccess, D as SubCommandsRecord, E as SubCommandValue, S as RunResultFailure, T as SetupContext, _ as Logger, a as getUnknownKeysMode, b as RunCommandOptions, c as ArgsSchema, d as Command, f as CommandBase, g as LogStream, h as LogLevel, i as extractFields, l as CleanupContext, m as LogEntry, n as ResolvedFieldMeta, o as toKebabCase, p as Example, r as UnknownKeysMode, s as AnyCommand, t as ExtractedFields, u as CollectedLogs, v as MainOptions, w as RunnableCommand, x as RunResult, y as NonRunnableCommand } from "./schema-extractor-CHiBRT39.js";
3
+ import { _ as CompletionOptions, v as CompletionResult } from "./extractor-CCi4rjSI.js";
4
+ import { WithCompletionOptions, generateCompletion, withCompletionCommand } from "./completion/index.js";
3
5
  import { z } from "zod";
4
6
 
5
7
  //#region src/core/command.d.ts
@@ -503,5 +505,5 @@ type ValidationResult<T> = {
503
505
  */
504
506
  declare function formatValidationErrors(errors: ValidationError[]): string;
505
507
  //#endregion
506
- export { type AnyCommand, type ArgMeta, type ArgsSchema, type BuiltinOptionDescriptions, type CleanupContext, type CollectedLogs, type Command, type CommandBase, type CommandContext, type CommandValidationError, type CommandValidationResult, DuplicateAliasError, DuplicateFieldError, type Example, type ExtractedFields, type HelpOptions, type LogEntry, type LogLevel, type LogStream, type Logger, type MainOptions, type NonRunnableCommand, type ParsedArgv, type ParserOptions, PositionalConfigError, ReservedAliasError, type ResolvedFieldMeta, type RunCommandOptions, type RunResult, type RunResultFailure, type RunResultSuccess, type RunnableCommand, type SetupContext, type SubCommandValue, type SubCommandsRecord, type UnknownKeysMode, type ValidationError, type ValidationResult, arg, defineCommand, extractFields, formatCommandValidationErrors, formatValidationErrors, generateHelp, getUnknownKeysMode, isColorEnabled, logger, parseArgv, renderInline, renderMarkdown, runCommand, runMain, setColorEnabled, styles, symbols, toKebabCase, validateCommand, validateDuplicateAliases, validateDuplicateFields, validatePositionalConfig, validateReservedAliases };
508
+ export { type AnyCommand, type ArgMeta, type ArgsSchema, type BuiltinOptionDescriptions, type CleanupContext, type CollectedLogs, type Command, type CommandBase, type CommandContext, type CommandValidationError, type CommandValidationResult, type CompletionMeta, type CompletionOptions, type CompletionResult, type CompletionType, type CustomCompletion, DuplicateAliasError, DuplicateFieldError, type Example, type ExtractedFields, type HelpOptions, type LogEntry, type LogLevel, type LogStream, type Logger, type MainOptions, type NonRunnableCommand, type ParsedArgv, type ParserOptions, PositionalConfigError, ReservedAliasError, type ResolvedFieldMeta, type RunCommandOptions, type RunResult, type RunResultFailure, type RunResultSuccess, type RunnableCommand, type SetupContext, type SubCommandValue, type SubCommandsRecord, type UnknownKeysMode, type ValidationError, type ValidationResult, type WithCompletionOptions, arg, defineCommand, extractFields, formatCommandValidationErrors, formatValidationErrors, generateCompletion, generateHelp, getUnknownKeysMode, isColorEnabled, logger, parseArgv, renderInline, renderMarkdown, runCommand, runMain, setColorEnabled, styles, symbols, toKebabCase, validateCommand, validateDuplicateAliases, validateDuplicateFields, validatePositionalConfig, validateReservedAliases, withCompletionCommand };
507
509
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","names":[],"sources":["../src/core/command.ts","../src/core/runner.ts","../src/output/help-generator.ts","../src/output/logger.ts","../src/output/markdown-renderer.ts","../src/parser/argv-parser.ts","../src/validator/validation-errors.ts","../src/validator/command-validator.ts","../src/validator/zod-validator.ts"],"mappings":";;;;;;;;KAaK,SAAA,gBAAyB,WAAA,SAAoB,CAAA,CAAE,OAAA,GAChD,CAAA,CAAE,KAAA,CAAM,WAAA,IACR,MAAA;;;;;;UAOM,mBAAA,qBAAwC,UAAA;EAChD,IAAA;EACA,WAAA;EACA,IAAA,GAAO,WAAA;EACP,WAAA,GAAc,iBAAA;EACd,KAAA,IAAS,OAAA;IAAW,IAAA,EAAM,SAAA,CAAU,WAAA;EAAA,aAA0B,OAAA;EAC9D,GAAA,IAAO,IAAA,EAAM,SAAA,CAAU,WAAA,MAAiB,OAAA;EACxC,OAAA,IAAW,OAAA;IACT,IAAA,EAAM,SAAA,CAAU,WAAA;IAChB,KAAA,GAAQ,KAAA;EAAA,aACG,OAAA;EACb,KAAA;EACA,QAAA,GAAW,OAAA;AAAA;;;;UAMH,cAAA,qBACY,UAAA,+BAEZ,mBAAA,CAAoB,WAAA,EAAa,OAAA;EACzC,GAAA,GAAM,IAAA,EAAM,SAAA,CAAU,WAAA,MAAiB,OAAA;AAAA;;;;UAM/B,iBAAA,qBAAsC,UAAA,sBAAgC,IAAA,CAC9E,mBAAA,CAAoB,WAAA;EAGpB,GAAA;AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AApBkB;;;;;;;;;;;;;;iBA4EJ,aAAA,qBACM,UAAA,yCAAA,CAGpB,MAAA,EAAQ,cAAA,CAAe,WAAA,EAAa,OAAA,IACnC,eAAA,CAAgB,WAAA,EAAa,SAAA,CAAU,WAAA,GAAc,OAAA;AAAA,iBAGxC,aAAA,qBAAkC,UAAA,yBAAA,CAChD,MAAA,EAAQ,iBAAA,CAAkB,WAAA,IACzB,kBAAA,CAAmB,WAAA,EAAa,SAAA,CAAU,WAAA;;;;;;;AAhHxB;;;;;;;;;;;;;;;;;;;;AAOX;;iBCoDY,UAAA,mBAAA,CACpB,OAAA,EAAS,UAAA,EACT,IAAA,YACA,OAAA,GAAS,iBAAA,GACR,OAAA,CAAQ,SAAA,CAAU,OAAA;;;;;;;;;;;;;;;;;;;;;;;;iBAgCC,OAAA,CAAQ,OAAA,EAAS,UAAA,EAAY,OAAA,GAAS,WAAA,GAAmB,OAAA;;;;;;UC3F9D,yBAAA;EFCZ;EECH,IAAA;EFDY;EEGZ,OAAA;EFHkD;EEKlD,OAAA;AAAA;;;;UAee,cAAA;EFpBa;EEsB5B,WAAA;EFtBkD;EEwBlD,QAAA;EFvBI;EEyBJ,WAAA;AAAA;;;AFxBQ;UE8BO,WAAA;EFvBY;EEyB3B,eAAA;EFtBO;EEwBP,qBAAA;EFtBoC;EEwBpC,YAAA,GAAe,yBAAA;EFxB+C;EE0B9D,OAAA,GAAU,cAAA;AAAA;;;;;;;;iBA2dI,YAAA,CAAa,OAAA,EAAS,UAAA,EAAY,OAAA,EAAS,WAAA;;;;;;iBCte3C,eAAA,CAAgB,OAAA;;AHlCX;;iBGyCL,cAAA,CAAA;;;;cAuBH,MAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;cAuCA,OAAA;;;;;;;;;;;cAYA,MAAA;EHhGS;;;;EAA0C;;;;EACvD;;;;EAEC;;;;EADG;;;;EAKA;;;;EAMW;;;;;;;;;;;;AAhCH;;;;;;;;;;;;iBIYL,YAAA,CAAa,IAAA;;;;;;;;AJLnB;iBIiDM,cAAA,CAAe,QAAA;;;;;;UC3Dd,UAAA;ELQZ;EKNH,OAAA,EAAS,MAAA;ELMG;EKJZ,WAAA;ELIkD;EKFlD,IAAA;AAAA;;;;UAMe,aAAA;ELJa;EKM5B,QAAA,GAAW,GAAA;ELNuC;EKQlD,YAAA,GAAe,GAAA;ELPX;EKSJ,UAAA,GAAa,GAAA;AAAA;;;ALRL;;;;;;;;;;;;iBKyBM,SAAA,CAAU,IAAA,YAAgB,OAAA,GAAS,aAAA,GAAqB,UAAA;;;;;;cCrC3D,qBAAA,SAA8B,KAAA;cAC7B,OAAA;AAAA;;;;cASD,kBAAA,SAA2B,KAAA;cAC1B,OAAA;AAAA;;;;cASD,mBAAA,SAA4B,KAAA;cAC3B,OAAA;AAAA;;;;cASD,mBAAA,SAA4B,KAAA;cAC3B,OAAA;AAAA;;;;AN1BO;;UOQJ,sBAAA;EPHa;EOK5B,WAAA;EPJU;EOMV,IAAA;EPLE;EOOF,OAAA;EPPQ;EOSR,KAAA;AAAA;;;;KAMU,uBAAA;EACN,KAAA;AAAA;EACA,KAAA;EAAc,MAAA,EAAQ,sBAAA;AAAA;;;;UAKX,sBAAA;EPXD;EOad,WAAA;AAAA;;;;;;;iBA4Jc,uBAAA,CAAwB,SAAA,EAAW,eAAA;;;;;;;;;iBAkBnC,wBAAA,CAAyB,SAAA,EAAW,eAAA;;;;;;;;;;;;;iBAoBpC,wBAAA,CAAyB,SAAA,EAAW,eAAA;;;;;;;;;;;;;;iBAqBpC,uBAAA,CACd,SAAA,EAAW,eAAA,EACX,eAAA;;AP9NkB;;;;;;;;;;;;;;;;;iBOkRE,eAAA,CACpB,OAAA,EAAS,UAAA,EACT,OAAA,GAAS,sBAAA,GACR,OAAA,CAAQ,uBAAA;;;;;;;iBAqCK,6BAAA,CAA8B,MAAA,EAAQ,sBAAA;;;;;;UCtVrC,eAAA;EROH;EQLZ,IAAA;ERK4B;EQH5B,OAAA;ERIU;EQFV,IAAA;ERGE;EQDF,QAAA;ERCQ;EQCR,QAAA;AAAA;;;;KAMU,gBAAA;EACN,OAAA;EAAe,IAAA,EAAM,CAAA;AAAA;EACrB,OAAA;EAAgB,MAAA,EAAQ,eAAA;AAAA;;;;iBA4Cd,sBAAA,CAAuB,MAAA,EAAQ,eAAA"}
1
+ {"version":3,"file":"index.d.ts","names":[],"sources":["../src/core/command.ts","../src/core/runner.ts","../src/output/help-generator.ts","../src/output/logger.ts","../src/output/markdown-renderer.ts","../src/parser/argv-parser.ts","../src/validator/validation-errors.ts","../src/validator/command-validator.ts","../src/validator/zod-validator.ts"],"mappings":"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"}
package/dist/index.js CHANGED
@@ -1,5 +1,6 @@
1
- import { C as symbols, S as styles, _ as renderInline, a as parseArgv, b as logger, c as validateDuplicateAliases, d as validateReservedAliases, f as DuplicateAliasError, g as generateHelp, h as ReservedAliasError, i as formatValidationErrors, l as validateDuplicateFields, m as PositionalConfigError, n as runMain, o as formatCommandValidationErrors, p as DuplicateFieldError, s as validateCommand, t as runCommand, u as validatePositionalConfig, v as renderMarkdown, x as setColorEnabled, y as isColorEnabled } from "./runner-CUN50BqK.js";
2
- import { a as arg, i as toKebabCase, r as getUnknownKeysMode, t as extractFields } from "./schema-extractor-1YXqFSDT.js";
3
- import { t as defineCommand } from "./command-D-P2Pc3J.js";
1
+ import { C as symbols, S as styles, _ as renderInline, a as parseArgv, b as logger, c as validateDuplicateAliases, d as validateReservedAliases, f as DuplicateAliasError, g as generateHelp, h as ReservedAliasError, i as formatValidationErrors, l as validateDuplicateFields, m as PositionalConfigError, n as runMain, o as formatCommandValidationErrors, p as DuplicateFieldError, s as validateCommand, t as runCommand, u as validatePositionalConfig, v as renderMarkdown, x as setColorEnabled, y as isColorEnabled } from "./runner-ElQbBn1U.js";
2
+ import { a as arg, i as toKebabCase, r as getUnknownKeysMode, t as extractFields } from "./schema-extractor-CP3ar0Wi.js";
3
+ import { f as defineCommand } from "./extractor-JfoYSoMk.js";
4
+ import { generateCompletion, withCompletionCommand } from "./completion/index.js";
4
5
 
5
- export { DuplicateAliasError, DuplicateFieldError, PositionalConfigError, ReservedAliasError, arg, defineCommand, extractFields, formatCommandValidationErrors, formatValidationErrors, generateHelp, getUnknownKeysMode, isColorEnabled, logger, parseArgv, renderInline, renderMarkdown, runCommand, runMain, setColorEnabled, styles, symbols, toKebabCase, validateCommand, validateDuplicateAliases, validateDuplicateFields, validatePositionalConfig, validateReservedAliases };
6
+ export { DuplicateAliasError, DuplicateFieldError, PositionalConfigError, ReservedAliasError, arg, defineCommand, extractFields, formatCommandValidationErrors, formatValidationErrors, generateCompletion, generateHelp, getUnknownKeysMode, isColorEnabled, logger, parseArgv, renderInline, renderMarkdown, runCommand, runMain, setColorEnabled, styles, symbols, toKebabCase, validateCommand, validateDuplicateAliases, validateDuplicateFields, validatePositionalConfig, validateReservedAliases, withCompletionCommand };
@@ -1,4 +1,4 @@
1
- const require_schema_extractor = require('./schema-extractor-B9D3Rf22.cjs');
1
+ const require_schema_extractor = require('./schema-extractor-BU705qpC.cjs');
2
2
  const require_subcommand_router = require('./subcommand-router-Vf-0w9P4.cjs');
3
3
  const require_docs_index = require('./docs/index.cjs');
4
4
  let zod = require("zod");
@@ -505,6 +505,15 @@ const defaultBuiltinDescriptions = {
505
505
  version: "Show version"
506
506
  };
507
507
  /**
508
+ * Internal subcommands are reserved for framework internals and hidden from help output.
509
+ */
510
+ function isVisibleSubcommand(name) {
511
+ return !name.startsWith("__");
512
+ }
513
+ function getVisibleSubcommandEntries(subCommands) {
514
+ return Object.entries(subCommands).filter(([name]) => isVisibleSubcommand(name));
515
+ }
516
+ /**
508
517
  * Build full command name from context
509
518
  */
510
519
  function buildFullCommandName(command, context) {
@@ -529,10 +538,10 @@ function renderUsageLine(command, context) {
529
538
  if (extracted) {
530
539
  const positionals = extracted.fields.filter((a) => a.positional);
531
540
  if (extracted.fields.filter((a) => !a.positional).length > 0) parts.push(styles.placeholder("[options]"));
532
- if (command.subCommands && Object.keys(command.subCommands).length > 0) parts.push(styles.placeholder("[command]"));
541
+ if (command.subCommands && getVisibleSubcommandEntries(command.subCommands).length > 0) parts.push(styles.placeholder("[command]"));
533
542
  for (const arg of positionals) if (arg.required) parts.push(styles.option(`<${arg.name}>`));
534
543
  else parts.push(styles.placeholder(`[${arg.name}]`));
535
- } else if (command.subCommands && Object.keys(command.subCommands).length > 0) parts.push(styles.placeholder("[command]"));
544
+ } else if (command.subCommands && getVisibleSubcommandEntries(command.subCommands).length > 0) parts.push(styles.placeholder("[command]"));
536
545
  return parts.join(" ");
537
546
  }
538
547
  /**
@@ -733,7 +742,7 @@ function renderSubcommandOptionsCompact(command, indent) {
733
742
  */
734
743
  function renderSubcommandsWithOptions(subCommands, parentPath, baseIndent) {
735
744
  const lines = [];
736
- for (const [name, subCmd] of Object.entries(subCommands)) {
745
+ for (const [name, subCmd] of getVisibleSubcommandEntries(subCommands)) {
737
746
  const cmd = typeof subCmd === "function" ? null : subCmd;
738
747
  const fullPath = parentPath ? `${parentPath} ${name}` : name;
739
748
  const desc = cmd?.description ?? "";
@@ -741,8 +750,9 @@ function renderSubcommandsWithOptions(subCommands, parentPath, baseIndent) {
741
750
  if (cmd) {
742
751
  const optionLines = renderSubcommandOptionsCompact(cmd, baseIndent + 1);
743
752
  lines.push(...optionLines);
744
- if (cmd.subCommands && Object.keys(cmd.subCommands).length > 0) {
745
- const nestedLines = renderSubcommandsWithOptions(cmd.subCommands, fullPath, baseIndent);
753
+ const visibleNestedSubCommands = cmd.subCommands ? Object.fromEntries(getVisibleSubcommandEntries(cmd.subCommands)) : void 0;
754
+ if (visibleNestedSubCommands && Object.keys(visibleNestedSubCommands).length > 0) {
755
+ const nestedLines = renderSubcommandsWithOptions(visibleNestedSubCommands, fullPath, baseIndent);
746
756
  lines.push(...nestedLines);
747
757
  }
748
758
  }
@@ -771,14 +781,15 @@ function generateHelp(command, options) {
771
781
  sections.push(`${styles.sectionHeader("Usage:")} ${renderUsageLine(command, context)}`);
772
782
  const optionsText = renderOptions(command, options.descriptions, context);
773
783
  if (optionsText) sections.push(`${styles.sectionHeader("Options:")}\n${optionsText}`);
774
- if (options.showSubcommands !== false && command.subCommands && Object.keys(command.subCommands).length > 0) {
784
+ if (options.showSubcommands !== false && command.subCommands && getVisibleSubcommandEntries(command.subCommands).length > 0) {
775
785
  const currentPath = context?.commandPath?.join(" ") ?? "";
786
+ const visibleSubCommands = Object.fromEntries(getVisibleSubcommandEntries(command.subCommands));
776
787
  if (options.showSubcommandOptions) {
777
- const subLines = renderSubcommandsWithOptions(command.subCommands, currentPath, 0);
788
+ const subLines = renderSubcommandsWithOptions(visibleSubCommands, currentPath, 0);
778
789
  sections.push(`${styles.sectionHeader("Commands:")}\n${subLines.join("\n")}`);
779
790
  } else {
780
791
  const subLines = [];
781
- for (const [name, subCmd] of Object.entries(command.subCommands)) {
792
+ for (const [name, subCmd] of Object.entries(visibleSubCommands)) {
782
793
  const desc = (typeof subCmd === "function" ? { description: void 0 } : subCmd).description ?? "";
783
794
  const fullName = currentPath ? `${currentPath} ${name}` : name;
784
795
  subLines.push(formatOption(styles.command(fullName), desc));
@@ -1209,14 +1220,15 @@ function buildParserOptions(extracted) {
1209
1220
  function mergeWithPositionals(parsed, extracted) {
1210
1221
  const result = { ...parsed.options };
1211
1222
  const positionalFields = extracted.fields.filter((f) => f.positional);
1223
+ const allPositionals = parsed.rest.length > 0 ? [...parsed.positionals, ...parsed.rest] : parsed.positionals;
1212
1224
  let positionalIndex = 0;
1213
1225
  for (const field of positionalFields) {
1214
- if (positionalIndex >= parsed.positionals.length) break;
1226
+ if (positionalIndex >= allPositionals.length) break;
1215
1227
  if (field.type === "array") {
1216
- result[field.name] = parsed.positionals.slice(positionalIndex);
1228
+ result[field.name] = allPositionals.slice(positionalIndex);
1217
1229
  break;
1218
1230
  } else {
1219
- result[field.name] = parsed.positionals[positionalIndex];
1231
+ result[field.name] = allPositionals[positionalIndex];
1220
1232
  positionalIndex++;
1221
1233
  }
1222
1234
  }
@@ -1817,4 +1829,4 @@ Object.defineProperty(exports, 'validateReservedAliases', {
1817
1829
  return validateReservedAliases;
1818
1830
  }
1819
1831
  });
1820
- //# sourceMappingURL=runner-B38UBqhv.cjs.map
1832
+ //# sourceMappingURL=runner-BFKk3Arg.cjs.map