evaluateInWorker.ts 887 B

123456789101112131415161718192021222324252627282930313233
  1. import { spawn, Thread, Worker } from 'threads/dist';
  2. /**
  3. * @param {string} code
  4. * @returns {Promise<void>}
  5. */
  6. export function evaluateInWorker(
  7. code: string,
  8. waitTimeout: number
  9. ): Promise<string | null> {
  10. return new Promise(async (resolve, reject) => {
  11. const evaluationWorker = await spawn(new Worker('./workers/evaluation-worker'));
  12. const timeout = setTimeout(async () => {
  13. await Thread.terminate(evaluationWorker);
  14. resolve(null);
  15. }, waitTimeout);
  16. try {
  17. const result: string = await evaluationWorker.evaluate(code);
  18. clearTimeout(timeout);
  19. await Thread.terminate(evaluationWorker);
  20. resolve(result);
  21. } catch (error) {
  22. clearTimeout(timeout);
  23. await Thread.terminate(evaluationWorker);
  24. reject(error);
  25. }
  26. });
  27. }