- plugin/types.go: Pool, EmailSender, JobHandlerFunc, Dependency, AdminPage, AIAction, MasterPageDefinition, status/source constants, MediaAnalyzedEvent, ModerationDecisionEvent, MediaHooksProvider, DirectoryExtensions - plugin/deps.go: ServiceDeps with typed capability interfaces (Content, Settings, Gating, Crypto, ToolRegistry, JobRunner, EmbeddingService, RAGService) - plugin/registration.go: PluginRegistration, RegisterFunc - plugin/service.go: ConnectServiceBinding with generics, ServiceMount, ServiceRegistration - plugin/provisioner.go: Provisioner interface with all config types - plugin/css_manifest.go: CSSManifest, MergedCSSManifest, MergeCSSManifests - plugin/version.go: ParseModVersion, CompareVersions - plugin/topo_sort.go: TopologicalSort (Kahn's algorithm) - plugin/block_registry.go: PluginBlockRegistry (auto-prefixing wrapper) Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
45 lines
1.3 KiB
Go
45 lines
1.3 KiB
Go
package plugin
|
|
|
|
import "maps"
|
|
|
|
// CSSManifest declares a plugin's CSS dependencies and customizations.
|
|
type CSSManifest struct {
|
|
NPMPackages map[string]string `json:"npm_packages,omitempty"`
|
|
CSSDirectives []string `json:"css_directives,omitempty"`
|
|
InputCSSAppend string `json:"input_css_append,omitempty"`
|
|
}
|
|
|
|
// MergedCSSManifest aggregates CSS manifests from all plugins.
|
|
type MergedCSSManifest struct {
|
|
NPMPackages map[string]string `json:"npm_packages"`
|
|
CSSDirectives []string `json:"css_directives"`
|
|
InputCSSAppend string `json:"input_css_append"`
|
|
Sources []string `json:"sources"`
|
|
}
|
|
|
|
// MergeCSSManifests combines multiple plugin CSS manifests into one.
|
|
func MergeCSSManifests(manifests map[string]*CSSManifest) *MergedCSSManifest {
|
|
merged := &MergedCSSManifest{
|
|
NPMPackages: make(map[string]string),
|
|
}
|
|
|
|
for name, m := range manifests {
|
|
if m == nil {
|
|
continue
|
|
}
|
|
merged.Sources = append(merged.Sources, name)
|
|
maps.Copy(merged.NPMPackages, m.NPMPackages)
|
|
merged.CSSDirectives = append(merged.CSSDirectives, m.CSSDirectives...)
|
|
|
|
if m.InputCSSAppend != "" {
|
|
if merged.InputCSSAppend != "" {
|
|
merged.InputCSSAppend += "\n"
|
|
}
|
|
merged.InputCSSAppend += "/* === Plugin: " + name + " === */\n"
|
|
merged.InputCSSAppend += m.InputCSSAppend
|
|
}
|
|
}
|
|
|
|
return merged
|
|
}
|