plugins

package
v0.11.0 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Sep 9, 2026 License: MIT Imports: 10 Imported by: 0

Documentation

Overview

Package plugins provides a public API for pgsquash plugin management.

This package exports plugin registration, detection, and compatibility functionality for use by external tools while keeping the internal plugin implementation details private. Detection and compatibility results are produced by the same plugin implementations and conflict-resolution logic the squashing engine uses, so they always agree with an actual squash run.

Available Plugins

Built-in plugins:

  • Supabase: RLS policy optimization, auth schema handling, storage integration
  • Clerk: JWT v2 support, organization handling, user ID preservation
  • Prisma: Migration table handling, shadow database optimizations
  • Drizzle: Identity column preference, sequence optimization

Basic Usage

Register all built-in plugins:

if err := plugins.RegisterDefault(); err != nil {
    log.Fatal(err)
}

Plugin Detection

Detect which plugins are applicable to your migrations:

migrations := []string{
    "CREATE TABLE users (id SERIAL PRIMARY KEY);",
    "CREATE POLICY user_select ON users USING (auth.uid() = id);",
}

result, err := plugins.DetectPlugins(ctx, migrations)
if err != nil {
    log.Fatal(err)
}

for _, plugin := range result.Detected {
    fmt.Printf("Detected: %s (priority %d)\n", plugin.Name, plugin.Priority)
}

Compatibility Checking

Check compatibility between detected plugins. Conflicts are resolved by priority exactly as during squashing (e.g. Clerk 95 excludes Supabase 90):

matrix, err := plugins.CheckCompatibility([]string{"supabase", "clerk"})
if err != nil {
    log.Fatal(err)
}

for _, warning := range matrix.Warnings {
    log.Printf("Warning: %s\n", warning)
}

Plugin Information

Get information about available plugins:

for _, plugin := range plugins.GetAvailablePlugins() {
    fmt.Printf("%s (priority %d)\n", plugin.Name, plugin.Priority)
}

Index

Constants

This section is empty.

Variables

This section is empty.

Functions

func RegisterDefault

func RegisterDefault() error

RegisterDefault registers all built-in pgsquash plugins with the global plugin registry:

  • Clerk (JWT v2 auth)
  • Supabase (RLS policies, storage, auth)
  • Prisma (ORM migrations)
  • Drizzle (ORM migrations)

This should be called during application initialization, typically in init().

Example:

if err := plugins.RegisterDefault(); err != nil {
    log.Printf("Warning: Some plugins failed to register: %v", err)
}

Types

type CompatibilityMatrix

type CompatibilityMatrix struct {
	Compatible   []string          `json:"compatible"`
	Incompatible []string          `json:"incompatible"`
	Warnings     []string          `json:"warnings"`
	Details      map[string]string `json:"details"` // Plugin name -> compatibility note
}

CompatibilityMatrix describes plugin compatibility after priority-based conflict resolution, matching the resolution the squashing engine applies.

func CheckCompatibility

func CheckCompatibility(pluginNames []string) (*CompatibilityMatrix, error)

CheckCompatibility checks compatibility between plugins using the same priority-based conflict resolution the plugin registry applies during squashing: each plugin's GetConflictingPlugins() is honored and, on conflict, the higher-priority plugin wins (e.g. Clerk 95 excludes Supabase 90).

type DetectionResult

type DetectionResult struct {
	Detected []PluginInfo        `json:"detected"`
	Count    int                 `json:"count"`
	Details  map[string][]string `json:"details"` // Plugin name -> detected patterns
}

DetectionResult contains the results of plugin detection

func DetectPlugins

func DetectPlugins(ctx context.Context, migrations []string) (*DetectionResult, error)

DetectPlugins analyzes SQL migrations and detects which plugins are applicable.

Migrations are parsed with the same parser the squashing engine uses, and each built-in plugin's own Detect implementation runs over the parsed statements — so detection results here always agree with the plugins activated during an actual squash.

type PluginInfo

type PluginInfo struct {
	Name               string   `json:"name"`
	Priority           int      `json:"priority"`
	ConflictsWith      []string `json:"conflicts_with"`
	RequiredExtensions []string `json:"required_extensions"`
	Detected           bool     `json:"detected"`
}

PluginInfo describes a plugin as reported by the plugin implementation itself.

func GetAvailablePlugins

func GetAvailablePlugins() []PluginInfo

GetAvailablePlugins returns information about all built-in plugins, derived from the plugin implementations themselves.

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL