Complete CommandKit consumer documentation

This commit is contained in:
2026-10-07 14:56:13 +00:00
parent 0af44a1172
commit 85f44cd358
17 changed files with 587 additions and 76 deletions

View File

@@ -169,19 +169,13 @@ func normalizePromptKitSuite[C any](suite PromptKitSuite[C]) (PromptKitSuite[C],
return normalized, nil
}
type promptKitSelectorState[C any] struct {
scopes []string
apply func(*C)
clear func(*C)
}
type promptKitInput[C any] struct {
Selection Selection
Format string
ID string
Version string
SelectorContext C
selectors []promptKitSelectorState[C]
selectors []selectorState[C]
}
func promptKitInputFlags[C any](suite PromptKitSuite[C], prompt bool) []Flag[promptKitInput[C]] {
@@ -190,13 +184,11 @@ func promptKitInputFlags[C any](suite PromptKitSuite[C], prompt bool) []Flag[pro
ValueFlag[promptKitInput[C]](FlagMeta{Name: "format", Usage: "Output format."}, &formatDefault, parseString, func(input *promptKitInput[C], value Supplied[string]) {
input.Format = value.Value
}),
ValueFlag[promptKitInput[C]](FlagMeta{Name: "config", Usage: "Configuration source."}, nil, parseString, func(input *promptKitInput[C], value Supplied[string]) {
input.Selection.Config = value
}),
ValueFlag[promptKitInput[C]](FlagMeta{Name: "overlay", Usage: "Overlay source."}, nil, parseString, func(input *promptKitInput[C], value Supplied[string]) {
input.Selection.Overlay = value
}),
}
flags = append(flags, configurationSelectionFlags(
func(input *promptKitInput[C], value Supplied[string]) { input.Selection.Config = value },
func(input *promptKitInput[C], value Supplied[string]) { input.Selection.Overlay = value },
)...)
if prompt {
versionDefault := ""
flags = append(flags, ValueFlag[promptKitInput[C]](FlagMeta{Name: "version", Usage: "Exact prompt version; empty selects the owning default."}, &versionDefault, parseString, func(input *promptKitInput[C], value Supplied[string]) {
@@ -204,34 +196,16 @@ func promptKitInputFlags[C any](suite PromptKitSuite[C], prompt bool) []Flag[pro
}))
}
for _, selector := range suite.Selectors {
flags = append(flags, adaptPromptKitSelector(selector))
flags = append(flags, adaptContextSelector(selector,
func(input *promptKitInput[C]) *C { return &input.SelectorContext },
func(input *promptKitInput[C], state selectorState[C]) {
input.selectors = append(input.selectors, state)
},
))
}
return flags
}
func adaptPromptKitSelector[C any](selector Selector[C]) Flag[promptKitInput[C]] {
binding := selector.Binding.binding
meta := binding.meta
return Flag[promptKitInput[C]]{binding: flagBinding[promptKitInput[C]]{
meta: meta,
defaultText: binding.defaultText,
repeated: binding.repeated,
boolean: binding.boolean,
valid: binding.valid,
prepare: func(values []string) (func(*promptKitInput[C]), error) {
apply, err := binding.prepare(values)
if err != nil {
return nil, err
}
state := promptKitSelectorState[C]{scopes: append([]string(nil), selector.Scopes...), apply: apply, clear: binding.clear}
return func(input *promptKitInput[C]) {
apply(&input.SelectorContext)
input.selectors = append(input.selectors, state)
}, nil
},
}}
}
func checkPromptKitInput[C any](suite PromptKitSuite[C], input promptKitInput[C]) error {
if _, err := parseConfigFormat(input.Format); err != nil {
return err