diff --git a/app/about/page.tsx b/app/about/page.tsx index 8f64a36d0..1e7a46609 100644 --- a/app/about/page.tsx +++ b/app/about/page.tsx @@ -1,13 +1,13 @@ import Image from "next/image"; import Link from "next/link"; import type { ReactNode } from "react"; -import { getAllArticles } from "src/article"; +import { getAllArticles } from "@/src/article"; import { type Author, getAllAuthors, getPodcastEpisodes, -} from "src/data/content"; -import { RouteTo } from "src/routing"; +} from "@/src/data/content"; +import { RouteTo } from "@/src/routing"; const Page = async () => { const episodes = await getPodcastEpisodes("content/podcast.yml"); @@ -128,7 +128,7 @@ const PersonCard = ({ photoUrl: string; mail: string; }) => ( -
+
{ const auth = request.headers.get("Authorization"); diff --git a/app/api/feeds/hrebenovka/route.ts b/app/api/feeds/hrebenovka/route.ts index 4d37d84d9..3ce97f05f 100644 --- a/app/api/feeds/hrebenovka/route.ts +++ b/app/api/feeds/hrebenovka/route.ts @@ -2,9 +2,9 @@ import { join } from "node:path"; import { convertEpisodeToPodcastItem, getPodcastEpisodes, -} from "src/data/content"; -import { type iTunesPodcastShow, renderPodcastFeed } from "src/feeds"; -import { absolute, RouteTo } from "src/routing"; +} from "@/src/data/content"; +import { type iTunesPodcastShow, renderPodcastFeed } from "@/src/feeds"; +import { absolute, RouteTo } from "@/src/routing"; export async function GET() { const dataFile = join(process.cwd(), "content/hrebenovka.yml"); diff --git a/app/api/feeds/podcast/route.ts b/app/api/feeds/podcast/route.ts index 57d96fd8e..2dd2bfd38 100644 --- a/app/api/feeds/podcast/route.ts +++ b/app/api/feeds/podcast/route.ts @@ -2,9 +2,9 @@ import { join } from "node:path"; import { convertEpisodeToPodcastItem, getPodcastEpisodes, -} from "src/data/content"; -import { type iTunesPodcastShow, renderPodcastFeed } from "src/feeds"; -import { absolute, RouteTo } from "src/routing"; +} from "@/src/data/content"; +import { type iTunesPodcastShow, renderPodcastFeed } from "@/src/feeds"; +import { absolute, RouteTo } from "@/src/routing"; export async function GET() { const dataFile = join(process.cwd(), "content/podcast.yml"); diff --git a/app/clanky/ArchiveView.tsx b/app/clanky/ArchiveView.tsx index 5f9bd3b18..4754674cb 100644 --- a/app/clanky/ArchiveView.tsx +++ b/app/clanky/ArchiveView.tsx @@ -4,9 +4,9 @@ import Image from "next/image"; import Link from "next/link"; import { useRouter, useSearchParams } from "next/navigation"; import { type ChangeEvent, useState } from "react"; -import type { Metadata } from "src/article"; -import { RouteTo } from "src/routing"; -import { tilde } from "src/utils"; +import type { Metadata } from "@/src/article"; +import { RouteTo } from "@/src/routing"; +import { tilde } from "@/src/utils"; import { type Filter, type FilterOptions, diff --git a/app/clanky/[...path]/ArticleContent.tsx b/app/clanky/[...path]/ArticleContent.tsx index 7df314a89..762f9cb75 100644 --- a/app/clanky/[...path]/ArticleContent.tsx +++ b/app/clanky/[...path]/ArticleContent.tsx @@ -2,10 +2,10 @@ import Markdoc from "@markdoc/markdoc"; import Image from "next/image"; import { default as NextLink } from "next/link"; import React from "react"; -import { plausibleEventClass } from "src/data/plausible"; -import { defaultMarkdocConfig } from "src/markdoc-schema"; -import { siteUrl } from "src/routing"; -import { getImageSrcSet, tilde } from "src/utils"; +import { plausibleEventClass } from "@/src/data/plausible"; +import { defaultMarkdocConfig } from "@/src/markdoc-schema"; +import { siteUrl } from "@/src/routing"; +import { getImageSrcSet, tilde } from "@/src/utils"; import { DatawrapperChart } from "./DatawrapperChart"; import { PodcastPlayer } from "./PodcastPlayer"; diff --git a/app/clanky/[...path]/PodcastPlayer.tsx b/app/clanky/[...path]/PodcastPlayer.tsx index 0edcbbd27..e97c94070 100644 --- a/app/clanky/[...path]/PodcastPlayer.tsx +++ b/app/clanky/[...path]/PodcastPlayer.tsx @@ -2,9 +2,9 @@ import Image from "next/image"; import Plausible from "plausible-tracker"; -import type { PodcastEpisode } from "src/data/podcast"; -import { RouteTo } from "src/routing"; -import { tilde } from "src/utils"; +import type { PodcastEpisode } from "@/src/data/podcast"; +import { RouteTo } from "@/src/routing"; +import { tilde } from "@/src/utils"; type PodcastPlayerProps = { episode: PodcastEpisode; @@ -52,7 +52,8 @@ const ServiceButton = ({ href, title }: { href: string; title: string }) => ( ▷ {title} diff --git a/app/clanky/[...path]/page.tsx b/app/clanky/[...path]/page.tsx index ee980149a..25e7c82d6 100644 --- a/app/clanky/[...path]/page.tsx +++ b/app/clanky/[...path]/page.tsx @@ -1,20 +1,20 @@ -import { ArticleContent } from "app/clanky/[...path]/ArticleContent"; -import { BannerBox } from "components/BannerBox"; -import { PreviewNest } from "components/PreviewNest"; -import { SectionDivider } from "components/SectionDivider"; import type { Metadata } from "next"; import Image from "next/image"; import { notFound } from "next/navigation"; -import { type Article, compareByDate, readArticle } from "src/article"; -import { getCachedData } from "src/data/cache"; -import { type Author, getAllAuthors } from "src/data/content"; +import { ArticleContent } from "@/app/clanky/[...path]/ArticleContent"; +import { BannerBox } from "@/components/BannerBox"; +import { PreviewNest } from "@/components/PreviewNest"; +import { SectionDivider } from "@/components/SectionDivider"; +import { type Article, compareByDate, readArticle } from "@/src/article"; +import { getCachedData } from "@/src/data/cache"; +import { type Author, getAllAuthors } from "@/src/data/content"; import { articleRoot, getFileSystemPathForUrlPathFragments, getFilesRecursively, getUrlPathFragmentsForFileSystemPath, -} from "src/server-utils"; -import { endlessGeneratorOf, getResizedImageUrl, tilde } from "src/utils"; +} from "@/src/server-utils"; +import { endlessGeneratorOf, getResizedImageUrl, tilde } from "@/src/utils"; type Params = { path: string[]; diff --git a/app/clanky/filters.ts b/app/clanky/filters.ts index 8b6c0389e..80e70aa53 100644 --- a/app/clanky/filters.ts +++ b/app/clanky/filters.ts @@ -1,5 +1,5 @@ -import type { Metadata } from "src/article"; -import { unique } from "src/utils"; +import type { Metadata } from "@/src/article"; +import { unique } from "@/src/utils"; export type FilterOptions = Record; export type Settings = Record; diff --git a/app/clanky/page.tsx b/app/clanky/page.tsx index 73cac4c84..e11f013bc 100644 --- a/app/clanky/page.tsx +++ b/app/clanky/page.tsx @@ -1,6 +1,6 @@ import type { Metadata } from "next"; import { Suspense } from "react"; -import { getAllArticles, stripBody } from "src/article"; +import { getAllArticles, stripBody } from "@/src/article"; import { ArchiveView } from "./ArchiveView"; import { buildFilterOptions } from "./filters"; diff --git a/app/layout.tsx b/app/layout.tsx index 442f8e248..47c2a40d3 100644 --- a/app/layout.tsx +++ b/app/layout.tsx @@ -2,7 +2,7 @@ import type { Metadata } from "next"; import { PT_Serif } from "next/font/google"; import Image from "next/image"; import Link from "next/link"; -import { RouteTo, siteUrl } from "src/routing"; +import { RouteTo, siteUrl } from "@/src/routing"; import { NewsletterBox } from "./newsletter/NewsletterBox"; import { SearchForm } from "./SearchForm"; import "./global.css"; diff --git a/app/obchod/[slug]/BookDetail.tsx b/app/obchod/[slug]/BookDetail.tsx index a6a8e0356..7da7e57b8 100644 --- a/app/obchod/[slug]/BookDetail.tsx +++ b/app/obchod/[slug]/BookDetail.tsx @@ -1,7 +1,7 @@ "use client"; import { useState } from "react"; -import type { Book } from "src/data/books"; +import type { Book } from "@/src/data/books"; import { OrderForm } from "./OrderForm"; type Props = { diff --git a/app/obchod/[slug]/actions.ts b/app/obchod/[slug]/actions.ts index a61c4c5ea..2764ceb58 100644 --- a/app/obchod/[slug]/actions.ts +++ b/app/obchod/[slug]/actions.ts @@ -1,12 +1,5 @@ "use server"; -import { type Book, createOrder, getBookById } from "src/data/books"; -import { - createInvoice, - createSubject, - getBearerTokenFromEnv, - type InvoiceLine, -} from "src/fakturoid"; import { type decodeType, optional, @@ -14,6 +7,13 @@ import { string, union, } from "typescript-json-decoder"; +import { type Book, createOrder, getBookById } from "@/src/data/books"; +import { + createInvoice, + createSubject, + getBearerTokenFromEnv, + type InvoiceLine, +} from "@/src/fakturoid"; const numberFromString = (val: unknown) => parseInt(string(val), 10); diff --git a/app/obchod/[slug]/page.tsx b/app/obchod/[slug]/page.tsx index bbf244247..e7df51f18 100644 --- a/app/obchod/[slug]/page.tsx +++ b/app/obchod/[slug]/page.tsx @@ -1,11 +1,11 @@ import type { Metadata } from "next"; +import Image from "next/image"; import { notFound } from "next/navigation"; -import { getAllBooks } from "src/data/books"; +import { Breadcrumbs } from "@/components/Breadcrumbs"; +import { getAllBooks } from "@/src/data/books"; +import { RouteTo } from "@/src/routing"; +import { getResizedImageUrl } from "@/src/utils"; import { BookDetails } from "./BookDetail"; -import Image from "next/image"; -import { getResizedImageUrl } from "src/utils"; -import { Breadcrumbs } from "components/Breadcrumbs"; -import { RouteTo } from "src/routing"; type Params = { slug: string; diff --git a/app/obchod/page.tsx b/app/obchod/page.tsx index d65d7b7cd..b5ba905f8 100644 --- a/app/obchod/page.tsx +++ b/app/obchod/page.tsx @@ -1,9 +1,9 @@ import type { Metadata } from "next"; import Image from "next/image"; import Link from "next/link"; -import { type Book, getAllBooks, sortByYear } from "src/data/books"; -import { RouteTo } from "src/routing"; -import { getResizedImageUrl } from "src/utils"; +import { type Book, getAllBooks, sortByYear } from "@/src/data/books"; +import { RouteTo } from "@/src/routing"; +import { getResizedImageUrl } from "@/src/utils"; export const metadata: Metadata = { title: "Ohlasy: Knihy", diff --git a/app/page.tsx b/app/page.tsx index 304681134..45f7b2700 100644 --- a/app/page.tsx +++ b/app/page.tsx @@ -1,21 +1,21 @@ -import { BannerBox } from "components/BannerBox"; -import { PreviewNest } from "components/PreviewNest"; -import { SectionDivider } from "components/SectionDivider"; import Image from "next/image"; import Link from "next/link"; -import { compareByDate, getAllArticles, type Metadata } from "src/article"; -import type { Banner } from "src/data/banners"; -import { getAllBanners } from "src/data/banners"; -import { getAllAuthors } from "src/data/content"; +import { BannerBox } from "@/components/BannerBox"; +import { PreviewNest } from "@/components/PreviewNest"; +import { SectionDivider } from "@/components/SectionDivider"; +import { compareByDate, getAllArticles, type Metadata } from "@/src/article"; +import type { Banner } from "@/src/data/banners"; +import { getAllBanners } from "@/src/data/banners"; +import { getAllAuthors } from "@/src/data/content"; import { getLatestTopicsSummary, getUserAvatar, type LatestTopicsSummary, -} from "src/data/forum"; -import type { TopArticles } from "src/data/plausible"; -import { getTopArticles, plausibleEventClass } from "src/data/plausible"; -import { RouteTo } from "src/routing"; -import { endlessGeneratorOf, shuffleInPlace, tilde } from "src/utils"; +} from "@/src/data/forum"; +import type { TopArticles } from "@/src/data/plausible"; +import { getTopArticles, plausibleEventClass } from "@/src/data/plausible"; +import { RouteTo } from "@/src/routing"; +import { endlessGeneratorOf, shuffleInPlace, tilde } from "@/src/utils"; // Revalidate this page every 5 minutes export const revalidate = 300; diff --git a/app/podcast/page.tsx b/app/podcast/page.tsx index d1f08c09e..463649fd3 100644 --- a/app/podcast/page.tsx +++ b/app/podcast/page.tsx @@ -1,9 +1,9 @@ import type { Metadata } from "next"; import Image from "next/image"; import Link from "next/link"; -import { type Article, compareByDate, getAllArticles } from "src/article"; -import { RouteTo } from "src/routing"; -import { tilde } from "src/utils"; +import { type Article, compareByDate, getAllArticles } from "@/src/article"; +import { RouteTo } from "@/src/routing"; +import { tilde } from "@/src/utils"; export const metadata: Metadata = { title: "Ohlasy Podcast", diff --git a/app/stats/content-stats.ts b/app/stats/content-stats.ts index 9df7bad03..0cb42fbdc 100644 --- a/app/stats/content-stats.ts +++ b/app/stats/content-stats.ts @@ -1,4 +1,4 @@ -import type { Article } from "src/article"; +import type { Article } from "@/src/article"; export function groupBySelector( values: Value[], diff --git a/app/stats/content/articles/count/route.ts b/app/stats/content/articles/count/route.ts index 5503c3ec8..2dfb926b1 100644 --- a/app/stats/content/articles/count/route.ts +++ b/app/stats/content/articles/count/route.ts @@ -1,6 +1,6 @@ -import { getAllArticles } from "src/article"; -import { articleRoot } from "src/server-utils"; -import { renderCSV } from "app/stats/content-stats"; +import { renderCSV } from "@/app/stats/content-stats"; +import { getAllArticles } from "@/src/article"; +import { articleRoot } from "@/src/server-utils"; export async function GET() { const stats: Record = {}; diff --git a/app/stats/content/articles/length/route.ts b/app/stats/content/articles/length/route.ts index 53499a95e..838e58f43 100644 --- a/app/stats/content/articles/length/route.ts +++ b/app/stats/content/articles/length/route.ts @@ -1,6 +1,6 @@ -import { type Article, getAllArticles } from "src/article"; -import { articleRoot } from "src/server-utils"; -import { renderCSV } from "app/stats/content-stats"; +import { renderCSV } from "@/app/stats/content-stats"; +import { type Article, getAllArticles } from "@/src/article"; +import { articleRoot } from "@/src/server-utils"; const readingSpeedInWordsPerMinute = 200; diff --git a/app/stats/content/authors/bus_factor/route.ts b/app/stats/content/authors/bus_factor/route.ts index ef1b90042..bde3ca9c5 100644 --- a/app/stats/content/authors/bus_factor/route.ts +++ b/app/stats/content/authors/bus_factor/route.ts @@ -1,6 +1,6 @@ -import { getAllArticles } from "src/article"; -import { articleRoot } from "src/server-utils"; -import { unique } from "src/utils"; +import { getAllArticles } from "@/src/article"; +import { articleRoot } from "@/src/server-utils"; +import { unique } from "@/src/utils"; export function GET() { const articles = getAllArticles(articleRoot); diff --git a/app/stats/content/authors/diversity/route.ts b/app/stats/content/authors/diversity/route.ts index 03466f2ab..4d4021a1a 100644 --- a/app/stats/content/authors/diversity/route.ts +++ b/app/stats/content/authors/diversity/route.ts @@ -1,6 +1,6 @@ -import { getAllArticles } from "src/article"; -import { articleRoot } from "src/server-utils"; -import { unique } from "src/utils"; +import { getAllArticles } from "@/src/article"; +import { articleRoot } from "@/src/server-utils"; +import { unique } from "@/src/utils"; export function GET() { const articles = getAllArticles(articleRoot); diff --git a/app/stats/content/authors/history/route.ts b/app/stats/content/authors/history/route.ts index 20345d8f6..10f967779 100644 --- a/app/stats/content/authors/history/route.ts +++ b/app/stats/content/authors/history/route.ts @@ -1,6 +1,6 @@ -import { getAllArticles } from "src/article"; -import { articleRoot } from "src/server-utils"; -import { unique } from "src/utils"; +import { getAllArticles } from "@/src/article"; +import { articleRoot } from "@/src/server-utils"; +import { unique } from "@/src/utils"; export function GET() { const articles = getAllArticles(articleRoot); diff --git a/app/stats/content/authors/route.ts b/app/stats/content/authors/route.ts index 0e692aee9..2bba6b462 100644 --- a/app/stats/content/authors/route.ts +++ b/app/stats/content/authors/route.ts @@ -3,9 +3,9 @@ import { getArticlesByAuthor, renderCSV, sum, -} from "app/stats/content-stats"; -import { getAllArticles } from "src/article"; -import { articleRoot } from "src/server-utils"; +} from "@/app/stats/content-stats"; +import { getAllArticles } from "@/src/article"; +import { articleRoot } from "@/src/server-utils"; export function GET(request: Request) { const { searchParams } = new URL(request.url); diff --git a/app/stats/content/categories/route.ts b/app/stats/content/categories/route.ts index c97bfd12d..3a37b1f25 100644 --- a/app/stats/content/categories/route.ts +++ b/app/stats/content/categories/route.ts @@ -3,9 +3,9 @@ import { getArticlesByCategory, renderCSV, sum, -} from "app/stats/content-stats"; -import { getAllArticles } from "src/article"; -import { articleRoot } from "src/server-utils"; +} from "@/app/stats/content-stats"; +import { getAllArticles } from "@/src/article"; +import { articleRoot } from "@/src/server-utils"; export async function GET(request: Request) { const { searchParams } = new URL(request.url); diff --git a/app/stats/donations/donors/route.ts b/app/stats/donations/donors/route.ts index f0d1790b9..f97921985 100644 --- a/app/stats/donations/donors/route.ts +++ b/app/stats/donations/donors/route.ts @@ -1,5 +1,5 @@ -import { getPastYearTransactionsByMonth } from "src/data/darujme"; -import { unique } from "src/utils"; +import { getPastYearTransactionsByMonth } from "@/src/data/darujme"; +import { unique } from "@/src/utils"; export const dynamic = "force-dynamic"; diff --git a/app/stats/donations/last_year/route.ts b/app/stats/donations/last_year/route.ts index f3e4be8c4..7761f301b 100644 --- a/app/stats/donations/last_year/route.ts +++ b/app/stats/donations/last_year/route.ts @@ -1,8 +1,8 @@ import { + getPastYearTransactionsByMonth, sumOneTimeDonations, sumRecurrentDonations, - getPastYearTransactionsByMonth, -} from "src/data/darujme"; +} from "@/src/data/darujme"; export const dynamic = "force-dynamic"; diff --git a/app/stats/donations/monthly/route.ts b/app/stats/donations/monthly/route.ts index be2366d2b..7dcacb6e7 100644 --- a/app/stats/donations/monthly/route.ts +++ b/app/stats/donations/monthly/route.ts @@ -1,8 +1,8 @@ import { - sumOneTimeDonations, getPastYearTransactionsByMonth, + sumOneTimeDonations, sumRecurrentDonations, -} from "src/data/darujme"; +} from "@/src/data/darujme"; export const dynamic = "force-dynamic"; diff --git a/app/stats/page.tsx b/app/stats/page.tsx index 78862e2e9..616263251 100644 --- a/app/stats/page.tsx +++ b/app/stats/page.tsx @@ -1,5 +1,5 @@ -import { DatawrapperChart } from "app/clanky/[...path]/DatawrapperChart"; import type { Metadata } from "next"; +import { DatawrapperChart } from "@/app/clanky/[...path]/DatawrapperChart"; export const metadata: Metadata = { title: "Ohlasy v číslech", @@ -27,7 +27,7 @@ const Page = async () => { diff --git a/components/BannerBox.tsx b/components/BannerBox.tsx index 22de1b2bc..9b8a52245 100644 --- a/components/BannerBox.tsx +++ b/components/BannerBox.tsx @@ -1,5 +1,5 @@ import Image from "next/image"; -import type { Banner } from "src/data/banners"; +import type { Banner } from "@/src/data/banners"; export type BannerProps = { banner: Banner; diff --git a/components/Breadcrumbs.tsx b/components/Breadcrumbs.tsx index d548c64c0..8b1622a1f 100644 --- a/components/Breadcrumbs.tsx +++ b/components/Breadcrumbs.tsx @@ -1,5 +1,5 @@ import Link from "next/link"; -import { RouteTo } from "src/routing"; +import { RouteTo } from "@/src/routing"; export type PathItem = { title: string; diff --git a/components/PreviewNest.tsx b/components/PreviewNest.tsx index 017a5348e..43a230714 100644 --- a/components/PreviewNest.tsx +++ b/components/PreviewNest.tsx @@ -1,11 +1,11 @@ import Image from "next/image"; import Link from "next/link"; -import { type Metadata as Article, getArticleNotices } from "src/article"; -import type { Banner } from "src/data/banners"; -import type { Author } from "src/data/content"; -import { plausibleEventClass } from "src/data/plausible"; -import { RouteTo } from "src/routing"; -import { tilde as t } from "src/utils"; +import { type Metadata as Article, getArticleNotices } from "@/src/article"; +import type { Banner } from "@/src/data/banners"; +import type { Author } from "@/src/data/content"; +import { plausibleEventClass } from "@/src/data/plausible"; +import { RouteTo } from "@/src/routing"; +import { tilde as t } from "@/src/utils"; import { BannerBox } from "./BannerBox"; export type PreviewNestProps = { diff --git a/next-env.d.ts b/next-env.d.ts index 0c7fad710..2d5420eba 100644 --- a/next-env.d.ts +++ b/next-env.d.ts @@ -1,7 +1,7 @@ /// /// /// -import "./.next/dev/types/routes.d.ts"; +import "./.next/types/routes.d.ts"; // NOTE: This file should not be edited // see https://nextjs.org/docs/app/api-reference/config/typescript for more information. diff --git a/package-lock.json b/package-lock.json index fe2761293..6598b0376 100644 --- a/package-lock.json +++ b/package-lock.json @@ -9,12 +9,12 @@ "version": "1.0.0", "license": "MIT", "dependencies": { - "@markdoc/markdoc": "^0.5.6", + "@markdoc/markdoc": "^0.5.7", "@slack/web-api": "^7.15.0", "airtable": "^0.12.2", "gray-matter": "^4.0.3", "js-yaml": "^4.1.1", - "next": "16.2.0", + "next": "16.2.1", "plausible-tracker": "^0.3.9", "react": "19.2.4", "react-dom": "19.2.4", @@ -22,7 +22,7 @@ "xmlbuilder2": "^4.0.3" }, "devDependencies": { - "@biomejs/biome": "^2.4.8", + "@biomejs/biome": "^2.4.9", "@playwright/test": "^1.58.2", "@tailwindcss/postcss": "^4.2.2", "@types/js-yaml": "^4.0.9", @@ -32,7 +32,7 @@ "postcss": "^8.5.8", "tailwindcss": "^4.2.1", "tsx": "^4.21.0", - "typescript": "5.x" + "typescript": "6.x" } }, "node_modules/@alloc/quick-lru": { @@ -49,9 +49,9 @@ } }, "node_modules/@biomejs/biome": { - "version": "2.4.8", - "resolved": "https://registry.npmjs.org/@biomejs/biome/-/biome-2.4.8.tgz", - "integrity": "sha512-ponn0oKOky1oRXBV+rlSaUlixUxf1aZvWC19Z41zBfUOUesthrQqL3OtiAlSB1EjFjyWpn98Q64DHelhA6jNlA==", + "version": "2.4.9", + "resolved": "https://registry.npmjs.org/@biomejs/biome/-/biome-2.4.9.tgz", + "integrity": "sha512-wvZW92FrwitTcacvCBT8xdAbfbxWfDLwjYMmU3djjqQTh7Ni4ZdiWIT/x5VcZ+RQuxiKzIOzi5D+dcyJDFZMsA==", "dev": true, "bin": { "biome": "bin/biome" @@ -64,20 +64,20 @@ "url": "https://opencollective.com/biome" }, "optionalDependencies": { - "@biomejs/cli-darwin-arm64": "2.4.8", - "@biomejs/cli-darwin-x64": "2.4.8", - "@biomejs/cli-linux-arm64": "2.4.8", - "@biomejs/cli-linux-arm64-musl": "2.4.8", - "@biomejs/cli-linux-x64": "2.4.8", - "@biomejs/cli-linux-x64-musl": "2.4.8", - "@biomejs/cli-win32-arm64": "2.4.8", - "@biomejs/cli-win32-x64": "2.4.8" + "@biomejs/cli-darwin-arm64": "2.4.9", + "@biomejs/cli-darwin-x64": "2.4.9", + "@biomejs/cli-linux-arm64": "2.4.9", + "@biomejs/cli-linux-arm64-musl": "2.4.9", + "@biomejs/cli-linux-x64": "2.4.9", + "@biomejs/cli-linux-x64-musl": "2.4.9", + "@biomejs/cli-win32-arm64": "2.4.9", + "@biomejs/cli-win32-x64": "2.4.9" } }, "node_modules/@biomejs/cli-darwin-arm64": { - "version": "2.4.8", - "resolved": "https://registry.npmjs.org/@biomejs/cli-darwin-arm64/-/cli-darwin-arm64-2.4.8.tgz", - "integrity": "sha512-ARx0tECE8I7S2C2yjnWYLNbBdDoPdq3oyNLhMglmuctThwUsuzFWRKrHmIGwIRWKz0Mat9DuzLEDp52hGnrxGQ==", + "version": "2.4.9", + "resolved": "https://registry.npmjs.org/@biomejs/cli-darwin-arm64/-/cli-darwin-arm64-2.4.9.tgz", + "integrity": "sha512-d5G8Gf2RpH5pYwiHLPA+UpG3G9TLQu4WM+VK6sfL7K68AmhcEQ9r+nkj/DvR/GYhYox6twsHUtmWWWIKfcfQQA==", "cpu": [ "arm64" ], @@ -91,9 +91,9 @@ } }, "node_modules/@biomejs/cli-darwin-x64": { - "version": "2.4.8", - "resolved": "https://registry.npmjs.org/@biomejs/cli-darwin-x64/-/cli-darwin-x64-2.4.8.tgz", - "integrity": "sha512-Jg9/PsB9vDCJlANE8uhG7qDhb5w0Ix69D7XIIc8IfZPUoiPrbLm33k2Ig3NOJ/7nb3UbesFz3D1aDKm9DvzjhQ==", + "version": "2.4.9", + "resolved": "https://registry.npmjs.org/@biomejs/cli-darwin-x64/-/cli-darwin-x64-2.4.9.tgz", + "integrity": "sha512-LNCLNgqDMG7BLdc3a8aY/dwKPK7+R8/JXJoXjCvZh2gx8KseqBdFDKbhrr7HCWF8SzNhbTaALhTBoh/I6rf9lA==", "cpu": [ "x64" ], @@ -107,9 +107,9 @@ } }, "node_modules/@biomejs/cli-linux-arm64": { - "version": "2.4.8", - "resolved": "https://registry.npmjs.org/@biomejs/cli-linux-arm64/-/cli-linux-arm64-2.4.8.tgz", - "integrity": "sha512-5CdrsJct76XG2hpKFwXnEtlT1p+4g4yV+XvvwBpzKsTNLO9c6iLlAxwcae2BJ7ekPGWjNGw9j09T5KGPKKxQig==", + "version": "2.4.9", + "resolved": "https://registry.npmjs.org/@biomejs/cli-linux-arm64/-/cli-linux-arm64-2.4.9.tgz", + "integrity": "sha512-4adnkAUi6K4C/emPRgYznMOcLlUqZdXWM6aIui4VP4LraE764g6Q4YguygnAUoxKjKIXIWPteKMgRbN0wsgwcg==", "cpu": [ "arm64" ], @@ -123,9 +123,9 @@ } }, "node_modules/@biomejs/cli-linux-arm64-musl": { - "version": "2.4.8", - "resolved": "https://registry.npmjs.org/@biomejs/cli-linux-arm64-musl/-/cli-linux-arm64-musl-2.4.8.tgz", - "integrity": "sha512-Zo9OhBQDJ3IBGPlqHiTISloo5H0+FBIpemqIJdW/0edJ+gEcLR+MZeZozcUyz3o1nXkVA7++DdRKQT0599j9jA==", + "version": "2.4.9", + "resolved": "https://registry.npmjs.org/@biomejs/cli-linux-arm64-musl/-/cli-linux-arm64-musl-2.4.9.tgz", + "integrity": "sha512-8RCww5xnPn2wpK4L/QDGDOW0dq80uVWfppPxHIUg6mOs9B6gRmqPp32h1Ls3T8GnW8Wo5A8u7vpTwz4fExN+sw==", "cpu": [ "arm64" ], @@ -139,9 +139,9 @@ } }, "node_modules/@biomejs/cli-linux-x64": { - "version": "2.4.8", - "resolved": "https://registry.npmjs.org/@biomejs/cli-linux-x64/-/cli-linux-x64-2.4.8.tgz", - "integrity": "sha512-PdKXspVEaMCQLjtZCn6vfSck/li4KX9KGwSDbZdgIqlrizJ2MnMcE3TvHa2tVfXNmbjMikzcfJpuPWH695yJrw==", + "version": "2.4.9", + "resolved": "https://registry.npmjs.org/@biomejs/cli-linux-x64/-/cli-linux-x64-2.4.9.tgz", + "integrity": "sha512-L10na7POF0Ks/cgLFNF1ZvIe+X4onLkTi5oP9hY+Rh60Q+7fWzKDDCeGyiHUFf1nGIa9dQOOUPGe2MyYg8nMSQ==", "cpu": [ "x64" ], @@ -155,9 +155,9 @@ } }, "node_modules/@biomejs/cli-linux-x64-musl": { - "version": "2.4.8", - "resolved": "https://registry.npmjs.org/@biomejs/cli-linux-x64-musl/-/cli-linux-x64-musl-2.4.8.tgz", - "integrity": "sha512-Gi8quv8MEuDdKaPFtS2XjEnMqODPsRg6POT6KhoP+VrkNb+T2ywunVB+TvOU0LX1jAZzfBr+3V1mIbBhzAMKvw==", + "version": "2.4.9", + "resolved": "https://registry.npmjs.org/@biomejs/cli-linux-x64-musl/-/cli-linux-x64-musl-2.4.9.tgz", + "integrity": "sha512-5TD+WS9v5vzXKzjetF0hgoaNFHMcpQeBUwKKVi3JbG1e9UCrFuUK3Gt185fyTzvRdwYkJJEMqglRPjmesmVv4A==", "cpu": [ "x64" ], @@ -171,9 +171,9 @@ } }, "node_modules/@biomejs/cli-win32-arm64": { - "version": "2.4.8", - "resolved": "https://registry.npmjs.org/@biomejs/cli-win32-arm64/-/cli-win32-arm64-2.4.8.tgz", - "integrity": "sha512-LoFatS0tnHv6KkCVpIy3qZCih+MxUMvdYiPWLHRri7mhi2vyOOs8OrbZBcLTUEWCS+ktO72nZMy4F96oMhkOHQ==", + "version": "2.4.9", + "resolved": "https://registry.npmjs.org/@biomejs/cli-win32-arm64/-/cli-win32-arm64-2.4.9.tgz", + "integrity": "sha512-aDZr0RBC3sMGJOU10BvG7eZIlWLK/i51HRIfScE2lVhfts2dQTreowLiJJd+UYg/tHKxS470IbzpuKmd0MiD6g==", "cpu": [ "arm64" ], @@ -187,9 +187,9 @@ } }, "node_modules/@biomejs/cli-win32-x64": { - "version": "2.4.8", - "resolved": "https://registry.npmjs.org/@biomejs/cli-win32-x64/-/cli-win32-x64-2.4.8.tgz", - "integrity": "sha512-vAn7iXDoUbqFXqVocuq1sMYAd33p8+mmurqJkWl6CtIhobd/O6moe4rY5AJvzbunn/qZCdiDVcveqtkFh1e7Hg==", + "version": "2.4.9", + "resolved": "https://registry.npmjs.org/@biomejs/cli-win32-x64/-/cli-win32-x64-2.4.9.tgz", + "integrity": "sha512-NS4g/2G9SoQ4ktKtz31pvyc/rmgzlcIDCGU/zWbmHJAqx6gcRj2gj5Q/guXhoWTzCUaQZDIqiCQXHS7BcGYc0w==", "cpu": [ "x64" ], @@ -1161,9 +1161,9 @@ } }, "node_modules/@markdoc/markdoc": { - "version": "0.5.6", - "resolved": "https://registry.npmjs.org/@markdoc/markdoc/-/markdoc-0.5.6.tgz", - "integrity": "sha512-Qs7L5YKYHADWhpOP1JthE3E5ut4Mby/UsJKsGla3g8OXBLWDImTsG5H+Mzq5h3J6a8CNnGtp+Kz9JcGtHRpoKA==", + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/@markdoc/markdoc/-/markdoc-0.5.7.tgz", + "integrity": "sha512-NxreNThm7foFgMMQD6zgk7rKkcFMmdC8J5r+Zn4FKoN75F5YjvwdihwF11VhrBfL3CXnD4+YG1VYwvBL+igzvw==", "engines": { "node": ">=14.7.0" }, @@ -1185,19 +1185,17 @@ } }, "node_modules/@next/env": { - "version": "16.2.0", - "resolved": "https://registry.npmjs.org/@next/env/-/env-16.2.0.tgz", - "integrity": "sha512-OZIbODWWAi0epQRCRjNe1VO45LOFBzgiyqmTLzIqWq6u1wrxKnAyz1HH6tgY/Mc81YzIjRPoYsPAEr4QV4l9TA==", - "license": "MIT" + "version": "16.2.1", + "resolved": "https://registry.npmjs.org/@next/env/-/env-16.2.1.tgz", + "integrity": "sha512-n8P/HCkIWW+gVal2Z8XqXJ6aB3J0tuM29OcHpCsobWlChH/SITBs1DFBk/HajgrwDkqqBXPbuUuzgDvUekREPg==" }, "node_modules/@next/swc-darwin-arm64": { - "version": "16.2.0", - "resolved": "https://registry.npmjs.org/@next/swc-darwin-arm64/-/swc-darwin-arm64-16.2.0.tgz", - "integrity": "sha512-/JZsqKzKt01IFoiLLAzlNqys7qk2F3JkcUhj50zuRhKDQkZNOz9E5N6wAQWprXdsvjRP4lTFj+/+36NSv5AwhQ==", + "version": "16.2.1", + "resolved": "https://registry.npmjs.org/@next/swc-darwin-arm64/-/swc-darwin-arm64-16.2.1.tgz", + "integrity": "sha512-BwZ8w8YTaSEr2HIuXLMLxIdElNMPvY9fLqb20LX9A9OMGtJilhHLbCL3ggyd0TwjmMcTxi0XXt+ur1vWUoxj2Q==", "cpu": [ "arm64" ], - "license": "MIT", "optional": true, "os": [ "darwin" @@ -1207,13 +1205,12 @@ } }, "node_modules/@next/swc-darwin-x64": { - "version": "16.2.0", - "resolved": "https://registry.npmjs.org/@next/swc-darwin-x64/-/swc-darwin-x64-16.2.0.tgz", - "integrity": "sha512-/hV8erWq4SNlVgglUiW5UmQ5Hwy5EW/AbbXlJCn6zkfKxTy/E/U3V8U1Ocm2YCTUoFgQdoMxRyRMOW5jYy4ygg==", + "version": "16.2.1", + "resolved": "https://registry.npmjs.org/@next/swc-darwin-x64/-/swc-darwin-x64-16.2.1.tgz", + "integrity": "sha512-/vrcE6iQSJq3uL3VGVHiXeaKbn8Es10DGTGRJnRZlkNQQk3kaNtAJg8Y6xuAlrx/6INKVjkfi5rY0iEXorZ6uA==", "cpu": [ "x64" ], - "license": "MIT", "optional": true, "os": [ "darwin" @@ -1223,13 +1220,12 @@ } }, "node_modules/@next/swc-linux-arm64-gnu": { - "version": "16.2.0", - "resolved": "https://registry.npmjs.org/@next/swc-linux-arm64-gnu/-/swc-linux-arm64-gnu-16.2.0.tgz", - "integrity": "sha512-GkjL/Q7MWOwqWR9zoxu1TIHzkOI2l2BHCf7FzeQG87zPgs+6WDh+oC9Sw9ARuuL/FUk6JNCgKRkA6rEQYadUaw==", + "version": "16.2.1", + "resolved": "https://registry.npmjs.org/@next/swc-linux-arm64-gnu/-/swc-linux-arm64-gnu-16.2.1.tgz", + "integrity": "sha512-uLn+0BK+C31LTVbQ/QU+UaVrV0rRSJQ8RfniQAHPghDdgE+SlroYqcmFnO5iNjNfVWCyKZHYrs3Nl0mUzWxbBw==", "cpu": [ "arm64" ], - "license": "MIT", "optional": true, "os": [ "linux" @@ -1239,13 +1235,12 @@ } }, "node_modules/@next/swc-linux-arm64-musl": { - "version": "16.2.0", - "resolved": "https://registry.npmjs.org/@next/swc-linux-arm64-musl/-/swc-linux-arm64-musl-16.2.0.tgz", - "integrity": "sha512-1ffhC6KY5qWLg5miMlKJp3dZbXelEfjuXt1qcp5WzSCQy36CV3y+JT7OC1WSFKizGQCDOcQbfkH/IjZP3cdRNA==", + "version": "16.2.1", + "resolved": "https://registry.npmjs.org/@next/swc-linux-arm64-musl/-/swc-linux-arm64-musl-16.2.1.tgz", + "integrity": "sha512-ssKq6iMRnHdnycGp9hCuGnXJZ0YPr4/wNwrfE5DbmvEcgl9+yv97/Kq3TPVDfYome1SW5geciLB9aiEqKXQjlQ==", "cpu": [ "arm64" ], - "license": "MIT", "optional": true, "os": [ "linux" @@ -1255,13 +1250,12 @@ } }, "node_modules/@next/swc-linux-x64-gnu": { - "version": "16.2.0", - "resolved": "https://registry.npmjs.org/@next/swc-linux-x64-gnu/-/swc-linux-x64-gnu-16.2.0.tgz", - "integrity": "sha512-FmbDcZQ8yJRq93EJSL6xaE0KK/Rslraf8fj1uViGxg7K4CKBCRYSubILJPEhjSgZurpcPQq12QNOJQ0DRJl6Hg==", + "version": "16.2.1", + "resolved": "https://registry.npmjs.org/@next/swc-linux-x64-gnu/-/swc-linux-x64-gnu-16.2.1.tgz", + "integrity": "sha512-HQm7SrHRELJ30T1TSmT706IWovFFSRGxfgUkyWJZF/RKBMdbdRWJuFrcpDdE5vy9UXjFOx6L3mRdqH04Mmx0hg==", "cpu": [ "x64" ], - "license": "MIT", "optional": true, "os": [ "linux" @@ -1271,13 +1265,12 @@ } }, "node_modules/@next/swc-linux-x64-musl": { - "version": "16.2.0", - "resolved": "https://registry.npmjs.org/@next/swc-linux-x64-musl/-/swc-linux-x64-musl-16.2.0.tgz", - "integrity": "sha512-HzjIHVkmGAwRbh/vzvoBWWEbb8BBZPxBvVbDQDvzHSf3D8RP/4vjw7MNLDXFF9Q1WEzeQyEj2zdxBtVAHu5Oyw==", + "version": "16.2.1", + "resolved": "https://registry.npmjs.org/@next/swc-linux-x64-musl/-/swc-linux-x64-musl-16.2.1.tgz", + "integrity": "sha512-aV2iUaC/5HGEpbBkE+4B8aHIudoOy5DYekAKOMSHoIYQ66y/wIVeaRx8MS2ZMdxe/HIXlMho4ubdZs/J8441Tg==", "cpu": [ "x64" ], - "license": "MIT", "optional": true, "os": [ "linux" @@ -1287,13 +1280,12 @@ } }, "node_modules/@next/swc-win32-arm64-msvc": { - "version": "16.2.0", - "resolved": "https://registry.npmjs.org/@next/swc-win32-arm64-msvc/-/swc-win32-arm64-msvc-16.2.0.tgz", - "integrity": "sha512-UMiFNQf5H7+1ZsZPxEsA064WEuFbRNq/kEXyepbCnSErp4f5iut75dBA8UeerFIG3vDaQNOfCpevnERPp2V+nA==", + "version": "16.2.1", + "resolved": "https://registry.npmjs.org/@next/swc-win32-arm64-msvc/-/swc-win32-arm64-msvc-16.2.1.tgz", + "integrity": "sha512-IXdNgiDHaSk0ZUJ+xp0OQTdTgnpx1RCfRTalhn3cjOP+IddTMINwA7DXZrwTmGDO8SUr5q2hdP/du4DcrB1GxA==", "cpu": [ "arm64" ], - "license": "MIT", "optional": true, "os": [ "win32" @@ -1303,13 +1295,12 @@ } }, "node_modules/@next/swc-win32-x64-msvc": { - "version": "16.2.0", - "resolved": "https://registry.npmjs.org/@next/swc-win32-x64-msvc/-/swc-win32-x64-msvc-16.2.0.tgz", - "integrity": "sha512-DRrNJKW+/eimrZgdhVN1uvkN1OI4j6Lpefwr44jKQ0YQzztlmOBUUzHuV5GxOMPK3nmodAYElUVCY8ZXo/IWeA==", + "version": "16.2.1", + "resolved": "https://registry.npmjs.org/@next/swc-win32-x64-msvc/-/swc-win32-x64-msvc-16.2.1.tgz", + "integrity": "sha512-qvU+3a39Hay+ieIztkGSbF7+mccbbg1Tk25hc4JDylf8IHjYmY/Zm64Qq1602yPyQqvie+vf5T/uPwNxDNIoeg==", "cpu": [ "x64" ], - "license": "MIT", "optional": true, "os": [ "win32" @@ -2746,12 +2737,11 @@ } }, "node_modules/next": { - "version": "16.2.0", - "resolved": "https://registry.npmjs.org/next/-/next-16.2.0.tgz", - "integrity": "sha512-NLBVrJy1pbV1Yn00L5sU4vFyAHt5XuSjzrNyFnxo6Com0M0KrL6hHM5B99dbqXb2bE9pm4Ow3Zl1xp6HVY9edQ==", - "license": "MIT", + "version": "16.2.1", + "resolved": "https://registry.npmjs.org/next/-/next-16.2.1.tgz", + "integrity": "sha512-VaChzNL7o9rbfdt60HUj8tev4m6d7iC1igAy157526+cJlXOQu5LzsBXNT+xaJnTP/k+utSX5vMv7m0G+zKH+Q==", "dependencies": { - "@next/env": "16.2.0", + "@next/env": "16.2.1", "@swc/helpers": "0.5.15", "baseline-browser-mapping": "^2.9.19", "caniuse-lite": "^1.0.30001579", @@ -2765,14 +2755,14 @@ "node": ">=20.9.0" }, "optionalDependencies": { - "@next/swc-darwin-arm64": "16.2.0", - "@next/swc-darwin-x64": "16.2.0", - "@next/swc-linux-arm64-gnu": "16.2.0", - "@next/swc-linux-arm64-musl": "16.2.0", - "@next/swc-linux-x64-gnu": "16.2.0", - "@next/swc-linux-x64-musl": "16.2.0", - "@next/swc-win32-arm64-msvc": "16.2.0", - "@next/swc-win32-x64-msvc": "16.2.0", + "@next/swc-darwin-arm64": "16.2.1", + "@next/swc-darwin-x64": "16.2.1", + "@next/swc-linux-arm64-gnu": "16.2.1", + "@next/swc-linux-arm64-musl": "16.2.1", + "@next/swc-linux-x64-gnu": "16.2.1", + "@next/swc-linux-x64-musl": "16.2.1", + "@next/swc-win32-arm64-msvc": "16.2.1", + "@next/swc-win32-x64-msvc": "16.2.1", "sharp": "^0.34.5" }, "peerDependencies": { @@ -3261,9 +3251,9 @@ } }, "node_modules/typescript": { - "version": "5.9.3", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.9.3.tgz", - "integrity": "sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw==", + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-6.0.2.tgz", + "integrity": "sha512-bGdAIrZ0wiGDo5l8c++HWtbaNCWTS4UTv7RaTH/ThVIgjkveJt83m74bBHMJkuCbslY8ixgLBVZJIOiQlQTjfQ==", "dev": true, "bin": { "tsc": "bin/tsc", @@ -3320,74 +3310,74 @@ "dev": true }, "@biomejs/biome": { - "version": "2.4.8", - "resolved": "https://registry.npmjs.org/@biomejs/biome/-/biome-2.4.8.tgz", - "integrity": "sha512-ponn0oKOky1oRXBV+rlSaUlixUxf1aZvWC19Z41zBfUOUesthrQqL3OtiAlSB1EjFjyWpn98Q64DHelhA6jNlA==", + "version": "2.4.9", + "resolved": "https://registry.npmjs.org/@biomejs/biome/-/biome-2.4.9.tgz", + "integrity": "sha512-wvZW92FrwitTcacvCBT8xdAbfbxWfDLwjYMmU3djjqQTh7Ni4ZdiWIT/x5VcZ+RQuxiKzIOzi5D+dcyJDFZMsA==", "dev": true, "requires": { - "@biomejs/cli-darwin-arm64": "2.4.8", - "@biomejs/cli-darwin-x64": "2.4.8", - "@biomejs/cli-linux-arm64": "2.4.8", - "@biomejs/cli-linux-arm64-musl": "2.4.8", - "@biomejs/cli-linux-x64": "2.4.8", - "@biomejs/cli-linux-x64-musl": "2.4.8", - "@biomejs/cli-win32-arm64": "2.4.8", - "@biomejs/cli-win32-x64": "2.4.8" + "@biomejs/cli-darwin-arm64": "2.4.9", + "@biomejs/cli-darwin-x64": "2.4.9", + "@biomejs/cli-linux-arm64": "2.4.9", + "@biomejs/cli-linux-arm64-musl": "2.4.9", + "@biomejs/cli-linux-x64": "2.4.9", + "@biomejs/cli-linux-x64-musl": "2.4.9", + "@biomejs/cli-win32-arm64": "2.4.9", + "@biomejs/cli-win32-x64": "2.4.9" } }, "@biomejs/cli-darwin-arm64": { - "version": "2.4.8", - "resolved": "https://registry.npmjs.org/@biomejs/cli-darwin-arm64/-/cli-darwin-arm64-2.4.8.tgz", - "integrity": "sha512-ARx0tECE8I7S2C2yjnWYLNbBdDoPdq3oyNLhMglmuctThwUsuzFWRKrHmIGwIRWKz0Mat9DuzLEDp52hGnrxGQ==", + "version": "2.4.9", + "resolved": "https://registry.npmjs.org/@biomejs/cli-darwin-arm64/-/cli-darwin-arm64-2.4.9.tgz", + "integrity": "sha512-d5G8Gf2RpH5pYwiHLPA+UpG3G9TLQu4WM+VK6sfL7K68AmhcEQ9r+nkj/DvR/GYhYox6twsHUtmWWWIKfcfQQA==", "dev": true, "optional": true }, "@biomejs/cli-darwin-x64": { - "version": "2.4.8", - "resolved": "https://registry.npmjs.org/@biomejs/cli-darwin-x64/-/cli-darwin-x64-2.4.8.tgz", - "integrity": "sha512-Jg9/PsB9vDCJlANE8uhG7qDhb5w0Ix69D7XIIc8IfZPUoiPrbLm33k2Ig3NOJ/7nb3UbesFz3D1aDKm9DvzjhQ==", + "version": "2.4.9", + "resolved": "https://registry.npmjs.org/@biomejs/cli-darwin-x64/-/cli-darwin-x64-2.4.9.tgz", + "integrity": "sha512-LNCLNgqDMG7BLdc3a8aY/dwKPK7+R8/JXJoXjCvZh2gx8KseqBdFDKbhrr7HCWF8SzNhbTaALhTBoh/I6rf9lA==", "dev": true, "optional": true }, "@biomejs/cli-linux-arm64": { - "version": "2.4.8", - "resolved": "https://registry.npmjs.org/@biomejs/cli-linux-arm64/-/cli-linux-arm64-2.4.8.tgz", - "integrity": "sha512-5CdrsJct76XG2hpKFwXnEtlT1p+4g4yV+XvvwBpzKsTNLO9c6iLlAxwcae2BJ7ekPGWjNGw9j09T5KGPKKxQig==", + "version": "2.4.9", + "resolved": "https://registry.npmjs.org/@biomejs/cli-linux-arm64/-/cli-linux-arm64-2.4.9.tgz", + "integrity": "sha512-4adnkAUi6K4C/emPRgYznMOcLlUqZdXWM6aIui4VP4LraE764g6Q4YguygnAUoxKjKIXIWPteKMgRbN0wsgwcg==", "dev": true, "optional": true }, "@biomejs/cli-linux-arm64-musl": { - "version": "2.4.8", - "resolved": "https://registry.npmjs.org/@biomejs/cli-linux-arm64-musl/-/cli-linux-arm64-musl-2.4.8.tgz", - "integrity": "sha512-Zo9OhBQDJ3IBGPlqHiTISloo5H0+FBIpemqIJdW/0edJ+gEcLR+MZeZozcUyz3o1nXkVA7++DdRKQT0599j9jA==", + "version": "2.4.9", + "resolved": "https://registry.npmjs.org/@biomejs/cli-linux-arm64-musl/-/cli-linux-arm64-musl-2.4.9.tgz", + "integrity": "sha512-8RCww5xnPn2wpK4L/QDGDOW0dq80uVWfppPxHIUg6mOs9B6gRmqPp32h1Ls3T8GnW8Wo5A8u7vpTwz4fExN+sw==", "dev": true, "optional": true }, "@biomejs/cli-linux-x64": { - "version": "2.4.8", - "resolved": "https://registry.npmjs.org/@biomejs/cli-linux-x64/-/cli-linux-x64-2.4.8.tgz", - "integrity": "sha512-PdKXspVEaMCQLjtZCn6vfSck/li4KX9KGwSDbZdgIqlrizJ2MnMcE3TvHa2tVfXNmbjMikzcfJpuPWH695yJrw==", + "version": "2.4.9", + "resolved": "https://registry.npmjs.org/@biomejs/cli-linux-x64/-/cli-linux-x64-2.4.9.tgz", + "integrity": "sha512-L10na7POF0Ks/cgLFNF1ZvIe+X4onLkTi5oP9hY+Rh60Q+7fWzKDDCeGyiHUFf1nGIa9dQOOUPGe2MyYg8nMSQ==", "dev": true, "optional": true }, "@biomejs/cli-linux-x64-musl": { - "version": "2.4.8", - "resolved": "https://registry.npmjs.org/@biomejs/cli-linux-x64-musl/-/cli-linux-x64-musl-2.4.8.tgz", - "integrity": "sha512-Gi8quv8MEuDdKaPFtS2XjEnMqODPsRg6POT6KhoP+VrkNb+T2ywunVB+TvOU0LX1jAZzfBr+3V1mIbBhzAMKvw==", + "version": "2.4.9", + "resolved": "https://registry.npmjs.org/@biomejs/cli-linux-x64-musl/-/cli-linux-x64-musl-2.4.9.tgz", + "integrity": "sha512-5TD+WS9v5vzXKzjetF0hgoaNFHMcpQeBUwKKVi3JbG1e9UCrFuUK3Gt185fyTzvRdwYkJJEMqglRPjmesmVv4A==", "dev": true, "optional": true }, "@biomejs/cli-win32-arm64": { - "version": "2.4.8", - "resolved": "https://registry.npmjs.org/@biomejs/cli-win32-arm64/-/cli-win32-arm64-2.4.8.tgz", - "integrity": "sha512-LoFatS0tnHv6KkCVpIy3qZCih+MxUMvdYiPWLHRri7mhi2vyOOs8OrbZBcLTUEWCS+ktO72nZMy4F96oMhkOHQ==", + "version": "2.4.9", + "resolved": "https://registry.npmjs.org/@biomejs/cli-win32-arm64/-/cli-win32-arm64-2.4.9.tgz", + "integrity": "sha512-aDZr0RBC3sMGJOU10BvG7eZIlWLK/i51HRIfScE2lVhfts2dQTreowLiJJd+UYg/tHKxS470IbzpuKmd0MiD6g==", "dev": true, "optional": true }, "@biomejs/cli-win32-x64": { - "version": "2.4.8", - "resolved": "https://registry.npmjs.org/@biomejs/cli-win32-x64/-/cli-win32-x64-2.4.8.tgz", - "integrity": "sha512-vAn7iXDoUbqFXqVocuq1sMYAd33p8+mmurqJkWl6CtIhobd/O6moe4rY5AJvzbunn/qZCdiDVcveqtkFh1e7Hg==", + "version": "2.4.9", + "resolved": "https://registry.npmjs.org/@biomejs/cli-win32-x64/-/cli-win32-x64-2.4.9.tgz", + "integrity": "sha512-NS4g/2G9SoQ4ktKtz31pvyc/rmgzlcIDCGU/zWbmHJAqx6gcRj2gj5Q/guXhoWTzCUaQZDIqiCQXHS7BcGYc0w==", "dev": true, "optional": true }, @@ -3823,65 +3813,65 @@ } }, "@markdoc/markdoc": { - "version": "0.5.6", - "resolved": "https://registry.npmjs.org/@markdoc/markdoc/-/markdoc-0.5.6.tgz", - "integrity": "sha512-Qs7L5YKYHADWhpOP1JthE3E5ut4Mby/UsJKsGla3g8OXBLWDImTsG5H+Mzq5h3J6a8CNnGtp+Kz9JcGtHRpoKA==", + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/@markdoc/markdoc/-/markdoc-0.5.7.tgz", + "integrity": "sha512-NxreNThm7foFgMMQD6zgk7rKkcFMmdC8J5r+Zn4FKoN75F5YjvwdihwF11VhrBfL3CXnD4+YG1VYwvBL+igzvw==", "requires": { "@types/linkify-it": "^3.0.1", "@types/markdown-it": "12.2.3" } }, "@next/env": { - "version": "16.2.0", - "resolved": "https://registry.npmjs.org/@next/env/-/env-16.2.0.tgz", - "integrity": "sha512-OZIbODWWAi0epQRCRjNe1VO45LOFBzgiyqmTLzIqWq6u1wrxKnAyz1HH6tgY/Mc81YzIjRPoYsPAEr4QV4l9TA==" + "version": "16.2.1", + "resolved": "https://registry.npmjs.org/@next/env/-/env-16.2.1.tgz", + "integrity": "sha512-n8P/HCkIWW+gVal2Z8XqXJ6aB3J0tuM29OcHpCsobWlChH/SITBs1DFBk/HajgrwDkqqBXPbuUuzgDvUekREPg==" }, "@next/swc-darwin-arm64": { - "version": "16.2.0", - "resolved": "https://registry.npmjs.org/@next/swc-darwin-arm64/-/swc-darwin-arm64-16.2.0.tgz", - "integrity": "sha512-/JZsqKzKt01IFoiLLAzlNqys7qk2F3JkcUhj50zuRhKDQkZNOz9E5N6wAQWprXdsvjRP4lTFj+/+36NSv5AwhQ==", + "version": "16.2.1", + "resolved": "https://registry.npmjs.org/@next/swc-darwin-arm64/-/swc-darwin-arm64-16.2.1.tgz", + "integrity": "sha512-BwZ8w8YTaSEr2HIuXLMLxIdElNMPvY9fLqb20LX9A9OMGtJilhHLbCL3ggyd0TwjmMcTxi0XXt+ur1vWUoxj2Q==", "optional": true }, "@next/swc-darwin-x64": { - "version": "16.2.0", - "resolved": "https://registry.npmjs.org/@next/swc-darwin-x64/-/swc-darwin-x64-16.2.0.tgz", - "integrity": "sha512-/hV8erWq4SNlVgglUiW5UmQ5Hwy5EW/AbbXlJCn6zkfKxTy/E/U3V8U1Ocm2YCTUoFgQdoMxRyRMOW5jYy4ygg==", + "version": "16.2.1", + "resolved": "https://registry.npmjs.org/@next/swc-darwin-x64/-/swc-darwin-x64-16.2.1.tgz", + "integrity": "sha512-/vrcE6iQSJq3uL3VGVHiXeaKbn8Es10DGTGRJnRZlkNQQk3kaNtAJg8Y6xuAlrx/6INKVjkfi5rY0iEXorZ6uA==", "optional": true }, "@next/swc-linux-arm64-gnu": { - "version": "16.2.0", - "resolved": "https://registry.npmjs.org/@next/swc-linux-arm64-gnu/-/swc-linux-arm64-gnu-16.2.0.tgz", - "integrity": "sha512-GkjL/Q7MWOwqWR9zoxu1TIHzkOI2l2BHCf7FzeQG87zPgs+6WDh+oC9Sw9ARuuL/FUk6JNCgKRkA6rEQYadUaw==", + "version": "16.2.1", + "resolved": "https://registry.npmjs.org/@next/swc-linux-arm64-gnu/-/swc-linux-arm64-gnu-16.2.1.tgz", + "integrity": "sha512-uLn+0BK+C31LTVbQ/QU+UaVrV0rRSJQ8RfniQAHPghDdgE+SlroYqcmFnO5iNjNfVWCyKZHYrs3Nl0mUzWxbBw==", "optional": true }, "@next/swc-linux-arm64-musl": { - "version": "16.2.0", - "resolved": "https://registry.npmjs.org/@next/swc-linux-arm64-musl/-/swc-linux-arm64-musl-16.2.0.tgz", - "integrity": "sha512-1ffhC6KY5qWLg5miMlKJp3dZbXelEfjuXt1qcp5WzSCQy36CV3y+JT7OC1WSFKizGQCDOcQbfkH/IjZP3cdRNA==", + "version": "16.2.1", + "resolved": "https://registry.npmjs.org/@next/swc-linux-arm64-musl/-/swc-linux-arm64-musl-16.2.1.tgz", + "integrity": "sha512-ssKq6iMRnHdnycGp9hCuGnXJZ0YPr4/wNwrfE5DbmvEcgl9+yv97/Kq3TPVDfYome1SW5geciLB9aiEqKXQjlQ==", "optional": true }, "@next/swc-linux-x64-gnu": { - "version": "16.2.0", - "resolved": "https://registry.npmjs.org/@next/swc-linux-x64-gnu/-/swc-linux-x64-gnu-16.2.0.tgz", - "integrity": "sha512-FmbDcZQ8yJRq93EJSL6xaE0KK/Rslraf8fj1uViGxg7K4CKBCRYSubILJPEhjSgZurpcPQq12QNOJQ0DRJl6Hg==", + "version": "16.2.1", + "resolved": "https://registry.npmjs.org/@next/swc-linux-x64-gnu/-/swc-linux-x64-gnu-16.2.1.tgz", + "integrity": "sha512-HQm7SrHRELJ30T1TSmT706IWovFFSRGxfgUkyWJZF/RKBMdbdRWJuFrcpDdE5vy9UXjFOx6L3mRdqH04Mmx0hg==", "optional": true }, "@next/swc-linux-x64-musl": { - "version": "16.2.0", - "resolved": "https://registry.npmjs.org/@next/swc-linux-x64-musl/-/swc-linux-x64-musl-16.2.0.tgz", - "integrity": "sha512-HzjIHVkmGAwRbh/vzvoBWWEbb8BBZPxBvVbDQDvzHSf3D8RP/4vjw7MNLDXFF9Q1WEzeQyEj2zdxBtVAHu5Oyw==", + "version": "16.2.1", + "resolved": "https://registry.npmjs.org/@next/swc-linux-x64-musl/-/swc-linux-x64-musl-16.2.1.tgz", + "integrity": "sha512-aV2iUaC/5HGEpbBkE+4B8aHIudoOy5DYekAKOMSHoIYQ66y/wIVeaRx8MS2ZMdxe/HIXlMho4ubdZs/J8441Tg==", "optional": true }, "@next/swc-win32-arm64-msvc": { - "version": "16.2.0", - "resolved": "https://registry.npmjs.org/@next/swc-win32-arm64-msvc/-/swc-win32-arm64-msvc-16.2.0.tgz", - "integrity": "sha512-UMiFNQf5H7+1ZsZPxEsA064WEuFbRNq/kEXyepbCnSErp4f5iut75dBA8UeerFIG3vDaQNOfCpevnERPp2V+nA==", + "version": "16.2.1", + "resolved": "https://registry.npmjs.org/@next/swc-win32-arm64-msvc/-/swc-win32-arm64-msvc-16.2.1.tgz", + "integrity": "sha512-IXdNgiDHaSk0ZUJ+xp0OQTdTgnpx1RCfRTalhn3cjOP+IddTMINwA7DXZrwTmGDO8SUr5q2hdP/du4DcrB1GxA==", "optional": true }, "@next/swc-win32-x64-msvc": { - "version": "16.2.0", - "resolved": "https://registry.npmjs.org/@next/swc-win32-x64-msvc/-/swc-win32-x64-msvc-16.2.0.tgz", - "integrity": "sha512-DRrNJKW+/eimrZgdhVN1uvkN1OI4j6Lpefwr44jKQ0YQzztlmOBUUzHuV5GxOMPK3nmodAYElUVCY8ZXo/IWeA==", + "version": "16.2.1", + "resolved": "https://registry.npmjs.org/@next/swc-win32-x64-msvc/-/swc-win32-x64-msvc-16.2.1.tgz", + "integrity": "sha512-qvU+3a39Hay+ieIztkGSbF7+mccbbg1Tk25hc4JDylf8IHjYmY/Zm64Qq1602yPyQqvie+vf5T/uPwNxDNIoeg==", "optional": true }, "@oozcitak/dom": { @@ -4770,19 +4760,19 @@ "integrity": "sha512-N8SpfPUnUp1bK+PMYW8qSWdl9U+wwNWI4QKxOYDy9JAro3WMX7p2OeVRF9v+347pnakNevPmiHhNmZ2HbFA76w==" }, "next": { - "version": "16.2.0", - "resolved": "https://registry.npmjs.org/next/-/next-16.2.0.tgz", - "integrity": "sha512-NLBVrJy1pbV1Yn00L5sU4vFyAHt5XuSjzrNyFnxo6Com0M0KrL6hHM5B99dbqXb2bE9pm4Ow3Zl1xp6HVY9edQ==", + "version": "16.2.1", + "resolved": "https://registry.npmjs.org/next/-/next-16.2.1.tgz", + "integrity": "sha512-VaChzNL7o9rbfdt60HUj8tev4m6d7iC1igAy157526+cJlXOQu5LzsBXNT+xaJnTP/k+utSX5vMv7m0G+zKH+Q==", "requires": { - "@next/env": "16.2.0", - "@next/swc-darwin-arm64": "16.2.0", - "@next/swc-darwin-x64": "16.2.0", - "@next/swc-linux-arm64-gnu": "16.2.0", - "@next/swc-linux-arm64-musl": "16.2.0", - "@next/swc-linux-x64-gnu": "16.2.0", - "@next/swc-linux-x64-musl": "16.2.0", - "@next/swc-win32-arm64-msvc": "16.2.0", - "@next/swc-win32-x64-msvc": "16.2.0", + "@next/env": "16.2.1", + "@next/swc-darwin-arm64": "16.2.1", + "@next/swc-darwin-x64": "16.2.1", + "@next/swc-linux-arm64-gnu": "16.2.1", + "@next/swc-linux-arm64-musl": "16.2.1", + "@next/swc-linux-x64-gnu": "16.2.1", + "@next/swc-linux-x64-musl": "16.2.1", + "@next/swc-win32-arm64-msvc": "16.2.1", + "@next/swc-win32-x64-msvc": "16.2.1", "@swc/helpers": "0.5.15", "baseline-browser-mapping": "^2.9.19", "caniuse-lite": "^1.0.30001579", @@ -5092,9 +5082,9 @@ } }, "typescript": { - "version": "5.9.3", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.9.3.tgz", - "integrity": "sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw==", + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-6.0.2.tgz", + "integrity": "sha512-bGdAIrZ0wiGDo5l8c++HWtbaNCWTS4UTv7RaTH/ThVIgjkveJt83m74bBHMJkuCbslY8ixgLBVZJIOiQlQTjfQ==", "dev": true }, "typescript-json-decoder": { diff --git a/package.json b/package.json index bfaab528c..1593ac1be 100644 --- a/package.json +++ b/package.json @@ -14,12 +14,12 @@ "playwright": "playwright test" }, "dependencies": { - "@markdoc/markdoc": "^0.5.6", + "@markdoc/markdoc": "^0.5.7", "@slack/web-api": "^7.15.0", "airtable": "^0.12.2", "gray-matter": "^4.0.3", "js-yaml": "^4.1.1", - "next": "16.2.0", + "next": "16.2.1", "plausible-tracker": "^0.3.9", "react": "19.2.4", "react-dom": "19.2.4", @@ -27,7 +27,7 @@ "xmlbuilder2": "^4.0.3" }, "devDependencies": { - "@biomejs/biome": "^2.4.8", + "@biomejs/biome": "^2.4.9", "@playwright/test": "^1.58.2", "@tailwindcss/postcss": "^4.2.2", "@types/js-yaml": "^4.0.9", @@ -37,7 +37,7 @@ "postcss": "^8.5.8", "tailwindcss": "^4.2.1", "tsx": "^4.21.0", - "typescript": "5.x" + "typescript": "6.x" }, "overrides": { "@types/react": "19.2.14", diff --git a/pages/api/feeds/articles.ts b/pages/api/feeds/articles.ts index 49ac219e6..a6ca3575a 100644 --- a/pages/api/feeds/articles.ts +++ b/pages/api/feeds/articles.ts @@ -1,10 +1,10 @@ import { join } from "node:path"; -import { ArticleContent } from "app/clanky/[...path]/ArticleContent"; import type { NextApiRequest, NextApiResponse } from "next"; import * as ReactDOMServer from "react-dom/server"; -import { type Article, compareByDate, getAllArticles } from "src/article"; -import { type RSSFeed, type RSSFeedItem, renderFeed } from "src/feeds"; -import { absolute, RouteTo, siteUrl } from "src/routing"; +import { ArticleContent } from "@/app/clanky/[...path]/ArticleContent"; +import { type Article, compareByDate, getAllArticles } from "@/src/article"; +import { type RSSFeed, type RSSFeedItem, renderFeed } from "@/src/feeds"; +import { absolute, RouteTo, siteUrl } from "@/src/routing"; /** Serve last 10 articles as an RSS feed with full article text */ export default async ( diff --git a/src/data/banners.ts b/src/data/banners.ts index a875aa4d1..90c5d2aa9 100644 --- a/src/data/banners.ts +++ b/src/data/banners.ts @@ -1,4 +1,3 @@ -import { shuffled } from "src/utils"; import { array, type decodeType, @@ -6,6 +5,7 @@ import { record, string, } from "typescript-json-decoder"; +import { shuffled } from "@/src/utils"; import { getTable, unwrapRecords } from "./airtable"; const bannerTable = () => getTable("appcP5M7jTIUMZaRc", "tblxgfyRlovII0SC2"); diff --git a/src/data/books.ts b/src/data/books.ts index 2055e9823..e21e63989 100644 --- a/src/data/books.ts +++ b/src/data/books.ts @@ -1,4 +1,3 @@ -import { relationToZeroOrOne } from "src/decoding"; import { array, type decodeType, @@ -9,6 +8,7 @@ import { string, union, } from "typescript-json-decoder"; +import { relationToZeroOrOne } from "@/src/decoding"; import { getTable, unwrapRecord, unwrapRecords } from "./airtable"; // diff --git a/src/data/cache.ts b/src/data/cache.ts index 3f12a7633..83995b9b4 100644 --- a/src/data/cache.ts +++ b/src/data/cache.ts @@ -1,5 +1,5 @@ -import { type Article, getAllArticles } from "src/article"; -import { articleRoot } from "src/server-utils"; +import { type Article, getAllArticles } from "@/src/article"; +import { articleRoot } from "@/src/server-utils"; import { type Banner, getAllBanners } from "./banners"; import { type Author, getAllAuthors } from "./content"; diff --git a/src/data/plausible.ts b/src/data/plausible.ts index ca797daa4..924718251 100644 --- a/src/data/plausible.ts +++ b/src/data/plausible.ts @@ -1,7 +1,3 @@ -import { getAllArticles } from "src/article"; -import { getArticlePath } from "src/routing"; -import { articleRoot } from "src/server-utils"; -import { Duration } from "src/utils"; import { array, type decodeType, @@ -9,6 +5,10 @@ import { record, string, } from "typescript-json-decoder"; +import { getAllArticles } from "@/src/article"; +import { getArticlePath } from "@/src/routing"; +import { articleRoot } from "@/src/server-utils"; +import { Duration } from "@/src/utils"; // // Plausible support diff --git a/src/data/podcast.ts b/src/data/podcast.ts index 5afc3192a..04ade60fc 100644 --- a/src/data/podcast.ts +++ b/src/data/podcast.ts @@ -1,7 +1,6 @@ import fs from "node:fs"; import { resolve } from "node:path"; import yaml from "js-yaml"; -import { decodeUrl } from "src/decoding"; import { array, type decodeType, @@ -9,6 +8,7 @@ import { record, string, } from "typescript-json-decoder"; +import { decodeUrl } from "@/src/decoding"; export type PodcastEpisode = decodeType; export const decodePodcastEpisode = record({ diff --git a/tsconfig.json b/tsconfig.json index 461b0da7a..023c0b702 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -2,7 +2,7 @@ "compilerOptions": { "esModuleInterop": true, "strictNullChecks": true, - "target": "ES2015", + "target": "esnext", "lib": ["dom", "dom.iterable", "esnext"], "allowJs": true, "skipLibCheck": true, @@ -10,17 +10,19 @@ "forceConsistentCasingInFileNames": true, "noEmit": true, "incremental": true, - "module": "esnext", - "moduleResolution": "node", + "module": "nodenext", + "moduleResolution": "nodenext", "resolveJsonModule": true, "isolatedModules": true, "jsx": "react-jsx", - "baseUrl": ".", "plugins": [ { "name": "next" } - ] + ], + "paths": { + "@/*": ["./*"] + } }, "include": [ "next-env.d.ts",