diff --git a/packages/next-mdx/package.json b/packages/next-mdx/package.json index 52a1d0e..4e6aa78 100644 --- a/packages/next-mdx/package.json +++ b/packages/next-mdx/package.json @@ -45,7 +45,8 @@ "gray-matter": "^4.0.2", "hasha": "^5.2.2", "next-mdx-remote": "^2.1.3", - "node-cache": "^5.1.2" + "node-cache": "^5.1.2", + "reading-time": "^1.3.0" }, "peerDependencies": { "next": ">= 10.0.0", diff --git a/packages/next-mdx/src/get-nodes.ts b/packages/next-mdx/src/get-nodes.ts index da2f422..412efc2 100644 --- a/packages/next-mdx/src/get-nodes.ts +++ b/packages/next-mdx/src/get-nodes.ts @@ -1,6 +1,7 @@ import { promises as fs } from "fs" import matter from "gray-matter" import hasha from "hasha" +import readingTime from "reading-time" import { GetStaticPropsContext } from "next" import { Pluggable, Compiler } from "unified" import renderToString from "next-mdx-remote/render-to-string" @@ -181,6 +182,11 @@ export async function getFileData(file: MdxFile): Promise { const { content, data: frontMatter } = matter(raw) + const word_count = content.split(/\s+/gu).length + const reading_time = readingTime(content) + frontMatter.reading_time = reading_time + frontMatter.word_count = word_count + const fileData: MdxFileData = { hash, content, diff --git a/packages/next-mdx/test/index.test.js b/packages/next-mdx/test/index.test.js index 322804e..801d44c 100644 --- a/packages/next-mdx/test/index.test.js +++ b/packages/next-mdx/test/index.test.js @@ -44,6 +44,8 @@ test("gets a node using slug", async () => { const post = await getNode("post", "post-one") expect(post.frontMatter.title).toBe("Post One") expect(post.url).toBe("/blog/post-one") + expect(post.frontMatter.word_count).toBe(71) + expect(post.frontMatter.reading_time.text).toBe("1 min read") const author = await getNode("author", "john-doe") expect(author.frontMatter.name).toBe("John Doe") diff --git a/yarn.lock b/yarn.lock index 4e9be32..be758bb 100644 --- a/yarn.lock +++ b/yarn.lock @@ -10487,6 +10487,11 @@ readdirp@~3.5.0: dependencies: picomatch "^2.2.1" +reading-time@^1.3.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/reading-time/-/reading-time-1.3.0.tgz#d13e74431589a4a9038669f24d5acbc08bbb015d" + integrity sha512-RJ8J5O6UvrclfZpcPSPuKusrdRfoY7uXXoYOOdeswZNtSkQaewT3919yz6RyloDBR+iwcUyz5zGOUjhgvfuv3g== + rebass@^4.0.7: version "4.0.7" resolved "https://registry.yarnpkg.com/rebass/-/rebass-4.0.7.tgz#0a84e5558750c1f416c3baf41ec4c7fc8d64a98a"