refactor(cmd/api): centralize spec flag binding
Co-Authored-By: Virgil <virgil@lethean.io>
This commit is contained in:
parent
ede71e2b1f
commit
ef51d9b1c3
2 changed files with 50 additions and 172 deletions
|
|
@ -24,39 +24,17 @@ const (
|
|||
|
||||
func addSDKCommand(parent *cli.Command) {
|
||||
var (
|
||||
lang string
|
||||
output string
|
||||
specFile string
|
||||
packageName string
|
||||
title string
|
||||
summary string
|
||||
description string
|
||||
version string
|
||||
swaggerPath string
|
||||
graphqlPath string
|
||||
graphqlPlayground bool
|
||||
ssePath string
|
||||
wsPath string
|
||||
pprofEnabled bool
|
||||
expvarEnabled bool
|
||||
cacheEnabled bool
|
||||
cacheTTL string
|
||||
cacheMaxEntries int
|
||||
cacheMaxBytes int
|
||||
i18nDefaultLocale string
|
||||
i18nSupportedLocales string
|
||||
termsURL string
|
||||
contactName string
|
||||
contactURL string
|
||||
contactEmail string
|
||||
licenseName string
|
||||
licenseURL string
|
||||
externalDocsDescription string
|
||||
externalDocsURL string
|
||||
servers string
|
||||
securitySchemes string
|
||||
lang string
|
||||
output string
|
||||
specFile string
|
||||
packageName string
|
||||
cfg specBuilderConfig
|
||||
)
|
||||
|
||||
cfg.title = defaultSDKTitle
|
||||
cfg.description = defaultSDKDescription
|
||||
cfg.version = defaultSDKVersion
|
||||
|
||||
cmd := cli.NewCommand("sdk", "Generate client SDKs from OpenAPI spec", "", func(cmd *cli.Command, args []string) error {
|
||||
languages := splitUniqueCSV(lang)
|
||||
if len(languages) == 0 {
|
||||
|
|
@ -78,35 +56,7 @@ func addSDKCommand(parent *cli.Command) {
|
|||
// If no spec file was provided, generate one only after confirming the
|
||||
// generator is available.
|
||||
if specFile == "" {
|
||||
builder, err := sdkSpecBuilder(specBuilderConfig{
|
||||
title: title,
|
||||
summary: summary,
|
||||
description: description,
|
||||
version: version,
|
||||
swaggerPath: swaggerPath,
|
||||
graphqlPath: graphqlPath,
|
||||
graphqlPlayground: graphqlPlayground,
|
||||
ssePath: ssePath,
|
||||
wsPath: wsPath,
|
||||
pprofEnabled: pprofEnabled,
|
||||
expvarEnabled: expvarEnabled,
|
||||
cacheEnabled: cacheEnabled,
|
||||
cacheTTL: cacheTTL,
|
||||
cacheMaxEntries: cacheMaxEntries,
|
||||
cacheMaxBytes: cacheMaxBytes,
|
||||
i18nDefaultLocale: i18nDefaultLocale,
|
||||
i18nSupportedLocales: i18nSupportedLocales,
|
||||
termsURL: termsURL,
|
||||
contactName: contactName,
|
||||
contactURL: contactURL,
|
||||
contactEmail: contactEmail,
|
||||
licenseName: licenseName,
|
||||
licenseURL: licenseURL,
|
||||
externalDocsDescription: externalDocsDescription,
|
||||
externalDocsURL: externalDocsURL,
|
||||
servers: servers,
|
||||
securitySchemes: securitySchemes,
|
||||
})
|
||||
builder, err := sdkSpecBuilder(cfg)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
|
@ -147,33 +97,7 @@ func addSDKCommand(parent *cli.Command) {
|
|||
cli.StringFlag(cmd, &output, "output", "o", "./sdk", "Output directory for generated SDKs")
|
||||
cli.StringFlag(cmd, &specFile, "spec", "s", "", "Path to an existing OpenAPI spec (generates a temporary spec from registered route groups and the built-in tool bridge if not provided)")
|
||||
cli.StringFlag(cmd, &packageName, "package", "p", "lethean", "Package name for generated SDK")
|
||||
cli.StringFlag(cmd, &title, "title", "t", defaultSDKTitle, "API title in generated spec")
|
||||
cli.StringFlag(cmd, &summary, "summary", "", "", "OpenAPI info summary in generated spec")
|
||||
cli.StringFlag(cmd, &description, "description", "d", defaultSDKDescription, "API description in generated spec")
|
||||
cli.StringFlag(cmd, &version, "version", "V", defaultSDKVersion, "API version in generated spec")
|
||||
cli.StringFlag(cmd, &swaggerPath, "swagger-path", "", "", "Swagger UI path in generated spec")
|
||||
cli.StringFlag(cmd, &graphqlPath, "graphql-path", "", "", "GraphQL endpoint path in generated spec")
|
||||
cli.BoolFlag(cmd, &graphqlPlayground, "graphql-playground", "", false, "Include the GraphQL playground endpoint in generated spec")
|
||||
cli.StringFlag(cmd, &ssePath, "sse-path", "", "", "SSE endpoint path in generated spec")
|
||||
cli.StringFlag(cmd, &wsPath, "ws-path", "", "", "WebSocket endpoint path in generated spec")
|
||||
cli.BoolFlag(cmd, &pprofEnabled, "pprof", "", false, "Include pprof endpoints in generated spec")
|
||||
cli.BoolFlag(cmd, &expvarEnabled, "expvar", "", false, "Include expvar endpoint in generated spec")
|
||||
cli.BoolFlag(cmd, &cacheEnabled, "cache", "", false, "Include cache metadata in generated spec")
|
||||
cli.StringFlag(cmd, &cacheTTL, "cache-ttl", "", "", "Cache TTL in generated spec")
|
||||
cli.IntFlag(cmd, &cacheMaxEntries, "cache-max-entries", "", 0, "Cache max entries in generated spec")
|
||||
cli.IntFlag(cmd, &cacheMaxBytes, "cache-max-bytes", "", 0, "Cache max bytes in generated spec")
|
||||
cli.StringFlag(cmd, &i18nDefaultLocale, "i18n-default-locale", "", "", "Default locale in generated spec")
|
||||
cli.StringFlag(cmd, &i18nSupportedLocales, "i18n-supported-locales", "", "", "Comma-separated supported locales in generated spec")
|
||||
cli.StringFlag(cmd, &termsURL, "terms-of-service", "", "", "OpenAPI terms of service URL in generated spec")
|
||||
cli.StringFlag(cmd, &contactName, "contact-name", "", "", "OpenAPI contact name in generated spec")
|
||||
cli.StringFlag(cmd, &contactURL, "contact-url", "", "", "OpenAPI contact URL in generated spec")
|
||||
cli.StringFlag(cmd, &contactEmail, "contact-email", "", "", "OpenAPI contact email in generated spec")
|
||||
cli.StringFlag(cmd, &licenseName, "license-name", "", "", "OpenAPI licence name in generated spec")
|
||||
cli.StringFlag(cmd, &licenseURL, "license-url", "", "", "OpenAPI licence URL in generated spec")
|
||||
cli.StringFlag(cmd, &externalDocsDescription, "external-docs-description", "", "", "OpenAPI external documentation description in generated spec")
|
||||
cli.StringFlag(cmd, &externalDocsURL, "external-docs-url", "", "", "OpenAPI external documentation URL in generated spec")
|
||||
cli.StringFlag(cmd, &servers, "server", "S", "", "Comma-separated OpenAPI server URL(s)")
|
||||
cli.StringFlag(cmd, &securitySchemes, "security-schemes", "", "", "JSON object of custom OpenAPI security schemes")
|
||||
registerSpecBuilderFlags(cmd, &cfg)
|
||||
|
||||
parent.AddCommand(cmd)
|
||||
}
|
||||
|
|
|
|||
|
|
@ -15,68 +15,18 @@ import (
|
|||
|
||||
func addSpecCommand(parent *cli.Command) {
|
||||
var (
|
||||
output string
|
||||
format string
|
||||
title string
|
||||
summary string
|
||||
description string
|
||||
version string
|
||||
swaggerPath string
|
||||
graphqlPath string
|
||||
graphqlPlayground bool
|
||||
ssePath string
|
||||
wsPath string
|
||||
pprofEnabled bool
|
||||
expvarEnabled bool
|
||||
cacheEnabled bool
|
||||
cacheTTL string
|
||||
cacheMaxEntries int
|
||||
cacheMaxBytes int
|
||||
i18nDefaultLocale string
|
||||
i18nSupportedLocales string
|
||||
termsURL string
|
||||
contactName string
|
||||
contactURL string
|
||||
contactEmail string
|
||||
licenseName string
|
||||
licenseURL string
|
||||
externalDocsDescription string
|
||||
externalDocsURL string
|
||||
servers string
|
||||
securitySchemes string
|
||||
output string
|
||||
format string
|
||||
cfg specBuilderConfig
|
||||
)
|
||||
|
||||
cfg.title = "Lethean Core API"
|
||||
cfg.description = "Lethean Core API"
|
||||
cfg.version = "1.0.0"
|
||||
|
||||
cmd := cli.NewCommand("spec", "Generate OpenAPI specification", "", func(cmd *cli.Command, args []string) error {
|
||||
// Build spec from all route groups registered for CLI generation.
|
||||
builder, err := newSpecBuilder(specBuilderConfig{
|
||||
title: title,
|
||||
summary: summary,
|
||||
description: description,
|
||||
version: version,
|
||||
swaggerPath: swaggerPath,
|
||||
graphqlPath: graphqlPath,
|
||||
graphqlPlayground: graphqlPlayground,
|
||||
ssePath: ssePath,
|
||||
wsPath: wsPath,
|
||||
pprofEnabled: pprofEnabled,
|
||||
expvarEnabled: expvarEnabled,
|
||||
cacheEnabled: cacheEnabled,
|
||||
cacheTTL: cacheTTL,
|
||||
cacheMaxEntries: cacheMaxEntries,
|
||||
cacheMaxBytes: cacheMaxBytes,
|
||||
i18nDefaultLocale: i18nDefaultLocale,
|
||||
i18nSupportedLocales: i18nSupportedLocales,
|
||||
termsURL: termsURL,
|
||||
contactName: contactName,
|
||||
contactURL: contactURL,
|
||||
contactEmail: contactEmail,
|
||||
licenseName: licenseName,
|
||||
licenseURL: licenseURL,
|
||||
externalDocsDescription: externalDocsDescription,
|
||||
externalDocsURL: externalDocsURL,
|
||||
servers: servers,
|
||||
securitySchemes: securitySchemes,
|
||||
})
|
||||
builder, err := newSpecBuilder(cfg)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
|
@ -97,33 +47,7 @@ func addSpecCommand(parent *cli.Command) {
|
|||
|
||||
cli.StringFlag(cmd, &output, "output", "o", "", "Write spec to file instead of stdout")
|
||||
cli.StringFlag(cmd, &format, "format", "f", "json", "Output format: json or yaml")
|
||||
cli.StringFlag(cmd, &title, "title", "t", "Lethean Core API", "API title in spec")
|
||||
cli.StringFlag(cmd, &summary, "summary", "", "", "OpenAPI info summary in spec")
|
||||
cli.StringFlag(cmd, &description, "description", "d", "Lethean Core API", "API description in spec")
|
||||
cli.StringFlag(cmd, &version, "version", "V", "1.0.0", "API version in spec")
|
||||
cli.StringFlag(cmd, &swaggerPath, "swagger-path", "", "", "Swagger UI path in generated spec")
|
||||
cli.StringFlag(cmd, &graphqlPath, "graphql-path", "", "", "GraphQL endpoint path in generated spec")
|
||||
cli.BoolFlag(cmd, &graphqlPlayground, "graphql-playground", "", false, "Include the GraphQL playground endpoint in generated spec")
|
||||
cli.StringFlag(cmd, &ssePath, "sse-path", "", "", "SSE endpoint path in generated spec")
|
||||
cli.StringFlag(cmd, &wsPath, "ws-path", "", "", "WebSocket endpoint path in generated spec")
|
||||
cli.BoolFlag(cmd, &pprofEnabled, "pprof", "", false, "Include pprof endpoints in generated spec")
|
||||
cli.BoolFlag(cmd, &expvarEnabled, "expvar", "", false, "Include expvar endpoint in generated spec")
|
||||
cli.BoolFlag(cmd, &cacheEnabled, "cache", "", false, "Include cache metadata in generated spec")
|
||||
cli.StringFlag(cmd, &cacheTTL, "cache-ttl", "", "", "Cache TTL in generated spec")
|
||||
cli.IntFlag(cmd, &cacheMaxEntries, "cache-max-entries", "", 0, "Cache max entries in generated spec")
|
||||
cli.IntFlag(cmd, &cacheMaxBytes, "cache-max-bytes", "", 0, "Cache max bytes in generated spec")
|
||||
cli.StringFlag(cmd, &i18nDefaultLocale, "i18n-default-locale", "", "", "Default locale in generated spec")
|
||||
cli.StringFlag(cmd, &i18nSupportedLocales, "i18n-supported-locales", "", "", "Comma-separated supported locales in generated spec")
|
||||
cli.StringFlag(cmd, &termsURL, "terms-of-service", "", "", "OpenAPI terms of service URL in spec")
|
||||
cli.StringFlag(cmd, &contactName, "contact-name", "", "", "OpenAPI contact name in spec")
|
||||
cli.StringFlag(cmd, &contactURL, "contact-url", "", "", "OpenAPI contact URL in spec")
|
||||
cli.StringFlag(cmd, &contactEmail, "contact-email", "", "", "OpenAPI contact email in spec")
|
||||
cli.StringFlag(cmd, &licenseName, "license-name", "", "", "OpenAPI licence name in spec")
|
||||
cli.StringFlag(cmd, &licenseURL, "license-url", "", "", "OpenAPI licence URL in spec")
|
||||
cli.StringFlag(cmd, &externalDocsDescription, "external-docs-description", "", "", "OpenAPI external documentation description in spec")
|
||||
cli.StringFlag(cmd, &externalDocsURL, "external-docs-url", "", "", "OpenAPI external documentation URL in spec")
|
||||
cli.StringFlag(cmd, &servers, "server", "S", "", "Comma-separated OpenAPI server URL(s)")
|
||||
cli.StringFlag(cmd, &securitySchemes, "security-schemes", "", "", "JSON object of custom OpenAPI security schemes")
|
||||
registerSpecBuilderFlags(cmd, &cfg)
|
||||
|
||||
parent.AddCommand(cmd)
|
||||
}
|
||||
|
|
@ -144,3 +68,33 @@ func parseSecuritySchemes(raw string) (map[string]any, error) {
|
|||
}
|
||||
return schemes, nil
|
||||
}
|
||||
|
||||
func registerSpecBuilderFlags(cmd *cli.Command, cfg *specBuilderConfig) {
|
||||
cli.StringFlag(cmd, &cfg.title, "title", "t", cfg.title, "API title in spec")
|
||||
cli.StringFlag(cmd, &cfg.summary, "summary", "", cfg.summary, "OpenAPI info summary in spec")
|
||||
cli.StringFlag(cmd, &cfg.description, "description", "d", cfg.description, "API description in spec")
|
||||
cli.StringFlag(cmd, &cfg.version, "version", "V", cfg.version, "API version in spec")
|
||||
cli.StringFlag(cmd, &cfg.swaggerPath, "swagger-path", "", "", "Swagger UI path in generated spec")
|
||||
cli.StringFlag(cmd, &cfg.graphqlPath, "graphql-path", "", "", "GraphQL endpoint path in generated spec")
|
||||
cli.BoolFlag(cmd, &cfg.graphqlPlayground, "graphql-playground", "", false, "Include the GraphQL playground endpoint in generated spec")
|
||||
cli.StringFlag(cmd, &cfg.ssePath, "sse-path", "", "", "SSE endpoint path in generated spec")
|
||||
cli.StringFlag(cmd, &cfg.wsPath, "ws-path", "", "", "WebSocket endpoint path in generated spec")
|
||||
cli.BoolFlag(cmd, &cfg.pprofEnabled, "pprof", "", false, "Include pprof endpoints in generated spec")
|
||||
cli.BoolFlag(cmd, &cfg.expvarEnabled, "expvar", "", false, "Include expvar endpoint in generated spec")
|
||||
cli.BoolFlag(cmd, &cfg.cacheEnabled, "cache", "", false, "Include cache metadata in generated spec")
|
||||
cli.StringFlag(cmd, &cfg.cacheTTL, "cache-ttl", "", "", "Cache TTL in generated spec")
|
||||
cli.IntFlag(cmd, &cfg.cacheMaxEntries, "cache-max-entries", "", 0, "Cache max entries in generated spec")
|
||||
cli.IntFlag(cmd, &cfg.cacheMaxBytes, "cache-max-bytes", "", 0, "Cache max bytes in generated spec")
|
||||
cli.StringFlag(cmd, &cfg.i18nDefaultLocale, "i18n-default-locale", "", "", "Default locale in generated spec")
|
||||
cli.StringFlag(cmd, &cfg.i18nSupportedLocales, "i18n-supported-locales", "", "", "Comma-separated supported locales in generated spec")
|
||||
cli.StringFlag(cmd, &cfg.termsURL, "terms-of-service", "", "", "OpenAPI terms of service URL in spec")
|
||||
cli.StringFlag(cmd, &cfg.contactName, "contact-name", "", "", "OpenAPI contact name in spec")
|
||||
cli.StringFlag(cmd, &cfg.contactURL, "contact-url", "", "", "OpenAPI contact URL in spec")
|
||||
cli.StringFlag(cmd, &cfg.contactEmail, "contact-email", "", "", "OpenAPI contact email in spec")
|
||||
cli.StringFlag(cmd, &cfg.licenseName, "license-name", "", "", "OpenAPI licence name in spec")
|
||||
cli.StringFlag(cmd, &cfg.licenseURL, "license-url", "", "", "OpenAPI licence URL in spec")
|
||||
cli.StringFlag(cmd, &cfg.externalDocsDescription, "external-docs-description", "", "", "OpenAPI external documentation description in spec")
|
||||
cli.StringFlag(cmd, &cfg.externalDocsURL, "external-docs-url", "", "", "OpenAPI external documentation URL in spec")
|
||||
cli.StringFlag(cmd, &cfg.servers, "server", "S", "", "Comma-separated OpenAPI server URL(s)")
|
||||
cli.StringFlag(cmd, &cfg.securitySchemes, "security-schemes", "", "", "JSON object of custom OpenAPI security schemes")
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue