1
mirror of https://github.com/jakejarvis/jarv.is.git synced 2025-04-28 06:30:28 -04:00

strip js import/export statements from raw post content (for rss, etc.)

This commit is contained in:
Jake Jarvis 2025-04-27 17:51:36 -04:00
parent 4cc25f7ab9
commit c4f67f170b
Signed by: jake
SSH Key Fingerprint: SHA256:nCkvAjYA6XaSPUqc4TfbBQTpzr8Xj7ritg/sGInCdkc
10 changed files with 122 additions and 103 deletions

1
lib/helpers/mdx/recma.ts Normal file
View File

@ -0,0 +1 @@
export { default as recmaMdxEscapeMissingComponents } from "recma-mdx-escape-missing-components";

View File

@ -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";

View File

@ -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";

View File

@ -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<string | undefined> => {
try {
// TODO: also remove MDX-related syntax (e.g. import/export statements)
const content = await unified()
.use(remarkParse)
.use(remarkFrontmatter)
@ -137,7 +136,7 @@ export const getContent = cache(async (slug: string): Promise<string | undefined
.process(await fs.readFile(path.join(process.cwd(), `${POSTS_DIR}/${slug}/index.mdx`)));
// convert the parsed content to a string with "safe" HTML
return content.toString().replaceAll("<p></p>", "").trim();
return content.toString().replaceAll("<p></p>\n", "").replaceAll("<p>{/* prettier-ignore */}</p>\n", "").trim();
} catch (error) {
console.error(`Failed to load/parse content for post with slug "${slug}":`, error);
return undefined;

View File

@ -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);

View File

@ -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):
<Video src="https://ijyxfbpcm3itvdly.public.blob.vercel-storage.com/cancel-H27HQVT7KMOQZcWlaR9UDi7q6BQNIr.mp4" />
<Video src="https://ijyxfbpcm3itvdly.public.blob.vercel-storage.com/cancel-H27HQVT7KMOQZcWlaR9UDi7q6BQNIr.mp4"></Video>
## Seeking an alternative...

View File

@ -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",
]}
/>
></Video>

View File

@ -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.
<Video src="https://ijyxfbpcm3itvdly.public.blob.vercel-storage.com/sanders-C68KSJMWFGknQgKYZHFaDH55ipi3hE.mp4" />
<Video src="https://ijyxfbpcm3itvdly.public.blob.vercel-storage.com/sanders-C68KSJMWFGknQgKYZHFaDH55ipi3hE.mp4"></Video>
## 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.
<Video src="https://ijyxfbpcm3itvdly.public.blob.vercel-storage.com/orourke-oacYVeAX9oRTetK5z1N2MHqqvfRhos.mp4" />
<Video src="https://ijyxfbpcm3itvdly.public.blob.vercel-storage.com/orourke-oacYVeAX9oRTetK5z1N2MHqqvfRhos.mp4"></Video>
## 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).
<Video src="https://ijyxfbpcm3itvdly.public.blob.vercel-storage.com/harris-WH3JQm4pcB8NHGnK0hGPEp4olLCZfc.mp4" />
<Video src="https://ijyxfbpcm3itvdly.public.blob.vercel-storage.com/harris-WH3JQm4pcB8NHGnK0hGPEp4olLCZfc.mp4"></Video>
## 6. Pete Buttigeg — [peteforamerica.com](https://peteforamerica.com/asdfasdf404/)

View File

@ -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",

160
pnpm-lock.yaml generated
View File

@ -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