From 894f3a5b2a9dc58716a2b0cadd5be51154630401 Mon Sep 17 00:00:00 2001 From: Technofab Date: Fri, 3 Mar 2023 16:53:03 +0100 Subject: [PATCH] feat: add extcode flag --- .gitignore | 1 + main.go | 13 ++++++++++++- pkg/docsonnet/load.go | 7 ++++++- 3 files changed, 19 insertions(+), 2 deletions(-) diff --git a/.gitignore b/.gitignore index bfa75b1..516800f 100644 --- a/.gitignore +++ b/.gitignore @@ -1,2 +1,3 @@ +.idea/ dist docsonnet diff --git a/main.go b/main.go index 9bac562..6d15b6d 100644 --- a/main.go +++ b/main.go @@ -4,6 +4,7 @@ import ( "encoding/json" "fmt" "log" + "strings" "github.com/go-clix/cli" @@ -25,12 +26,22 @@ func main() { outputRaw := root.Flags().Bool("raw", false, "don't transform, dump raw eval result") urlPrefix := root.Flags().String("urlPrefix", "/", "url-prefix for frontmatter") jpath := root.Flags().StringSliceP("jpath", "J", []string{"vendor"}, "Specify an additional library search dir (right-most wins)") + extcode := root.Flags().StringSlice("ext-code", []string{}, "specify additional ext code") root.Run = func(cmd *cli.Command, args []string) error { file := args[0] log.Println("Extracting from Jsonnet") - data, err := docsonnet.Extract(file, docsonnet.Opts{JPath: *jpath}) + + opts := docsonnet.Opts{JPath: *jpath, ExtCode: map[string]string{}} + if len(*extcode) > 0 { + for _, ext := range *extcode { + res := strings.Split(ext, "=") + key, value := res[0], res[1] + opts.ExtCode[key] = value + } + } + data, err := docsonnet.Extract(file, opts) if err != nil { log.Fatalln("Extracting:", err) } diff --git a/pkg/docsonnet/load.go b/pkg/docsonnet/load.go index 4a192de..6adbf6a 100644 --- a/pkg/docsonnet/load.go +++ b/pkg/docsonnet/load.go @@ -11,7 +11,8 @@ import ( ) type Opts struct { - JPath []string + JPath []string + ExtCode map[string]string } // Load extracts and transforms the docsonnet data in `filename`, returning the @@ -51,6 +52,10 @@ func Extract(filename string, opts Opts) ([]byte, error) { // invoke load.libsonnet vm.ExtCode("main", fmt.Sprintf(`(import "%s")`, filename)) + for k, v := range opts.ExtCode { + vm.ExtCode(k, v) + } + data, err := vm.EvaluateAnonymousSnippet("load.libsonnet", string(load)) if err != nil { return nil, err