diff --git a/astro.config.mjs b/astro.config.mjs index 4155157..bcc68c6 100644 --- a/astro.config.mjs +++ b/astro.config.mjs @@ -14,6 +14,7 @@ import { sectionize } from "./src/plugins/satteri/sectionize.mjs" import { shiftHeadings } from "./src/plugins/satteri/shift-headings.mjs" import { autolinkHeadings } from "./src/plugins/satteri/autolink-headings.mjs" import { imageLightbox } from "./src/plugins/satteri/image-lightbox.mjs" +import { satteriKatex } from "satteri-katex" import { site } from "./src/data/site" export default defineConfig({ @@ -88,6 +89,9 @@ export default defineConfig({ excerpt, shiftHeadings(), sectionize(), + // KaTeX 必须排在 reading-time / excerpt 之后:它把 math 节点换成 KaTeX 的 + // HTML,先换的话 ctx.textContent() 会把 KaTeX 标记也算进字数。 + satteriKatex(), ], hastPlugins: [ satteriHeadingIdsPlugin(), diff --git a/package.json b/package.json index ffd0597..e3ee76c 100644 --- a/package.json +++ b/package.json @@ -14,7 +14,6 @@ "reading": "node scripts/fetch-reading.mjs" }, "dependencies": { - "@astrojs/markdown-remark": "^7.3.1", "@astrojs/markdown-satteri": "^0.4.1", "@astrojs/mdx": "^8.0.1", "@astrojs/react": "^6.0.6", @@ -64,7 +63,6 @@ "date-fns": "4.1.0", "embla-carousel-react": "8.5.1", "gray-matter": "^4.0.3", - "hastscript": "^9.0.1", "input-otp": "1.4.1", "katex": "^0.16.22", "lucide-react": "^0.454.0", @@ -78,20 +76,12 @@ "react-resizable-panels": "^2.1.7", "reading-time": "^1.5.0", "recharts": "2.15.4", - "rehype-autolink-headings": "^7.1.0", - "rehype-components": "^0.3.0", - "rehype-katex": "^7.0.1", - "rehype-slug": "^6.0.0", - "remark-directive": "^3.0.1", - "remark-github-admonitions-to-directives": "^1.0.5", - "remark-math": "^6.0.0", - "remark-sectionize": "^2.1.0", "sanitize-html": "^2.17.0", "satteri": "^0.10.5", + "satteri-katex": "^0.1.1", "sonner": "^1.7.4", "tailwind-merge": "^2.5.5", "tailwindcss-animate": "^1.0.7", - "unist-util-visit": "^5.0.0", "vaul": "^1.1.2", "zod": "3.25.76" }, diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index ffcd4fe..cc8f726 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -8,9 +8,6 @@ importers: .: dependencies: - '@astrojs/markdown-remark': - specifier: ^7.3.1 - version: 7.3.1 '@astrojs/markdown-satteri': specifier: ^0.4.1 version: 0.4.1 @@ -158,9 +155,6 @@ importers: gray-matter: specifier: ^4.0.3 version: 4.0.3 - hastscript: - specifier: ^9.0.1 - version: 9.0.1 input-otp: specifier: 1.4.1 version: 1.4.1(react-dom@19.2.0(react@19.2.0))(react@19.2.0) @@ -200,36 +194,15 @@ importers: recharts: specifier: 2.15.4 version: 2.15.4(react-dom@19.2.0(react@19.2.0))(react@19.2.0) - rehype-autolink-headings: - specifier: ^7.1.0 - version: 7.1.0 - rehype-components: - specifier: ^0.3.0 - version: 0.3.0 - rehype-katex: - specifier: ^7.0.1 - version: 7.0.1 - rehype-slug: - specifier: ^6.0.0 - version: 6.0.0 - remark-directive: - specifier: ^3.0.1 - version: 3.0.1 - remark-github-admonitions-to-directives: - specifier: ^1.0.5 - version: 1.0.5 - remark-math: - specifier: ^6.0.0 - version: 6.0.0 - remark-sectionize: - specifier: ^2.1.0 - version: 2.1.0 sanitize-html: specifier: ^2.17.0 version: 2.17.7 satteri: specifier: ^0.10.5 version: 0.10.5 + satteri-katex: + specifier: ^0.1.1 + version: 0.1.1(satteri@0.10.5) sonner: specifier: ^1.7.4 version: 1.7.4(react-dom@19.2.0(react@19.2.0))(react@19.2.0) @@ -239,9 +212,6 @@ importers: tailwindcss-animate: specifier: ^1.0.7 version: 1.0.7(tailwindcss@4.3.3) - unist-util-visit: - specifier: ^5.0.0 - version: 5.1.0 vaul: specifier: ^1.1.2 version: 1.1.2(@types/react-dom@19.3.0(@types/react@19.3.0))(@types/react@19.3.0)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) @@ -3023,9 +2993,6 @@ packages: '@types/hast@3.0.5': resolution: {integrity: sha512-rp/ezSWaD1m44dPKICGhiskI13nVr7qTloFwDa/IYkhhf5nzwP+zIQcIJh3WIFSBOy/H1PzB40jPjMDksN4F+g==} - '@types/katex@0.16.7': - resolution: {integrity: sha512-HMwFiRujE5PjrgwHQ25+bsLJgowjGjm5Z8FVSf0N6PwgJrwxH0QxzHYDcKsTfV3wva0vzrpqMTJS2jXPr5BMEQ==} - '@types/linkify-it@5.0.0': resolution: {integrity: sha512-sVDA58zAw4eWAffKOaQH5/5j3XeayukzDk+ewSsnv3p4yJEZHCCzMDiZM8e0OUrRvmpGZ85jf4yDHkHsgBNr9Q==} @@ -3079,10 +3046,6 @@ packages: '@types/unist@3.0.3': resolution: {integrity: sha512-ko/gIFJRv177XgZsZcBwnqJN5x/Gien8qNOn0D5bQU/zAzVf9Zt3BlcUiLqhV9y4ARk0GbT3tnUiPNgnTXzc/Q==} - '@ungap/structured-clone@1.3.0': - resolution: {integrity: sha512-WmoN8qaIAo7WTYWbAZuG8PYEhn5fkz7dZrqTBZ7dtt//lL2Gwms1IcnQ5yHqjDfX8Ft5j4YzDM23f87zBfDe9g==} - deprecated: Potential CWE-502 - Update to 1.3.1 or higher - '@ungap/structured-clone@1.4.0': resolution: {integrity: sha512-1mEZtMKPM09vDmQt5y7YvmN2+DFTP7Tg0EWXdic8/C6VRnpb33e4ghisCIE3WZjsE2N8mf+QV1Zqh7ZFYLWInQ==} @@ -4124,12 +4087,6 @@ packages: resolution: {integrity: sha512-T2UbfbBEF32wiepXIsMlTW9+dDYC6wMh/t/vYA4tuOMKqWz/n3vr1NFSxQiyP+zk2mXsoMA/i/7qV6LKut1t1A==} engines: {node: '>= 0.4'} - hast-util-from-dom@5.0.1: - resolution: {integrity: sha512-N+LqofjR2zuzTjCPzyDUdSshy4Ma6li7p/c3pA78uTwzFgENbgbUrm2ugwsOdcjI1muO+o6Dgzp9p8WHtn/39Q==} - - hast-util-from-html-isomorphic@2.0.0: - resolution: {integrity: sha512-zJfpXq44yff2hmE0XmwEOzdWin5xwH+QIhMLOScpX91e/NSGPsAzNCvLQDIEPyO2TXi+lBmU6hjLIhV8MwP2kw==} - hast-util-from-html@2.0.3: resolution: {integrity: sha512-CUSRHXyKjzHov8yKsQjGOElXy/3EKpyX56ELnkHH34vDVw1N1XSQ1ZcAvTyAPtGqLTuKP/uxM+aLkSPqF/EtMw==} @@ -4139,9 +4096,6 @@ packages: hast-util-has-property@3.0.0: resolution: {integrity: sha512-MNilsvEKLFpV604hwfhVStK0usFY/QmM5zX16bo7EjnAEGofr5YyI37kzopBlZJkHD4t887i+q/C8/tr5Q94cA==} - hast-util-heading-rank@3.0.0: - resolution: {integrity: sha512-EJKb8oMUXVHcWZTDepnr+WNbfnXKFNf9duMesmr4S8SXTJBJ9M4Yok08pu9vxdJwdlGRhVumk9mEhkEvKGifwA==} - hast-util-is-element@3.0.0: resolution: {integrity: sha512-Val9mnv2IWpLbNPqc/pUem+a7Ipj2aHacCwgNfTiK0vJKl0LF+4Ba4+v1oPHFpf3bLYmreq0/l3Gud9S5OH42g==} @@ -4700,15 +4654,9 @@ packages: mdast-util-definitions@6.0.0: resolution: {integrity: sha512-scTllyX6pnYNZH/AIp/0ePz6s4cZtARxImwoPJ7kS42n+MnVsI4XbnG6d4ibehRIldYMWM2LD7ImQblVhUejVQ==} - mdast-util-directive@3.1.0: - resolution: {integrity: sha512-I3fNFt+DHmpWCYAT7quoM6lHf9wuqtI+oCOfvILnoicNIqjh5E3dEJWiXuYME2gNe8vl1iMQwyUHa7bgFmak6Q==} - mdast-util-find-and-replace@3.0.2: resolution: {integrity: sha512-Tmd1Vg/m3Xz43afeNxDIhWRtFZgM2VLyaf4vSTYwudTyeuTneoL3qtWMA5jeLyz/O1vDJmmV4QuScFCA2tBPwg==} - mdast-util-from-markdown@2.0.2: - resolution: {integrity: sha512-uZhTV/8NBuw0WHkPTrCqDOl0zVe1BIng5ZtHoDk49ME1qqcjYmmLmOf0gELgcRMxN4w2iuIeVso5/6QymSrgmA==} - mdast-util-from-markdown@2.0.3: resolution: {integrity: sha512-W4mAWTvSlKvf8L6J+VN9yLSqQ9AOAAvHuoDAmPkz4dHf553m5gVj2ejadHJhoJmcmxEnOv6Pa8XJhpxE93kb8Q==} @@ -4730,9 +4678,6 @@ packages: mdast-util-gfm@3.1.0: resolution: {integrity: sha512-0ulfdQOM3ysHhCJ1p06l0b0VKlhU0wuQs3thxZQagjcjPrlFRqY215uZGHHJan9GEAXd9MbfPjFJz+qMkVR6zQ==} - mdast-util-math@3.0.0: - resolution: {integrity: sha512-Tl9GBNeG/AhJnQM221bJR2HPvLOSnLE/T9cJI9tlc6zwQk2nPk/4f0cHkOdEixQPC/j8UtKDdITswvLAy1OZ1w==} - mdast-util-mdx-expression@2.0.1: resolution: {integrity: sha512-J6f+9hUp+ldTZqKRSg7Vw5V6MqjATc+3E4gf3CFNcuZNWD8XdyI6zQ8GqH7f8169MM6P7hMBRDVGnn7oHB9kXQ==} @@ -4779,9 +4724,6 @@ packages: micromark-core-commonmark@2.0.3: resolution: {integrity: sha512-RDBrHEMSxVFLg6xvnXmb1Ayr2WzLAWjeSATAoxwKYJV94TeNavgoIdA0a9ytzDSVzBy2YKFK+emCPOEibLeCrg==} - micromark-extension-directive@3.0.2: - resolution: {integrity: sha512-wjcXHgk+PPdmvR58Le9d7zQYWy+vKEU9Se44p2CrCDPiLr2FMyiT4Fyb5UFKFC66wGB3kPlgD7q3TnoqPS7SZA==} - micromark-extension-gfm-autolink-literal@2.1.0: resolution: {integrity: sha512-oOg7knzhicgQ3t4QCjCWgTmfNhvQbDDnJeVu9v81r7NltNCVmhPy1fJRX27pISafdjL+SVc4d3l48Gb6pbRypw==} @@ -4803,9 +4745,6 @@ packages: micromark-extension-gfm@3.0.0: resolution: {integrity: sha512-vsKArQsicm7t0z2GugkCKtZehqUm31oeGBV/KVSorWSy8ZlNAv7ytjFhvaryUiCUJYqs+NoE6AFhpQvBTM6Q4w==} - micromark-extension-math@3.1.0: - resolution: {integrity: sha512-lvEqd+fHjATVs+2v/8kg9i5Q0AP2k85H0WUOwpIVvUML8BapsMvh1XAogmQjOCsLpoKRCVQqEkQBB3NhVBcsOg==} - micromark-extension-mdx-expression@3.0.1: resolution: {integrity: sha512-dD/ADLJ1AeMvSAKBwO22zG22N4ybhe7kFIZ3LsDI0GlsNr2A3KYxb0LdC1u5rj4Nw+CHKY0RVdnHX8vj8ejm4Q==} @@ -5552,42 +5491,21 @@ packages: resolution: {integrity: sha512-NgRBy2Nx/bE+9F27nVHnqcN5HjyLmecqsqx2PJHu3/IEtADD4WuxuXIVExD5PoSDFVrl78dOonfcOe5O+5nbzQ==} hasBin: true - rehype-autolink-headings@7.1.0: - resolution: {integrity: sha512-rItO/pSdvnvsP4QRB1pmPiNHUskikqtPojZKJPPPAVx9Hj8i8TwMBhofrrAYRhYOOBZH9tgmG5lPqDLuIWPWmw==} - - rehype-components@0.3.0: - resolution: {integrity: sha512-yl2bUkZi+sU0gxwVCun7IkjiDLPczSs1SKMKHmjlSLkk4mMryBd/aYba5J8suhJdquBEKSw6ZNxU3MvVQ9xqoQ==} - rehype-expressive-code@0.44.2: resolution: {integrity: sha512-jvjQpsfWKBquDrEl5YQA3CJybRRIuDOYsui1BJTs5oKDUK8pPkJSSxY8FjxNlIFIdtgrTjC1zuahuY4Cc1j9SQ==} - rehype-katex@7.0.1: - resolution: {integrity: sha512-OiM2wrZ/wuhKkigASodFoo8wimG3H12LWQaH8qSPVJn9apWKFSH3YOCtbKpBorTVw/eI7cuT21XBbvwEswbIOA==} - rehype-raw@7.0.0: resolution: {integrity: sha512-/aE8hCfKlQeA8LmyeyQvQF3eBiLRGNlfBJEvWH7ivp9sBqs7TNqBL5X3v157rM4IFETqDnIOO+z5M/biZbo9Ww==} rehype-recma@1.0.0: resolution: {integrity: sha512-lqA4rGUf1JmacCNWWZx0Wv1dHqMwxzsDWYMTowuplHF3xH0N/MmrZ/G3BDZnzAkRmxDadujCjaKM2hqYdCBOGw==} - rehype-slug@6.0.0: - resolution: {integrity: sha512-lWyvf/jwu+oS5+hL5eClVd3hNdmwM1kAC0BUvEGD19pajQMIzcNUd/k9GsfQ+FfECvX+JE+e9/btsKH0EjJT6A==} - rehype-stringify@10.0.1: resolution: {integrity: sha512-k9ecfXHmIPuFVI61B9DeLPN0qFHfawM6RsuX48hoqlaKSF61RskNjSm1lI8PhBEM0MRdLxVVm4WmTqJQccH9mA==} - remark-directive@3.0.1: - resolution: {integrity: sha512-gwglrEQEZcZYgVyG1tQuA+h58EZfq5CSULw7J90AFuCTyib1thgHPoqQ+h9iFvU6R+vnZ5oNFQR5QKgGpk741A==} - remark-gfm@4.0.1: resolution: {integrity: sha512-1quofZ2RQ9EWdeN34S79+KExV1764+wCUGop5CPL1WGdD0ocPpu91lzPGbwWMECpEpd42kJGQwzRfyov9j4yNg==} - remark-github-admonitions-to-directives@1.0.5: - resolution: {integrity: sha512-MSRzDs51HGbUrHJ0es8POuxwJiUycWw4aYCTN2RZhdOm5UvyqdB8ApWoGBj9QAiPSHKw2HWl1hd5rRzWxVfNew==} - - remark-math@6.0.0: - resolution: {integrity: sha512-MMqgnP74Igy+S3WwnhQ7kqGlEerTETXMvJhrUzDikVZ2/uogJCb+WHUg97hK9/jcfc0dkD73s3LN8zU49cTEtA==} - remark-mdx@3.1.1: resolution: {integrity: sha512-Pjj2IYlUY3+D8x00UJsIOg5BEvfMyeI+2uLPn9VO9Wg4MEtN/VTIq2NEJQfde9PnX15KgtHyl9S0BcTnWrIuWg==} @@ -5597,9 +5515,6 @@ packages: remark-rehype@11.1.2: resolution: {integrity: sha512-Dh7l57ianaEoIpzbp0PC9UKAdCSVklD8E5Rpw7ETfbTl3FqcOOgq5q2LVDhgGCkaBv7p24JXikPdvhhmHvKMsw==} - remark-sectionize@2.1.0: - resolution: {integrity: sha512-R/pHt1RLYrEqrbwOVXx8HnvvwOg+mxg8pE4kIWpIYE3/CuZhU8/PAx/0y1BbHWUA0jmTLTeWpUlDrS/B0pyd0g==} - remark-smartypants@3.0.3: resolution: {integrity: sha512-gCaK+ndZ0hYezlqFegHFCVh2CQemsi0Npdh1qVM9bxlUFknjkbP6VmojWhddOCrbK0PbbacmYLWfTULRiT1eWA==} engines: {node: '>=16.0.0'} @@ -5722,6 +5637,12 @@ packages: resolution: {integrity: sha512-PGtEkc9cbnedU3s9TmzDbpsZ8w086g/0Q8k8/oIO1NLNU3i5k9yn835CrjJSajp1KMmkisbO1qPXxNKO3welAg==} engines: {node: '>=22.12.0'} + satteri-katex@0.1.1: + resolution: {integrity: sha512-65M00JZKW145vEhvCFWCe0Gd57hzL8KEDQHbJ9ZvuH4FGrgh90KUPxqS8GCnIEC5EIhOfWPP7NbEnBfFn+nf3w==} + engines: {node: '>=20'} + peerDependencies: + satteri: ^0.9.5 + satteri@0.10.5: resolution: {integrity: sha512-Ao1LKpAEa9Wdg0otgbVKViZHEq9ebdXe4DMrp3s9vQAU0HNIuHnFEuMuOcm0ZIXyV0Yzxj91NvhLpvXZJO/5ZQ==} @@ -6099,15 +6020,9 @@ packages: unifont@0.7.5: resolution: {integrity: sha512-ULe/Cs+ZIsq+dcFofNkhqielCrUJnb5mr+Yc4EBM2VlL+6OZR6+cjtI2mT1bJvRBrVncqHAbLURxmPLcCXzWMg==} - unist-util-find-after@4.0.1: - resolution: {integrity: sha512-QO/PuPMm2ERxC6vFXEPtmAutOopy5PknD+Oq64gGwxKtk4xwo9Z97t9Av1obPmGU0IyTa6EKYUfTrK2QJS3Ozw==} - unist-util-find-after@5.0.0: resolution: {integrity: sha512-amQa0Ep2m6hE2g72AugUItjbuM8X8cGQnFoHk0pGfrFeT9GZhzN5SW8nRsiGKK7Aif4CrACPENkA6P/Lw6fHGQ==} - unist-util-is@5.2.1: - resolution: {integrity: sha512-u9njyyfEh43npf1M+yGKDGVPbY/JWEemg5nH05ncKPfi+kBbKBJoTdsogMu33uhytuLlv9y0O7GH7fEdwLdLQw==} - unist-util-is@6.0.1: resolution: {integrity: sha512-LsiILbtBETkDz8I9p1dQ0uyRUWuaQzd/cuEeS1hoRSyW5E5XGmTzlwY1OrNzzakGowI9Dr/I8HVaw4hTtnxy8g==} @@ -6129,15 +6044,9 @@ packages: unist-util-visit-children@3.0.0: resolution: {integrity: sha512-RgmdTfSBOg04sdPcpTSD1jzoNBjt9a80/ZCzp5cI9n1qPzLZWF9YdvWGN2zmTumP1HWhXKdUWexjy/Wy/lJ7tA==} - unist-util-visit-parents@5.1.3: - resolution: {integrity: sha512-x6+y8g7wWMyQhL1iZfhIPhDAs7Xwbn9nRosDXl7qoPTSCy0yNxnKc+hWokFifWQIDGi154rdUqKvbCa4+1kLhg==} - unist-util-visit-parents@6.0.2: resolution: {integrity: sha512-goh1s1TBrqSqukSc8wrjwWhL0hiJxgA8m4kFxGlQ+8FYQ3C/m11FcTs4YYem7V664AhHVvgoQLk890Ssdsr2IQ==} - unist-util-visit@4.1.2: - resolution: {integrity: sha512-MSd8OUGISqHdVvfY9TPhyK2VdUrPgxkUtWSuMHF6XAAFuL4LokseigBnZtPnJMu+FbynTkFNnFlyjxpVKujMRg==} - unist-util-visit@5.1.0: resolution: {integrity: sha512-m+vIdyeCOpdr/QeQCu2EzxX/ohgS8KbnPDgFni4dQsfSCtpz8UqDyY5GjRru8PDKuYn7Fq19j1CQ+nJSsGKOzg==} @@ -6649,6 +6558,7 @@ snapshots: vfile: 6.0.3 transitivePeerDependencies: - supports-color + optional: true '@astrojs/markdown-satteri@0.4.1': dependencies: @@ -8332,6 +8242,7 @@ snapshots: vfile: 6.0.3 transitivePeerDependencies: - supports-color + optional: true '@napi-rs/wasm-runtime@1.2.4(@emnapi/core@1.11.1)(@emnapi/runtime@1.11.1)': dependencies: @@ -9826,6 +9737,7 @@ snapshots: '@types/debug@4.1.13': dependencies: '@types/ms': 2.1.0 + optional: true '@types/estree-jsx@1.0.5': dependencies: @@ -9843,8 +9755,6 @@ snapshots: dependencies: '@types/unist': 3.0.3 - '@types/katex@0.16.7': {} - '@types/linkify-it@5.0.0': {} '@types/markdown-it@14.2.0': @@ -9858,9 +9768,11 @@ snapshots: '@types/mdurl@2.0.0': {} - '@types/mdx@2.0.14': {} + '@types/mdx@2.0.14': + optional: true - '@types/ms@2.1.0': {} + '@types/ms@2.1.0': + optional: true '@types/nlcst@2.0.3': dependencies: @@ -9896,12 +9808,11 @@ snapshots: dependencies: '@types/node': 22.19.2 - '@types/unist@2.0.11': {} + '@types/unist@2.0.11': + optional: true '@types/unist@3.0.3': {} - '@ungap/structured-clone@1.3.0': {} - '@ungap/structured-clone@1.4.0': {} '@vitejs/plugin-react@5.2.0(vite@8.3.0(@types/node@22.19.2)(esbuild@0.28.2)(jiti@2.7.0)(terser@5.51.2)(yaml@2.9.1))': @@ -9969,6 +9880,7 @@ snapshots: acorn-jsx@5.3.2(acorn@8.16.0): dependencies: acorn: 8.16.0 + optional: true acorn@8.16.0: {} @@ -10029,7 +9941,8 @@ snapshots: call-bound: 1.0.4 is-array-buffer: 3.0.5 - array-iterate@2.0.1: {} + array-iterate@2.0.1: + optional: true arraybuffer.prototype.slice@1.0.4: dependencies: @@ -10041,7 +9954,8 @@ snapshots: get-intrinsic: 1.3.0 is-array-buffer: 3.0.5 - astring@1.9.0: {} + astring@1.9.0: + optional: true astro-expressive-code@0.44.2(astro@7.3.3(@astrojs/markdown-remark@7.3.1)(@emnapi/core@1.11.1)(@emnapi/runtime@1.11.3)(@types/node@22.19.2)(jiti@2.7.0)(terser@5.51.2)(yaml@2.9.1)): dependencies: @@ -10291,9 +10205,11 @@ snapshots: character-entities-legacy@3.0.0: {} - character-entities@2.0.2: {} + character-entities@2.0.2: + optional: true - character-reference-invalid@2.0.1: {} + character-reference-invalid@2.0.1: + optional: true chokidar@4.0.3: dependencies: @@ -10335,7 +10251,8 @@ snapshots: - '@types/react' - '@types/react-dom' - collapse-white-space@2.1.0: {} + collapse-white-space@2.1.0: + optional: true color-convert@2.0.1: dependencies: @@ -10563,10 +10480,12 @@ snapshots: decode-named-character-reference@1.2.0: dependencies: character-entities: 2.0.2 + optional: true decode-named-character-reference@1.3.0: dependencies: character-entities: 2.0.2 + optional: true deepmerge@4.3.1: {} @@ -10713,7 +10632,8 @@ snapshots: entities@4.5.0: {} - entities@6.0.1: {} + entities@6.0.1: + optional: true entities@7.0.1: {} @@ -10876,6 +10796,7 @@ snapshots: devlop: 1.1.0 estree-util-visit: 2.0.0 unist-util-position-from-estree: 2.0.0 + optional: true esast-util-from-js@2.0.1: dependencies: @@ -10883,6 +10804,7 @@ snapshots: acorn: 8.16.0 esast-util-from-estree: 2.0.0 vfile-message: 4.0.3 + optional: true esbuild@0.28.2: optionalDependencies: @@ -10919,13 +10841,15 @@ snapshots: escape-string-regexp@4.0.0: {} - escape-string-regexp@5.0.0: {} + escape-string-regexp@5.0.0: + optional: true esprima@4.0.1: {} estree-util-attach-comments@3.0.0: dependencies: '@types/estree': 1.0.9 + optional: true estree-util-build-jsx@3.0.1: dependencies: @@ -10933,24 +10857,29 @@ snapshots: devlop: 1.1.0 estree-util-is-identifier-name: 3.0.0 estree-walker: 3.0.3 + optional: true - estree-util-is-identifier-name@3.0.0: {} + estree-util-is-identifier-name@3.0.0: + optional: true estree-util-scope@1.0.0: dependencies: '@types/estree': 1.0.9 devlop: 1.1.0 + optional: true estree-util-to-js@2.0.0: dependencies: '@types/estree-jsx': 1.0.5 astring: 1.9.0 source-map: 0.7.6 + optional: true estree-util-visit@2.0.0: dependencies: '@types/estree-jsx': 1.0.5 '@types/unist': 3.0.3 + optional: true estree-walker@0.6.1: {} @@ -10961,6 +10890,7 @@ snapshots: estree-walker@3.0.3: dependencies: '@types/estree': 1.0.9 + optional: true esutils@2.0.3: {} @@ -11200,19 +11130,6 @@ snapshots: dependencies: function-bind: 1.1.2 - hast-util-from-dom@5.0.1: - dependencies: - '@types/hast': 3.0.5 - hastscript: 9.0.1 - web-namespaces: 2.0.1 - - hast-util-from-html-isomorphic@2.0.0: - dependencies: - '@types/hast': 3.0.4 - hast-util-from-dom: 5.0.1 - hast-util-from-html: 2.0.3 - unist-util-remove-position: 5.0.0 - hast-util-from-html@2.0.3: dependencies: '@types/hast': 3.0.5 @@ -11221,6 +11138,7 @@ snapshots: parse5: 7.3.0 vfile: 6.0.3 vfile-message: 4.0.3 + optional: true hast-util-from-parse5@8.0.3: dependencies: @@ -11232,15 +11150,12 @@ snapshots: vfile: 6.0.3 vfile-location: 5.0.3 web-namespaces: 2.0.1 + optional: true hast-util-has-property@3.0.0: dependencies: '@types/hast': 3.0.5 - hast-util-heading-rank@3.0.0: - dependencies: - '@types/hast': 3.0.4 - hast-util-is-element@3.0.0: dependencies: '@types/hast': 3.0.4 @@ -11264,6 +11179,7 @@ snapshots: vfile: 6.0.3 web-namespaces: 2.0.1 zwitch: 2.0.4 + optional: true hast-util-select@6.0.4: dependencies: @@ -11303,6 +11219,7 @@ snapshots: zwitch: 2.0.4 transitivePeerDependencies: - supports-color + optional: true hast-util-to-html@9.0.5: dependencies: @@ -11337,6 +11254,7 @@ snapshots: vfile-message: 4.0.3 transitivePeerDependencies: - supports-color + optional: true hast-util-to-parse5@8.0.1: dependencies: @@ -11347,6 +11265,7 @@ snapshots: space-separated-tokens: 2.0.2 web-namespaces: 2.0.1 zwitch: 2.0.4 + optional: true hast-util-to-string@3.0.1: dependencies: @@ -11417,7 +11336,8 @@ snapshots: inherits@2.0.4: {} - inline-style-parser@0.2.7: {} + inline-style-parser@0.2.7: + optional: true input-otp@1.4.1(react-dom@19.2.0(react@19.2.0))(react@19.2.0): dependencies: @@ -11436,12 +11356,14 @@ snapshots: iron-webcrypto@1.2.1: {} - is-alphabetical@2.0.1: {} + is-alphabetical@2.0.1: + optional: true is-alphanumerical@2.0.1: dependencies: is-alphabetical: 2.0.1 is-decimal: 2.0.1 + optional: true is-array-buffer@3.0.5: dependencies: @@ -11485,7 +11407,8 @@ snapshots: call-bound: 1.0.4 has-tostringtag: 1.0.2 - is-decimal@2.0.1: {} + is-decimal@2.0.1: + optional: true is-docker@2.2.1: {} @@ -11511,7 +11434,8 @@ snapshots: has-tostringtag: 1.0.2 safe-regex-test: 1.1.0 - is-hexadecimal@2.0.1: {} + is-hexadecimal@2.0.1: + optional: true is-map@2.0.3: {} @@ -11758,7 +11682,8 @@ snapshots: lodash@4.17.21: {} - longest-streak@3.1.0: {} + longest-streak@3.1.0: + optional: true loose-envify@1.4.0: dependencies: @@ -11796,7 +11721,8 @@ snapshots: dependencies: semver: 6.3.1 - markdown-extensions@2.0.0: {} + markdown-extensions@2.0.0: + optional: true markdown-it@14.3.2: dependencies: @@ -11807,7 +11733,8 @@ snapshots: punycode.js: 2.3.1 uc.micro: 2.1.0 - markdown-table@3.0.4: {} + markdown-table@3.0.4: + optional: true math-intrinsics@1.1.0: {} @@ -11823,20 +11750,7 @@ snapshots: '@types/mdast': 4.0.4 '@types/unist': 3.0.3 unist-util-visit: 5.1.0 - - mdast-util-directive@3.1.0: - dependencies: - '@types/mdast': 4.0.4 - '@types/unist': 3.0.3 - ccount: 2.0.1 - devlop: 1.1.0 - mdast-util-from-markdown: 2.0.2 - mdast-util-to-markdown: 2.1.2 - parse-entities: 4.0.2 - stringify-entities: 4.0.4 - unist-util-visit-parents: 6.0.2 - transitivePeerDependencies: - - supports-color + optional: true mdast-util-find-and-replace@3.0.2: dependencies: @@ -11844,23 +11758,7 @@ snapshots: escape-string-regexp: 5.0.0 unist-util-is: 6.0.1 unist-util-visit-parents: 6.0.2 - - mdast-util-from-markdown@2.0.2: - dependencies: - '@types/mdast': 4.0.4 - '@types/unist': 3.0.3 - decode-named-character-reference: 1.2.0 - devlop: 1.1.0 - mdast-util-to-string: 4.0.0 - micromark: 4.0.2 - micromark-util-decode-numeric-character-reference: 2.0.2 - micromark-util-decode-string: 2.0.1 - micromark-util-normalize-identifier: 2.0.1 - micromark-util-symbol: 2.0.1 - micromark-util-types: 2.0.2 - unist-util-stringify-position: 4.0.0 - transitivePeerDependencies: - - supports-color + optional: true mdast-util-from-markdown@2.0.3: dependencies: @@ -11878,6 +11776,7 @@ snapshots: unist-util-stringify-position: 4.0.0 transitivePeerDependencies: - supports-color + optional: true mdast-util-gfm-autolink-literal@2.0.1: dependencies: @@ -11886,6 +11785,7 @@ snapshots: devlop: 1.1.0 mdast-util-find-and-replace: 3.0.2 micromark-util-character: 2.1.1 + optional: true mdast-util-gfm-footnote@2.1.0: dependencies: @@ -11896,6 +11796,7 @@ snapshots: micromark-util-normalize-identifier: 2.0.1 transitivePeerDependencies: - supports-color + optional: true mdast-util-gfm-strikethrough@2.0.0: dependencies: @@ -11904,6 +11805,7 @@ snapshots: mdast-util-to-markdown: 2.1.2 transitivePeerDependencies: - supports-color + optional: true mdast-util-gfm-table@2.0.0: dependencies: @@ -11914,6 +11816,7 @@ snapshots: mdast-util-to-markdown: 2.1.2 transitivePeerDependencies: - supports-color + optional: true mdast-util-gfm-task-list-item@2.0.0: dependencies: @@ -11923,6 +11826,7 @@ snapshots: mdast-util-to-markdown: 2.1.2 transitivePeerDependencies: - supports-color + optional: true mdast-util-gfm@3.1.0: dependencies: @@ -11935,18 +11839,7 @@ snapshots: mdast-util-to-markdown: 2.1.2 transitivePeerDependencies: - supports-color - - mdast-util-math@3.0.0: - dependencies: - '@types/hast': 3.0.4 - '@types/mdast': 4.0.4 - devlop: 1.1.0 - longest-streak: 3.1.0 - mdast-util-from-markdown: 2.0.2 - mdast-util-to-markdown: 2.1.2 - unist-util-remove-position: 5.0.0 - transitivePeerDependencies: - - supports-color + optional: true mdast-util-mdx-expression@2.0.1: dependencies: @@ -11958,6 +11851,7 @@ snapshots: mdast-util-to-markdown: 2.1.2 transitivePeerDependencies: - supports-color + optional: true mdast-util-mdx-jsx@3.2.0: dependencies: @@ -11975,6 +11869,7 @@ snapshots: vfile-message: 4.0.3 transitivePeerDependencies: - supports-color + optional: true mdast-util-mdx@3.0.0: dependencies: @@ -11985,6 +11880,7 @@ snapshots: mdast-util-to-markdown: 2.1.2 transitivePeerDependencies: - supports-color + optional: true mdast-util-mdxjs-esm@2.0.1: dependencies: @@ -11996,11 +11892,13 @@ snapshots: mdast-util-to-markdown: 2.1.2 transitivePeerDependencies: - supports-color + optional: true mdast-util-phrasing@4.1.0: dependencies: '@types/mdast': 4.0.4 unist-util-is: 6.0.1 + optional: true mdast-util-to-hast@13.2.1: dependencies: @@ -12025,6 +11923,7 @@ snapshots: micromark-util-decode-string: 2.0.1 unist-util-visit: 5.1.0 zwitch: 2.0.4 + optional: true mdast-util-to-string@4.0.0: dependencies: @@ -12108,16 +12007,7 @@ snapshots: micromark-util-subtokenize: 2.1.0 micromark-util-symbol: 2.0.1 micromark-util-types: 2.0.2 - - micromark-extension-directive@3.0.2: - dependencies: - devlop: 1.1.0 - micromark-factory-space: 2.0.1 - micromark-factory-whitespace: 2.0.1 - micromark-util-character: 2.1.1 - micromark-util-symbol: 2.0.1 - micromark-util-types: 2.0.2 - parse-entities: 4.0.2 + optional: true micromark-extension-gfm-autolink-literal@2.1.0: dependencies: @@ -12125,6 +12015,7 @@ snapshots: micromark-util-sanitize-uri: 2.0.1 micromark-util-symbol: 2.0.1 micromark-util-types: 2.0.2 + optional: true micromark-extension-gfm-footnote@2.1.0: dependencies: @@ -12136,6 +12027,7 @@ snapshots: micromark-util-sanitize-uri: 2.0.1 micromark-util-symbol: 2.0.1 micromark-util-types: 2.0.2 + optional: true micromark-extension-gfm-strikethrough@2.1.0: dependencies: @@ -12145,6 +12037,7 @@ snapshots: micromark-util-resolve-all: 2.0.1 micromark-util-symbol: 2.0.1 micromark-util-types: 2.0.2 + optional: true micromark-extension-gfm-table@2.1.2: dependencies: @@ -12153,10 +12046,12 @@ snapshots: micromark-util-character: 2.1.1 micromark-util-symbol: 2.0.1 micromark-util-types: 2.0.2 + optional: true micromark-extension-gfm-tagfilter@2.0.0: dependencies: micromark-util-types: 2.0.2 + optional: true micromark-extension-gfm-task-list-item@2.1.0: dependencies: @@ -12165,6 +12060,7 @@ snapshots: micromark-util-character: 2.1.1 micromark-util-symbol: 2.0.1 micromark-util-types: 2.0.2 + optional: true micromark-extension-gfm@3.0.0: dependencies: @@ -12176,16 +12072,7 @@ snapshots: micromark-extension-gfm-task-list-item: 2.1.0 micromark-util-combine-extensions: 2.0.1 micromark-util-types: 2.0.2 - - micromark-extension-math@3.1.0: - dependencies: - '@types/katex': 0.16.7 - devlop: 1.1.0 - katex: 0.16.47 - micromark-factory-space: 2.0.1 - micromark-util-character: 2.1.1 - micromark-util-symbol: 2.0.1 - micromark-util-types: 2.0.2 + optional: true micromark-extension-mdx-expression@3.0.1: dependencies: @@ -12197,6 +12084,7 @@ snapshots: micromark-util-events-to-acorn: 2.0.3 micromark-util-symbol: 2.0.1 micromark-util-types: 2.0.2 + optional: true micromark-extension-mdx-jsx@3.0.2: dependencies: @@ -12210,10 +12098,12 @@ snapshots: micromark-util-symbol: 2.0.1 micromark-util-types: 2.0.2 vfile-message: 4.0.3 + optional: true micromark-extension-mdx-md@2.0.0: dependencies: micromark-util-types: 2.0.2 + optional: true micromark-extension-mdxjs-esm@3.0.0: dependencies: @@ -12226,6 +12116,7 @@ snapshots: micromark-util-types: 2.0.2 unist-util-position-from-estree: 2.0.0 vfile-message: 4.0.3 + optional: true micromark-extension-mdxjs@3.0.0: dependencies: @@ -12237,12 +12128,14 @@ snapshots: micromark-extension-mdxjs-esm: 3.0.0 micromark-util-combine-extensions: 2.0.1 micromark-util-types: 2.0.2 + optional: true micromark-factory-destination@2.0.1: dependencies: micromark-util-character: 2.1.1 micromark-util-symbol: 2.0.1 micromark-util-types: 2.0.2 + optional: true micromark-factory-label@2.0.1: dependencies: @@ -12250,6 +12143,7 @@ snapshots: micromark-util-character: 2.1.1 micromark-util-symbol: 2.0.1 micromark-util-types: 2.0.2 + optional: true micromark-factory-mdx-expression@2.0.3: dependencies: @@ -12262,11 +12156,13 @@ snapshots: micromark-util-types: 2.0.2 unist-util-position-from-estree: 2.0.0 vfile-message: 4.0.3 + optional: true micromark-factory-space@2.0.1: dependencies: micromark-util-character: 2.1.1 micromark-util-types: 2.0.2 + optional: true micromark-factory-title@2.0.1: dependencies: @@ -12274,6 +12170,7 @@ snapshots: micromark-util-character: 2.1.1 micromark-util-symbol: 2.0.1 micromark-util-types: 2.0.2 + optional: true micromark-factory-whitespace@2.0.1: dependencies: @@ -12281,6 +12178,7 @@ snapshots: micromark-util-character: 2.1.1 micromark-util-symbol: 2.0.1 micromark-util-types: 2.0.2 + optional: true micromark-util-character@2.1.1: dependencies: @@ -12290,21 +12188,25 @@ snapshots: micromark-util-chunked@2.0.1: dependencies: micromark-util-symbol: 2.0.1 + optional: true micromark-util-classify-character@2.0.1: dependencies: micromark-util-character: 2.1.1 micromark-util-symbol: 2.0.1 micromark-util-types: 2.0.2 + optional: true micromark-util-combine-extensions@2.0.1: dependencies: micromark-util-chunked: 2.0.1 micromark-util-types: 2.0.2 + optional: true micromark-util-decode-numeric-character-reference@2.0.2: dependencies: micromark-util-symbol: 2.0.1 + optional: true micromark-util-decode-string@2.0.1: dependencies: @@ -12312,6 +12214,7 @@ snapshots: micromark-util-character: 2.1.1 micromark-util-decode-numeric-character-reference: 2.0.2 micromark-util-symbol: 2.0.1 + optional: true micromark-util-encode@2.0.1: {} @@ -12324,16 +12227,20 @@ snapshots: micromark-util-symbol: 2.0.1 micromark-util-types: 2.0.2 vfile-message: 4.0.3 + optional: true - micromark-util-html-tag-name@2.0.1: {} + micromark-util-html-tag-name@2.0.1: + optional: true micromark-util-normalize-identifier@2.0.1: dependencies: micromark-util-symbol: 2.0.1 + optional: true micromark-util-resolve-all@2.0.1: dependencies: micromark-util-types: 2.0.2 + optional: true micromark-util-sanitize-uri@2.0.1: dependencies: @@ -12347,6 +12254,7 @@ snapshots: micromark-util-chunked: 2.0.1 micromark-util-symbol: 2.0.1 micromark-util-types: 2.0.2 + optional: true micromark-util-symbol@2.0.1: {} @@ -12373,6 +12281,7 @@ snapshots: micromark-util-types: 2.0.2 transitivePeerDependencies: - supports-color + optional: true minimatch@3.1.5: dependencies: @@ -12525,6 +12434,7 @@ snapshots: is-alphanumerical: 2.0.1 is-decimal: 2.0.1 is-hexadecimal: 2.0.1 + optional: true parse-json@5.2.0: dependencies: @@ -12541,12 +12451,14 @@ snapshots: unist-util-modify-children: 4.0.0 unist-util-visit-children: 3.0.0 vfile: 6.0.3 + optional: true parse-srcset@1.0.2: {} parse5@7.3.0: dependencies: entities: 6.0.1 + optional: true path-browserify@1.0.1: {} @@ -12943,6 +12855,7 @@ snapshots: '@types/estree': 1.0.9 estree-util-build-jsx: 3.0.1 vfile: 6.0.3 + optional: true recma-jsx@1.0.1(acorn@8.16.0): dependencies: @@ -12952,6 +12865,7 @@ snapshots: recma-parse: 1.0.0 recma-stringify: 1.0.0 unified: 11.0.5 + optional: true recma-parse@1.0.0: dependencies: @@ -12959,6 +12873,7 @@ snapshots: esast-util-from-js: 2.0.1 unified: 11.0.5 vfile: 6.0.3 + optional: true recma-stringify@1.0.0: dependencies: @@ -12966,6 +12881,7 @@ snapshots: estree-util-to-js: 2.0.0 unified: 11.0.5 vfile: 6.0.3 + optional: true reflect.getprototypeof@1.0.10: dependencies: @@ -13018,39 +12934,16 @@ snapshots: dependencies: jsesc: 3.1.0 - rehype-autolink-headings@7.1.0: - dependencies: - '@types/hast': 3.0.4 - '@ungap/structured-clone': 1.3.0 - hast-util-heading-rank: 3.0.0 - hast-util-is-element: 3.0.0 - unified: 11.0.5 - unist-util-visit: 5.1.0 - - rehype-components@0.3.0: - dependencies: - hast-util-is-element: 3.0.0 - unist-util-visit: 5.1.0 - rehype-expressive-code@0.44.2: dependencies: expressive-code: 0.44.2 - rehype-katex@7.0.1: - dependencies: - '@types/hast': 3.0.4 - '@types/katex': 0.16.7 - hast-util-from-html-isomorphic: 2.0.0 - hast-util-to-text: 4.0.2 - katex: 0.16.47 - unist-util-visit-parents: 6.0.2 - vfile: 6.0.3 - rehype-raw@7.0.0: dependencies: '@types/hast': 3.0.5 hast-util-raw: 9.1.0 vfile: 6.0.3 + optional: true rehype-recma@1.0.0: dependencies: @@ -13059,29 +12952,14 @@ snapshots: hast-util-to-estree: 3.1.3 transitivePeerDependencies: - supports-color - - rehype-slug@6.0.0: - dependencies: - '@types/hast': 3.0.4 - github-slugger: 2.0.0 - hast-util-heading-rank: 3.0.0 - hast-util-to-string: 3.0.1 - unist-util-visit: 5.1.0 + optional: true rehype-stringify@10.0.1: dependencies: '@types/hast': 3.0.5 hast-util-to-html: 9.0.5 unified: 11.0.5 - - remark-directive@3.0.1: - dependencies: - '@types/mdast': 4.0.4 - mdast-util-directive: 3.1.0 - micromark-extension-directive: 3.0.2 - unified: 11.0.5 - transitivePeerDependencies: - - supports-color + optional: true remark-gfm@4.0.1: dependencies: @@ -13093,24 +12971,7 @@ snapshots: unified: 11.0.5 transitivePeerDependencies: - supports-color - - remark-github-admonitions-to-directives@1.0.5: - dependencies: - '@types/mdast': 4.0.4 - mdast-util-directive: 3.1.0 - unified: 11.0.5 - unist-util-visit: 5.1.0 - transitivePeerDependencies: - - supports-color - - remark-math@6.0.0: - dependencies: - '@types/mdast': 4.0.4 - mdast-util-math: 3.0.0 - micromark-extension-math: 3.1.0 - unified: 11.0.5 - transitivePeerDependencies: - - supports-color + optional: true remark-mdx@3.1.1: dependencies: @@ -13118,6 +12979,7 @@ snapshots: micromark-extension-mdxjs: 3.0.0 transitivePeerDependencies: - supports-color + optional: true remark-parse@11.0.0: dependencies: @@ -13127,6 +12989,7 @@ snapshots: unified: 11.0.5 transitivePeerDependencies: - supports-color + optional: true remark-rehype@11.1.2: dependencies: @@ -13135,11 +12998,7 @@ snapshots: mdast-util-to-hast: 13.2.1 unified: 11.0.5 vfile: 6.0.3 - - remark-sectionize@2.1.0: - dependencies: - unist-util-find-after: 4.0.1 - unist-util-visit: 4.1.2 + optional: true remark-smartypants@3.0.3: dependencies: @@ -13147,12 +13006,14 @@ snapshots: retext-smartypants: 6.2.0 unified: 11.0.5 unist-util-visit: 5.1.0 + optional: true remark-stringify@11.0.0: dependencies: '@types/mdast': 4.0.4 mdast-util-to-markdown: 2.1.2 unified: 11.0.5 + optional: true request-light@0.5.8: {} @@ -13180,6 +13041,7 @@ snapshots: '@types/nlcst': 2.0.3 parse-latin: 7.0.0 unified: 11.0.5 + optional: true retext-smartypants@6.2.0: dependencies: @@ -13192,6 +13054,7 @@ snapshots: '@types/nlcst': 2.0.3 nlcst-to-string: 4.0.0 unified: 11.0.5 + optional: true retext@9.0.0: dependencies: @@ -13199,6 +13062,7 @@ snapshots: retext-latin: 4.0.0 retext-stringify: 4.0.0 unified: 11.0.5 + optional: true rolldown@1.2.8: dependencies: @@ -13318,6 +13182,11 @@ snapshots: parse-srcset: 1.0.2 postcss: 8.5.6 + satteri-katex@0.1.1(satteri@0.10.5): + dependencies: + katex: 0.16.47 + satteri: 0.10.5 + satteri@0.10.5: dependencies: '@types/estree-jsx': 1.0.5 @@ -13593,10 +13462,12 @@ snapshots: style-to-js@1.1.21: dependencies: style-to-object: 1.0.14 + optional: true style-to-object@1.0.14: dependencies: inline-style-parser: 0.2.7 + optional: true stylehacks@5.1.1(postcss@8.5.6): dependencies: @@ -13779,20 +13650,11 @@ snapshots: ohash: 2.0.12 undici: 8.10.2 - unist-util-find-after@4.0.1: - dependencies: - '@types/unist': 2.0.11 - unist-util-is: 5.2.1 - unist-util-find-after@5.0.0: dependencies: '@types/unist': 3.0.3 unist-util-is: 6.0.1 - unist-util-is@5.2.1: - dependencies: - '@types/unist': 2.0.11 - unist-util-is@6.0.1: dependencies: '@types/unist': 3.0.3 @@ -13801,10 +13663,12 @@ snapshots: dependencies: '@types/unist': 3.0.3 array-iterate: 2.0.1 + optional: true unist-util-position-from-estree@2.0.0: dependencies: '@types/unist': 3.0.3 + optional: true unist-util-position@5.0.0: dependencies: @@ -13814,6 +13678,7 @@ snapshots: dependencies: '@types/unist': 3.0.3 unist-util-visit: 5.1.0 + optional: true unist-util-stringify-position@4.0.0: dependencies: @@ -13822,23 +13687,13 @@ snapshots: unist-util-visit-children@3.0.0: dependencies: '@types/unist': 3.0.3 - - unist-util-visit-parents@5.1.3: - dependencies: - '@types/unist': 2.0.11 - unist-util-is: 5.2.1 + optional: true unist-util-visit-parents@6.0.2: dependencies: '@types/unist': 3.0.3 unist-util-is: 6.0.1 - unist-util-visit@4.1.2: - dependencies: - '@types/unist': 2.0.11 - unist-util-is: 5.2.1 - unist-util-visit-parents: 5.1.3 - unist-util-visit@5.1.0: dependencies: '@types/unist': 3.0.3 @@ -13902,6 +13757,7 @@ snapshots: dependencies: '@types/unist': 3.0.3 vfile: 6.0.3 + optional: true vfile-message@4.0.3: dependencies: @@ -14055,7 +13911,8 @@ snapshots: vscode-uri@3.2.0: {} - web-namespaces@2.0.1: {} + web-namespaces@2.0.1: + optional: true which-boxed-primitive@1.1.1: dependencies: diff --git a/src/plugins/satteri/excerpt.mjs b/src/plugins/satteri/excerpt.mjs index a759c65..acf356c 100644 --- a/src/plugins/satteri/excerpt.mjs +++ b/src/plugins/satteri/excerpt.mjs @@ -1,4 +1,5 @@ import { defineMdastPlugin } from "satteri" +import { toString } from "mdast-util-to-string" /** * 取正文第一个段落作为摘要,写进 frontmatter.excerpt。 @@ -11,7 +12,8 @@ export const excerpt = defineMdastPlugin({ let text = "" for (const node of root.children) { if (node.type !== "paragraph") continue - text = ctx.textContent(node, { includeImageAlt: true, includeHtml: true }) + // 同 reading-time:ctx.textContent 不含行内代码/公式,用 toString 保持一致 + text = toString(node) break } ctx.data.astro.frontmatter.excerpt = text diff --git a/src/plugins/satteri/reading-time.mjs b/src/plugins/satteri/reading-time.mjs index 957535d..372123e 100644 --- a/src/plugins/satteri/reading-time.mjs +++ b/src/plugins/satteri/reading-time.mjs @@ -1,4 +1,5 @@ import { defineMdastPlugin } from "satteri" +import { toString } from "mdast-util-to-string" import getReadingTime from "reading-time" /** @@ -10,8 +11,10 @@ import getReadingTime from "reading-time" export const readingTime = defineMdastPlugin({ name: "reading-time", after(root, ctx) { - // 与原实现 mdast-util-to-string 的默认行为对齐 - const text = ctx.textContent(root, { includeImageAlt: true, includeHtml: true }) + // 用 mdast-util-to-string 而不是 ctx.textContent: + // 后者只拼接纯 text 节点,会漏掉代码块、行内代码、公式、图片 alt, + // 导致字数比迁移前少一截(实测 LaTeX 那篇 830 → 488 字)。 + const text = toString(root) const stats = getReadingTime(text) const frontmatter = ctx.data.astro.frontmatter frontmatter.minutes = Math.max(1, Math.round(stats.minutes))