import type { OpeningArgs } from '../../OpeningArgs/index.js'; import type { ParameterSpec } from '../../ParameterSpec/index.js'; import type { TTY } from '../../parse/prompt.js'; import type { Settings } from '../../Settings/index.js'; import type { BuilderAfterSettings, BuilderExclusiveInitial, SomeBuilderExclusive } from '../exclusive/types.js'; import { State } from '../State.js'; export type Schema = ParameterSpec.SomeBasicType | ParameterSpec.SomeUnionType; export interface ParameterConfiguration { schema: Schema; prompt?: ParameterSpec.Input.Prompt; } export type IsHasKey = Key extends keyof Obj ? true : false; export type IsPromptEnabledInParameterSettings

= IsHasKey extends false ? false : IsPromptEnabled; export type IsPromptEnabledInCommandSettings

> = IsHasKey extends false ? false : IsPromptEnabled; export type IsPromptEnabled

| undefined> = P extends undefined ? false : P extends false ? false : P extends true ? true : P extends null ? false : Exclude['enabled'] extends false ? false : true; export interface SomeParameterConfig { schema: S; prompt?: ParameterSpec.Input.Prompt; } export interface RootBuilder { s: State; description(this: void, description: string): RootBuilder; parameter(this: void, name: State.ValidateNameExpression, configuration: Configuration): RootBuilder<{ IsPromptEnabled: State['IsPromptEnabled'] extends true ? true : IsPromptEnabledInParameterSettings; ParametersExclusive: State['ParametersExclusive']; Parameters: State['Parameters'] & { [_ in NameExpression]: State.CreateParameter; }; }>; parameter(this: void, name: State.ValidateNameExpression, schema: S): RootBuilder<{ IsPromptEnabled: State['IsPromptEnabled']; ParametersExclusive: State['ParametersExclusive']; Parameters: State['Parameters'] & { [_ in NameExpression]: State.CreateParameter; }; }>; parametersExclusive