plugin

package
v0.0.0-...-83c8914 Latest Latest
Warning

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

Go to latest
Published: Feb 22, 2026 License: MIT Imports: 16 Imported by: 0

Documentation

Overview

Package plugin, Panel.go plugin sistemi için UI build işlemlerini sağlar.

Bu paket, web-ui clone, dependency yükleme, build ve output kopyalama işlemlerini içerir.

Package plugin, Panel.go plugin sistemi için CLI komutlarını sağlar.

Bu paket, plugin oluşturma, ekleme, silme, listeleme ve build işlemleri için Cobra-based CLI komutları içerir.

Package plugin, Panel.go plugin sistemi için Git işlemlerini sağlar.

Bu paket, Git repository clone ve URL parsing işlemlerini içerir.

Package plugin, Panel.go plugin sistemi için scaffold işlemlerini sağlar.

Bu paket, plugin backend ve frontend dosyalarını oluşturur, workspace config'i günceller ve plugin metadata'sını okur.

Index

Constants

View Source
const (
	// WebUIRepoURL, panel.web repository URL'si
	WebUIRepoURL = "https://github.com/ferdiunal/panel.web"

	// WebUIDefaultPath, web-ui'nin varsayılan yolu
	WebUIDefaultPath = "web-ui"

	// AssetsOutputPath, build output'unun kopyalanacağı yol
	AssetsOutputPath = "assets/ui"
)

Variables

This section is empty.

Functions

func AddPlugin

func AddPlugin(opts AddPluginOptions) (string, error)

AddPlugin, Git repository'den plugin ekler.

func BuildUI

func BuildUI(opts BuildUIOptions) error

BuildUI, UI build alır.

Bu fonksiyon, web-ui'yi build eder ve output'u assets/ui/'ye kopyalar. İlk kez çalıştırıldığında web-ui'yi clone eder.

## Parametreler

  • opts: Build seçenekleri (DevMode, WatchMode)

## Dönüş Değeri

  • error: Build hatası varsa hata, aksi takdirde nil

## Davranış

  1. web-ui var mı kontrol eder (yoksa clone eder)
  2. Package manager detect eder (pnpm > npm)
  3. Dependencies yükler
  4. Build alır (production/development)
  5. Output'u assets/ui/'ye kopyalar

## Kullanım Örneği

if err := BuildUI(BuildUIOptions{}); err != nil {
    log.Fatal(err)
}

func Clear

func Clear()

/ # Clear Fonksiyonu / / Tüm kayıtlı plugin'leri temizler. / Genellikle test senaryolarında kullanılır. / / ## Uyarı / Bu fonksiyon production ortamında kullanılmamalıdır! / Sadece test amaçlı kullanılmalıdır. / / ## Kullanım Örneği / ```go / // Test setup / func TestMyPlugin(t *testing.T) { / plugin.Clear() // Temiz başla / plugin.Register(&MyPlugin{}) / // ... test / } / ```

func CloneRepository

func CloneRepository(url, targetPath, branch string) error

CloneRepository, Git repository'sini clone eder.

Bu fonksiyon, belirtilen Git URL'den repository'yi belirtilen yola clone eder.

## Parametreler

  • url: Git repository URL'si
  • targetPath: Clone edilecek yol
  • branch: Clone edilecek branch (boşsa default branch)

## Dönüş Değeri

  • error: Clone hatası varsa hata, aksi takdirde nil

## Kullanım Örneği

if err := CloneRepository("https://github.com/user/repo", "./plugins/repo", "main"); err != nil {
    log.Fatal(err)
}

func Count

func Count() int

/ # Count Fonksiyonu / / Kayıtlı plugin sayısını döndürür. / / ## Dönüş Değeri / - `int`: Kayıtlı plugin sayısı / / ## Kullanım Örneği / ```go / count := plugin.Count() / fmt.Printf("Registered plugins: %d\n", count) / ```

func CreatePlugin

func CreatePlugin(opts CreatePluginOptions) error

CreatePlugin, yeni plugin oluşturur.

func Exists

func Exists(name string) bool

/ # Exists Fonksiyonu / / Plugin'in kayıtlı olup olmadığını kontrol eder. / / ## Parametreler / - `name`: Plugin adı / / ## Dönüş Değeri / - `bool`: Plugin kayıtlıysa true, değilse false / / ## Kullanım Örneği / ```go / if plugin.Exists("analytics-plugin") { / fmt.Println("Plugin is registered") / } / ```

func NewPluginCommand

func NewPluginCommand() *cobra.Command

NewPluginCommand, plugin komut grubunun root command'ını oluşturur.

Bu fonksiyon, tüm plugin alt komutlarını (create, add, remove, list, build) içeren ana plugin command'ını döndürür.

## Kullanım

rootCmd.AddCommand(NewPluginCommand())

## Alt Komutlar

  • create: Yeni plugin oluşturur
  • add: Git repository'den plugin ekler
  • remove: Plugin'i siler
  • list: Yüklü plugin'leri listeler
  • build: UI build alır

func Register

func Register(p Plugin)

/ # Register Fonksiyonu / / Plugin'i global registry'ye kaydeder. / Genellikle plugin'in init() fonksiyonunda çağrılır. / / ## Parametreler / - `p`: Kaydedilecek plugin / / ## Hata Durumları / - Plugin nil ise panic oluşturur / - Aynı isimde plugin zaten kayıtlıysa panic oluşturur / / ## Kullanım Örneği / ```go / func init() { / plugin.Register(&MyPlugin{}) / } / ``` / / ## Önemli Notlar / - Bu fonksiyon thread-safe'dir / - init() fonksiyonunda çağrılmalıdır / - Aynı plugin birden fazla kez kaydedilemez

func RemovePlugin

func RemovePlugin(opts RemovePluginOptions) error

RemovePlugin, plugin'i siler.

Types

type AddPluginOptions

type AddPluginOptions struct {
	GitURL  string
	Path    string
	Branch  string
	NoBuild bool
}

AddPluginOptions, plugin ekleme seçenekleri.

type BasePlugin

type BasePlugin struct{}

/ # BasePlugin Struct / / Plugin interface'ini implement etmek için temel struct. / Plugin geliştiriciler bu struct'ı embed ederek sadece ihtiyaç duydukları / metodları override edebilirler. / / ## Kullanım Örneği / ```go / type MyPlugin struct { / plugin.BasePlugin / } / / func (p *MyPlugin) Name() string { return "my-plugin" } / func (p *MyPlugin) Version() string { return "1.0.0" } / func (p *MyPlugin) Author() string { return "Author" } / func (p *MyPlugin) Description() string { return "Description" } / / func (p *MyPlugin) Resources() []resource.Resource { / return []resource.Resource{&MyResource{}} / } / ```

func (*BasePlugin) Author

func (p *BasePlugin) Author() string

func (*BasePlugin) Boot

func (p *BasePlugin) Boot(panel interface{}) error

func (*BasePlugin) Description

func (p *BasePlugin) Description() string

func (*BasePlugin) Middleware

func (p *BasePlugin) Middleware() []fiber.Handler

func (*BasePlugin) Migrations

func (p *BasePlugin) Migrations() []Migration

func (*BasePlugin) Name

func (p *BasePlugin) Name() string

Metadata defaults

func (*BasePlugin) Pages

func (p *BasePlugin) Pages() []Page

func (*BasePlugin) Register

func (p *BasePlugin) Register(panel interface{}) error

Lifecycle defaults

func (*BasePlugin) Resources

func (p *BasePlugin) Resources() []resource.Resource

Capabilities defaults (nil = özellik yok)

func (*BasePlugin) Routes

func (p *BasePlugin) Routes(router fiber.Router)

func (*BasePlugin) Version

func (p *BasePlugin) Version() string

type BuildUIOptions

type BuildUIOptions struct {
	DevMode   bool
	WatchMode bool
}

BuildUIOptions, UI build seçenekleri.

type CreatePluginOptions

type CreatePluginOptions struct {
	Name        string
	Path        string
	NoFrontend  bool
	NoBuild     bool
	WithExample bool
}

CreatePluginOptions, plugin oluşturma seçenekleri.

type Metadata

type Metadata struct {
	Name         string   `json:"name" yaml:"name"`
	Version      string   `json:"version" yaml:"version"`
	Author       string   `json:"author" yaml:"author"`
	Description  string   `json:"description" yaml:"description"`
	Homepage     string   `json:"homepage,omitempty" yaml:"homepage,omitempty"`
	License      string   `json:"license,omitempty" yaml:"license,omitempty"`
	Dependencies []string `json:"dependencies,omitempty" yaml:"dependencies,omitempty"`
	Tags         []string `json:"tags,omitempty" yaml:"tags,omitempty"`
}

/ # Metadata Struct / / Plugin'in meta bilgilerini tutar. / / ## Alanlar / - `Name`: Plugin adı (kebab-case önerilir) / - `Version`: Semantic versioning (örn: "1.0.0") / - `Author`: Plugin yazarı / - `Description`: Kısa açıklama / - `Homepage`: Plugin web sitesi veya repository URL'i / - `License`: Lisans türü (örn: "MIT", "Apache-2.0") / - `Dependencies`: Bağımlı plugin'ler (örn: ["plugin-name@^1.0.0"]) / - `Tags`: Arama için etiketler / / ## Kullanım Örneği / ```go / metadata := plugin.Metadata{ / Name: "my-plugin", / Version: "1.0.0", / Author: "Author Name", / Description: "Plugin description", / License: "MIT", / Tags: []string{"analytics", "reporting"}, / } / ```

func DiscoverAndList

func DiscoverAndList(path string) ([]Metadata, error)

/ # DiscoverAndList Fonksiyonu / / Plugin'leri keşfeder ve metadata listesi döndürür. / Sadece etkin plugin'leri listeler. / / ## Parametreler / - `path`: Plugin klasörü yolu / / ## Dönüş Değeri / - `[]Metadata`: Etkin plugin'lerin metadata listesi / - `error`: Hata varsa hata, yoksa nil / / ## Kullanım Örneği / ```go / metadataList, err := plugin.DiscoverAndList("./plugins") / if err != nil { / log.Fatal(err) / } / / for _, m := range metadataList { / fmt.Println(m.String()) / } / ```

func GetMetadata

func GetMetadata(p Plugin) Metadata

/ # GetMetadata Fonksiyonu / / Plugin'den metadata bilgilerini çıkarır. / / ## Parametreler / - `p`: Plugin instance / / ## Dönüş Değeri / - `Metadata`: Plugin'in metadata'sı / / ## Kullanım Örneği / ```go / metadata := plugin.GetMetadata(myPlugin) / fmt.Println(metadata.String()) / ```

func ListMetadata

func ListMetadata() []Metadata

/ # ListMetadata Fonksiyonu / / Tüm kayıtlı plugin'lerin metadata'larını döndürür. / / ## Dönüş Değeri / - `[]Metadata`: Tüm plugin'lerin metadata listesi / / ## Kullanım Örneği / ```go / metadataList := plugin.ListMetadata() / for _, m := range metadataList { / fmt.Println(m.String()) / } / ```

func (*Metadata) String

func (m *Metadata) String() string

/ # String Metodu / / Metadata'yı okunabilir string formatına çevirir. / / ## Dönüş Değeri / - `string`: "name@version by author" formatında string / / ## Kullanım Örneği / ```go / fmt.Println(metadata.String()) / // Output: my-plugin@1.0.0 by Author Name / ```

func (*Metadata) Validate

func (m *Metadata) Validate() error

/ # Validate Metodu / / Metadata'nın geçerli olup olmadığını kontrol eder. / / ## Dönüş Değeri / - `error`: Geçersizse hata, geçerliyse nil / / ## Kontroller / - Name boş olmamalı / - Version boş olmamalı / - Author boş olmamalı / / ## Kullanım Örneği / ```go / if err := metadata.Validate(); err != nil { / log.Fatal(err) / } / ```

type Migration

type Migration interface {
	// Name: Migration adı (benzersiz olmalı)
	Name() string

	// Up: Migration'ı uygula
	Up(db interface{}) error

	// Down: Migration'ı geri al
	Down(db interface{}) error
}

/ # Migration Interface / / Plugin'lerin sağlayabileceği migration interface'i. / Veritabanı şema değişiklikleri için kullanılır. / / ## Kullanım Örneği / ```go / type CreateUsersTable struct{} / / func (m *CreateUsersTable) Name() string { / return "create_users_table" / } / / func (m *CreateUsersTable) Up(db *gorm.DB) error { / return db.AutoMigrate(&User{}) / } / / func (m *CreateUsersTable) Down(db *gorm.DB) error { / return db.Migrator().DropTable(&User{}) / } / ```

type Page

type Page interface {
	Slug() string
	Title() string
	Icon() string
	Group() string
	Visible() bool
	NavigationOrder() int
}

/ # Page Interface / / Plugin'lerin sağlayabileceği sayfa interface'i. / pkg/page.Page interface'i ile uyumlu olmalıdır.

type Plugin

type Plugin interface {
	// Metadata - Plugin bilgileri
	Name() string        // Plugin adı (örn: "analytics-plugin")
	Version() string     // Semantic versioning (örn: "1.0.0")
	Author() string      // Plugin yazarı
	Description() string // Kısa açıklama

	// Lifecycle - Plugin yaşam döngüsü
	// Register: Plugin registry'ye kaydedildiğinde çağrılır
	// Bu metod plugin'in temel yapılandırmasını yapar
	Register(panel interface{}) error

	// Boot: Panel başlatıldığında çağrılır
	// Bu metod plugin'in resource, page, middleware vb. eklemelerini yapar
	Boot(panel interface{}) error

	// Resources: Plugin'in sağladığı resource'lar
	Resources() []resource.Resource

	// Pages: Plugin'in sağladığı sayfalar
	Pages() []Page

	// Middleware: Plugin'in sağladığı HTTP middleware'ler
	Middleware() []fiber.Handler

	// Routes: Plugin'in sağladığı özel route'lar
	// Router üzerinde özel endpoint'ler tanımlanabilir
	Routes(router fiber.Router)

	// Migrations: Plugin'in sağladığı veritabanı migration'ları
	Migrations() []Migration
}

/ # Plugin Interface / / Plugin, Panel.go için genişletilebilir plugin sistemi interface'idir. / Her plugin bu interface'i implement etmelidir. / / ## Lifecycle / 1. **Register**: Plugin registry'ye kaydedilir (init() fonksiyonunda) / 2. **Boot**: Panel başlatıldığında plugin boot edilir / / ## Capabilities / Plugin'ler aşağıdaki özellikleri sağlayabilir: / - Resources: Yeni resource'lar ekler / - Pages: Yeni sayfalar ekler / - Middleware: HTTP middleware'ler ekler / - Routes: Özel API endpoint'leri ekler / - Migrations: Veritabanı migration'ları ekler / / ## Önemli Notlar / - Plugin'ler thread-safe olmalıdır / - Register() metodu sadece bir kez çağrılır / - Boot() metodu Panel başlatıldığında çağrılır / - Hata durumunda error döndürülmelidir

func All

func All() []Plugin

/ # All Fonksiyonu / / Tüm kayıtlı plugin'leri döndürür. / / ## Dönüş Değeri / - `[]Plugin`: Kayıtlı plugin'lerin kopyası / / ## Kullanım Örneği / ```go / plugins := plugin.All() / for _, p := range plugins { / fmt.Println(p.Name(), p.Version()) / } / ``` / / ## Önemli Notlar / - Thread-safe'dir / - Slice'ın kopyasını döndürür (orijinal değiştirilmez)

func Get

func Get(name string) Plugin

/ # Get Fonksiyonu / / İsme göre plugin arar ve döndürür. / / ## Parametreler / - `name`: Plugin adı / / ## Dönüş Değeri / - `Plugin`: Bulunan plugin (nil ise bulunamadı) / / ## Kullanım Örneği / ```go / p := plugin.Get("analytics-plugin") / if p != nil { / fmt.Println("Found:", p.Version()) / } / ``` / / ## Önemli Notlar / - Thread-safe'dir / - Plugin bulunamazsa nil döner

type PluginDescriptor

type PluginDescriptor struct {
	Metadata `yaml:",inline"`
	Entry    string `json:"entry" yaml:"entry"`
	Enabled  *bool  `json:"enabled,omitempty" yaml:"enabled,omitempty"`
}

/ # PluginDescriptor Struct / / plugin.yaml dosyasının yapısı. / / ## Alanlar / - `Metadata`: Plugin meta bilgileri / - `Entry`: Plugin entry point (örn: "plugin.so", "main.go") / - `Enabled`: Plugin etkin mi? / / ## Kullanım Örneği / ```yaml / name: my-plugin / version: 1.0.0 / author: Author Name / description: Plugin description / entry: plugin.so / enabled: true / ```

func Discover

func Discover(path string) ([]PluginDescriptor, error)

/ # Discover Fonksiyonu / / Verilen klasörde plugin.yaml dosyalarını arar ve plugin'leri keşfeder. / / ## Parametreler / - `path`: Plugin klasörü yolu / / ## Dönüş Değeri / - `[]PluginDescriptor`: Keşfedilen plugin descriptor'ları / - `error`: Hata varsa hata, yoksa nil / / ## Davranış / 1. Verilen klasörü tarar / 2. Her alt klasörde plugin.yaml arar / 3. plugin.yaml dosyalarını parse eder / 4. Descriptor listesi döndürür / / ## Kullanım Örneği / ```go / descriptors, err := plugin.Discover("./plugins") / if err != nil { / log.Fatal(err) / } / / for _, desc := range descriptors { / fmt.Println(desc.Name, desc.Version) / } / ``` / / ## Önemli Notlar / - Bu fonksiyon plugin'leri yüklemez, sadece keşfeder / - Plugin yükleme manuel olarak yapılmalıdır / - Production ortamında dikkatli kullanılmalıdır

func (PluginDescriptor) IsEnabled

func (d PluginDescriptor) IsEnabled() bool

IsEnabled, plugin descriptor'da enabled alanı yoksa true döner.

type PluginInfo

type PluginInfo struct {
	Name        string `json:"name"`
	Version     string `json:"version"`
	Author      string `json:"author"`
	Description string `json:"description"`
	HasFrontend bool   `json:"has_frontend"`
	Valid       bool   `json:"valid"`
	Path        string `json:"path"`
}

PluginInfo, plugin metadata bilgisi.

func ListPlugins

func ListPlugins(pluginPath string) ([]PluginInfo, error)

ListPlugins, yüklü plugin'leri listeler.

type PluginMetadata

type PluginMetadata struct {
	Name        string `yaml:"name"`
	Version     string `yaml:"version"`
	Author      string `yaml:"author"`
	Description string `yaml:"description"`
}

PluginMetadata, plugin.yaml metadata yapısı.

type Registry

type Registry struct {
	// contains filtered or unexported fields
}

/ # Registry Struct / / Thread-safe plugin registry. Tüm kayıtlı plugin'leri tutar. / / ## Alanlar / - `plugins`: Plugin listesi (slice) / - `pluginMap`: Plugin haritası (name -> Plugin) / - `mu`: Read-Write mutex (thread-safety için) / / ## Thread Safety / Tüm public metodlar RWMutex ile korunur. / Read işlemleri RLock, write işlemleri Lock kullanır.

type RemovePluginOptions

type RemovePluginOptions struct {
	Name      string
	Path      string
	KeepFiles bool
	NoBuild   bool
}

RemovePluginOptions, plugin silme seçenekleri.

Jump to

Keyboard shortcuts

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