worker.ts 847 B

12345678910111213141516171819202122232425262728
  1. import process from 'node:process';
  2. import type { JestWorkerFarm } from 'jest-worker';
  3. import { Worker as JestWorker } from 'jest-worker';
  4. const sharedWorkerOptions = {
  5. numWorkers: 1,
  6. enableWorkerThreads: true,
  7. forkOptions: {
  8. env: {
  9. ...process.env,
  10. NODE_OPTIONS: process.env.NODE_OPTIONS
  11. }
  12. }
  13. } satisfies ConstructorParameters<typeof JestWorker>[1];
  14. export function createWorker<T extends Record<string, unknown>>(workerPath: string) {
  15. return <const K extends ReadonlyArray<keyof T & string>>(exposedMethods: K): JestWorkerFarm<Pick<T, K[number]>> => {
  16. const worker = new JestWorker(workerPath, {
  17. ...sharedWorkerOptions,
  18. exposedMethods
  19. }) as JestWorkerFarm<Pick<T, K[number]>>;
  20. worker.getStdout().pipe(process.stdout);
  21. worker.getStderr().pipe(process.stderr);
  22. return worker;
  23. };
  24. }