nodejs.go 1.2 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253
  1. package service
  2. import (
  3. "time"
  4. "github.com/langgenius/dify-sandbox/internal/core/runner/nodejs"
  5. runner_types "github.com/langgenius/dify-sandbox/internal/core/runner/types"
  6. "github.com/langgenius/dify-sandbox/internal/static"
  7. "github.com/langgenius/dify-sandbox/internal/types"
  8. )
  9. func RunNodeJsCode(code string, preload string, options *runner_types.RunnerOptions) *types.DifySandboxResponse {
  10. if err := checkOptions(options); err != nil {
  11. return types.ErrorResponse(-400, err.Error())
  12. }
  13. if !static.GetDifySandboxGlobalConfigurations().EnablePreload {
  14. preload = ""
  15. }
  16. timeout := time.Duration(
  17. static.GetDifySandboxGlobalConfigurations().WorkerTimeout * int(time.Second),
  18. )
  19. runner := nodejs.NodeJsRunner{}
  20. stdout, stderr, done, err := runner.Run(code, timeout, nil, preload, options)
  21. if err != nil {
  22. return types.ErrorResponse(-500, err.Error())
  23. }
  24. stdout_str := ""
  25. stderr_str := ""
  26. defer close(done)
  27. defer close(stdout)
  28. defer close(stderr)
  29. for {
  30. select {
  31. case <-done:
  32. return types.SuccessResponse(&RunCodeResponse{
  33. Stdout: stdout_str,
  34. Stderr: stderr_str,
  35. })
  36. case out := <-stdout:
  37. stdout_str += string(out)
  38. case err := <-stderr:
  39. stderr_str += string(err)
  40. }
  41. }
  42. }