package main import ( "log" "net/http" "os" "path/filepath" "github.com/pocketbase/pocketbase" "github.com/pocketbase/pocketbase/apis" "github.com/pocketbase/pocketbase/core" "github.com/pocketbase/pocketbase/plugins/jsvm" "github.com/pocketbase/pocketbase/plugins/migratecmd" "github.com/pocketbase/pocketbase/tools/hook" "github.com/pocketbase/pocketbase/tools/osutils" ) func main() { app := pocketbase.New() var hooksDir string app.RootCmd.PersistentFlags().StringVar(&hooksDir, "hooksDir", "", "the directory with the JS app hooks") var hooksWatch bool app.RootCmd.PersistentFlags().BoolVar(&hooksWatch, "hooksWatch", true, "auto restart on JS hook changes") var hooksPool int app.RootCmd.PersistentFlags().IntVar(&hooksPool, "hooksPool", 15, "the number of prewarmed JS runtimes") var migrationsDir string app.RootCmd.PersistentFlags().StringVar(&migrationsDir, "migrationsDir", "", "the directory with JS migrations") var automigrate bool app.RootCmd.PersistentFlags().BoolVar(&automigrate, "automigrate", true, "enable automatic migrations") var publicDir string app.RootCmd.PersistentFlags().StringVar(&publicDir, "publicDir", defaultPublicDir(), "the static files directory") var indexFallback bool app.RootCmd.PersistentFlags().BoolVar(&indexFallback, "indexFallback", true, "serve index.html for missing paths") _ = app.RootCmd.ParseFlags(os.Args[1:]) jsvm.MustRegister(app, jsvm.Config{ MigrationsDir: migrationsDir, HooksDir: hooksDir, HooksWatch: hooksWatch, HooksPoolSize: hooksPool, }) migratecmd.MustRegister(app, app.RootCmd, migratecmd.Config{ TemplateLang: migratecmd.TemplateLangJS, Automigrate: automigrate, Dir: migrationsDir, }) registerHomarrProvider(app) app.OnServe().Bind(&hook.Handler[*core.ServeEvent]{ Func: func(event *core.ServeEvent) error { if !event.Router.HasRoute(http.MethodGet, "/{path...}") { event.Router.GET("/{path...}", apis.Static(os.DirFS(publicDir), indexFallback)) } return event.Next() }, Priority: 999, }) if err := app.Start(); err != nil { log.Fatal(err) } } func defaultPublicDir() string { if osutils.IsProbablyGoRun() { return "./pb_public" } return filepath.Join(os.Args[0], "../pb_public") }