diff --git a/package.json b/package.json index 3995c20..16f6223 100644 --- a/package.json +++ b/package.json @@ -11,10 +11,10 @@ }, "dependencies": { "@astrojs/check": "^0.9.4", - "@astrojs/mdx": "^3.1.7", - "@astrojs/tailwind": "^5.1.1", + "@astrojs/mdx": "^3.1.9", + "@astrojs/tailwind": "^5.1.2", "@types/node": "^22.3.0", - "astro": "^4.15.11", + "astro": "^4.16.10", "tailwindcss": "^3.4.5", "typescript": "^5.5.3" }, diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index ebd1e9c..60b39a2 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -12,17 +12,17 @@ importers: specifier: ^0.9.4 version: 0.9.4(typescript@5.5.3) '@astrojs/mdx': - specifier: ^3.1.7 - version: 3.1.7(astro@4.15.11(@types/node@22.3.0)(rollup@4.24.0)(typescript@5.5.3)) + specifier: ^3.1.9 + version: 3.1.9(astro@4.16.10(@types/node@22.3.0)(rollup@4.24.0)(typescript@5.5.3)) '@astrojs/tailwind': - specifier: ^5.1.1 - version: 5.1.1(astro@4.15.11(@types/node@22.3.0)(rollup@4.24.0)(typescript@5.5.3))(tailwindcss@3.4.5) + specifier: ^5.1.2 + version: 5.1.2(astro@4.16.10(@types/node@22.3.0)(rollup@4.24.0)(typescript@5.5.3))(tailwindcss@3.4.5) '@types/node': specifier: ^22.3.0 version: 22.3.0 astro: - specifier: ^4.15.11 - version: 4.15.11(@types/node@22.3.0)(rollup@4.24.0)(typescript@5.5.3) + specifier: ^4.16.10 + version: 4.16.10(@types/node@22.3.0)(rollup@4.24.0)(typescript@5.5.3) tailwindcss: specifier: ^3.4.5 version: 3.4.5 @@ -68,11 +68,11 @@ packages: prettier-plugin-astro: optional: true - '@astrojs/markdown-remark@5.2.0': - resolution: {integrity: sha512-vWGM24KZXz11jR3JO+oqYU3T2qpuOi4uGivJ9SQLCAI01+vEkHC60YJMRvHPc+hwd60F7euNs1PeOEixIIiNQw==} + '@astrojs/markdown-remark@5.3.0': + resolution: {integrity: sha512-r0Ikqr0e6ozPb5bvhup1qdWnSPUvQu6tub4ZLYaKyG50BXZ0ej6FhGz3GpChKpH7kglRFPObJd/bDyf2VM9pkg==} - '@astrojs/mdx@3.1.7': - resolution: {integrity: sha512-8lGdCt+S0TrZgQpbcP3fQJc4cTeacAirtz9TpAMtHCWrQGW8slKt3WG4/0N+bhZgYRC4h5AT5drzFz+y3wvmsg==} + '@astrojs/mdx@3.1.9': + resolution: {integrity: sha512-3jPD4Bff6lIA20RQoonnZkRtZ9T3i0HFm6fcDF7BMsKIZ+xBP2KXzQWiuGu62lrVCmU612N+SQVGl5e0fI+zWg==} engines: {node: ^18.17.1 || ^20.3.0 || >=21.0.0} peerDependencies: astro: ^4.8.0 @@ -81,8 +81,8 @@ packages: resolution: {integrity: sha512-Z9IYjuXSArkAUx3N6xj6+Bnvx8OdUSHA8YoOgyepp3+zJmtVYJIl/I18GozdJVW1p5u/CNpl3Km7/gwTJK85cw==} engines: {node: ^18.17.1 || ^20.3.0 || >=21.0.0} - '@astrojs/tailwind@5.1.1': - resolution: {integrity: sha512-LwurA10uIKcGRxQP2R81RvAnBT0WPKzBntXZBF4hrAefDgM5Uumn0nsGr6tdIjSARgYz4X+Cq/Vh78t3bql3yw==} + '@astrojs/tailwind@5.1.2': + resolution: {integrity: sha512-IvOF0W/dtHElcXvhrPR35nHmhyV3cfz1EzPitMGtU7sYy9Hci3BNK1To6FWmVuuNKPxza1IgCGetSynJZL7fOg==} peerDependencies: astro: ^3.0.0 || ^4.0.0 || ^5.0.0-beta.0 tailwindcss: ^3.0.24 @@ -94,100 +94,92 @@ packages: '@astrojs/yaml2ts@0.2.1': resolution: {integrity: sha512-CBaNwDQJz20E5WxzQh4thLVfhB3JEEGz72wRA+oJp6fQR37QLAqXZJU0mHC+yqMOQ6oj0GfRPJrz6hjf+zm6zA==} - '@babel/code-frame@7.25.7': - resolution: {integrity: sha512-0xZJFNE5XMpENsgfHYTw8FbX4kv53mFLn2i3XPoq69LyhYSCBJtitaHx9QnsVTrsogI4Z3+HtEfZ2/GFPOtf5g==} + '@babel/code-frame@7.26.2': + resolution: {integrity: sha512-RJlIHRueQgwWitWgF8OdFYGZX328Ax5BCemNGlqHfplnRT9ESi8JkFlvaVYbS+UubVY6dpv87Fs2u5M29iNFVQ==} engines: {node: '>=6.9.0'} - '@babel/compat-data@7.25.7': - resolution: {integrity: sha512-9ickoLz+hcXCeh7jrcin+/SLWm+GkxE2kTvoYyp38p4WkdFXfQJxDFGWp/YHjiKLPx06z2A7W8XKuqbReXDzsw==} + '@babel/compat-data@7.26.2': + resolution: {integrity: sha512-Z0WgzSEa+aUcdiJuCIqgujCshpMWgUpgOxXotrYPSA53hA3qopNaqcJpyr0hVb1FeWdnqFA35/fUtXgBK8srQg==} engines: {node: '>=6.9.0'} - '@babel/core@7.25.7': - resolution: {integrity: sha512-yJ474Zv3cwiSOO9nXJuqzvwEeM+chDuQ8GJirw+pZ91sCGCyOZ3dJkVE09fTV0VEVzXyLWhh3G/AolYTPX7Mow==} + '@babel/core@7.26.0': + resolution: {integrity: sha512-i1SLeK+DzNnQ3LL/CswPCa/E5u4lh1k6IAEphON8F+cXt0t9euTshDru0q7/IqMa1PMPz5RnHuHscF8/ZJsStg==} engines: {node: '>=6.9.0'} - '@babel/generator@7.25.7': - resolution: {integrity: sha512-5Dqpl5fyV9pIAD62yK9P7fcA768uVPUyrQmqpqstHWgMma4feF1x/oFysBCVZLY5wJ2GkMUCdsNDnGZrPoR6rA==} + '@babel/generator@7.26.2': + resolution: {integrity: sha512-zevQbhbau95nkoxSq3f/DC/SC+EEOUZd3DYqfSkMhY2/wfSeaHV1Ew4vk8e+x8lja31IbyuUa2uQ3JONqKbysw==} engines: {node: '>=6.9.0'} - '@babel/helper-annotate-as-pure@7.25.7': - resolution: {integrity: sha512-4xwU8StnqnlIhhioZf1tqnVWeQ9pvH/ujS8hRfw/WOza+/a+1qv69BWNy+oY231maTCWgKWhfBU7kDpsds6zAA==} + '@babel/helper-annotate-as-pure@7.25.9': + resolution: {integrity: sha512-gv7320KBUFJz1RnylIg5WWYPRXKZ884AGkYpgpWW02TH66Dl+HaC1t1CKd0z3R4b6hdYEcmrNZHUmfCP+1u3/g==} engines: {node: '>=6.9.0'} - '@babel/helper-compilation-targets@7.25.7': - resolution: {integrity: sha512-DniTEax0sv6isaw6qSQSfV4gVRNtw2rte8HHM45t9ZR0xILaufBRNkpMifCRiAPyvL4ACD6v0gfCwCmtOQaV4A==} + '@babel/helper-compilation-targets@7.25.9': + resolution: {integrity: sha512-j9Db8Suy6yV/VHa4qzrj9yZfZxhLWQdVnRlXxmKLYlhWUVB1sB2G5sxuWYXk/whHD9iW76PmNzxZ4UCnTQTVEQ==} engines: {node: '>=6.9.0'} - '@babel/helper-module-imports@7.25.7': - resolution: {integrity: sha512-o0xCgpNmRohmnoWKQ0Ij8IdddjyBFE4T2kagL/x6M3+4zUgc+4qTOUBoNe4XxDskt1HPKO007ZPiMgLDq2s7Kw==} + '@babel/helper-module-imports@7.25.9': + resolution: {integrity: sha512-tnUA4RsrmflIM6W6RFTLFSXITtl0wKjgpnLgXyowocVPrbYrLUXSBXDgTs8BlbmIzIdlBySRQjINYs2BAkiLtw==} engines: {node: '>=6.9.0'} - '@babel/helper-module-transforms@7.25.7': - resolution: {integrity: sha512-k/6f8dKG3yDz/qCwSM+RKovjMix563SLxQFo0UhRNo239SP6n9u5/eLtKD6EAjwta2JHJ49CsD8pms2HdNiMMQ==} + '@babel/helper-module-transforms@7.26.0': + resolution: {integrity: sha512-xO+xu6B5K2czEnQye6BHA7DolFFmS3LB7stHZFaOLb1pAwO1HWLS8fXA+eh0A2yIvltPVmx3eNNDBJA2SLHXFw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0 - '@babel/helper-plugin-utils@7.25.7': - resolution: {integrity: sha512-eaPZai0PiqCi09pPs3pAFfl/zYgGaE6IdXtYvmf0qlcDTd3WCtO7JWCcRd64e0EQrcYgiHibEZnOGsSY4QSgaw==} + '@babel/helper-plugin-utils@7.25.9': + resolution: {integrity: sha512-kSMlyUVdWe25rEsRGviIgOWnoT/nfABVWlqt9N19/dIPWViAOW2s9wznP5tURbs/IDuNk4gPy3YdYRgH3uxhBw==} engines: {node: '>=6.9.0'} - '@babel/helper-simple-access@7.25.7': - resolution: {integrity: sha512-FPGAkJmyoChQeM+ruBGIDyrT2tKfZJO8NcxdC+CWNJi7N8/rZpSxK7yvBJ5O/nF1gfu5KzN7VKG3YVSLFfRSxQ==} + '@babel/helper-string-parser@7.25.9': + resolution: {integrity: sha512-4A/SCr/2KLd5jrtOMFzaKjVtAei3+2r/NChoBNoZ3EyP/+GlhoaEGoWOZUmFmoITP7zOJyHIMm+DYRd8o3PvHA==} engines: {node: '>=6.9.0'} - '@babel/helper-string-parser@7.25.7': - resolution: {integrity: sha512-CbkjYdsJNHFk8uqpEkpCvRs3YRp9tY6FmFY7wLMSYuGYkrdUi7r2lc4/wqsvlHoMznX3WJ9IP8giGPq68T/Y6g==} + '@babel/helper-validator-identifier@7.25.9': + resolution: {integrity: sha512-Ed61U6XJc3CVRfkERJWDz4dJwKe7iLmmJsbOGu9wSloNSFttHV0I8g6UAgb7qnK5ly5bGLPd4oXZlxCdANBOWQ==} engines: {node: '>=6.9.0'} - '@babel/helper-validator-identifier@7.25.7': - resolution: {integrity: sha512-AM6TzwYqGChO45oiuPqwL2t20/HdMC1rTPAesnBCgPCSF1x3oN9MVUwQV2iyz4xqWrctwK5RNC8LV22kaQCNYg==} + '@babel/helper-validator-option@7.25.9': + resolution: {integrity: sha512-e/zv1co8pp55dNdEcCynfj9X7nyUKUXoUEwfXqaZt0omVOmDe9oOTdKStH4GmAw6zxMFs50ZayuMfHDKlO7Tfw==} engines: {node: '>=6.9.0'} - '@babel/helper-validator-option@7.25.7': - resolution: {integrity: sha512-ytbPLsm+GjArDYXJ8Ydr1c/KJuutjF2besPNbIZnZ6MKUxi/uTA22t2ymmA4WFjZFpjiAMO0xuuJPqK2nvDVfQ==} + '@babel/helpers@7.26.0': + resolution: {integrity: sha512-tbhNuIxNcVb21pInl3ZSjksLCvgdZy9KwJ8brv993QtIVKJBBkYXz4q4ZbAv31GdnC+R90np23L5FbEBlthAEw==} engines: {node: '>=6.9.0'} - '@babel/helpers@7.25.7': - resolution: {integrity: sha512-Sv6pASx7Esm38KQpF/U/OXLwPPrdGHNKoeblRxgZRLXnAtnkEe4ptJPDtAZM7fBLadbc1Q07kQpSiGQ0Jg6tRA==} - engines: {node: '>=6.9.0'} - - '@babel/highlight@7.25.7': - resolution: {integrity: sha512-iYyACpW3iW8Fw+ZybQK+drQre+ns/tKpXbNESfrhNnPLIklLbXr7MYJ6gPEd0iETGLOK+SxMjVvKb/ffmk+FEw==} - engines: {node: '>=6.9.0'} - - '@babel/parser@7.24.8': - resolution: {integrity: sha512-WzfbgXOkGzZiXXCqk43kKwZjzwx4oulxZi3nq2TYL9mOjQv6kYwul9mz6ID36njuL7Xkp6nJEfok848Zj10j/w==} - engines: {node: '>=6.0.0'} - hasBin: true - '@babel/parser@7.25.7': resolution: {integrity: sha512-aZn7ETtQsjjGG5HruveUK06cU3Hljuhd9Iojm4M8WWv3wLE6OkE5PWbDUkItmMgegmccaITudyuW5RPYrYlgWw==} engines: {node: '>=6.0.0'} hasBin: true - '@babel/plugin-syntax-jsx@7.25.7': - resolution: {integrity: sha512-ruZOnKO+ajVL/MVx+PwNBPOkrnXTXoWMtte1MBpegfCArhqOe3Bj52avVj1huLLxNKYKXYaSxZ2F+woK1ekXfw==} + '@babel/parser@7.26.2': + resolution: {integrity: sha512-DWMCZH9WA4Maitz2q21SRKHo9QXZxkDsbNZoVD62gusNtNBBqDg9i7uOhASfTfIGNzW+O+r7+jAlM8dwphcJKQ==} + engines: {node: '>=6.0.0'} + hasBin: true + + '@babel/plugin-syntax-jsx@7.25.9': + resolution: {integrity: sha512-ld6oezHQMZsZfp6pWtbjaNDF2tiiCYYDqQszHt5VV437lewP9aSi2Of99CK0D0XB21k7FLgnLcmQKyKzynfeAA==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 - '@babel/plugin-transform-react-jsx@7.25.7': - resolution: {integrity: sha512-vILAg5nwGlR9EXE8JIOX4NHXd49lrYbN8hnjffDtoULwpL9hUx/N55nqh2qd0q6FyNDfjl9V79ecKGvFbcSA0Q==} + '@babel/plugin-transform-react-jsx@7.25.9': + resolution: {integrity: sha512-s5XwpQYCqGerXl+Pu6VDL3x0j2d82eiV77UJ8a2mDHAW7j9SWRqQ2y1fNo1Z74CdcYipl5Z41zvjj4Nfzq36rw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 - '@babel/template@7.25.7': - resolution: {integrity: sha512-wRwtAgI3bAS+JGU2upWNL9lSlDcRCqD05BZ1n3X2ONLH1WilFP6O1otQjeMK/1g0pvYcXC7b/qVUB1keofjtZA==} + '@babel/template@7.25.9': + resolution: {integrity: sha512-9DGttpmPvIxBb/2uwpVo3dqJ+O6RooAFOS+lB+xDqoE2PVCE8nfoHMdZLpfCQRLwvohzXISPZcgxt80xLfsuwg==} engines: {node: '>=6.9.0'} - '@babel/traverse@7.25.7': - resolution: {integrity: sha512-jatJPT1Zjqvh/1FyJs6qAHL+Dzb7sTb+xr7Q+gM1b+1oBsMsQQ4FkVKb6dFlJvLlVssqkRzV05Jzervt9yhnzg==} + '@babel/traverse@7.25.9': + resolution: {integrity: sha512-ZCuvfwOwlz/bawvAuvcj8rrithP2/N55Tzz342AkTvq4qaWbGfmCk/tKhNaV2cthijKrPAA8SRJV5WWe7IBMJw==} engines: {node: '>=6.9.0'} - '@babel/types@7.25.7': - resolution: {integrity: sha512-vwIVdXG+j+FOpkwqHRcBgHLYNL7XMkufrlaFvL9o6Ai9sJn9+PdyIL5qa0XzTZw084c+u9LOls53eoZWP/W5WQ==} + '@babel/types@7.26.0': + resolution: {integrity: sha512-Z/yiTPj+lDVnF7lWeKCIJzaIkI0vYO87dMpZ4bg4TDrFe4XXLFWL1TbXU27gBP3QccxV9mZICCrnjnYlJjXHOA==} engines: {node: '>=6.9.0'} '@emmetio/abbreviation@2.3.3': @@ -487,8 +479,8 @@ packages: '@jridgewell/trace-mapping@0.3.25': resolution: {integrity: sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==} - '@mdx-js/mdx@3.0.1': - resolution: {integrity: sha512-eIQ4QTrOWyL3LWEe/bu6Taqzq2HQvHcyTMaOrI95P2/LmJE7AsfPfgJGuFLPVqBUE1BC1rik3VIhU+s9u72arA==} + '@mdx-js/mdx@3.1.0': + resolution: {integrity: sha512-/QxEhPAvGwbQmy1Px8F899L5Uc2KZ6JtXwlCgJmjSTBedwOZkByYcBG4GceIGPXRDsmfxhHazuS+hlOShRLeDw==} '@nodelib/fs.scandir@2.1.5': resolution: {integrity: sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==} @@ -509,8 +501,8 @@ packages: resolution: {integrity: sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==} engines: {node: '>=14'} - '@rollup/pluginutils@5.1.2': - resolution: {integrity: sha512-/FIdS3PyZ39bjZlwqFnWqCOVnW7o963LtKMwQOD0NhQqw22gSr2YY1afu3FxRip4ZCZNsD5jq6Aaz6QV3D/Njw==} + '@rollup/pluginutils@5.1.3': + resolution: {integrity: sha512-Pnsb6f32CD2W3uCaLZIzDmeFyQ2b8UWMFI7xtwUezpcGBDVDW6y9XgAWIlARiGAo6eNF5FK5aQTr0LFyNyqq5A==} engines: {node: '>=14.0.0'} peerDependencies: rollup: ^1.20.0||^2.0.0||^3.0.0||^4.0.0 @@ -601,23 +593,23 @@ packages: '@shikijs/core@1.10.3': resolution: {integrity: sha512-D45PMaBaeDHxww+EkcDQtDAtzv00Gcsp72ukBtaLSmqRvh0WgGMq3Al0rl1QQBZfuneO75NXMIzEZGFitThWbg==} - '@shikijs/core@1.21.0': - resolution: {integrity: sha512-zAPMJdiGuqXpZQ+pWNezQAk5xhzRXBNiECFPcJLtUdsFM3f//G95Z15EHTnHchYycU8kIIysqGgxp8OVSj1SPQ==} + '@shikijs/core@1.22.2': + resolution: {integrity: sha512-bvIQcd8BEeR1yFvOYv6HDiyta2FFVePbzeowf5pPS1avczrPK+cjmaxxh0nx5QzbON7+Sv0sQfQVciO7bN72sg==} - '@shikijs/engine-javascript@1.21.0': - resolution: {integrity: sha512-jxQHNtVP17edFW4/0vICqAVLDAxmyV31MQJL4U/Kg+heQALeKYVOWo0sMmEZ18FqBt+9UCdyqGKYE7bLRtk9mg==} + '@shikijs/engine-javascript@1.22.2': + resolution: {integrity: sha512-iOvql09ql6m+3d1vtvP8fLCVCK7BQD1pJFmHIECsujB0V32BJ0Ab6hxk1ewVSMFA58FI0pR2Had9BKZdyQrxTw==} - '@shikijs/engine-oniguruma@1.21.0': - resolution: {integrity: sha512-AIZ76XocENCrtYzVU7S4GY/HL+tgHGbVU+qhiDyNw1qgCA5OSi4B4+HY4BtAoJSMGuD/L5hfTzoRVbzEm2WTvg==} + '@shikijs/engine-oniguruma@1.22.2': + resolution: {integrity: sha512-GIZPAGzQOy56mGvWMoZRPggn0dTlBf1gutV5TdceLCZlFNqWmuc7u+CzD0Gd9vQUTgLbrt0KLzz6FNprqYAxlA==} '@shikijs/transformers@1.10.3': resolution: {integrity: sha512-MNjsyye2WHVdxfZUSr5frS97sLGe6G1T+1P41QjyBFJehZphMcr4aBlRLmq6OSPBslYe9byQPVvt/LJCOfxw8Q==} - '@shikijs/types@1.21.0': - resolution: {integrity: sha512-tzndANDhi5DUndBtpojEq/42+dpUF2wS7wdCDQaFtIXm3Rd1QkrcVgSSRLOvEwexekihOXfbYJINW37g96tJRw==} + '@shikijs/types@1.22.2': + resolution: {integrity: sha512-NCWDa6LGZqTuzjsGfXOBWfjS/fDIbDdmVDug+7ykVe1IKT4c1gakrvlfFYp5NhAXH/lyqLM8wsAPo5wNy73Feg==} - '@shikijs/vscode-textmate@9.2.2': - resolution: {integrity: sha512-TMp15K+GGYrWlZM8+Lnj9EaHEFmOen0WJBrfa17hF7taDOYthuPPV0GWzfd/9iMij0akS/8Yw2ikquH7uVi/fg==} + '@shikijs/vscode-textmate@9.3.0': + resolution: {integrity: sha512-jn7/7ky30idSkd/O5yDBfAnVt+JJpepofP/POZ1iMOxK59cOfqIgg/Dj0eFsjOTMw+4ycJN0uhZH/Eb0bs/EUA==} '@types/acorn@4.0.6': resolution: {integrity: sha512-veQTnWP+1D/xbxVrPC3zHnCZRjSrKfhbMUlEA43iMZLu7EsnTtkJklIuwrCPbOi8YkvDQAiW05VQQFvvz9oieQ==} @@ -643,9 +635,6 @@ packages: '@types/estree-jsx@1.0.5': resolution: {integrity: sha512-52CcUVNFyfb1A2ALocQw/Dd1BQFNmSdkuC3BkZ6iqhdMfQz7JWOFRuJFloOzjk+6WijU56m9oKXFAXc7o3Towg==} - '@types/estree@1.0.5': - resolution: {integrity: sha512-/kYRxGDLWzHOB7q+wtSUQlFrtcdUccpfy+X+9iMBpHK8QLLhx2wIPYuS5DYtR9Wa/YlZAbIovy7qVdB1Aq6Lyw==} - '@types/estree@1.0.6': resolution: {integrity: sha512-AYnb1nQyY49te+VRAVgmzfcgjYS91mY5P0TKUDCLEM+gNnA+3T6rWITXRLYCpahpqSQbN5cE+gHpnPyXjHWxcw==} @@ -707,8 +696,8 @@ packages: peerDependencies: acorn: ^6.0.0 || ^7.0.0 || ^8.0.0 - acorn@8.12.1: - resolution: {integrity: sha512-tcpGyI9zbizT9JbV6oYE477V6mTlXvvi0T0G3SNIYE2apm/G5huBa1+K89VGeovbg+jycCrfhl3ADxErOuO6Jg==} + acorn@8.14.0: + resolution: {integrity: sha512-cl669nCJTZBsL97OF4kUQm5g5hC2uihk0NxY3WENAC0TYdILVkAyHymAntgxGkl7K+t0cXIrH5siy5S4XkFycA==} engines: {node: '>=0.4.0'} hasBin: true @@ -726,10 +715,6 @@ packages: resolution: {integrity: sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==} engines: {node: '>=12'} - ansi-styles@3.2.1: - resolution: {integrity: sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==} - engines: {node: '>=4'} - ansi-styles@4.3.0: resolution: {integrity: sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==} engines: {node: '>=8'} @@ -765,8 +750,8 @@ packages: resolution: {integrity: sha512-ISvCdHdlTDlH5IpxQJIex7BWBywFWgjJSVdwst+/iQCoEYnyOaQ95+X1JGshuBjGp6nxKUy1jMgE3zPqN7fQdg==} hasBin: true - astro@4.15.11: - resolution: {integrity: sha512-uA9fenaRR+j6ksPFsmhM88ttz94a66SET1TZxAJLxctxWkDlgz58BxZYUc1gNlt0azhgzOgh4hP3q9M4YzAmBA==} + astro@4.16.10: + resolution: {integrity: sha512-a+nB4bZE50NXHLzVXUHtx/lYct2Aa8kbqZnWNrWqkU97RuhBuWJ5H5/LQbKRnBWGvqChKfJBiMWJe53TY9ieYQ==} engines: {node: ^18.17.1 || ^20.3.0 || >=21.0.0, npm: '>=9.6.5', pnpm: '>=7.1.0'} hasBin: true @@ -824,10 +809,6 @@ packages: ccount@2.0.1: resolution: {integrity: sha512-eyrF0jiFpY+3drT6383f1qhkbGsLSifNAjA61IUjZjmLCWjItY6LB9ft9YhoDgwfmclB2zhu51Lc7+95b8NRAg==} - chalk@2.4.2: - resolution: {integrity: sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==} - engines: {node: '>=4'} - chalk@5.3.0: resolution: {integrity: sha512-dLitG79d+GV1Nb/VYcCDFivJeK1hiukt9QjRNVOsUtTy1rR1YJsmpGGTZ3qJos+uw7WmWF4wUwBd9jxjocFC2w==} engines: {node: ^12.17.0 || ^14.13 || >=16.0.0} @@ -879,16 +860,10 @@ packages: collapse-white-space@2.1.0: resolution: {integrity: sha512-loKTxY1zCOuG4j9f6EPnuyyYkf58RnhhWTvRoZEokgB+WbdXehfjFviyOVYkqzEWz1Q5kRiZdBYS5SwxbQYwzw==} - color-convert@1.9.3: - resolution: {integrity: sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==} - color-convert@2.0.1: resolution: {integrity: sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==} engines: {node: '>=7.0.0'} - color-name@1.1.3: - resolution: {integrity: sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==} - color-name@1.1.4: resolution: {integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==} @@ -912,8 +887,8 @@ packages: convert-source-map@2.0.0: resolution: {integrity: sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==} - cookie@0.6.0: - resolution: {integrity: sha512-U71cyTamuh1CRNCfpGY6to28lxvNwPG4Guz/EVjgf3Jmzv0vlDp1atT9eS5dDjMYHucpHbWns6Lwf3BKz6svdw==} + cookie@0.7.2: + resolution: {integrity: sha512-yki5XnKuf750l50uGTllt6kKILY4nQ1eNIQatoXEByZ5dWgnKqbnqmTrBE5B4N7lrMJKQ2ytWMiTO2o0v6Ew/w==} engines: {node: '>= 0.6'} cross-spawn@7.0.3: @@ -925,15 +900,6 @@ packages: engines: {node: '>=4'} hasBin: true - debug@4.3.5: - resolution: {integrity: sha512-pt0bNEmneDIvdL1Xsd9oDQ/wrQRkXDT4AUWlNZNPKvW5x/jyO9VFXkJUP07vQ2upmw5PlaITaPKc31jK13V+jg==} - engines: {node: '>=6.0'} - peerDependencies: - supports-color: '*' - peerDependenciesMeta: - supports-color: - optional: true - debug@4.3.7: resolution: {integrity: sha512-Er2nc/H7RrMXZBFCEim6TCmMk02Z8vLC2Rbi1KEBggpo0fS6l0S1nnapwmIi3yW/+GOJap1Krg4w0Hg80oCqgQ==} engines: {node: '>=6.0'} @@ -1003,6 +969,12 @@ packages: es-module-lexer@1.5.4: resolution: {integrity: sha512-MVNK56NiMrOwitFB7cqDwq0CQutbw+0BvLshJSse0MUNU+y1FC3bUS/AQg7oUng+/wKrrki7JfmwtVHkVfPLlw==} + esast-util-from-estree@2.0.0: + resolution: {integrity: sha512-4CyanoAudUSBAn5K13H4JhsMH6L9ZP7XbLVe/dKybkxMO7eDyLsT8UHl9TRNrU2Gr9nz+FovfSIjuXWJ81uVwQ==} + + esast-util-from-js@2.0.1: + resolution: {integrity: sha512-8Ja+rNJ0Lt56Pcf3TAmpBZjmx8ZcK5Ts4cAzIOjsjevg9oSXJnl6SUQ2EevU8tv3h6ZLWmoKL5H4fgWvdvfETw==} + esbuild@0.21.5: resolution: {integrity: sha512-mg3OPMV4hXywwpoDxu3Qda5xCKQi+vCTZq8S9J/EpkhB2HzKXq4SNFZE3+NK93JYxc8VMSep+lOUSC/RVKaBqw==} engines: {node: '>=12'} @@ -1012,10 +984,6 @@ packages: resolution: {integrity: sha512-ErCHMCae19vR8vQGe50xIsVomy19rg6gFu3+r3jkEO46suLMWBksvVyoGgQV+jOfl84ZSOSlmv6Gxa89PmTGmA==} engines: {node: '>=6'} - escape-string-regexp@1.0.5: - resolution: {integrity: sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==} - engines: {node: '>=0.8.0'} - escape-string-regexp@5.0.0: resolution: {integrity: sha512-/veY75JbMK4j1yjvuUxuVsiS/hr/4iHs9FTT6cgTexxdE0Ly/glccBAkloH/DofkjRbZU3bnoj38mOmhkZ0lHw==} engines: {node: '>=12'} @@ -1034,6 +1002,9 @@ packages: estree-util-is-identifier-name@3.0.0: resolution: {integrity: sha512-hFtqIDZTIUZ9BXLb8y4pYGyk6+wekIivNVTcmvk8NoOh+VeRn5y6cEHzbURrWbfp1fIqdVipilzj+lfaadNZmg==} + estree-util-scope@1.0.0: + resolution: {integrity: sha512-2CAASclonf+JFWBNJPndcOpA8EMJwa0Q8LUFJEKqXLW6+qBvbFZuF5gItbQOs/umBUkjviCSDCbBwU2cXbmrhQ==} + estree-util-to-js@2.0.0: resolution: {integrity: sha512-WDF+xj5rRWmD5tj6bIqRi6CkLIXbbNQUcxQHzGysQzvHmdYG2G7p/Tf0J0gpxGgkeMZNTIjT/AoSvC9Xehcgdg==} @@ -1141,10 +1112,6 @@ packages: resolution: {integrity: sha512-5v6yZd4JK3eMI3FqqCouswVqwugaA9r4dNZB1wwcmrD02QkV5H0y7XBQW8QwQqEaZY1pM9aqORSORhJRdNK44Q==} engines: {node: '>=6.0'} - has-flag@3.0.0: - resolution: {integrity: sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==} - engines: {node: '>=4'} - hasown@2.0.2: resolution: {integrity: sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==} engines: {node: '>= 0.4'} @@ -1152,6 +1119,9 @@ packages: hast-util-from-html@2.0.1: resolution: {integrity: sha512-RXQBLMl9kjKVNkJTIO6bZyb2n+cUH8LFaSSzo82jiLT6Tfc+Pt7VQCS+/h3YwG4jaNE2TA2sdJisGWR+aJrp0g==} + hast-util-from-html@2.0.3: + resolution: {integrity: sha512-CUSRHXyKjzHov8yKsQjGOElXy/3EKpyX56ELnkHH34vDVw1N1XSQ1ZcAvTyAPtGqLTuKP/uxM+aLkSPqF/EtMw==} + hast-util-from-parse5@8.0.1: resolution: {integrity: sha512-Er/Iixbc7IEa7r/XLtuG52zoqn/b3Xng/w6aZQ0xGVxzhw5xUFxcRqdPzP6yFi/4HBYRaifaI5fQ1RH8n0ZeOQ==} @@ -1264,9 +1234,6 @@ packages: resolution: {integrity: sha512-+Pgi+vMuUNkJyExiMBt5IlFoMyKnr5zhJ4Uspz58WOhBF5QoIZkFyNHIbBAtHwzVAgk5RtndVNsDRN61/mmDqg==} engines: {node: '>=12'} - is-reference@3.0.2: - resolution: {integrity: sha512-v3rht/LgVcsdZa3O2Nqs+NMowLOxeOm7Ay9+/ARQ2F+qEoANRcqrjAZKGN0v8ymUetZGgkp26LTnGT7H0Qo9Pg==} - is-unicode-supported@1.3.0: resolution: {integrity: sha512-43r2mRvz+8JRIKnWJ+3j8JtjRKZ6GmjzfaE/qiBJnikNnYv/6bagRJ1kUhNk8R5EX/GkobD+r+sfxCPJsiKBLQ==} engines: {node: '>=12'} @@ -1366,8 +1333,8 @@ packages: lru-cache@5.1.1: resolution: {integrity: sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==} - magic-string@0.30.11: - resolution: {integrity: sha512-+Wri9p0QHMy+545hKww7YAu5NyzF8iomPL/RQazugQ9+Ez4Ic3mERMd8ZTX5rfK944j+560ZJi8iAwgak1Ac7A==} + magic-string@0.30.12: + resolution: {integrity: sha512-Ea8I3sQMVXr8JhN4z+H/d8zwo+tYDgHE9+5G4Wnrwhs0gaK9fXTKx0Tw5Xwsd/bCPTTZNRAdpyzvoeORe9LYpw==} magicast@0.3.5: resolution: {integrity: sha512-L0WhttDl+2BOsybvEOLK7fW3UA0OQ0IQ2d6Zl2x/a6vVRs3bAY0ECOSHHeL5jD+SbOpOCUEi0y1DgHEn9Qn1AQ==} @@ -1563,9 +1530,6 @@ packages: resolution: {integrity: sha512-eu38+hdgojoyq63s+yTpN4XMBdt5l8HhMhc4VKLO9KM5caLIBvUm4thi7fFaxyTmCKeNnXZ5pAlBwCUnhA09uw==} engines: {node: '>=10'} - ms@2.1.2: - resolution: {integrity: sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==} - ms@2.1.3: resolution: {integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==} @@ -1613,8 +1577,8 @@ packages: oniguruma-to-js@0.4.3: resolution: {integrity: sha512-X0jWUcAlxORhOqqBREgPMgnshB7ZGYszBNspP+tS9hPD3l13CdaXcHbgImoHUHlrvGx/7AvFEkTRhAGYh+jzjQ==} - ora@8.1.0: - resolution: {integrity: sha512-GQEkNkH/GHOhPFXcqZs3IDahXEQcQxsSjEkK4KvEEST4t7eNzoMjxTzef+EZ+JluDEV+Raoi3WQ2CflnRdSVnQ==} + ora@8.1.1: + resolution: {integrity: sha512-YWielGi1XzG1UTvOaCFaNgEnuhZVMSHYkW/FQ7UX8O26PtlpdM84c0f7wLPlkvx2RfiQmnzd61d/MGxmpQeJPw==} engines: {node: '>=18'} p-limit@2.3.0: @@ -1671,9 +1635,6 @@ packages: resolution: {integrity: sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA==} engines: {node: '>=16 || 14 >=14.18'} - periscopic@3.1.0: - resolution: {integrity: sha512-vKiQ8RRtkl9P+r/+oefh25C3fhybptkHKCZSPlcXiJux2tJF55GnEj3BVn4A5gKfq9NWWXXrxkHBwVPUfH0opw==} - picocolors@1.0.1: resolution: {integrity: sha512-anP1Z8qwhkbmu7MFP5iTt+wQKXgwzf7zTyGlcdzabySa9vd0Xt392U0rVmz9poOaBj0uHJKyyo9/upk0HrEQew==} @@ -1684,6 +1645,10 @@ packages: resolution: {integrity: sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==} engines: {node: '>=8.6'} + picomatch@4.0.2: + resolution: {integrity: sha512-M7BAV6Rlcy5u+m6oPhAPFgJTzAioX/6B0DxyvDlo9l8+T3nLKbrczg2WLUyzd45L8RqfUMyGPzekbMvX2Ldkwg==} + engines: {node: '>=12'} + pify@2.3.0: resolution: {integrity: sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==} engines: {node: '>=0.10.0'} @@ -1779,6 +1744,18 @@ packages: resolution: {integrity: sha512-yDMz9g+VaZkqBYS/ozoBJwaBhTbZo3UNYQHNRw1D3UFQB8oHB4uS/tAODO+ZLjGWmUbKnIlOWO+aaIiAxrUWHA==} engines: {node: '>= 14.16.0'} + recma-build-jsx@1.0.0: + resolution: {integrity: sha512-8GtdyqaBcDfva+GUKDr3nev3VpKAhup1+RvkMvUxURHpW7QyIvk9F5wz7Vzo06CEMSilw6uArgRqhpiUcWp8ew==} + + recma-jsx@1.0.0: + resolution: {integrity: sha512-5vwkv65qWwYxg+Atz95acp8DMu1JDSqdGkA2Of1j6rCreyFUE/gp15fC8MnGEuG1W68UKjM6x6+YTWIh7hZM/Q==} + + recma-parse@1.0.0: + resolution: {integrity: sha512-OYLsIGBB5Y5wjnSnQW6t3Xg7q3fQ7FWbw/vcXtORTnyaSFscOtABg+7Pnz6YZ6c27fG1/aN8CjfwoUEUIdwqWQ==} + + recma-stringify@1.0.0: + resolution: {integrity: sha512-cjwII1MdIIVloKvC9ErQ+OgAtwHBmcZ0Bg4ciz78FtbT8In39aAYbaA7zvxQ61xVMSPE8WxhLwLbhif4Js2C+g==} + regex@4.3.3: resolution: {integrity: sha512-r/AadFO7owAq1QJVeZ/nq9jNS1vyZt+6t1p/E59B56Rn2GCya+gr1KSyOzNL/er+r+B7phv5jG2xU2Nz1YkmJg==} @@ -1788,9 +1765,15 @@ packages: rehype-raw@7.0.0: resolution: {integrity: sha512-/aE8hCfKlQeA8LmyeyQvQF3eBiLRGNlfBJEvWH7ivp9sBqs7TNqBL5X3v157rM4IFETqDnIOO+z5M/biZbo9Ww==} + rehype-recma@1.0.0: + resolution: {integrity: sha512-lqA4rGUf1JmacCNWWZx0Wv1dHqMwxzsDWYMTowuplHF3xH0N/MmrZ/G3BDZnzAkRmxDadujCjaKM2hqYdCBOGw==} + rehype-stringify@10.0.0: resolution: {integrity: sha512-1TX1i048LooI9QoecrXy7nGFFbFSufxVRAfc6Y9YMRAi56l+oB0zP51mLSV312uRuvVLPV1opSlJmslozR1XHQ==} + rehype-stringify@10.0.1: + resolution: {integrity: sha512-k9ecfXHmIPuFVI61B9DeLPN0qFHfawM6RsuX48hoqlaKSF61RskNjSm1lI8PhBEM0MRdLxVVm4WmTqJQccH9mA==} + rehype@13.0.2: resolution: {integrity: sha512-j31mdaRFrwFRUIlxGeuPXXKWQxet52RBQRvCmzl5eCefn/KGbomK5GMHNMsOJf55fgo3qw5tST5neDuarDYR2A==} @@ -1806,6 +1789,9 @@ packages: remark-rehype@11.1.0: resolution: {integrity: sha512-z3tJrAs2kIs1AqIIy6pzHmAHlF1hWQ+OdY4/hv+Wxe35EhyLKcajL33iUEn3ScxtFox9nUvRufR/Zre8Q08H/g==} + remark-rehype@11.1.1: + resolution: {integrity: sha512-g/osARvjkBXb6Wo0XvAeXQohVta8i84ACbenPpoSsxTOQH/Ae0/RGP4WZgnMH5pMLpsj4FG7OHmcIcXxpza8eQ==} + remark-smartypants@3.0.2: resolution: {integrity: sha512-ILTWeOriIluwEvPjv67v7Blgrcx+LZOkAUVtKI3putuhlZm84FnqDORNXPPm+HY3NdZOMhyDwZ1E+eZB/Df5dA==} engines: {node: '>=16.0.0'} @@ -1892,8 +1878,8 @@ packages: shiki@1.10.3: resolution: {integrity: sha512-eneCLncGuvPdTutJuLyUGS8QNPAVFO5Trvld2wgEq1e002mwctAhJKeMGWtWVXOIEzmlcLRqcgPSorR6AVzOmQ==} - shiki@1.21.0: - resolution: {integrity: sha512-apCH5BoWTrmHDPGgg3RF8+HAAbEL/CdbYr8rMw7eIrdhCkZHdVGat5mMNlRtd1erNG01VPMIKHNQ0Pj2HMAiog==} + shiki@1.22.2: + resolution: {integrity: sha512-3IZau0NdGKXhH2bBlUk4w1IHNxPh6A5B2sUpyY+8utLu2j/h1QpFkAaUA1bAMxOWWGtTWcAh531vnS4NJKS/lA==} signal-exit@4.1.0: resolution: {integrity: sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==} @@ -1969,10 +1955,6 @@ packages: engines: {node: '>=16 || 14 >=14.17'} hasBin: true - supports-color@5.5.0: - resolution: {integrity: sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==} - engines: {node: '>=4'} - supports-preserve-symlinks-flag@1.0.0: resolution: {integrity: sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==} engines: {node: '>= 0.4'} @@ -1989,12 +1971,8 @@ packages: thenify@3.3.1: resolution: {integrity: sha512-RVZSIV5IG10Hk3enotrhvz0T9em6cyHBLkH/YAZuKqd8hRkKhSfCGIcP2KUY0EPxndzANBmNllzWPwak+bheSw==} - tinyexec@0.3.0: - resolution: {integrity: sha512-tVGE0mVJPGb0chKhqmsoosjsS+qUnJVGJpZgsHYQcGoPlG3B51R3PouqTgEGH2Dc9jjFyOqOpix6ZHNMXp1FZg==} - - to-fast-properties@2.0.0: - resolution: {integrity: sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog==} - engines: {node: '>=4'} + tinyexec@0.3.1: + resolution: {integrity: sha512-WiCJLEECkO18gwqIp6+hJg0//p23HXp4S+gGtAKu3mI2F2/sXC4FvHvXvB0zJVVaTPhx1/tOwdbRsa1sOBIKqQ==} to-regex-range@5.0.1: resolution: {integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==} @@ -2009,8 +1987,8 @@ packages: ts-interface-checker@0.1.13: resolution: {integrity: sha512-Y/arvbn+rrz3JCKl9C4kVNfTfSm2/mEp5FSz5EsZSANGPSlQrpRI5M4PKF+mJnE52jOO90PnPSc3Ur3bTQw0gA==} - tsconfck@3.1.3: - resolution: {integrity: sha512-ulNZP1SVpRDesxeMLON/LtWM8HIgAJEIVpVVhBM6gsmvQ8+Rh+ZG7FWGvHh7Ah3pRABwVJWklWCr/BTZSv0xnQ==} + tsconfck@3.1.4: + resolution: {integrity: sha512-kdqWFGVJqe+KGYvlSO9NIaWn9jT1Ny4oKVzAJsKii5eoE9snzTJzL4+MMVOMn+fikWGFmKEylcXL710V/kIPJQ==} engines: {node: ^18 || >=20} hasBin: true peerDependencies: @@ -2091,8 +2069,8 @@ packages: vfile@6.0.3: resolution: {integrity: sha512-KzIbH/9tXat2u30jf+smMwFCsno4wHVdNmzFyL+T/L3UGqqk6JKfVqOFOZEpZSHADH1k40ab6NUIXZq422ov3Q==} - vite@5.4.8: - resolution: {integrity: sha512-FqrItQ4DT1NC4zCUqMB4c4AZORMKIa0m8/URVCZ77OZ/QSNeJ54bU1vrFADbDsuwfIPcgknRkmqakQcgnL4GiQ==} + vite@5.4.10: + resolution: {integrity: sha512-1hvaPshuPUtxeQ0hsVH3Mud0ZanOLwVTneA1EgbAM5LhaZEqyPWGRQ7BtaMvUrTDeEaC8pxtj6a6jku3x4z6SQ==} engines: {node: ^18.0.0 || >=20.0.0} hasBin: true peerDependencies: @@ -2122,10 +2100,10 @@ packages: terser: optional: true - vitefu@1.0.2: - resolution: {integrity: sha512-0/iAvbXyM3RiPPJ4lyD4w6Mjgtf4ejTK6TPvTNG3H32PLwuT0N/ZjJLiXug7ETE/LWtTeHw9WRv7uX/tIKYyKg==} + vitefu@1.0.3: + resolution: {integrity: sha512-iKKfOMBHob2WxEJbqbJjHAkmYgvFDPhuqrO82om83S8RLk+17FtyMBfcyeH8GqD0ihShtkMW/zzJgiA51hCNCQ==} peerDependencies: - vite: ^3.0.0 || ^4.0.0 || ^5.0.0 + vite: ^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0-beta.0 peerDependenciesMeta: vite: optional: true @@ -2311,8 +2289,8 @@ packages: resolution: {integrity: sha512-b4JR1PFR10y1mKjhHY9LaGo6tmrgjit7hxVIeAmyMw3jegXR4dhYqLaQF5zMXZxY7tLpMyJeLjr1C4rLmkVe8g==} engines: {node: '>=12.20'} - zod-to-json-schema@3.23.3: - resolution: {integrity: sha512-TYWChTxKQbRJp5ST22o/Irt9KC5nj7CdBKYB/AosCRdj/wxEMvv4NNaj9XVUHDOIp53ZxArGhnw5HMZziPFjog==} + zod-to-json-schema@3.23.5: + resolution: {integrity: sha512-5wlSS0bXfF/BrL4jPAbz9da5hDlDptdEppYfe+x4eIJ7jioqKG9uUxOwPzqof09u/XeVdrgFu29lZi+8XNDJtA==} peerDependencies: zod: ^3.23.3 @@ -2375,21 +2353,21 @@ snapshots: transitivePeerDependencies: - typescript - '@astrojs/markdown-remark@5.2.0': + '@astrojs/markdown-remark@5.3.0': dependencies: '@astrojs/prism': 3.1.0 github-slugger: 2.0.0 - hast-util-from-html: 2.0.1 + hast-util-from-html: 2.0.3 hast-util-to-text: 4.0.2 import-meta-resolve: 4.1.0 mdast-util-definitions: 6.0.0 rehype-raw: 7.0.0 - rehype-stringify: 10.0.0 + rehype-stringify: 10.0.1 remark-gfm: 4.0.0 remark-parse: 11.0.0 - remark-rehype: 11.1.0 + remark-rehype: 11.1.1 remark-smartypants: 3.0.2 - shiki: 1.10.3 + shiki: 1.22.2 unified: 11.0.5 unist-util-remove-position: 5.0.0 unist-util-visit: 5.0.0 @@ -2398,12 +2376,12 @@ snapshots: transitivePeerDependencies: - supports-color - '@astrojs/mdx@3.1.7(astro@4.15.11(@types/node@22.3.0)(rollup@4.24.0)(typescript@5.5.3))': + '@astrojs/mdx@3.1.9(astro@4.16.10(@types/node@22.3.0)(rollup@4.24.0)(typescript@5.5.3))': dependencies: - '@astrojs/markdown-remark': 5.2.0 - '@mdx-js/mdx': 3.0.1 - acorn: 8.12.1 - astro: 4.15.11(@types/node@22.3.0)(rollup@4.24.0)(typescript@5.5.3) + '@astrojs/markdown-remark': 5.3.0 + '@mdx-js/mdx': 3.1.0(acorn@8.14.0) + acorn: 8.14.0 + astro: 4.16.10(@types/node@22.3.0)(rollup@4.24.0)(typescript@5.5.3) es-module-lexer: 1.5.4 estree-util-visit: 2.0.0 gray-matter: 4.0.3 @@ -2422,9 +2400,9 @@ snapshots: dependencies: prismjs: 1.29.0 - '@astrojs/tailwind@5.1.1(astro@4.15.11(@types/node@22.3.0)(rollup@4.24.0)(typescript@5.5.3))(tailwindcss@3.4.5)': + '@astrojs/tailwind@5.1.2(astro@4.16.10(@types/node@22.3.0)(rollup@4.24.0)(typescript@5.5.3))(tailwindcss@3.4.5)': dependencies: - astro: 4.15.11(@types/node@22.3.0)(rollup@4.24.0)(typescript@5.5.3) + astro: 4.16.10(@types/node@22.3.0)(rollup@4.24.0)(typescript@5.5.3) autoprefixer: 10.4.20(postcss@8.4.47) postcss: 8.4.47 postcss-load-config: 4.0.2(postcss@8.4.47) @@ -2448,25 +2426,26 @@ snapshots: dependencies: yaml: 2.5.1 - '@babel/code-frame@7.25.7': + '@babel/code-frame@7.26.2': dependencies: - '@babel/highlight': 7.25.7 - picocolors: 1.0.1 + '@babel/helper-validator-identifier': 7.25.9 + js-tokens: 4.0.0 + picocolors: 1.1.0 - '@babel/compat-data@7.25.7': {} + '@babel/compat-data@7.26.2': {} - '@babel/core@7.25.7': + '@babel/core@7.26.0': dependencies: '@ampproject/remapping': 2.3.0 - '@babel/code-frame': 7.25.7 - '@babel/generator': 7.25.7 - '@babel/helper-compilation-targets': 7.25.7 - '@babel/helper-module-transforms': 7.25.7(@babel/core@7.25.7) - '@babel/helpers': 7.25.7 - '@babel/parser': 7.25.7 - '@babel/template': 7.25.7 - '@babel/traverse': 7.25.7 - '@babel/types': 7.25.7 + '@babel/code-frame': 7.26.2 + '@babel/generator': 7.26.2 + '@babel/helper-compilation-targets': 7.25.9 + '@babel/helper-module-transforms': 7.26.0(@babel/core@7.26.0) + '@babel/helpers': 7.26.0 + '@babel/parser': 7.26.2 + '@babel/template': 7.25.9 + '@babel/traverse': 7.25.9 + '@babel/types': 7.26.0 convert-source-map: 2.0.0 debug: 4.3.7 gensync: 1.0.0-beta.2 @@ -2475,116 +2454,101 @@ snapshots: transitivePeerDependencies: - supports-color - '@babel/generator@7.25.7': + '@babel/generator@7.26.2': dependencies: - '@babel/types': 7.25.7 + '@babel/parser': 7.26.2 + '@babel/types': 7.26.0 '@jridgewell/gen-mapping': 0.3.5 '@jridgewell/trace-mapping': 0.3.25 jsesc: 3.0.2 - '@babel/helper-annotate-as-pure@7.25.7': + '@babel/helper-annotate-as-pure@7.25.9': dependencies: - '@babel/types': 7.25.7 + '@babel/types': 7.26.0 - '@babel/helper-compilation-targets@7.25.7': + '@babel/helper-compilation-targets@7.25.9': dependencies: - '@babel/compat-data': 7.25.7 - '@babel/helper-validator-option': 7.25.7 + '@babel/compat-data': 7.26.2 + '@babel/helper-validator-option': 7.25.9 browserslist: 4.24.0 lru-cache: 5.1.1 semver: 6.3.1 - '@babel/helper-module-imports@7.25.7': + '@babel/helper-module-imports@7.25.9': dependencies: - '@babel/traverse': 7.25.7 - '@babel/types': 7.25.7 + '@babel/traverse': 7.25.9 + '@babel/types': 7.26.0 transitivePeerDependencies: - supports-color - '@babel/helper-module-transforms@7.25.7(@babel/core@7.25.7)': + '@babel/helper-module-transforms@7.26.0(@babel/core@7.26.0)': dependencies: - '@babel/core': 7.25.7 - '@babel/helper-module-imports': 7.25.7 - '@babel/helper-simple-access': 7.25.7 - '@babel/helper-validator-identifier': 7.25.7 - '@babel/traverse': 7.25.7 + '@babel/core': 7.26.0 + '@babel/helper-module-imports': 7.25.9 + '@babel/helper-validator-identifier': 7.25.9 + '@babel/traverse': 7.25.9 transitivePeerDependencies: - supports-color - '@babel/helper-plugin-utils@7.25.7': {} + '@babel/helper-plugin-utils@7.25.9': {} - '@babel/helper-simple-access@7.25.7': + '@babel/helper-string-parser@7.25.9': {} + + '@babel/helper-validator-identifier@7.25.9': {} + + '@babel/helper-validator-option@7.25.9': {} + + '@babel/helpers@7.26.0': dependencies: - '@babel/traverse': 7.25.7 - '@babel/types': 7.25.7 - transitivePeerDependencies: - - supports-color - - '@babel/helper-string-parser@7.25.7': {} - - '@babel/helper-validator-identifier@7.25.7': {} - - '@babel/helper-validator-option@7.25.7': {} - - '@babel/helpers@7.25.7': - dependencies: - '@babel/template': 7.25.7 - '@babel/types': 7.25.7 - - '@babel/highlight@7.25.7': - dependencies: - '@babel/helper-validator-identifier': 7.25.7 - chalk: 2.4.2 - js-tokens: 4.0.0 - picocolors: 1.0.1 - - '@babel/parser@7.24.8': - dependencies: - '@babel/types': 7.25.7 + '@babel/template': 7.25.9 + '@babel/types': 7.26.0 '@babel/parser@7.25.7': dependencies: - '@babel/types': 7.25.7 + '@babel/types': 7.26.0 - '@babel/plugin-syntax-jsx@7.25.7(@babel/core@7.25.7)': + '@babel/parser@7.26.2': dependencies: - '@babel/core': 7.25.7 - '@babel/helper-plugin-utils': 7.25.7 + '@babel/types': 7.26.0 - '@babel/plugin-transform-react-jsx@7.25.7(@babel/core@7.25.7)': + '@babel/plugin-syntax-jsx@7.25.9(@babel/core@7.26.0)': dependencies: - '@babel/core': 7.25.7 - '@babel/helper-annotate-as-pure': 7.25.7 - '@babel/helper-module-imports': 7.25.7 - '@babel/helper-plugin-utils': 7.25.7 - '@babel/plugin-syntax-jsx': 7.25.7(@babel/core@7.25.7) - '@babel/types': 7.25.7 + '@babel/core': 7.26.0 + '@babel/helper-plugin-utils': 7.25.9 + + '@babel/plugin-transform-react-jsx@7.25.9(@babel/core@7.26.0)': + dependencies: + '@babel/core': 7.26.0 + '@babel/helper-annotate-as-pure': 7.25.9 + '@babel/helper-module-imports': 7.25.9 + '@babel/helper-plugin-utils': 7.25.9 + '@babel/plugin-syntax-jsx': 7.25.9(@babel/core@7.26.0) + '@babel/types': 7.26.0 transitivePeerDependencies: - supports-color - '@babel/template@7.25.7': + '@babel/template@7.25.9': dependencies: - '@babel/code-frame': 7.25.7 - '@babel/parser': 7.25.7 - '@babel/types': 7.25.7 + '@babel/code-frame': 7.26.2 + '@babel/parser': 7.26.2 + '@babel/types': 7.26.0 - '@babel/traverse@7.25.7': + '@babel/traverse@7.25.9': dependencies: - '@babel/code-frame': 7.25.7 - '@babel/generator': 7.25.7 - '@babel/parser': 7.25.7 - '@babel/template': 7.25.7 - '@babel/types': 7.25.7 + '@babel/code-frame': 7.26.2 + '@babel/generator': 7.26.2 + '@babel/parser': 7.26.2 + '@babel/template': 7.25.9 + '@babel/types': 7.26.0 debug: 4.3.7 globals: 11.12.0 transitivePeerDependencies: - supports-color - '@babel/types@7.25.7': + '@babel/types@7.26.0': dependencies: - '@babel/helper-string-parser': 7.25.7 - '@babel/helper-validator-identifier': 7.25.7 - to-fast-properties: 2.0.0 + '@babel/helper-string-parser': 7.25.9 + '@babel/helper-validator-identifier': 7.25.9 '@emmetio/abbreviation@2.3.3': dependencies: @@ -2784,22 +2748,23 @@ snapshots: '@jridgewell/resolve-uri': 3.1.2 '@jridgewell/sourcemap-codec': 1.5.0 - '@mdx-js/mdx@3.0.1': + '@mdx-js/mdx@3.1.0(acorn@8.14.0)': dependencies: - '@types/estree': 1.0.5 + '@types/estree': 1.0.6 '@types/estree-jsx': 1.0.5 '@types/hast': 3.0.4 '@types/mdx': 2.0.13 collapse-white-space: 2.1.0 devlop: 1.1.0 - estree-util-build-jsx: 3.0.1 estree-util-is-identifier-name: 3.0.0 - estree-util-to-js: 2.0.0 + estree-util-scope: 1.0.0 estree-walker: 3.0.3 - hast-util-to-estree: 3.1.0 hast-util-to-jsx-runtime: 2.3.0 markdown-extensions: 2.0.0 - periscopic: 3.1.0 + recma-build-jsx: 1.0.0 + recma-jsx: 1.0.0(acorn@8.14.0) + recma-stringify: 1.0.0 + rehype-recma: 1.0.0 remark-mdx: 3.0.1 remark-parse: 11.0.0 remark-rehype: 11.1.0 @@ -2810,6 +2775,7 @@ snapshots: unist-util-visit: 5.0.0 vfile: 6.0.3 transitivePeerDependencies: + - acorn - supports-color '@nodelib/fs.scandir@2.1.5': @@ -2829,11 +2795,11 @@ snapshots: '@pkgjs/parseargs@0.11.0': optional: true - '@rollup/pluginutils@5.1.2(rollup@4.24.0)': + '@rollup/pluginutils@5.1.3(rollup@4.24.0)': dependencies: - '@types/estree': 1.0.5 + '@types/estree': 1.0.6 estree-walker: 2.0.2 - picomatch: 2.3.1 + picomatch: 4.0.2 optionalDependencies: rollup: 4.24.0 @@ -2889,61 +2855,61 @@ snapshots: dependencies: '@types/hast': 3.0.4 - '@shikijs/core@1.21.0': + '@shikijs/core@1.22.2': dependencies: - '@shikijs/engine-javascript': 1.21.0 - '@shikijs/engine-oniguruma': 1.21.0 - '@shikijs/types': 1.21.0 - '@shikijs/vscode-textmate': 9.2.2 + '@shikijs/engine-javascript': 1.22.2 + '@shikijs/engine-oniguruma': 1.22.2 + '@shikijs/types': 1.22.2 + '@shikijs/vscode-textmate': 9.3.0 '@types/hast': 3.0.4 hast-util-to-html: 9.0.3 - '@shikijs/engine-javascript@1.21.0': + '@shikijs/engine-javascript@1.22.2': dependencies: - '@shikijs/types': 1.21.0 - '@shikijs/vscode-textmate': 9.2.2 + '@shikijs/types': 1.22.2 + '@shikijs/vscode-textmate': 9.3.0 oniguruma-to-js: 0.4.3 - '@shikijs/engine-oniguruma@1.21.0': + '@shikijs/engine-oniguruma@1.22.2': dependencies: - '@shikijs/types': 1.21.0 - '@shikijs/vscode-textmate': 9.2.2 + '@shikijs/types': 1.22.2 + '@shikijs/vscode-textmate': 9.3.0 '@shikijs/transformers@1.10.3': dependencies: shiki: 1.10.3 - '@shikijs/types@1.21.0': + '@shikijs/types@1.22.2': dependencies: - '@shikijs/vscode-textmate': 9.2.2 + '@shikijs/vscode-textmate': 9.3.0 '@types/hast': 3.0.4 - '@shikijs/vscode-textmate@9.2.2': {} + '@shikijs/vscode-textmate@9.3.0': {} '@types/acorn@4.0.6': dependencies: - '@types/estree': 1.0.5 + '@types/estree': 1.0.6 '@types/babel__core@7.20.5': dependencies: - '@babel/parser': 7.24.8 - '@babel/types': 7.25.7 + '@babel/parser': 7.25.7 + '@babel/types': 7.26.0 '@types/babel__generator': 7.6.8 '@types/babel__template': 7.4.4 '@types/babel__traverse': 7.20.6 '@types/babel__generator@7.6.8': dependencies: - '@babel/types': 7.25.7 + '@babel/types': 7.26.0 '@types/babel__template@7.4.4': dependencies: - '@babel/parser': 7.24.8 - '@babel/types': 7.25.7 + '@babel/parser': 7.25.7 + '@babel/types': 7.26.0 '@types/babel__traverse@7.20.6': dependencies: - '@babel/types': 7.25.7 + '@babel/types': 7.26.0 '@types/cookie@0.6.0': {} @@ -2953,9 +2919,7 @@ snapshots: '@types/estree-jsx@1.0.5': dependencies: - '@types/estree': 1.0.5 - - '@types/estree@1.0.5': {} + '@types/estree': 1.0.6 '@types/estree@1.0.6': {} @@ -3035,11 +2999,11 @@ snapshots: '@vscode/l10n@0.0.18': {} - acorn-jsx@5.3.2(acorn@8.12.1): + acorn-jsx@5.3.2(acorn@8.14.0): dependencies: - acorn: 8.12.1 + acorn: 8.14.0 - acorn@8.12.1: {} + acorn@8.14.0: {} ajv@8.17.1: dependencies: @@ -3056,10 +3020,6 @@ snapshots: ansi-regex@6.0.1: {} - ansi-styles@3.2.1: - dependencies: - color-convert: 1.9.3 - ansi-styles@4.3.0: dependencies: color-convert: 2.0.1 @@ -3087,27 +3047,27 @@ snapshots: astring@1.8.6: {} - astro@4.15.11(@types/node@22.3.0)(rollup@4.24.0)(typescript@5.5.3): + astro@4.16.10(@types/node@22.3.0)(rollup@4.24.0)(typescript@5.5.3): dependencies: '@astrojs/compiler': 2.10.3 '@astrojs/internal-helpers': 0.4.1 - '@astrojs/markdown-remark': 5.2.0 + '@astrojs/markdown-remark': 5.3.0 '@astrojs/telemetry': 3.1.0 - '@babel/core': 7.25.7 - '@babel/plugin-transform-react-jsx': 7.25.7(@babel/core@7.25.7) - '@babel/types': 7.25.7 + '@babel/core': 7.26.0 + '@babel/plugin-transform-react-jsx': 7.25.9(@babel/core@7.26.0) + '@babel/types': 7.26.0 '@oslojs/encoding': 1.1.0 - '@rollup/pluginutils': 5.1.2(rollup@4.24.0) + '@rollup/pluginutils': 5.1.3(rollup@4.24.0) '@types/babel__core': 7.20.5 '@types/cookie': 0.6.0 - acorn: 8.12.1 + acorn: 8.14.0 aria-query: 5.3.2 axobject-query: 4.1.0 boxen: 8.0.1 ci-info: 4.0.0 clsx: 2.1.1 common-ancestor-path: 1.0.1 - cookie: 0.6.0 + cookie: 0.7.2 cssesc: 3.0.0 debug: 4.3.7 deterministic-object-hash: 2.0.2 @@ -3119,7 +3079,6 @@ snapshots: esbuild: 0.21.5 estree-walker: 3.0.3 fast-glob: 3.3.2 - fastq: 1.17.1 flattie: 1.1.1 github-slugger: 2.0.0 gray-matter: 4.0.3 @@ -3127,32 +3086,30 @@ snapshots: http-cache-semantics: 4.1.1 js-yaml: 4.1.0 kleur: 4.1.5 - magic-string: 0.30.11 + magic-string: 0.30.12 magicast: 0.3.5 micromatch: 4.0.8 mrmime: 2.0.0 neotraverse: 0.6.18 - ora: 8.1.0 + ora: 8.1.1 p-limit: 6.1.0 p-queue: 8.0.1 preferred-pm: 4.0.0 prompts: 2.4.2 rehype: 13.0.2 semver: 7.6.3 - shiki: 1.21.0 - string-width: 7.2.0 - strip-ansi: 7.1.0 - tinyexec: 0.3.0 - tsconfck: 3.1.3(typescript@5.5.3) + shiki: 1.22.2 + tinyexec: 0.3.1 + tsconfck: 3.1.4(typescript@5.5.3) unist-util-visit: 5.0.0 vfile: 6.0.3 - vite: 5.4.8(@types/node@22.3.0) - vitefu: 1.0.2(vite@5.4.8(@types/node@22.3.0)) + vite: 5.4.10(@types/node@22.3.0) + vitefu: 1.0.3(vite@5.4.10(@types/node@22.3.0)) which-pm: 3.0.0 xxhash-wasm: 1.0.2 yargs-parser: 21.1.1 zod: 3.23.8 - zod-to-json-schema: 3.23.3(zod@3.23.8) + zod-to-json-schema: 3.23.5(zod@3.23.8) zod-to-ts: 1.2.0(typescript@5.5.3)(zod@3.23.8) optionalDependencies: sharp: 0.33.4 @@ -3175,7 +3132,7 @@ snapshots: caniuse-lite: 1.0.30001667 fraction.js: 4.3.7 normalize-range: 0.1.2 - picocolors: 1.0.1 + picocolors: 1.1.0 postcss: 8.4.47 postcss-value-parser: 4.2.0 @@ -3223,12 +3180,6 @@ snapshots: ccount@2.0.1: {} - chalk@2.4.2: - dependencies: - ansi-styles: 3.2.1 - escape-string-regexp: 1.0.5 - supports-color: 5.5.0 - chalk@5.3.0: {} character-entities-html4@2.1.0: {} @@ -3275,16 +3226,10 @@ snapshots: collapse-white-space@2.1.0: {} - color-convert@1.9.3: - dependencies: - color-name: 1.1.3 - color-convert@2.0.1: dependencies: color-name: 1.1.4 - color-name@1.1.3: {} - color-name@1.1.4: {} color-string@1.9.1: @@ -3307,7 +3252,7 @@ snapshots: convert-source-map@2.0.0: {} - cookie@0.6.0: {} + cookie@0.7.2: {} cross-spawn@7.0.3: dependencies: @@ -3317,10 +3262,6 @@ snapshots: cssesc@3.0.0: {} - debug@4.3.5: - dependencies: - ms: 2.1.2 - debug@4.3.7: dependencies: ms: 2.1.3 @@ -3371,6 +3312,20 @@ snapshots: es-module-lexer@1.5.4: {} + esast-util-from-estree@2.0.0: + dependencies: + '@types/estree-jsx': 1.0.5 + devlop: 1.1.0 + estree-util-visit: 2.0.0 + unist-util-position-from-estree: 2.0.0 + + esast-util-from-js@2.0.1: + dependencies: + '@types/estree-jsx': 1.0.5 + acorn: 8.14.0 + esast-util-from-estree: 2.0.0 + vfile-message: 4.0.2 + esbuild@0.21.5: optionalDependencies: '@esbuild/aix-ppc64': 0.21.5 @@ -3399,15 +3354,13 @@ snapshots: escalade@3.1.2: {} - escape-string-regexp@1.0.5: {} - escape-string-regexp@5.0.0: {} esprima@4.0.1: {} estree-util-attach-comments@3.0.0: dependencies: - '@types/estree': 1.0.5 + '@types/estree': 1.0.6 estree-util-build-jsx@3.0.1: dependencies: @@ -3418,6 +3371,11 @@ snapshots: estree-util-is-identifier-name@3.0.0: {} + estree-util-scope@1.0.0: + dependencies: + '@types/estree': 1.0.6 + devlop: 1.1.0 + estree-util-to-js@2.0.0: dependencies: '@types/estree-jsx': 1.0.5 @@ -3433,7 +3391,7 @@ snapshots: estree-walker@3.0.3: dependencies: - '@types/estree': 1.0.5 + '@types/estree': 1.0.6 eventemitter3@5.0.1: {} @@ -3525,8 +3483,6 @@ snapshots: section-matter: 1.0.0 strip-bom-string: 1.0.0 - has-flag@3.0.0: {} - hasown@2.0.2: dependencies: function-bind: 1.1.2 @@ -3540,6 +3496,15 @@ snapshots: vfile: 6.0.3 vfile-message: 4.0.2 + hast-util-from-html@2.0.3: + dependencies: + '@types/hast': 3.0.4 + devlop: 1.1.0 + hast-util-from-parse5: 8.0.1 + parse5: 7.1.2 + vfile: 6.0.3 + vfile-message: 4.0.2 + hast-util-from-parse5@8.0.1: dependencies: '@types/hast': 3.0.4 @@ -3577,7 +3542,7 @@ snapshots: hast-util-to-estree@3.1.0: dependencies: - '@types/estree': 1.0.5 + '@types/estree': 1.0.6 '@types/estree-jsx': 1.0.5 '@types/hast': 3.0.4 comma-separated-tokens: 2.0.3 @@ -3612,7 +3577,7 @@ snapshots: hast-util-to-jsx-runtime@2.3.0: dependencies: - '@types/estree': 1.0.5 + '@types/estree': 1.0.6 '@types/hast': 3.0.4 '@types/unist': 3.0.2 comma-separated-tokens: 2.0.3 @@ -3715,10 +3680,6 @@ snapshots: is-plain-obj@4.1.0: {} - is-reference@3.0.2: - dependencies: - '@types/estree': 1.0.5 - is-unicode-supported@1.3.0: {} is-unicode-supported@2.0.0: {} @@ -3796,15 +3757,15 @@ snapshots: dependencies: yallist: 3.1.1 - magic-string@0.30.11: + magic-string@0.30.12: dependencies: '@jridgewell/sourcemap-codec': 1.5.0 magicast@0.3.5: dependencies: '@babel/parser': 7.25.7 - '@babel/types': 7.25.7 - source-map-js: 1.2.0 + '@babel/types': 7.26.0 + source-map-js: 1.2.1 markdown-extensions@2.0.0: {} @@ -4060,7 +4021,7 @@ snapshots: micromark-extension-mdx-expression@3.0.0: dependencies: - '@types/estree': 1.0.5 + '@types/estree': 1.0.6 devlop: 1.1.0 micromark-factory-mdx-expression: 2.0.1 micromark-factory-space: 2.0.0 @@ -4072,7 +4033,7 @@ snapshots: micromark-extension-mdx-jsx@3.0.0: dependencies: '@types/acorn': 4.0.6 - '@types/estree': 1.0.5 + '@types/estree': 1.0.6 devlop: 1.1.0 estree-util-is-identifier-name: 3.0.0 micromark-factory-mdx-expression: 2.0.1 @@ -4088,7 +4049,7 @@ snapshots: micromark-extension-mdxjs-esm@3.0.0: dependencies: - '@types/estree': 1.0.5 + '@types/estree': 1.0.6 devlop: 1.1.0 micromark-core-commonmark: 2.0.1 micromark-util-character: 2.1.0 @@ -4100,8 +4061,8 @@ snapshots: micromark-extension-mdxjs@3.0.0: dependencies: - acorn: 8.12.1 - acorn-jsx: 5.3.2(acorn@8.12.1) + acorn: 8.14.0 + acorn-jsx: 5.3.2(acorn@8.14.0) micromark-extension-mdx-expression: 3.0.0 micromark-extension-mdx-jsx: 3.0.0 micromark-extension-mdx-md: 2.0.0 @@ -4124,7 +4085,7 @@ snapshots: micromark-factory-mdx-expression@2.0.1: dependencies: - '@types/estree': 1.0.5 + '@types/estree': 1.0.6 devlop: 1.1.0 micromark-util-character: 2.1.0 micromark-util-events-to-acorn: 2.0.2 @@ -4188,7 +4149,7 @@ snapshots: micromark-util-events-to-acorn@2.0.2: dependencies: '@types/acorn': 4.0.6 - '@types/estree': 1.0.5 + '@types/estree': 1.0.6 '@types/unist': 3.0.2 devlop: 1.1.0 estree-util-visit: 2.0.0 @@ -4226,7 +4187,7 @@ snapshots: micromark@4.0.0: dependencies: '@types/debug': 4.1.12 - debug: 4.3.5 + debug: 4.3.7 decode-named-character-reference: 1.0.2 devlop: 1.1.0 micromark-core-commonmark: 2.0.1 @@ -4265,8 +4226,6 @@ snapshots: mrmime@2.0.0: {} - ms@2.1.2: {} - ms@2.1.3: {} muggle-string@0.4.1: {} @@ -4303,7 +4262,7 @@ snapshots: dependencies: regex: 4.3.3 - ora@8.1.0: + ora@8.1.1: dependencies: chalk: 5.3.0 cli-cursor: 5.0.0 @@ -4375,18 +4334,14 @@ snapshots: lru-cache: 10.4.3 minipass: 7.1.2 - periscopic@3.1.0: - dependencies: - '@types/estree': 1.0.5 - estree-walker: 3.0.3 - is-reference: 3.0.2 - picocolors@1.0.1: {} picocolors@1.1.0: {} picomatch@2.3.1: {} + picomatch@4.0.2: {} + pify@2.3.0: {} pify@4.0.1: {} @@ -4477,6 +4432,36 @@ snapshots: readdirp@4.0.2: {} + recma-build-jsx@1.0.0: + dependencies: + '@types/estree': 1.0.6 + estree-util-build-jsx: 3.0.1 + vfile: 6.0.3 + + recma-jsx@1.0.0(acorn@8.14.0): + dependencies: + acorn-jsx: 5.3.2(acorn@8.14.0) + estree-util-to-js: 2.0.0 + recma-parse: 1.0.0 + recma-stringify: 1.0.0 + unified: 11.0.5 + transitivePeerDependencies: + - acorn + + recma-parse@1.0.0: + dependencies: + '@types/estree': 1.0.6 + esast-util-from-js: 2.0.1 + unified: 11.0.5 + vfile: 6.0.3 + + recma-stringify@1.0.0: + dependencies: + '@types/estree': 1.0.6 + estree-util-to-js: 2.0.0 + unified: 11.0.5 + vfile: 6.0.3 + regex@4.3.3: {} rehype-parse@9.0.0: @@ -4491,12 +4476,26 @@ snapshots: hast-util-raw: 9.0.4 vfile: 6.0.3 + rehype-recma@1.0.0: + dependencies: + '@types/estree': 1.0.6 + '@types/hast': 3.0.4 + hast-util-to-estree: 3.1.0 + transitivePeerDependencies: + - supports-color + rehype-stringify@10.0.0: dependencies: '@types/hast': 3.0.4 hast-util-to-html: 9.0.3 unified: 11.0.5 + rehype-stringify@10.0.1: + dependencies: + '@types/hast': 3.0.4 + hast-util-to-html: 9.0.3 + unified: 11.0.5 + rehype@13.0.2: dependencies: '@types/hast': 3.0.4 @@ -4539,6 +4538,14 @@ snapshots: unified: 11.0.5 vfile: 6.0.3 + remark-rehype@11.1.1: + dependencies: + '@types/hast': 3.0.4 + '@types/mdast': 4.0.4 + mdast-util-to-hast: 13.2.0 + unified: 11.0.5 + vfile: 6.0.3 + remark-smartypants@3.0.2: dependencies: retext: 9.0.0 @@ -4673,13 +4680,13 @@ snapshots: '@shikijs/core': 1.10.3 '@types/hast': 3.0.4 - shiki@1.21.0: + shiki@1.22.2: dependencies: - '@shikijs/core': 1.21.0 - '@shikijs/engine-javascript': 1.21.0 - '@shikijs/engine-oniguruma': 1.21.0 - '@shikijs/types': 1.21.0 - '@shikijs/vscode-textmate': 9.2.2 + '@shikijs/core': 1.22.2 + '@shikijs/engine-javascript': 1.22.2 + '@shikijs/engine-oniguruma': 1.22.2 + '@shikijs/types': 1.22.2 + '@shikijs/vscode-textmate': 9.3.0 '@types/hast': 3.0.4 signal-exit@4.1.0: {} @@ -4756,10 +4763,6 @@ snapshots: pirates: 4.0.6 ts-interface-checker: 0.1.13 - supports-color@5.5.0: - dependencies: - has-flag: 3.0.0 - supports-preserve-symlinks-flag@1.0.0: {} tailwindcss@3.4.5: @@ -4797,9 +4800,7 @@ snapshots: dependencies: any-promise: 1.3.0 - tinyexec@0.3.0: {} - - to-fast-properties@2.0.0: {} + tinyexec@0.3.1: {} to-regex-range@5.0.1: dependencies: @@ -4811,7 +4812,7 @@ snapshots: ts-interface-checker@0.1.13: {} - tsconfck@3.1.3(typescript@5.5.3): + tsconfck@3.1.4(typescript@5.5.3): optionalDependencies: typescript: 5.5.3 @@ -4890,7 +4891,7 @@ snapshots: dependencies: browserslist: 4.24.0 escalade: 3.1.2 - picocolors: 1.0.1 + picocolors: 1.1.0 util-deprecate@1.0.2: {} @@ -4909,7 +4910,7 @@ snapshots: '@types/unist': 3.0.2 vfile-message: 4.0.2 - vite@5.4.8(@types/node@22.3.0): + vite@5.4.10(@types/node@22.3.0): dependencies: esbuild: 0.21.5 postcss: 8.4.47 @@ -4918,9 +4919,9 @@ snapshots: '@types/node': 22.3.0 fsevents: 2.3.3 - vitefu@1.0.2(vite@5.4.8(@types/node@22.3.0)): + vitefu@1.0.3(vite@5.4.10(@types/node@22.3.0)): optionalDependencies: - vite: 5.4.8(@types/node@22.3.0) + vite: 5.4.10(@types/node@22.3.0) volar-service-css@0.0.61(@volar/language-service@2.4.5): dependencies: @@ -5108,7 +5109,7 @@ snapshots: yocto-queue@1.1.1: {} - zod-to-json-schema@3.23.3(zod@3.23.8): + zod-to-json-schema@3.23.5(zod@3.23.8): dependencies: zod: 3.23.8 diff --git a/public/blog.css b/public/blog.css index cc6720e..b470b9f 100644 --- a/public/blog.css +++ b/public/blog.css @@ -74,6 +74,10 @@ pre.astro-code>code .line::before { margin-bottom: 0.5rem; } +#blog ul { + padding-left: 1rem; +} + @media (prefers-color-scheme: dark) { .astro-code { diff --git a/public/img/blog/es/osm/01.jpg b/public/img/blog/es/osm/01.jpg new file mode 100644 index 0000000..ca2561a Binary files /dev/null and b/public/img/blog/es/osm/01.jpg differ diff --git a/public/img/blog/es/osm/02.jpg b/public/img/blog/es/osm/02.jpg new file mode 100644 index 0000000..4b76424 Binary files /dev/null and b/public/img/blog/es/osm/02.jpg differ diff --git a/public/img/blog/es/osm/03.jpg b/public/img/blog/es/osm/03.jpg new file mode 100644 index 0000000..da701d0 Binary files /dev/null and b/public/img/blog/es/osm/03.jpg differ diff --git a/public/img/blog/es/osm/04.jpg b/public/img/blog/es/osm/04.jpg new file mode 100644 index 0000000..3f7a28d Binary files /dev/null and b/public/img/blog/es/osm/04.jpg differ diff --git a/public/img/blog/es/osm/05.jpg b/public/img/blog/es/osm/05.jpg new file mode 100644 index 0000000..73e7976 Binary files /dev/null and b/public/img/blog/es/osm/05.jpg differ diff --git a/public/img/blog/es/osm/06.jpg b/public/img/blog/es/osm/06.jpg new file mode 100644 index 0000000..aa9fa26 Binary files /dev/null and b/public/img/blog/es/osm/06.jpg differ diff --git a/public/img/blog/es/osm/07.jpg b/public/img/blog/es/osm/07.jpg new file mode 100644 index 0000000..67b70c1 Binary files /dev/null and b/public/img/blog/es/osm/07.jpg differ diff --git a/public/img/blog/es/osm/08.jpg b/public/img/blog/es/osm/08.jpg new file mode 100644 index 0000000..7db2b64 Binary files /dev/null and b/public/img/blog/es/osm/08.jpg differ diff --git a/public/img/blog/es/osm/09.jpg b/public/img/blog/es/osm/09.jpg new file mode 100644 index 0000000..1b930a8 Binary files /dev/null and b/public/img/blog/es/osm/09.jpg differ diff --git a/public/img/blog/es/osm/10.jpg b/public/img/blog/es/osm/10.jpg new file mode 100644 index 0000000..6e2611f Binary files /dev/null and b/public/img/blog/es/osm/10.jpg differ diff --git a/public/img/blog/es/osm/11.jpg b/public/img/blog/es/osm/11.jpg new file mode 100644 index 0000000..0851329 Binary files /dev/null and b/public/img/blog/es/osm/11.jpg differ diff --git a/public/img/blog/es/osm/11.jpg~ b/public/img/blog/es/osm/11.jpg~ new file mode 100644 index 0000000..9c58d60 Binary files /dev/null and b/public/img/blog/es/osm/11.jpg~ differ diff --git a/public/img/blog/es/osm/12.jpg b/public/img/blog/es/osm/12.jpg new file mode 100644 index 0000000..c6016bb Binary files /dev/null and b/public/img/blog/es/osm/12.jpg differ diff --git a/public/img/blog/es/osm/13.jpg b/public/img/blog/es/osm/13.jpg new file mode 100644 index 0000000..6e1b67d Binary files /dev/null and b/public/img/blog/es/osm/13.jpg differ diff --git a/public/img/blog/es/osm/14.jpg b/public/img/blog/es/osm/14.jpg new file mode 100644 index 0000000..5d32db5 Binary files /dev/null and b/public/img/blog/es/osm/14.jpg differ diff --git a/public/img/blog/es/osm/15.jpg b/public/img/blog/es/osm/15.jpg new file mode 100644 index 0000000..777c946 Binary files /dev/null and b/public/img/blog/es/osm/15.jpg differ diff --git a/public/img/blog/es/osm/16.jpg b/public/img/blog/es/osm/16.jpg new file mode 100644 index 0000000..2ca5b3a Binary files /dev/null and b/public/img/blog/es/osm/16.jpg differ diff --git a/public/img/blog/es/osm/17.jpg b/public/img/blog/es/osm/17.jpg new file mode 100644 index 0000000..65f3ccb Binary files /dev/null and b/public/img/blog/es/osm/17.jpg differ diff --git a/public/img/blog/es/osm/18.jpg b/public/img/blog/es/osm/18.jpg new file mode 100644 index 0000000..c84d2f4 Binary files /dev/null and b/public/img/blog/es/osm/18.jpg differ diff --git a/public/img/blog/es/osm/19.jpg b/public/img/blog/es/osm/19.jpg new file mode 100644 index 0000000..94eb41e Binary files /dev/null and b/public/img/blog/es/osm/19.jpg differ diff --git a/public/img/blog/es/osm/20.jpg b/public/img/blog/es/osm/20.jpg new file mode 100644 index 0000000..a46f14e Binary files /dev/null and b/public/img/blog/es/osm/20.jpg differ diff --git a/src/pages/blog/es/osm-maps.md b/src/pages/blog/es/osm-maps.md new file mode 100644 index 0000000..5ffb9be --- /dev/null +++ b/src/pages/blog/es/osm-maps.md @@ -0,0 +1,345 @@ +--- +layout: ../../../layouts/BlogLayoutEs.astro +title: Como crear/utilizar mapas online sin pagar a Google +description: | + Esta guia detalla todo el proceso para crear tu propio + Google maps, sin pagar 1 centavo. +pubDate: "2024-11-10" +tags: ["mapas", "maps", "google maps", "openstreetmaps", "osm", "docker", "go"] +image: + url: "/img/blog/es/osm/01.jpg" + alt: "Mapa del centro de Arequipa-Perú" + caption: "Ejemplo de un mapa de Arequipa, generado por mi" +--- + + +El desarrollo de muchas aplicaciones involucra ubicar cosas en un mapa. +Hoy en dia, pareciera que la única forma de hacerlo es con Google Maps, +pero utilizarlo en una aplicación mediana a grande tiene un coste +inmenso. + +Pensando en eso, y queriendo hacer un [mapa con todas las rutas de combi +de Arequipa](https://combi.araozu.dev/), pense que en vez de pagarle a +Google podría utilizar recursos gratis. Y así es como me adentré +en el mundo de mapas online. + +Este blog contiene imágenes y datos de +[© OpenStreenMap y sus colaboradores.](https://www.openstreetmap.org/copyright) + + +## Requisitos + +Esto es todo lo que utilizo para crear los mapas. En particular +Linux. Puede que esta guia funcione en Windows, puede que no. + +- Cualquier linux reciente. Yo utilizo arch (btw). +- Docker y docker compose +- El [lenguaje de programación Go](https://go.dev) instalado. +- Conocimiento básico de la terminal +- Conocimiento básico de Docker +- (opcional) conocimientos de un editor de texto para terminal: nano/vi/vim +- (opcional) conocimiento de servidores como apache/nginx + + + +## Teoría: Tiles + +Existen varias formas de mostrar mapas, pero la más común es utilizando +algo llamado "tiles". Un **tile** es una imagen de una sección del mapa. + +Por ejemplo, a continuación muestro una imagen de un mapa, y despues la misma +imagen donde se muestra la división de los tiles. + +![Mapa del centro de Arequipa](/img/blog/es/osm/02.jpg) + +![Mapa del centro de Arequipa con divisiones para los tiles](/img/blog/es/osm/03.jpg) + +Cada "cuadrado" es un tile. También existen formas de cómo codificar +estos tiles, pero generalmente son imágenes png o jpg. + +Si abres la consola de una página con mapas, vas a pestaña Red +y mueves el mapa, verás que se hacen peticiones para obtener estos tiles. + +![Petición de tiles en combi.araozu.dev](/img/blog/es/osm/04.jpg) + +Así que se podría decir que un mapa es una cuadrícula de imágenes. + + + + +Como dato adicional, cada tile es una imagen png por lo general, +y un mapa tiene miles de millones de tiles. Cada imagen png pesa alrededor +de 100KiB, así que almacenar todas esas imágenes y servirlas tiene un costo. +Costo de almacenamiento y costo de ancho de banda. + +[Tiles en Wikipedia inglés.](https://en.wikipedia.org/wiki/Tiled_web_map) + + +## Teoría: Niveles (layers) + +También, los mapas tienen varios niveles de zoom: + +![Arequipa, nivel 1](/img/blog/es/osm/05.jpg) + +![Arequipa, nivel 2](/img/blog/es/osm/06.jpg) + +Estos niveles van del 0 al 22. El nivel 0 es un único tile que muestra +todo el planeta: + +![Tile nivel 0](/img/blog/es/osm/07.jpg) + +El nivel 1 duplica sus dimensiones, así que consta de 4 tiles: + +![Tile nivel 1](/img/blog/es/osm/08.jpg) + +Y así sucesivamente, hasta el nivel 22. En teoría se puede renderizar +muchos más niveles (23, 24, etc), pero más adelante verás por qué +no se hace (spoiler: es costoso). + + + +## Teoría: Posicionamiento de los tiles + +Cada tile se identifica por 3 números: su nivel (Z), su +posición horizontal (Y) y su posición vertical (X). Esto resulta en: Z/Y/X. + +![Axis del mapa](/img/blog/es/osm/09.jpg) + +Por ejemplo, en zoom 0 el único tile que existe es: + +![Tile 0/0/0](/img/blog/es/osm/10.jpg) + +En zoom 1 hay 4 tiles: + +![Tiles de zoom 1](/img/blog/es/osm/11.jpg) + +Y así sucesivamente. Un último ejemplo: el centro de Arequipa +en nivel 15 tiene estos tiles: + +
+ + + +Estos tiles se sirven desde un servidor web. +Se sirven con una url: `//X/Y/Z.png`. + +Por ejemplo, la imágen del centro (`15/9871/17896`) +en mi servidor se sirve desde la url: `https://combi.araozu.dev/tiles/15/9871/17896.jpg`. + +Hasta aquí la teoría sobre los tiles e imágenes. + + + +## Teoría: Mapas como datos + +Los tiles que te mostré son el producto final. Estos tiles se generan +a partir de datos almacenados en archivos `.xml`. Estos datos contienen +información acerca de las calles, pistas, parques, distritos, etc etc etc. +Toda la información que se ve en las imágenes está almacenada como texto. + +Puedes ir a [OpenStreetMap](https://openstreetmap.org/), ver a alguna +parte del mundo e inspeccionar cualquier cosa: + +![OSM inspector](/img/blog/es/osm/13.jpg) + +Eventualmente encontrarás el código xml de lo que inspecciones. Algo +como esto: + +```xml + + + + + + + + + + + + + +``` + +Toda la información del mapa de todo el mundo se almacena de forma similar. +Para generar un mapa primero hay que descargar estos archivos xml. +Este proceso lo explico más adelante. + + +## Teoría: Renderizadores + +El renderizador toma los archivos `.xml` y los convierte en imágenes `.png`. +Este renderizador es quien define los colores, trazos, fuentes, tamaños +de letra, etc. Se encarga de transformar los datos en algo visual. + +Hay formas de personalizar los renderizadores, y se detalla mas adelante. + +## Teoría: Servidores de mapas + +Una vez renderizados los tiles se sirven mediante un servidor web. +Esto puede ser un CDN, un VPS, un servicio de nube, etc. + +### Servidores on-demand + +El proceso de renderizado se puede hacer on-demand: Cada vez que +llega una petición de un tile el servidor renderiza en ese momento +el tile, y lo devuelve. Como imaginarás, este proceso es costoso. + + +### Servidores estáticos + +Si no se necesita generar tiles con la información más reciente, +se pueden renderizar todos los tiles de antemano, y servirlos +como archivos estáticos. + + +## Teoría: Clientes + +Finalmente, los clientes son librerías que consumen los tiles +que un servidor provee, y se encargan de organizarlos, mostrarlos, +permitir arrastrar el mapa, hacer zoom, etc. + +El cliente más famoso para la web es [Leaflet](https://leafletjs.com/). +Le entregas la URL donde estan los tiles, y se encarga del resto. + +![Leaflet](/img/blog/es/osm/14.jpg) + + +[OpenStreetMap](https://openstreetmap.org) técnicamente tiene un +servidor de tiles que puedes utilizar. Sin embargo, su uso con +librerías de terceros como Leaflet no esta permitido. +Solo OSM puede usar sus tiles. + + +## La práctica: Crear y servir nuestros propios tiles estáticos + +Ahora viene lo divertido: + +## Descargar datos del mapa que queremos + +Primero necesitamos saber qué área del planeta tierra necesitamos +en nuestro mapa. Técnicamente puedes generar tiles para todo el +planeta, pero eso te tardaría muchísimo tiempo y recursos. + +En [Planet OSM](https://planet.openstreetmap.org/) se encuentra +un indice de los datos de todo el planeta. Descargar todos los +datos del planeta tierra pesa **144GiB**. + +En [Geofabrik.de](https://download.geofabrik.de/) puedes +descargar todo un continente y paises. Por ejemplo, todo sudamerica +pesa **3.4GiB**, y todo Argentina pesa **352MiB**. + +En [BBBike](https://download.bbbike.org/osm/bbbike) puedes descargar +ciertas áreas o ciudades importantes. + +Para descargar un área en específico ve a +[Protomaps](https://app.protomaps.com/) +y selecciona el área que quieres descargar. +Yo descargaré Arica, Chile para el tutorial. + +
+ +Otra herramienta útil para obtener un área en coordenadas es +[Tile Calculator](https://tools.geofabrik.de/calc/). + +Tras presionar "Create Extract" se empezará a procesar la solicitud: + +
+ +Una vez termine, descarga el mapa con el boton "Download .OSM.PBF": + +
+ +Dependiendo del área que descargaste este archivo pesará entre 1-10 MiB. + +Ahora tienes un archivo `.osm.pbf`. Este archivo contiene toda la información de (en mi caso) Arica: +calles, edificios, museos, parques, mercados, etc etc etc. Cambiale de nombre a uno fácil de usar. +Yo llamaré a mi mapa `arica.osm.pbf`. + +El siguiente paso es generar tiles con este archivo pbf. + + +## Crear un renderizador on-demand + +Basado en la guía de +[https://switch2osm.org/serving-tiles/using-a-docker-container/](https://switch2osm.org/serving-tiles/using-a-docker-container/). + +En un terminal en linux: + +- Crea una carpeta y mueve tu archivo `.osm.pbf` allí. +- Crea un volumen de docker con: + +```sh +docker volume create osm-data +``` + +- Importa tu archivo `.osm.pbf` con este comando. Reemplaza + donde sea necesario: + +```sh +docker run -v /ruta/absoluta/al/archivo/arica.osm.pbf:/data/region.osm.pbf -v osm-data:/data/database/ overv/openstreetmap-tile-server import +``` + +Esto demorará varios minutos, dependiendo de tu velocidad de internet. +Al final de este comando debes tener un mensaje como: + +```plain +INFO:root: Import complete ++ sudo -u renderer touch /data/database/planet-import-complete ++ service postgresql stop + * Stopping PostgreSQL 15 database server + ...done. ++ exit 0 +``` + + + +Una vez termine el comando anterior ejecuta: + +```sh +docker run -p 8080:80 -v osm-data:/data/database -d overv/openstreetmap-tile-server run +``` + +Esto creará un contenedor de docker con el servidor de tiles on-demand. +Ahora entra en tu navegador a [http://localhost:8080/](http://localhost:8080). + +Verás un mapa: + +![Leaflet](/img/blog/es/osm/18.jpg) + +Aquí ve al lugar que importaste y asegurate de que se renderiza. +Verás que los lugares fuera del área que definiste están en blanco. +Esto es normal. + +![Leaflet](/img/blog/es/osm/19.jpg) + +Con esto ya tienes un servidor on-demand. Puedes configurar tu sistema para que +sea accesible desde el exterior, levantarlo en un vps, etc etc. + +O también puedes obtener todos los tiles, almacenarlos y servirlos estáticamente. +Eso se ve en el siguiente paso. + + +## Scrapear nuestro renderizador + +Continuara... + + +## Compilar nuestros tiles + + + +## Personalizar nuestros tiles + +Habrás visto que los tiles vienen con un estilo por defecto: + +![Leaflet](/img/blog/es/osm/20.jpg) + +Tal vez no te gustan los colores, tal vez no necesitas +tantos íconos de negocios, tal vez quieres cambiar +el tamaño o fuente de las letras. Todo esto se puede +personalizar, lo que será tema de un próximo post. + + + +