Public Access
feat: scaffold API, client, or monorepo projects with Nuxt/Vue client support
- draft new now offers API, Client, or Full Stack (monorepo) project shapes - draft new client scaffolds a Nuxt or Vue app via the official nuxi/create-vue tooling, with a Draft-maintained auth/API overlay layered on top - draft new monorepo combines a scaffolded API and client under one root with go.work, pnpm-workspace.yaml, and docker-compose wiring - assets/embedded restructured into api/monorepo-root/client-nuxt/client-vue zones, synced via a generalized, job-based sync tool
This commit is contained in:
1 parent
fe48b7caee
commit
29f94539e0
7 files changed
+724
-99
No files matched your search
@@ -0,0 +1,52 @@
|
||||
package cmd
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"os"
|
||||
"path/filepath"
|
||||
|
||||
"github.com/spf13/cobra"
|
||||
)
|
||||
|
||||
func init() {
|
||||
newCmd.AddCommand(monorepoCmd)
|
||||
}
|
||||
|
||||
var monorepoCmd = &cobra.Command{
|
||||
Use: "monorepo",
|
||||
Short: "Create a new Draft Monorepo project",
|
||||
Long: `Create a new Draft Monorepo project with the necessary structure and files.`,
|
||||
Run: genMonorepo,
|
||||
}
|
||||
|
||||
func genMonorepo(cmd *cobra.Command, args []string) {
|
||||
runNewProject(scaffoldRecipe{
|
||||
label: "monorepo",
|
||||
destSubdir: "apps/api",
|
||||
preScaffold: func(projectDir string) error {
|
||||
if err := os.MkdirAll(projectDir, 0755); err != nil {
|
||||
return fmt.Errorf("error creating project directory: %w", err)
|
||||
}
|
||||
return copyEmbeddedDir("embedded/monorepo-root", projectDir, nil)
|
||||
},
|
||||
postScaffold: func(projectDir string) error {
|
||||
if err := requirePnpmAndNpx(); err != nil {
|
||||
return fmt.Errorf("error checking for pnpm and npx: %w", err)
|
||||
}
|
||||
|
||||
isVue, resultLabel, err := promptClientFramework()
|
||||
if err != nil {
|
||||
return fmt.Errorf("prompt failed: %w", err)
|
||||
}
|
||||
|
||||
clientDir := filepath.Join(projectDir, "apps/client")
|
||||
serviceName := toPascalCase(filepath.Base(projectDir))
|
||||
|
||||
fmt.Printf("🚀 Scaffolding %s client app...\n", resultLabel)
|
||||
if isVue {
|
||||
return scaffoldClientVue(clientDir, serviceName)
|
||||
}
|
||||
return scaffoldClientNuxt(clientDir, serviceName)
|
||||
},
|
||||
})
|
||||
}
|
||||
Reference in new issue
Block a user