summaryrefslogtreecommitdiffhomepage
path: root/packages/ui/src/components/code.tsx
diff options
context:
space:
mode:
authorAdam <[email protected]>2025-12-02 06:50:16 -0600
committerAdam <[email protected]>2025-12-02 06:50:21 -0600
commitc0a35141e6b70eed1a9ba576fe43b7f7d690b968 (patch)
tree50d3f50af029076faa3f5d4a5d9a9acb752e6b6e /packages/ui/src/components/code.tsx
parent221bb64aebda8263ea2ce48c1a1dc1f36ac83857 (diff)
downloadopencode-c0a35141e6b70eed1a9ba576fe43b7f7d690b968.tar.gz
opencode-c0a35141e6b70eed1a9ba576fe43b7f7d690b968.zip
feat: better code and diff rendering performance
Diffstat (limited to 'packages/ui/src/components/code.tsx')
-rw-r--r--packages/ui/src/components/code.tsx29
1 files changed, 24 insertions, 5 deletions
diff --git a/packages/ui/src/components/code.tsx b/packages/ui/src/components/code.tsx
index 788baf549..b4b772816 100644
--- a/packages/ui/src/components/code.tsx
+++ b/packages/ui/src/components/code.tsx
@@ -1,6 +1,22 @@
import { type FileContents, File, FileOptions, LineAnnotation } from "@pierre/precision-diffs"
import { ComponentProps, createEffect, splitProps } from "solid-js"
-import { createDefaultOptions, styleVariables } from "./pierre"
+import { createDefaultOptions, styleVariables } from "../pierre"
+import { getOrCreateWorkerPoolSingleton } from "@pierre/precision-diffs/worker"
+import { workerFactory } from "../pierre/worker"
+
+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"],
+ },
+})
export type CodeProps<T = {}> = FileOptions<T> & {
file: FileContents
@@ -14,10 +30,13 @@ export function Code<T>(props: CodeProps<T>) {
const [local, others] = splitProps(props, ["file", "class", "classList", "annotations"])
createEffect(() => {
- const instance = new File<T>({
- ...createDefaultOptions<T>("unified"),
- ...others,
- })
+ const instance = new File<T>(
+ {
+ ...createDefaultOptions<T>("unified"),
+ ...others,
+ },
+ workerPool,
+ )
container.innerHTML = ""
instance.render({