https://github.com/mashiike/go-jsonnet-alias-importer
alias importer for go-jsonenet
https://github.com/mashiike/go-jsonnet-alias-importer
Last synced: 3 months ago
JSON representation
alias importer for go-jsonenet
- Host: GitHub
- URL: https://github.com/mashiike/go-jsonnet-alias-importer
- Owner: mashiike
- License: mit
- Created: 2025-02-18T06:28:37.000Z (4 months ago)
- Default Branch: main
- Last Pushed: 2025-02-18T07:43:09.000Z (4 months ago)
- Last Synced: 2025-03-08T08:47:06.553Z (3 months ago)
- Language: Go
- Size: 17.6 KB
- Stars: 0
- Watchers: 1
- Forks: 0
- Open Issues: 1
-
Metadata Files:
- Readme: README.md
- Changelog: CHANGELOG.md
- License: LICENSE
Awesome Lists containing this project
README
# go-jsonnet-alias-importer
alias importer for github.com/google/go-jsonenetA mechanism to enable importing with an alias such as `@lib/...` when importing in an application implemented with golang.
## Usage
```go
import (
importer "github.com/mashiike/go-jsonnet-alias-importer"
)vm := jsonnet.MakeVM()
im := importer.New()
im.Register("lib", embedFS)
vm.Importer(im)
```## Example
see [example](./_example)
lib/sys.libsonnet
```jsonnet
{
env: std.native('env'),
}
```data.jsonnet
```jsonnet
local sys = import '@lib/sys.libsonnet';{
hoge: sys.env('HOGE', 'fuga'),
}
``````go
package mainimport (
"embed"
"flag"
"fmt"
"io/fs"
"log"
"os""github.com/google/go-jsonnet"
"github.com/google/go-jsonnet/ast"
importer "github.com/mashiike/go-jsonnet-alias-importer"
)var nativeFunctions = []*jsonnet.NativeFunction{
{
Name: "env",
Params: []ast.Identifier{"name", "default"},
Func: func(args []interface{}) (interface{}, error) {
if len(args) != 2 {
return nil, fmt.Errorf("env: invalid arguments length expected 2 got %d", len(args))
}
key, ok := args[0].(string)
if !ok {
return nil, fmt.Errorf("env: invalid 1st arguments, expected string got %T", args[0])
}
val := os.Getenv(key)
if val == "" {
return args[1], nil
}
return val, nil
},
},
}//go:embed lib/*
var libFS embed.FSfunc makeVM() *jsonnet.VM {
vm := jsonnet.MakeVM()
for _, f := range nativeFunctions {
vm.NativeFunction(f)
}
im := importer.New()
subFS, err := fs.Sub(libFS, "lib")
if err != nil {
log.Fatal(err)
}
im.Register("lib", subFS)
vm.Importer(im)
return vm
}func main() {
flag.Parse()
if flag.NArg() != 1 {
log.Fatal("usage: main.go ")
}vm := makeVM()
jsonStr, err := vm.EvaluateFile(flag.Arg(0))
if err != nil {
log.Fatal(err)
}
fmt.Println(jsonStr)
}
``````sh
$ go run main.go data.jsonnet
```