/
t3
/
cli
Обзор
Документация
Войти
/
t3
/
cli
Код
Запросы
0
Задачи
Вики
Пакеты
0
Релизы
0
CI/CD
Аналитика
master
internal/engine/instance.go
83 строки
2 KB
Ivan
metrics
09 июл 2026, 15:05
09 июл 2026, 15:05
c490f2e
Код
Авторство
О чём код?
package engine import ( "context" "fmt" "io" "log/slog" "net/http" "github.com/dop251/goja" "gitverse.ru/t3/cli/internal/engine/bridge" "gitverse.ru/t3/cli/internal/metrics" ) type Instance struct { vm *goja.Runtime logger *slog.Logger script *goja.Object } type InstanceConfig struct { Logger *slog.Logger Metrics *metrics.MetricsRegistry S3Cache *bridge.S3Cache S3Cfg *bridge.S3Config Ctx context.Context HTTPTransport *http.Transport ControllerWriter io.Writer } func newInstance(e *Engine, cfg *InstanceConfig, globalObject string) (*Instance, error) { vm := goja.New() bridge.NewConsole(vm, cfg.Logger, cfg.ControllerWriter) bridge.NewMetrics(vm, cfg.Metrics) bridge.NewGlobalMetrics(vm, cfg.Metrics) bridge.NewS3(vm, cfg.S3Cache, cfg.S3Cfg, cfg.Logger, cfg.Ctx) bridge.NewGlobalS3(vm, cfg.S3Cache, cfg.S3Cfg, cfg.Logger, cfg.Ctx) bridge.NewHTTP(vm, cfg.HTTPTransport) bridge.NewGlobalHTTP(vm, cfg.HTTPTransport) _, err := vm.RunProgram(e.program) if err != nil { return nil, err } globalObjectValue := vm.Get(globalObject) if globalObjectValue == nil || goja.IsUndefined(globalObjectValue) { return nil, fmt.Errorf("global object '%s' not found", globalObject) } script := globalObjectValue.ToObject(vm) return &Instance{ vm: vm, logger: cfg.Logger, script: script, }, nil } func (instance *Instance) GetFunc(name string) (*Func, bool) { funcValue := instance.script.Get(name) if funcValue == nil || goja.IsUndefined(funcValue) { return nil, false } fn, ok := goja.AssertFunction(funcValue) if !ok { return nil, false } return newFunc(fn), true } func (instance *Instance) Interrupt(reason string) { instance.vm.Interrupt(reason) } func (instance *Instance) ClearInterrupt() { instance.vm.ClearInterrupt() } func (instance *Instance) GetRuntime() *goja.Runtime { return instance.vm }