summaryrefslogtreecommitdiffhomepage
path: root/packages/ui/src/pierre
diff options
context:
space:
mode:
authorAdam <[email protected]>2025-12-31 09:23:24 -0600
committerAdam <[email protected]>2025-12-31 09:23:24 -0600
commit2ec6a21cc0018be6677e4cbad6bf48dbf8b37786 (patch)
tree6ad3f27288f660b4bba43772075c5138764f25b3 /packages/ui/src/pierre
parentebf5ad25c5f5cdf42bcb93199d9913f260ebe767 (diff)
downloadopencode-2ec6a21cc0018be6677e4cbad6bf48dbf8b37786.tar.gz
opencode-2ec6a21cc0018be6677e4cbad6bf48dbf8b37786.zip
feat(desktop): unified diff toggle
Diffstat (limited to 'packages/ui/src/pierre')
-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"),
+ }
+}