Complete CommandKit consumer documentation
This commit is contained in:
48
promptkit.go
48
promptkit.go
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user