github.com/grafana/tanka@v0.26.1-0.20240506093700-c22cfc35c21a/pkg/jsonnet/implementations/goimpl/vm.go (about)

     1  package goimpl
     2  
     3  import (
     4  	"github.com/google/go-jsonnet"
     5  	"github.com/grafana/tanka/pkg/jsonnet/native"
     6  )
     7  
     8  // MakeRawVM returns a Jsonnet VM with some extensions of Tanka, including:
     9  // - extended importer
    10  // - extCode and tlaCode applied
    11  // - native functions registered
    12  // This is exposed because Go is used for advanced use cases, like finding transitive imports or linting.
    13  func MakeRawVM(importPaths []string, extCode map[string]string, tlaCode map[string]string, maxStack int) *jsonnet.VM {
    14  	vm := jsonnet.MakeVM()
    15  	vm.Importer(newExtendedImporter(importPaths))
    16  
    17  	for k, v := range extCode {
    18  		vm.ExtCode(k, v)
    19  	}
    20  	for k, v := range tlaCode {
    21  		vm.TLACode(k, v)
    22  	}
    23  
    24  	for _, nf := range native.Funcs() {
    25  		vm.NativeFunction(nf)
    26  	}
    27  
    28  	if maxStack > 0 {
    29  		vm.MaxStack = maxStack
    30  	}
    31  
    32  	return vm
    33  }