1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950 |
- package boxctx
- import (
- "context"
- "time"
- "github.com/sagernet/sing-box/script/jsc"
- "github.com/sagernet/sing/common/logger"
- "github.com/dop251/goja"
- )
- type Context struct {
- class jsc.Class[*Module, *Context]
- Context context.Context
- Logger logger.ContextLogger
- Tag string
- StartedAt time.Time
- ErrorHandler func(error)
- }
- func FromRuntime(runtime *goja.Runtime) *Context {
- contextValue := runtime.Get("context")
- if contextValue == nil {
- return nil
- }
- context, isContext := contextValue.Export().(*Context)
- if !isContext {
- return nil
- }
- return context
- }
- func MustFromRuntime(runtime *goja.Runtime) *Context {
- context := FromRuntime(runtime)
- if context == nil {
- panic(runtime.NewTypeError("Missing sing-box context"))
- }
- return context
- }
- func createContext(module *Module) jsc.Class[*Module, *Context] {
- class := jsc.NewClass[*Module, *Context](module)
- class.DefineMethod("toString", (*Context).toString)
- return class
- }
- func (c *Context) toString(call goja.FunctionCall) any {
- return "[sing-box Context]"
- }
|