From 060023c2733a066829c0c834f5651f76fb32da87 Mon Sep 17 00:00:00 2001 From: kwar Date: Mon, 14 Aug 2023 17:39:19 -0400 Subject: [PATCH] fix: tags on snippets --- libs/mdx.server.ts | 39 +++++++++++++++++++++------------------ libs/tags.server.ts | 38 ++++++++++++++++++++------------------ pages/tags.tsx | 2 +- pages/tags/[tag].tsx | 4 ++-- 4 files changed, 44 insertions(+), 39 deletions(-) diff --git a/libs/mdx.server.ts b/libs/mdx.server.ts index 02f8cf6e..e35bb715 100644 --- a/libs/mdx.server.ts +++ b/libs/mdx.server.ts @@ -113,27 +113,30 @@ export async function getFileBySlug( } } -export function getAllFilesFrontMatter(folder: string) { +export function getAllFilesFrontMatter(...folderNames: string[]) { let root = process.cwd() - let prefixPaths = path.join(root, 'data', folder) - - let files = getAllFilesRecursively(prefixPaths) let allFrontMatter: BlogFrontMatter[] = [] - files.forEach((file) => { - // Replace is needed to work on Windows - let fileName = file.slice(prefixPaths.length + 1).replace(/\\/g, '/') - // Remove Unexpected File - if (path.extname(fileName) !== '.md' && path.extname(fileName) !== '.mdx') { - return - } - let source = fs.readFileSync(file, 'utf8') - let grayMatterData = matter(source) - let data = grayMatterData.data as BlogFrontMatter - if (data.draft !== true) { - allFrontMatter.push({ ...data, slug: formatSlug(fileName) }) - } - }) + for (const folder of folderNames) { + let prefixPaths = path.join(root, 'data', folder) + let files = getAllFilesRecursively(prefixPaths) + + files.forEach((file) => { + // Replace is needed to work on Windows + let fileName = file.slice(prefixPaths.length + 1).replace(/\\/g, '/') + // Remove Unexpected File + if (path.extname(fileName) !== '.md' && path.extname(fileName) !== '.mdx') { + return + } + let source = fs.readFileSync(file, 'utf8') + let grayMatterData = matter(source) + let data = grayMatterData.data as BlogFrontMatter + data.readingTime = readingTime(grayMatterData.content) + if (data.draft !== true) { + allFrontMatter.push({ ...data, slug: formatSlug(fileName) }) + } + }) + } return allFrontMatter.sort((a, b) => dateSortDesc(a.date, b.date)) } diff --git a/libs/tags.server.ts b/libs/tags.server.ts index 20ef1cfc..d94ea045 100644 --- a/libs/tags.server.ts +++ b/libs/tags.server.ts @@ -6,27 +6,29 @@ import type { TagsCount } from '~/types/server' import { kebabCase } from '~/utils/string' import { getFiles } from './files.server' -export function getAllTags(type: string): TagsCount { - let files = getFiles(type) +export function getAllTags(...types: string[]): TagsCount { let root = process.cwd() let tagsCount: TagsCount = {} - // Iterate through each post, putting all found tags into `tags` - files.forEach((file, i) => { - let source = fs.readFileSync(path.join(root, 'data', type, file), 'utf8') - let grayMatterData = matter(source) - let data = grayMatterData.data as MdxFrontMatter - if (data.tags && data.draft !== true) { - data.tags.forEach((tag: string) => { - let formattedTag = kebabCase(tag) - if (formattedTag in tagsCount) { - tagsCount[formattedTag] += 1 - } else { - tagsCount[formattedTag] = 1 - } - }) - } - }) + for (const type of types) { + let files = getFiles(type) + // Iterate through each post, putting all found tags into `tags` + files.forEach((file, i) => { + let source = fs.readFileSync(path.join(root, 'data', type, file), 'utf8') + let grayMatterData = matter(source) + let data = grayMatterData.data as MdxFrontMatter + if (data.tags && data.draft !== true) { + data.tags.forEach((tag: string) => { + let formattedTag = kebabCase(tag) + if (formattedTag in tagsCount) { + tagsCount[formattedTag] += 1 + } else { + tagsCount[formattedTag] = 1 + } + }) + } + }) + } return tagsCount } diff --git a/pages/tags.tsx b/pages/tags.tsx index 32e84b12..9f71aefc 100644 --- a/pages/tags.tsx +++ b/pages/tags.tsx @@ -8,7 +8,7 @@ import type { TagsCount } from '~/types/server' import { kebabCase } from '~/utils/string' export async function getStaticProps({ locale }) { - let tags = getAllTags('blog') + let tags = getAllTags('blog', 'snippets') return { props: { tags, ...(await serverSideTranslations(locale, ['common'])) }, } diff --git a/pages/tags/[tag].tsx b/pages/tags/[tag].tsx index e2165dbc..6ffdf2fc 100644 --- a/pages/tags/[tag].tsx +++ b/pages/tags/[tag].tsx @@ -12,7 +12,7 @@ import type { BlogFrontMatter } from '~/types/mdx' import { kebabCase } from '~/utils/string' export function getStaticPaths({ locale }) { - let tags = getAllTags(`${locale}/blog`) + let tags = getAllTags(`${locale}/blog`, `${locale}/snippets`) return { paths: Object.keys(tags).map((tag) => ({ params: { @@ -30,7 +30,7 @@ export async function getStaticProps({ params: { tag: string } locale: string }) { - let allPosts = getAllFilesFrontMatter(`${locale}/blog`) + let allPosts = getAllFilesFrontMatter(`${locale}/blog`, `${locale}/snippets`) let filteredPosts = allPosts.filter( (post) => post.draft !== true && post.tags.map((t) => kebabCase(t)).includes(params.tag) )