42 lines
931 B
Go
42 lines
931 B
Go
package util
|
|
|
|
import (
|
|
"context"
|
|
|
|
"forge.cadoles.com/arcad/edge/pkg/app"
|
|
"github.com/dop251/goja"
|
|
"github.com/pkg/errors"
|
|
)
|
|
|
|
func AssertType[T any](v goja.Value, rt *goja.Runtime) T {
|
|
if c, ok := v.Export().(T); ok {
|
|
return c
|
|
}
|
|
|
|
panic(rt.ToValue(errors.Errorf("expected value to be a '%T', got '%T'", new(T), v.Export())))
|
|
}
|
|
|
|
func AssertContext(v goja.Value, r *goja.Runtime) context.Context {
|
|
return AssertType[context.Context](v, r)
|
|
}
|
|
|
|
func AssertObject(v goja.Value, r *goja.Runtime) map[string]any {
|
|
return AssertType[map[string]any](v, r)
|
|
}
|
|
|
|
func AssertString(v goja.Value, r *goja.Runtime) string {
|
|
return AssertType[string](v, r)
|
|
}
|
|
|
|
func AssertAppID(v goja.Value, r *goja.Runtime) app.ID {
|
|
value := v.Export()
|
|
switch typ := value.(type) {
|
|
case string:
|
|
return app.ID(typ)
|
|
case app.ID:
|
|
return typ
|
|
default:
|
|
panic(r.ToValue(errors.Errorf("expected value to be a string or app.ID, got '%T'", value)))
|
|
}
|
|
}
|