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 <
- 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: {}