diff --git a/solutions/blog/app/blog/[slug]/page.tsx b/solutions/blog/app/blog/[slug]/page.tsx index 4fcc86c3cf..23688128f1 100644 --- a/solutions/blog/app/blog/[slug]/page.tsx +++ b/solutions/blog/app/blog/[slug]/page.tsx @@ -11,10 +11,16 @@ export async function generateStaticParams() { })) } -export function generateMetadata({ params }) { +type Props = { + params: { + slug: string + } +} + +export function generateMetadata({ params }: Props) { let post = getBlogPosts().find((post) => post.slug === params.slug) if (!post) { - return + return {} } let { @@ -51,7 +57,7 @@ export function generateMetadata({ params }) { } } -export default function Blog({ params }) { +export default function Blog({ params }: Props) { let post = getBlogPosts().find((post) => post.slug === params.slug) if (!post) { diff --git a/solutions/blog/app/blog/utils.ts b/solutions/blog/app/blog/utils.ts index 0156eeb2b5..5d2213d29c 100644 --- a/solutions/blog/app/blog/utils.ts +++ b/solutions/blog/app/blog/utils.ts @@ -26,19 +26,19 @@ function parseFrontmatter(fileContent: string) { return { metadata: metadata as Metadata, content } } -function getMDXFiles(dir) { +function getMDXFiles(dir: fs.PathLike) { return fs.readdirSync(dir).filter((file) => path.extname(file) === '.mdx') } -function readMDXFile(filePath) { +function readMDXFile(filePath: fs.PathOrFileDescriptor) { let rawContent = fs.readFileSync(filePath, 'utf-8') return parseFrontmatter(rawContent) } -function getMDXData(dir) { +function getMDXData(dir: fs.PathLike) { let mdxFiles = getMDXFiles(dir) return mdxFiles.map((file) => { - let { metadata, content } = readMDXFile(path.join(dir, file)) + let { metadata, content } = readMDXFile(path.join(dir.toString(), file)) let slug = path.basename(file, path.extname(file)) return { diff --git a/solutions/blog/app/components/mdx.tsx b/solutions/blog/app/components/mdx.tsx index 7849731b46..049918868d 100644 --- a/solutions/blog/app/components/mdx.tsx +++ b/solutions/blog/app/components/mdx.tsx @@ -1,10 +1,17 @@ import Link from 'next/link' -import Image from 'next/image' -import { MDXRemote } from 'next-mdx-remote/rsc' +import Image, { type ImageProps } from 'next/image' +import { MDXRemote, type MDXRemoteProps } from 'next-mdx-remote/rsc' import { highlight } from 'sugar-high' import React from 'react' -function Table({ data }) { +type TableProps = { + data: { + headers: React.ReactNode[] + rows: React.ReactNode[][] + } +} + +function Table({ data }: TableProps) { let headers = data.headers.map((header, index) => (
}
-function slugify(str) {
+export function slugify(str: string) {
return str
.toString()
.toLowerCase()
@@ -64,9 +69,9 @@ function slugify(str) {
.replace(/\-\-+/g, '-') // Replace multiple - with single -
}
-function createHeading(level) {
- const Heading = ({ children }) => {
- let slug = slugify(children)
+function createHeading(level: number) {
+ const Heading = ({ children }: React.PropsWithChildren) => {
+ let slug = slugify(children?.toString() ?? '')
return React.createElement(
`h${level}`,
{ id: slug },
@@ -99,7 +104,7 @@ let components = {
Table,
}
-export function CustomMDX(props) {
+export function CustomMDX(props: MDXRemoteProps) {
return (