summaryrefslogtreecommitdiffhomepage
path: root/packages/ui/src/pierre/worker.ts
diff options
context:
space:
mode:
Diffstat (limited to 'packages/ui/src/pierre/worker.ts')
-rw-r--r--packages/ui/src/pierre/worker.ts47
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"),
+ }
+}