init command

This commit is contained in:
2026-01-13 11:33:29 +00:00
parent 32ce419057
commit 01595f6f32

62
main.go
View File

@@ -2,6 +2,7 @@ package main
import (
"archive/zip"
"bufio"
"errors"
"fmt"
"io"
@@ -22,19 +23,28 @@ import (
func main() {
commands := defaultCommands()
args := os.Args[1:]
if len(args) > 0 {
if args[0] == "--" {
if len(args) > 0 && args[0] == "--" {
args = args[1:]
}
if len(args) > 0 {
if err := runCommandByName(commands, args[0]); err != nil {
if len(args) == 0 {
printUsage(commands)
return
}
if isHelpFlag(args[0]) {
printUsage(commands)
return
}
if args[0] == "menu" {
if err := tea.NewProgram(newModel()).Start(); err != nil {
log.Fatal(err)
}
return
}
}
if err := tea.NewProgram(newModel()).Start(); err != nil {
if err := runCommandByName(commands, args[0]); err != nil {
log.Fatal(err)
}
}
@@ -66,6 +76,24 @@ func runCommandByName(commands []command, name string) error {
return fmt.Errorf("unknown command %q", name)
}
func printUsage(commands []command) {
fmt.Println("Usage: pb <command> [options]")
fmt.Println()
fmt.Println("Options:")
fmt.Println(" -h, --help show this help message")
fmt.Println()
fmt.Println("Commands:")
for _, cmd := range commands {
fmt.Printf(" %-10s %s\n", cmd.name, cmd.description)
}
fmt.Println()
fmt.Println("Use \"pb menu\" for an interactive helper.")
}
func isHelpFlag(arg string) bool {
return arg == "-h" || arg == "--help"
}
func newModel() model {
return model{commands: defaultCommands()}
}
@@ -182,7 +210,11 @@ func runInit() error {
return err
}
serviceName := generateServiceName()
defaultName := generateServiceName()
serviceName, err := promptServiceName(defaultName)
if err != nil {
return err
}
if err := writePBConfig(pbPath, serviceName); err != nil {
return err
@@ -198,7 +230,7 @@ func runInit() error {
return err
}
if err := ensureGitignoreEntries(filepath.Join(cwd, ".gitignore"), []string{"bin/pocketbase", "pb_data"}); err != nil {
if err := ensureGitignoreEntries(filepath.Join(cwd, ".gitignore"), []string{"bin/pocketbase", "pb_data", ".env", ".DS_store"}); err != nil {
return err
}
@@ -261,6 +293,20 @@ func generateServiceName() string {
return fmt.Sprintf("%s-%s", adjective, noun)
}
func promptServiceName(defaultName string) (string, error) {
reader := bufio.NewReader(os.Stdin)
fmt.Printf("Service name [%s]: ", defaultName)
input, err := reader.ReadString('\n')
if err != nil {
return "", err
}
input = strings.TrimSpace(input)
if input == "" {
return defaultName, nil
}
return input, nil
}
func pocketbaseBinaryName(goos string) string {
if goos == "windows" {
return "pocketbase.exe"