mirror of
https://github.com/jakejarvis/jarv.is.git
synced 2025-04-26 01:45:25 -04:00
json-ld improvements
This commit is contained in:
parent
b626955731
commit
9fd3de8569
1
.npmrc
1
.npmrc
@ -1,2 +1,3 @@
|
||||
public-hoist-pattern[]=*eslint*
|
||||
public-hoist-pattern[]=*prettier*
|
||||
public-hoist-pattern[]=*stylelint*
|
||||
|
@ -1,6 +1,9 @@
|
||||
import { JsonLd } from "react-schemaorg";
|
||||
import PageTitle from "../../components/PageTitle";
|
||||
import Video from "../../components/Video";
|
||||
import { addMetadata } from "../../lib/helpers/metadata";
|
||||
import { BASE_URL } from "../../lib/config/constants";
|
||||
import type { VideoObject } from "schema-dts";
|
||||
|
||||
import thumbnail from "./thumbnail.png";
|
||||
|
||||
@ -15,6 +18,20 @@ export const metadata = addMetadata({
|
||||
const Page = () => {
|
||||
return (
|
||||
<>
|
||||
<JsonLd<VideoObject>
|
||||
item={{
|
||||
"@context": "https://schema.org",
|
||||
"@type": "VideoObject",
|
||||
name: metadata.title as string,
|
||||
description: metadata.description as string,
|
||||
thumbnailUrl: `${BASE_URL}${thumbnail.src}`,
|
||||
contentUrl:
|
||||
"https://bcm6wnmyyzj1p5ls.public.blob.vercel-storage.com/videos/birthday/birthday-8iayCEy1jfEHpNGZkdBPvxPFOuGz0g.mp4",
|
||||
uploadDate: "1996-02-06T00:00:00Z",
|
||||
duration: "PT6M10S",
|
||||
}}
|
||||
/>
|
||||
|
||||
<PageTitle canonical="/birthday">1996.mov</PageTitle>
|
||||
|
||||
<Video
|
||||
|
@ -1,7 +1,10 @@
|
||||
import { JsonLd } from "react-schemaorg";
|
||||
import PageTitle from "../../components/PageTitle";
|
||||
import Link from "../../components/Link";
|
||||
import Video from "../../components/Video";
|
||||
import { addMetadata } from "../../lib/helpers/metadata";
|
||||
import { BASE_URL } from "../../lib/config/constants";
|
||||
import type { VideoObject } from "schema-dts";
|
||||
|
||||
import thumbnail from "./thumbnail.png";
|
||||
|
||||
@ -16,6 +19,20 @@ export const metadata = addMetadata({
|
||||
const Page = () => {
|
||||
return (
|
||||
<>
|
||||
<JsonLd<VideoObject>
|
||||
item={{
|
||||
"@context": "https://schema.org",
|
||||
"@type": "VideoObject",
|
||||
name: metadata.title as string,
|
||||
description: metadata.description as string,
|
||||
thumbnailUrl: `${BASE_URL}${thumbnail.src}`,
|
||||
contentUrl:
|
||||
"https://bcm6wnmyyzj1p5ls.public.blob.vercel-storage.com/videos/hillary/convention-720p-YLGreYE59PzmPo4epB21HQG6jXgYL5.mp4",
|
||||
uploadDate: "2016-07-25T00:00:00Z",
|
||||
duration: "PT1M51S",
|
||||
}}
|
||||
/>
|
||||
|
||||
<PageTitle canonical="/hillary">HRC.mov</PageTitle>
|
||||
|
||||
<Video
|
||||
|
@ -13,8 +13,10 @@
|
||||
}
|
||||
|
||||
.container {
|
||||
margin: 0 auto;
|
||||
display: block;
|
||||
width: 100%;
|
||||
max-width: var(--max-width);
|
||||
margin: 0 auto;
|
||||
}
|
||||
|
||||
@media (max-width: 768px) {
|
||||
|
@ -1,4 +1,5 @@
|
||||
import clsx from "clsx";
|
||||
import { JsonLd } from "react-schemaorg";
|
||||
import Analytics from "./analytics";
|
||||
import { ThemeProvider } from "../contexts/ThemeContext";
|
||||
import Header from "../components/Header";
|
||||
@ -8,7 +9,7 @@ import * as config from "../lib/config";
|
||||
import { BASE_URL, MAX_WIDTH } from "../lib/config/constants";
|
||||
import defaultMetadata from "../lib/config/metadata";
|
||||
import type { Metadata } from "next";
|
||||
import type { Person, WithContext } from "schema-dts";
|
||||
import type { Person, WebSite } from "schema-dts";
|
||||
|
||||
import { GeistMono, GeistSans } from "../lib/styles/fonts";
|
||||
import "modern-normalize/modern-normalize.css"; // https://github.com/sindresorhus/modern-normalize/blob/main/modern-normalize.css
|
||||
@ -21,35 +22,52 @@ import ogImage from "./opengraph-image.jpg";
|
||||
|
||||
export const metadata: Metadata = defaultMetadata;
|
||||
|
||||
// https://nextjs.org/docs/app/building-your-application/optimizing/metadata#json-ld
|
||||
const jsonLd: WithContext<Person> = {
|
||||
"@context": "https://schema.org",
|
||||
"@type": "Person",
|
||||
name: config.authorName,
|
||||
url: BASE_URL,
|
||||
image: `${BASE_URL}${ogImage.src}`,
|
||||
sameAs: [
|
||||
BASE_URL,
|
||||
`https://github.com/${config.authorSocial?.github}`,
|
||||
`https://keybase.io/${config.authorSocial?.keybase}`,
|
||||
`https://twitter.com/${config.authorSocial?.twitter}`,
|
||||
`https://medium.com/@${config.authorSocial?.medium}`,
|
||||
`https://www.linkedin.com/in/${config.authorSocial?.linkedin}/`,
|
||||
`https://www.facebook.com/${config.authorSocial?.facebook}`,
|
||||
`https://www.instagram.com/${config.authorSocial?.instagram}/`,
|
||||
`https://${config.authorSocial?.mastodon}`,
|
||||
`https://bsky.app/profile/${config.authorSocial?.bluesky}`,
|
||||
],
|
||||
};
|
||||
|
||||
const RootLayout = ({ children }: Readonly<{ children: React.ReactNode }>) => {
|
||||
return (
|
||||
<html lang={config.siteLocale} suppressHydrationWarning>
|
||||
<head>
|
||||
<script type="application/ld+json" dangerouslySetInnerHTML={{ __html: JSON.stringify(jsonLd) }} />
|
||||
<JsonLd<Person>
|
||||
item={{
|
||||
"@context": "https://schema.org",
|
||||
"@type": "Person",
|
||||
"@id": `${BASE_URL}/#person`,
|
||||
name: config.authorName,
|
||||
url: BASE_URL,
|
||||
image: `${BASE_URL}${ogImage.src}`,
|
||||
sameAs: [
|
||||
BASE_URL,
|
||||
`https://github.com/${config.authorSocial?.github}`,
|
||||
`https://keybase.io/${config.authorSocial?.keybase}`,
|
||||
`https://twitter.com/${config.authorSocial?.twitter}`,
|
||||
`https://medium.com/@${config.authorSocial?.medium}`,
|
||||
`https://www.linkedin.com/in/${config.authorSocial?.linkedin}/`,
|
||||
`https://www.facebook.com/${config.authorSocial?.facebook}`,
|
||||
`https://www.instagram.com/${config.authorSocial?.instagram}/`,
|
||||
`https://${config.authorSocial?.mastodon}`,
|
||||
`https://bsky.app/profile/${config.authorSocial?.bluesky}`,
|
||||
],
|
||||
}}
|
||||
/>
|
||||
|
||||
<JsonLd<WebSite>
|
||||
item={{
|
||||
"@context": "https://schema.org",
|
||||
"@type": "WebSite",
|
||||
"@id": `${BASE_URL}/#website`,
|
||||
name: config.siteName,
|
||||
url: BASE_URL,
|
||||
author: config.authorName,
|
||||
description: config.longDescription,
|
||||
inLanguage: config.siteLocale,
|
||||
license: config.licenseUrl,
|
||||
}}
|
||||
/>
|
||||
</head>
|
||||
|
||||
<body className={clsx(GeistMono.variable, GeistSans.variable)}>
|
||||
<body
|
||||
className={clsx(GeistMono.variable, GeistSans.variable)}
|
||||
style={{ ["--max-width" as string]: `${MAX_WIDTH}px` }}
|
||||
>
|
||||
<ThemeProvider>
|
||||
<SkipToContentLink />
|
||||
|
||||
@ -58,9 +76,7 @@ const RootLayout = ({ children }: Readonly<{ children: React.ReactNode }>) => {
|
||||
|
||||
<main className={styles.default}>
|
||||
<SkipToContentTarget />
|
||||
<div className={styles.container} style={{ maxWidth: MAX_WIDTH }}>
|
||||
{children}
|
||||
</div>
|
||||
<div className={styles.container}>{children}</div>
|
||||
</main>
|
||||
|
||||
<Footer />
|
||||
|
@ -1,7 +1,10 @@
|
||||
import { JsonLd } from "react-schemaorg";
|
||||
import PageTitle from "../../components/PageTitle";
|
||||
import Link from "../../components/Link";
|
||||
import Video from "../../components/Video";
|
||||
import { addMetadata } from "../../lib/helpers/metadata";
|
||||
import { BASE_URL } from "../../lib/config/constants";
|
||||
import type { VideoObject } from "schema-dts";
|
||||
|
||||
import thumbnail from "./thumbnail.png";
|
||||
|
||||
@ -16,6 +19,20 @@ export const metadata = addMetadata({
|
||||
const Page = () => {
|
||||
return (
|
||||
<>
|
||||
<JsonLd<VideoObject>
|
||||
item={{
|
||||
"@context": "https://schema.org",
|
||||
"@type": "VideoObject",
|
||||
name: metadata.title as string,
|
||||
description: metadata.description as string,
|
||||
thumbnailUrl: `${BASE_URL}${thumbnail.src}`,
|
||||
contentUrl:
|
||||
"https://bcm6wnmyyzj1p5ls.public.blob.vercel-storage.com/videos/leo/leo-x4E4eG4YPo22KSTJuZwAk6fpNF1NgG.mp4",
|
||||
uploadDate: "2007-05-10T00:00:00Z",
|
||||
duration: "PT1M48S",
|
||||
}}
|
||||
/>
|
||||
|
||||
<PageTitle canonical="/leo">TheLab.mov</PageTitle>
|
||||
|
||||
<Video
|
||||
|
@ -1,5 +1,6 @@
|
||||
import { Suspense } from "react";
|
||||
import { ErrorBoundary } from "react-error-boundary";
|
||||
import { JsonLd } from "react-schemaorg";
|
||||
import { CalendarIcon, TagIcon, SquarePenIcon, EyeIcon } from "lucide-react";
|
||||
import Link from "../../../components/Link";
|
||||
import Time from "../../../components/Time";
|
||||
@ -11,7 +12,7 @@ import { addMetadata } from "../../../lib/helpers/metadata";
|
||||
import * as config from "../../../lib/config";
|
||||
import { BASE_URL } from "../../../lib/config/constants";
|
||||
import type { Metadata, Route } from "next";
|
||||
import type { Article, WithContext } from "schema-dts";
|
||||
import type { Article } from "schema-dts";
|
||||
|
||||
import styles from "./page.module.css";
|
||||
|
||||
@ -58,26 +59,29 @@ const Page = async ({ params }: { params: Promise<{ slug: string }> }) => {
|
||||
const { slug } = await params;
|
||||
const frontmatter = await getFrontMatter(slug);
|
||||
|
||||
const jsonLd: WithContext<Article> = {
|
||||
"@context": "https://schema.org",
|
||||
"@type": "Article",
|
||||
name: frontmatter.title,
|
||||
description: frontmatter.description || config.longDescription,
|
||||
url: frontmatter.permalink,
|
||||
datePublished: frontmatter.date,
|
||||
dateModified: frontmatter.date,
|
||||
author: {
|
||||
"@type": "Person",
|
||||
name: config.authorName,
|
||||
url: BASE_URL,
|
||||
},
|
||||
};
|
||||
|
||||
const { default: MDXContent } = await import(`../../../notes/${slug}/index.mdx`);
|
||||
|
||||
return (
|
||||
<>
|
||||
<script type="application/ld+json" dangerouslySetInnerHTML={{ __html: JSON.stringify(jsonLd) }} />
|
||||
<JsonLd<Article>
|
||||
item={{
|
||||
"@context": "https://schema.org",
|
||||
"@type": "Article",
|
||||
headline: frontmatter.title,
|
||||
description: frontmatter.description,
|
||||
url: frontmatter.permalink,
|
||||
image: [`${BASE_URL}/notes/${slug}/opengraph-image`],
|
||||
keywords: frontmatter.tags,
|
||||
datePublished: frontmatter.date,
|
||||
dateModified: frontmatter.date,
|
||||
inLanguage: config.siteLocale,
|
||||
license: config.licenseUrl,
|
||||
author: {
|
||||
// defined in app/layout.tsx
|
||||
"@id": `${BASE_URL}/#person`,
|
||||
},
|
||||
}}
|
||||
/>
|
||||
|
||||
<div className={styles.meta}>
|
||||
<div className={styles.metaItem}>
|
||||
|
@ -9,9 +9,10 @@
|
||||
|
||||
.row {
|
||||
display: flex;
|
||||
width: 100%;
|
||||
margin: 0 auto;
|
||||
justify-content: space-between;
|
||||
width: 100%;
|
||||
max-width: var(--max-width);
|
||||
margin: 0 auto;
|
||||
font-size: 0.8em;
|
||||
line-height: 2.3;
|
||||
}
|
||||
|
@ -2,7 +2,6 @@ import clsx from "clsx";
|
||||
import { HeartIcon } from "lucide-react";
|
||||
import Link from "../Link";
|
||||
import * as config from "../../lib/config";
|
||||
import { MAX_WIDTH } from "../../lib/config/constants";
|
||||
import type { ComponentPropsWithoutRef } from "react";
|
||||
|
||||
import styles from "./Footer.module.css";
|
||||
@ -12,7 +11,7 @@ export type FooterProps = ComponentPropsWithoutRef<"footer">;
|
||||
const Footer = ({ className, ...rest }: FooterProps) => {
|
||||
return (
|
||||
<footer className={clsx(styles.footer, className)} {...rest}>
|
||||
<div className={styles.row} style={{ maxWidth: MAX_WIDTH }}>
|
||||
<div className={styles.row}>
|
||||
<div>
|
||||
Content{" "}
|
||||
<Link href="/license" title={config.license} plain className={styles.link}>
|
||||
|
@ -46,6 +46,7 @@
|
||||
align-items: center;
|
||||
justify-content: space-between;
|
||||
width: 100%;
|
||||
max-width: var(--max-width);
|
||||
margin: 0 auto;
|
||||
}
|
||||
|
||||
|
@ -3,7 +3,6 @@ import clsx from "clsx";
|
||||
import Link from "../Link";
|
||||
import Menu from "../Menu";
|
||||
import * as config from "../../lib/config";
|
||||
import { MAX_WIDTH } from "../../lib/config/constants";
|
||||
import type { ComponentPropsWithoutRef } from "react";
|
||||
|
||||
import styles from "./Header.module.css";
|
||||
@ -15,7 +14,7 @@ export type HeaderProps = ComponentPropsWithoutRef<"header">;
|
||||
const Header = ({ className, ...rest }: HeaderProps) => {
|
||||
return (
|
||||
<header className={clsx(styles.header, className)} {...rest}>
|
||||
<nav className={styles.nav} style={{ maxWidth: MAX_WIDTH }}>
|
||||
<nav className={styles.nav}>
|
||||
<Link href="/" rel="author" title={config.authorName} plain className={styles.homeLink}>
|
||||
<Image
|
||||
src={selfieJpg}
|
||||
|
@ -11,7 +11,7 @@ import styles from "./ThemeToggle.module.css";
|
||||
export type ThemeToggleProps = ComponentPropsWithoutRef<LucideIcon>;
|
||||
|
||||
const ThemeToggle = ({ className, ...rest }: ThemeToggleProps) => {
|
||||
const { theme, setTheme } = useTheme();
|
||||
const [theme, setTheme] = useTheme();
|
||||
|
||||
return (
|
||||
<button
|
||||
|
@ -2,20 +2,18 @@
|
||||
|
||||
import { createContext, useEffect, useState } from "react";
|
||||
import { useLocalStorage, useMediaQuery } from "../hooks";
|
||||
import type { Context, PropsWithChildren } from "react";
|
||||
import type { PropsWithChildren } from "react";
|
||||
|
||||
type Themes = "light" | "dark";
|
||||
|
||||
export const ThemeContext: Context<{
|
||||
export const ThemeContext = createContext<{
|
||||
/**
|
||||
* If the user's theme preference is unset, this returns whether the system preference resolved to "light" or "dark".
|
||||
* If the user's theme preference is set, the preference is returned instead, regardless of their system's theme.
|
||||
*/
|
||||
theme: Themes;
|
||||
theme: string;
|
||||
/** Update the theme manually and save to local storage. */
|
||||
setTheme: (theme: Themes) => void;
|
||||
}> = createContext({
|
||||
theme: "" as Themes,
|
||||
setTheme: (theme: string) => void;
|
||||
}>({
|
||||
theme: "",
|
||||
// eslint-disable-next-line @typescript-eslint/no-unused-vars
|
||||
setTheme: (_) => {},
|
||||
});
|
||||
@ -23,9 +21,9 @@ export const ThemeContext: Context<{
|
||||
// provider used once in _app.tsx to wrap entire app
|
||||
export const ThemeProvider = ({ children }: PropsWithChildren) => {
|
||||
// keep track of if/when the user has set their theme *on this site*
|
||||
const [preferredTheme, setPreferredTheme] = useLocalStorage<Themes>("theme");
|
||||
const [preferredTheme, setPreferredTheme] = useLocalStorage("theme");
|
||||
// keep track of changes to the user's OS/browser dark mode setting
|
||||
const [systemTheme, setSystemTheme] = useState<Themes>("" as Themes);
|
||||
const [systemTheme, setSystemTheme] = useState("");
|
||||
// hook into system `prefers-dark-mode` setting
|
||||
// https://web.dev/prefers-color-scheme/#the-prefers-color-scheme-media-query
|
||||
const isSystemDark = useMediaQuery("(prefers-color-scheme: dark)");
|
||||
@ -41,7 +39,7 @@ export const ThemeProvider = ({ children }: PropsWithChildren) => {
|
||||
const resolvedTheme = preferredTheme && ["light", "dark"].includes(preferredTheme) ? preferredTheme : systemTheme;
|
||||
|
||||
// this is what actually changes the CSS variables
|
||||
document.documentElement.dataset.theme = preferredTheme ?? systemTheme;
|
||||
document.documentElement.dataset.theme = resolvedTheme;
|
||||
|
||||
// less important, but tells the browser how to render built-in elements like forms, scrollbars, etc.
|
||||
document.documentElement.style?.setProperty("color-scheme", resolvedTheme);
|
||||
|
@ -9,7 +9,7 @@ const useTheme = () => {
|
||||
throw new Error("useTheme must be used inside of a ThemeProvider.");
|
||||
}
|
||||
|
||||
return context;
|
||||
return [context.theme, context.setTheme] as const;
|
||||
};
|
||||
|
||||
export default useTheme;
|
||||
|
@ -2,7 +2,7 @@ import { cache } from "react";
|
||||
import path from "path";
|
||||
import glob from "fast-glob";
|
||||
import { unified } from "unified";
|
||||
import { remarkParse, remarkSmartypants, remarkRehype, rehypeSanitize, rehypeStringify } from "./remark-rehype-plugins";
|
||||
import { remarkHtml, remarkParse, remarkSmartypants } from "./remark-rehype-plugins";
|
||||
import { decode } from "html-entities";
|
||||
import { formatDate } from "./format-date";
|
||||
import { BASE_URL, POSTS_DIR } from "../config/constants";
|
||||
@ -23,35 +23,22 @@ export type FrontMatter = {
|
||||
export const getFrontMatter = async (slug: string): Promise<FrontMatter> => {
|
||||
const { frontmatter } = await import(`../../${POSTS_DIR}/${slug}/index.mdx`);
|
||||
|
||||
// create a reusable processor for titles
|
||||
const titleProcessor = unified()
|
||||
// process markdown title to html...
|
||||
const htmlTitle = await unified()
|
||||
.use(remarkParse)
|
||||
.use(remarkSmartypants, {
|
||||
quotes: true,
|
||||
dashes: "oldschool",
|
||||
backticks: false,
|
||||
ellipses: false,
|
||||
})
|
||||
.use(remarkRehype)
|
||||
.use(rehypeStringify);
|
||||
|
||||
// process title as both plain and stylized
|
||||
const [title, htmlTitle] = await Promise.all([
|
||||
titleProcessor()
|
||||
.use(rehypeSanitize, {
|
||||
// strip all resulting html tags from the markdown title
|
||||
tagNames: [],
|
||||
})
|
||||
.process(frontmatter.title)
|
||||
.then((result) => decode(String(result))),
|
||||
titleProcessor()
|
||||
.use(rehypeSanitize, {
|
||||
.use(remarkSmartypants)
|
||||
.use(remarkHtml, {
|
||||
sanitize: {
|
||||
// allow *very* limited markdown to be used in post titles
|
||||
tagNames: ["code", "em", "strong"],
|
||||
})
|
||||
.process(frontmatter.title)
|
||||
.then((result) => String(result)),
|
||||
]);
|
||||
},
|
||||
})
|
||||
.process(frontmatter.title)
|
||||
.then((result) => result.toString().trim());
|
||||
|
||||
// ...and then (sketchily) remove said html for a plaintext version:
|
||||
// https://css-tricks.com/snippets/javascript/strip-html-tags-in-javascript/
|
||||
const title = decode(htmlTitle.replace(/<[^>]*>/g, ""));
|
||||
|
||||
// return both the parsed YAML front matter (with a few amendments) and the raw, unparsed markdown content
|
||||
return {
|
||||
|
@ -1,12 +1,10 @@
|
||||
export { default as rehypeMdxImportMedia } from "rehype-mdx-import-media";
|
||||
export { default as rehypePrettyCode } from "rehype-pretty-code";
|
||||
export { default as rehypeSanitize } from "rehype-sanitize";
|
||||
export { default as rehypeSlug } from "rehype-slug";
|
||||
export { default as rehypeStringify } from "rehype-stringify";
|
||||
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";
|
||||
export { default as remarkMdxFrontmatter } from "remark-mdx-frontmatter";
|
||||
export { default as remarkParse } from "remark-parse";
|
||||
export { default as remarkRehype } from "remark-rehype";
|
||||
export { default as remarkSmartypants } from "remark-smartypants";
|
||||
|
@ -134,16 +134,8 @@ const nextPlugins = [
|
||||
remarkPlugins: [
|
||||
mdxPlugins.remarkFrontmatter,
|
||||
mdxPlugins.remarkMdxFrontmatter,
|
||||
[mdxPlugins.remarkGfm, { singleTilde: false }],
|
||||
[
|
||||
mdxPlugins.remarkSmartypants,
|
||||
{
|
||||
quotes: true,
|
||||
dashes: "oldschool",
|
||||
backticks: false,
|
||||
ellipses: false,
|
||||
},
|
||||
],
|
||||
mdxPlugins.remarkGfm,
|
||||
mdxPlugins.remarkSmartypants,
|
||||
],
|
||||
rehypePlugins: [
|
||||
mdxPlugins.rehypeUnwrapImages,
|
||||
|
21
package.json
21
package.json
@ -13,7 +13,7 @@
|
||||
"dev": "next dev -H 0.0.0.0",
|
||||
"build": "next build",
|
||||
"start": "next start",
|
||||
"lint": "next lint --no-cache",
|
||||
"lint": "next lint",
|
||||
"typecheck": "tsc",
|
||||
"postinstall": "prisma generate --no-hints"
|
||||
},
|
||||
@ -22,9 +22,9 @@
|
||||
"@giscus/react": "^3.1.0",
|
||||
"@mdx-js/loader": "^3.1.0",
|
||||
"@mdx-js/react": "^3.1.0",
|
||||
"@next/bundle-analyzer": "15.3.0-canary.15",
|
||||
"@next/mdx": "15.3.0-canary.15",
|
||||
"@next/third-parties": "15.3.0-canary.15",
|
||||
"@next/bundle-analyzer": "15.3.0-canary.17",
|
||||
"@next/mdx": "15.3.0-canary.17",
|
||||
"@next/third-parties": "15.3.0-canary.17",
|
||||
"@octokit/graphql": "^8.2.1",
|
||||
"@octokit/graphql-schema": "^15.26.0",
|
||||
"@prisma/client": "^6.5.0",
|
||||
@ -38,7 +38,7 @@
|
||||
"html-entities": "^2.5.2",
|
||||
"lucide-react": "0.483.0",
|
||||
"modern-normalize": "^3.0.1",
|
||||
"next": "15.3.0-canary.15",
|
||||
"next": "15.3.0-canary.17",
|
||||
"obj-str": "^1.1.0",
|
||||
"polished": "^4.3.1",
|
||||
"prop-types": "^15.8.1",
|
||||
@ -47,20 +47,19 @@
|
||||
"react-error-boundary": "^5.0.0",
|
||||
"react-innertext": "^1.1.5",
|
||||
"react-is": "19.0.0",
|
||||
"react-schemaorg": "^2.0.0",
|
||||
"react-textarea-autosize": "^8.5.8",
|
||||
"react-turnstile": "^1.1.4",
|
||||
"react-tweet": "^3.2.2",
|
||||
"rehype-mdx-import-media": "^1.2.0",
|
||||
"rehype-pretty-code": "^0.14.1",
|
||||
"rehype-sanitize": "^6.0.0",
|
||||
"rehype-slug": "^6.0.0",
|
||||
"rehype-stringify": "^10.0.1",
|
||||
"rehype-unwrap-images": "^1.0.0",
|
||||
"remark-frontmatter": "^5.0.0",
|
||||
"remark-gfm": "^4.0.1",
|
||||
"remark-html": "^16.0.1",
|
||||
"remark-mdx-frontmatter": "^5.0.0",
|
||||
"remark-parse": "^11.0.0",
|
||||
"remark-rehype": "^11.1.1",
|
||||
"remark-smartypants": "^3.0.2",
|
||||
"resend": "^4.1.2",
|
||||
"shiki": "^3.2.1",
|
||||
@ -73,7 +72,7 @@
|
||||
"@jakejarvis/eslint-config": "^4.0.7",
|
||||
"@types/comma-number": "^2.1.2",
|
||||
"@types/mdx": "^2.0.13",
|
||||
"@types/node": "^22.13.10",
|
||||
"@types/node": "^22.13.11",
|
||||
"@types/prop-types": "^15.7.14",
|
||||
"@types/react": "^19.0.12",
|
||||
"@types/react-dom": "^19.0.4",
|
||||
@ -81,7 +80,7 @@
|
||||
"babel-plugin-react-compiler": "19.0.0-beta-3229e95-20250315",
|
||||
"cross-env": "^7.0.3",
|
||||
"eslint": "^9.22.0",
|
||||
"eslint-config-next": "15.3.0-canary.15",
|
||||
"eslint-config-next": "15.3.0-canary.17",
|
||||
"eslint-config-prettier": "^10.1.1",
|
||||
"eslint-plugin-css-modules": "^2.12.0",
|
||||
"eslint-plugin-import": "^2.31.0",
|
||||
@ -95,7 +94,7 @@
|
||||
"prettier": "^3.5.3",
|
||||
"prisma": "^6.5.0",
|
||||
"schema-dts": "^1.1.5",
|
||||
"simple-git-hooks": "^2.11.1",
|
||||
"simple-git-hooks": "^2.12.1",
|
||||
"stylelint": "^16.16.0",
|
||||
"stylelint-config-css-modules": "^4.4.0",
|
||||
"stylelint-config-recommended": "^15.0.0",
|
||||
|
219
pnpm-lock.yaml
generated
219
pnpm-lock.yaml
generated
@ -21,14 +21,14 @@ importers:
|
||||
specifier: ^3.1.0
|
||||
version: 3.1.0(@types/react@19.0.12)(react@19.0.0)
|
||||
'@next/bundle-analyzer':
|
||||
specifier: 15.3.0-canary.15
|
||||
version: 15.3.0-canary.15
|
||||
specifier: 15.3.0-canary.17
|
||||
version: 15.3.0-canary.17
|
||||
'@next/mdx':
|
||||
specifier: 15.3.0-canary.15
|
||||
version: 15.3.0-canary.15(@mdx-js/loader@3.1.0(acorn@8.14.1))(@mdx-js/react@3.1.0(@types/react@19.0.12)(react@19.0.0))
|
||||
specifier: 15.3.0-canary.17
|
||||
version: 15.3.0-canary.17(@mdx-js/loader@3.1.0(acorn@8.14.1))(@mdx-js/react@3.1.0(@types/react@19.0.12)(react@19.0.0))
|
||||
'@next/third-parties':
|
||||
specifier: 15.3.0-canary.15
|
||||
version: 15.3.0-canary.15(next@15.3.0-canary.15(@babel/core@7.26.10)(babel-plugin-react-compiler@19.0.0-beta-3229e95-20250315)(react-dom@19.0.0(react@19.0.0))(react@19.0.0))(react@19.0.0)
|
||||
specifier: 15.3.0-canary.17
|
||||
version: 15.3.0-canary.17(next@15.3.0-canary.17(@babel/core@7.26.10)(babel-plugin-react-compiler@19.0.0-beta-3229e95-20250315)(react-dom@19.0.0(react@19.0.0))(react@19.0.0))(react@19.0.0)
|
||||
'@octokit/graphql':
|
||||
specifier: ^8.2.1
|
||||
version: 8.2.1
|
||||
@ -58,7 +58,7 @@ importers:
|
||||
version: 4.2.2
|
||||
geist:
|
||||
specifier: ^1.3.1
|
||||
version: 1.3.1(next@15.3.0-canary.15(@babel/core@7.26.10)(babel-plugin-react-compiler@19.0.0-beta-3229e95-20250315)(react-dom@19.0.0(react@19.0.0))(react@19.0.0))
|
||||
version: 1.3.1(next@15.3.0-canary.17(@babel/core@7.26.10)(babel-plugin-react-compiler@19.0.0-beta-3229e95-20250315)(react-dom@19.0.0(react@19.0.0))(react@19.0.0))
|
||||
html-entities:
|
||||
specifier: ^2.5.2
|
||||
version: 2.5.2
|
||||
@ -69,8 +69,8 @@ importers:
|
||||
specifier: ^3.0.1
|
||||
version: 3.0.1
|
||||
next:
|
||||
specifier: 15.3.0-canary.15
|
||||
version: 15.3.0-canary.15(@babel/core@7.26.10)(babel-plugin-react-compiler@19.0.0-beta-3229e95-20250315)(react-dom@19.0.0(react@19.0.0))(react@19.0.0)
|
||||
specifier: 15.3.0-canary.17
|
||||
version: 15.3.0-canary.17(@babel/core@7.26.10)(babel-plugin-react-compiler@19.0.0-beta-3229e95-20250315)(react-dom@19.0.0(react@19.0.0))(react@19.0.0)
|
||||
obj-str:
|
||||
specifier: ^1.1.0
|
||||
version: 1.1.0
|
||||
@ -95,6 +95,9 @@ importers:
|
||||
react-is:
|
||||
specifier: 19.0.0
|
||||
version: 19.0.0
|
||||
react-schemaorg:
|
||||
specifier: ^2.0.0
|
||||
version: 2.0.0(react@19.0.0)(schema-dts@1.1.5)(typescript@5.8.2)
|
||||
react-textarea-autosize:
|
||||
specifier: ^8.5.8
|
||||
version: 8.5.8(@types/react@19.0.12)(react@19.0.0)
|
||||
@ -110,15 +113,9 @@ importers:
|
||||
rehype-pretty-code:
|
||||
specifier: ^0.14.1
|
||||
version: 0.14.1(shiki@3.2.1)
|
||||
rehype-sanitize:
|
||||
specifier: ^6.0.0
|
||||
version: 6.0.0
|
||||
rehype-slug:
|
||||
specifier: ^6.0.0
|
||||
version: 6.0.0
|
||||
rehype-stringify:
|
||||
specifier: ^10.0.1
|
||||
version: 10.0.1
|
||||
rehype-unwrap-images:
|
||||
specifier: ^1.0.0
|
||||
version: 1.0.0
|
||||
@ -128,15 +125,15 @@ importers:
|
||||
remark-gfm:
|
||||
specifier: ^4.0.1
|
||||
version: 4.0.1
|
||||
remark-html:
|
||||
specifier: ^16.0.1
|
||||
version: 16.0.1
|
||||
remark-mdx-frontmatter:
|
||||
specifier: ^5.0.0
|
||||
version: 5.0.0
|
||||
remark-parse:
|
||||
specifier: ^11.0.0
|
||||
version: 11.0.0
|
||||
remark-rehype:
|
||||
specifier: ^11.1.1
|
||||
version: 11.1.1
|
||||
remark-smartypants:
|
||||
specifier: ^3.0.2
|
||||
version: 3.0.2
|
||||
@ -169,8 +166,8 @@ importers:
|
||||
specifier: ^2.0.13
|
||||
version: 2.0.13
|
||||
'@types/node':
|
||||
specifier: ^22.13.10
|
||||
version: 22.13.10
|
||||
specifier: ^22.13.11
|
||||
version: 22.13.11
|
||||
'@types/prop-types':
|
||||
specifier: ^15.7.14
|
||||
version: 15.7.14
|
||||
@ -193,8 +190,8 @@ importers:
|
||||
specifier: ^9.22.0
|
||||
version: 9.22.0
|
||||
eslint-config-next:
|
||||
specifier: 15.3.0-canary.15
|
||||
version: 15.3.0-canary.15(eslint@9.22.0)(typescript@5.8.2)
|
||||
specifier: 15.3.0-canary.17
|
||||
version: 15.3.0-canary.17(eslint@9.22.0)(typescript@5.8.2)
|
||||
eslint-config-prettier:
|
||||
specifier: ^10.1.1
|
||||
version: 10.1.1(eslint@9.22.0)
|
||||
@ -235,8 +232,8 @@ importers:
|
||||
specifier: ^1.1.5
|
||||
version: 1.1.5
|
||||
simple-git-hooks:
|
||||
specifier: ^2.11.1
|
||||
version: 2.11.1
|
||||
specifier: ^2.12.1
|
||||
version: 2.12.1
|
||||
stylelint:
|
||||
specifier: ^16.16.0
|
||||
version: 16.16.0(typescript@5.8.2)
|
||||
@ -786,17 +783,17 @@ packages:
|
||||
'@napi-rs/wasm-runtime@0.2.7':
|
||||
resolution: {integrity: sha512-5yximcFK5FNompXfJFoWanu5l8v1hNGqNHh9du1xETp9HWk/B/PzvchX55WYOPaIeNglG8++68AAiauBAtbnzw==}
|
||||
|
||||
'@next/bundle-analyzer@15.3.0-canary.15':
|
||||
resolution: {integrity: sha512-/4XswHLT9RHMeVVfvp/9uIlglQ/feUM/ySkkBax85NJ4I1EPqwWA940dEvdTeOkFh0MBrdKJwDFZ0bUdrypgRA==}
|
||||
'@next/bundle-analyzer@15.3.0-canary.17':
|
||||
resolution: {integrity: sha512-WyOWsIqFVthvkqgxRdli8OqnBz9xTDPhY0YUvBjjtH+52dOPoV6U2B/Cg9tyGe6KM3Nsy3iKZ4KNCCw2G8Bilg==}
|
||||
|
||||
'@next/env@15.3.0-canary.15':
|
||||
resolution: {integrity: sha512-4++Yw9LviRI1jQwA64heWPnu6JZFXit+w4H6RhPO09eiXvGFvM3sQw0nGP3KK8sDe8HS7MnHXewu5VH4q5kq6Q==}
|
||||
'@next/env@15.3.0-canary.17':
|
||||
resolution: {integrity: sha512-i6ieFwiZAvPUR0O7ojiUOQzhnxMH1LAjP3bLe8d0DqFKjKLFm3S/WwhVT4bskyFY2oI9FHCp3T1lc+2Ae43j7w==}
|
||||
|
||||
'@next/eslint-plugin-next@15.3.0-canary.15':
|
||||
resolution: {integrity: sha512-tHaX/opETDZtowfbeozhJ15ZQ4ZW2hmqziS1TpCTjlaoaRMV2O3BXa7xxfqPQXRXkSjeHvSQxteoAT6Ww+R1RQ==}
|
||||
'@next/eslint-plugin-next@15.3.0-canary.17':
|
||||
resolution: {integrity: sha512-x/1QkV8cYwqVqK715ahnVSkjT6EeBJNc3CSuKiPgG2ucnGfwVbMvSFF3WtqvpgLJW7Kz3xUlgWjakoTLxxUaWA==}
|
||||
|
||||
'@next/mdx@15.3.0-canary.15':
|
||||
resolution: {integrity: sha512-8FnEWwPQKqeONbhGGofB7X0hUgiDXn3nqyp1CTghg6Q7AWRq77RqsSXKQZbzS/v+rmHKRRn34i/yIvetIqxsTA==}
|
||||
'@next/mdx@15.3.0-canary.17':
|
||||
resolution: {integrity: sha512-5+T4+9GAI3tUVVfpECGfXgCs8u1O29mx4/2px+Xr2m0qlZP3QG+oB9q7qpLAxIPfzSMkxYSIe62vjHjp1M5Feg==}
|
||||
peerDependencies:
|
||||
'@mdx-js/loader': '>=0.15.0'
|
||||
'@mdx-js/react': '>=0.15.0'
|
||||
@ -806,56 +803,56 @@ packages:
|
||||
'@mdx-js/react':
|
||||
optional: true
|
||||
|
||||
'@next/swc-darwin-arm64@15.3.0-canary.15':
|
||||
resolution: {integrity: sha512-2XwY4L2KFE17AKUXZyyTBifxuqUWRtUhk2IUsjZ9XjLhS/oZ2QGoZid3Hp0CFxKD7/7QU7ent4cK5CuIcY7HYQ==}
|
||||
'@next/swc-darwin-arm64@15.3.0-canary.17':
|
||||
resolution: {integrity: sha512-VcnuH8pzj9vT9w700t+fCA4DkF0mEjQdjRfoWbxz5ZLjry4/CcIBhyrsQ0CIIRJ6KeEyX2SQM3enETknUP1y7w==}
|
||||
engines: {node: '>= 10'}
|
||||
cpu: [arm64]
|
||||
os: [darwin]
|
||||
|
||||
'@next/swc-darwin-x64@15.3.0-canary.15':
|
||||
resolution: {integrity: sha512-GIxcQTVlfql+yF+5y6VZJzHas7Kco/uVOgWvXj2+c0K8TLZndYgF8klg4sYX7bNj0vv7oEdrnCksNm4ijdkrvw==}
|
||||
'@next/swc-darwin-x64@15.3.0-canary.17':
|
||||
resolution: {integrity: sha512-K7J7kQOjki9zxaNAdx+lJlc9Ber5ltJGTD5Uvc8sOcOqT8jein+USyoOyBgy4zPqDjubYsytIDG2pJatijSYSg==}
|
||||
engines: {node: '>= 10'}
|
||||
cpu: [x64]
|
||||
os: [darwin]
|
||||
|
||||
'@next/swc-linux-arm64-gnu@15.3.0-canary.15':
|
||||
resolution: {integrity: sha512-B//o+BQt0riRo6VVRpWLKy8I+dCHIhopmNpUBi6VqHlDeLaLd+TSDbuiPIs0q804bvX+aFltARlRQsnQ8cUiIg==}
|
||||
'@next/swc-linux-arm64-gnu@15.3.0-canary.17':
|
||||
resolution: {integrity: sha512-Q3Er1XvvsUmPm5VH9W/59Zxg+HZrQuzDAYWyvKK4jgJBRqy2v2ywejvcPZsYUyJnfrls+DcX8oqR7V+L1i9fmg==}
|
||||
engines: {node: '>= 10'}
|
||||
cpu: [arm64]
|
||||
os: [linux]
|
||||
|
||||
'@next/swc-linux-arm64-musl@15.3.0-canary.15':
|
||||
resolution: {integrity: sha512-826hx95qA3JO84owyCjkGu+qBc2kqSqlxK3NxYHHwwbVlgBedN+jsW1u/5zKBiJ/W+sTbci2HQPF+F2Fk5JVGg==}
|
||||
'@next/swc-linux-arm64-musl@15.3.0-canary.17':
|
||||
resolution: {integrity: sha512-ewJuZxqF49l3qSRiDOZUmK3yw0tS3xZ9F4szEAPa5as1/SH+Mfog6Q9+5mjfBXRJEpP//jXmvLlfbJlnK8Sxpg==}
|
||||
engines: {node: '>= 10'}
|
||||
cpu: [arm64]
|
||||
os: [linux]
|
||||
|
||||
'@next/swc-linux-x64-gnu@15.3.0-canary.15':
|
||||
resolution: {integrity: sha512-iuprGTpx9ejqat7NywfTeBqX4ilyM1ZiChVFCUvtVXgXFl4npeVjdko28Cp4DqXsaid/AX+SUFwOSUaGmx0oFA==}
|
||||
'@next/swc-linux-x64-gnu@15.3.0-canary.17':
|
||||
resolution: {integrity: sha512-aGW3iyeaEUyF3oHZsq92QZ49PTmz7LA+HhkjEPjbGhQXyPRKljnMTjt9ORGvRpre1wDvhEBe+9NOdQvqQV6Qhg==}
|
||||
engines: {node: '>= 10'}
|
||||
cpu: [x64]
|
||||
os: [linux]
|
||||
|
||||
'@next/swc-linux-x64-musl@15.3.0-canary.15':
|
||||
resolution: {integrity: sha512-bysxd/stxsk2zS/wNBpRyX9gsutXTKR+WYWJqO+SWedb6Fexn76pUuTgz/UM42Una3K9bUA4B8O5hQYqmAWJbQ==}
|
||||
'@next/swc-linux-x64-musl@15.3.0-canary.17':
|
||||
resolution: {integrity: sha512-MEF13N9vDvdZ513Aeecjk/09ewvQN5HaU7bKc4v1CjL+QTJLnr+LkVXWBatMO9hLVvL73VIGJFjXhfwa3YfdBQ==}
|
||||
engines: {node: '>= 10'}
|
||||
cpu: [x64]
|
||||
os: [linux]
|
||||
|
||||
'@next/swc-win32-arm64-msvc@15.3.0-canary.15':
|
||||
resolution: {integrity: sha512-5I7jL1aFTSwTnitdYn/dMTnrmnZSI41vvKcg4qcQwotRv/H4Ro9+qSISSqXAEimvGwTDUA9d0CN4RkvLsxJriA==}
|
||||
'@next/swc-win32-arm64-msvc@15.3.0-canary.17':
|
||||
resolution: {integrity: sha512-QVc6WKSaMO47Vpc7AnYTXGVq4d/OWlAtgzNVNjX0NVlpWKBUUKsQQCGOFJzx2fP4pZwRV9+HC+65FKc3/H+pwA==}
|
||||
engines: {node: '>= 10'}
|
||||
cpu: [arm64]
|
||||
os: [win32]
|
||||
|
||||
'@next/swc-win32-x64-msvc@15.3.0-canary.15':
|
||||
resolution: {integrity: sha512-t4gUHjefzDlevhPTk1/1s7fi4GiVXAgnF4/FhNQHND1eLLXoj5s8Uud2WLdifDprqSClRi6J3TASLf1fuwWXtA==}
|
||||
'@next/swc-win32-x64-msvc@15.3.0-canary.17':
|
||||
resolution: {integrity: sha512-ctmA1bWo/LuA0zP0luoIA1BUNPZmyWWn14nTgI/2Iv6B3CgFJZSWnU3RN8n9RNalX0Pqcfe7jlhBMCExjAOsFA==}
|
||||
engines: {node: '>= 10'}
|
||||
cpu: [x64]
|
||||
os: [win32]
|
||||
|
||||
'@next/third-parties@15.3.0-canary.15':
|
||||
resolution: {integrity: sha512-uVfpOd58wKgsTRsEPnQnJflciSbNzBxn5Hr5WBnEs56fsBYQEUtx4hBVVfx9sSd+f2rzVeEXXfdXXDkxuBi3SA==}
|
||||
'@next/third-parties@15.3.0-canary.17':
|
||||
resolution: {integrity: sha512-aZhAZJ/tqVeetFI6B4oGy7BdGUJxLHawdxUnv6xqJaAa/dYHzFXSN/rWPxdxhpHLIVVirOg7Sl618TyUL+sWNg==}
|
||||
peerDependencies:
|
||||
next: ^13.0.0 || ^14.0.0 || ^15.0.0
|
||||
react: ^18.2.0 || 19.0.0-rc-de68d2f4-20241204 || ^19.0.0
|
||||
@ -1057,8 +1054,8 @@ packages:
|
||||
'@types/nlcst@2.0.3':
|
||||
resolution: {integrity: sha512-vSYNSDe6Ix3q+6Z7ri9lyWqgGhJTmzRjZRqyq15N0Z/1/UnVsno9G/N40NBijoYx2seFDIl0+B2mgAb9mezUCA==}
|
||||
|
||||
'@types/node@22.13.10':
|
||||
resolution: {integrity: sha512-I6LPUvlRH+O6VRUqYOcMudhaIdUVWfsjnZavnsraHvpBwaEyMN29ry+0UVJhImYL16xsscu0aske3yA+uPOWfw==}
|
||||
'@types/node@22.13.11':
|
||||
resolution: {integrity: sha512-iEUCUJoU0i3VnrCmgoWCXttklWcvoCIx4jzcP22fioIVSdTmjgoEvmAO/QPw6TcS9k5FrNgn4w7q5lGOd1CT5g==}
|
||||
|
||||
'@types/prop-types@15.7.14':
|
||||
resolution: {integrity: sha512-gNMvNH49DJ7OJYv+KAKn0Xp45p8PLl6zo2YnvDIbTd4J6MER2BmWN49TG7n9LvkyihINxeKW8+3bfS2yDC9dzQ==}
|
||||
@ -1703,8 +1700,8 @@ packages:
|
||||
resolution: {integrity: sha512-/veY75JbMK4j1yjvuUxuVsiS/hr/4iHs9FTT6cgTexxdE0Ly/glccBAkloH/DofkjRbZU3bnoj38mOmhkZ0lHw==}
|
||||
engines: {node: '>=12'}
|
||||
|
||||
eslint-config-next@15.3.0-canary.15:
|
||||
resolution: {integrity: sha512-nDZaWC8fCFp8mvVJStc4Ptdv2NotWLnONnn5FJr20razli4CgBH7gtjAdtwNCnqa1bBhz885ji8VMnSgA54yjA==}
|
||||
eslint-config-next@15.3.0-canary.17:
|
||||
resolution: {integrity: sha512-vA/gCvVCfGUg28MUfsPL3aMJ+wzK3OXW1zmFRHC7bFLkXjyPL3g6mSCLYAFYXRkXkbl13qmoDIknkL4rQsDzNQ==}
|
||||
peerDependencies:
|
||||
eslint: ^7.23.0 || ^8.0.0 || ^9.0.0
|
||||
typescript: '>=3.3.1'
|
||||
@ -2811,8 +2808,8 @@ packages:
|
||||
natural-compare@1.4.0:
|
||||
resolution: {integrity: sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==}
|
||||
|
||||
next@15.3.0-canary.15:
|
||||
resolution: {integrity: sha512-3RZoMEmMw93FdUSQbfgiYyNKorUDMp6OhAt8HJT2PMA/60goljOlYfEbBUukIJslGadJn5lTGvyLuCFjNDNJYQ==}
|
||||
next@15.3.0-canary.17:
|
||||
resolution: {integrity: sha512-uTQPf+80W7n4ZZIStulH2NtXd7fvoWNNbBIXZrnhNXm0BYe9Vhuc2Ov8GS5NezRGZ7ifJdjND9Da+S1u8qdiAw==}
|
||||
engines: {node: ^18.18.0 || ^19.8.0 || >= 20.0.0}
|
||||
hasBin: true
|
||||
peerDependencies:
|
||||
@ -3131,6 +3128,14 @@ packages:
|
||||
react-promise-suspense@0.3.4:
|
||||
resolution: {integrity: sha512-I42jl7L3Ze6kZaq+7zXWSunBa3b1on5yfvUW6Eo/3fFOj6dZ5Bqmcd264nJbTK/gn1HjjILAjSwnZbV4RpSaNQ==}
|
||||
|
||||
react-schemaorg@2.0.0:
|
||||
resolution: {integrity: sha512-UqciFKA203ewNjn0zC09uYKuJSvMD8L75L1s/cW4rc7cS64w8l7vaI3SYkuoI/nwCBkJRmOkSJedWDUZBlYZwg==}
|
||||
engines: {node: '>=12.0.0'}
|
||||
peerDependencies:
|
||||
react: '>=16.3.0'
|
||||
schema-dts: '>=0.7.4'
|
||||
typescript: '>=3.1.6'
|
||||
|
||||
react-textarea-autosize@8.5.8:
|
||||
resolution: {integrity: sha512-iUiIj70JefrTuSJ4LbVFiSqWiHHss5L63L717bqaWHMgkm9sz6eEvro4vZ3uQfGJbevzwT6rHOszHKA8RkhRMg==}
|
||||
engines: {node: '>=10'}
|
||||
@ -3208,15 +3213,9 @@ packages:
|
||||
rehype-recma@1.0.0:
|
||||
resolution: {integrity: sha512-lqA4rGUf1JmacCNWWZx0Wv1dHqMwxzsDWYMTowuplHF3xH0N/MmrZ/G3BDZnzAkRmxDadujCjaKM2hqYdCBOGw==}
|
||||
|
||||
rehype-sanitize@6.0.0:
|
||||
resolution: {integrity: sha512-CsnhKNsyI8Tub6L4sm5ZFsme4puGfc6pYylvXo1AeqaGbjOYyzNv3qZPwvs0oMJ39eryyeOdmxwUIo94IpEhqg==}
|
||||
|
||||
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==}
|
||||
|
||||
rehype-unwrap-images@1.0.0:
|
||||
resolution: {integrity: sha512-wzW5Mk9IlVF2UwXC5NtIZsx1aHYbV8+bLWjJnlZaaamz5QU52RppWtq1uEZJqGo8d9Y4RuDqidB6r9RFpKugIg==}
|
||||
|
||||
@ -3226,6 +3225,9 @@ packages:
|
||||
remark-gfm@4.0.1:
|
||||
resolution: {integrity: sha512-1quofZ2RQ9EWdeN34S79+KExV1764+wCUGop5CPL1WGdD0ocPpu91lzPGbwWMECpEpd42kJGQwzRfyov9j4yNg==}
|
||||
|
||||
remark-html@16.0.1:
|
||||
resolution: {integrity: sha512-B9JqA5i0qZe0Nsf49q3OXyGvyXuZFDzAP2iOFLEumymuYJITVpiH1IgsTEwTpdptDmZlMDMWeDmSawdaJIGCXQ==}
|
||||
|
||||
remark-mdx-frontmatter@5.0.0:
|
||||
resolution: {integrity: sha512-kI75pshe27TM71R+0iX7C3p4MbGMdygkvSbrk1WYSar88WAwR2JfQilofcDGgDNFAWUo5IwTPyq9XvGpifTwqQ==}
|
||||
|
||||
@ -3393,8 +3395,8 @@ packages:
|
||||
resolution: {integrity: sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==}
|
||||
engines: {node: '>=14'}
|
||||
|
||||
simple-git-hooks@2.11.1:
|
||||
resolution: {integrity: sha512-tgqwPUMDcNDhuf1Xf6KTUsyeqGdgKMhzaH4PAZZuzguOgTl5uuyeYe/8mWgAr6IBxB5V06uqEf6Dy37gIWDtDg==}
|
||||
simple-git-hooks@2.12.1:
|
||||
resolution: {integrity: sha512-NB3V4XyCOrWTIhjh85DyEoVlM3adHWwqQXKYHmuegy/108bJPP6YxuPGm4ZKBq1+GVKRbKJuzNY//09cMJYp+A==}
|
||||
hasBin: true
|
||||
|
||||
simple-swizzle@0.2.2:
|
||||
@ -4391,53 +4393,53 @@ snapshots:
|
||||
'@tybys/wasm-util': 0.9.0
|
||||
optional: true
|
||||
|
||||
'@next/bundle-analyzer@15.3.0-canary.15':
|
||||
'@next/bundle-analyzer@15.3.0-canary.17':
|
||||
dependencies:
|
||||
webpack-bundle-analyzer: 4.10.1
|
||||
transitivePeerDependencies:
|
||||
- bufferutil
|
||||
- utf-8-validate
|
||||
|
||||
'@next/env@15.3.0-canary.15': {}
|
||||
'@next/env@15.3.0-canary.17': {}
|
||||
|
||||
'@next/eslint-plugin-next@15.3.0-canary.15':
|
||||
'@next/eslint-plugin-next@15.3.0-canary.17':
|
||||
dependencies:
|
||||
fast-glob: 3.3.1
|
||||
|
||||
'@next/mdx@15.3.0-canary.15(@mdx-js/loader@3.1.0(acorn@8.14.1))(@mdx-js/react@3.1.0(@types/react@19.0.12)(react@19.0.0))':
|
||||
'@next/mdx@15.3.0-canary.17(@mdx-js/loader@3.1.0(acorn@8.14.1))(@mdx-js/react@3.1.0(@types/react@19.0.12)(react@19.0.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.0.12)(react@19.0.0)
|
||||
|
||||
'@next/swc-darwin-arm64@15.3.0-canary.15':
|
||||
'@next/swc-darwin-arm64@15.3.0-canary.17':
|
||||
optional: true
|
||||
|
||||
'@next/swc-darwin-x64@15.3.0-canary.15':
|
||||
'@next/swc-darwin-x64@15.3.0-canary.17':
|
||||
optional: true
|
||||
|
||||
'@next/swc-linux-arm64-gnu@15.3.0-canary.15':
|
||||
'@next/swc-linux-arm64-gnu@15.3.0-canary.17':
|
||||
optional: true
|
||||
|
||||
'@next/swc-linux-arm64-musl@15.3.0-canary.15':
|
||||
'@next/swc-linux-arm64-musl@15.3.0-canary.17':
|
||||
optional: true
|
||||
|
||||
'@next/swc-linux-x64-gnu@15.3.0-canary.15':
|
||||
'@next/swc-linux-x64-gnu@15.3.0-canary.17':
|
||||
optional: true
|
||||
|
||||
'@next/swc-linux-x64-musl@15.3.0-canary.15':
|
||||
'@next/swc-linux-x64-musl@15.3.0-canary.17':
|
||||
optional: true
|
||||
|
||||
'@next/swc-win32-arm64-msvc@15.3.0-canary.15':
|
||||
'@next/swc-win32-arm64-msvc@15.3.0-canary.17':
|
||||
optional: true
|
||||
|
||||
'@next/swc-win32-x64-msvc@15.3.0-canary.15':
|
||||
'@next/swc-win32-x64-msvc@15.3.0-canary.17':
|
||||
optional: true
|
||||
|
||||
'@next/third-parties@15.3.0-canary.15(next@15.3.0-canary.15(@babel/core@7.26.10)(babel-plugin-react-compiler@19.0.0-beta-3229e95-20250315)(react-dom@19.0.0(react@19.0.0))(react@19.0.0))(react@19.0.0)':
|
||||
'@next/third-parties@15.3.0-canary.17(next@15.3.0-canary.17(@babel/core@7.26.10)(babel-plugin-react-compiler@19.0.0-beta-3229e95-20250315)(react-dom@19.0.0(react@19.0.0))(react@19.0.0))(react@19.0.0)':
|
||||
dependencies:
|
||||
next: 15.3.0-canary.15(@babel/core@7.26.10)(babel-plugin-react-compiler@19.0.0-beta-3229e95-20250315)(react-dom@19.0.0(react@19.0.0))(react@19.0.0)
|
||||
next: 15.3.0-canary.17(@babel/core@7.26.10)(babel-plugin-react-compiler@19.0.0-beta-3229e95-20250315)(react-dom@19.0.0(react@19.0.0))(react@19.0.0)
|
||||
react: 19.0.0
|
||||
third-party-capital: 1.0.20
|
||||
|
||||
@ -4652,7 +4654,7 @@ snapshots:
|
||||
|
||||
'@types/concat-stream@2.0.3':
|
||||
dependencies:
|
||||
'@types/node': 22.13.10
|
||||
'@types/node': 22.13.11
|
||||
|
||||
'@types/debug@4.1.12':
|
||||
dependencies:
|
||||
@ -4686,7 +4688,7 @@ snapshots:
|
||||
dependencies:
|
||||
'@types/unist': 3.0.3
|
||||
|
||||
'@types/node@22.13.10':
|
||||
'@types/node@22.13.11':
|
||||
dependencies:
|
||||
undici-types: 6.20.0
|
||||
|
||||
@ -5421,9 +5423,9 @@ snapshots:
|
||||
|
||||
escape-string-regexp@5.0.0: {}
|
||||
|
||||
eslint-config-next@15.3.0-canary.15(eslint@9.22.0)(typescript@5.8.2):
|
||||
eslint-config-next@15.3.0-canary.17(eslint@9.22.0)(typescript@5.8.2):
|
||||
dependencies:
|
||||
'@next/eslint-plugin-next': 15.3.0-canary.15
|
||||
'@next/eslint-plugin-next': 15.3.0-canary.17
|
||||
'@rushstack/eslint-patch': 1.11.0
|
||||
'@typescript-eslint/eslint-plugin': 8.27.0(@typescript-eslint/parser@8.27.0(eslint@9.22.0)(typescript@5.8.2))(eslint@9.22.0)(typescript@5.8.2)
|
||||
'@typescript-eslint/parser': 8.27.0(eslint@9.22.0)(typescript@5.8.2)
|
||||
@ -5848,9 +5850,9 @@ snapshots:
|
||||
|
||||
functions-have-names@1.2.3: {}
|
||||
|
||||
geist@1.3.1(next@15.3.0-canary.15(@babel/core@7.26.10)(babel-plugin-react-compiler@19.0.0-beta-3229e95-20250315)(react-dom@19.0.0(react@19.0.0))(react@19.0.0)):
|
||||
geist@1.3.1(next@15.3.0-canary.17(@babel/core@7.26.10)(babel-plugin-react-compiler@19.0.0-beta-3229e95-20250315)(react-dom@19.0.0(react@19.0.0))(react@19.0.0)):
|
||||
dependencies:
|
||||
next: 15.3.0-canary.15(@babel/core@7.26.10)(babel-plugin-react-compiler@19.0.0-beta-3229e95-20250315)(react-dom@19.0.0(react@19.0.0))(react@19.0.0)
|
||||
next: 15.3.0-canary.17(@babel/core@7.26.10)(babel-plugin-react-compiler@19.0.0-beta-3229e95-20250315)(react-dom@19.0.0(react@19.0.0))(react@19.0.0)
|
||||
|
||||
gensync@1.0.0-beta.2: {}
|
||||
|
||||
@ -6997,9 +6999,9 @@ snapshots:
|
||||
|
||||
natural-compare@1.4.0: {}
|
||||
|
||||
next@15.3.0-canary.15(@babel/core@7.26.10)(babel-plugin-react-compiler@19.0.0-beta-3229e95-20250315)(react-dom@19.0.0(react@19.0.0))(react@19.0.0):
|
||||
next@15.3.0-canary.17(@babel/core@7.26.10)(babel-plugin-react-compiler@19.0.0-beta-3229e95-20250315)(react-dom@19.0.0(react@19.0.0))(react@19.0.0):
|
||||
dependencies:
|
||||
'@next/env': 15.3.0-canary.15
|
||||
'@next/env': 15.3.0-canary.17
|
||||
'@swc/counter': 0.1.3
|
||||
'@swc/helpers': 0.5.15
|
||||
busboy: 1.6.0
|
||||
@ -7009,14 +7011,14 @@ snapshots:
|
||||
react-dom: 19.0.0(react@19.0.0)
|
||||
styled-jsx: 5.1.6(@babel/core@7.26.10)(react@19.0.0)
|
||||
optionalDependencies:
|
||||
'@next/swc-darwin-arm64': 15.3.0-canary.15
|
||||
'@next/swc-darwin-x64': 15.3.0-canary.15
|
||||
'@next/swc-linux-arm64-gnu': 15.3.0-canary.15
|
||||
'@next/swc-linux-arm64-musl': 15.3.0-canary.15
|
||||
'@next/swc-linux-x64-gnu': 15.3.0-canary.15
|
||||
'@next/swc-linux-x64-musl': 15.3.0-canary.15
|
||||
'@next/swc-win32-arm64-msvc': 15.3.0-canary.15
|
||||
'@next/swc-win32-x64-msvc': 15.3.0-canary.15
|
||||
'@next/swc-darwin-arm64': 15.3.0-canary.17
|
||||
'@next/swc-darwin-x64': 15.3.0-canary.17
|
||||
'@next/swc-linux-arm64-gnu': 15.3.0-canary.17
|
||||
'@next/swc-linux-arm64-musl': 15.3.0-canary.17
|
||||
'@next/swc-linux-x64-gnu': 15.3.0-canary.17
|
||||
'@next/swc-linux-x64-musl': 15.3.0-canary.17
|
||||
'@next/swc-win32-arm64-msvc': 15.3.0-canary.17
|
||||
'@next/swc-win32-x64-msvc': 15.3.0-canary.17
|
||||
babel-plugin-react-compiler: 19.0.0-beta-3229e95-20250315
|
||||
sharp: 0.33.5
|
||||
transitivePeerDependencies:
|
||||
@ -7327,6 +7329,12 @@ snapshots:
|
||||
dependencies:
|
||||
fast-deep-equal: 2.0.1
|
||||
|
||||
react-schemaorg@2.0.0(react@19.0.0)(schema-dts@1.1.5)(typescript@5.8.2):
|
||||
dependencies:
|
||||
react: 19.0.0
|
||||
schema-dts: 1.1.5
|
||||
typescript: 5.8.2
|
||||
|
||||
react-textarea-autosize@8.5.8(@types/react@19.0.12)(react@19.0.0):
|
||||
dependencies:
|
||||
'@babel/runtime': 7.26.10
|
||||
@ -7458,11 +7466,6 @@ snapshots:
|
||||
transitivePeerDependencies:
|
||||
- supports-color
|
||||
|
||||
rehype-sanitize@6.0.0:
|
||||
dependencies:
|
||||
'@types/hast': 3.0.4
|
||||
hast-util-sanitize: 5.0.2
|
||||
|
||||
rehype-slug@6.0.0:
|
||||
dependencies:
|
||||
'@types/hast': 3.0.4
|
||||
@ -7471,12 +7474,6 @@ snapshots:
|
||||
hast-util-to-string: 3.0.1
|
||||
unist-util-visit: 5.0.0
|
||||
|
||||
rehype-stringify@10.0.1:
|
||||
dependencies:
|
||||
'@types/hast': 3.0.4
|
||||
hast-util-to-html: 9.0.5
|
||||
unified: 11.0.5
|
||||
|
||||
rehype-unwrap-images@1.0.0:
|
||||
dependencies:
|
||||
'@types/hast': 3.0.4
|
||||
@ -7504,6 +7501,14 @@ snapshots:
|
||||
transitivePeerDependencies:
|
||||
- supports-color
|
||||
|
||||
remark-html@16.0.1:
|
||||
dependencies:
|
||||
'@types/mdast': 4.0.4
|
||||
hast-util-sanitize: 5.0.2
|
||||
hast-util-to-html: 9.0.5
|
||||
mdast-util-to-hast: 13.2.0
|
||||
unified: 11.0.5
|
||||
|
||||
remark-mdx-frontmatter@5.0.0:
|
||||
dependencies:
|
||||
'@types/mdast': 4.0.4
|
||||
@ -7766,7 +7771,7 @@ snapshots:
|
||||
|
||||
signal-exit@4.1.0: {}
|
||||
|
||||
simple-git-hooks@2.11.1: {}
|
||||
simple-git-hooks@2.12.1: {}
|
||||
|
||||
simple-swizzle@0.2.2:
|
||||
dependencies:
|
||||
@ -8132,7 +8137,7 @@ snapshots:
|
||||
'@types/concat-stream': 2.0.3
|
||||
'@types/debug': 4.1.12
|
||||
'@types/is-empty': 1.2.3
|
||||
'@types/node': 22.13.10
|
||||
'@types/node': 22.13.11
|
||||
'@types/unist': 3.0.3
|
||||
concat-stream: 2.0.0
|
||||
debug: 4.4.0
|
||||
|
@ -1,19 +1,18 @@
|
||||
{
|
||||
"compilerOptions": {
|
||||
"target": "es5",
|
||||
"target": "ES2017",
|
||||
"lib": ["dom", "dom.iterable", "esnext"],
|
||||
"allowJs": true,
|
||||
"skipLibCheck": true,
|
||||
"strict": true,
|
||||
"forceConsistentCasingInFileNames": true,
|
||||
"noEmit": true,
|
||||
"incremental": true,
|
||||
"esModuleInterop": true,
|
||||
"module": "esnext",
|
||||
"moduleResolution": "bundler",
|
||||
"resolveJsonModule": true,
|
||||
"isolatedModules": true,
|
||||
"jsx": "preserve",
|
||||
"incremental": true,
|
||||
"plugins": [
|
||||
{
|
||||
"name": "next"
|
||||
|
Loading…
x
Reference in New Issue
Block a user