diff options
Diffstat (limited to 'packages/ui/src/pierre/worker.ts')
| -rw-r--r-- | packages/ui/src/pierre/worker.ts | 47 |
1 files changed, 35 insertions, 12 deletions
diff --git a/packages/ui/src/pierre/worker.ts b/packages/ui/src/pierre/worker.ts index 2d2640674..0d117c368 100644 --- a/packages/ui/src/pierre/worker.ts +++ b/packages/ui/src/pierre/worker.ts @@ -1,16 +1,15 @@ -import { getOrCreateWorkerPoolSingleton, WorkerPoolManager } from "@pierre/diffs/worker" +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" }) } -export const workerPool: WorkerPoolManager | undefined = (() => { - if (typeof window === "undefined") { - return undefined - } - return getOrCreateWorkerPoolSingleton({ - poolOptions: { +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. @@ -19,10 +18,34 @@ export const workerPool: WorkerPoolManager | undefined = (() => { // boot up time for workers poolSize: 2, }, - highlighterOptions: { + { theme: "OpenCode", - // Optionally preload languages to avoid lazy-loading delays - // langs: ["typescript", "javascript", "css", "html"], + lineDiffType, }, - }) -})() + ) + + 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"), + } +} |
