| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152 |
- import { WorkerPoolManager } from "@pierre/diffs/worker"
- import ShikiWorkerUrl from "@pierre/diffs/worker/worker.js?worker&url"
- export type WorkerPoolStyle = "unified" | "split"
- export function workerFactory(): Worker {
- return new Worker(ShikiWorkerUrl, { type: "module" })
- }
- function createPool(lineDiffType: "none" | "word-alt") {
- const pool = new WorkerPoolManager(
- {
- 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,
- },
- {
- theme: "OpenCode",
- lineDiffType,
- preferredHighlighter: "shiki-wasm",
- },
- )
- pool.initialize()
- return pool
- }
- let unified: WorkerPoolManager | undefined
- let split: WorkerPoolManager | undefined
- export function getWorkerPool(style: WorkerPoolStyle | undefined): WorkerPoolManager | undefined {
- if (typeof window === "undefined") return
- if (style === "split") {
- if (!split) split = createPool("word-alt")
- return split
- }
- if (!unified) unified = createPool("none")
- return unified
- }
- export function getWorkerPools() {
- return {
- unified: getWorkerPool("unified"),
- split: getWorkerPool("split"),
- }
- }
|