ExpressExecutor.js 1.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172
  1. /**
  2. * 代码执行器
  3. * @author hjh
  4. * */
  5. class ExpressExecutor {
  6. //运行时参数信息
  7. _resource;
  8. /**
  9. * 构造函数
  10. * @param {any} setting
  11. */
  12. constructor(resource) {
  13. this._resource = resource;
  14. }
  15. /**
  16. * 测试该代码,并判断是否符合setting配置
  17. * @param {any} jsCode
  18. */
  19. Test(jsCode, returnType) {
  20. let result = { success: false };
  21. try {
  22. if (jsCode.search("return") === -1) {
  23. jsCode = `return ${jsCode};`;
  24. }
  25. jsCode = this._resource + jsCode;
  26. let value = new Function(jsCode)();
  27. if (returnType != null && returnType !== "any") {
  28. //类型不对应
  29. if (typeof value != returnType) {
  30. result.success = false;
  31. result.info = `
  32. 预期的返回值类型为:${returnType}
  33. 实际返回值类型为:${typeof value}`;
  34. return result;
  35. }
  36. }
  37. result.value = value;
  38. result.success = true;
  39. } catch (e) {
  40. result.info = e.message;
  41. }
  42. return result;
  43. }
  44. /**
  45. * 执行编辑器编辑的JS代码
  46. * @param {any} jsCode
  47. * @param {any} environment
  48. */
  49. Run(jsCode) {
  50. if (jsCode.search("return") === -1) {
  51. jsCode = `return ${jsCode};`;
  52. }
  53. jsCode = this._resource + jsCode;
  54. return new Function(jsCode)();
  55. }
  56. }