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 }