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
- func AddPlugin(opts AddPluginOptions) (string, error)
- func BuildUI(opts BuildUIOptions) error
- func Clear()
- func CloneRepository(url, targetPath, branch string) error
- func Count() int
- func CreatePlugin(opts CreatePluginOptions) error
- func Exists(name string) bool
- func NewPluginCommand() *cobra.Command
- func Register(p Plugin)
- func RemovePlugin(opts RemovePluginOptions) error
- type AddPluginOptions
- type BasePlugin
- func (p *BasePlugin) Author() string
- func (p *BasePlugin) Boot(panel interface{}) error
- func (p *BasePlugin) Description() string
- func (p *BasePlugin) Middleware() []fiber.Handler
- func (p *BasePlugin) Migrations() []Migration
- func (p *BasePlugin) Name() string
- func (p *BasePlugin) Pages() []Page
- func (p *BasePlugin) Register(panel interface{}) error
- func (p *BasePlugin) Resources() []resource.Resource
- func (p *BasePlugin) Routes(router fiber.Router)
- func (p *BasePlugin) Version() string
- type BuildUIOptions
- type CreatePluginOptions
- type Metadata
- type Migration
- type Page
- type Plugin
- type PluginDescriptor
- type PluginInfo
- type PluginMetadata
- type Registry
- type RemovePluginOptions
Constants ¶
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ış
- web-ui var mı kontrol eder (yoksa clone eder)
- Package manager detect eder (pnpm > npm)
- Dependencies yükler
- Build alır (production/development)
- 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 ¶
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 ¶
/ # 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 ¶
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
Types ¶
type AddPluginOptions ¶
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) 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 ¶
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 ¶
/ # 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 ¶
/ # 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 ¶
/ # 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 ¶
/ # 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 ¶
/ # 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 ¶
/ # 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.