From afde316a7582b9c775bfb83cbe66a2fdf9aac32e Mon Sep 17 00:00:00 2001 From: Jade Ellis Date: Mon, 15 Jul 2024 21:24:54 +0100 Subject: [PATCH] Add syntax highlighting --- packages/website/mdsvex.config.js | 27 +++ packages/website/package.json | 2 + packages/website/src/lib/styles.css | 48 ++++- .../routes/blog/[...date]/[slug]/+page.svelte | 1 + .../src/routes/blog/[...date]/[slug]/+page.ts | 2 +- pnpm-lock.yaml | 170 ++++++++++++++++++ 6 files changed, 244 insertions(+), 6 deletions(-) diff --git a/packages/website/mdsvex.config.js b/packages/website/mdsvex.config.js index 5f52a6e9..707b56a5 100644 --- a/packages/website/mdsvex.config.js +++ b/packages/website/mdsvex.config.js @@ -16,6 +16,8 @@ import rehypeKatexSvelte from 'rehype-katex-svelte'; import rehypeSlug from 'rehype-slug'; +import { createHighlighter } from "@bitmachina/highlighter"; + import { parse, format } from "node:path"; import slugify from 'slugify'; @@ -63,6 +65,29 @@ function pageResolver(pageName) { const slug = slugify(pageName, { lower: true }); return ["/", "/projects/"].map((p) => p + slug); } +// import { grammars } from 'tm-grammars' +// console.log() +// let http = grammars.find((grammar) => grammar.name == "json") +// console.log(http) +import httpGrammar from 'tm-grammars/grammars/http.json' assert { type: "json" }; +// @ts-ignore +// http.grammar = httpGrammar; +// console.log(httpGrammar) +const httpHighlight = { + id: 'http', + // aliases: ['http', "https"], + grammar: httpGrammar, + categories: ['web', 'utility'], + displayName: 'HTTP', + embedded: ['shellscript', 'json', 'xml', 'graphql'], + lastUpdate: '2023-07-24T09:58:17Z', + license: 'MIT', + licenseUrl: 'https://raw.githubusercontent.com/Huachao/vscode-restclient/master/LICENSE', + name: 'http', + scopeName: 'source.http', + sha: 'a89f8bce1b5e3d5bd955f10916b0c101e20431d3', + source: 'https://github.com/Huachao/vscode-restclient/blob/a89f8bce1b5e3d5bd955f10916b0c101e20431d3/syntaxes/http.tmLanguage.json', +} const hrefTemplate = (/** @type {string} */ permalink) => `#${permalink}` /** @@ -78,6 +103,8 @@ const config = { }, highlight: { + // @ts-ignore + highlighter: await createHighlighter({ theme: "github-dark", langs: [httpHighlight] }), alias: { ts: "typescript", mdx: "markdown", diff --git a/packages/website/package.json b/packages/website/package.json index 57713ea7..e25727d2 100644 --- a/packages/website/package.json +++ b/packages/website/package.json @@ -9,6 +9,7 @@ "check:watch": "svelte-kit sync && svelte-check --tsconfig ./tsconfig.json --watch" }, "devDependencies": { + "@bitmachina/highlighter": "1.0.0-alpha.6", "@fontsource/fira-mono": "^5.0.13", "@json-feed-types/1_1": "^1.0.2", "@rollup/plugin-commonjs": "^25.0.8", @@ -39,6 +40,7 @@ "svelte-seo": "^1.6.1", "sveltekit-html-minifier": "^1.0.3", "svgo": "^3.3.2", + "tm-grammars": "^1.13.11", "tslib": "^2.6.3", "typescript": "^5.4.5", "unified": "^11.0.4", diff --git a/packages/website/src/lib/styles.css b/packages/website/src/lib/styles.css index 5251dcb9..7b988783 100644 --- a/packages/website/src/lib/styles.css +++ b/packages/website/src/lib/styles.css @@ -23,6 +23,9 @@ --border-radius: 8px; + --code-colour-scheme: dark; + --code-background-color: #0d1117; + --code-color: #fff; } @media (prefers-color-scheme: dark) { @@ -128,9 +131,44 @@ svg { } .screen-reader-only:focus { - clip: auto; - width: auto; - height: auto; - white-space: normal; - overflow: visible; + clip: auto; + width: auto; + height: auto; + white-space: normal; + overflow: visible; +} + +/* Code */ +pre { + color-scheme: var(--code-colour-scheme); + color: var(--code-color); + background-color: var(--code-background-color); + overflow-x: auto; + font-weight: 400; + font-size: .875em; + line-height: 1.7142857; + margin-top: 1.7142857em; + margin-bottom: 1.7142857em; + border-radius: .375rem; + display: flex; + flex-direction: column; + padding: calc(var(--spacing)/2); + box-shadow: 0 4px 6px -1px #0000001a, 0 2px 4px -2px #0000001a +} + +code[data-line-numbers]>span[data-line-number]::before { + /* Insert the line number data attribute before the line */ + content: attr(data-line-number); + /* Other styling */ + display: inline-block; + width: 1rem; + margin-right: 1rem; + margin-left: 1rem; + text-align: right; + color: gray; +} + +code>span[data-highlighted] { + background: #3b4252; + width: 100%; } \ No newline at end of file diff --git a/packages/website/src/routes/blog/[...date]/[slug]/+page.svelte b/packages/website/src/routes/blog/[...date]/[slug]/+page.svelte index 338f996c..761557a2 100644 --- a/packages/website/src/routes/blog/[...date]/[slug]/+page.svelte +++ b/packages/website/src/routes/blog/[...date]/[slug]/+page.svelte @@ -36,6 +36,7 @@ {/await} --> + diff --git a/packages/website/src/routes/blog/[...date]/[slug]/+page.ts b/packages/website/src/routes/blog/[...date]/[slug]/+page.ts index 251453fd..011f5941 100644 --- a/packages/website/src/routes/blog/[...date]/[slug]/+page.ts +++ b/packages/website/src/routes/blog/[...date]/[slug]/+page.ts @@ -8,7 +8,7 @@ export async function load({ data, params }) { // throw error(404, 'Post not found') // } // load the markdown file based on slug - console.log(data) + // console.log(data) const component = // await import(data.page.filepath) await import("Notes/Blogs/" + data.page.filepath.name + ".md") diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index c0c83d4f..bfb3df54 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -77,6 +77,9 @@ importers: specifier: ^3.1.1 version: 3.1.1 devDependencies: + '@bitmachina/highlighter': + specifier: 1.0.0-alpha.6 + version: 1.0.0-alpha.6 '@fontsource/fira-mono': specifier: ^5.0.13 version: 5.0.13 @@ -167,6 +170,9 @@ importers: svgo: specifier: ^3.3.2 version: 3.3.2 + tm-grammars: + specifier: ^1.13.11 + version: 1.13.11 tslib: specifier: ^2.6.3 version: 2.6.3 @@ -196,6 +202,9 @@ packages: resolution: {integrity: sha512-UwgBRMjJP+xv857DCngvqXI3Iq6J4v0wXmwc6sapg+zyhbwmQX67LUEFrkK5tbyJ30jGuG3ZvWpBiB9LCy1kWw==} engines: {node: '>=6.9.0'} + '@bitmachina/highlighter@1.0.0-alpha.6': + resolution: {integrity: sha512-f3KLy64cZnO58GuRswbk/oo3rKoRXz0zE3JtpCrIHr/RmT3gjBH8O1CeKxBdfx3fWvdnrGfEkkHSKBHRbf6/dw==} + '@codemirror/autocomplete@6.16.2': resolution: {integrity: sha512-MjfDrHy0gHKlPWsvSsikhO1+BOh+eBHNgfH1OXs1+DAf30IonQldgMM3kxLDTG9ktE7kDLaA1j/l7KMPA4KNfw==} peerDependencies: @@ -1365,6 +1374,9 @@ packages: resolution: {integrity: sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==} engines: {node: '>= 0.4'} + hast-util-from-parse5@7.1.2: + resolution: {integrity: sha512-Nz7FfPBuljzsN3tCQ4kCBKqdNhQE2l0Tn+X1ubgKBPRoiDIu1mL08Cfw4k7q71+Duyaw7DXDN+VTAp4Vh3oCOw==} + hast-util-from-string@2.0.0: resolution: {integrity: sha512-9JlBGWh+RXbT8PDrdwYZloN6poib8xg7Vq+LgN5TTqnaMDO0YqfX4EyZd3Myel6yIXlDsgysiRB1CTjH2K+1Dg==} @@ -1374,6 +1386,9 @@ packages: hast-util-heading-rank@3.0.0: resolution: {integrity: sha512-EJKb8oMUXVHcWZTDepnr+WNbfnXKFNf9duMesmr4S8SXTJBJ9M4Yok08pu9vxdJwdlGRhVumk9mEhkEvKGifwA==} + hast-util-parse-selector@3.1.1: + resolution: {integrity: sha512-jdlwBjEexy1oGz0aJ2f4GKMaVKkA9jwjr4MjAAI22E5fM/TXVZHuS5OpONtdeIkRKqAaryQ2E9xNQxijoThSZA==} + hast-util-select@5.0.5: resolution: {integrity: sha512-QQhWMhgTFRhCaQdgTKzZ5g31GLQ9qRb1hZtDPMqQaOhpLBziWcshUS0uCR5IJ0U1jrK/mxg35fmcq+Dp/Cy2Aw==} @@ -1386,6 +1401,9 @@ packages: hast-util-whitespace@2.0.1: resolution: {integrity: sha512-nAxA0v8+vXSBDt3AnRUNjyRIQ0rD+ntpbAp4LnPkumc5M9yUbSMa4XDU9Q6etY4f1Wp4bNgvc1yjiZtsTTrSng==} + hastscript@7.2.0: + resolution: {integrity: sha512-TtYPq24IldU8iKoJQqvZOuhi5CyCQRAbvDOX0x1eW6rsHSxa/1i2CCiptNTotGHJ3VoHRGmqiv6/D3q113ikkw==} + html-minifier-terser@7.2.0: resolution: {integrity: sha512-tXgn3QfqPIpGl9o+K5tpcj3/MN4SfLtsx2GWwBC3SSd0tXQGyF3gsSqad8loJgKZGM3ZxbYDd5yhiBIdWpmvLA==} engines: {node: ^14.13.1 || >=16.0.0} @@ -1422,6 +1440,10 @@ packages: resolution: {integrity: sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==} engines: {node: '>=8'} + is-buffer@2.0.5: + resolution: {integrity: sha512-i2R6zNFDwgEHJyQUtJEk0XFi1i0dPFn/oqjK3/vPCcDeJvW5NQ83V8QbicfF1SupOaB0h8ntgBC2YiE7dfyctQ==} + engines: {node: '>=4'} + is-builtin-module@3.2.1: resolution: {integrity: sha512-BSLE3HnV2syZ0FK0iMA/yUGplUeMmNz4AW5fnTunbCIqZi4vG3WjJT9FHMy5D69xmAYBHXQhJdALdpwVxV501A==} engines: {node: '>=6'} @@ -1480,6 +1502,9 @@ packages: engines: {node: '>=6'} hasBin: true + jsonc-parser@3.3.1: + resolution: {integrity: sha512-HUgH65KyejrUFPvHFPbqOY0rsFip3Bo5wb4ngvdi1EpCYWUQDC5V+Y7mZws+DLkr4M//zQJoanu1SP+87Dv1oQ==} + jsonwebtoken@9.0.2: resolution: {integrity: sha512-PRp66vJ865SSqOlgqS8hujT5U4AOgMfhrwYIuIhfKaoSCZcirrmASQr8CX7cUg+RMih+hgznrjp99o+W4pJLHQ==} engines: {node: '>=12', npm: '>=6'} @@ -1776,6 +1801,12 @@ packages: parse-entities@2.0.0: resolution: {integrity: sha512-kkywGpCcRYhqQIchaWqZ875wzpS/bMKhz5HnN3p7wveJTkTtyAB/AlnS0f8DFSqYW1T82t6yEAkEcB+A1I3MbQ==} + parse-numeric-range@1.3.0: + resolution: {integrity: sha512-twN+njEipszzlMJd4ONUYgSfZPDxgHhT9Ahed5uTigpQn90FggW4SA/AIPq/6a149fTbE9qBEcSwE3FAEp6wQQ==} + + parse5@6.0.1: + resolution: {integrity: sha512-Ofn/CTFzRGTTxwpNEs9PP93gXShHcTq255nzRYSKe8AkVpZY7e1fpmTfOyoIvjP5HG7Z2ZM7VS9PPhQGW2pOpw==} + pascal-case@3.1.2: resolution: {integrity: sha512-uWlGT3YSnK9x3BQJaOdcZwrnV6hPpd8jFH1/ucpiLRPh/2zCVJKS19E4GvYHvaCcACn3foXZ0cLB9Wrx1KGe5g==} @@ -1818,6 +1849,9 @@ packages: resolution: {integrity: sha512-Kx/1w86q/epKcmte75LNrEoT+lX8pBpavuAbvJWRXar7Hz8jrtF+e3vY751p0R8H9HdArwaCTNDDzHg/ScJK1Q==} engines: {node: '>=6'} + property-information@6.2.0: + resolution: {integrity: sha512-kma4U7AFCTwpqq5twzC1YVIDXSqg6qQK6JN0smOw8fgRy1OkMi0CYSzFmsy6dnqSenamAtj0CyXMUJ1Mf6oROg==} + property-information@6.5.0: resolution: {integrity: sha512-PgTgs/BlvHxOu8QuEN7wi5A0OmXaBcHpmCSTehcs6Uuu9IkDIEo13Hy7n898RHfrQ49vKCoGeWZSaAK01nwVig==} @@ -1838,6 +1872,9 @@ packages: rehype-katex-svelte@1.2.0: resolution: {integrity: sha512-3mAa0J7LgMfaoU3oj9XLBIn5H/MyvWcOQcItoWhww/sABkcLpY73WsAs5mwH0c6cwYDYwJKaVVl2vNuL3wokeA==} + rehype-parse@8.0.4: + resolution: {integrity: sha512-MJJKONunHjoTh4kc3dsM1v3C9kGrrxvA3U8PxZlP2SjH8RNUSrb+lF7Y0KVaUDnGH2QZ5vAn7ulkiajM9ifuqg==} + rehype-slug@6.0.0: resolution: {integrity: sha512-lWyvf/jwu+oS5+hL5eClVd3hNdmwM1kAC0BUvEGD19pajQMIzcNUd/k9GsfQ+FfECvX+JE+e9/btsKH0EjJT6A==} @@ -1944,6 +1981,9 @@ packages: resolution: {integrity: sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==} engines: {node: '>=8'} + shiki@0.11.1: + resolution: {integrity: sha512-EugY9VASFuDqOexOgXR18ZV+TbFrQHeCpEYaXamO+SZlsnT/2LxuLBX25GGtIrwaEVFXUAbUQ601SWE2rMwWHA==} + signal-exit@4.1.0: resolution: {integrity: sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==} engines: {node: '>=14'} @@ -2103,6 +2143,9 @@ packages: tiny-glob@0.2.9: resolution: {integrity: sha512-g/55ssRPUjShh+xkfx9UPDXqhckHEsHr4Vd9zX55oSdGZc/MD0m3sferOkwWtp98bv+kcVfEHtRJgBVJzelrzg==} + tm-grammars@1.13.11: + resolution: {integrity: sha512-qZysArHMEbWF27pI914n8RpkFj8t1zNwXoEzJfzE6eknxOrPeRea+z6N9rZvhqIO0vrS7qBjoE/u8zibO+gYBA==} + to-regex-range@5.0.1: resolution: {integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==} engines: {node: '>=8.0'} @@ -2145,6 +2188,9 @@ packages: undici-types@5.26.5: resolution: {integrity: sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==} + unified@10.1.2: + resolution: {integrity: sha512-pUSWAi/RAnVy1Pif2kAoeWNBa3JVrx0MId2LASj8G+7AiHWoKZNTomq6LG326T68U7/e263X6fTdcXIy7XnF7Q==} + unified@11.0.4: resolution: {integrity: sha512-apMPnyLjAX+ty4OrNap7yumyVAMlKx5IWU2wlzzUdYJO9A8f1p9m/gywF/GM2ZDFcjQPrx59Mc90KwmxsoklxQ==} @@ -2160,6 +2206,9 @@ packages: unist-util-stringify-position@2.0.3: resolution: {integrity: sha512-3faScn5I+hy9VleOq/qNbAd6pAx7iH5jYBMS9I1HgQVijz/4mv5Bvw5iw1sC/90CODiKo81G/ps8AJrISn687g==} + unist-util-stringify-position@3.0.3: + resolution: {integrity: sha512-k5GzIBZ/QatR8N5X2y+drfpWG8IDBzdnVj6OInRNWm1oXrzydiaAT2OQiA8DPRRZyAKb9b6I2a6PxYklZD0gKg==} + unist-util-stringify-position@4.0.0: resolution: {integrity: sha512-0ASV06AAoKCDkS2+xw5RXJywruurpbC4JZSm7nr7MOt1ojAzvyyaO+UxZf18j8FCF6kmzCZKcAgN/yu2gm2XgQ==} @@ -2175,6 +2224,9 @@ packages: unist-util-visit@2.0.3: resolution: {integrity: sha512-iJ4/RczbJMkD0712mGktuGpm/U4By4FfDonL7N/9tATGIF4imikjOuagyMY53tnZq3NP6BcmlrHhEKAfGWjh7Q==} + unist-util-visit@4.1.1: + resolution: {integrity: sha512-n9KN3WV9k4h1DxYR1LoajgN93wpEi/7ZplVe02IoB4gH5ctI1AaF2670BLHQYbwj+pY83gFtyeySFiyMHJklrg==} + unist-util-visit@4.1.2: resolution: {integrity: sha512-MSd8OUGISqHdVvfY9TPhyK2VdUrPgxkUtWSuMHF6XAAFuL4LokseigBnZtPnJMu+FbynTkFNnFlyjxpVKujMRg==} @@ -2187,12 +2239,21 @@ packages: universal-user-agent@6.0.1: resolution: {integrity: sha512-yCzhz6FN2wU1NiiQRogkTQszlQSlpWaw8SvVegAc+bDxbzHgh1vX8uIe8OYyMH6DwH+sdTJsgMl36+mSMdRJIQ==} + vfile-location@4.1.0: + resolution: {integrity: sha512-YF23YMyASIIJXpktBa4vIGLJ5Gs88UB/XePgqPmTa7cDA+JeO3yclbpheQYCHjVHBn/yePzrXuygIL+xbvRYHw==} + vfile-message@2.0.4: resolution: {integrity: sha512-DjssxRGkMvifUOJre00juHoP9DPWuzjxKuMDrhNbk2TdaYYBNMStsNhEOt3idrtI12VQYM/1+iM0KOzXi4pxwQ==} + vfile-message@3.1.4: + resolution: {integrity: sha512-fa0Z6P8HUrQN4BZaX05SIVXic+7kE3b05PWAtPuYP9QLHsLKYR7/AlLW3NtOrpXRLeawpDLMsVkmk5DG0NXgWw==} + vfile-message@4.0.2: resolution: {integrity: sha512-jRDZ1IMLttGj41KcZvlrYAaI3CfqpLpfpf+Mfig13viT6NKvRzWZ+lXz0Y5D60w6uJIBAOGq9mSHf0gktF0duw==} + vfile@5.3.7: + resolution: {integrity: sha512-r7qlzkgErKjobAmyNIkkSpizsFPYiUPuJb5pNW1RB4JcYVZhs4lIbVqk8XPk033CV/1z8ss5pkax8SuhGpcG8g==} + vfile@6.0.1: resolution: {integrity: sha512-1bYqc7pt6NIADBJ98UiG0Bn/CHIVOoZ/IyEkqIruLg0mE1BKzkOXY2D6CSqQIcKqgadppE5lrxgWXJmXd7zZJw==} @@ -2241,9 +2302,18 @@ packages: vite: optional: true + vscode-oniguruma@1.7.0: + resolution: {integrity: sha512-L9WMGRfrjOhgHSdOYgCt/yRMsXzLDJSL7BPrOZt73gU0iWO4mpqzqQzOz5srxqTvMBaR0XZTSrVWo4j55Rc6cA==} + + vscode-textmate@6.0.0: + resolution: {integrity: sha512-gu73tuZfJgu+mvCSy4UZwd2JXykjK9zAZsfmDeut5dx/1a7FeTk0XwJsSuqQn+cuMCGVbIBfl+s53X4T19DnzQ==} + w3c-keyname@2.2.8: resolution: {integrity: sha512-dpojBhNsCNN7T82Tm7k26A6G9ML3NkhDsnw9n/eoxSRlVBB4CEtIQ/KTCLI2Fwf3ataSXRhYFkQi3SlnFwPvPQ==} + web-namespaces@2.0.1: + resolution: {integrity: sha512-bKr1DkiNa2krS7qxNtdrtHAmzuYGFQLiQ13TsorsdT6ULTkPLKuu5+GsFpDlg6JFjUTwX2DyhMPG2be8uPrqsQ==} + which@2.0.2: resolution: {integrity: sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==} engines: {node: '>= 8'} @@ -2285,6 +2355,16 @@ snapshots: dependencies: regenerator-runtime: 0.14.1 + '@bitmachina/highlighter@1.0.0-alpha.6': + dependencies: + hast-util-to-string: 2.0.0 + parse-numeric-range: 1.3.0 + property-information: 6.2.0 + rehype-parse: 8.0.4 + shiki: 0.11.1 + unified: 10.1.2 + unist-util-visit: 4.1.1 + '@codemirror/autocomplete@6.16.2(@codemirror/language@6.10.2)(@codemirror/state@6.4.1)(@codemirror/view@6.28.1)(@lezer/common@1.2.1)': dependencies: '@codemirror/language': 6.10.2 @@ -3404,6 +3484,16 @@ snapshots: dependencies: function-bind: 1.1.2 + hast-util-from-parse5@7.1.2: + dependencies: + '@types/hast': 2.3.10 + '@types/unist': 2.0.10 + hastscript: 7.2.0 + property-information: 6.5.0 + vfile: 5.3.7 + vfile-location: 4.1.0 + web-namespaces: 2.0.1 + hast-util-from-string@2.0.0: dependencies: '@types/hast': 2.3.10 @@ -3414,6 +3504,10 @@ snapshots: dependencies: '@types/hast': 3.0.4 + hast-util-parse-selector@3.1.1: + dependencies: + '@types/hast': 2.3.10 + hast-util-select@5.0.5: dependencies: '@types/hast': 2.3.10 @@ -3442,6 +3536,14 @@ snapshots: hast-util-whitespace@2.0.1: {} + hastscript@7.2.0: + dependencies: + '@types/hast': 2.3.10 + comma-separated-tokens: 2.0.3 + hast-util-parse-selector: 3.1.1 + property-information: 6.5.0 + space-separated-tokens: 2.0.2 + html-minifier-terser@7.2.0: dependencies: camel-case: 4.1.2 @@ -3481,6 +3583,8 @@ snapshots: dependencies: binary-extensions: 2.3.0 + is-buffer@2.0.5: {} + is-builtin-module@3.2.1: dependencies: builtin-modules: 3.3.0 @@ -3530,6 +3634,8 @@ snapshots: json5@2.2.3: {} + jsonc-parser@3.3.1: {} + jsonwebtoken@9.0.2: dependencies: jws: 3.2.2 @@ -4025,6 +4131,10 @@ snapshots: is-decimal: 1.0.4 is-hexadecimal: 1.0.4 + parse-numeric-range@1.3.0: {} + + parse5@6.0.1: {} + pascal-case@3.1.2: dependencies: no-case: 3.0.4 @@ -4063,6 +4173,8 @@ snapshots: prismjs@1.29.0: {} + property-information@6.2.0: {} + property-information@6.5.0: {} queue-microtask@1.2.3: {} @@ -4082,6 +4194,13 @@ snapshots: hast-util-to-string: 2.0.0 katex: 0.16.10 + rehype-parse@8.0.4: + dependencies: + '@types/hast': 2.3.10 + hast-util-from-parse5: 7.1.2 + parse5: 6.0.1 + unified: 10.1.2 + rehype-slug@6.0.0: dependencies: '@types/hast': 3.0.4 @@ -4252,6 +4371,12 @@ snapshots: shebang-regex@3.0.0: {} + shiki@0.11.1: + dependencies: + jsonc-parser: 3.3.1 + vscode-oniguruma: 1.7.0 + vscode-textmate: 6.0.0 + signal-exit@4.1.0: {} simple-swizzle@0.2.2: @@ -4426,6 +4551,8 @@ snapshots: globalyzer: 0.1.0 globrex: 0.1.2 + tm-grammars@1.13.11: {} + to-regex-range@5.0.1: dependencies: is-number: 7.0.0 @@ -4460,6 +4587,16 @@ snapshots: undici-types@5.26.5: {} + unified@10.1.2: + dependencies: + '@types/unist': 2.0.10 + bail: 2.0.2 + extend: 3.0.2 + is-buffer: 2.0.5 + is-plain-obj: 4.1.0 + trough: 2.2.0 + vfile: 5.3.7 + unified@11.0.4: dependencies: '@types/unist': 3.0.2 @@ -4484,6 +4621,10 @@ snapshots: dependencies: '@types/unist': 2.0.10 + unist-util-stringify-position@3.0.3: + dependencies: + '@types/unist': 2.0.10 + unist-util-stringify-position@4.0.0: dependencies: '@types/unist': 3.0.2 @@ -4509,6 +4650,12 @@ snapshots: unist-util-is: 4.1.0 unist-util-visit-parents: 3.1.1 + unist-util-visit@4.1.1: + dependencies: + '@types/unist': 2.0.10 + unist-util-is: 5.2.1 + unist-util-visit-parents: 5.1.3 + unist-util-visit@4.1.2: dependencies: '@types/unist': 2.0.10 @@ -4528,16 +4675,33 @@ snapshots: universal-user-agent@6.0.1: {} + vfile-location@4.1.0: + dependencies: + '@types/unist': 2.0.10 + vfile: 5.3.7 + vfile-message@2.0.4: dependencies: '@types/unist': 2.0.10 unist-util-stringify-position: 2.0.3 + vfile-message@3.1.4: + dependencies: + '@types/unist': 2.0.10 + unist-util-stringify-position: 3.0.3 + vfile-message@4.0.2: dependencies: '@types/unist': 3.0.2 unist-util-stringify-position: 4.0.0 + vfile@5.3.7: + dependencies: + '@types/unist': 2.0.10 + is-buffer: 2.0.5 + unist-util-stringify-position: 3.0.3 + vfile-message: 3.1.4 + vfile@6.0.1: dependencies: '@types/unist': 3.0.2 @@ -4571,8 +4735,14 @@ snapshots: optionalDependencies: vite: 5.3.1(@types/node@20.14.2)(terser@5.31.1) + vscode-oniguruma@1.7.0: {} + + vscode-textmate@6.0.0: {} + w3c-keyname@2.2.8: {} + web-namespaces@2.0.1: {} + which@2.0.2: dependencies: isexe: 2.0.0