highlight.js の処理はコードをパースして トークンごとにクラスをつけるだけ

テーマは別に css ファイルを読み込む
1 テーマ 1 ファイル
css 側でトークンにつけられた keyword, funciton, string などのクラスに対して斜体や太文字や色を指定してる

なので テーマ切り替えはライブラリの処理じゃなくて自分で css ファイルを切り替えることになる

例)
const $$ = (s, r) => [...(r || document).querySelectorAll(s)]

function switchTheme(theme_name){
const path = "/lib/highlight/styles/" + theme_name + ".css"

$$(".hl-theme").forEach(e => e.disabled = true)
const style_elem = $(`.hl-theme[data-theme="${theme_name}"]`)
if(style_elem){
style_elem.disabled = false
}else{
const elem = Object.assign(document.createElement("link"), {
rel: "stylesheet",
href: path,
className: "hl-theme",
})
elem.dataset.theme = theme_name
document.head.append(elem)
}
}