blog-vue/src/posts/index.ts

57 lines
1.2 KiB
TypeScript

import type { ComponentOptions } from 'vue'
import { h, defineComponent } from 'vue'
import ThePost from '../components/ThePost.vue'
export type Post = {
title : string,
date : Date,
slug : string,
path : string,
url : string,
excerpt : string,
component : ComponentOptions,
}
const imports = await Promise.all(
Object.values(import.meta.glob('./*.md')).map((m) => m())
)
// @ts-ignore
const posts : Post[] = imports.map((post) => {
// @ts-ignore
const slug = post.default.__name
const path = "/posts/" + slug
const url = path + ".html"
// @ts-ignore
const date = new Date(post.date)
// @ts-ignore
const title = post.title
return {
// @ts-ignore
excerpt: post.excerpt,
title, date, slug, path, url,
component: defineComponent(
(props) => {
return () => {
return h(
ThePost,
{
date: date,
title: title
},
{
// @ts-ignore
default: post.default.render
}
)
}
},
{ props: {} }
)
}
})
posts.sort((a,b)=>-(a.date.getTime()-b.date.getTime()))
export default posts