Initial lookbook implementation
Pinterest-style visual bookmarking app with: - URL metadata extraction (OG/Twitter meta, oEmbed fallback) - Image caching in Postgres with 480px thumbnails - Multi-tag filtering with Ctrl/Cmd for OR mode - Fuzzy tag suggestions and inline tag editing - Browser console auth() with first-use password setup - Brutalist UI with Commit Mono font and Pico CSS - Light/dark mode via browser preference
This commit is contained in:
commit
fc625fb9cf
486 changed files with 195373 additions and 0 deletions
141
vendor/github.com/pressly/goose/v3/goose.go
generated
vendored
Normal file
141
vendor/github.com/pressly/goose/v3/goose.go
generated
vendored
Normal file
|
|
@ -0,0 +1,141 @@
|
|||
package goose
|
||||
|
||||
import (
|
||||
"context"
|
||||
"database/sql"
|
||||
"fmt"
|
||||
"io/fs"
|
||||
"strconv"
|
||||
)
|
||||
|
||||
// Deprecated: VERSION will no longer be supported in the next major release.
|
||||
const VERSION = "v3.18.0"
|
||||
|
||||
var (
|
||||
minVersion = int64(0)
|
||||
maxVersion = int64((1 << 63) - 1)
|
||||
timestampFormat = "20060102150405"
|
||||
verbose = false
|
||||
noColor = false
|
||||
|
||||
// base fs to lookup migrations
|
||||
baseFS fs.FS = osFS{}
|
||||
)
|
||||
|
||||
// SetVerbose set the goose verbosity mode
|
||||
func SetVerbose(v bool) {
|
||||
verbose = v
|
||||
}
|
||||
|
||||
// SetBaseFS sets a base FS to discover migrations. It can be used with 'embed' package.
|
||||
// Calling with 'nil' argument leads to default behaviour: discovering migrations from os filesystem.
|
||||
// Note that modifying operations like Create will use os filesystem anyway.
|
||||
func SetBaseFS(fsys fs.FS) {
|
||||
if fsys == nil {
|
||||
fsys = osFS{}
|
||||
}
|
||||
|
||||
baseFS = fsys
|
||||
}
|
||||
|
||||
// Run runs a goose command.
|
||||
//
|
||||
// Deprecated: Use RunContext.
|
||||
func Run(command string, db *sql.DB, dir string, args ...string) error {
|
||||
ctx := context.Background()
|
||||
return RunContext(ctx, command, db, dir, args...)
|
||||
}
|
||||
|
||||
// RunContext runs a goose command.
|
||||
func RunContext(ctx context.Context, command string, db *sql.DB, dir string, args ...string) error {
|
||||
return run(ctx, command, db, dir, args)
|
||||
}
|
||||
|
||||
// RunWithOptions runs a goose command with options.
|
||||
//
|
||||
// Deprecated: Use RunWithOptionsContext.
|
||||
func RunWithOptions(command string, db *sql.DB, dir string, args []string, options ...OptionsFunc) error {
|
||||
ctx := context.Background()
|
||||
return RunWithOptionsContext(ctx, command, db, dir, args, options...)
|
||||
}
|
||||
|
||||
// RunWithOptionsContext runs a goose command with options.
|
||||
func RunWithOptionsContext(ctx context.Context, command string, db *sql.DB, dir string, args []string, options ...OptionsFunc) error {
|
||||
return run(ctx, command, db, dir, args, options...)
|
||||
}
|
||||
|
||||
func run(ctx context.Context, command string, db *sql.DB, dir string, args []string, options ...OptionsFunc) error {
|
||||
switch command {
|
||||
case "up":
|
||||
if err := UpContext(ctx, db, dir, options...); err != nil {
|
||||
return err
|
||||
}
|
||||
case "up-by-one":
|
||||
if err := UpByOneContext(ctx, db, dir, options...); err != nil {
|
||||
return err
|
||||
}
|
||||
case "up-to":
|
||||
if len(args) == 0 {
|
||||
return fmt.Errorf("up-to must be of form: goose [OPTIONS] DRIVER DBSTRING up-to VERSION")
|
||||
}
|
||||
|
||||
version, err := strconv.ParseInt(args[0], 10, 64)
|
||||
if err != nil {
|
||||
return fmt.Errorf("version must be a number (got '%s')", args[0])
|
||||
}
|
||||
if err := UpToContext(ctx, db, dir, version, options...); err != nil {
|
||||
return err
|
||||
}
|
||||
case "create":
|
||||
if len(args) == 0 {
|
||||
return fmt.Errorf("create must be of form: goose [OPTIONS] DRIVER DBSTRING create NAME [go|sql]")
|
||||
}
|
||||
|
||||
migrationType := "go"
|
||||
if len(args) == 2 {
|
||||
migrationType = args[1]
|
||||
}
|
||||
if err := Create(db, dir, args[0], migrationType); err != nil {
|
||||
return err
|
||||
}
|
||||
case "down":
|
||||
if err := DownContext(ctx, db, dir, options...); err != nil {
|
||||
return err
|
||||
}
|
||||
case "down-to":
|
||||
if len(args) == 0 {
|
||||
return fmt.Errorf("down-to must be of form: goose [OPTIONS] DRIVER DBSTRING down-to VERSION")
|
||||
}
|
||||
|
||||
version, err := strconv.ParseInt(args[0], 10, 64)
|
||||
if err != nil {
|
||||
return fmt.Errorf("version must be a number (got '%s')", args[0])
|
||||
}
|
||||
if err := DownToContext(ctx, db, dir, version, options...); err != nil {
|
||||
return err
|
||||
}
|
||||
case "fix":
|
||||
if err := Fix(dir); err != nil {
|
||||
return err
|
||||
}
|
||||
case "redo":
|
||||
if err := RedoContext(ctx, db, dir, options...); err != nil {
|
||||
return err
|
||||
}
|
||||
case "reset":
|
||||
if err := ResetContext(ctx, db, dir, options...); err != nil {
|
||||
return err
|
||||
}
|
||||
case "status":
|
||||
if err := StatusContext(ctx, db, dir, options...); err != nil {
|
||||
return err
|
||||
}
|
||||
case "version":
|
||||
if err := VersionContext(ctx, db, dir, options...); err != nil {
|
||||
return err
|
||||
}
|
||||
default:
|
||||
return fmt.Errorf("%q: no such command", command)
|
||||
}
|
||||
return nil
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue