From 07e653a1b8f945e01fb2c52ebafcce8114ce5457 Mon Sep 17 00:00:00 2001 From: Jake Fulmine Date: Thu, 11 Apr 2024 14:58:57 +0200 Subject: [PATCH] fix(dashboard): parse non-ASCII characters in code blocks --- dashboard/package.json | 3 +- dashboard/src/api/parse-markdown.ts | 736 ++++++++++++++-------------- dashboard/yarn.lock | 16 +- 3 files changed, 388 insertions(+), 367 deletions(-) diff --git a/dashboard/package.json b/dashboard/package.json index 1160f37f..23742a76 100644 --- a/dashboard/package.json +++ b/dashboard/package.json @@ -11,6 +11,7 @@ "devDependencies": { "@sveltejs/vite-plugin-svelte": "^1.0.0-next.30", "@tsconfig/svelte": "^3.0.0", + "js-base64": "^3.7.7", "svelte": "^3.44.0", "svelte-check": "^2.2.7", "svelte-toggle": "^3.1.0", @@ -26,7 +27,7 @@ "bootstrap": "^5.1.3", "bootstrap-dark-5": "^1.1.3", "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", "highlight.js": "^11.7.0", "import": "^0.0.6", diff --git a/dashboard/src/api/parse-markdown.ts b/dashboard/src/api/parse-markdown.ts index daf9b833..c9259ad8 100644 --- a/dashboard/src/api/parse-markdown.ts +++ b/dashboard/src/api/parse-markdown.ts @@ -1,377 +1,383 @@ -import { toHTML } from 'discord-markdown'; -import hljs from 'highlight.js/lib/core'; -import parseTimestamps from './parse-timestamps'; +import discordMarkdown from "discord-markdown"; +import hljs from "highlight.js/lib/core"; +import parseTimestamps from "./parse-timestamps"; +import { Base64 } from "js-base64"; -const languages: Record Promise> = { +const { toHTML } = discordMarkdown; + +const languages: Record< + string, + () => Promise +> = { "1c": () => import("highlight.js/lib/languages/1c"), - "abnf": () => import("highlight.js/lib/languages/abnf"), - "accesslog": () => import("highlight.js/lib/languages/accesslog"), - "actionscript": () => import("highlight.js/lib/languages/actionscript"), - "ada": () => import("highlight.js/lib/languages/ada"), - "angelscript": () => import("highlight.js/lib/languages/angelscript"), - "apache": () => import("highlight.js/lib/languages/apache"), - "applescript": () => import("highlight.js/lib/languages/applescript"), - "arcade": () => import("highlight.js/lib/languages/arcade"), - "arduino": () => import("highlight.js/lib/languages/arduino"), - "armasm": () => import("highlight.js/lib/languages/armasm"), - "xml": () => import("highlight.js/lib/languages/xml"), - "asciidoc": () => import("highlight.js/lib/languages/asciidoc"), - "aspectj": () => import("highlight.js/lib/languages/aspectj"), - "autohotkey": () => import("highlight.js/lib/languages/autohotkey"), - "autoit": () => import("highlight.js/lib/languages/autoit"), - "avrasm": () => import("highlight.js/lib/languages/avrasm"), - "awk": () => import("highlight.js/lib/languages/awk"), - "axapta": () => import("highlight.js/lib/languages/axapta"), - "bash": () => import("highlight.js/lib/languages/bash"), - "basic": () => import("highlight.js/lib/languages/basic"), - "bnf": () => import("highlight.js/lib/languages/bnf"), - "brainfuck": () => import("highlight.js/lib/languages/brainfuck"), - "c": () => import("highlight.js/lib/languages/c"), - "cal": () => import("highlight.js/lib/languages/cal"), - "capnproto": () => import("highlight.js/lib/languages/capnproto"), - "ceylon": () => import("highlight.js/lib/languages/ceylon"), - "clean": () => import("highlight.js/lib/languages/clean"), - "clojure": () => import("highlight.js/lib/languages/clojure"), + abnf: () => import("highlight.js/lib/languages/abnf"), + accesslog: () => import("highlight.js/lib/languages/accesslog"), + actionscript: () => import("highlight.js/lib/languages/actionscript"), + ada: () => import("highlight.js/lib/languages/ada"), + angelscript: () => import("highlight.js/lib/languages/angelscript"), + apache: () => import("highlight.js/lib/languages/apache"), + applescript: () => import("highlight.js/lib/languages/applescript"), + arcade: () => import("highlight.js/lib/languages/arcade"), + arduino: () => import("highlight.js/lib/languages/arduino"), + armasm: () => import("highlight.js/lib/languages/armasm"), + xml: () => import("highlight.js/lib/languages/xml"), + asciidoc: () => import("highlight.js/lib/languages/asciidoc"), + aspectj: () => import("highlight.js/lib/languages/aspectj"), + autohotkey: () => import("highlight.js/lib/languages/autohotkey"), + autoit: () => import("highlight.js/lib/languages/autoit"), + avrasm: () => import("highlight.js/lib/languages/avrasm"), + awk: () => import("highlight.js/lib/languages/awk"), + axapta: () => import("highlight.js/lib/languages/axapta"), + bash: () => import("highlight.js/lib/languages/bash"), + basic: () => import("highlight.js/lib/languages/basic"), + bnf: () => import("highlight.js/lib/languages/bnf"), + brainfuck: () => import("highlight.js/lib/languages/brainfuck"), + c: () => import("highlight.js/lib/languages/c"), + cal: () => import("highlight.js/lib/languages/cal"), + capnproto: () => import("highlight.js/lib/languages/capnproto"), + ceylon: () => import("highlight.js/lib/languages/ceylon"), + clean: () => import("highlight.js/lib/languages/clean"), + clojure: () => import("highlight.js/lib/languages/clojure"), "clojure-repl": () => import("highlight.js/lib/languages/clojure-repl"), - "cmake": () => import("highlight.js/lib/languages/cmake"), - "coffeescript": () => import("highlight.js/lib/languages/coffeescript"), - "coq": () => import("highlight.js/lib/languages/coq"), - "cos": () => import("highlight.js/lib/languages/cos"), - "cpp": () => import("highlight.js/lib/languages/cpp"), - "crmsh": () => import("highlight.js/lib/languages/crmsh"), - "crystal": () => import("highlight.js/lib/languages/crystal"), - "csharp": () => import("highlight.js/lib/languages/csharp"), - "csp": () => import("highlight.js/lib/languages/csp"), - "css": () => import("highlight.js/lib/languages/css"), - "d": () => import("highlight.js/lib/languages/d"), - "markdown": () => import("highlight.js/lib/languages/markdown"), - "dart": () => import("highlight.js/lib/languages/dart"), - "delphi": () => import("highlight.js/lib/languages/delphi"), - "diff": () => import("highlight.js/lib/languages/diff"), - "django": () => import("highlight.js/lib/languages/django"), - "dns": () => import("highlight.js/lib/languages/dns"), - "dockerfile": () => import("highlight.js/lib/languages/dockerfile"), - "dos": () => import("highlight.js/lib/languages/dos"), - "dsconfig": () => import("highlight.js/lib/languages/dsconfig"), - "dts": () => import("highlight.js/lib/languages/dts"), - "dust": () => import("highlight.js/lib/languages/dust"), - "ebnf": () => import("highlight.js/lib/languages/ebnf"), - "elixir": () => import("highlight.js/lib/languages/elixir"), - "elm": () => import("highlight.js/lib/languages/elm"), - "ruby": () => import("highlight.js/lib/languages/ruby"), - "erb": () => import("highlight.js/lib/languages/erb"), + cmake: () => import("highlight.js/lib/languages/cmake"), + coffeescript: () => import("highlight.js/lib/languages/coffeescript"), + coq: () => import("highlight.js/lib/languages/coq"), + cos: () => import("highlight.js/lib/languages/cos"), + cpp: () => import("highlight.js/lib/languages/cpp"), + crmsh: () => import("highlight.js/lib/languages/crmsh"), + crystal: () => import("highlight.js/lib/languages/crystal"), + csharp: () => import("highlight.js/lib/languages/csharp"), + csp: () => import("highlight.js/lib/languages/csp"), + css: () => import("highlight.js/lib/languages/css"), + d: () => import("highlight.js/lib/languages/d"), + markdown: () => import("highlight.js/lib/languages/markdown"), + dart: () => import("highlight.js/lib/languages/dart"), + delphi: () => import("highlight.js/lib/languages/delphi"), + diff: () => import("highlight.js/lib/languages/diff"), + django: () => import("highlight.js/lib/languages/django"), + dns: () => import("highlight.js/lib/languages/dns"), + dockerfile: () => import("highlight.js/lib/languages/dockerfile"), + dos: () => import("highlight.js/lib/languages/dos"), + dsconfig: () => import("highlight.js/lib/languages/dsconfig"), + dts: () => import("highlight.js/lib/languages/dts"), + dust: () => import("highlight.js/lib/languages/dust"), + ebnf: () => import("highlight.js/lib/languages/ebnf"), + elixir: () => import("highlight.js/lib/languages/elixir"), + elm: () => import("highlight.js/lib/languages/elm"), + ruby: () => import("highlight.js/lib/languages/ruby"), + erb: () => import("highlight.js/lib/languages/erb"), "erlang-repl": () => import("highlight.js/lib/languages/erlang-repl"), - "erlang": () => import("highlight.js/lib/languages/erlang"), - "excel": () => import("highlight.js/lib/languages/excel"), - "fix": () => import("highlight.js/lib/languages/fix"), - "flix": () => import("highlight.js/lib/languages/flix"), - "fortran": () => import("highlight.js/lib/languages/fortran"), - "fsharp": () => import("highlight.js/lib/languages/fsharp"), - "gams": () => import("highlight.js/lib/languages/gams"), - "gauss": () => import("highlight.js/lib/languages/gauss"), - "gcode": () => import("highlight.js/lib/languages/gcode"), - "gherkin": () => import("highlight.js/lib/languages/gherkin"), - "glsl": () => import("highlight.js/lib/languages/glsl"), - "gml": () => import("highlight.js/lib/languages/gml"), - "go": () => import("highlight.js/lib/languages/go"), - "golo": () => import("highlight.js/lib/languages/golo"), - "gradle": () => import("highlight.js/lib/languages/gradle"), - "graphql": () => import("highlight.js/lib/languages/graphql"), - "groovy": () => import("highlight.js/lib/languages/groovy"), - "haml": () => import("highlight.js/lib/languages/haml"), - "handlebars": () => import("highlight.js/lib/languages/handlebars"), - "haskell": () => import("highlight.js/lib/languages/haskell"), - "haxe": () => import("highlight.js/lib/languages/haxe"), - "hsp": () => import("highlight.js/lib/languages/hsp"), - "http": () => import("highlight.js/lib/languages/http"), - "hy": () => import("highlight.js/lib/languages/hy"), - "inform7": () => import("highlight.js/lib/languages/inform7"), - "ini": () => import("highlight.js/lib/languages/ini"), - "irpf90": () => import("highlight.js/lib/languages/irpf90"), - "isbl": () => import("highlight.js/lib/languages/isbl"), - "java": () => import("highlight.js/lib/languages/java"), - "javascript": () => import("highlight.js/lib/languages/javascript"), + erlang: () => import("highlight.js/lib/languages/erlang"), + excel: () => import("highlight.js/lib/languages/excel"), + fix: () => import("highlight.js/lib/languages/fix"), + flix: () => import("highlight.js/lib/languages/flix"), + fortran: () => import("highlight.js/lib/languages/fortran"), + fsharp: () => import("highlight.js/lib/languages/fsharp"), + gams: () => import("highlight.js/lib/languages/gams"), + gauss: () => import("highlight.js/lib/languages/gauss"), + gcode: () => import("highlight.js/lib/languages/gcode"), + gherkin: () => import("highlight.js/lib/languages/gherkin"), + glsl: () => import("highlight.js/lib/languages/glsl"), + gml: () => import("highlight.js/lib/languages/gml"), + go: () => import("highlight.js/lib/languages/go"), + golo: () => import("highlight.js/lib/languages/golo"), + gradle: () => import("highlight.js/lib/languages/gradle"), + graphql: () => import("highlight.js/lib/languages/graphql"), + groovy: () => import("highlight.js/lib/languages/groovy"), + haml: () => import("highlight.js/lib/languages/haml"), + handlebars: () => import("highlight.js/lib/languages/handlebars"), + haskell: () => import("highlight.js/lib/languages/haskell"), + haxe: () => import("highlight.js/lib/languages/haxe"), + hsp: () => import("highlight.js/lib/languages/hsp"), + http: () => import("highlight.js/lib/languages/http"), + hy: () => import("highlight.js/lib/languages/hy"), + inform7: () => import("highlight.js/lib/languages/inform7"), + ini: () => import("highlight.js/lib/languages/ini"), + irpf90: () => import("highlight.js/lib/languages/irpf90"), + isbl: () => import("highlight.js/lib/languages/isbl"), + java: () => import("highlight.js/lib/languages/java"), + javascript: () => import("highlight.js/lib/languages/javascript"), "jboss-cli": () => import("highlight.js/lib/languages/jboss-cli"), - "json": () => import("highlight.js/lib/languages/json"), - "julia": () => import("highlight.js/lib/languages/julia"), + json: () => import("highlight.js/lib/languages/json"), + julia: () => import("highlight.js/lib/languages/julia"), "julia-repl": () => import("highlight.js/lib/languages/julia-repl"), - "kotlin": () => import("highlight.js/lib/languages/kotlin"), - "lasso": () => import("highlight.js/lib/languages/lasso"), - "latex": () => import("highlight.js/lib/languages/latex"), - "ldif": () => import("highlight.js/lib/languages/ldif"), - "leaf": () => import("highlight.js/lib/languages/leaf"), - "less": () => import("highlight.js/lib/languages/less"), - "lisp": () => import("highlight.js/lib/languages/lisp"), - "livecodeserver": () => import("highlight.js/lib/languages/livecodeserver"), - "livescript": () => import("highlight.js/lib/languages/livescript"), - "llvm": () => import("highlight.js/lib/languages/llvm"), - "lsl": () => import("highlight.js/lib/languages/lsl"), - "lua": () => import("highlight.js/lib/languages/lua"), - "makefile": () => import("highlight.js/lib/languages/makefile"), - "mathematica": () => import("highlight.js/lib/languages/mathematica"), - "matlab": () => import("highlight.js/lib/languages/matlab"), - "maxima": () => import("highlight.js/lib/languages/maxima"), - "mel": () => import("highlight.js/lib/languages/mel"), - "mercury": () => import("highlight.js/lib/languages/mercury"), - "mipsasm": () => import("highlight.js/lib/languages/mipsasm"), - "mizar": () => import("highlight.js/lib/languages/mizar"), - "perl": () => import("highlight.js/lib/languages/perl"), - "mojolicious": () => import("highlight.js/lib/languages/mojolicious"), - "monkey": () => import("highlight.js/lib/languages/monkey"), - "moonscript": () => import("highlight.js/lib/languages/moonscript"), - "n1ql": () => import("highlight.js/lib/languages/n1ql"), - "nestedtext": () => import("highlight.js/lib/languages/nestedtext"), - "nginx": () => import("highlight.js/lib/languages/nginx"), - "nim": () => import("highlight.js/lib/languages/nim"), - "nix": () => import("highlight.js/lib/languages/nix"), + kotlin: () => import("highlight.js/lib/languages/kotlin"), + lasso: () => import("highlight.js/lib/languages/lasso"), + latex: () => import("highlight.js/lib/languages/latex"), + ldif: () => import("highlight.js/lib/languages/ldif"), + leaf: () => import("highlight.js/lib/languages/leaf"), + less: () => import("highlight.js/lib/languages/less"), + lisp: () => import("highlight.js/lib/languages/lisp"), + livecodeserver: () => import("highlight.js/lib/languages/livecodeserver"), + livescript: () => import("highlight.js/lib/languages/livescript"), + llvm: () => import("highlight.js/lib/languages/llvm"), + lsl: () => import("highlight.js/lib/languages/lsl"), + lua: () => import("highlight.js/lib/languages/lua"), + makefile: () => import("highlight.js/lib/languages/makefile"), + mathematica: () => import("highlight.js/lib/languages/mathematica"), + matlab: () => import("highlight.js/lib/languages/matlab"), + maxima: () => import("highlight.js/lib/languages/maxima"), + mel: () => import("highlight.js/lib/languages/mel"), + mercury: () => import("highlight.js/lib/languages/mercury"), + mipsasm: () => import("highlight.js/lib/languages/mipsasm"), + mizar: () => import("highlight.js/lib/languages/mizar"), + perl: () => import("highlight.js/lib/languages/perl"), + mojolicious: () => import("highlight.js/lib/languages/mojolicious"), + monkey: () => import("highlight.js/lib/languages/monkey"), + moonscript: () => import("highlight.js/lib/languages/moonscript"), + n1ql: () => import("highlight.js/lib/languages/n1ql"), + nestedtext: () => import("highlight.js/lib/languages/nestedtext"), + nginx: () => import("highlight.js/lib/languages/nginx"), + nim: () => import("highlight.js/lib/languages/nim"), + nix: () => import("highlight.js/lib/languages/nix"), "node-repl": () => import("highlight.js/lib/languages/node-repl"), - "nsis": () => import("highlight.js/lib/languages/nsis"), - "objectivec": () => import("highlight.js/lib/languages/objectivec"), - "ocaml": () => import("highlight.js/lib/languages/ocaml"), - "openscad": () => import("highlight.js/lib/languages/openscad"), - "oxygene": () => import("highlight.js/lib/languages/oxygene"), - "parser3": () => import("highlight.js/lib/languages/parser3"), - "pf": () => import("highlight.js/lib/languages/pf"), - "pgsql": () => import("highlight.js/lib/languages/pgsql"), - "php": () => import("highlight.js/lib/languages/php"), + nsis: () => import("highlight.js/lib/languages/nsis"), + objectivec: () => import("highlight.js/lib/languages/objectivec"), + ocaml: () => import("highlight.js/lib/languages/ocaml"), + openscad: () => import("highlight.js/lib/languages/openscad"), + oxygene: () => import("highlight.js/lib/languages/oxygene"), + parser3: () => import("highlight.js/lib/languages/parser3"), + pf: () => import("highlight.js/lib/languages/pf"), + pgsql: () => import("highlight.js/lib/languages/pgsql"), + php: () => import("highlight.js/lib/languages/php"), "php-template": () => import("highlight.js/lib/languages/php-template"), - "plaintext": () => import("highlight.js/lib/languages/plaintext"), - "pony": () => import("highlight.js/lib/languages/pony"), - "powershell": () => import("highlight.js/lib/languages/powershell"), - "processing": () => import("highlight.js/lib/languages/processing"), - "profile": () => import("highlight.js/lib/languages/profile"), - "prolog": () => import("highlight.js/lib/languages/prolog"), - "properties": () => import("highlight.js/lib/languages/properties"), - "protobuf": () => import("highlight.js/lib/languages/protobuf"), - "puppet": () => import("highlight.js/lib/languages/puppet"), - "purebasic": () => import("highlight.js/lib/languages/purebasic"), - "python": () => import("highlight.js/lib/languages/python"), + plaintext: () => import("highlight.js/lib/languages/plaintext"), + pony: () => import("highlight.js/lib/languages/pony"), + powershell: () => import("highlight.js/lib/languages/powershell"), + processing: () => import("highlight.js/lib/languages/processing"), + profile: () => import("highlight.js/lib/languages/profile"), + prolog: () => import("highlight.js/lib/languages/prolog"), + properties: () => import("highlight.js/lib/languages/properties"), + protobuf: () => import("highlight.js/lib/languages/protobuf"), + puppet: () => import("highlight.js/lib/languages/puppet"), + purebasic: () => import("highlight.js/lib/languages/purebasic"), + python: () => import("highlight.js/lib/languages/python"), "python-repl": () => import("highlight.js/lib/languages/python-repl"), - "q": () => import("highlight.js/lib/languages/q"), - "qml": () => import("highlight.js/lib/languages/qml"), - "r": () => import("highlight.js/lib/languages/r"), - "reasonml": () => import("highlight.js/lib/languages/reasonml"), - "rib": () => import("highlight.js/lib/languages/rib"), - "roboconf": () => import("highlight.js/lib/languages/roboconf"), - "routeros": () => import("highlight.js/lib/languages/routeros"), - "rsl": () => import("highlight.js/lib/languages/rsl"), - "ruleslanguage": () => import("highlight.js/lib/languages/ruleslanguage"), - "rust": () => import("highlight.js/lib/languages/rust"), - "sas": () => import("highlight.js/lib/languages/sas"), - "scala": () => import("highlight.js/lib/languages/scala"), - "scheme": () => import("highlight.js/lib/languages/scheme"), - "scilab": () => import("highlight.js/lib/languages/scilab"), - "scss": () => import("highlight.js/lib/languages/scss"), - "shell": () => import("highlight.js/lib/languages/shell"), - "smali": () => import("highlight.js/lib/languages/smali"), - "smalltalk": () => import("highlight.js/lib/languages/smalltalk"), - "sml": () => import("highlight.js/lib/languages/sml"), - "sqf": () => import("highlight.js/lib/languages/sqf"), - "sql": () => import("highlight.js/lib/languages/sql"), - "stan": () => import("highlight.js/lib/languages/stan"), - "stata": () => import("highlight.js/lib/languages/stata"), - "step21": () => import("highlight.js/lib/languages/step21"), - "stylus": () => import("highlight.js/lib/languages/stylus"), - "subunit": () => import("highlight.js/lib/languages/subunit"), - "swift": () => import("highlight.js/lib/languages/swift"), - "taggerscript": () => import("highlight.js/lib/languages/taggerscript"), - "yaml": () => import("highlight.js/lib/languages/yaml"), - "tap": () => import("highlight.js/lib/languages/tap"), - "tcl": () => import("highlight.js/lib/languages/tcl"), - "thrift": () => import("highlight.js/lib/languages/thrift"), - "tp": () => import("highlight.js/lib/languages/tp"), - "twig": () => import("highlight.js/lib/languages/twig"), - "typescript": () => import("highlight.js/lib/languages/typescript"), - "vala": () => import("highlight.js/lib/languages/vala"), - "vbnet": () => import("highlight.js/lib/languages/vbnet"), - "vbscript": () => import("highlight.js/lib/languages/vbscript"), + q: () => import("highlight.js/lib/languages/q"), + qml: () => import("highlight.js/lib/languages/qml"), + r: () => import("highlight.js/lib/languages/r"), + reasonml: () => import("highlight.js/lib/languages/reasonml"), + rib: () => import("highlight.js/lib/languages/rib"), + roboconf: () => import("highlight.js/lib/languages/roboconf"), + routeros: () => import("highlight.js/lib/languages/routeros"), + rsl: () => import("highlight.js/lib/languages/rsl"), + ruleslanguage: () => import("highlight.js/lib/languages/ruleslanguage"), + rust: () => import("highlight.js/lib/languages/rust"), + sas: () => import("highlight.js/lib/languages/sas"), + scala: () => import("highlight.js/lib/languages/scala"), + scheme: () => import("highlight.js/lib/languages/scheme"), + scilab: () => import("highlight.js/lib/languages/scilab"), + scss: () => import("highlight.js/lib/languages/scss"), + shell: () => import("highlight.js/lib/languages/shell"), + smali: () => import("highlight.js/lib/languages/smali"), + smalltalk: () => import("highlight.js/lib/languages/smalltalk"), + sml: () => import("highlight.js/lib/languages/sml"), + sqf: () => import("highlight.js/lib/languages/sqf"), + sql: () => import("highlight.js/lib/languages/sql"), + stan: () => import("highlight.js/lib/languages/stan"), + stata: () => import("highlight.js/lib/languages/stata"), + step21: () => import("highlight.js/lib/languages/step21"), + stylus: () => import("highlight.js/lib/languages/stylus"), + subunit: () => import("highlight.js/lib/languages/subunit"), + swift: () => import("highlight.js/lib/languages/swift"), + taggerscript: () => import("highlight.js/lib/languages/taggerscript"), + yaml: () => import("highlight.js/lib/languages/yaml"), + tap: () => import("highlight.js/lib/languages/tap"), + tcl: () => import("highlight.js/lib/languages/tcl"), + thrift: () => import("highlight.js/lib/languages/thrift"), + tp: () => import("highlight.js/lib/languages/tp"), + twig: () => import("highlight.js/lib/languages/twig"), + typescript: () => import("highlight.js/lib/languages/typescript"), + vala: () => import("highlight.js/lib/languages/vala"), + vbnet: () => import("highlight.js/lib/languages/vbnet"), + vbscript: () => import("highlight.js/lib/languages/vbscript"), "vbscript-html": () => import("highlight.js/lib/languages/vbscript-html"), - "verilog": () => import("highlight.js/lib/languages/verilog"), - "vhdl": () => import("highlight.js/lib/languages/vhdl"), - "vim": () => import("highlight.js/lib/languages/vim"), - "wasm": () => import("highlight.js/lib/languages/wasm"), - "wren": () => import("highlight.js/lib/languages/wren"), - "x86asm": () => import("highlight.js/lib/languages/x86asm"), - "xl": () => import("highlight.js/lib/languages/xl"), - "xquery": () => import("highlight.js/lib/languages/xquery"), - "zephir": () => import("highlight.js/lib/languages/zephir"), -} + verilog: () => import("highlight.js/lib/languages/verilog"), + vhdl: () => import("highlight.js/lib/languages/vhdl"), + vim: () => import("highlight.js/lib/languages/vim"), + wasm: () => import("highlight.js/lib/languages/wasm"), + wren: () => import("highlight.js/lib/languages/wren"), + x86asm: () => import("highlight.js/lib/languages/x86asm"), + xl: () => import("highlight.js/lib/languages/xl"), + xquery: () => import("highlight.js/lib/languages/xquery"), + 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") -const aliases: Record = { - "as": languages["actionscript"], - "asc": languages["angelscript"], - "apacheconf": languages["apache"], - "osascript": languages["applescript"], - "ino": languages["arduino"], - "arm": languages["armasm"], - "html": languages["xml"], - "xhtml": languages["xml"], - "rss": languages["xml"], - "atom": languages["xml"], - "xjb": languages["xml"], - "xsd": languages["xml"], - "xsl": languages["xml"], - "plist": languages["xml"], - "wsf": languages["xml"], - "svg": languages["xml"], - "adoc": languages["asciidoc"], - "ahk": languages["autohotkey"], +const aliases: Record = { + as: languages["actionscript"], + asc: languages["angelscript"], + apacheconf: languages["apache"], + osascript: languages["applescript"], + ino: languages["arduino"], + arm: languages["armasm"], + html: languages["xml"], + xhtml: languages["xml"], + rss: languages["xml"], + atom: languages["xml"], + xjb: languages["xml"], + xsd: languages["xml"], + xsl: languages["xml"], + plist: languages["xml"], + wsf: languages["xml"], + svg: languages["xml"], + adoc: languages["asciidoc"], + ahk: languages["autohotkey"], "x++": languages["axapta"], - "sh": languages["bash"], - "bf": languages["brainfuck"], - "h": languages["c"], - "capnp": languages["capnproto"], - "icl": languages["clean"], - "dcl": languages["clean"], - "clj": languages["clojure"], - "edn": languages["clojure"], + sh: languages["bash"], + bf: languages["brainfuck"], + h: languages["c"], + capnp: languages["capnproto"], + icl: languages["clean"], + dcl: languages["clean"], + clj: languages["clojure"], + edn: languages["clojure"], "cmake.in": languages["cmake"], - "coffee": languages["coffeescript"], - "cson": languages["coffeescript"], - "iced": languages["coffeescript"], - "cls": languages["cos"], - "cc": languages["cpp"], + coffee: languages["coffeescript"], + cson: languages["coffeescript"], + iced: languages["coffeescript"], + cls: languages["cos"], + cc: languages["cpp"], "c++": languages["cpp"], "h++": languages["cpp"], - "hpp": languages["cpp"], - "hh": languages["cpp"], - "hxx": languages["cpp"], - "cxx": languages["cpp"], - "crm": languages["crmsh"], - "pcmk": languages["crmsh"], - "cr": languages["crystal"], - "cs": languages["csharp"], + hpp: languages["cpp"], + hh: languages["cpp"], + hxx: languages["cpp"], + cxx: languages["cpp"], + crm: languages["crmsh"], + pcmk: languages["crmsh"], + cr: languages["crystal"], + cs: languages["csharp"], "c#": languages["csharp"], - "md": languages["markdown"], - "mkdown": languages["markdown"], - "mkd": languages["markdown"], - "dpr": languages["delphi"], - "dfm": languages["delphi"], - "pas": languages["delphi"], - "pascal": languages["delphi"], - "patch": languages["diff"], - "jinja": languages["django"], - "bind": languages["dns"], - "zone": languages["dns"], - "docker": languages["dockerfile"], - "bat": languages["dos"], - "cmd": languages["dos"], - "dst": languages["dust"], - "ex": languages["elixir"], - "exs": languages["elixir"], - "rb": languages["ruby"], - "gemspec": languages["ruby"], - "podspec": languages["ruby"], - "thor": languages["ruby"], - "irb": languages["ruby"], - "erl": languages["erlang"], - "xlsx": languages["excel"], - "xls": languages["excel"], - "f90": languages["fortran"], - "f95": languages["fortran"], - "fs": languages["fsharp"], + md: languages["markdown"], + mkdown: languages["markdown"], + mkd: languages["markdown"], + dpr: languages["delphi"], + dfm: languages["delphi"], + pas: languages["delphi"], + pascal: languages["delphi"], + patch: languages["diff"], + jinja: languages["django"], + bind: languages["dns"], + zone: languages["dns"], + docker: languages["dockerfile"], + bat: languages["dos"], + cmd: languages["dos"], + dst: languages["dust"], + ex: languages["elixir"], + exs: languages["elixir"], + rb: languages["ruby"], + gemspec: languages["ruby"], + podspec: languages["ruby"], + thor: languages["ruby"], + irb: languages["ruby"], + erl: languages["erlang"], + xlsx: languages["excel"], + xls: languages["excel"], + f90: languages["fortran"], + f95: languages["fortran"], + fs: languages["fsharp"], "f#": languages["fsharp"], - "gms": languages["gams"], - "gss": languages["gauss"], - "nc": languages["gcode"], - "feature": languages["gherkin"], - "golang": languages["go"], - "gql": languages["graphql"], - "hbs": languages["handlebars"], + gms: languages["gams"], + gss: languages["gauss"], + nc: languages["gcode"], + feature: languages["gherkin"], + golang: languages["go"], + gql: languages["graphql"], + hbs: languages["handlebars"], "html.hbs": languages["handlebars"], "html.handlebars": languages["handlebars"], - "htmlbars": languages["handlebars"], - "hs": languages["haskell"], - "hx": languages["haxe"], - "https": languages["http"], - "hylang": languages["hy"], - "i7": languages["inform7"], - "toml": languages["ini"], - "jsp": languages["java"], - "js": languages["javascript"], - "jsx": languages["javascript"], - "mjs": languages["javascript"], - "cjs": languages["javascript"], + htmlbars: languages["handlebars"], + hs: languages["haskell"], + hx: languages["haxe"], + https: languages["http"], + hylang: languages["hy"], + i7: languages["inform7"], + toml: languages["ini"], + jsp: languages["java"], + js: languages["javascript"], + jsx: languages["javascript"], + mjs: languages["javascript"], + cjs: languages["javascript"], "wildfly-cli": languages["jboss-cli"], - "jldoctest": languages["julia-repl"], - "kt": languages["kotlin"], - "kts": languages["kotlin"], - "ls": languages["lasso"], - "lassoscript": languages["lasso"], - "tex": languages["latex"], - "mk": languages["makefile"], - "mak": languages["makefile"], - "make": languages["makefile"], - "mma": languages["mathematica"], - "wl": languages["mathematica"], - "m": languages["mercury"], - "moo": languages["mercury"], - "mips": languages["mipsasm"], - "pl": languages["perl"], - "pm": languages["perl"], - "moon": languages["moonscript"], - "nt": languages["nestedtext"], - "nginxconf": languages["nginx"], - "nixos": languages["nix"], - "mm": languages["objectivec"], - "objc": languages["objectivec"], + jldoctest: languages["julia-repl"], + kt: languages["kotlin"], + kts: languages["kotlin"], + ls: languages["lasso"], + lassoscript: languages["lasso"], + tex: languages["latex"], + mk: languages["makefile"], + mak: languages["makefile"], + make: languages["makefile"], + mma: languages["mathematica"], + wl: languages["mathematica"], + m: languages["mercury"], + moo: languages["mercury"], + mips: languages["mipsasm"], + pl: languages["perl"], + pm: languages["perl"], + moon: languages["moonscript"], + nt: languages["nestedtext"], + nginxconf: languages["nginx"], + nixos: languages["nix"], + mm: languages["objectivec"], + objc: languages["objectivec"], "obj-c": languages["objectivec"], "obj-c++": languages["objectivec"], "objective-c++": languages["objectivec"], - "ml": languages["ocaml"], - "scad": languages["openscad"], + ml: languages["ocaml"], + scad: languages["openscad"], "pf.conf": languages["pf"], - "postgres": languages["pgsql"], - "postgresql": languages["pgsql"], - "text": languages["plaintext"], - "txt": languages["plaintext"], - "pwsh": languages["powershell"], - "ps": languages["powershell"], - "ps1": languages["powershell"], - "pde": languages["processing"], - "pp": languages["puppet"], - "pb": languages["purebasic"], - "pbi": languages["purebasic"], - "py": languages["python"], - "gyp": languages["python"], - "ipython": languages["python"], - "pycon": languages["python-repl"], - "k": languages["q"], - "kdb": languages["q"], - "qt": languages["qml"], - "re": languages["reasonml"], - "graph": languages["roboconf"], - "instances": languages["roboconf"], - "mikrotik": languages["routeros"], - "rs": languages["rust"], - "scm": languages["scheme"], - "sci": languages["scilab"], - "console": languages["shell"], - "shellsession": languages["shell"], - "st": languages["smalltalk"], - "stanfuncs": languages["stan"], - "do": languages["stata"], - "ado": languages["stata"], - "p21": languages["step21"], - "step": languages["step21"], - "stp": languages["step21"], - "styl": languages["stylus"], - "yml": languages["yaml"], - "tk": languages["tcl"], - "craftcms": languages["twig"], - "ts": languages["typescript"], - "tsx": languages["typescript"], - "vb": languages["vbnet"], - "vbs": languages["vbscript"], - "v": languages["verilog"], - "sv": languages["verilog"], - "svh": languages["verilog"], - "tao": languages["xl"], - "xpath": languages["xquery"], - "xq": languages["xquery"], - "zep": languages["zephir"] -} + postgres: languages["pgsql"], + postgresql: languages["pgsql"], + text: languages["plaintext"], + txt: languages["plaintext"], + pwsh: languages["powershell"], + ps: languages["powershell"], + ps1: languages["powershell"], + pde: languages["processing"], + pp: languages["puppet"], + pb: languages["purebasic"], + pbi: languages["purebasic"], + py: languages["python"], + gyp: languages["python"], + ipython: languages["python"], + pycon: languages["python-repl"], + k: languages["q"], + kdb: languages["q"], + qt: languages["qml"], + re: languages["reasonml"], + graph: languages["roboconf"], + instances: languages["roboconf"], + mikrotik: languages["routeros"], + rs: languages["rust"], + scm: languages["scheme"], + sci: languages["scilab"], + console: languages["shell"], + shellsession: languages["shell"], + st: languages["smalltalk"], + stanfuncs: languages["stan"], + do: languages["stata"], + ado: languages["stata"], + p21: languages["step21"], + step: languages["step21"], + stp: languages["step21"], + styl: languages["stylus"], + yml: languages["yaml"], + tk: languages["tcl"], + craftcms: languages["twig"], + ts: languages["typescript"], + tsx: languages["typescript"], + vb: languages["vbnet"], + vbs: languages["vbscript"], + v: languages["verilog"], + sv: languages["verilog"], + svh: languages["verilog"], + tao: languages["xl"], + xpath: languages["xquery"], + xq: languages["xquery"], + zep: languages["zephir"], +}; interface ParseMarkdownOptions { parseTimestamps?: boolean; @@ -384,27 +390,41 @@ const parseMarkdown = async (raw: string, opts?: ParseMarkdownOptions) => { } 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) => { - let code: string = window.atob(codeBlock.getAttribute("data-code")); + let code: string = Base64.decode( + codeBlock.getAttribute("data-code") ?? "" + ); codeBlock.classList.add("hljs"); - const specifiedLanguage = codeBlock.getAttribute("data-code-language"); - const languageImportFn = languages[specifiedLanguage] ?? aliases[specifiedLanguage]; + const specifiedLanguage = + codeBlock.getAttribute("data-code-language") ?? "plaintext"; + const languageImportFn = + languages[specifiedLanguage] ?? aliases[specifiedLanguage]; if (languageImportFn) { if (!hljs.getLanguage(specifiedLanguage)) { const languageImport = await languageImportFn(); - hljs.registerLanguage(specifiedLanguage, languageImport.default); + hljs.registerLanguage( + specifiedLanguage, + languageImport.default + ); } codeBlock.classList.add(specifiedLanguage); - codeBlock.innerHTML = hljs.highlight(code, {language: specifiedLanguage}).value; + codeBlock.innerHTML = hljs.highlight(code, { + language: specifiedLanguage, + }).value; } else { codeBlock.textContent = code; } @@ -416,6 +436,6 @@ const parseMarkdown = async (raw: string, opts?: ParseMarkdownOptions) => { await Promise.all(promies); return markdownUnparsedDom.body.innerHTML; -} +}; -export default parseMarkdown; \ No newline at end of file +export default parseMarkdown; diff --git a/dashboard/yarn.lock b/dashboard/yarn.lock index 167753f6..589c9385 100644 --- a/dashboard/yarn.lock +++ b/dashboard/yarn.lock @@ -225,11 +225,6 @@ balanced-match@^1.0.0: resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.2.tgz#e83e3a7e3f300b34cb9d87f615fa0cbf357690ee" 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: version "2.2.0" 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" integrity sha512-reYkTUJAZb9gUuZ2RvVCNhVHdg62RHnJ7WJl8ftMi4diZ6NWlciOzQN88pUhSELEwflJht4oQDv0F0BMlwaYtA== -"discord-markdown@https://github.com/Draconizations/discord-markdown#fe852ba7bf2f56744a632207a314d749aa12dd65": +"discord-markdown@github:draconizations/discord-markdown#77ed4acec80ebbc3f3b6d9e18eb0217c646f18c7": version "2.5.1" - resolved "https://github.com/Draconizations/discord-markdown#fe852ba7bf2f56744a632207a314d749aa12dd65" + resolved "https://codeload.github.com/draconizations/discord-markdown/tar.gz/77ed4acec80ebbc3f3b6d9e18eb0217c646f18c7" dependencies: - base-64 "^1.0.0" + js-base64 "^3.7.7" simple-markdown "^0.7.3" 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" 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: version "4.0.0" resolved "https://registry.yarnpkg.com/jsonfile/-/jsonfile-4.0.0.tgz#8771aae0799b64076b76640fca058f9c10e33ecb"