import { Worker } from 'worker_threads'; import path from 'path'; export enum WorkerNameEnum { htmlStr2Md = 'htmlStr2Md', countGptMessagesTokens = 'countGptMessagesTokens' } export const getWorker = (name: WorkerNameEnum) => { const workerPath = path.join(process.cwd(), '.next', 'server', 'worker', `${name}.js`); return new Worker(workerPath); }; export const runWorker = (name: WorkerNameEnum, params?: Record) => { return new Promise((resolve, reject) => { const worker = getWorker(name); worker.postMessage(params); worker.on('message', (msg: { type: 'success' | 'error'; data: any }) => { if (msg.type === 'error') return reject(msg.data); resolve(msg.data); }); worker.on('error', (err) => { worker.terminate(); reject(err); }); }); };