mirror of
https://github.com/grafana/grafana.git
synced 2025-01-09 23:53:25 -06:00
473898e47c
* Move some thema code inside grafana * Use new codegen instead of thema for core kinds * Replace TS generator * Use new generator for go types * Remove thema from oapi generator * Remove thema from generators * Don't use kindsys/thema for core kinds * Remove kindsys/thema from plugins * Remove last thema related * Remove most of cuectx and move utils_ts into codegen. It also deletes wire dependency * Merge plugins generators * Delete thema dependency 🎉 * Fix CODEOWNERS * Fix package name * Fix TS output names * More path fixes * Fix mod codeowners * Use original plugin's name * Remove kindsys dependency 🎉 * Modify oapi schema and create an apply function to fix elasticsearch errors * cue.mod was deleted by mistake * Fix TS panels * sort imports * Fixing elasticsearch output * Downgrade oapi-codegen library * Update output ts files * More fixes * Restore old elasticsearch generated file and skip its generation. Remove core imports into plugins * More lint fixes * Add codeowners * restore embed.go file * Fix embed.go
64 lines
1.3 KiB
Go
64 lines
1.3 KiB
Go
package pfs
|
|
|
|
import (
|
|
"fmt"
|
|
"io/fs"
|
|
"path/filepath"
|
|
"sort"
|
|
|
|
"cuelang.org/go/cue/cuecontext"
|
|
)
|
|
|
|
type DeclParser struct {
|
|
skip map[string]bool
|
|
}
|
|
|
|
func NewDeclParser(skip map[string]bool) *DeclParser {
|
|
return &DeclParser{
|
|
skip: skip,
|
|
}
|
|
}
|
|
|
|
// TODO convert this to be the new parser for Tree
|
|
func (psr *DeclParser) Parse(root fs.FS) ([]*PluginDecl, error) {
|
|
ctx := cuecontext.New()
|
|
// TODO remove hardcoded tree structure assumption, work from root of provided fs
|
|
plugins, err := fs.Glob(root, "**/**/plugin.json")
|
|
if err != nil {
|
|
return nil, fmt.Errorf("error finding plugin dirs: %w", err)
|
|
}
|
|
|
|
decls := make([]*PluginDecl, 0)
|
|
for _, plugin := range plugins {
|
|
path := filepath.ToSlash(filepath.Dir(plugin))
|
|
base := filepath.Base(path)
|
|
if skip, ok := psr.skip[base]; ok && skip {
|
|
continue
|
|
}
|
|
|
|
dir, _ := fs.Sub(root, path)
|
|
pp, err := ParsePluginFS(ctx, dir, path)
|
|
if err != nil {
|
|
return nil, fmt.Errorf("parsing plugin failed for %s: %s", dir, err)
|
|
}
|
|
|
|
if !pp.CueFile.Exists() {
|
|
continue
|
|
}
|
|
|
|
decls = append(decls, &PluginDecl{
|
|
SchemaInterface: pp.Variant,
|
|
CueFile: pp.CueFile,
|
|
Imports: pp.CUEImports,
|
|
PluginMeta: pp.Properties,
|
|
PluginPath: path,
|
|
})
|
|
}
|
|
|
|
sort.Slice(decls, func(i, j int) bool {
|
|
return decls[i].PluginPath < decls[j].PluginPath
|
|
})
|
|
|
|
return decls, nil
|
|
}
|