fix(dashboard): parse non-ASCII characters in code blocks

This commit is contained in:
Jake Fulmine 2024-04-11 14:58:57 +02:00
parent 64c1939d71
commit 07e653a1b8
3 changed files with 388 additions and 367 deletions

View file

@ -11,6 +11,7 @@
"devDependencies": { "devDependencies": {
"@sveltejs/vite-plugin-svelte": "^1.0.0-next.30", "@sveltejs/vite-plugin-svelte": "^1.0.0-next.30",
"@tsconfig/svelte": "^3.0.0", "@tsconfig/svelte": "^3.0.0",
"js-base64": "^3.7.7",
"svelte": "^3.44.0", "svelte": "^3.44.0",
"svelte-check": "^2.2.7", "svelte-check": "^2.2.7",
"svelte-toggle": "^3.1.0", "svelte-toggle": "^3.1.0",
@ -26,7 +27,7 @@
"bootstrap": "^5.1.3", "bootstrap": "^5.1.3",
"bootstrap-dark-5": "^1.1.3", "bootstrap-dark-5": "^1.1.3",
"core-js-pure": "^3.23.4", "core-js-pure": "^3.23.4",
"discord-markdown": "https://github.com/Draconizations/discord-markdown#fe852ba7bf2f56744a632207a314d749aa12dd65", "discord-markdown": "github:draconizations/discord-markdown#77ed4acec80ebbc3f3b6d9e18eb0217c646f18c7",
"gh-pages": "^3.2.3", "gh-pages": "^3.2.3",
"highlight.js": "^11.7.0", "highlight.js": "^11.7.0",
"import": "^0.0.6", "import": "^0.0.6",

View file

@ -1,377 +1,383 @@
import { toHTML } from 'discord-markdown'; import discordMarkdown from "discord-markdown";
import hljs from 'highlight.js/lib/core'; import hljs from "highlight.js/lib/core";
import parseTimestamps from './parse-timestamps'; import parseTimestamps from "./parse-timestamps";
import { Base64 } from "js-base64";
const languages: Record<string, () => Promise<typeof import("highlight.js/lib/languages/*")>> = { const { toHTML } = discordMarkdown;
const languages: Record<
string,
() => Promise<typeof import("highlight.js/lib/languages/*")>
> = {
"1c": () => import("highlight.js/lib/languages/1c"), "1c": () => import("highlight.js/lib/languages/1c"),
"abnf": () => import("highlight.js/lib/languages/abnf"), abnf: () => import("highlight.js/lib/languages/abnf"),
"accesslog": () => import("highlight.js/lib/languages/accesslog"), accesslog: () => import("highlight.js/lib/languages/accesslog"),
"actionscript": () => import("highlight.js/lib/languages/actionscript"), actionscript: () => import("highlight.js/lib/languages/actionscript"),
"ada": () => import("highlight.js/lib/languages/ada"), ada: () => import("highlight.js/lib/languages/ada"),
"angelscript": () => import("highlight.js/lib/languages/angelscript"), angelscript: () => import("highlight.js/lib/languages/angelscript"),
"apache": () => import("highlight.js/lib/languages/apache"), apache: () => import("highlight.js/lib/languages/apache"),
"applescript": () => import("highlight.js/lib/languages/applescript"), applescript: () => import("highlight.js/lib/languages/applescript"),
"arcade": () => import("highlight.js/lib/languages/arcade"), arcade: () => import("highlight.js/lib/languages/arcade"),
"arduino": () => import("highlight.js/lib/languages/arduino"), arduino: () => import("highlight.js/lib/languages/arduino"),
"armasm": () => import("highlight.js/lib/languages/armasm"), armasm: () => import("highlight.js/lib/languages/armasm"),
"xml": () => import("highlight.js/lib/languages/xml"), xml: () => import("highlight.js/lib/languages/xml"),
"asciidoc": () => import("highlight.js/lib/languages/asciidoc"), asciidoc: () => import("highlight.js/lib/languages/asciidoc"),
"aspectj": () => import("highlight.js/lib/languages/aspectj"), aspectj: () => import("highlight.js/lib/languages/aspectj"),
"autohotkey": () => import("highlight.js/lib/languages/autohotkey"), autohotkey: () => import("highlight.js/lib/languages/autohotkey"),
"autoit": () => import("highlight.js/lib/languages/autoit"), autoit: () => import("highlight.js/lib/languages/autoit"),
"avrasm": () => import("highlight.js/lib/languages/avrasm"), avrasm: () => import("highlight.js/lib/languages/avrasm"),
"awk": () => import("highlight.js/lib/languages/awk"), awk: () => import("highlight.js/lib/languages/awk"),
"axapta": () => import("highlight.js/lib/languages/axapta"), axapta: () => import("highlight.js/lib/languages/axapta"),
"bash": () => import("highlight.js/lib/languages/bash"), bash: () => import("highlight.js/lib/languages/bash"),
"basic": () => import("highlight.js/lib/languages/basic"), basic: () => import("highlight.js/lib/languages/basic"),
"bnf": () => import("highlight.js/lib/languages/bnf"), bnf: () => import("highlight.js/lib/languages/bnf"),
"brainfuck": () => import("highlight.js/lib/languages/brainfuck"), brainfuck: () => import("highlight.js/lib/languages/brainfuck"),
"c": () => import("highlight.js/lib/languages/c"), c: () => import("highlight.js/lib/languages/c"),
"cal": () => import("highlight.js/lib/languages/cal"), cal: () => import("highlight.js/lib/languages/cal"),
"capnproto": () => import("highlight.js/lib/languages/capnproto"), capnproto: () => import("highlight.js/lib/languages/capnproto"),
"ceylon": () => import("highlight.js/lib/languages/ceylon"), ceylon: () => import("highlight.js/lib/languages/ceylon"),
"clean": () => import("highlight.js/lib/languages/clean"), clean: () => import("highlight.js/lib/languages/clean"),
"clojure": () => import("highlight.js/lib/languages/clojure"), clojure: () => import("highlight.js/lib/languages/clojure"),
"clojure-repl": () => import("highlight.js/lib/languages/clojure-repl"), "clojure-repl": () => import("highlight.js/lib/languages/clojure-repl"),
"cmake": () => import("highlight.js/lib/languages/cmake"), cmake: () => import("highlight.js/lib/languages/cmake"),
"coffeescript": () => import("highlight.js/lib/languages/coffeescript"), coffeescript: () => import("highlight.js/lib/languages/coffeescript"),
"coq": () => import("highlight.js/lib/languages/coq"), coq: () => import("highlight.js/lib/languages/coq"),
"cos": () => import("highlight.js/lib/languages/cos"), cos: () => import("highlight.js/lib/languages/cos"),
"cpp": () => import("highlight.js/lib/languages/cpp"), cpp: () => import("highlight.js/lib/languages/cpp"),
"crmsh": () => import("highlight.js/lib/languages/crmsh"), crmsh: () => import("highlight.js/lib/languages/crmsh"),
"crystal": () => import("highlight.js/lib/languages/crystal"), crystal: () => import("highlight.js/lib/languages/crystal"),
"csharp": () => import("highlight.js/lib/languages/csharp"), csharp: () => import("highlight.js/lib/languages/csharp"),
"csp": () => import("highlight.js/lib/languages/csp"), csp: () => import("highlight.js/lib/languages/csp"),
"css": () => import("highlight.js/lib/languages/css"), css: () => import("highlight.js/lib/languages/css"),
"d": () => import("highlight.js/lib/languages/d"), d: () => import("highlight.js/lib/languages/d"),
"markdown": () => import("highlight.js/lib/languages/markdown"), markdown: () => import("highlight.js/lib/languages/markdown"),
"dart": () => import("highlight.js/lib/languages/dart"), dart: () => import("highlight.js/lib/languages/dart"),
"delphi": () => import("highlight.js/lib/languages/delphi"), delphi: () => import("highlight.js/lib/languages/delphi"),
"diff": () => import("highlight.js/lib/languages/diff"), diff: () => import("highlight.js/lib/languages/diff"),
"django": () => import("highlight.js/lib/languages/django"), django: () => import("highlight.js/lib/languages/django"),
"dns": () => import("highlight.js/lib/languages/dns"), dns: () => import("highlight.js/lib/languages/dns"),
"dockerfile": () => import("highlight.js/lib/languages/dockerfile"), dockerfile: () => import("highlight.js/lib/languages/dockerfile"),
"dos": () => import("highlight.js/lib/languages/dos"), dos: () => import("highlight.js/lib/languages/dos"),
"dsconfig": () => import("highlight.js/lib/languages/dsconfig"), dsconfig: () => import("highlight.js/lib/languages/dsconfig"),
"dts": () => import("highlight.js/lib/languages/dts"), dts: () => import("highlight.js/lib/languages/dts"),
"dust": () => import("highlight.js/lib/languages/dust"), dust: () => import("highlight.js/lib/languages/dust"),
"ebnf": () => import("highlight.js/lib/languages/ebnf"), ebnf: () => import("highlight.js/lib/languages/ebnf"),
"elixir": () => import("highlight.js/lib/languages/elixir"), elixir: () => import("highlight.js/lib/languages/elixir"),
"elm": () => import("highlight.js/lib/languages/elm"), elm: () => import("highlight.js/lib/languages/elm"),
"ruby": () => import("highlight.js/lib/languages/ruby"), ruby: () => import("highlight.js/lib/languages/ruby"),
"erb": () => import("highlight.js/lib/languages/erb"), erb: () => import("highlight.js/lib/languages/erb"),
"erlang-repl": () => import("highlight.js/lib/languages/erlang-repl"), "erlang-repl": () => import("highlight.js/lib/languages/erlang-repl"),
"erlang": () => import("highlight.js/lib/languages/erlang"), erlang: () => import("highlight.js/lib/languages/erlang"),
"excel": () => import("highlight.js/lib/languages/excel"), excel: () => import("highlight.js/lib/languages/excel"),
"fix": () => import("highlight.js/lib/languages/fix"), fix: () => import("highlight.js/lib/languages/fix"),
"flix": () => import("highlight.js/lib/languages/flix"), flix: () => import("highlight.js/lib/languages/flix"),
"fortran": () => import("highlight.js/lib/languages/fortran"), fortran: () => import("highlight.js/lib/languages/fortran"),
"fsharp": () => import("highlight.js/lib/languages/fsharp"), fsharp: () => import("highlight.js/lib/languages/fsharp"),
"gams": () => import("highlight.js/lib/languages/gams"), gams: () => import("highlight.js/lib/languages/gams"),
"gauss": () => import("highlight.js/lib/languages/gauss"), gauss: () => import("highlight.js/lib/languages/gauss"),
"gcode": () => import("highlight.js/lib/languages/gcode"), gcode: () => import("highlight.js/lib/languages/gcode"),
"gherkin": () => import("highlight.js/lib/languages/gherkin"), gherkin: () => import("highlight.js/lib/languages/gherkin"),
"glsl": () => import("highlight.js/lib/languages/glsl"), glsl: () => import("highlight.js/lib/languages/glsl"),
"gml": () => import("highlight.js/lib/languages/gml"), gml: () => import("highlight.js/lib/languages/gml"),
"go": () => import("highlight.js/lib/languages/go"), go: () => import("highlight.js/lib/languages/go"),
"golo": () => import("highlight.js/lib/languages/golo"), golo: () => import("highlight.js/lib/languages/golo"),
"gradle": () => import("highlight.js/lib/languages/gradle"), gradle: () => import("highlight.js/lib/languages/gradle"),
"graphql": () => import("highlight.js/lib/languages/graphql"), graphql: () => import("highlight.js/lib/languages/graphql"),
"groovy": () => import("highlight.js/lib/languages/groovy"), groovy: () => import("highlight.js/lib/languages/groovy"),
"haml": () => import("highlight.js/lib/languages/haml"), haml: () => import("highlight.js/lib/languages/haml"),
"handlebars": () => import("highlight.js/lib/languages/handlebars"), handlebars: () => import("highlight.js/lib/languages/handlebars"),
"haskell": () => import("highlight.js/lib/languages/haskell"), haskell: () => import("highlight.js/lib/languages/haskell"),
"haxe": () => import("highlight.js/lib/languages/haxe"), haxe: () => import("highlight.js/lib/languages/haxe"),
"hsp": () => import("highlight.js/lib/languages/hsp"), hsp: () => import("highlight.js/lib/languages/hsp"),
"http": () => import("highlight.js/lib/languages/http"), http: () => import("highlight.js/lib/languages/http"),
"hy": () => import("highlight.js/lib/languages/hy"), hy: () => import("highlight.js/lib/languages/hy"),
"inform7": () => import("highlight.js/lib/languages/inform7"), inform7: () => import("highlight.js/lib/languages/inform7"),
"ini": () => import("highlight.js/lib/languages/ini"), ini: () => import("highlight.js/lib/languages/ini"),
"irpf90": () => import("highlight.js/lib/languages/irpf90"), irpf90: () => import("highlight.js/lib/languages/irpf90"),
"isbl": () => import("highlight.js/lib/languages/isbl"), isbl: () => import("highlight.js/lib/languages/isbl"),
"java": () => import("highlight.js/lib/languages/java"), java: () => import("highlight.js/lib/languages/java"),
"javascript": () => import("highlight.js/lib/languages/javascript"), javascript: () => import("highlight.js/lib/languages/javascript"),
"jboss-cli": () => import("highlight.js/lib/languages/jboss-cli"), "jboss-cli": () => import("highlight.js/lib/languages/jboss-cli"),
"json": () => import("highlight.js/lib/languages/json"), json: () => import("highlight.js/lib/languages/json"),
"julia": () => import("highlight.js/lib/languages/julia"), julia: () => import("highlight.js/lib/languages/julia"),
"julia-repl": () => import("highlight.js/lib/languages/julia-repl"), "julia-repl": () => import("highlight.js/lib/languages/julia-repl"),
"kotlin": () => import("highlight.js/lib/languages/kotlin"), kotlin: () => import("highlight.js/lib/languages/kotlin"),
"lasso": () => import("highlight.js/lib/languages/lasso"), lasso: () => import("highlight.js/lib/languages/lasso"),
"latex": () => import("highlight.js/lib/languages/latex"), latex: () => import("highlight.js/lib/languages/latex"),
"ldif": () => import("highlight.js/lib/languages/ldif"), ldif: () => import("highlight.js/lib/languages/ldif"),
"leaf": () => import("highlight.js/lib/languages/leaf"), leaf: () => import("highlight.js/lib/languages/leaf"),
"less": () => import("highlight.js/lib/languages/less"), less: () => import("highlight.js/lib/languages/less"),
"lisp": () => import("highlight.js/lib/languages/lisp"), lisp: () => import("highlight.js/lib/languages/lisp"),
"livecodeserver": () => import("highlight.js/lib/languages/livecodeserver"), livecodeserver: () => import("highlight.js/lib/languages/livecodeserver"),
"livescript": () => import("highlight.js/lib/languages/livescript"), livescript: () => import("highlight.js/lib/languages/livescript"),
"llvm": () => import("highlight.js/lib/languages/llvm"), llvm: () => import("highlight.js/lib/languages/llvm"),
"lsl": () => import("highlight.js/lib/languages/lsl"), lsl: () => import("highlight.js/lib/languages/lsl"),
"lua": () => import("highlight.js/lib/languages/lua"), lua: () => import("highlight.js/lib/languages/lua"),
"makefile": () => import("highlight.js/lib/languages/makefile"), makefile: () => import("highlight.js/lib/languages/makefile"),
"mathematica": () => import("highlight.js/lib/languages/mathematica"), mathematica: () => import("highlight.js/lib/languages/mathematica"),
"matlab": () => import("highlight.js/lib/languages/matlab"), matlab: () => import("highlight.js/lib/languages/matlab"),
"maxima": () => import("highlight.js/lib/languages/maxima"), maxima: () => import("highlight.js/lib/languages/maxima"),
"mel": () => import("highlight.js/lib/languages/mel"), mel: () => import("highlight.js/lib/languages/mel"),
"mercury": () => import("highlight.js/lib/languages/mercury"), mercury: () => import("highlight.js/lib/languages/mercury"),
"mipsasm": () => import("highlight.js/lib/languages/mipsasm"), mipsasm: () => import("highlight.js/lib/languages/mipsasm"),
"mizar": () => import("highlight.js/lib/languages/mizar"), mizar: () => import("highlight.js/lib/languages/mizar"),
"perl": () => import("highlight.js/lib/languages/perl"), perl: () => import("highlight.js/lib/languages/perl"),
"mojolicious": () => import("highlight.js/lib/languages/mojolicious"), mojolicious: () => import("highlight.js/lib/languages/mojolicious"),
"monkey": () => import("highlight.js/lib/languages/monkey"), monkey: () => import("highlight.js/lib/languages/monkey"),
"moonscript": () => import("highlight.js/lib/languages/moonscript"), moonscript: () => import("highlight.js/lib/languages/moonscript"),
"n1ql": () => import("highlight.js/lib/languages/n1ql"), n1ql: () => import("highlight.js/lib/languages/n1ql"),
"nestedtext": () => import("highlight.js/lib/languages/nestedtext"), nestedtext: () => import("highlight.js/lib/languages/nestedtext"),
"nginx": () => import("highlight.js/lib/languages/nginx"), nginx: () => import("highlight.js/lib/languages/nginx"),
"nim": () => import("highlight.js/lib/languages/nim"), nim: () => import("highlight.js/lib/languages/nim"),
"nix": () => import("highlight.js/lib/languages/nix"), nix: () => import("highlight.js/lib/languages/nix"),
"node-repl": () => import("highlight.js/lib/languages/node-repl"), "node-repl": () => import("highlight.js/lib/languages/node-repl"),
"nsis": () => import("highlight.js/lib/languages/nsis"), nsis: () => import("highlight.js/lib/languages/nsis"),
"objectivec": () => import("highlight.js/lib/languages/objectivec"), objectivec: () => import("highlight.js/lib/languages/objectivec"),
"ocaml": () => import("highlight.js/lib/languages/ocaml"), ocaml: () => import("highlight.js/lib/languages/ocaml"),
"openscad": () => import("highlight.js/lib/languages/openscad"), openscad: () => import("highlight.js/lib/languages/openscad"),
"oxygene": () => import("highlight.js/lib/languages/oxygene"), oxygene: () => import("highlight.js/lib/languages/oxygene"),
"parser3": () => import("highlight.js/lib/languages/parser3"), parser3: () => import("highlight.js/lib/languages/parser3"),
"pf": () => import("highlight.js/lib/languages/pf"), pf: () => import("highlight.js/lib/languages/pf"),
"pgsql": () => import("highlight.js/lib/languages/pgsql"), pgsql: () => import("highlight.js/lib/languages/pgsql"),
"php": () => import("highlight.js/lib/languages/php"), php: () => import("highlight.js/lib/languages/php"),
"php-template": () => import("highlight.js/lib/languages/php-template"), "php-template": () => import("highlight.js/lib/languages/php-template"),
"plaintext": () => import("highlight.js/lib/languages/plaintext"), plaintext: () => import("highlight.js/lib/languages/plaintext"),
"pony": () => import("highlight.js/lib/languages/pony"), pony: () => import("highlight.js/lib/languages/pony"),
"powershell": () => import("highlight.js/lib/languages/powershell"), powershell: () => import("highlight.js/lib/languages/powershell"),
"processing": () => import("highlight.js/lib/languages/processing"), processing: () => import("highlight.js/lib/languages/processing"),
"profile": () => import("highlight.js/lib/languages/profile"), profile: () => import("highlight.js/lib/languages/profile"),
"prolog": () => import("highlight.js/lib/languages/prolog"), prolog: () => import("highlight.js/lib/languages/prolog"),
"properties": () => import("highlight.js/lib/languages/properties"), properties: () => import("highlight.js/lib/languages/properties"),
"protobuf": () => import("highlight.js/lib/languages/protobuf"), protobuf: () => import("highlight.js/lib/languages/protobuf"),
"puppet": () => import("highlight.js/lib/languages/puppet"), puppet: () => import("highlight.js/lib/languages/puppet"),
"purebasic": () => import("highlight.js/lib/languages/purebasic"), purebasic: () => import("highlight.js/lib/languages/purebasic"),
"python": () => import("highlight.js/lib/languages/python"), python: () => import("highlight.js/lib/languages/python"),
"python-repl": () => import("highlight.js/lib/languages/python-repl"), "python-repl": () => import("highlight.js/lib/languages/python-repl"),
"q": () => import("highlight.js/lib/languages/q"), q: () => import("highlight.js/lib/languages/q"),
"qml": () => import("highlight.js/lib/languages/qml"), qml: () => import("highlight.js/lib/languages/qml"),
"r": () => import("highlight.js/lib/languages/r"), r: () => import("highlight.js/lib/languages/r"),
"reasonml": () => import("highlight.js/lib/languages/reasonml"), reasonml: () => import("highlight.js/lib/languages/reasonml"),
"rib": () => import("highlight.js/lib/languages/rib"), rib: () => import("highlight.js/lib/languages/rib"),
"roboconf": () => import("highlight.js/lib/languages/roboconf"), roboconf: () => import("highlight.js/lib/languages/roboconf"),
"routeros": () => import("highlight.js/lib/languages/routeros"), routeros: () => import("highlight.js/lib/languages/routeros"),
"rsl": () => import("highlight.js/lib/languages/rsl"), rsl: () => import("highlight.js/lib/languages/rsl"),
"ruleslanguage": () => import("highlight.js/lib/languages/ruleslanguage"), ruleslanguage: () => import("highlight.js/lib/languages/ruleslanguage"),
"rust": () => import("highlight.js/lib/languages/rust"), rust: () => import("highlight.js/lib/languages/rust"),
"sas": () => import("highlight.js/lib/languages/sas"), sas: () => import("highlight.js/lib/languages/sas"),
"scala": () => import("highlight.js/lib/languages/scala"), scala: () => import("highlight.js/lib/languages/scala"),
"scheme": () => import("highlight.js/lib/languages/scheme"), scheme: () => import("highlight.js/lib/languages/scheme"),
"scilab": () => import("highlight.js/lib/languages/scilab"), scilab: () => import("highlight.js/lib/languages/scilab"),
"scss": () => import("highlight.js/lib/languages/scss"), scss: () => import("highlight.js/lib/languages/scss"),
"shell": () => import("highlight.js/lib/languages/shell"), shell: () => import("highlight.js/lib/languages/shell"),
"smali": () => import("highlight.js/lib/languages/smali"), smali: () => import("highlight.js/lib/languages/smali"),
"smalltalk": () => import("highlight.js/lib/languages/smalltalk"), smalltalk: () => import("highlight.js/lib/languages/smalltalk"),
"sml": () => import("highlight.js/lib/languages/sml"), sml: () => import("highlight.js/lib/languages/sml"),
"sqf": () => import("highlight.js/lib/languages/sqf"), sqf: () => import("highlight.js/lib/languages/sqf"),
"sql": () => import("highlight.js/lib/languages/sql"), sql: () => import("highlight.js/lib/languages/sql"),
"stan": () => import("highlight.js/lib/languages/stan"), stan: () => import("highlight.js/lib/languages/stan"),
"stata": () => import("highlight.js/lib/languages/stata"), stata: () => import("highlight.js/lib/languages/stata"),
"step21": () => import("highlight.js/lib/languages/step21"), step21: () => import("highlight.js/lib/languages/step21"),
"stylus": () => import("highlight.js/lib/languages/stylus"), stylus: () => import("highlight.js/lib/languages/stylus"),
"subunit": () => import("highlight.js/lib/languages/subunit"), subunit: () => import("highlight.js/lib/languages/subunit"),
"swift": () => import("highlight.js/lib/languages/swift"), swift: () => import("highlight.js/lib/languages/swift"),
"taggerscript": () => import("highlight.js/lib/languages/taggerscript"), taggerscript: () => import("highlight.js/lib/languages/taggerscript"),
"yaml": () => import("highlight.js/lib/languages/yaml"), yaml: () => import("highlight.js/lib/languages/yaml"),
"tap": () => import("highlight.js/lib/languages/tap"), tap: () => import("highlight.js/lib/languages/tap"),
"tcl": () => import("highlight.js/lib/languages/tcl"), tcl: () => import("highlight.js/lib/languages/tcl"),
"thrift": () => import("highlight.js/lib/languages/thrift"), thrift: () => import("highlight.js/lib/languages/thrift"),
"tp": () => import("highlight.js/lib/languages/tp"), tp: () => import("highlight.js/lib/languages/tp"),
"twig": () => import("highlight.js/lib/languages/twig"), twig: () => import("highlight.js/lib/languages/twig"),
"typescript": () => import("highlight.js/lib/languages/typescript"), typescript: () => import("highlight.js/lib/languages/typescript"),
"vala": () => import("highlight.js/lib/languages/vala"), vala: () => import("highlight.js/lib/languages/vala"),
"vbnet": () => import("highlight.js/lib/languages/vbnet"), vbnet: () => import("highlight.js/lib/languages/vbnet"),
"vbscript": () => import("highlight.js/lib/languages/vbscript"), vbscript: () => import("highlight.js/lib/languages/vbscript"),
"vbscript-html": () => import("highlight.js/lib/languages/vbscript-html"), "vbscript-html": () => import("highlight.js/lib/languages/vbscript-html"),
"verilog": () => import("highlight.js/lib/languages/verilog"), verilog: () => import("highlight.js/lib/languages/verilog"),
"vhdl": () => import("highlight.js/lib/languages/vhdl"), vhdl: () => import("highlight.js/lib/languages/vhdl"),
"vim": () => import("highlight.js/lib/languages/vim"), vim: () => import("highlight.js/lib/languages/vim"),
"wasm": () => import("highlight.js/lib/languages/wasm"), wasm: () => import("highlight.js/lib/languages/wasm"),
"wren": () => import("highlight.js/lib/languages/wren"), wren: () => import("highlight.js/lib/languages/wren"),
"x86asm": () => import("highlight.js/lib/languages/x86asm"), x86asm: () => import("highlight.js/lib/languages/x86asm"),
"xl": () => import("highlight.js/lib/languages/xl"), xl: () => import("highlight.js/lib/languages/xl"),
"xquery": () => import("highlight.js/lib/languages/xquery"), xquery: () => import("highlight.js/lib/languages/xquery"),
"zephir": () => import("highlight.js/lib/languages/zephir"), zephir: () => import("highlight.js/lib/languages/zephir"),
} };
// hljs.listLanguages().map(l => ([l, hljs.getLanguage(l).aliases])).filter(([, b]) => b).map(([n, a]) => a.map(al => ([al, n]))).flat().map(([a, n]) => `"${a}": languages["${n}"]`).join(",\n") // hljs.listLanguages().map(l => ([l, hljs.getLanguage(l).aliases])).filter(([, b]) => b).map(([n, a]) => a.map(al => ([al, n]))).flat().map(([a, n]) => `"${a}": languages["${n}"]`).join(",\n")
const aliases: Record<string, typeof languages[keyof typeof languages]> = { const aliases: Record<string, (typeof languages)[keyof typeof languages]> = {
"as": languages["actionscript"], as: languages["actionscript"],
"asc": languages["angelscript"], asc: languages["angelscript"],
"apacheconf": languages["apache"], apacheconf: languages["apache"],
"osascript": languages["applescript"], osascript: languages["applescript"],
"ino": languages["arduino"], ino: languages["arduino"],
"arm": languages["armasm"], arm: languages["armasm"],
"html": languages["xml"], html: languages["xml"],
"xhtml": languages["xml"], xhtml: languages["xml"],
"rss": languages["xml"], rss: languages["xml"],
"atom": languages["xml"], atom: languages["xml"],
"xjb": languages["xml"], xjb: languages["xml"],
"xsd": languages["xml"], xsd: languages["xml"],
"xsl": languages["xml"], xsl: languages["xml"],
"plist": languages["xml"], plist: languages["xml"],
"wsf": languages["xml"], wsf: languages["xml"],
"svg": languages["xml"], svg: languages["xml"],
"adoc": languages["asciidoc"], adoc: languages["asciidoc"],
"ahk": languages["autohotkey"], ahk: languages["autohotkey"],
"x++": languages["axapta"], "x++": languages["axapta"],
"sh": languages["bash"], sh: languages["bash"],
"bf": languages["brainfuck"], bf: languages["brainfuck"],
"h": languages["c"], h: languages["c"],
"capnp": languages["capnproto"], capnp: languages["capnproto"],
"icl": languages["clean"], icl: languages["clean"],
"dcl": languages["clean"], dcl: languages["clean"],
"clj": languages["clojure"], clj: languages["clojure"],
"edn": languages["clojure"], edn: languages["clojure"],
"cmake.in": languages["cmake"], "cmake.in": languages["cmake"],
"coffee": languages["coffeescript"], coffee: languages["coffeescript"],
"cson": languages["coffeescript"], cson: languages["coffeescript"],
"iced": languages["coffeescript"], iced: languages["coffeescript"],
"cls": languages["cos"], cls: languages["cos"],
"cc": languages["cpp"], cc: languages["cpp"],
"c++": languages["cpp"], "c++": languages["cpp"],
"h++": languages["cpp"], "h++": languages["cpp"],
"hpp": languages["cpp"], hpp: languages["cpp"],
"hh": languages["cpp"], hh: languages["cpp"],
"hxx": languages["cpp"], hxx: languages["cpp"],
"cxx": languages["cpp"], cxx: languages["cpp"],
"crm": languages["crmsh"], crm: languages["crmsh"],
"pcmk": languages["crmsh"], pcmk: languages["crmsh"],
"cr": languages["crystal"], cr: languages["crystal"],
"cs": languages["csharp"], cs: languages["csharp"],
"c#": languages["csharp"], "c#": languages["csharp"],
"md": languages["markdown"], md: languages["markdown"],
"mkdown": languages["markdown"], mkdown: languages["markdown"],
"mkd": languages["markdown"], mkd: languages["markdown"],
"dpr": languages["delphi"], dpr: languages["delphi"],
"dfm": languages["delphi"], dfm: languages["delphi"],
"pas": languages["delphi"], pas: languages["delphi"],
"pascal": languages["delphi"], pascal: languages["delphi"],
"patch": languages["diff"], patch: languages["diff"],
"jinja": languages["django"], jinja: languages["django"],
"bind": languages["dns"], bind: languages["dns"],
"zone": languages["dns"], zone: languages["dns"],
"docker": languages["dockerfile"], docker: languages["dockerfile"],
"bat": languages["dos"], bat: languages["dos"],
"cmd": languages["dos"], cmd: languages["dos"],
"dst": languages["dust"], dst: languages["dust"],
"ex": languages["elixir"], ex: languages["elixir"],
"exs": languages["elixir"], exs: languages["elixir"],
"rb": languages["ruby"], rb: languages["ruby"],
"gemspec": languages["ruby"], gemspec: languages["ruby"],
"podspec": languages["ruby"], podspec: languages["ruby"],
"thor": languages["ruby"], thor: languages["ruby"],
"irb": languages["ruby"], irb: languages["ruby"],
"erl": languages["erlang"], erl: languages["erlang"],
"xlsx": languages["excel"], xlsx: languages["excel"],
"xls": languages["excel"], xls: languages["excel"],
"f90": languages["fortran"], f90: languages["fortran"],
"f95": languages["fortran"], f95: languages["fortran"],
"fs": languages["fsharp"], fs: languages["fsharp"],
"f#": languages["fsharp"], "f#": languages["fsharp"],
"gms": languages["gams"], gms: languages["gams"],
"gss": languages["gauss"], gss: languages["gauss"],
"nc": languages["gcode"], nc: languages["gcode"],
"feature": languages["gherkin"], feature: languages["gherkin"],
"golang": languages["go"], golang: languages["go"],
"gql": languages["graphql"], gql: languages["graphql"],
"hbs": languages["handlebars"], hbs: languages["handlebars"],
"html.hbs": languages["handlebars"], "html.hbs": languages["handlebars"],
"html.handlebars": languages["handlebars"], "html.handlebars": languages["handlebars"],
"htmlbars": languages["handlebars"], htmlbars: languages["handlebars"],
"hs": languages["haskell"], hs: languages["haskell"],
"hx": languages["haxe"], hx: languages["haxe"],
"https": languages["http"], https: languages["http"],
"hylang": languages["hy"], hylang: languages["hy"],
"i7": languages["inform7"], i7: languages["inform7"],
"toml": languages["ini"], toml: languages["ini"],
"jsp": languages["java"], jsp: languages["java"],
"js": languages["javascript"], js: languages["javascript"],
"jsx": languages["javascript"], jsx: languages["javascript"],
"mjs": languages["javascript"], mjs: languages["javascript"],
"cjs": languages["javascript"], cjs: languages["javascript"],
"wildfly-cli": languages["jboss-cli"], "wildfly-cli": languages["jboss-cli"],
"jldoctest": languages["julia-repl"], jldoctest: languages["julia-repl"],
"kt": languages["kotlin"], kt: languages["kotlin"],
"kts": languages["kotlin"], kts: languages["kotlin"],
"ls": languages["lasso"], ls: languages["lasso"],
"lassoscript": languages["lasso"], lassoscript: languages["lasso"],
"tex": languages["latex"], tex: languages["latex"],
"mk": languages["makefile"], mk: languages["makefile"],
"mak": languages["makefile"], mak: languages["makefile"],
"make": languages["makefile"], make: languages["makefile"],
"mma": languages["mathematica"], mma: languages["mathematica"],
"wl": languages["mathematica"], wl: languages["mathematica"],
"m": languages["mercury"], m: languages["mercury"],
"moo": languages["mercury"], moo: languages["mercury"],
"mips": languages["mipsasm"], mips: languages["mipsasm"],
"pl": languages["perl"], pl: languages["perl"],
"pm": languages["perl"], pm: languages["perl"],
"moon": languages["moonscript"], moon: languages["moonscript"],
"nt": languages["nestedtext"], nt: languages["nestedtext"],
"nginxconf": languages["nginx"], nginxconf: languages["nginx"],
"nixos": languages["nix"], nixos: languages["nix"],
"mm": languages["objectivec"], mm: languages["objectivec"],
"objc": languages["objectivec"], objc: languages["objectivec"],
"obj-c": languages["objectivec"], "obj-c": languages["objectivec"],
"obj-c++": languages["objectivec"], "obj-c++": languages["objectivec"],
"objective-c++": languages["objectivec"], "objective-c++": languages["objectivec"],
"ml": languages["ocaml"], ml: languages["ocaml"],
"scad": languages["openscad"], scad: languages["openscad"],
"pf.conf": languages["pf"], "pf.conf": languages["pf"],
"postgres": languages["pgsql"], postgres: languages["pgsql"],
"postgresql": languages["pgsql"], postgresql: languages["pgsql"],
"text": languages["plaintext"], text: languages["plaintext"],
"txt": languages["plaintext"], txt: languages["plaintext"],
"pwsh": languages["powershell"], pwsh: languages["powershell"],
"ps": languages["powershell"], ps: languages["powershell"],
"ps1": languages["powershell"], ps1: languages["powershell"],
"pde": languages["processing"], pde: languages["processing"],
"pp": languages["puppet"], pp: languages["puppet"],
"pb": languages["purebasic"], pb: languages["purebasic"],
"pbi": languages["purebasic"], pbi: languages["purebasic"],
"py": languages["python"], py: languages["python"],
"gyp": languages["python"], gyp: languages["python"],
"ipython": languages["python"], ipython: languages["python"],
"pycon": languages["python-repl"], pycon: languages["python-repl"],
"k": languages["q"], k: languages["q"],
"kdb": languages["q"], kdb: languages["q"],
"qt": languages["qml"], qt: languages["qml"],
"re": languages["reasonml"], re: languages["reasonml"],
"graph": languages["roboconf"], graph: languages["roboconf"],
"instances": languages["roboconf"], instances: languages["roboconf"],
"mikrotik": languages["routeros"], mikrotik: languages["routeros"],
"rs": languages["rust"], rs: languages["rust"],
"scm": languages["scheme"], scm: languages["scheme"],
"sci": languages["scilab"], sci: languages["scilab"],
"console": languages["shell"], console: languages["shell"],
"shellsession": languages["shell"], shellsession: languages["shell"],
"st": languages["smalltalk"], st: languages["smalltalk"],
"stanfuncs": languages["stan"], stanfuncs: languages["stan"],
"do": languages["stata"], do: languages["stata"],
"ado": languages["stata"], ado: languages["stata"],
"p21": languages["step21"], p21: languages["step21"],
"step": languages["step21"], step: languages["step21"],
"stp": languages["step21"], stp: languages["step21"],
"styl": languages["stylus"], styl: languages["stylus"],
"yml": languages["yaml"], yml: languages["yaml"],
"tk": languages["tcl"], tk: languages["tcl"],
"craftcms": languages["twig"], craftcms: languages["twig"],
"ts": languages["typescript"], ts: languages["typescript"],
"tsx": languages["typescript"], tsx: languages["typescript"],
"vb": languages["vbnet"], vb: languages["vbnet"],
"vbs": languages["vbscript"], vbs: languages["vbscript"],
"v": languages["verilog"], v: languages["verilog"],
"sv": languages["verilog"], sv: languages["verilog"],
"svh": languages["verilog"], svh: languages["verilog"],
"tao": languages["xl"], tao: languages["xl"],
"xpath": languages["xquery"], xpath: languages["xquery"],
"xq": languages["xquery"], xq: languages["xquery"],
"zep": languages["zephir"] zep: languages["zephir"],
} };
interface ParseMarkdownOptions { interface ParseMarkdownOptions {
parseTimestamps?: boolean; parseTimestamps?: boolean;
@ -384,27 +390,41 @@ const parseMarkdown = async (raw: string, opts?: ParseMarkdownOptions) => {
} }
const markdownUnparsed = toHTML(raw, { embed: opts?.embed }); const markdownUnparsed = toHTML(raw, { embed: opts?.embed });
const markdownUnparsedDom = new DOMParser().parseFromString(markdownUnparsed, "text/html"); const markdownUnparsedDom = new DOMParser().parseFromString(
markdownUnparsed,
"text/html"
);
const codeBlocks = markdownUnparsedDom.querySelectorAll("pre code[data-code]"); const codeBlocks = markdownUnparsedDom.querySelectorAll(
"pre code[data-code]"
);
const promies = Array.from(codeBlocks).map(async (codeBlock) => { const promies = Array.from(codeBlocks).map(async (codeBlock) => {
let code: string = window.atob(codeBlock.getAttribute("data-code")); let code: string = Base64.decode(
codeBlock.getAttribute("data-code") ?? ""
);
codeBlock.classList.add("hljs"); codeBlock.classList.add("hljs");
const specifiedLanguage = codeBlock.getAttribute("data-code-language"); const specifiedLanguage =
const languageImportFn = languages[specifiedLanguage] ?? aliases[specifiedLanguage]; codeBlock.getAttribute("data-code-language") ?? "plaintext";
const languageImportFn =
languages[specifiedLanguage] ?? aliases[specifiedLanguage];
if (languageImportFn) { if (languageImportFn) {
if (!hljs.getLanguage(specifiedLanguage)) { if (!hljs.getLanguage(specifiedLanguage)) {
const languageImport = await languageImportFn(); const languageImport = await languageImportFn();
hljs.registerLanguage(specifiedLanguage, languageImport.default); hljs.registerLanguage(
specifiedLanguage,
languageImport.default
);
} }
codeBlock.classList.add(specifiedLanguage); codeBlock.classList.add(specifiedLanguage);
codeBlock.innerHTML = hljs.highlight(code, {language: specifiedLanguage}).value; codeBlock.innerHTML = hljs.highlight(code, {
language: specifiedLanguage,
}).value;
} else { } else {
codeBlock.textContent = code; codeBlock.textContent = code;
} }
@ -416,6 +436,6 @@ const parseMarkdown = async (raw: string, opts?: ParseMarkdownOptions) => {
await Promise.all(promies); await Promise.all(promies);
return markdownUnparsedDom.body.innerHTML; return markdownUnparsedDom.body.innerHTML;
} };
export default parseMarkdown; export default parseMarkdown;

View file

@ -225,11 +225,6 @@ balanced-match@^1.0.0:
resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.2.tgz#e83e3a7e3f300b34cb9d87f615fa0cbf357690ee" resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.2.tgz#e83e3a7e3f300b34cb9d87f615fa0cbf357690ee"
integrity sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw== integrity sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==
base-64@^1.0.0:
version "1.0.0"
resolved "https://registry.yarnpkg.com/base-64/-/base-64-1.0.0.tgz#09d0f2084e32a3fd08c2475b973788eee6ae8f4a"
integrity sha512-kwDPIFCGx0NZHog36dj+tHiwP4QMzsZ3AgMViUBKI0+V5n4U0ufTCUMhnQ04diaRI8EX/QcPfql7zlhZ7j4zgg==
binary-extensions@^2.0.0: binary-extensions@^2.0.0:
version "2.2.0" version "2.2.0"
resolved "https://registry.yarnpkg.com/binary-extensions/-/binary-extensions-2.2.0.tgz#75f502eeaf9ffde42fc98829645be4ea76bd9e2d" resolved "https://registry.yarnpkg.com/binary-extensions/-/binary-extensions-2.2.0.tgz#75f502eeaf9ffde42fc98829645be4ea76bd9e2d"
@ -346,11 +341,11 @@ detect-indent@^6.0.0:
resolved "https://registry.yarnpkg.com/detect-indent/-/detect-indent-6.1.0.tgz#592485ebbbf6b3b1ab2be175c8393d04ca0d57e6" resolved "https://registry.yarnpkg.com/detect-indent/-/detect-indent-6.1.0.tgz#592485ebbbf6b3b1ab2be175c8393d04ca0d57e6"
integrity sha512-reYkTUJAZb9gUuZ2RvVCNhVHdg62RHnJ7WJl8ftMi4diZ6NWlciOzQN88pUhSELEwflJht4oQDv0F0BMlwaYtA== integrity sha512-reYkTUJAZb9gUuZ2RvVCNhVHdg62RHnJ7WJl8ftMi4diZ6NWlciOzQN88pUhSELEwflJht4oQDv0F0BMlwaYtA==
"discord-markdown@https://github.com/Draconizations/discord-markdown#fe852ba7bf2f56744a632207a314d749aa12dd65": "discord-markdown@github:draconizations/discord-markdown#77ed4acec80ebbc3f3b6d9e18eb0217c646f18c7":
version "2.5.1" version "2.5.1"
resolved "https://github.com/Draconizations/discord-markdown#fe852ba7bf2f56744a632207a314d749aa12dd65" resolved "https://codeload.github.com/draconizations/discord-markdown/tar.gz/77ed4acec80ebbc3f3b6d9e18eb0217c646f18c7"
dependencies: dependencies:
base-64 "^1.0.0" js-base64 "^3.7.7"
simple-markdown "^0.7.3" simple-markdown "^0.7.3"
email-addresses@^3.0.1: email-addresses@^3.0.1:
@ -726,6 +721,11 @@ is-number@^7.0.0:
resolved "https://registry.yarnpkg.com/is-number/-/is-number-7.0.0.tgz#7535345b896734d5f80c4d06c50955527a14f12b" resolved "https://registry.yarnpkg.com/is-number/-/is-number-7.0.0.tgz#7535345b896734d5f80c4d06c50955527a14f12b"
integrity sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng== integrity sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==
js-base64@^3.7.7:
version "3.7.7"
resolved "https://registry.yarnpkg.com/js-base64/-/js-base64-3.7.7.tgz#e51b84bf78fbf5702b9541e2cb7bfcb893b43e79"
integrity sha512-7rCnleh0z2CkXhH67J8K1Ytz0b2Y+yxTPL+/KOJoa20hfnVQ/3/T6W/KflYI4bRHRagNeXeU2bkNGI3v1oS/lw==
jsonfile@^4.0.0: jsonfile@^4.0.0:
version "4.0.0" version "4.0.0"
resolved "https://registry.yarnpkg.com/jsonfile/-/jsonfile-4.0.0.tgz#8771aae0799b64076b76640fca058f9c10e33ecb" resolved "https://registry.yarnpkg.com/jsonfile/-/jsonfile-4.0.0.tgz#8771aae0799b64076b76640fca058f9c10e33ecb"