diff --git a/lib/helpers/mdx/recma.ts b/lib/helpers/mdx/recma.ts
new file mode 100644
index 00000000..3a6bd471
--- /dev/null
+++ b/lib/helpers/mdx/recma.ts
@@ -0,0 +1 @@
+export { default as recmaMdxEscapeMissingComponents } from "recma-mdx-escape-missing-components";
diff --git a/lib/helpers/mdx/rehype.ts b/lib/helpers/mdx/rehype.ts
new file mode 100644
index 00000000..ce28d96c
--- /dev/null
+++ b/lib/helpers/mdx/rehype.ts
@@ -0,0 +1,4 @@
+export { default as rehypeMdxImportMedia } from "rehype-mdx-import-media";
+export { default as rehypePrettyCode } from "rehype-pretty-code";
+export { default as rehypeSlug } from "rehype-slug";
+export { default as rehypeUnwrapImages } from "rehype-unwrap-images";
diff --git a/lib/helpers/remark-rehype-plugins.ts b/lib/helpers/mdx/remark.ts
similarity index 58%
rename from lib/helpers/remark-rehype-plugins.ts
rename to lib/helpers/mdx/remark.ts
index 119592f5..68461ec9 100644
--- a/lib/helpers/remark-rehype-plugins.ts
+++ b/lib/helpers/mdx/remark.ts
@@ -1,7 +1,3 @@
-export { default as rehypeMdxImportMedia } from "rehype-mdx-import-media";
-export { default as rehypePrettyCode } from "rehype-pretty-code";
-export { default as rehypeSlug } from "rehype-slug";
-export { default as rehypeUnwrapImages } from "rehype-unwrap-images";
export { default as remarkFrontmatter } from "remark-frontmatter";
export { default as remarkGfm } from "remark-gfm";
export { default as remarkHtml } from "remark-html";
diff --git a/lib/helpers/posts.ts b/lib/helpers/posts.ts
index a3665359..c0c8ae24 100644
--- a/lib/helpers/posts.ts
+++ b/lib/helpers/posts.ts
@@ -4,7 +4,7 @@ import path from "path";
import fs from "fs/promises";
import glob from "fast-glob";
import { unified } from "unified";
-import { remarkHtml, remarkParse, remarkSmartypants, remarkFrontmatter } from "./remark-rehype-plugins";
+import { remarkHtml, remarkParse, remarkSmartypants, remarkFrontmatter } from "./mdx/remark";
import { decode } from "html-entities";
import { POSTS_DIR } from "../config/constants";
@@ -106,7 +106,6 @@ export const getFrontMatter: {
/** Returns the content of a post with very limited processing to include in RSS feeds */
export const getContent = cache(async (slug: string): Promise
{/* prettier-ignore */}
\n", "").trim(); } catch (error) { console.error(`Failed to load/parse content for post with slug "${slug}":`, error); return undefined; diff --git a/next.config.ts b/next.config.ts index 4f646295..5bdca239 100644 --- a/next.config.ts +++ b/next.config.ts @@ -1,13 +1,13 @@ -/* eslint-disable @typescript-eslint/no-require-imports, import/no-anonymous-default-export */ - -import * as mdxPlugins from "./lib/helpers/remark-rehype-plugins"; +import * as remarkPlugins from "./lib/helpers/mdx/remark"; +import * as rehypePlugins from "./lib/helpers/mdx/rehype"; +import * as recmaPlugins from "./lib/helpers/mdx/recma"; import type { NextConfig } from "next"; // check environment variables at build time // https://env.t3.gg/docs/nextjs#validate-schema-on-build-(recommended) import "./lib/env"; -const nextConfig: NextConfig = { +const nextConfig = { reactStrictMode: true, pageExtensions: ["js", "jsx", "ts", "tsx", "md", "mdx"], eslint: { @@ -140,29 +140,32 @@ const nextConfig: NextConfig = { permanent: true, }, ], -}; +} satisfies NextConfig; // my own macgyvered version of next-compose-plugins (RIP) const nextPlugins: Array< // eslint-disable-next-line @typescript-eslint/no-explicit-any (config: NextConfig) => NextConfig | [(config: NextConfig) => NextConfig, any] > = [ + // eslint-disable-next-line @typescript-eslint/no-require-imports require("@next/bundle-analyzer")({ enabled: !!process.env.ANALYZE, }), + // eslint-disable-next-line @typescript-eslint/no-require-imports require("@next/mdx")({ options: { + recmaPlugins: [recmaPlugins.recmaMdxEscapeMissingComponents], remarkPlugins: [ - mdxPlugins.remarkFrontmatter, - mdxPlugins.remarkMdxFrontmatter, - mdxPlugins.remarkGfm, - mdxPlugins.remarkSmartypants, + remarkPlugins.remarkFrontmatter, + remarkPlugins.remarkMdxFrontmatter, + remarkPlugins.remarkGfm, + remarkPlugins.remarkSmartypants, ], rehypePlugins: [ - mdxPlugins.rehypeUnwrapImages, - mdxPlugins.rehypeSlug, + rehypePlugins.rehypeUnwrapImages, + rehypePlugins.rehypeSlug, [ - mdxPlugins.rehypePrettyCode, + rehypePlugins.rehypePrettyCode, { theme: { light: "material-theme-lighter", @@ -174,11 +177,12 @@ const nextPlugins: Array< keepBackground: false, }, ], - mdxPlugins.rehypeMdxImportMedia, + rehypePlugins.rehypeMdxImportMedia, ], }, }), ]; +// eslint-disable-next-line import/no-anonymous-default-export export default (): NextConfig => nextPlugins.reduce((acc, plugin) => (Array.isArray(plugin) ? plugin[0](acc, plugin[1]) : plugin(acc)), nextConfig); diff --git a/notes/dropping-dropbox/index.mdx b/notes/dropping-dropbox/index.mdx index 05230102..a7166382 100644 --- a/notes/dropping-dropbox/index.mdx +++ b/notes/dropping-dropbox/index.mdx @@ -31,7 +31,7 @@ Decisions made by the top folks at Dropbox gave me an increasingly sour taste in - Explicitly [dropping support for symlinking](https://news.ycombinator.com/item?id=20844363) (aka making aliases to) files outside of the literal `~/Dropbox` folder, which was incredibly helpful for nerds — once their main audience and biggest cheerleaders — with things like [dotfiles](https://github.com/jakejarvis/dotfiles) and Git repositories. - ...and as a bonus, making the process of canceling Dropbox Pro incredibly convoluted, annoying, and sketchy. Here's a video demonstration via [Justin Dunham](https://twitter.com/jwyattd): - + ## Seeking an alternative... diff --git a/notes/millenial-with-hillary-clinton/index.mdx b/notes/millenial-with-hillary-clinton/index.mdx index 5111ebd3..ff27347f 100644 --- a/notes/millenial-with-hillary-clinton/index.mdx +++ b/notes/millenial-with-hillary-clinton/index.mdx @@ -54,4 +54,4 @@ As [Bill Maher](https://medium.com/u/cdc04a9799f6) (an avid Bernie supporter) [s "https://ijyxfbpcm3itvdly.public.blob.vercel-storage.com/convention-T6klrrArGL0IO4QPaloIiIH164UqUC.mp4", "https://ijyxfbpcm3itvdly.public.blob.vercel-storage.com/convention.en-uHnecgVCrT9xA8EkzdEaeIwB0rHFC9.vtt", ]} -/> +> diff --git a/notes/presidential-candidates-404-pages/index.mdx b/notes/presidential-candidates-404-pages/index.mdx index 11908792..c726dbf3 100644 --- a/notes/presidential-candidates-404-pages/index.mdx +++ b/notes/presidential-candidates-404-pages/index.mdx @@ -27,7 +27,7 @@ I'm a _huge_ sucker for Kate McKinnon's spot-on impression of Warren on Saturday Although the designer who selected this GIF likely had _thousands_ of choices when searching "[Bernie finger wagging GIF](https://www.google.com/search?q=Bernie+finger+wagging+GIF&tbm=isch&tbs=itp:animated)," the text beside it is well-written and funny — even though we both know putting a page at [berniesanders.com/zxcliaosid](https://berniesanders.com/zxcliaosid/) probably won't be a top priority of a President Sanders. - + ## 3. Joe Biden — [joebiden.com](https://joebiden.com/asdfasdf404) @@ -39,13 +39,13 @@ Uncle Joe has a nice and simple 404 page. I like it, along with the Ray-Bans and A ballsy move, considering Beto's infamous [DUI arrest](https://www.politifact.com/texas/statements/2019/mar/14/club-growth/beto-orourke-arrested-dwi-flee-scene/) in the '90s — but still a clever ask for a donation and a great use of a GIF, even if it's left over from his Senate campaign. - + ## 5. Kamala Harris — [kamalaharris.org](https://kamalaharris.org/asdfasdf404) Another clean and simple page with a top-notch GIF. It injected some emotion into visiting [kamalaharris.com/alskdjf](https://kamalaharris.com/alskdjf). - + ## 6. Pete Buttigeg — [peteforamerica.com](https://peteforamerica.com/asdfasdf404/) diff --git a/package.json b/package.json index 1aa4ba31..dc8968b9 100644 --- a/package.json +++ b/package.json @@ -24,8 +24,8 @@ "@giscus/react": "^3.1.0", "@mdx-js/loader": "^3.1.0", "@mdx-js/react": "^3.1.0", - "@next/bundle-analyzer": "15.4.0-canary.10", - "@next/mdx": "15.4.0-canary.10", + "@next/bundle-analyzer": "15.4.0-canary.11", + "@next/mdx": "15.4.0-canary.11", "@octokit/graphql": "^8.2.2", "@octokit/graphql-schema": "^15.26.0", "@t3-oss/env-nextjs": "^0.13.0", @@ -40,7 +40,7 @@ "geist": "^1.3.1", "html-entities": "^2.6.0", "lucide-react": "0.503.0", - "next": "15.4.0-canary.10", + "next": "15.4.0-canary.11", "polished": "^4.3.1", "prop-types": "^15.8.1", "react": "19.1.0", @@ -56,6 +56,7 @@ "react-tooltip": "^5.28.1", "react-turnstile": "^1.1.4", "react-tweet": "^3.2.2", + "recma-mdx-escape-missing-components": "^1.1.2", "rehype-mdx-import-media": "^1.2.0", "rehype-pretty-code": "^0.14.1", "rehype-slug": "^6.0.0", @@ -77,7 +78,7 @@ "@eslint/js": "^9.25.1", "@jakejarvis/eslint-config": "^4.0.7", "@types/mdx": "^2.0.13", - "@types/node": "^22.14.1", + "@types/node": "^22.15.2", "@types/prop-types": "^15.7.14", "@types/react": "^19.1.2", "@types/react-dom": "^19.1.2", @@ -85,7 +86,7 @@ "babel-plugin-react-compiler": "19.0.0-beta-af1b7da-20250417", "cross-env": "^7.0.3", "eslint": "^9.25.1", - "eslint-config-next": "15.4.0-canary.10", + "eslint-config-next": "15.4.0-canary.11", "eslint-config-prettier": "^10.1.2", "eslint-plugin-css-modules": "^2.12.0", "eslint-plugin-import": "^2.31.0", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index aeca8f07..0f3c187f 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -27,11 +27,11 @@ importers: specifier: ^3.1.0 version: 3.1.0(@types/react@19.1.2)(react@19.1.0) '@next/bundle-analyzer': - specifier: 15.4.0-canary.10 - version: 15.4.0-canary.10 + specifier: 15.4.0-canary.11 + version: 15.4.0-canary.11 '@next/mdx': - specifier: 15.4.0-canary.10 - version: 15.4.0-canary.10(@mdx-js/loader@3.1.0(acorn@8.14.1))(@mdx-js/react@3.1.0(@types/react@19.1.2)(react@19.1.0)) + specifier: 15.4.0-canary.11 + version: 15.4.0-canary.11(@mdx-js/loader@3.1.0(acorn@8.14.1))(@mdx-js/react@3.1.0(@types/react@19.1.2)(react@19.1.0)) '@octokit/graphql': specifier: ^8.2.2 version: 8.2.2 @@ -46,7 +46,7 @@ importers: version: 1.34.8 '@vercel/analytics': specifier: ^1.5.0 - version: 1.5.0(next@15.4.0-canary.10(@babel/core@7.26.10)(babel-plugin-react-compiler@19.0.0-beta-af1b7da-20250417)(react-dom@19.1.0(react@19.1.0))(react@19.1.0))(react@19.1.0) + version: 1.5.0(next@15.4.0-canary.11(@babel/core@7.26.10)(babel-plugin-react-compiler@19.0.0-beta-af1b7da-20250417)(react-dom@19.1.0(react@19.1.0))(react@19.1.0))(react@19.1.0) cheerio: specifier: ^1.0.0 version: 1.0.0 @@ -67,7 +67,7 @@ importers: version: 4.2.2 geist: specifier: ^1.3.1 - version: 1.3.1(next@15.4.0-canary.10(@babel/core@7.26.10)(babel-plugin-react-compiler@19.0.0-beta-af1b7da-20250417)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)) + version: 1.3.1(next@15.4.0-canary.11(@babel/core@7.26.10)(babel-plugin-react-compiler@19.0.0-beta-af1b7da-20250417)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)) html-entities: specifier: ^2.6.0 version: 2.6.0 @@ -75,8 +75,8 @@ importers: specifier: 0.503.0 version: 0.503.0(react@19.1.0) next: - specifier: 15.4.0-canary.10 - version: 15.4.0-canary.10(@babel/core@7.26.10)(babel-plugin-react-compiler@19.0.0-beta-af1b7da-20250417)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + specifier: 15.4.0-canary.11 + version: 15.4.0-canary.11(@babel/core@7.26.10)(babel-plugin-react-compiler@19.0.0-beta-af1b7da-20250417)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) polished: specifier: ^4.3.1 version: 4.3.1 @@ -122,6 +122,9 @@ importers: react-tweet: specifier: ^3.2.2 version: 3.2.2(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + recma-mdx-escape-missing-components: + specifier: ^1.1.2 + version: 1.1.2(unified@11.0.5) rehype-mdx-import-media: specifier: ^1.2.0 version: 1.2.0 @@ -181,8 +184,8 @@ importers: specifier: ^2.0.13 version: 2.0.13 '@types/node': - specifier: ^22.14.1 - version: 22.14.1 + specifier: ^22.15.2 + version: 22.15.2 '@types/prop-types': specifier: ^15.7.14 version: 15.7.14 @@ -205,8 +208,8 @@ importers: specifier: ^9.25.1 version: 9.25.1 eslint-config-next: - specifier: 15.4.0-canary.10 - version: 15.4.0-canary.10(eslint@9.25.1)(typescript@5.8.3) + specifier: 15.4.0-canary.11 + version: 15.4.0-canary.11(eslint@9.25.1)(typescript@5.8.3) eslint-config-prettier: specifier: ^10.1.2 version: 10.1.2(eslint@9.25.1) @@ -671,17 +674,17 @@ packages: '@napi-rs/wasm-runtime@0.2.9': resolution: {integrity: sha512-OKRBiajrrxB9ATokgEQoG87Z25c67pCpYcCwmXYX8PBftC9pBfN18gnm/fh1wurSLEKIAt+QRFLFCQISrb66Jg==} - '@next/bundle-analyzer@15.4.0-canary.10': - resolution: {integrity: sha512-UVepO46npXXsSMHmFLDxStiCBMqOv8NxV6KAh0t7ZWZfp+Zmm2wzJ5WoP+9FcmY/fW93i6dLGuQYyKmIe2OOUg==} + '@next/bundle-analyzer@15.4.0-canary.11': + resolution: {integrity: sha512-6rJJWcVwf+fOPbVr7PTQP1nNCEtw2lrMU2Dk1HVxfNwpVpKAzy6kOndpnzp+9Huq0mezLcmFuJ9Qfo35Y2zWbg==} - '@next/env@15.4.0-canary.10': - resolution: {integrity: sha512-7B71o6sBN24oZvJdMzgnxGG+F+4+grnubP4V2OFXvfrep7ZyJkt73Px31SHLaLXIRLcoCHsv++pfmT4YfC4Uog==} + '@next/env@15.4.0-canary.11': + resolution: {integrity: sha512-UoGIxI4VR0QxCCkVLKw4USofRR72BdwwqbJZKKA9W812mWoO7gMDAkSQ2pARul+0/LPmzzWQGzV4MNJykPw7sg==} - '@next/eslint-plugin-next@15.4.0-canary.10': - resolution: {integrity: sha512-Ak8fqghV5PJKEzlN2cn9jKlRkAZzH3Hmb06vcB7m7ABIFt/VaW9g6TVZ7ISLYVOSnQTKiT2/o6I/HCCa/vMCVw==} + '@next/eslint-plugin-next@15.4.0-canary.11': + resolution: {integrity: sha512-zoYBXimvcbnBkOT0VJgQJDUqSVVpVsUZwQNoZLJN71HLDSfkhTkEN+ohhO3vUIbCRWAB7VKh1+QzPBQ5t9eHtg==} - '@next/mdx@15.4.0-canary.10': - resolution: {integrity: sha512-wao194bAP6Jq1AVvBhfB+UB4I0A739JTIEiKFC2a1uRxNnLPUyW4cnbvkHD/zGScyNoRXAswZLbeqNwYtn5IWQ==} + '@next/mdx@15.4.0-canary.11': + resolution: {integrity: sha512-eX5Oe2JqZu9I8b4MgIqYQdRFyVcINVdSUZgg6rXmqH5dPubyXqeBsy9E9Mf7xemhtRAL9NKRYgHiyPC6LYjUwQ==} peerDependencies: '@mdx-js/loader': '>=0.15.0' '@mdx-js/react': '>=0.15.0' @@ -691,50 +694,50 @@ packages: '@mdx-js/react': optional: true - '@next/swc-darwin-arm64@15.4.0-canary.10': - resolution: {integrity: sha512-jLYzivL7h5n2xkozCMqWJygBZARouL//ihInn/IaZbxbKNd/c2tcXsS3dc0J11CfDNItP4dFob2I8Zsr4q9I/w==} + '@next/swc-darwin-arm64@15.4.0-canary.11': + resolution: {integrity: sha512-ZlyAF3fcrl+gbAz6TVpbLWa0fUJXBWa51JSAXJyeYYpzBT2X2sfavILIhnQqmY+ezRZkHL8ZI459uPWeCxEdgw==} engines: {node: '>= 10'} cpu: [arm64] os: [darwin] - '@next/swc-darwin-x64@15.4.0-canary.10': - resolution: {integrity: sha512-kOOshC0VPfAAiVUr176gx142KhRH4sHU6BGZh5y3tHzgKHBQGBsbtbnOXCOVSGE9W7S/mIqs+T+fB7P7bWLfJA==} + '@next/swc-darwin-x64@15.4.0-canary.11': + resolution: {integrity: sha512-Zz0sUNNRpeCNXsfZDHo2gSL3d2ln2rPR6pRCoif9bBtRRU8z25ernDys1RR7NqvMhYKlJSaOsK/eQeQERLY+ow==} engines: {node: '>= 10'} cpu: [x64] os: [darwin] - '@next/swc-linux-arm64-gnu@15.4.0-canary.10': - resolution: {integrity: sha512-rgEZdSFDo2Tw5pv0Mby+0IsyBmjrBzBjcK/VF/aXTmQjKuEOKkmpGtEtHIzuHTGEplml6g/suDg+ySeTI8M5Ww==} + '@next/swc-linux-arm64-gnu@15.4.0-canary.11': + resolution: {integrity: sha512-hKsDUWFwgmBUj3PESle/KiOZ3lDELIHY9AbEsEkkUv6ddxTmDWurxz17ARUihUtWIewevwtDms0X6/tGnwMHsQ==} engines: {node: '>= 10'} cpu: [arm64] os: [linux] - '@next/swc-linux-arm64-musl@15.4.0-canary.10': - resolution: {integrity: sha512-ay/xrzPoiV3WaODHg/83wis0BpXZphI4VM+VmHy2e3RZ1qKTqjzzt/cJ1Dc1HR6dH2uzG7fgJohH1DUbIGXpaQ==} + '@next/swc-linux-arm64-musl@15.4.0-canary.11': + resolution: {integrity: sha512-HqICfZyXDX+xXD4Js4RWOpcvXpcsePIqlnlJ2XsTgoX6S33Cvz2yUHzrOubMHXHbz3EYPa+nahQ4N6VUVq9JcA==} engines: {node: '>= 10'} cpu: [arm64] os: [linux] - '@next/swc-linux-x64-gnu@15.4.0-canary.10': - resolution: {integrity: sha512-7OhIXD38QuHhuVrSjIn/kiFEyphGVw9J1SkPKuaJCKzHGVfZOTpS3p24Iy7U4ZCD9CYcTcXaFBSD3Nde8Qzk7A==} + '@next/swc-linux-x64-gnu@15.4.0-canary.11': + resolution: {integrity: sha512-0hGchpdzp6LyFBIPoE0rFLjbW1uoFGucgqAtcuw4M5+vTqTJSdh6m1kxJ9LY7IhCs+j0TOxXsuHHUgkPcma6vQ==} engines: {node: '>= 10'} cpu: [x64] os: [linux] - '@next/swc-linux-x64-musl@15.4.0-canary.10': - resolution: {integrity: sha512-OoHDSZN9sWWO3ckODSvL9mC4tW090Oss4kSVUtQmbHSghdI+RhSSMwGxMhKJixaky3I/b+pioKtSKLINaPRuHw==} + '@next/swc-linux-x64-musl@15.4.0-canary.11': + resolution: {integrity: sha512-rGe/4JSOR9GfZHa48mpZd3mBH9OPpIEmbkm6dx4cmoi8+xRR6ctFH0w0ft/LLvQCqGZnS4fmvGDPYQQuwMnfxg==} engines: {node: '>= 10'} cpu: [x64] os: [linux] - '@next/swc-win32-arm64-msvc@15.4.0-canary.10': - resolution: {integrity: sha512-PbKDLTP49C5JuEQt76OhRbSF99g3WXI/C7x5nGPNinCna3xVru15S5xTiXwiPEwbv7moco6vu74G+8QWkWxaSg==} + '@next/swc-win32-arm64-msvc@15.4.0-canary.11': + resolution: {integrity: sha512-UoyYOZBX+PgGCLNJFY5jVKoTHPKJZuW78nEpV429AI3vHfJvbM4SAVRGVKFkqjknB2Y8NeMyg4YUoSTlpwf3fQ==} engines: {node: '>= 10'} cpu: [arm64] os: [win32] - '@next/swc-win32-x64-msvc@15.4.0-canary.10': - resolution: {integrity: sha512-7rsyd22S4JH7kyq3TEvHslM82xBNxf6tG3MywuELXjSS3aP98oil8bGXGewku8dAse0D4ro3f27gHotinI8N+Q==} + '@next/swc-win32-x64-msvc@15.4.0-canary.11': + resolution: {integrity: sha512-VmjnbvMN2MMTyx8k7aMGS1MAO7gvFpYN/Iu5U2cRpDvCximA5Fn9LwmBWYTf4aj+e4dk0zn5TL2lSa0HzGdTzQ==} engines: {node: '>= 10'} cpu: [x64] os: [win32] @@ -929,8 +932,8 @@ packages: '@types/nlcst@2.0.3': resolution: {integrity: sha512-vSYNSDe6Ix3q+6Z7ri9lyWqgGhJTmzRjZRqyq15N0Z/1/UnVsno9G/N40NBijoYx2seFDIl0+B2mgAb9mezUCA==} - '@types/node@22.14.1': - resolution: {integrity: sha512-u0HuPQwe/dHrItgHHpmw3N2fYCR6x4ivMNbPHRkBVP4CvN+kiRrKHWk3i8tXiO/joPwXLMYvF9TTF0eqgHIuOw==} + '@types/node@22.15.2': + resolution: {integrity: sha512-uKXqKN9beGoMdBfcaTY1ecwz6ctxuJAcUlwE55938g0ZJ8lRxwAZqRz2AJ4pzpt5dHdTPMB863UZ0ESiFUcP7A==} '@types/prop-types@15.7.14': resolution: {integrity: sha512-gNMvNH49DJ7OJYv+KAKn0Xp45p8PLl6zo2YnvDIbTd4J6MER2BmWN49TG7n9LvkyihINxeKW8+3bfS2yDC9dzQ==} @@ -1636,8 +1639,8 @@ packages: resolution: {integrity: sha512-/veY75JbMK4j1yjvuUxuVsiS/hr/4iHs9FTT6cgTexxdE0Ly/glccBAkloH/DofkjRbZU3bnoj38mOmhkZ0lHw==} engines: {node: '>=12'} - eslint-config-next@15.4.0-canary.10: - resolution: {integrity: sha512-sHo7IEuNvRIKuKhgP0hQMjHsKJVjxGtn/4aoDxyS1XlGMc20KA8q3WUky8xMY3gHpV7WctOrhpaLYIvyF3abAQ==} + eslint-config-next@15.4.0-canary.11: + resolution: {integrity: sha512-JdAxRmmWrLB6TLIkJIfrA3qgQeXJIFfqoQz6w4XcDHpD2CHuc9XmdiadtKstuvs0EKJm8QIVlhjiUQ4ZWFyRlg==} peerDependencies: eslint: ^7.23.0 || ^8.0.0 || ^9.0.0 typescript: '>=3.3.1' @@ -2737,8 +2740,8 @@ packages: natural-compare@1.4.0: resolution: {integrity: sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==} - next@15.4.0-canary.10: - resolution: {integrity: sha512-6TUMe1FGRkNosSTFS2KkynZX3tbGf3M4ZKF9AnEIqds6WCptnyZjdack9fSzioV1WdI3TzKe4O1FiyRoQTzkiA==} + next@15.4.0-canary.11: + resolution: {integrity: sha512-Vz1EndhIbsvt03kLFEvvpNH+ipOAzzgtlFjQ0VppoMQhQomlDzWYca8fYzT7KVEUHS96xBTvuLXBVgn70IIubA==} engines: {node: ^18.18.0 || ^19.8.0 || >= 20.0.0} hasBin: true peerDependencies: @@ -3115,6 +3118,11 @@ packages: recma-jsx@1.0.0: resolution: {integrity: sha512-5vwkv65qWwYxg+Atz95acp8DMu1JDSqdGkA2Of1j6rCreyFUE/gp15fC8MnGEuG1W68UKjM6x6+YTWIh7hZM/Q==} + recma-mdx-escape-missing-components@1.1.2: + resolution: {integrity: sha512-XqSprkB+OQgqK07NrNm8PiA8arI8Y7sdHzVQvcxT3/8QHXqUWGOp2Oukn5xfNt86AMKN1UkTiY7ThfvblhEQMQ==} + peerDependencies: + unified: ^11 + recma-parse@1.0.0: resolution: {integrity: sha512-OYLsIGBB5Y5wjnSnQW6t3Xg7q3fQ7FWbw/vcXtORTnyaSFscOtABg+7Pnz6YZ6c27fG1/aN8CjfwoUEUIdwqWQ==} @@ -4314,48 +4322,48 @@ snapshots: '@tybys/wasm-util': 0.9.0 optional: true - '@next/bundle-analyzer@15.4.0-canary.10': + '@next/bundle-analyzer@15.4.0-canary.11': dependencies: webpack-bundle-analyzer: 4.10.1 transitivePeerDependencies: - bufferutil - utf-8-validate - '@next/env@15.4.0-canary.10': {} + '@next/env@15.4.0-canary.11': {} - '@next/eslint-plugin-next@15.4.0-canary.10': + '@next/eslint-plugin-next@15.4.0-canary.11': dependencies: fast-glob: 3.3.1 - '@next/mdx@15.4.0-canary.10(@mdx-js/loader@3.1.0(acorn@8.14.1))(@mdx-js/react@3.1.0(@types/react@19.1.2)(react@19.1.0))': + '@next/mdx@15.4.0-canary.11(@mdx-js/loader@3.1.0(acorn@8.14.1))(@mdx-js/react@3.1.0(@types/react@19.1.2)(react@19.1.0))': dependencies: source-map: 0.7.4 optionalDependencies: '@mdx-js/loader': 3.1.0(acorn@8.14.1) '@mdx-js/react': 3.1.0(@types/react@19.1.2)(react@19.1.0) - '@next/swc-darwin-arm64@15.4.0-canary.10': + '@next/swc-darwin-arm64@15.4.0-canary.11': optional: true - '@next/swc-darwin-x64@15.4.0-canary.10': + '@next/swc-darwin-x64@15.4.0-canary.11': optional: true - '@next/swc-linux-arm64-gnu@15.4.0-canary.10': + '@next/swc-linux-arm64-gnu@15.4.0-canary.11': optional: true - '@next/swc-linux-arm64-musl@15.4.0-canary.10': + '@next/swc-linux-arm64-musl@15.4.0-canary.11': optional: true - '@next/swc-linux-x64-gnu@15.4.0-canary.10': + '@next/swc-linux-x64-gnu@15.4.0-canary.11': optional: true - '@next/swc-linux-x64-musl@15.4.0-canary.10': + '@next/swc-linux-x64-musl@15.4.0-canary.11': optional: true - '@next/swc-win32-arm64-msvc@15.4.0-canary.10': + '@next/swc-win32-arm64-msvc@15.4.0-canary.11': optional: true - '@next/swc-win32-x64-msvc@15.4.0-canary.10': + '@next/swc-win32-x64-msvc@15.4.0-canary.11': optional: true '@nodelib/fs.scandir@2.1.5': @@ -4550,7 +4558,7 @@ snapshots: '@types/concat-stream@2.0.3': dependencies: - '@types/node': 22.14.1 + '@types/node': 22.15.2 '@types/debug@4.1.12': dependencies: @@ -4584,7 +4592,7 @@ snapshots: dependencies: '@types/unist': 3.0.3 - '@types/node@22.14.1': + '@types/node@22.15.2': dependencies: undici-types: 6.21.0 @@ -4743,9 +4751,9 @@ snapshots: dependencies: crypto-js: 4.2.0 - '@vercel/analytics@1.5.0(next@15.4.0-canary.10(@babel/core@7.26.10)(babel-plugin-react-compiler@19.0.0-beta-af1b7da-20250417)(react-dom@19.1.0(react@19.1.0))(react@19.1.0))(react@19.1.0)': + '@vercel/analytics@1.5.0(next@15.4.0-canary.11(@babel/core@7.26.10)(babel-plugin-react-compiler@19.0.0-beta-af1b7da-20250417)(react-dom@19.1.0(react@19.1.0))(react@19.1.0))(react@19.1.0)': optionalDependencies: - next: 15.4.0-canary.10(@babel/core@7.26.10)(babel-plugin-react-compiler@19.0.0-beta-af1b7da-20250417)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + next: 15.4.0-canary.11(@babel/core@7.26.10)(babel-plugin-react-compiler@19.0.0-beta-af1b7da-20250417)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) react: 19.1.0 abbrev@2.0.0: {} @@ -5343,9 +5351,9 @@ snapshots: escape-string-regexp@5.0.0: {} - eslint-config-next@15.4.0-canary.10(eslint@9.25.1)(typescript@5.8.3): + eslint-config-next@15.4.0-canary.11(eslint@9.25.1)(typescript@5.8.3): dependencies: - '@next/eslint-plugin-next': 15.4.0-canary.10 + '@next/eslint-plugin-next': 15.4.0-canary.11 '@rushstack/eslint-patch': 1.11.0 '@typescript-eslint/eslint-plugin': 8.30.1(@typescript-eslint/parser@8.30.1(eslint@9.25.1)(typescript@5.8.3))(eslint@9.25.1)(typescript@5.8.3) '@typescript-eslint/parser': 8.30.1(eslint@9.25.1)(typescript@5.8.3) @@ -5764,9 +5772,9 @@ snapshots: functions-have-names@1.2.3: {} - geist@1.3.1(next@15.4.0-canary.10(@babel/core@7.26.10)(babel-plugin-react-compiler@19.0.0-beta-af1b7da-20250417)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)): + geist@1.3.1(next@15.4.0-canary.11(@babel/core@7.26.10)(babel-plugin-react-compiler@19.0.0-beta-af1b7da-20250417)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)): dependencies: - next: 15.4.0-canary.10(@babel/core@7.26.10)(babel-plugin-react-compiler@19.0.0-beta-af1b7da-20250417)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + next: 15.4.0-canary.11(@babel/core@7.26.10)(babel-plugin-react-compiler@19.0.0-beta-af1b7da-20250417)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) gensync@1.0.0-beta.2: {} @@ -6911,9 +6919,9 @@ snapshots: natural-compare@1.4.0: {} - next@15.4.0-canary.10(@babel/core@7.26.10)(babel-plugin-react-compiler@19.0.0-beta-af1b7da-20250417)(react-dom@19.1.0(react@19.1.0))(react@19.1.0): + next@15.4.0-canary.11(@babel/core@7.26.10)(babel-plugin-react-compiler@19.0.0-beta-af1b7da-20250417)(react-dom@19.1.0(react@19.1.0))(react@19.1.0): dependencies: - '@next/env': 15.4.0-canary.10 + '@next/env': 15.4.0-canary.11 '@swc/counter': 0.1.3 '@swc/helpers': 0.5.15 busboy: 1.6.0 @@ -6923,14 +6931,14 @@ snapshots: react-dom: 19.1.0(react@19.1.0) styled-jsx: 5.1.6(@babel/core@7.26.10)(react@19.1.0) optionalDependencies: - '@next/swc-darwin-arm64': 15.4.0-canary.10 - '@next/swc-darwin-x64': 15.4.0-canary.10 - '@next/swc-linux-arm64-gnu': 15.4.0-canary.10 - '@next/swc-linux-arm64-musl': 15.4.0-canary.10 - '@next/swc-linux-x64-gnu': 15.4.0-canary.10 - '@next/swc-linux-x64-musl': 15.4.0-canary.10 - '@next/swc-win32-arm64-msvc': 15.4.0-canary.10 - '@next/swc-win32-x64-msvc': 15.4.0-canary.10 + '@next/swc-darwin-arm64': 15.4.0-canary.11 + '@next/swc-darwin-x64': 15.4.0-canary.11 + '@next/swc-linux-arm64-gnu': 15.4.0-canary.11 + '@next/swc-linux-arm64-musl': 15.4.0-canary.11 + '@next/swc-linux-x64-gnu': 15.4.0-canary.11 + '@next/swc-linux-x64-musl': 15.4.0-canary.11 + '@next/swc-win32-arm64-msvc': 15.4.0-canary.11 + '@next/swc-win32-x64-msvc': 15.4.0-canary.11 babel-plugin-react-compiler: 19.0.0-beta-af1b7da-20250417 sharp: 0.34.1 transitivePeerDependencies: @@ -7318,6 +7326,12 @@ snapshots: transitivePeerDependencies: - acorn + recma-mdx-escape-missing-components@1.1.2(unified@11.0.5): + dependencies: + '@types/estree': 1.0.7 + estree-util-visit: 2.0.0 + unified: 11.0.5 + recma-parse@1.0.0: dependencies: '@types/estree': 1.0.7 @@ -8064,7 +8078,7 @@ snapshots: '@types/concat-stream': 2.0.3 '@types/debug': 4.1.12 '@types/is-empty': 1.2.3 - '@types/node': 22.14.1 + '@types/node': 22.15.2 '@types/unist': 3.0.3 concat-stream: 2.0.0 debug: 4.4.0