summaryrefslogtreecommitdiffhomepage
path: root/packages/ui/src/pierre
diff options
context:
space:
mode:
authorAdam <[email protected]>2025-12-08 06:24:19 -0600
committerAdam <[email protected]>2025-12-08 06:24:24 -0600
commit9363c15b4a1fafca2d30063ebcb166f36ba35235 (patch)
treefa7d6c62a0b0d0f7811562d6d989735bfad49537 /packages/ui/src/pierre
parent3325823f23800687e4af8d9960438b848bd4e005 (diff)
downloadopencode-9363c15b4a1fafca2d30063ebcb166f36ba35235.tar.gz
opencode-9363c15b4a1fafca2d30063ebcb166f36ba35235.zip
feat: better code and diff perf
Diffstat (limited to 'packages/ui/src/pierre')
-rw-r--r--packages/ui/src/pierre/index.ts34
-rw-r--r--packages/ui/src/pierre/worker.ts17
2 files changed, 34 insertions, 17 deletions
diff --git a/packages/ui/src/pierre/index.ts b/packages/ui/src/pierre/index.ts
index 26e902d05..ddbd1b82d 100644
--- a/packages/ui/src/pierre/index.ts
+++ b/packages/ui/src/pierre/index.ts
@@ -9,21 +9,7 @@ export type DiffProps<T = {}> = FileDiffOptions<T> & {
classList?: ComponentProps<"div">["classList"]
}
-export function createDefaultOptions<T>(style: FileDiffOptions<T>["diffStyle"]) {
- return {
- theme: "OpenCode",
- themeType: "system",
- disableLineNumbers: false,
- overflow: "wrap",
- diffStyle: style ?? "unified",
- diffIndicators: "bars",
- disableBackground: false,
- expansionLineCount: 20,
- lineDiffType: style === "split" ? "word-alt" : "none",
- maxLineDiffLength: 1000,
- maxLineLengthForHighlighting: 1000,
- disableFileHeader: true,
- unsafeCSS: `
+const unsafeCSS = `
[data-pjs-header],
[data-pjs] {
[data-separator-wrapper] {
@@ -46,7 +32,23 @@ export function createDefaultOptions<T>(style: FileDiffOptions<T>["diffStyle"])
[data-separator-content] {
height: 24px !important;
}
-}`,
+}`
+
+export function createDefaultOptions<T>(style: FileDiffOptions<T>["diffStyle"]) {
+ return {
+ theme: "OpenCode",
+ themeType: "system",
+ disableLineNumbers: false,
+ overflow: "wrap",
+ diffStyle: style ?? "unified",
+ diffIndicators: "bars",
+ disableBackground: false,
+ expansionLineCount: 20,
+ lineDiffType: style === "split" ? "word-alt" : "none",
+ maxLineDiffLength: 1000,
+ maxLineLengthForHighlighting: 1000,
+ disableFileHeader: true,
+ unsafeCSS,
// hunkSeparators(hunkData: HunkData) {
// const fragment = document.createDocumentFragment()
// const numCol = document.createElement("div")
diff --git a/packages/ui/src/pierre/worker.ts b/packages/ui/src/pierre/worker.ts
index de5fd625a..2b2da1f09 100644
--- a/packages/ui/src/pierre/worker.ts
+++ b/packages/ui/src/pierre/worker.ts
@@ -1,5 +1,20 @@
-import ShikiWorkerUrl from "@pierre/precision-diffs/worker/shiki-worker.js?worker&url"
+import { getOrCreateWorkerPoolSingleton } from "@pierre/precision-diffs/worker"
+import ShikiWorkerUrl from "@pierre/precision-diffs/worker/worker.js?worker&url"
export function workerFactory(): Worker {
return new Worker(ShikiWorkerUrl, { type: "module" })
}
+
+export const workerPool = getOrCreateWorkerPoolSingleton({
+ poolOptions: {
+ workerFactory,
+ // poolSize defaults to 8. More workers = more parallelism but
+ // also more memory. Too many can actually slow things down.
+ // poolSize: 8,
+ },
+ highlighterOptions: {
+ theme: "OpenCode",
+ // Optionally preload languages to avoid lazy-loading delays
+ // langs: ["typescript", "javascript", "css", "html"],
+ },
+})