wf4/app/utils/markdown.ts
webfussel fa0435efdf add: more SEO meta
More seometa, better markdown parser
2025-06-11 18:49:19 +02:00

27 lines
823 B
TypeScript

import type { MinimalElement, MinimalNode } from '@nuxt/content'
type TypedRecord<T extends readonly string[]> = Record<T[number], string>
type PlainText<T extends string[]> = {
meta: TypedRecord<T>
text: string
}
const extractText = (element ?: MinimalNode) : string => {
if (!element) return ''
if (typeof element === 'string') return element
const [,, ...nodes] = element
return nodes?.map((el : MinimalNode) => typeof el === 'string' ? el : extractText(el)).join(' ') ?? ''
}
export const generatePlainText = <T extends string[] = []>(body ?: MinimalNode[]) : PlainText<T>[] => {
if (!body) return []
return body.map<PlainText<T>>(part => {
const [, meta] = part as MinimalElement
return {
meta : meta as TypedRecord<T>,
text: extractText(part).replace(/\n/g, ' ')
}
})
}