1
mirror of https://github.com/jakejarvis/jarv.is.git synced 2025-06-27 14:45:41 -04:00

complete giscus migration

This commit is contained in:
2025-05-22 09:05:22 -04:00
parent 879c2b9dbe
commit 9933d20868
6 changed files with 322 additions and 96 deletions

2
.nvmrc
View File

@ -1 +1 @@
22.15.1
22.16.0

View File

@ -1,4 +0,0 @@
{
"origins": ["https://jarv.is"],
"originsRegex": ["https://jarvis-git-([A-z0-9]|-)*jakejarvis\\.vercel\\.app"]
}

230
lib/db/import.ts Normal file
View File

@ -0,0 +1,230 @@
import "dotenv/config";
import { env } from "@/lib/env";
import { eq } from "drizzle-orm";
import { graphql } from "@octokit/graphql";
import { db } from "@/lib/db";
import * as schema from "@/lib/db/schema";
// GitHub GraphQL API authentication
const graphqlWithAuth = graphql.defaults({
headers: {
authorization: `token ${env.GITHUB_TOKEN}`,
},
});
// Map of page slugs to GitHub discussion numbers
// You'll need to manually map these based on your discussions
const discussionMapping: Record<string, number> = {
"notes/dropping-dropbox": 780,
"notes/cloudflare-dns-archive-is-blocked": 1693,
"notes/finding-candidates-subdomain-takeovers": 1628,
"notes/how-to-pull-request-fork-github": 779,
"notes/how-to-backup-linux-server": 1506,
"notes/hugo-to-nextjs": 1017,
"notes/dark-mode": 780,
};
async function main() {
console.log("🌱 Starting database seed...");
// Loop through each discussion mapping
for (const [pageSlug, discussionNumber] of Object.entries(discussionMapping)) {
console.log(`Processing discussion #${discussionNumber} for page ${pageSlug}...`);
// Make sure the page exists in the database
const existingPage = await db
.select()
.from(schema.page)
.where(eq(schema.page.slug, pageSlug))
.then((results) => results[0]);
if (!existingPage) {
console.log(`Creating page entry for ${pageSlug}...`);
await db.insert(schema.page).values({
slug: pageSlug,
views: 1, // Default value
});
}
try {
// Fetch the discussion and its comments from GitHub GraphQL API
const { repository } = await graphqlWithAuth<{
repository: {
discussion: {
comments: {
nodes: Array<{
id: string;
author: {
login: string;
avatarUrl: string;
} | null;
bodyText: string;
createdAt: string;
replies: {
nodes: Array<{
id: string;
author: {
login: string;
avatarUrl: string;
} | null;
bodyText: string;
createdAt: string;
}>;
};
}>;
};
};
};
}>(
`
query GetDiscussionComments($owner: String!, $repo: String!, $number: Int!) {
repository(owner: $owner, name: $repo) {
discussion(number: $number) {
comments(first: 100) {
nodes {
id
author {
login
avatarUrl
}
bodyText
createdAt
replies(first: 100) {
nodes {
id
author {
login
avatarUrl
}
bodyText
createdAt
}
}
}
}
}
}
}
`,
{
owner: "jakejarvis", // Replace with your GitHub username
repo: "jarv.is", // Replace with your repository name
number: discussionNumber,
}
);
const comments = repository.discussion.comments.nodes;
for (const comment of comments) {
if (!comment.author) continue; // Skip comments from deleted users
// Find or create the user
const existingUser = await db
.select()
.from(schema.user)
.where(eq(schema.user.name, comment.author.login))
.then((results) => results[0]);
let userId: string;
if (!existingUser) {
console.log(`Creating user ${comment.author.login}...`);
// Create a new user
const insertedUser = await db
.insert(schema.user)
.values({
id: `github-${comment.author.login}`,
name: comment.author.login,
email: `${comment.author.login}@users.noreply.github.com`, // GitHub users get noreply email addresses
emailVerified: true,
image: comment.author.avatarUrl,
createdAt: new Date(comment.createdAt),
updatedAt: new Date(),
})
.returning({ id: schema.user.id });
userId = insertedUser[0].id;
} else {
userId = existingUser.id;
}
// Insert the parent comment
console.log(`Adding comment from ${comment.author.login}...`);
const [insertedComment] = await db
.insert(schema.comment)
.values({
content: comment.bodyText,
pageSlug: pageSlug,
userId: userId,
createdAt: new Date(comment.createdAt),
updatedAt: new Date(),
})
.returning({ id: schema.comment.id });
// Process replies
for (const reply of comment.replies.nodes) {
if (!reply.author) continue; // Skip replies from deleted users
// Find or create the user for the reply
const existingReplyUser = await db
.select()
.from(schema.user)
.where(eq(schema.user.name, reply.author.login))
.then((results) => results[0]);
let replyUserId: string;
if (!existingReplyUser) {
console.log(`Creating user ${reply.author.login}...`);
// Create a new user
const insertedReplyUser = await db
.insert(schema.user)
.values({
id: `github-${reply.author.login}`,
name: reply.author.login,
email: `${reply.author.login}@users.noreply.github.com`,
emailVerified: true,
image: reply.author.avatarUrl,
createdAt: new Date(reply.createdAt),
updatedAt: new Date(),
})
.returning({ id: schema.user.id });
replyUserId = insertedReplyUser[0].id;
} else {
replyUserId = existingReplyUser.id;
}
// Insert the reply
console.log(`Adding reply from ${reply.author.login}...`);
await db.insert(schema.comment).values({
content: reply.bodyText,
pageSlug: pageSlug,
parentId: insertedComment.id,
userId: replyUserId,
createdAt: new Date(reply.createdAt),
updatedAt: new Date(),
});
}
}
console.log(`Finished processing discussion #${discussionNumber} for ${pageSlug}`);
} catch (error) {
console.error(`Error processing discussion #${discussionNumber}:`, error);
}
}
console.log("🌱 Seed completed successfully!");
}
main()
.catch((e) => {
console.error("Error during seeding:", e);
process.exit(1);
})
.finally(async () => {
console.log("Disconnecting from database...");
process.exit(0);
});

View File

@ -1,4 +1,4 @@
import { pgTable, text, timestamp, boolean, integer, uuid, AnyPgColumn } from "drizzle-orm/pg-core";
import { pgTable, text, timestamp, boolean, integer, uuid, type AnyPgColumn } from "drizzle-orm/pg-core";
export const user = pgTable("user", {
id: text("id").primaryKey(),

View File

@ -26,8 +26,8 @@
"@mdx-js/loader": "^3.1.0",
"@mdx-js/react": "^3.1.0",
"@neondatabase/serverless": "^1.0.0",
"@next/bundle-analyzer": "15.4.0-canary.44",
"@next/mdx": "15.4.0-canary.44",
"@next/bundle-analyzer": "15.4.0-canary.47",
"@next/mdx": "15.4.0-canary.47",
"@octokit/graphql": "^9.0.1",
"@octokit/graphql-schema": "^15.26.0",
"@radix-ui/react-alert-dialog": "^1.1.14",
@ -57,7 +57,7 @@
"geist": "^1.4.2",
"html-entities": "^2.6.0",
"lucide-react": "0.511.0",
"next": "15.4.0-canary.44",
"next": "15.4.0-canary.47",
"react": "19.1.0",
"react-activity-calendar": "^2.7.12",
"react-countup": "^6.5.3",
@ -93,7 +93,7 @@
"tailwindcss": "^4.1.7",
"tw-animate-css": "^1.3.0",
"unified": "^11.0.5",
"zod": "3.25.17"
"zod": "3.25.20"
},
"devDependencies": {
"@eslint/eslintrc": "^3.3.1",
@ -109,7 +109,7 @@
"dotenv": "^16.5.0",
"drizzle-kit": "^0.31.1",
"eslint": "^9.27.0",
"eslint-config-next": "15.4.0-canary.44",
"eslint-config-next": "15.4.0-canary.47",
"eslint-config-prettier": "^10.1.5",
"eslint-plugin-css-modules": "^2.12.0",
"eslint-plugin-drizzle": "^0.2.3",

170
pnpm-lock.yaml generated
View File

@ -27,11 +27,11 @@ importers:
specifier: ^1.0.0
version: 1.0.0
'@next/bundle-analyzer':
specifier: 15.4.0-canary.44
version: 15.4.0-canary.44
specifier: 15.4.0-canary.47
version: 15.4.0-canary.47
'@next/mdx':
specifier: 15.4.0-canary.44
version: 15.4.0-canary.44(@mdx-js/loader@3.1.0(acorn@8.14.1))(@mdx-js/react@3.1.0(@types/react@19.1.5)(react@19.1.0))
specifier: 15.4.0-canary.47
version: 15.4.0-canary.47(@mdx-js/loader@3.1.0(acorn@8.14.1))(@mdx-js/react@3.1.0(@types/react@19.1.5)(react@19.1.0))
'@octokit/graphql':
specifier: ^9.0.1
version: 9.0.1
@ -76,13 +76,13 @@ importers:
version: 1.2.7(@types/react-dom@19.1.5(@types/react@19.1.5))(@types/react@19.1.5)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)
'@t3-oss/env-nextjs':
specifier: ^0.13.4
version: 0.13.4(arktype@2.1.20)(typescript@5.8.3)(valibot@1.1.0(typescript@5.8.3))(zod@3.25.17)
version: 0.13.4(arktype@2.1.20)(typescript@5.8.3)(valibot@1.1.0(typescript@5.8.3))(zod@3.25.20)
'@vercel/analytics':
specifier: ^1.5.0
version: 1.5.0(next@15.4.0-canary.44(@babel/core@7.26.10)(babel-plugin-react-compiler@19.1.0-rc.2)(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.47(@babel/core@7.26.10)(babel-plugin-react-compiler@19.1.0-rc.2)(react-dom@19.1.0(react@19.1.0))(react@19.1.0))(react@19.1.0)
'@vercel/speed-insights':
specifier: ^1.2.0
version: 1.2.0(next@15.4.0-canary.44(@babel/core@7.26.10)(babel-plugin-react-compiler@19.1.0-rc.2)(react-dom@19.1.0(react@19.1.0))(react@19.1.0))(react@19.1.0)
version: 1.2.0(next@15.4.0-canary.47(@babel/core@7.26.10)(babel-plugin-react-compiler@19.1.0-rc.2)(react-dom@19.1.0(react@19.1.0))(react@19.1.0))(react@19.1.0)
better-auth:
specifier: 1.2.9-beta.1
version: 1.2.9-beta.1
@ -112,7 +112,7 @@ importers:
version: 5.0.1
geist:
specifier: ^1.4.2
version: 1.4.2(next@15.4.0-canary.44(@babel/core@7.26.10)(babel-plugin-react-compiler@19.1.0-rc.2)(react-dom@19.1.0(react@19.1.0))(react@19.1.0))
version: 1.4.2(next@15.4.0-canary.47(@babel/core@7.26.10)(babel-plugin-react-compiler@19.1.0-rc.2)(react-dom@19.1.0(react@19.1.0))(react@19.1.0))
html-entities:
specifier: ^2.6.0
version: 2.6.0
@ -120,8 +120,8 @@ importers:
specifier: 0.511.0
version: 0.511.0(react@19.1.0)
next:
specifier: 15.4.0-canary.44
version: 15.4.0-canary.44(@babel/core@7.26.10)(babel-plugin-react-compiler@19.1.0-rc.2)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)
specifier: 15.4.0-canary.47
version: 15.4.0-canary.47(@babel/core@7.26.10)(babel-plugin-react-compiler@19.1.0-rc.2)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)
react:
specifier: 19.1.0
version: 19.1.0
@ -228,8 +228,8 @@ importers:
specifier: ^11.0.5
version: 11.0.5
zod:
specifier: 3.25.17
version: 3.25.17
specifier: 3.25.20
version: 3.25.20
devDependencies:
'@eslint/eslintrc':
specifier: ^3.3.1
@ -271,8 +271,8 @@ importers:
specifier: ^9.27.0
version: 9.27.0(jiti@2.4.2)
eslint-config-next:
specifier: 15.4.0-canary.44
version: 15.4.0-canary.44(eslint@9.27.0(jiti@2.4.2))(typescript@5.8.3)
specifier: 15.4.0-canary.47
version: 15.4.0-canary.47(eslint@9.27.0(jiti@2.4.2))(typescript@5.8.3)
eslint-config-prettier:
specifier: ^10.1.5
version: 10.1.5(eslint@9.27.0(jiti@2.4.2))
@ -1025,17 +1025,17 @@ packages:
resolution: {integrity: sha512-XWmEeWpBXIoksZSDN74kftfTnXFEGZ3iX8jbANWBc+ag6dsiQuvuR4LgB0WdCOKMb5AQgjqgufc0TgAsZubUYw==}
engines: {node: '>=19.0.0'}
'@next/bundle-analyzer@15.4.0-canary.44':
resolution: {integrity: sha512-rwWRrDHUO0wZsCc0PZ/iZAnL81QH7I7vhCrY0DOwpiwoJQQpvjEMb+Z3s93UT864qEaqfajYFvhpi7L9JhMJ5A==}
'@next/bundle-analyzer@15.4.0-canary.47':
resolution: {integrity: sha512-MinTymeuTBSTheUZUh8Z2kkAKh7Kh/6hIAgTtT/lA52A1LDNt3boRYHCY+GzCRVnpsvEzG5ULL+/aaCro8BdrQ==}
'@next/env@15.4.0-canary.44':
resolution: {integrity: sha512-pN6tVejsOESerMmWcqwvAs/CHgLAWA4FxuVBVqGr2PPDb4XbppSlwxDWZEb6BGVJDzHLAwK+6reT2XJaNAnlmA==}
'@next/env@15.4.0-canary.47':
resolution: {integrity: sha512-F7Pu8AFs1arS9jtfZqCrpIu7yMroL9Kf5tJQqSrqZrqVQyDjdYTAhIaMROz7Kf1NMTs5Xd+CkY4Cjv9MpMItLg==}
'@next/eslint-plugin-next@15.4.0-canary.44':
resolution: {integrity: sha512-CVoq5v2LFC3Z8kwCG3atMPC9PJxeVNdCL9ylYrbBM0UIeXn6Rrhipmr6v11/CZPbECHpBHhAfwwMDb3UP7e/bQ==}
'@next/eslint-plugin-next@15.4.0-canary.47':
resolution: {integrity: sha512-FyGAedy+79+ZfTkKuZvoXCzE97VY87w4LvB6jq9iIPqR59ADq8B75Ff8fqeXB2/vuflmEj6MnJE9+H7lse1DEQ==}
'@next/mdx@15.4.0-canary.44':
resolution: {integrity: sha512-ZuN0Q5cG4bA/L5t87jhQPHZoEPxR6gx2x5+7aoDRqDv3mZyjzS4Bp4e4Ish5gpIo+fL90umTpM+geRGejb6Dgw==}
'@next/mdx@15.4.0-canary.47':
resolution: {integrity: sha512-AiPRQkviLQboodhXFDdWVj/2yIzc1VnQhyGfjn/NymQEkBClRvl8NVXfgM/LpoEzWK133frE1s64PJd1oublhQ==}
peerDependencies:
'@mdx-js/loader': '>=0.15.0'
'@mdx-js/react': '>=0.15.0'
@ -1045,50 +1045,50 @@ packages:
'@mdx-js/react':
optional: true
'@next/swc-darwin-arm64@15.4.0-canary.44':
resolution: {integrity: sha512-cl0F2vvLQ/Zzy7cLeF+mhPWKHprizxEUMnrixQ7y/vGK7sm2Tg4HZPbAAFNwGOxvYLz9UuCtGUdf7wssoynoGA==}
'@next/swc-darwin-arm64@15.4.0-canary.47':
resolution: {integrity: sha512-3iXXKsvKM85Gge74NHu2LrwPtwVi3AIitY7RPp2Qa7XqCkKMZuxiTCQkhjseE7oEI7qDHoq0glFGcG7S4oislA==}
engines: {node: '>= 10'}
cpu: [arm64]
os: [darwin]
'@next/swc-darwin-x64@15.4.0-canary.44':
resolution: {integrity: sha512-QGoWAtw3TJF7DoR3PlK52T37EicteUBLJhjZFIuDzci0c1ZsgSLoDI9cUBeDxs265zBdJbuAmkCfLHEyT92r2Q==}
'@next/swc-darwin-x64@15.4.0-canary.47':
resolution: {integrity: sha512-pdQunNoUDUIvMpaF/n2sVMELN6QwlDTup7BZ1cLBHnKr4/2pULdhhnG++pZMky+i2ezhbqTYkJDnJ2HbKmw8eA==}
engines: {node: '>= 10'}
cpu: [x64]
os: [darwin]
'@next/swc-linux-arm64-gnu@15.4.0-canary.44':
resolution: {integrity: sha512-u6As4DXsY422w3HRZ7zMGbrWd928j/qjSMQO971oeYp+G+IqVkLnWfwUcPZvOo+hxvIpiHryj/KCpK1ZiFdgzQ==}
'@next/swc-linux-arm64-gnu@15.4.0-canary.47':
resolution: {integrity: sha512-6BmL5KWI3HyR6pVg1Z+JHBODMAOszHt4ypuhuRwxPgkQaAYF2B0YAjZZJj5kUfmOG3muUjAX2OlVG5SsG+dOkA==}
engines: {node: '>= 10'}
cpu: [arm64]
os: [linux]
'@next/swc-linux-arm64-musl@15.4.0-canary.44':
resolution: {integrity: sha512-7DsoUrqB/CQghKT0zn1RBJUNdnoKPV+lS6rb0vQIjdaFQaIi1pjTYJZKpN2I3LGiq1McmwTiRo+dxjRVIyzhAA==}
'@next/swc-linux-arm64-musl@15.4.0-canary.47':
resolution: {integrity: sha512-oaJhs1l6BPBev607PzOSjuKWdQNbWTtMpMaLUbVA1P3isBtAF3vRdWtNVxj244ERCpZ8E2ItYDs1X8rdPyYZuw==}
engines: {node: '>= 10'}
cpu: [arm64]
os: [linux]
'@next/swc-linux-x64-gnu@15.4.0-canary.44':
resolution: {integrity: sha512-C5CJtdtCMJ+7JrSGQjC2gTDTNrRfKNWgEbOKB2om51DICkvp/5T+fe7OoThlKXZgxyKewBy5XxVZkLYPhSg+Hw==}
'@next/swc-linux-x64-gnu@15.4.0-canary.47':
resolution: {integrity: sha512-TgjTZDVrMwUE7TOpffpdnGF38wJfBny9kN/HhzbCbLoZJgkGXvlmvvbVPKtDQkEm+zgveyrXK5nMPuIVV2/kIw==}
engines: {node: '>= 10'}
cpu: [x64]
os: [linux]
'@next/swc-linux-x64-musl@15.4.0-canary.44':
resolution: {integrity: sha512-QLuFAJwj7HI7y5vM8BaAHkssehbINNq9yWhcMWsP2NOB+VBXmgQrtuIMWBpyboUPIIHu8vxVEpV40AhWFab8Yw==}
'@next/swc-linux-x64-musl@15.4.0-canary.47':
resolution: {integrity: sha512-ikz5g0wJzZesxocxht5HZVJsLK0ek2MFwIJwo7gPVhRcZFNudhmT6Y9uUOIkb1iSIAGVsXINU0Y4rydRG1jQvQ==}
engines: {node: '>= 10'}
cpu: [x64]
os: [linux]
'@next/swc-win32-arm64-msvc@15.4.0-canary.44':
resolution: {integrity: sha512-APvqR/M8ghjsyq4xtPW+lXX9H7BI+hpWg1c3obajtGNHUiH6feF+4Q5ni7dEkbVuUOvR4xzonzYcwtYvYqcDcg==}
'@next/swc-win32-arm64-msvc@15.4.0-canary.47':
resolution: {integrity: sha512-wkR1AucklgFAVMeAFuBuY+EARWb+iAvopaMO+tlz6NFhQ9aNepEyGHn4a4NYCRo7OGiQOuPzmiZqCxmFmAi6XA==}
engines: {node: '>= 10'}
cpu: [arm64]
os: [win32]
'@next/swc-win32-x64-msvc@15.4.0-canary.44':
resolution: {integrity: sha512-X0WwFniF+NdGiUHuXfPr76iPMINXwv6zKb/1uYEPe90mNH7QHgbL23+t32OxiF76tjCNsg7Klte7YY5DTiyUBw==}
'@next/swc-win32-x64-msvc@15.4.0-canary.47':
resolution: {integrity: sha512-VtKLea3VTlVTw69fExB76xJpCOVh5evzrlQMVGijnVKa/oBuCO2vY8laeydwzwJWBjDhYUFshu7XxFdCXo0I0w==}
engines: {node: '>= 10'}
cpu: [x64]
os: [win32]
@ -2629,8 +2629,8 @@ packages:
resolution: {integrity: sha512-/veY75JbMK4j1yjvuUxuVsiS/hr/4iHs9FTT6cgTexxdE0Ly/glccBAkloH/DofkjRbZU3bnoj38mOmhkZ0lHw==}
engines: {node: '>=12'}
eslint-config-next@15.4.0-canary.44:
resolution: {integrity: sha512-2gfW18dY9gcFFM8TvAWDVH5Yb5LCyDiIhLTvx7cLtuNtlna1dfRJCbrQfMUy3aYQsJ9n93kO/tzQxX1ufxgbrg==}
eslint-config-next@15.4.0-canary.47:
resolution: {integrity: sha512-KoQv81TONW7AEuvlYw8zvE4lHnY+Om6xlGYzY/Q47KMxqtBkhpRNB+yX06Khav6l0l8aW3338dtggbpJyX2K1Q==}
peerDependencies:
eslint: ^7.23.0 || ^8.0.0 || ^9.0.0
typescript: '>=3.3.1'
@ -3741,8 +3741,8 @@ packages:
natural-compare@1.4.0:
resolution: {integrity: sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==}
next@15.4.0-canary.44:
resolution: {integrity: sha512-wcDqj32eKJv4dIy5CSuqpzSE+5maFsV5bBZoYTMEbs2gnABKzZHYalCt5Sze+AxWF790p/SbIi+4cBSMf4FVow==}
next@15.4.0-canary.47:
resolution: {integrity: sha512-p7SMspJPTaiKYdDzz/bubvUz5omPUla/C6YiqNFgdB4khC8RzLWGX8ku7tpf+znZQH2T8glb7HjDLSB5EiLlgQ==}
engines: {node: ^18.18.0 || ^19.8.0 || >= 20.0.0}
hasBin: true
peerDependencies:
@ -4930,8 +4930,8 @@ packages:
peerDependencies:
zod: ^3.18.0
zod@3.25.17:
resolution: {integrity: sha512-8hQzQ/kMOIFbwOgPrm9Sf9rtFHpFUMy4HvN0yEB0spw14aYi0uT5xG5CE2DB9cd51GWNsz+DNO7se1kztHMKnw==}
zod@3.25.20:
resolution: {integrity: sha512-z03fqpTMDF1G02VLKUMt6vyACE7rNWkh3gpXVHgPTw28NPtDFRGvcpTtPwn2kMKtQ0idtYJUTxchytmnqYswcw==}
zwitch@2.0.4:
resolution: {integrity: sha512-bXE4cR/kVZhKZX/RjPEflHaKVhUVl85noU3v6b8apfQEc1x4A+zBxjZ4lN8LqGd6WZ3dl98pY4o717VFmoPp+A==}
@ -5545,48 +5545,48 @@ snapshots:
'@types/node': 22.15.21
'@types/pg': 8.15.1
'@next/bundle-analyzer@15.4.0-canary.44':
'@next/bundle-analyzer@15.4.0-canary.47':
dependencies:
webpack-bundle-analyzer: 4.10.1
transitivePeerDependencies:
- bufferutil
- utf-8-validate
'@next/env@15.4.0-canary.44': {}
'@next/env@15.4.0-canary.47': {}
'@next/eslint-plugin-next@15.4.0-canary.44':
'@next/eslint-plugin-next@15.4.0-canary.47':
dependencies:
fast-glob: 3.3.1
'@next/mdx@15.4.0-canary.44(@mdx-js/loader@3.1.0(acorn@8.14.1))(@mdx-js/react@3.1.0(@types/react@19.1.5)(react@19.1.0))':
'@next/mdx@15.4.0-canary.47(@mdx-js/loader@3.1.0(acorn@8.14.1))(@mdx-js/react@3.1.0(@types/react@19.1.5)(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.5)(react@19.1.0)
'@next/swc-darwin-arm64@15.4.0-canary.44':
'@next/swc-darwin-arm64@15.4.0-canary.47':
optional: true
'@next/swc-darwin-x64@15.4.0-canary.44':
'@next/swc-darwin-x64@15.4.0-canary.47':
optional: true
'@next/swc-linux-arm64-gnu@15.4.0-canary.44':
'@next/swc-linux-arm64-gnu@15.4.0-canary.47':
optional: true
'@next/swc-linux-arm64-musl@15.4.0-canary.44':
'@next/swc-linux-arm64-musl@15.4.0-canary.47':
optional: true
'@next/swc-linux-x64-gnu@15.4.0-canary.44':
'@next/swc-linux-x64-gnu@15.4.0-canary.47':
optional: true
'@next/swc-linux-x64-musl@15.4.0-canary.44':
'@next/swc-linux-x64-musl@15.4.0-canary.47':
optional: true
'@next/swc-win32-arm64-msvc@15.4.0-canary.44':
'@next/swc-win32-arm64-msvc@15.4.0-canary.47':
optional: true
'@next/swc-win32-x64-msvc@15.4.0-canary.44':
'@next/swc-win32-x64-msvc@15.4.0-canary.47':
optional: true
'@noble/ciphers@0.6.0': {}
@ -6217,21 +6217,21 @@ snapshots:
dependencies:
tslib: 2.8.1
'@t3-oss/env-core@0.13.4(arktype@2.1.20)(typescript@5.8.3)(valibot@1.1.0(typescript@5.8.3))(zod@3.25.17)':
'@t3-oss/env-core@0.13.4(arktype@2.1.20)(typescript@5.8.3)(valibot@1.1.0(typescript@5.8.3))(zod@3.25.20)':
dependencies:
arktype: 2.1.20
optionalDependencies:
typescript: 5.8.3
valibot: 1.1.0(typescript@5.8.3)
zod: 3.25.17
zod: 3.25.20
'@t3-oss/env-nextjs@0.13.4(arktype@2.1.20)(typescript@5.8.3)(valibot@1.1.0(typescript@5.8.3))(zod@3.25.17)':
'@t3-oss/env-nextjs@0.13.4(arktype@2.1.20)(typescript@5.8.3)(valibot@1.1.0(typescript@5.8.3))(zod@3.25.20)':
dependencies:
'@t3-oss/env-core': 0.13.4(arktype@2.1.20)(typescript@5.8.3)(valibot@1.1.0(typescript@5.8.3))(zod@3.25.17)
'@t3-oss/env-core': 0.13.4(arktype@2.1.20)(typescript@5.8.3)(valibot@1.1.0(typescript@5.8.3))(zod@3.25.20)
optionalDependencies:
typescript: 5.8.3
valibot: 1.1.0(typescript@5.8.3)
zod: 3.25.17
zod: 3.25.20
transitivePeerDependencies:
- arktype
@ -6503,14 +6503,14 @@ snapshots:
'@unrs/resolver-binding-win32-x64-msvc@1.5.0':
optional: true
'@vercel/analytics@1.5.0(next@15.4.0-canary.44(@babel/core@7.26.10)(babel-plugin-react-compiler@19.1.0-rc.2)(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.47(@babel/core@7.26.10)(babel-plugin-react-compiler@19.1.0-rc.2)(react-dom@19.1.0(react@19.1.0))(react@19.1.0))(react@19.1.0)':
optionalDependencies:
next: 15.4.0-canary.44(@babel/core@7.26.10)(babel-plugin-react-compiler@19.1.0-rc.2)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)
next: 15.4.0-canary.47(@babel/core@7.26.10)(babel-plugin-react-compiler@19.1.0-rc.2)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)
react: 19.1.0
'@vercel/speed-insights@1.2.0(next@15.4.0-canary.44(@babel/core@7.26.10)(babel-plugin-react-compiler@19.1.0-rc.2)(react-dom@19.1.0(react@19.1.0))(react@19.1.0))(react@19.1.0)':
'@vercel/speed-insights@1.2.0(next@15.4.0-canary.47(@babel/core@7.26.10)(babel-plugin-react-compiler@19.1.0-rc.2)(react-dom@19.1.0(react@19.1.0))(react@19.1.0))(react@19.1.0)':
optionalDependencies:
next: 15.4.0-canary.44(@babel/core@7.26.10)(babel-plugin-react-compiler@19.1.0-rc.2)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)
next: 15.4.0-canary.47(@babel/core@7.26.10)(babel-plugin-react-compiler@19.1.0-rc.2)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)
react: 19.1.0
'@xobotyi/scrollbar-width@1.9.5': {}
@ -6669,7 +6669,7 @@ snapshots:
jose: 5.10.0
kysely: 0.28.2
nanostores: 0.11.4
zod: 3.25.17
zod: 3.25.20
better-call@1.0.9:
dependencies:
@ -7185,9 +7185,9 @@ snapshots:
escape-string-regexp@5.0.0: {}
eslint-config-next@15.4.0-canary.44(eslint@9.27.0(jiti@2.4.2))(typescript@5.8.3):
eslint-config-next@15.4.0-canary.47(eslint@9.27.0(jiti@2.4.2))(typescript@5.8.3):
dependencies:
'@next/eslint-plugin-next': 15.4.0-canary.44
'@next/eslint-plugin-next': 15.4.0-canary.47
'@rushstack/eslint-patch': 1.11.0
'@typescript-eslint/eslint-plugin': 8.30.1(@typescript-eslint/parser@8.30.1(eslint@9.27.0(jiti@2.4.2))(typescript@5.8.3))(eslint@9.27.0(jiti@2.4.2))(typescript@5.8.3)
'@typescript-eslint/parser': 8.30.1(eslint@9.27.0(jiti@2.4.2))(typescript@5.8.3)
@ -7357,8 +7357,8 @@ snapshots:
'@babel/plugin-proposal-private-methods': 7.18.6(@babel/core@7.26.10)
eslint: 9.27.0(jiti@2.4.2)
hermes-parser: 0.25.1
zod: 3.25.17
zod-validation-error: 3.4.0(zod@3.25.17)
zod: 3.25.20
zod-validation-error: 3.4.0(zod@3.25.20)
transitivePeerDependencies:
- supports-color
@ -7590,9 +7590,9 @@ snapshots:
functions-have-names@1.2.3: {}
geist@1.4.2(next@15.4.0-canary.44(@babel/core@7.26.10)(babel-plugin-react-compiler@19.1.0-rc.2)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)):
geist@1.4.2(next@15.4.0-canary.47(@babel/core@7.26.10)(babel-plugin-react-compiler@19.1.0-rc.2)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)):
dependencies:
next: 15.4.0-canary.44(@babel/core@7.26.10)(babel-plugin-react-compiler@19.1.0-rc.2)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)
next: 15.4.0-canary.47(@babel/core@7.26.10)(babel-plugin-react-compiler@19.1.0-rc.2)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)
gensync@1.0.0-beta.2: {}
@ -8716,9 +8716,9 @@ snapshots:
natural-compare@1.4.0: {}
next@15.4.0-canary.44(@babel/core@7.26.10)(babel-plugin-react-compiler@19.1.0-rc.2)(react-dom@19.1.0(react@19.1.0))(react@19.1.0):
next@15.4.0-canary.47(@babel/core@7.26.10)(babel-plugin-react-compiler@19.1.0-rc.2)(react-dom@19.1.0(react@19.1.0))(react@19.1.0):
dependencies:
'@next/env': 15.4.0-canary.44
'@next/env': 15.4.0-canary.47
'@swc/helpers': 0.5.15
caniuse-lite: 1.0.30001714
postcss: 8.4.31
@ -8726,14 +8726,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.44
'@next/swc-darwin-x64': 15.4.0-canary.44
'@next/swc-linux-arm64-gnu': 15.4.0-canary.44
'@next/swc-linux-arm64-musl': 15.4.0-canary.44
'@next/swc-linux-x64-gnu': 15.4.0-canary.44
'@next/swc-linux-x64-musl': 15.4.0-canary.44
'@next/swc-win32-arm64-msvc': 15.4.0-canary.44
'@next/swc-win32-x64-msvc': 15.4.0-canary.44
'@next/swc-darwin-arm64': 15.4.0-canary.47
'@next/swc-darwin-x64': 15.4.0-canary.47
'@next/swc-linux-arm64-gnu': 15.4.0-canary.47
'@next/swc-linux-arm64-musl': 15.4.0-canary.47
'@next/swc-linux-x64-gnu': 15.4.0-canary.47
'@next/swc-linux-x64-musl': 15.4.0-canary.47
'@next/swc-win32-arm64-msvc': 15.4.0-canary.47
'@next/swc-win32-x64-msvc': 15.4.0-canary.47
babel-plugin-react-compiler: 19.1.0-rc.2
sharp: 0.34.2
transitivePeerDependencies:
@ -10175,10 +10175,10 @@ snapshots:
yocto-queue@0.1.0: {}
zod-validation-error@3.4.0(zod@3.25.17):
zod-validation-error@3.4.0(zod@3.25.20):
dependencies:
zod: 3.25.17
zod: 3.25.20
zod@3.25.17: {}
zod@3.25.20: {}
zwitch@2.0.4: {}