source-worker.compat.spec.ts 1.3 KB

123456789101112131415161718192021222324252627282930313233343536
  1. import { copyFile, mkdtemp, rm } from 'node:fs/promises'
  2. import { tmpdir } from 'node:os'
  3. import { join } from 'node:path'
  4. import { Worker } from 'node:worker_threads'
  5. import { expect, it } from 'vitest'
  6. /**
  7. * Prove the unbuilt worker is a self-contained source closure. Copying it out
  8. * of the workspace makes any package runtime import fail even when local
  9. * `lib/` artifacts happen to exist.
  10. */
  11. it('boots the source worker without workspace package outputs', async () => {
  12. const directory = await mkdtemp(join(tmpdir(), 'dsh-code-source-worker-'))
  13. let worker: Worker | undefined
  14. try {
  15. const files = ['worker.ts', 'bootstrap.ts', 'protocol.ts', 'worker-json.ts', 'output-json.ts']
  16. await Promise.all(files.map(async (file) => {
  17. await copyFile(new URL(`../src/${file}`, import.meta.url), join(directory, file))
  18. }))
  19. worker = new Worker(join(directory, 'worker.ts'), {
  20. workerData: { code: 'return { answer: 42 }', namespaces: [], maxOutputBytes: 65_536 },
  21. env: {},
  22. execArgv: [],
  23. })
  24. const message = await new Promise<unknown>((resolve, reject) => {
  25. worker?.once('message', resolve)
  26. worker?.once('error', reject)
  27. })
  28. expect(message).toEqual({ type: 'done', value: { answer: 42 } })
  29. } finally {
  30. if (worker) await worker.terminate()
  31. await rm(directory, { recursive: true, force: true })
  32. }
  33. })