From 20f0c7970a2ae0d2db943e4c541cb8f54ff0a155 Mon Sep 17 00:00:00 2001 From: mitchell Date: Sat, 18 Apr 2026 00:56:49 -0400 Subject: [PATCH] refactor: extract comark/shiki rendering to separate file --- src/render/index.ts | 110 +-------------------------------------- src/render/markdown.ts | 114 +++++++++++++++++++++++++++++++++++++++++ 2 files changed, 116 insertions(+), 108 deletions(-) create mode 100644 src/render/markdown.ts diff --git a/src/render/index.ts b/src/render/index.ts index d591a1c..67626f4 100644 --- a/src/render/index.ts +++ b/src/render/index.ts @@ -1,54 +1,5 @@ import os from "node:os"; import type { WriteStream } from "node:tty"; -import { render } from "@comark/ansi"; -import highlight from "@comark/ansi/plugins/highlight"; -import bash from "@shikijs/langs/bash"; -import c from "@shikijs/langs/c"; -import cpp from "@shikijs/langs/cpp"; -import csharp from "@shikijs/langs/csharp"; -import css from "@shikijs/langs/css"; -import docker from "@shikijs/langs/docker"; -import elixir from "@shikijs/langs/elixir"; -import golang from "@shikijs/langs/go"; -import graphql from "@shikijs/langs/graphql"; -import hcl from "@shikijs/langs/hcl"; -import html from "@shikijs/langs/html"; -import ini from "@shikijs/langs/ini"; -import java from "@shikijs/langs/java"; -import javascript from "@shikijs/langs/javascript"; -import json from "@shikijs/langs/json"; -import jsx from "@shikijs/langs/jsx"; -import kotlin from "@shikijs/langs/kotlin"; -import less from "@shikijs/langs/less"; -import lua from "@shikijs/langs/lua"; -import markdown from "@shikijs/langs/markdown"; -import mdc from "@shikijs/langs/mdc"; -import objc from "@shikijs/langs/objc"; -import ocaml from "@shikijs/langs/ocaml"; -import perl from "@shikijs/langs/perl"; -import php from "@shikijs/langs/php"; -import powershell from "@shikijs/langs/powershell"; -import proto from "@shikijs/langs/proto"; -import python from "@shikijs/langs/python"; -import r from "@shikijs/langs/r"; -import ruby from "@shikijs/langs/ruby"; -import rust from "@shikijs/langs/rust"; -import scss from "@shikijs/langs/scss"; -import sql from "@shikijs/langs/sql"; -import svelte from "@shikijs/langs/svelte"; -import swift from "@shikijs/langs/swift"; -import terraform from "@shikijs/langs/terraform"; -import toml from "@shikijs/langs/toml"; -import tsx from "@shikijs/langs/tsx"; -import typescript from "@shikijs/langs/typescript"; -import vim from "@shikijs/langs/vim"; -import vue from "@shikijs/langs/vue"; -import xml from "@shikijs/langs/xml"; -import yaml from "@shikijs/langs/yaml"; -import zig from "@shikijs/langs/zig"; -import zsh from "@shikijs/langs/zsh"; -import kanagawaLotus from "@shikijs/themes/kanagawa-lotus"; -import kanagawaWave from "@shikijs/themes/kanagawa-wave"; import type { AsyncIterableStream, LanguageModelUsage, @@ -57,6 +8,7 @@ import type { } from "ai"; import styles from "ansi-styles"; import { chalkStderr, supportsColorStderr } from "chalk"; +import { renderMarkdown } from "./markdown"; const home = os.homedir(); const reasoningFile = Bun.file(`${home}/.aicl_reasoning.md`); @@ -198,65 +150,7 @@ export default class Renderer { const [columns] = process.stdout.getWindowSize(); this.write("\n"); - this.write( - await render(await text, { - width: columns, - plugins: [ - highlight({ - themes: { dark: kanagawaWave, light: kanagawaLotus }, - registerDefaultThemes: false, - registerDefaultLanguages: false, - languages: [ - bash, - c, - cpp, - csharp, - css, - docker, - elixir, - golang, - graphql, - hcl, - html, - ini, - java, - javascript, - json, - jsx, - kotlin, - less, - lua, - markdown, - mdc, - objc, - ocaml, - perl, - php, - powershell, - proto, - python, - r, - ruby, - rust, - scss, - sql, - svelte, - swift, - terraform, - toml, - tsx, - typescript, - vim, - vue, - xml, - yaml, - zig, - zsh, - ], - }), - ], - }), - ); + this.write(await renderMarkdown(text, columns)); this.write("\n"); } } diff --git a/src/render/markdown.ts b/src/render/markdown.ts new file mode 100644 index 0000000..47a5813 --- /dev/null +++ b/src/render/markdown.ts @@ -0,0 +1,114 @@ +import { render } from "@comark/ansi"; +import highlight from "@comark/ansi/plugins/highlight"; +import bash from "@shikijs/langs/bash"; +import c from "@shikijs/langs/c"; +import cpp from "@shikijs/langs/cpp"; +import csharp from "@shikijs/langs/csharp"; +import css from "@shikijs/langs/css"; +import docker from "@shikijs/langs/docker"; +import elixir from "@shikijs/langs/elixir"; +import golang from "@shikijs/langs/go"; +import graphql from "@shikijs/langs/graphql"; +import groovy from "@shikijs/langs/groovy"; +import hcl from "@shikijs/langs/hcl"; +import html from "@shikijs/langs/html"; +import ini from "@shikijs/langs/ini"; +import java from "@shikijs/langs/java"; +import javascript from "@shikijs/langs/javascript"; +import json from "@shikijs/langs/json"; +import jsx from "@shikijs/langs/jsx"; +import kotlin from "@shikijs/langs/kotlin"; +import less from "@shikijs/langs/less"; +import lua from "@shikijs/langs/lua"; +import markdown from "@shikijs/langs/markdown"; +import mdc from "@shikijs/langs/mdc"; +import objc from "@shikijs/langs/objc"; +import ocaml from "@shikijs/langs/ocaml"; +import perl from "@shikijs/langs/perl"; +import php from "@shikijs/langs/php"; +import powershell from "@shikijs/langs/powershell"; +import proto from "@shikijs/langs/proto"; +import python from "@shikijs/langs/python"; +import r from "@shikijs/langs/r"; +import ruby from "@shikijs/langs/ruby"; +import rust from "@shikijs/langs/rust"; +import scss from "@shikijs/langs/scss"; +import sql from "@shikijs/langs/sql"; +import svelte from "@shikijs/langs/svelte"; +import swift from "@shikijs/langs/swift"; +import terraform from "@shikijs/langs/terraform"; +import toml from "@shikijs/langs/toml"; +import tsx from "@shikijs/langs/tsx"; +import typescript from "@shikijs/langs/typescript"; +import vim from "@shikijs/langs/vim"; +import vue from "@shikijs/langs/vue"; +import xml from "@shikijs/langs/xml"; +import yaml from "@shikijs/langs/yaml"; +import zig from "@shikijs/langs/zig"; +import zsh from "@shikijs/langs/zsh"; +import kanagawaLotus from "@shikijs/themes/kanagawa-lotus"; +import kanagawaWave from "@shikijs/themes/kanagawa-wave"; + +export async function renderMarkdown( + text: PromiseLike, + columns: number, +) { + return render(await text, { + width: columns, + plugins: [ + highlight({ + themes: { dark: kanagawaWave, light: kanagawaLotus }, + registerDefaultThemes: false, + registerDefaultLanguages: false, + languages: [ + bash, + c, + cpp, + csharp, + css, + docker, + elixir, + golang, + graphql, + groovy, + hcl, + html, + ini, + java, + javascript, + json, + jsx, + kotlin, + less, + lua, + markdown, + mdc, + objc, + ocaml, + perl, + php, + powershell, + proto, + python, + r, + ruby, + rust, + scss, + sql, + svelte, + swift, + terraform, + toml, + tsx, + typescript, + vim, + vue, + xml, + yaml, + zig, + zsh, + ], + }), + ], + }); +}