core/plugin/css_manifest.go
Alex Dunmow 7c20538a4e feat: WO-PS-009 SDK plugin types
- 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>
2026-04-30 22:41:52 +08:00

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
}