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))) } }