diff --git a/apps/svelte.dev/package.json b/apps/svelte.dev/package.json index 9b4add16ed..66a4aee4a0 100644 --- a/apps/svelte.dev/package.json +++ b/apps/svelte.dev/package.json @@ -82,8 +82,6 @@ "prettier-plugin-svelte": "^3.2.4", "satori": "^0.10.13", "satori-html": "^0.3.2", - "shiki": "^1.6.4", - "shiki-twoslash": "^3.1.2", "svelte": "5.0.0-next.260", "svelte-check": "^4.0.0", "svelte-preprocess": "^5.1.4", diff --git a/packages/site-kit/package.json b/packages/site-kit/package.json index 7b4660668b..50d147daee 100644 --- a/packages/site-kit/package.json +++ b/packages/site-kit/package.json @@ -26,8 +26,10 @@ "@fontsource/eb-garamond": "^5.1.0", "@fontsource/fira-mono": "^5.1.0", "@fontsource/fira-sans": "^5.1.0", + "@shikijs/twoslash": "^1.22.0", "esm-env": "^1.0.0", "json5": "^2.2.3", + "shiki": "^1.22.0", "svelte-persisted-store": "^0.9.2" }, "devDependencies": { @@ -38,7 +40,6 @@ "marked": "^14.1.2", "prettier": "^3.3.2", "prettier-plugin-svelte": "^3.2.4", - "shiki-twoslash": "^3.1.2", "svelte": "5.0.0-next.260", "svelte-check": "^4.0.0", "typescript": "^5.5.4", diff --git a/packages/site-kit/src/lib/docs/hover.ts b/packages/site-kit/src/lib/docs/hover.ts index e2ab89ffaf..458c6c8371 100644 --- a/packages/site-kit/src/lib/docs/hover.ts +++ b/packages/site-kit/src/lib/docs/hover.ts @@ -9,7 +9,7 @@ export function setupDocsHovers() { function over(event: MouseEvent) { const target = event.target as HTMLElement; - if (target.tagName === 'DATA-LSP') { + if (target.classList?.contains('twoslash-hover')) { clearTimeout(timeout); if (tooltip) { @@ -18,7 +18,7 @@ export function setupDocsHovers() { } const rect = target?.getBoundingClientRect(); - const html = target?.getAttribute('lsp'); + const html = target?.innerHTML; const x = (rect.left + rect.right) / 2 + window.scrollX; const y = rect.top + window.scrollY; @@ -46,7 +46,7 @@ export function setupDocsHovers() { function out(event: MouseEvent) { const target = event.target as HTMLElement; - if (target.tagName === 'DATA-LSP') { + if (target.classList?.contains('twoslash-hover')) { timeout = setTimeout(() => { unmount(tooltip); tooltip = null; diff --git a/packages/site-kit/src/lib/markdown/renderer.ts b/packages/site-kit/src/lib/markdown/renderer.ts index 6f3865edde..208cc8709d 100644 --- a/packages/site-kit/src/lib/markdown/renderer.ts +++ b/packages/site-kit/src/lib/markdown/renderer.ts @@ -4,6 +4,8 @@ import fs from 'node:fs'; import path from 'node:path'; import ts from 'typescript'; import * as prettier from 'prettier'; +import { codeToHtml, createCssVariablesTheme } from 'shiki'; +import { transformerTwoslash } from '@shikijs/twoslash'; import { SHIKI_LANGUAGE_MAP, escape, normalizeSlugify, smart_quotes, transform } from './utils'; import type { Declaration, TypeElement, Modules } from './index'; @@ -31,7 +33,12 @@ interface RenderContentOptions { const METADATA_REGEX = /(?:|$)\n/gm; -let twoslash_module: typeof import('shiki-twoslash'); +const theme = createCssVariablesTheme({ + name: 'css-variables', + variablePrefix: '--shiki-', + variableDefaults: {}, + fontStyle: true +}); /** * A super markdown renderer function. Renders svelte and kit docs specific specific markdown code to html. @@ -126,10 +133,6 @@ export async function render_content_markdown( resolveTypeLinks }: RenderContentOptions = {} ) { - twoslash_module ??= await import('shiki-twoslash'); - - const highlighter = await twoslash_module.createShikiHighlighter({ theme: 'css-variables' }); - const { type_links, type_regex } = create_type_links(modules, resolveTypeLinks); const snippets = await create_snippet_cache(cacheCodeSnippets); @@ -177,9 +180,8 @@ export async function render_content_markdown( html += ''; - html += syntax_highlight({ + html += await syntax_highlight({ filename, - highlighter, language: token.lang, source, twoslashBanner, @@ -187,9 +189,8 @@ export async function render_content_markdown( }); if (converted) { - html += syntax_highlight({ + html += await syntax_highlight({ filename, - highlighter, language: token.lang === 'js' ? 'ts' : token.lang, source: converted, twoslashBanner, @@ -932,18 +933,16 @@ function replace_blank_lines(html: string) { return html.replaceAll(/
( )?<\/div>/g, '
\n
'); } -function syntax_highlight({ +async function syntax_highlight({ source, filename, language, - highlighter, twoslashBanner, options }: { source: string; filename: string; language: string; - highlighter: Awaited>; twoslashBanner?: TwoslashBanner; options: SnippetOptions; }) { @@ -951,13 +950,10 @@ function syntax_highlight({ if (/^(dts|yaml|yml)/.test(language)) { html = replace_blank_lines( - twoslash_module.renderCodeToHTML( - source, - language === 'dts' ? 'ts' : language, - { twoslash: false }, - { themeName: 'css-variables' }, - highlighter - ) + await codeToHtml(source, { + lang: language === 'dts' ? 'ts' : language, + theme + }) ); } else if (/^(js|ts)/.test(language)) { try { @@ -974,24 +970,11 @@ function syntax_highlight({ } } - const twoslash = twoslash_module.runTwoSlash(source, language, { - defaultCompilerOptions: { - allowJs: true, - checkJs: true, - target: ts.ScriptTarget.ES2022, - types: ['svelte', '@sveltejs/kit'] - } + html = await codeToHtml(source, { + lang: 'ts', + theme, + transformers: [transformerTwoslash({})] }); - - html = twoslash_module.renderCodeToHTML( - twoslash.code, - 'ts', - { twoslash: true }, - // @ts-ignore Why shiki-twoslash requires a theme name? - {}, - highlighter, - twoslash - ); } catch (e) { console.error(`Error compiling snippet in ${filename}`); // @ts-ignore @@ -999,16 +982,6 @@ function syntax_highlight({ throw e; } - // we need to be able to inject the LSP attributes as HTML, not text, so we - // turn < into &lt; - html = html.replace( - /]*)>(\w+)<\/data-lsp>/g, - (_, lsp, attrs, name) => { - if (!lsp) return name; - return `${name}`; - } - ); - html = replace_blank_lines(html); } else if (language === 'diff') { const lines = source.split('\n').map((content) => { @@ -1031,8 +1004,9 @@ function syntax_highlight({ }) .join('')}`; } else { - const highlighted = highlighter.codeToHtml(source, { - lang: SHIKI_LANGUAGE_MAP[language as keyof typeof SHIKI_LANGUAGE_MAP] + const highlighted = await codeToHtml(source, { + lang: SHIKI_LANGUAGE_MAP[language as keyof typeof SHIKI_LANGUAGE_MAP], + theme }); html = replace_blank_lines(highlighted); diff --git a/packages/site-kit/src/lib/styles/code.css b/packages/site-kit/src/lib/styles/code.css index b268cd0f71..24294bf3f9 100644 --- a/packages/site-kit/src/lib/styles/code.css +++ b/packages/site-kit/src/lib/styles/code.css @@ -58,15 +58,12 @@ html.dark { display: none; } -pre.twoslash :where(.error, .error-behind) { - display: none; -} - -pre.twoslash data-lsp { - transition: border-color 0.3s; - border-bottom: 1px dotted transparent; -} +pre { + .twoslash-hover { + position: relative; -pre.twoslash:hover data-lsp { - border-color: var(--sk-back-5); + .twoslash-popup-container { + display: none; + } + } } diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 048bacd307..23fea628a1 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -204,12 +204,6 @@ importers: satori-html: specifier: ^0.3.2 version: 0.3.2 - shiki: - specifier: ^1.6.4 - version: 1.6.4 - shiki-twoslash: - specifier: ^3.1.2 - version: 3.1.2(typescript@5.5.4) svelte: specifier: 5.0.0-next.260 version: 5.0.0-next.260 @@ -367,12 +361,18 @@ importers: '@fontsource/fira-sans': specifier: ^5.1.0 version: 5.1.0 + '@shikijs/twoslash': + specifier: ^1.22.0 + version: 1.22.0(typescript@5.5.4) esm-env: specifier: ^1.0.0 version: 1.0.0 json5: specifier: ^2.2.3 version: 2.2.3 + shiki: + specifier: ^1.22.0 + version: 1.22.0 svelte-persisted-store: specifier: ^0.9.2 version: 0.9.4(svelte@5.0.0-next.260) @@ -398,9 +398,6 @@ importers: prettier-plugin-svelte: specifier: ^3.2.4 version: 3.2.4(prettier@3.3.2)(svelte@5.0.0-next.260) - shiki-twoslash: - specifier: ^3.1.2 - version: 3.1.2(typescript@5.5.4) svelte: specifier: 5.0.0-next.260 version: 5.0.0-next.260 @@ -1305,8 +1302,23 @@ packages: cpu: [x64] os: [win32] - '@shikijs/core@1.6.4': - resolution: {integrity: sha512-WTU9rzZae1p2v6LOxMf6LhtmZOkIHYYW160IuahUyJy7YXPPjyWZLR1ag+SgD22ZMxZtz1gfU6Tccc8t0Il/XA==} + '@shikijs/core@1.22.0': + resolution: {integrity: sha512-S8sMe4q71TJAW+qG93s5VaiihujRK6rqDFqBnxqvga/3LvqHEnxqBIOPkt//IdXVtHkQWKu4nOQNk0uBGicU7Q==} + + '@shikijs/engine-javascript@1.22.0': + resolution: {integrity: sha512-AeEtF4Gcck2dwBqCFUKYfsCq0s+eEbCEbkUuFou53NZ0sTGnJnJ/05KHQFZxpii5HMXbocV9URYVowOP2wH5kw==} + + '@shikijs/engine-oniguruma@1.22.0': + resolution: {integrity: sha512-5iBVjhu/DYs1HB0BKsRRFipRrD7rqjxlWTj4F2Pf+nQSPqc3kcyqFFeZXnBMzDf0HdqaFVvhDRAGiYNvyLP+Mw==} + + '@shikijs/twoslash@1.22.0': + resolution: {integrity: sha512-r5F/x4GTh18XzhAREehgT9lCDFZlISBSIsOFZQQaqjiOLG81PIqJN1I1D6XY58UN9OJt+3mffuKq19K4FOJKJA==} + + '@shikijs/types@1.22.0': + resolution: {integrity: sha512-Fw/Nr7FGFhlQqHfxzZY8Cwtwk5E9nKDUgeLjZgt3UuhcM3yJR9xj3ZGNravZZok8XmEZMiYkSMTPlPkULB8nww==} + + '@shikijs/vscode-textmate@9.3.0': + resolution: {integrity: sha512-jn7/7ky30idSkd/O5yDBfAnVt+JJpepofP/POZ1iMOxK59cOfqIgg/Dj0eFsjOTMw+4ycJN0uhZH/Eb0bs/EUA==} '@shuding/opentype.js@1.4.0-beta.0': resolution: {integrity: sha512-3NgmNyH3l/Hv6EvsWJbsvpcpUba6R8IREQ83nH83cyakCw7uM1arZKNfHwv1Wz6jgqrF/j4x5ELvR6PnK9nTcA==} @@ -1431,6 +1443,12 @@ packages: '@types/geojson@7946.0.14': resolution: {integrity: sha512-WCfD5Ht3ZesJUsONdhvm84dmzWOiOzOAqOncN0++w0lBw1o8OuDNJF2McvvCef/yBqb/HYRahp1BYtODFQ8bRg==} + '@types/hast@3.0.4': + resolution: {integrity: sha512-WPs+bbQw5aCj+x6laNGWLH3wviHtoCv/P3+otBhbOhJgG8qtpdAMlTCxLtsTWA7LH1Oh/bFCHsBn0TPS5m30EQ==} + + '@types/mdast@4.0.4': + resolution: {integrity: sha512-kGaNbPh1k7AFzgpud/gMdvIm5xuECykRR+JnWKQno9TAXVa6WIVCGTPvYGekIDL4uwCZQSYbUxNBSb1aUo79oA==} + '@types/node@12.20.55': resolution: {integrity: sha512-J8xLz7q2OFulZ2cyGTLE1TbbZcjpno7FaN6zdJNrgAdrJ+DZzh/uFR6YrTb4C+nXakvud8Q4+rbhoIWlYQbUFQ==} @@ -1449,17 +1467,19 @@ packages: '@types/semver@7.5.8': resolution: {integrity: sha512-I8EUhyrgfLrcTkzV3TSsGyl1tSuPrEDzr0yd5m90UgNxQkyDXULk3b6MlQqTCpZpNtWe1K0hzclnZkTcLBe2UQ==} + '@types/unist@3.0.3': + resolution: {integrity: sha512-ko/gIFJRv177XgZsZcBwnqJN5x/Gien8qNOn0D5bQU/zAzVf9Zt3BlcUiLqhV9y4ARk0GbT3tnUiPNgnTXzc/Q==} + '@types/ws@8.5.10': resolution: {integrity: sha512-vmQSUcfalpIq0R9q7uTo2lXs6eGIpt9wtnLdMv9LVpIjCA/+ufZRozlVoVelIYixx1ugCBKDhn89vnsEGOCx9A==} - '@typescript/twoslash@3.1.0': - resolution: {integrity: sha512-kTwMUQ8xtAZaC4wb2XuLkPqFVBj2dNBueMQ89NWEuw87k2nLBbuafeG5cob/QEr6YduxIdTVUjix0MtC7mPlmg==} - - '@typescript/vfs@1.3.4': - resolution: {integrity: sha512-RbyJiaAGQPIcAGWFa3jAXSuAexU4BFiDRF1g3hy7LmRqfNpYlTQWGXjcrOaVZjJ8YkkpuwG0FcsYvtWQpd9igQ==} + '@typescript/vfs@1.6.0': + resolution: {integrity: sha512-hvJUjNVeBMp77qPINuUvYXj4FyWeeMMKZkxEATEU3hqBAQ7qdTBCUFT7Sp0Zu0faeEtFf+ldXxMEDr/bk73ISg==} + peerDependencies: + typescript: '*' - '@typescript/vfs@1.3.5': - resolution: {integrity: sha512-pI8Saqjupf9MfLw7w2+og+fmb0fZS0J6vsKXXrp4/PDXEFvntgzXmChCXC/KefZZS0YGS6AT8e0hGAJcTsdJlg==} + '@ungap/structured-clone@1.2.0': + resolution: {integrity: sha512-zuVdFrMJiuCDQUMCzQaD6KL28MjnqqN8XnAqiEq9PNm/hCPTSGfrXCOfwj1ow4LFb/tNymJPwsNbVePc1xFqrQ==} '@vercel/nft@0.27.2': resolution: {integrity: sha512-7LeioS1yE5hwPpQfD3DdH04tuugKjo5KrJk3yK5kAI3Lh76iSsK/ezoFQfzuT08X3ZASQOd1y9ePjLNI9+TxTQ==} @@ -1669,6 +1689,9 @@ packages: caniuse-lite@1.0.30001632: resolution: {integrity: sha512-udx3o7yHJfUxMLkGohMlVHCvFvWmirKh9JAH/d7WOLPetlH+LTL5cocMZ0t7oZx/mdlOWXti97xLZWc8uURRHg==} + ccount@2.0.1: + resolution: {integrity: sha512-eyrF0jiFpY+3drT6383f1qhkbGsLSifNAjA61IUjZjmLCWjItY6LB9ft9YhoDgwfmclB2zhu51Lc7+95b8NRAg==} + chai@5.1.1: resolution: {integrity: sha512-pT1ZgP8rPNqUgieVaEY+ryQr6Q4HXNg8Ei9UnLUrjN4IA7dvQC5JB+/kxVcPNDHyBcc/26CXPkbNzq3qwrOEKA==} engines: {node: '>=12'} @@ -1681,6 +1704,12 @@ packages: resolution: {integrity: sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==} engines: {node: '>=10'} + character-entities-html4@2.1.0: + resolution: {integrity: sha512-1v7fgQRj6hnSwFpq1Eu0ynr/CDEw0rXo2B61qXrLNdHZmPKgb7fqS1a2JwF0rISo9q77jDI8VMEHoApn8qDoZA==} + + character-entities-legacy@3.0.0: + resolution: {integrity: sha512-RpPp0asT/6ufRm//AJVwpViZbGM/MkjQFxJccQRHmISF/22NBtsHqAWmL+/pmkPWoIUJdWyeVleTl1wydHATVQ==} + chardet@0.7.0: resolution: {integrity: sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA==} @@ -1727,6 +1756,9 @@ packages: resolution: {integrity: sha512-1rXeuUUiGGrykh+CeBdu5Ie7OJwinCgQY0bc7GCRxy5xVHy+moaqkpL/jqQq0MtQOeYcrqEz4abc5f0KtU7W4A==} engines: {node: '>=12.5.0'} + comma-separated-tokens@2.0.3: + resolution: {integrity: sha512-Fu4hJdvzeylCfQPp9SGWidpzrMs7tTrlu6Vb8XGaRGck8QSNZJJp538Wrb60Lax4fPwR64ViY468OIUTbRlGZg==} + commander@2.20.3: resolution: {integrity: sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==} @@ -1827,6 +1859,9 @@ packages: devalue@5.1.1: resolution: {integrity: sha512-maua5KUiapvEwiEAe+XnlZ3Rh0GD+qI1J/nb9vrJc3muPXvcF/8gXYTWF76+5DAqHyDUtOIImEuo0YKE9mshVw==} + devlop@1.1.0: + resolution: {integrity: sha512-RWmIqhcFf1lRYBvNmr7qTNuyCt/7/ns2jbpp1+PalgE/rDQcBT0fioSMUpJ93irlUhC5hrg4cYqe6U+0ImW0rA==} + dir-glob@3.0.1: resolution: {integrity: sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==} engines: {node: '>=8'} @@ -1923,10 +1958,6 @@ packages: picomatch: optional: true - fenceparser@1.1.1: - resolution: {integrity: sha512-VdkTsK7GWLT0VWMK5S5WTAPn61wJ98WPFwJiRHumhg4ESNUO/tnkU8bzzzc62o6Uk1SVhuZFLnakmDA4SGV7wA==} - engines: {node: '>=12'} - fflate@0.7.4: resolution: {integrity: sha512-5u2V/CDW15QM1XbbgS+0DfPxVB+jUKhWEKuuFuHncbk3tEEqzmoXL+2KyOFuKGqOnmdIy0/davWF1CkuwtibCw==} @@ -2030,10 +2061,19 @@ packages: has-unicode@2.0.1: resolution: {integrity: sha512-8Rf9Y83NBReMnx0gFzA8JImQACstCYWUplepDa9xprwwtmgEZUF0h/i5xSA625zB/I37EtrswSST6OXxwaaIJQ==} + hast-util-to-html@9.0.3: + resolution: {integrity: sha512-M17uBDzMJ9RPCqLMO92gNNUDuBSq10a25SDBI08iCCxmorf4Yy6sYHK57n9WAbRAAaU+DuR4W6GN9K4DFZesYg==} + + hast-util-whitespace@3.0.0: + resolution: {integrity: sha512-88JUN06ipLwsnv+dVn+OIYOvAuvBMy/Qoi6O7mQHxdPXpjy+Cd6xRkWwux7DKO+4sYILtLBRIKgsdpS2gQc7qw==} + hex-rgb@4.3.0: resolution: {integrity: sha512-Ox1pJVrDCyGHMG9CFg1tmrRUMRPRsAWYc/PinY0XzJU4K7y7vjNoLKIQ7BR5UJMCxNN8EM1MNDmHWA/B3aZUuw==} engines: {node: '>=6'} + html-void-elements@3.0.0: + resolution: {integrity: sha512-bEqo66MRXsUGxWHV5IP0PUiAWwoEjba4VCzg0LjFJBpchPaTfyfCKTG6bc5F8ucKec3q5y6qOdGyYTSBEvhCrg==} + https-proxy-agent@5.0.1: resolution: {integrity: sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA==} engines: {node: '>= 6'} @@ -2132,9 +2172,6 @@ packages: engines: {node: '>=6'} hasBin: true - jsonc-parser@3.2.1: - resolution: {integrity: sha512-AilxAyFOAcK5wA1+LeaySVBrHsGQvUFCDWXKpZjzaL0PqW+xfBOttn8GNtWKFWqneyMZj41MWF9Kl6iPWLwgOA==} - jsonfile@4.0.0: resolution: {integrity: sha512-m6F1R3z8jjlf2imQHS2Qez5sjKWQzbuuhuJ/FKYFRZvPE3PuHcSMVZzfsLhGVOkfd20obL5SWEBew5ShlquNxg==} @@ -2246,10 +2283,28 @@ packages: engines: {node: '>= 18'} hasBin: true + mdast-util-to-hast@13.2.0: + resolution: {integrity: sha512-QGYKEuUsYT9ykKBCMOEDLsU5JRObWQusAolFMeko/tYPufNkRffBAQjIE+99jbA87xv6FgmjLtwjh9wBWajwAA==} + merge2@1.4.1: resolution: {integrity: sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==} engines: {node: '>= 8'} + micromark-util-character@2.1.0: + resolution: {integrity: sha512-KvOVV+X1yLBfs9dCBSopq/+G1PcgT3lAK07mC4BzXi5E7ahzMAF8oIupDDJ6mievI6F+lAATkbQQlQixJfT3aQ==} + + micromark-util-encode@2.0.0: + resolution: {integrity: sha512-pS+ROfCXAGLWCOc8egcBvT0kf27GoWMqtdarNfDcjb6YLuV5cM3ioG45Ys2qOVqeqSbjaKg72vU+Wby3eddPsA==} + + micromark-util-sanitize-uri@2.0.0: + resolution: {integrity: sha512-WhYv5UEcZrbAtlsnPuChHUAsu/iBPOVaEVsntLBIdpibO0ddy8OzavZz3iL2xVvBZOpolujSliP65Kq0/7KIYw==} + + micromark-util-symbol@2.0.0: + resolution: {integrity: sha512-8JZt9ElZ5kyTnO94muPxIGS8oyElRJaiJO8EzV6ZSyGQ1Is8xwl4Q45qU5UOg+bGH4AikWziz0iN4sFLWs8PGw==} + + micromark-util-types@2.0.0: + resolution: {integrity: sha512-oNh6S2WMHWRZrmutsRmDDfkzKtxF+bc2VxLC9dvtrDIRFln627VsFP6fLMgTryGDljgLPjkrzQSDcPrjPyDJ5w==} + micromatch@4.0.7: resolution: {integrity: sha512-LPP/3KorzCwBxfeUuZmaR6bG2kdeHSbe0P2tY3FLRU4vYrjYz5hI4QZwV0njUx3jeuKe67YukQ1LSPZBKDqO/Q==} engines: {node: '>=8.6'} @@ -2369,6 +2424,9 @@ packages: once@1.4.0: resolution: {integrity: sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==} + oniguruma-to-js@0.4.3: + resolution: {integrity: sha512-X0jWUcAlxORhOqqBREgPMgnshB7ZGYszBNspP+tS9hPD3l13CdaXcHbgImoHUHlrvGx/7AvFEkTRhAGYh+jzjQ==} + os-tmpdir@1.0.2: resolution: {integrity: sha512-D2FR03Vir7FIu45XBY20mTb+/ZSWB00sjU9jdQXt83gDrI4Ztz5Fs7/yy74g2N5SVQY4xY1qDr4rNddwYRVX0g==} engines: {node: '>=0.10.0'} @@ -2516,6 +2574,9 @@ packages: resolution: {integrity: sha512-Kx/1w86q/epKcmte75LNrEoT+lX8pBpavuAbvJWRXar7Hz8jrtF+e3vY751p0R8H9HdArwaCTNDDzHg/ScJK1Q==} engines: {node: '>=6'} + property-information@6.5.0: + resolution: {integrity: sha512-PgTgs/BlvHxOu8QuEN7wi5A0OmXaBcHpmCSTehcs6Uuu9IkDIEo13Hy7n898RHfrQ49vKCoGeWZSaAK01nwVig==} + pseudomap@1.0.2: resolution: {integrity: sha512-b/YwNhb8lk1Zz2+bXXpS/LK9OisiZZ1SNsSLxN1x2OXVEhW2Ckr/7mWE5vrC1ZTiJlD9g19jWszTmJsB+oEpFQ==} @@ -2549,6 +2610,9 @@ packages: regenerator-runtime@0.14.1: resolution: {integrity: sha512-dYnhHh0nJoMfnkZs6GmmhFknAGRrLznOu5nc9ML+EJxGvrx6H7teuevqVqCuPcPK//3eDrrjQhehXVx9cnkGdw==} + regex@4.3.3: + resolution: {integrity: sha512-r/AadFO7owAq1QJVeZ/nq9jNS1vyZt+6t1p/E59B56Rn2GCya+gr1KSyOzNL/er+r+B7phv5jG2xU2Nz1YkmJg==} + resolve-from@5.0.0: resolution: {integrity: sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==} engines: {node: '>=8'} @@ -2632,16 +2696,8 @@ packages: resolution: {integrity: sha512-wpoSFAxys6b2a2wHZ1XpDSgD7N9iVjg29Ph9uV/uaP9Ex/KXlkTZTeddxDPSYQpgvzKLGJke2UU0AzoGCjNIvQ==} engines: {node: '>=0.10.0'} - shiki-twoslash@3.1.2: - resolution: {integrity: sha512-JBcRIIizi+exIA/OUhYkV6jtyeZco0ykCkIRd5sgwIt1Pm4pz+maoaRZpm6SkhPwvif4fCA7xOtJOykhpIV64Q==} - peerDependencies: - typescript: '>3' - - shiki@0.10.1: - resolution: {integrity: sha512-VsY7QJVzU51j5o1+DguUd+6vmCmZ5v/6gYu4vyYAhzjuNQU6P/vmSy4uQaOhvje031qQMiW0d2BwgMH52vqMng==} - - shiki@1.6.4: - resolution: {integrity: sha512-X88chM7w8jnadoZtjPTi5ahCJx9pc9f8GfEkZAEYUTlcUZIEw2D/RY86HI/LkkE7Nj8TQWkiBfaFTJ3VJT6ESg==} + shiki@1.22.0: + resolution: {integrity: sha512-/t5LlhNs+UOKQCYBtl5ZsH/Vclz73GIqT2yQsCBygr8L/ppTdmpL4w3kPLoZJbMKVWtoG77Ue1feOjZfDxvMkw==} siginfo@2.0.0: resolution: {integrity: sha512-ybx0WO1/8bSBLEWXZvEd7gMW3Sn3JFlW3TvX1nREbDLRNQNaeNN8WK0meBwPdAaOI7TtRRRJn/Es1zhrrCHu7g==} @@ -2668,6 +2724,9 @@ packages: resolution: {integrity: sha512-itJW8lvSA0TXEphiRoawsCksnlf8SyvmFzIhltqAHluXd88pkCd+cXJVHTDwdCr0IzwptSm035IHQktUu1QUMg==} engines: {node: '>=0.10.0'} + space-separated-tokens@2.0.2: + resolution: {integrity: sha512-PEGlAwrG8yXGXRjW32fGbg66JAlOAwbObuqVoJpv/mRgoWDQfgH1wDPvtzWyUSNAXBGSk8h755YDbbcEy3SH2Q==} + spawndamnit@2.0.0: resolution: {integrity: sha512-j4JKEcncSjFlqIwU5L/rp2N5SIPsdxaRsIv678+TZxZ0SRDJTm8JrxJMjE/XuiEZNEir3S8l0Fa3Ke339WI4qA==} @@ -2690,6 +2749,9 @@ packages: string_decoder@1.3.0: resolution: {integrity: sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==} + stringify-entities@4.0.4: + resolution: {integrity: sha512-IwfBptatlO+QCJUo19AqvrPNqlVMpW9YEL2LIVY+Rpv2qsjCGxaDLNRgeGsQWJhfItebuJhsGSLjaBbNSQ+ieg==} + strip-ansi@6.0.1: resolution: {integrity: sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==} engines: {node: '>=8'} @@ -2841,6 +2903,9 @@ packages: tr46@0.0.3: resolution: {integrity: sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==} + trim-lines@3.0.1: + resolution: {integrity: sha512-kRj8B+YHZCc9kQYdWfJB2/oUl9rA99qbowYYBtr4ui4mZyAQ2JpvVBd/6U2YloATfqBhBTSMhTpgBHtU0Mf3Rg==} + tslib@2.6.3: resolution: {integrity: sha512-xNvxJEOUiWPGhUuUdQgAJPKOOJfGnIyKySOc09XkKsgdUV/3E2zvwZYdejjmRgPCgcym1juLH3226yA7sEFJKQ==} @@ -2849,6 +2914,14 @@ packages: engines: {node: '>=18.0.0'} hasBin: true + twoslash-protocol@0.2.12: + resolution: {integrity: sha512-5qZLXVYfZ9ABdjqbvPc4RWMr7PrpPaaDSeaYY55vl/w1j6H6kzsWK/urAEIXlzYlyrFmyz1UbwIt+AA0ck+wbg==} + + twoslash@0.2.12: + resolution: {integrity: sha512-tEHPASMqi7kqwfJbkk7hc/4EhlrKCSLcur+TcvYki3vhIfaRMXnXjaYFgXpoZRbT6GdprD4tGuVBEmTpUgLBsw==} + peerDependencies: + typescript: '*' + typescript@5.5.4: resolution: {integrity: sha512-Mtq29sKDAEYP7aljRgtPOpTvOfbwRWlS6dPRzwjdE+C0R4brX/GUyhHSecbHMFLNBLcJIPt9nl9yG5TZ1weH+Q==} engines: {node: '>=14.17'} @@ -2863,6 +2936,21 @@ packages: unicode-trie@2.0.0: resolution: {integrity: sha512-x7bc76x0bm4prf1VLg79uhAzKw8DVboClSN5VxJuQ+LKDOVEW9CdH+VY7SP+vX7xCYQqzzgQpFqz15zeLvAtZQ==} + unist-util-is@6.0.0: + resolution: {integrity: sha512-2qCTHimwdxLfz+YzdGfkqNlH0tLi9xjTnHddPmJwtIG9MGsdbutfTc4P+haPD7l7Cjxf/WZj+we5qfVPvvxfYw==} + + unist-util-position@5.0.0: + resolution: {integrity: sha512-fucsC7HjXvkB5R3kTCO7kUjRdrS0BJt3M/FPxmHMBOm8JQi2BsHAHFsy27E0EolP8rp0NzXsJ+jNPyDWvOJZPA==} + + unist-util-stringify-position@4.0.0: + resolution: {integrity: sha512-0ASV06AAoKCDkS2+xw5RXJywruurpbC4JZSm7nr7MOt1ojAzvyyaO+UxZf18j8FCF6kmzCZKcAgN/yu2gm2XgQ==} + + unist-util-visit-parents@6.0.1: + resolution: {integrity: sha512-L/PqWzfTP9lzzEa6CKs0k2nARxTdZduw3zyh8d2NVBnsyvHjSX4TWse388YrrQKbvI8w20fGjGlhgT96WwKykw==} + + unist-util-visit@5.0.0: + resolution: {integrity: sha512-MR04uvD+07cwl/yhVuVWAtw+3GOR/knlL55Nd/wAdblk27GCVt3lqpTivy/tkJcZoNPzTwS1Y+KMojlLDhoTzg==} + universalify@0.1.2: resolution: {integrity: sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==} engines: {node: '>= 4.0.0'} @@ -2879,6 +2967,12 @@ packages: util-deprecate@1.0.2: resolution: {integrity: sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==} + vfile-message@4.0.2: + resolution: {integrity: sha512-jRDZ1IMLttGj41KcZvlrYAaI3CfqpLpfpf+Mfig13viT6NKvRzWZ+lXz0Y5D60w6uJIBAOGq9mSHf0gktF0duw==} + + vfile@6.0.3: + resolution: {integrity: sha512-KzIbH/9tXat2u30jf+smMwFCsno4wHVdNmzFyL+T/L3UGqqk6JKfVqOFOZEpZSHADH1k40ab6NUIXZq422ov3Q==} + vite-imagetools@7.0.4: resolution: {integrity: sha512-C9C7b2p/8/TCN2g26tE9haoer2i8K4x0v2RXUiHsIjiz221vQuKItCQ+VyiVCsUMPXfJC/tlZsmCZVBz5jh7uA==} engines: {node: '>=18.0.0'} @@ -2952,12 +3046,6 @@ packages: jsdom: optional: true - vscode-oniguruma@1.7.0: - resolution: {integrity: sha512-L9WMGRfrjOhgHSdOYgCt/yRMsXzLDJSL7BPrOZt73gU0iWO4mpqzqQzOz5srxqTvMBaR0XZTSrVWo4j55Rc6cA==} - - vscode-textmate@5.2.0: - resolution: {integrity: sha512-Uw5ooOQxRASHgu6C7GVvUxisKXfSgW4oFlO+aa+PAkgmH89O3CXxEEzNRNtHSqtXFTl0nAC1uYj0GMSH27uwtQ==} - w3c-keyname@2.2.8: resolution: {integrity: sha512-dpojBhNsCNN7T82Tm7k26A6G9ML3NkhDsnw9n/eoxSRlVBB4CEtIQ/KTCLI2Fwf3ataSXRhYFkQi3SlnFwPvPQ==} @@ -3031,6 +3119,9 @@ packages: zod@3.23.8: resolution: {integrity: sha512-XBx9AXhXktjUqnepgTiE5flcKIYWi/rme0Eaj+5Y0lftuGBq+jyRu/md4WnuxqgP1ubdpNCsYEYPxrzVHD8d6g==} + zwitch@2.0.4: + resolution: {integrity: sha512-bXE4cR/kVZhKZX/RjPEflHaKVhUVl85noU3v6b8apfQEc1x4A+zBxjZ4lN8LqGd6WZ3dl98pY4o717VFmoPp+A==} + snapshots: '@ampproject/remapping@2.3.0': @@ -3973,7 +4064,41 @@ snapshots: '@rollup/rollup-win32-x64-msvc@4.21.2': optional: true - '@shikijs/core@1.6.4': {} + '@shikijs/core@1.22.0': + dependencies: + '@shikijs/engine-javascript': 1.22.0 + '@shikijs/engine-oniguruma': 1.22.0 + '@shikijs/types': 1.22.0 + '@shikijs/vscode-textmate': 9.3.0 + '@types/hast': 3.0.4 + hast-util-to-html: 9.0.3 + + '@shikijs/engine-javascript@1.22.0': + dependencies: + '@shikijs/types': 1.22.0 + '@shikijs/vscode-textmate': 9.3.0 + oniguruma-to-js: 0.4.3 + + '@shikijs/engine-oniguruma@1.22.0': + dependencies: + '@shikijs/types': 1.22.0 + '@shikijs/vscode-textmate': 9.3.0 + + '@shikijs/twoslash@1.22.0(typescript@5.5.4)': + dependencies: + '@shikijs/core': 1.22.0 + '@shikijs/types': 1.22.0 + twoslash: 0.2.12(typescript@5.5.4) + transitivePeerDependencies: + - supports-color + - typescript + + '@shikijs/types@1.22.0': + dependencies: + '@shikijs/vscode-textmate': 9.3.0 + '@types/hast': 3.0.4 + + '@shikijs/vscode-textmate@9.3.0': {} '@shuding/opentype.js@1.4.0-beta.0': dependencies: @@ -4140,6 +4265,14 @@ snapshots: '@types/geojson@7946.0.14': {} + '@types/hast@3.0.4': + dependencies: + '@types/unist': 3.0.3 + + '@types/mdast@4.0.4': + dependencies: + '@types/unist': 3.0.3 + '@types/node@12.20.55': {} '@types/node@16.9.1': {} @@ -4154,29 +4287,20 @@ snapshots: '@types/semver@7.5.8': {} + '@types/unist@3.0.3': {} + '@types/ws@8.5.10': dependencies: '@types/node': 20.14.2 - '@typescript/twoslash@3.1.0': - dependencies: - '@typescript/vfs': 1.3.5 - debug: 4.3.6 - lz-string: 1.5.0 - transitivePeerDependencies: - - supports-color - - '@typescript/vfs@1.3.4': + '@typescript/vfs@1.6.0(typescript@5.5.4)': dependencies: debug: 4.3.6 + typescript: 5.5.4 transitivePeerDependencies: - supports-color - '@typescript/vfs@1.3.5': - dependencies: - debug: 4.3.6 - transitivePeerDependencies: - - supports-color + '@ungap/structured-clone@1.2.0': {} '@vercel/nft@0.27.2': dependencies: @@ -4361,6 +4485,8 @@ snapshots: caniuse-lite@1.0.30001632: {} + ccount@2.0.1: {} + chai@5.1.1: dependencies: assertion-error: 2.0.1 @@ -4380,6 +4506,10 @@ snapshots: ansi-styles: 4.3.0 supports-color: 7.2.0 + character-entities-html4@2.1.0: {} + + character-entities-legacy@3.0.0: {} + chardet@0.7.0: {} check-error@2.1.1: {} @@ -4436,6 +4566,8 @@ snapshots: color-convert: 2.0.1 color-string: 1.9.1 + comma-separated-tokens@2.0.3: {} + commander@2.20.3: {} commander@7.2.0: {} @@ -4506,6 +4638,10 @@ snapshots: devalue@5.1.1: {} + devlop@1.1.0: + dependencies: + dequal: 2.0.3 + dir-glob@3.0.1: dependencies: path-type: 4.0.0 @@ -4629,8 +4765,6 @@ snapshots: fdir@6.3.0: {} - fenceparser@1.1.1: {} - fflate@0.7.4: {} file-type@16.5.4: @@ -4750,8 +4884,28 @@ snapshots: has-unicode@2.0.1: {} + hast-util-to-html@9.0.3: + dependencies: + '@types/hast': 3.0.4 + '@types/unist': 3.0.3 + ccount: 2.0.1 + comma-separated-tokens: 2.0.3 + hast-util-whitespace: 3.0.0 + html-void-elements: 3.0.0 + mdast-util-to-hast: 13.2.0 + property-information: 6.5.0 + space-separated-tokens: 2.0.2 + stringify-entities: 4.0.4 + zwitch: 2.0.4 + + hast-util-whitespace@3.0.0: + dependencies: + '@types/hast': 3.0.4 + hex-rgb@4.3.0: {} + html-void-elements@3.0.0: {} + https-proxy-agent@5.0.1: dependencies: agent-base: 6.0.2 @@ -4859,8 +5013,6 @@ snapshots: json5@2.2.3: {} - jsonc-parser@3.2.1: {} - jsonfile@4.0.0: optionalDependencies: graceful-fs: 4.2.11 @@ -4957,8 +5109,37 @@ snapshots: marked@14.1.2: {} + mdast-util-to-hast@13.2.0: + dependencies: + '@types/hast': 3.0.4 + '@types/mdast': 4.0.4 + '@ungap/structured-clone': 1.2.0 + devlop: 1.1.0 + micromark-util-sanitize-uri: 2.0.0 + trim-lines: 3.0.1 + unist-util-position: 5.0.0 + unist-util-visit: 5.0.0 + vfile: 6.0.3 + merge2@1.4.1: {} + micromark-util-character@2.1.0: + dependencies: + micromark-util-symbol: 2.0.0 + micromark-util-types: 2.0.0 + + micromark-util-encode@2.0.0: {} + + micromark-util-sanitize-uri@2.0.0: + dependencies: + micromark-util-character: 2.1.0 + micromark-util-encode: 2.0.0 + micromark-util-symbol: 2.0.0 + + micromark-util-symbol@2.0.0: {} + + micromark-util-types@2.0.0: {} + micromatch@4.0.7: dependencies: braces: 3.0.3 @@ -5052,6 +5233,10 @@ snapshots: dependencies: wrappy: 1.0.2 + oniguruma-to-js@0.4.3: + dependencies: + regex: 4.3.3 + os-tmpdir@1.0.2: {} outdent@0.5.0: {} @@ -5169,6 +5354,8 @@ snapshots: prismjs@1.29.0: {} + property-information@6.5.0: {} + pseudomap@1.0.2: {} publint@0.1.16: @@ -5204,6 +5391,8 @@ snapshots: regenerator-runtime@0.14.1: {} + regex@4.3.3: {} + resolve-from@5.0.0: {} resolve-pkg-maps@1.0.0: {} @@ -5320,25 +5509,14 @@ snapshots: shebang-regex@1.0.0: {} - shiki-twoslash@3.1.2(typescript@5.5.4): + shiki@1.22.0: dependencies: - '@typescript/twoslash': 3.1.0 - '@typescript/vfs': 1.3.4 - fenceparser: 1.1.1 - shiki: 0.10.1 - typescript: 5.5.4 - transitivePeerDependencies: - - supports-color - - shiki@0.10.1: - dependencies: - jsonc-parser: 3.2.1 - vscode-oniguruma: 1.7.0 - vscode-textmate: 5.2.0 - - shiki@1.6.4: - dependencies: - '@shikijs/core': 1.6.4 + '@shikijs/core': 1.22.0 + '@shikijs/engine-javascript': 1.22.0 + '@shikijs/engine-oniguruma': 1.22.0 + '@shikijs/types': 1.22.0 + '@shikijs/vscode-textmate': 9.3.0 + '@types/hast': 3.0.4 siginfo@2.0.0: {} @@ -5365,6 +5543,8 @@ snapshots: source-map-js@1.2.0: {} + space-separated-tokens@2.0.2: {} + spawndamnit@2.0.0: dependencies: cross-spawn: 5.1.0 @@ -5388,6 +5568,11 @@ snapshots: dependencies: safe-buffer: 5.2.1 + stringify-entities@4.0.4: + dependencies: + character-entities-html4: 2.1.0 + character-entities-legacy: 3.0.0 + strip-ansi@6.0.1: dependencies: ansi-regex: 5.0.1 @@ -5519,6 +5704,8 @@ snapshots: tr46@0.0.3: {} + trim-lines@3.0.1: {} + tslib@2.6.3: {} tsx@4.19.0: @@ -5528,6 +5715,16 @@ snapshots: optionalDependencies: fsevents: 2.3.3 + twoslash-protocol@0.2.12: {} + + twoslash@0.2.12(typescript@5.5.4): + dependencies: + '@typescript/vfs': 1.6.0(typescript@5.5.4) + twoslash-protocol: 0.2.12 + typescript: 5.5.4 + transitivePeerDependencies: + - supports-color + typescript@5.5.4: {} ultrahtml@1.5.3: {} @@ -5539,6 +5736,29 @@ snapshots: pako: 0.2.9 tiny-inflate: 1.0.3 + unist-util-is@6.0.0: + dependencies: + '@types/unist': 3.0.3 + + unist-util-position@5.0.0: + dependencies: + '@types/unist': 3.0.3 + + unist-util-stringify-position@4.0.0: + dependencies: + '@types/unist': 3.0.3 + + unist-util-visit-parents@6.0.1: + dependencies: + '@types/unist': 3.0.3 + unist-util-is: 6.0.0 + + unist-util-visit@5.0.0: + dependencies: + '@types/unist': 3.0.3 + unist-util-is: 6.0.0 + unist-util-visit-parents: 6.0.1 + universalify@0.1.2: {} update-browserslist-db@1.0.16(browserslist@4.23.1): @@ -5553,6 +5773,16 @@ snapshots: util-deprecate@1.0.2: {} + vfile-message@4.0.2: + dependencies: + '@types/unist': 3.0.3 + unist-util-stringify-position: 4.0.0 + + vfile@6.0.3: + dependencies: + '@types/unist': 3.0.3 + vfile-message: 4.0.2 + vite-imagetools@7.0.4(rollup@4.21.2): dependencies: '@rollup/pluginutils': 5.1.0(rollup@4.21.2) @@ -5626,10 +5856,6 @@ snapshots: - supports-color - terser - vscode-oniguruma@1.7.0: {} - - vscode-textmate@5.2.0: {} - w3c-keyname@2.2.8: {} webidl-conversions@3.0.1: {} @@ -5683,3 +5909,5 @@ snapshots: zimmerframe@1.1.2: {} zod@3.23.8: {} + + zwitch@2.0.4: {}