summaryrefslogtreecommitdiffhomepage
path: root/packages/ui/src/pierre/worker.ts
blob: 2d264067426421cfa5c8b66d5da7fc877bfe3852 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
import { getOrCreateWorkerPoolSingleton, WorkerPoolManager } from "@pierre/diffs/worker"
import ShikiWorkerUrl from "@pierre/diffs/worker/worker.js?worker&url"

export function workerFactory(): Worker {
  return new Worker(ShikiWorkerUrl, { type: "module" })
}

export const workerPool: WorkerPoolManager | undefined = (() => {
  if (typeof window === "undefined") {
    return undefined
  }
  return getOrCreateWorkerPoolSingleton({
    poolOptions: {
      workerFactory,
      // poolSize defaults to 8. More workers = more parallelism but
      // also more memory. Too many can actually slow things down.
      // NOTE: 2 is probably better for OpenCode, as I think 8 might be
      // a bit overkill, especially because Safari has a significantly slower
      // boot up time for workers
      poolSize: 2,
    },
    highlighterOptions: {
      theme: "OpenCode",
      // Optionally preload languages to avoid lazy-loading delays
      // langs: ["typescript", "javascript", "css", "html"],
    },
  })
})()