何も考えずに markdown を変換して、front-matter 使ってメタデータを引っ張ろうとしたら、↓ で怒られた

Reason: `object` ("[object Date]") cannot be serialized as JSON. Please only return JSON serializable data types.

原因は Next.js が Date オブジェクトを扱っていないから(?)らしく議論もされてて解決策も出てた

https://github.com/vercel/next.js/discussions/11498

babel プラグインも入れば解決するみたいだけど、違う方法試してみた。

  1. 無理やり文字列にキャストする
import frontMatter from 'front-matter';
import fs from 'fs';

const contentData = fs.readFileSync(`content/articles/${filename}`).toString();
const meta = frontMatter<FrontMatter>(contentData).attributes;
meta.date = String(meta.date);
  1. Date オブジェクトを日付フォーマットな文字列にする(dayjs 使った)
import frontMatter from 'front-matter';
import fs from 'fs';
import dayjs from 'dayjs';

const contentData = fs.readFileSync(`content/articles/${filename}`).toString();
const meta = frontMatter<FrontMatter>(contentData).attributes;
meta.date = dayjs(meta.date).format('YYYY-MM-DD');

おわり

いずれにしても、日付っぽい文字列にすれば理解してくれるみたい。