From 8a985fb686bd1285033ed6ab4adfd9db0248bbb5 Mon Sep 17 00:00:00 2001 From: David Alberto Adler Date: Tue, 6 May 2025 14:13:41 +0100 Subject: [PATCH 1/3] --- cmd/quickstart.go | 22 ++++++++++++++++++---- prompts/configs.go | 18 +++++++++++++++++- prompts/sources.go | 18 ++++++++++++++++++ prompts/statemappings.go | 1 + 4 files changed, 54 insertions(+), 5 deletions(-) diff --git a/cmd/quickstart.go b/cmd/quickstart.go index fbec8369..1bc21de9 100644 --- a/cmd/quickstart.go +++ b/cmd/quickstart.go @@ -38,10 +38,11 @@ import ( ) type QuickstartFlags struct { - SkipCompile bool `json:"skip-compile"` - Schema string `json:"schema"` - OutDir string `json:"out-dir"` - TargetType string `json:"target"` + SkipCompile bool `json:"skip-compile"` + Schema string `json:"schema"` + OutDir string `json:"out-dir"` + TargetType string `json:"target"` + IsReactQuery bool `json:"is-react-query"` // If the quickstart should be based on a pre-existing template (hosted in the Speakeasy Registry) From string `json:"from"` @@ -56,6 +57,18 @@ var quickstartCmd = &model.ExecutableCommand[QuickstartFlags]{ Long: `Guided setup to help you create a new SDK in minutes.`, Run: quickstartExec, RequiresAuth: true, + NonInteractiveSubcommands: []model.Command{ + &model.ExecutableCommand[QuickstartFlags]{ + Usage: "react-query", + Short: "Quickstart a TypeScript SDK with React Query enabled", + Run: func(ctx context.Context, flags QuickstartFlags) error { + flags.TargetType = "typescript" + flags.SkipCompile = true + flags.IsReactQuery = true + return quickstartExec(ctx, flags) + }, + }, + }, Flags: []flag.Flag{ flag.BooleanFlag{ Name: "skip-compile", @@ -111,6 +124,7 @@ func quickstartExec(ctx context.Context, flags QuickstartFlags) error { Targets: make(map[string]workflow.Target), }, LanguageConfigs: make(map[string]*sdkGenConfig.Configuration), + IsReactQuery: flags.IsReactQuery, } if flags.Schema != "" { diff --git a/prompts/configs.go b/prompts/configs.go index 98cc49e3..d8fb5f95 100644 --- a/prompts/configs.go +++ b/prompts/configs.go @@ -163,6 +163,7 @@ func PromptForTargetConfig(targetName string, wf *workflow.Workflow, target *wor if isQuickstart { setDevContainerDefaults(output, wf, target) setEnvVarPrefixDefaults(output, target, sdkClassName) + setReactQueryDefaults(output, target, quickstart.IsReactQuery) } return output, nil @@ -185,6 +186,14 @@ func setDevContainerDefaults(output *config.Configuration, wf *workflow.Workflow } } +func setReactQueryDefaults(output *config.Configuration, target *workflow.Target, isReactQuery bool) { + if target.Target == "typescript" && isReactQuery { + if cfg, ok := output.Languages[target.Target]; ok && cfg.Cfg != nil { + cfg.Cfg["enableReactQuery"] = true + } + } +} + func setEnvVarPrefixDefaults(output *config.Configuration, target *workflow.Target, sdkClassName string) { if target.Target == "go" || target.Target == "typescript" || target.Target == "python" { if cfg, ok := output.Languages[target.Target]; ok && cfg.Cfg != nil { @@ -200,10 +209,17 @@ func configBaseForm(ctx context.Context, quickstart *Quickstart) (*QuickstartSta return nil, err } + // Set defaults for new SDKs + if quickstart != nil { + setDevContainerDefaults(output, quickstart.WorkflowFile, &target) + setEnvVarPrefixDefaults(output, &target, output.Generation.SDKClassName) + setReactQueryDefaults(output, &target, quickstart.IsReactQuery) + } + quickstart.LanguageConfigs[key] = output } - var nextState QuickstartState = Complete + nextState := Complete return &nextState, nil } diff --git a/prompts/sources.go b/prompts/sources.go index 3ec8ca93..78f25eda 100644 --- a/prompts/sources.go +++ b/prompts/sources.go @@ -12,6 +12,7 @@ import ( "github.com/charmbracelet/lipgloss" "github.com/speakeasy-api/huh" + config "github.com/speakeasy-api/sdk-gen-config" "github.com/speakeasy-api/speakeasy-client-sdk-go/v3/pkg/models/operations" "github.com/speakeasy-api/speakeasy-client-sdk-go/v3/pkg/models/shared" "github.com/speakeasy-api/speakeasy-core/openapi" @@ -31,6 +32,23 @@ import ( "github.com/speakeasy-api/speakeasy/registry" ) +type QuickstartDefaults struct { + SchemaPath *string + TargetType *string + Template *string + TemplateData *shared.SchemaStoreItem +} + +type Quickstart struct { + WorkflowFile *workflow.Workflow + LanguageConfigs map[string]*config.Configuration + Defaults QuickstartDefaults + SDKName string + IsUsingTemplate bool + IsReactQuery bool + IsUsingSampleOpenAPISpec bool +} + func getOASLocation(location, authHeader *string, allowSample bool) error { locationPrompt := oasLocationPrompt(location, allowSample) diff --git a/prompts/statemappings.go b/prompts/statemappings.go index df593488..b0d6cc48 100644 --- a/prompts/statemappings.go +++ b/prompts/statemappings.go @@ -20,6 +20,7 @@ type Quickstart struct { IsUsingSampleOpenAPISpec bool IsUsingTemplate bool SDKName string + IsReactQuery bool } type Defaults struct { From ad879d14e93932e850ce4c1df0c3b80b7d29631f Mon Sep 17 00:00:00 2001 From: David Alberto Adler Date: Tue, 6 May 2025 14:14:43 +0100 Subject: [PATCH 2/3] --- cmd/quickstart.go | 1 - 1 file changed, 1 deletion(-) diff --git a/cmd/quickstart.go b/cmd/quickstart.go index 1bc21de9..260e9b93 100644 --- a/cmd/quickstart.go +++ b/cmd/quickstart.go @@ -63,7 +63,6 @@ var quickstartCmd = &model.ExecutableCommand[QuickstartFlags]{ Short: "Quickstart a TypeScript SDK with React Query enabled", Run: func(ctx context.Context, flags QuickstartFlags) error { flags.TargetType = "typescript" - flags.SkipCompile = true flags.IsReactQuery = true return quickstartExec(ctx, flags) }, From c91de1304ab7cdddf702498a5cc010adbdc17d25 Mon Sep 17 00:00:00 2001 From: David Alberto Adler Date: Tue, 13 May 2025 10:07:06 +0100 Subject: [PATCH 3/3] +0 -18 sources.go --- prompts/sources.go | 18 ------------------ 1 file changed, 18 deletions(-) diff --git a/prompts/sources.go b/prompts/sources.go index 78f25eda..3ec8ca93 100644 --- a/prompts/sources.go +++ b/prompts/sources.go @@ -12,7 +12,6 @@ import ( "github.com/charmbracelet/lipgloss" "github.com/speakeasy-api/huh" - config "github.com/speakeasy-api/sdk-gen-config" "github.com/speakeasy-api/speakeasy-client-sdk-go/v3/pkg/models/operations" "github.com/speakeasy-api/speakeasy-client-sdk-go/v3/pkg/models/shared" "github.com/speakeasy-api/speakeasy-core/openapi" @@ -32,23 +31,6 @@ import ( "github.com/speakeasy-api/speakeasy/registry" ) -type QuickstartDefaults struct { - SchemaPath *string - TargetType *string - Template *string - TemplateData *shared.SchemaStoreItem -} - -type Quickstart struct { - WorkflowFile *workflow.Workflow - LanguageConfigs map[string]*config.Configuration - Defaults QuickstartDefaults - SDKName string - IsUsingTemplate bool - IsReactQuery bool - IsUsingSampleOpenAPISpec bool -} - func getOASLocation(location, authHeader *string, allowSample bool) error { locationPrompt := oasLocationPrompt(location, allowSample)