├── .prettierrc ├── .gitignore ├── vercel.json ├── tsconfig.json ├── README.md ├── package.json ├── api └── server.ts └── pnpm-lock.yaml /.prettierrc: -------------------------------------------------------------------------------- 1 | {} 2 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | node_modules 2 | .vercel 3 | .env 4 | .env.local 5 | -------------------------------------------------------------------------------- /vercel.json: -------------------------------------------------------------------------------- 1 | { 2 | "$schema": "https://openapi.vercel.sh/vercel.json", 3 | "rewrites": [{ "source": "/(.*)", "destination": "/api/server" }] 4 | } 5 | -------------------------------------------------------------------------------- /tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "compilerOptions": { 3 | "target": "esnext", 4 | "module": "nodenext", 5 | "moduleResolution": "nodenext", 6 | "sourceMap": false, 7 | } 8 | } 9 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # Modern Monaco Demo 2 | 3 | A demo of [modern-monaco](https://github.com/esm-dev/modern-monaco) (by [@ije](https://github.com/ije)) with Server-side rendering. 4 | 5 | Demo displays its own server code inside the editor. 6 | 7 | - [View Source](./api/server.ts) 8 | - [Example Deployment](https://modern-monaco-demo.vercel.app/) 9 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "modern-monaco-demo", 3 | "version": "deploy", 4 | "private": true, 5 | "type": "module", 6 | "scripts": { 7 | "dev": "srvx api/server.ts" 8 | }, 9 | "dependencies": { 10 | "@shikijs/cli": "^3.11.0", 11 | "modern-monaco": "^0.1.9", 12 | "shiki-image": "^0.1.2" 13 | }, 14 | "devDependencies": { 15 | "@types/node": "^24.3.0", 16 | "srvx": "^0.8.6", 17 | "typescript": "^5.9.2" 18 | }, 19 | "packageManager": "pnpm@10.15.0" 20 | } 21 | -------------------------------------------------------------------------------- /api/server.ts: -------------------------------------------------------------------------------- 1 | import { renderToWebComponent } from "modern-monaco/ssr"; 2 | 3 | /** 4 | * This demo displays its own server code inside the editor 5 | * Demo source: https://github.com/pi0/modern-monaco-demo 6 | * Powered by https://github.com/esm-dev/modern-monaco 7 | */ 8 | 9 | const RAW_SOURCE = 10 | "https://raw.githubusercontent.com/pi0/modern-monaco-demo/refs/heads/main/api/server.ts"; 11 | 12 | // prettier-ignore 13 | const THEMES = ["andromeeda","aurora-x","ayu-dark","catppuccin-mocha","dark-plus","dracula","everforest-dark","github-dark","gruvbox-dark-soft","material-theme-darker","min-dark","night-owl","one-dark-pro","rose-pine-moon","slack-dark","solarized-dark","tokyo-night","vesper","vitesse-dark"] as const; 14 | 15 | export default { 16 | async fetch(req: Request): Promise { 17 | const code = await fetch(RAW_SOURCE).then((r) => r.text()); 18 | const theme = THEMES[Math.floor(Math.random() * THEMES.length)]; 19 | const userAgent = req.headers.get("user-agent"); 20 | 21 | if (req.url.endsWith("og")) { 22 | const { codeToImage } = await import("shiki-image"); 23 | let subCode = code.split("\n").slice(13, 55).join("\n"); 24 | const buffer = await codeToImage(subCode, { lang: "typescript", theme }); 25 | return new Response(new Uint8Array(buffer), { 26 | headers: { "Content-Type": "image/png" }, 27 | }); 28 | } 29 | 30 | if (userAgent.startsWith("curl/")) { 31 | delete globalThis.process.env.NO_COLOR; 32 | globalThis.process.env.FORCE_COLOR = "2"; // 256 colors 33 | const { codeToANSI } = await import("@shikijs/cli"); 34 | return new Response(await codeToANSI(code, "typescript", theme)); 35 | } 36 | 37 | const editor = await renderToWebComponent( 38 | { code, filename: "server.ts" }, 39 | { 40 | theme, 41 | padding: { top: 10, bottom: 10 }, 42 | userAgent /* use system font */, 43 | } 44 | ); 45 | 46 | return new Response( 47 | /* html */ ` 48 | 49 | 50 | Modern Monaco Demo 51 | 52 | 53 | 54 | 55 | 56 | 57 | ${editor} 58 | 75 | `, 76 | { headers: { "Content-Type": "text/html" } } 77 | ); 78 | }, 79 | }; 80 | -------------------------------------------------------------------------------- /pnpm-lock.yaml: -------------------------------------------------------------------------------- 1 | lockfileVersion: '9.0' 2 | 3 | settings: 4 | autoInstallPeers: true 5 | excludeLinksFromLockfile: false 6 | 7 | importers: 8 | 9 | .: 10 | dependencies: 11 | '@shikijs/cli': 12 | specifier: ^3.11.0 13 | version: 3.11.0 14 | modern-monaco: 15 | specifier: ^0.1.9 16 | version: 0.1.9(typescript@5.9.2) 17 | shiki-image: 18 | specifier: ^0.1.2 19 | version: 0.1.2 20 | devDependencies: 21 | '@types/node': 22 | specifier: ^24.3.0 23 | version: 24.3.0 24 | srvx: 25 | specifier: ^0.8.6 26 | version: 0.8.6 27 | typescript: 28 | specifier: ^5.9.2 29 | version: 5.9.2 30 | 31 | packages: 32 | 33 | '@shikijs/cli@3.11.0': 34 | resolution: {integrity: sha512-EydRUfc2JKxjnyN7Rm4wqZiN6/Px9knaDj/JspsiwD3571Sz3Tkzns5cnrJrT4YsAdkd9AFYyoUVCQXMO7k8qw==} 35 | hasBin: true 36 | 37 | '@shikijs/core@3.11.0': 38 | resolution: {integrity: sha512-oJwU+DxGqp6lUZpvtQgVOXNZcVsirN76tihOLBmwILkKuRuwHteApP8oTXmL4tF5vS5FbOY0+8seXmiCoslk4g==} 39 | 40 | '@shikijs/engine-javascript@3.11.0': 41 | resolution: {integrity: sha512-6/ov6pxrSvew13k9ztIOnSBOytXeKs5kfIR7vbhdtVRg+KPzvp2HctYGeWkqv7V6YIoLicnig/QF3iajqyElZA==} 42 | 43 | '@shikijs/engine-oniguruma@3.11.0': 44 | resolution: {integrity: sha512-4DwIjIgETK04VneKbfOE4WNm4Q7WC1wo95wv82PoHKdqX4/9qLRUwrfKlmhf0gAuvT6GHy0uc7t9cailk6Tbhw==} 45 | 46 | '@shikijs/langs@3.11.0': 47 | resolution: {integrity: sha512-Njg/nFL4HDcf/ObxcK2VeyidIq61EeLmocrwTHGGpOQx0BzrPWM1j55XtKQ1LvvDWH15cjQy7rg96aJ1/l63uw==} 48 | 49 | '@shikijs/themes@3.11.0': 50 | resolution: {integrity: sha512-BhhWRzCTEk2CtWt4S4bgsOqPJRkapvxdsifAwqP+6mk5uxboAQchc0etiJ0iIasxnMsb764qGD24DK9albcU9Q==} 51 | 52 | '@shikijs/types@3.11.0': 53 | resolution: {integrity: sha512-RB7IMo2E7NZHyfkqAuaf4CofyY8bPzjWPjJRzn6SEak3b46fIQyG6Vx5fG/obqkfppQ+g8vEsiD7Uc6lqQt32Q==} 54 | 55 | '@shikijs/vscode-textmate@10.0.2': 56 | resolution: {integrity: sha512-83yeghZ2xxin3Nj8z1NMd/NCuca+gsYXswywDy5bHvwlWL8tpTQmzGeUuHd9FC3E/SBEMvzJRwWEOz5gGes9Qg==} 57 | 58 | '@takumi-rs/core-darwin-arm64@0.27.2': 59 | resolution: {integrity: sha512-E2hEKljOM15Z7HIwkWvA1wwJWZitOT8m3So3Vdc3vY03+Q26zWZ7oKXNqsocJTTPsVtm0EFh2aOA/KDfu+oVNg==} 60 | engines: {node: '>= 12.22.0 < 13 || >= 14.17.0 < 15 || >= 15.12.0 < 16 || >= 16.0.0'} 61 | cpu: [arm64] 62 | os: [darwin] 63 | 64 | '@takumi-rs/core-linux-arm64-gnu@0.27.2': 65 | resolution: {integrity: sha512-X5DCnH/1AQVE4Lq5F+titCnW3crG7MKtnpVgUEXM8i2NSF3/pYILESeM//3p9yr19gi7FSCGWZ6uqJs3QhViaQ==} 66 | engines: {node: '>= 12.22.0 < 13 || >= 14.17.0 < 15 || >= 15.12.0 < 16 || >= 16.0.0'} 67 | cpu: [arm64] 68 | os: [linux] 69 | 70 | '@takumi-rs/core-linux-arm64-musl@0.27.2': 71 | resolution: {integrity: sha512-X0EuWHDRtdgPxwPO/gKm+/Wm55ibh/BZbXz1uj/pOeP2+73uYzFm9LsX200GIEm5DrX6QSpeflrMvnWI/wCENw==} 72 | engines: {node: '>= 12.22.0 < 13 || >= 14.17.0 < 15 || >= 15.12.0 < 16 || >= 16.0.0'} 73 | cpu: [arm64] 74 | os: [linux] 75 | 76 | '@takumi-rs/core-linux-x64-gnu@0.27.2': 77 | resolution: {integrity: sha512-NqCb2B9plqCO+qUmcagtchCDE+OtMVmwJlgwsWSAxXLxdRXPxUoIR1GRp2rey2nLtLjk+sbtGI466fT88pZ+kg==} 78 | engines: {node: '>= 12.22.0 < 13 || >= 14.17.0 < 15 || >= 15.12.0 < 16 || >= 16.0.0'} 79 | cpu: [x64] 80 | os: [linux] 81 | 82 | '@takumi-rs/core-linux-x64-musl@0.27.2': 83 | resolution: {integrity: sha512-13qygidU9cptVX1PPc7iTXHGpo5Bb54pIE0P52z+dbziu4wTvEYJAWIinVfXAoE0i09uaihDLX5qaDBJB7mZ3Q==} 84 | engines: {node: '>= 12.22.0 < 13 || >= 14.17.0 < 15 || >= 15.12.0 < 16 || >= 16.0.0'} 85 | cpu: [x64] 86 | os: [linux] 87 | 88 | '@takumi-rs/core-win32-arm64-msvc@0.27.2': 89 | resolution: {integrity: sha512-2yvTsYUzcFdHpYq/JqpIDgsCUXnjUoljgeu5WhOlU1h+cZShgOb/8h+Vo0LSziPO9fgmxD0BI8RfhauRKMYwAA==} 90 | engines: {node: '>= 12.22.0 < 13 || >= 14.17.0 < 15 || >= 15.12.0 < 16 || >= 16.0.0'} 91 | cpu: [arm64] 92 | os: [win32] 93 | 94 | '@takumi-rs/core-win32-x64-msvc@0.27.2': 95 | resolution: {integrity: sha512-MfhcQebn8hOWwQdMwfWzznLvMThJmurR2em9llVYaNDDcbiogAFiA4yXk8uqBIy2BZHihLb6SBhqE4NFB0Rw5w==} 96 | engines: {node: '>= 12.22.0 < 13 || >= 14.17.0 < 15 || >= 15.12.0 < 16 || >= 16.0.0'} 97 | cpu: [x64] 98 | os: [win32] 99 | 100 | '@takumi-rs/core@0.27.2': 101 | resolution: {integrity: sha512-yWI06aR3EMGDixB7rysL16V8UiDJ36BIvwRCb4e1BM3jaJ5oVQOIBQO8wYMyfjENH96ken4IO50uavwxTHuesg==} 102 | engines: {node: '>= 12.22.0 < 13 || >= 14.17.0 < 15 || >= 15.12.0 < 16 || >= 16.0.0'} 103 | 104 | '@takumi-rs/helpers@0.27.2': 105 | resolution: {integrity: sha512-1EAybS4waIrSG4Mg0D2819Ze9GeWDK+CFg1olb0aaLgwUTh206jsYVUf4M5TnZ7ySKR2C7k3T2wfC3nKU+y7XQ==} 106 | peerDependencies: 107 | react-dom: ^19.0.0 108 | peerDependenciesMeta: 109 | react-dom: 110 | optional: true 111 | 112 | '@types/hast@3.0.4': 113 | resolution: {integrity: sha512-WPs+bbQw5aCj+x6laNGWLH3wviHtoCv/P3+otBhbOhJgG8qtpdAMlTCxLtsTWA7LH1Oh/bFCHsBn0TPS5m30EQ==} 114 | 115 | '@types/mdast@4.0.4': 116 | resolution: {integrity: sha512-kGaNbPh1k7AFzgpud/gMdvIm5xuECykRR+JnWKQno9TAXVa6WIVCGTPvYGekIDL4uwCZQSYbUxNBSb1aUo79oA==} 117 | 118 | '@types/node@24.3.0': 119 | resolution: {integrity: sha512-aPTXCrfwnDLj4VvXrm+UUCQjNEvJgNA8s5F1cvwQU+3KNltTOkBm1j30uNLyqqPNe7gE3KFzImYoZEfLhp4Yow==} 120 | 121 | '@types/unist@3.0.3': 122 | resolution: {integrity: sha512-ko/gIFJRv177XgZsZcBwnqJN5x/Gien8qNOn0D5bQU/zAzVf9Zt3BlcUiLqhV9y4ARk0GbT3tnUiPNgnTXzc/Q==} 123 | 124 | '@ungap/structured-clone@1.3.0': 125 | resolution: {integrity: sha512-WmoN8qaIAo7WTYWbAZuG8PYEhn5fkz7dZrqTBZ7dtt//lL2Gwms1IcnQ5yHqjDfX8Ft5j4YzDM23f87zBfDe9g==} 126 | 127 | ansis@4.1.0: 128 | resolution: {integrity: sha512-BGcItUBWSMRgOCe+SVZJ+S7yTRG0eGt9cXAHev72yuGcY23hnLA7Bky5L/xLyPINoSN95geovfBkqoTlNZYa7w==} 129 | engines: {node: '>=14'} 130 | 131 | cac@6.7.14: 132 | resolution: {integrity: sha512-b6Ilus+c3RrdDk+JhLKUAQfzzgLEPy6wcXqS7f/xe1EETvsDP6GORG7SFuOs6cID5YkqchW/LXZbX5bc8j7ZcQ==} 133 | engines: {node: '>=8'} 134 | 135 | ccount@2.0.1: 136 | resolution: {integrity: sha512-eyrF0jiFpY+3drT6383f1qhkbGsLSifNAjA61IUjZjmLCWjItY6LB9ft9YhoDgwfmclB2zhu51Lc7+95b8NRAg==} 137 | 138 | character-entities-html4@2.1.0: 139 | resolution: {integrity: sha512-1v7fgQRj6hnSwFpq1Eu0ynr/CDEw0rXo2B61qXrLNdHZmPKgb7fqS1a2JwF0rISo9q77jDI8VMEHoApn8qDoZA==} 140 | 141 | character-entities-legacy@3.0.0: 142 | resolution: {integrity: sha512-RpPp0asT/6ufRm//AJVwpViZbGM/MkjQFxJccQRHmISF/22NBtsHqAWmL+/pmkPWoIUJdWyeVleTl1wydHATVQ==} 143 | 144 | comma-separated-tokens@2.0.3: 145 | resolution: {integrity: sha512-Fu4hJdvzeylCfQPp9SGWidpzrMs7tTrlu6Vb8XGaRGck8QSNZJJp538Wrb60Lax4fPwR64ViY468OIUTbRlGZg==} 146 | 147 | cookie-es@2.0.0: 148 | resolution: {integrity: sha512-RAj4E421UYRgqokKUmotqAwuplYw15qtdXfY+hGzgCJ/MBjCVZcSoHK/kH9kocfjRjcDME7IiDWR/1WX1TM2Pg==} 149 | 150 | dequal@2.0.3: 151 | resolution: {integrity: sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA==} 152 | engines: {node: '>=6'} 153 | 154 | devlop@1.1.0: 155 | resolution: {integrity: sha512-RWmIqhcFf1lRYBvNmr7qTNuyCt/7/ns2jbpp1+PalgE/rDQcBT0fioSMUpJ93irlUhC5hrg4cYqe6U+0ImW0rA==} 156 | 157 | hast-util-to-html@9.0.5: 158 | resolution: {integrity: sha512-OguPdidb+fbHQSU4Q4ZiLKnzWo8Wwsf5bZfbvu7//a9oTYoqD/fWpe96NuHkoS9h0ccGOTe0C4NGXdtS0iObOw==} 159 | 160 | hast-util-whitespace@3.0.0: 161 | resolution: {integrity: sha512-88JUN06ipLwsnv+dVn+OIYOvAuvBMy/Qoi6O7mQHxdPXpjy+Cd6xRkWwux7DKO+4sYILtLBRIKgsdpS2gQc7qw==} 162 | 163 | html-void-elements@3.0.0: 164 | resolution: {integrity: sha512-bEqo66MRXsUGxWHV5IP0PUiAWwoEjba4VCzg0LjFJBpchPaTfyfCKTG6bc5F8ucKec3q5y6qOdGyYTSBEvhCrg==} 165 | 166 | mdast-util-to-hast@13.2.0: 167 | resolution: {integrity: sha512-QGYKEuUsYT9ykKBCMOEDLsU5JRObWQusAolFMeko/tYPufNkRffBAQjIE+99jbA87xv6FgmjLtwjh9wBWajwAA==} 168 | 169 | micromark-util-character@2.1.1: 170 | resolution: {integrity: sha512-wv8tdUTJ3thSFFFJKtpYKOYiGP2+v96Hvk4Tu8KpCAsTMs6yi+nVmGh1syvSCsaxz45J6Jbw+9DD6g97+NV67Q==} 171 | 172 | micromark-util-encode@2.0.1: 173 | resolution: {integrity: sha512-c3cVx2y4KqUnwopcO9b/SCdo2O67LwJJ/UyqGfbigahfegL9myoEFoDYZgkT7f36T0bLrM9hZTAaAyH+PCAXjw==} 174 | 175 | micromark-util-sanitize-uri@2.0.1: 176 | resolution: {integrity: sha512-9N9IomZ/YuGGZZmQec1MbgxtlgougxTodVwDzzEouPKo3qFWvymFHWcnDi2vzV1ff6kas9ucW+o3yzJK9YB1AQ==} 177 | 178 | micromark-util-symbol@2.0.1: 179 | resolution: {integrity: sha512-vs5t8Apaud9N28kgCrRUdEed4UJ+wWNvicHLPxCa9ENlYuAY31M0ETy5y1vA33YoNPDFTghEbnh6efaE8h4x0Q==} 180 | 181 | micromark-util-types@2.0.2: 182 | resolution: {integrity: sha512-Yw0ECSpJoViF1qTU4DC6NwtC4aWGt1EkzaQB8KPPyCRR8z9TWeV0HbEFGTO+ZY1wB22zmxnJqhPyTpOVCpeHTA==} 183 | 184 | modern-monaco@0.1.9: 185 | resolution: {integrity: sha512-Iuo9qqyFq8D0M1ueE4lqMuCAh3cSGpsd9QJ/wCweN32EsNC1tdqCKo7xOxvTg39G+dL1xui04ud7x859J9UdmA==} 186 | peerDependencies: 187 | typescript: '>= 5.0.0' 188 | 189 | oniguruma-parser@0.12.1: 190 | resolution: {integrity: sha512-8Unqkvk1RYc6yq2WBYRj4hdnsAxVze8i7iPfQr8e4uSP3tRv0rpZcbGUDvxfQQcdwHt/e9PrMvGCsa8OqG9X3w==} 191 | 192 | oniguruma-to-es@4.3.3: 193 | resolution: {integrity: sha512-rPiZhzC3wXwE59YQMRDodUwwT9FZ9nNBwQQfsd1wfdtlKEyCdRV0avrTcSZ5xlIvGRVPd/cx6ZN45ECmS39xvg==} 194 | 195 | property-information@7.1.0: 196 | resolution: {integrity: sha512-TwEZ+X+yCJmYfL7TPUOcvBZ4QfoT5YenQiJuX//0th53DE6w0xxLEtfK3iyryQFddXuvkIk51EEgrJQ0WJkOmQ==} 197 | 198 | regex-recursion@6.0.2: 199 | resolution: {integrity: sha512-0YCaSCq2VRIebiaUviZNs0cBz1kg5kVS2UKUfNIx8YVs1cN3AV7NTctO5FOKBA+UT2BPJIWZauYHPqJODG50cg==} 200 | 201 | regex-utilities@2.3.0: 202 | resolution: {integrity: sha512-8VhliFJAWRaUiVvREIiW2NXXTmHs4vMNnSzuJVhscgmGav3g9VDxLrQndI3dZZVVdp0ZO/5v0xmX516/7M9cng==} 203 | 204 | regex@6.0.1: 205 | resolution: {integrity: sha512-uorlqlzAKjKQZ5P+kTJr3eeJGSVroLKoHmquUj4zHWuR+hEyNqlXsSKlYYF5F4NI6nl7tWCs0apKJ0lmfsXAPA==} 206 | 207 | shiki-image@0.1.2: 208 | resolution: {integrity: sha512-OoeJgcSJnawAyplJBJbPxK5veG+Ke5VcT1xggDncGe9jh0mDlWS1ysksNo9RJqZAwlqVpAYwsPvC+wswZiq8Rw==} 209 | 210 | shiki@3.11.0: 211 | resolution: {integrity: sha512-VgKumh/ib38I1i3QkMn6mAQA6XjjQubqaAYhfge71glAll0/4xnt8L2oSuC45Qcr/G5Kbskj4RliMQddGmy/Og==} 212 | 213 | space-separated-tokens@2.0.2: 214 | resolution: {integrity: sha512-PEGlAwrG8yXGXRjW32fGbg66JAlOAwbObuqVoJpv/mRgoWDQfgH1wDPvtzWyUSNAXBGSk8h755YDbbcEy3SH2Q==} 215 | 216 | srvx@0.8.6: 217 | resolution: {integrity: sha512-jnIxPn5A7ugRKGZ/+TlcD2hKIkMx64aTAk1ct0y+S4MWXIzTbpq+7B1gdpZTwJZvNJu5/ayx7c/1YT0pAmD0Kw==} 218 | engines: {node: '>=20.16.0'} 219 | hasBin: true 220 | 221 | stringify-entities@4.0.4: 222 | resolution: {integrity: sha512-IwfBptatlO+QCJUo19AqvrPNqlVMpW9YEL2LIVY+Rpv2qsjCGxaDLNRgeGsQWJhfItebuJhsGSLjaBbNSQ+ieg==} 223 | 224 | trim-lines@3.0.1: 225 | resolution: {integrity: sha512-kRj8B+YHZCc9kQYdWfJB2/oUl9rA99qbowYYBtr4ui4mZyAQ2JpvVBd/6U2YloATfqBhBTSMhTpgBHtU0Mf3Rg==} 226 | 227 | typescript@5.9.2: 228 | resolution: {integrity: sha512-CWBzXQrc/qOkhidw1OzBTQuYRbfyxDXJMVJ1XNwUHGROVmuaeiEm3OslpZ1RV96d7SKKjZKrSJu3+t/xlw3R9A==} 229 | engines: {node: '>=14.17'} 230 | hasBin: true 231 | 232 | undici-types@7.10.0: 233 | resolution: {integrity: sha512-t5Fy/nfn+14LuOc2KNYg75vZqClpAiqscVvMygNnlsHBFpSXdJaYtXMcdNLpl/Qvc3P2cB3s6lOV51nqsFq4ag==} 234 | 235 | unist-util-is@6.0.0: 236 | resolution: {integrity: sha512-2qCTHimwdxLfz+YzdGfkqNlH0tLi9xjTnHddPmJwtIG9MGsdbutfTc4P+haPD7l7Cjxf/WZj+we5qfVPvvxfYw==} 237 | 238 | unist-util-position@5.0.0: 239 | resolution: {integrity: sha512-fucsC7HjXvkB5R3kTCO7kUjRdrS0BJt3M/FPxmHMBOm8JQi2BsHAHFsy27E0EolP8rp0NzXsJ+jNPyDWvOJZPA==} 240 | 241 | unist-util-stringify-position@4.0.0: 242 | resolution: {integrity: sha512-0ASV06AAoKCDkS2+xw5RXJywruurpbC4JZSm7nr7MOt1ojAzvyyaO+UxZf18j8FCF6kmzCZKcAgN/yu2gm2XgQ==} 243 | 244 | unist-util-visit-parents@6.0.1: 245 | resolution: {integrity: sha512-L/PqWzfTP9lzzEa6CKs0k2nARxTdZduw3zyh8d2NVBnsyvHjSX4TWse388YrrQKbvI8w20fGjGlhgT96WwKykw==} 246 | 247 | unist-util-visit@5.0.0: 248 | resolution: {integrity: sha512-MR04uvD+07cwl/yhVuVWAtw+3GOR/knlL55Nd/wAdblk27GCVt3lqpTivy/tkJcZoNPzTwS1Y+KMojlLDhoTzg==} 249 | 250 | vfile-message@4.0.3: 251 | resolution: {integrity: sha512-QTHzsGd1EhbZs4AsQ20JX1rC3cOlt/IWJruk893DfLRr57lcnOeMaWG4K0JrRta4mIJZKth2Au3mM3u03/JWKw==} 252 | 253 | vfile@6.0.3: 254 | resolution: {integrity: sha512-KzIbH/9tXat2u30jf+smMwFCsno4wHVdNmzFyL+T/L3UGqqk6JKfVqOFOZEpZSHADH1k40ab6NUIXZq422ov3Q==} 255 | 256 | zwitch@2.0.4: 257 | resolution: {integrity: sha512-bXE4cR/kVZhKZX/RjPEflHaKVhUVl85noU3v6b8apfQEc1x4A+zBxjZ4lN8LqGd6WZ3dl98pY4o717VFmoPp+A==} 258 | 259 | snapshots: 260 | 261 | '@shikijs/cli@3.11.0': 262 | dependencies: 263 | '@shikijs/vscode-textmate': 10.0.2 264 | ansis: 4.1.0 265 | cac: 6.7.14 266 | shiki: 3.11.0 267 | 268 | '@shikijs/core@3.11.0': 269 | dependencies: 270 | '@shikijs/types': 3.11.0 271 | '@shikijs/vscode-textmate': 10.0.2 272 | '@types/hast': 3.0.4 273 | hast-util-to-html: 9.0.5 274 | 275 | '@shikijs/engine-javascript@3.11.0': 276 | dependencies: 277 | '@shikijs/types': 3.11.0 278 | '@shikijs/vscode-textmate': 10.0.2 279 | oniguruma-to-es: 4.3.3 280 | 281 | '@shikijs/engine-oniguruma@3.11.0': 282 | dependencies: 283 | '@shikijs/types': 3.11.0 284 | '@shikijs/vscode-textmate': 10.0.2 285 | 286 | '@shikijs/langs@3.11.0': 287 | dependencies: 288 | '@shikijs/types': 3.11.0 289 | 290 | '@shikijs/themes@3.11.0': 291 | dependencies: 292 | '@shikijs/types': 3.11.0 293 | 294 | '@shikijs/types@3.11.0': 295 | dependencies: 296 | '@shikijs/vscode-textmate': 10.0.2 297 | '@types/hast': 3.0.4 298 | 299 | '@shikijs/vscode-textmate@10.0.2': {} 300 | 301 | '@takumi-rs/core-darwin-arm64@0.27.2': 302 | optional: true 303 | 304 | '@takumi-rs/core-linux-arm64-gnu@0.27.2': 305 | optional: true 306 | 307 | '@takumi-rs/core-linux-arm64-musl@0.27.2': 308 | optional: true 309 | 310 | '@takumi-rs/core-linux-x64-gnu@0.27.2': 311 | optional: true 312 | 313 | '@takumi-rs/core-linux-x64-musl@0.27.2': 314 | optional: true 315 | 316 | '@takumi-rs/core-win32-arm64-msvc@0.27.2': 317 | optional: true 318 | 319 | '@takumi-rs/core-win32-x64-msvc@0.27.2': 320 | optional: true 321 | 322 | '@takumi-rs/core@0.27.2': 323 | optionalDependencies: 324 | '@takumi-rs/core-darwin-arm64': 0.27.2 325 | '@takumi-rs/core-linux-arm64-gnu': 0.27.2 326 | '@takumi-rs/core-linux-arm64-musl': 0.27.2 327 | '@takumi-rs/core-linux-x64-gnu': 0.27.2 328 | '@takumi-rs/core-linux-x64-musl': 0.27.2 329 | '@takumi-rs/core-win32-arm64-msvc': 0.27.2 330 | '@takumi-rs/core-win32-x64-msvc': 0.27.2 331 | 332 | '@takumi-rs/helpers@0.27.2': {} 333 | 334 | '@types/hast@3.0.4': 335 | dependencies: 336 | '@types/unist': 3.0.3 337 | 338 | '@types/mdast@4.0.4': 339 | dependencies: 340 | '@types/unist': 3.0.3 341 | 342 | '@types/node@24.3.0': 343 | dependencies: 344 | undici-types: 7.10.0 345 | 346 | '@types/unist@3.0.3': {} 347 | 348 | '@ungap/structured-clone@1.3.0': {} 349 | 350 | ansis@4.1.0: {} 351 | 352 | cac@6.7.14: {} 353 | 354 | ccount@2.0.1: {} 355 | 356 | character-entities-html4@2.1.0: {} 357 | 358 | character-entities-legacy@3.0.0: {} 359 | 360 | comma-separated-tokens@2.0.3: {} 361 | 362 | cookie-es@2.0.0: {} 363 | 364 | dequal@2.0.3: {} 365 | 366 | devlop@1.1.0: 367 | dependencies: 368 | dequal: 2.0.3 369 | 370 | hast-util-to-html@9.0.5: 371 | dependencies: 372 | '@types/hast': 3.0.4 373 | '@types/unist': 3.0.3 374 | ccount: 2.0.1 375 | comma-separated-tokens: 2.0.3 376 | hast-util-whitespace: 3.0.0 377 | html-void-elements: 3.0.0 378 | mdast-util-to-hast: 13.2.0 379 | property-information: 7.1.0 380 | space-separated-tokens: 2.0.2 381 | stringify-entities: 4.0.4 382 | zwitch: 2.0.4 383 | 384 | hast-util-whitespace@3.0.0: 385 | dependencies: 386 | '@types/hast': 3.0.4 387 | 388 | html-void-elements@3.0.0: {} 389 | 390 | mdast-util-to-hast@13.2.0: 391 | dependencies: 392 | '@types/hast': 3.0.4 393 | '@types/mdast': 4.0.4 394 | '@ungap/structured-clone': 1.3.0 395 | devlop: 1.1.0 396 | micromark-util-sanitize-uri: 2.0.1 397 | trim-lines: 3.0.1 398 | unist-util-position: 5.0.0 399 | unist-util-visit: 5.0.0 400 | vfile: 6.0.3 401 | 402 | micromark-util-character@2.1.1: 403 | dependencies: 404 | micromark-util-symbol: 2.0.1 405 | micromark-util-types: 2.0.2 406 | 407 | micromark-util-encode@2.0.1: {} 408 | 409 | micromark-util-sanitize-uri@2.0.1: 410 | dependencies: 411 | micromark-util-character: 2.1.1 412 | micromark-util-encode: 2.0.1 413 | micromark-util-symbol: 2.0.1 414 | 415 | micromark-util-symbol@2.0.1: {} 416 | 417 | micromark-util-types@2.0.2: {} 418 | 419 | modern-monaco@0.1.9(typescript@5.9.2): 420 | dependencies: 421 | typescript: 5.9.2 422 | 423 | oniguruma-parser@0.12.1: {} 424 | 425 | oniguruma-to-es@4.3.3: 426 | dependencies: 427 | oniguruma-parser: 0.12.1 428 | regex: 6.0.1 429 | regex-recursion: 6.0.2 430 | 431 | property-information@7.1.0: {} 432 | 433 | regex-recursion@6.0.2: 434 | dependencies: 435 | regex-utilities: 2.3.0 436 | 437 | regex-utilities@2.3.0: {} 438 | 439 | regex@6.0.1: 440 | dependencies: 441 | regex-utilities: 2.3.0 442 | 443 | shiki-image@0.1.2: 444 | dependencies: 445 | '@takumi-rs/core': 0.27.2 446 | '@takumi-rs/helpers': 0.27.2 447 | shiki: 3.11.0 448 | transitivePeerDependencies: 449 | - react-dom 450 | 451 | shiki@3.11.0: 452 | dependencies: 453 | '@shikijs/core': 3.11.0 454 | '@shikijs/engine-javascript': 3.11.0 455 | '@shikijs/engine-oniguruma': 3.11.0 456 | '@shikijs/langs': 3.11.0 457 | '@shikijs/themes': 3.11.0 458 | '@shikijs/types': 3.11.0 459 | '@shikijs/vscode-textmate': 10.0.2 460 | '@types/hast': 3.0.4 461 | 462 | space-separated-tokens@2.0.2: {} 463 | 464 | srvx@0.8.6: 465 | dependencies: 466 | cookie-es: 2.0.0 467 | 468 | stringify-entities@4.0.4: 469 | dependencies: 470 | character-entities-html4: 2.1.0 471 | character-entities-legacy: 3.0.0 472 | 473 | trim-lines@3.0.1: {} 474 | 475 | typescript@5.9.2: {} 476 | 477 | undici-types@7.10.0: {} 478 | 479 | unist-util-is@6.0.0: 480 | dependencies: 481 | '@types/unist': 3.0.3 482 | 483 | unist-util-position@5.0.0: 484 | dependencies: 485 | '@types/unist': 3.0.3 486 | 487 | unist-util-stringify-position@4.0.0: 488 | dependencies: 489 | '@types/unist': 3.0.3 490 | 491 | unist-util-visit-parents@6.0.1: 492 | dependencies: 493 | '@types/unist': 3.0.3 494 | unist-util-is: 6.0.0 495 | 496 | unist-util-visit@5.0.0: 497 | dependencies: 498 | '@types/unist': 3.0.3 499 | unist-util-is: 6.0.0 500 | unist-util-visit-parents: 6.0.1 501 | 502 | vfile-message@4.0.3: 503 | dependencies: 504 | '@types/unist': 3.0.3 505 | unist-util-stringify-position: 4.0.0 506 | 507 | vfile@6.0.3: 508 | dependencies: 509 | '@types/unist': 3.0.3 510 | vfile-message: 4.0.3 511 | 512 | zwitch@2.0.4: {} 513 | --------------------------------------------------------------------------------