57 lines
1.2 KiB
TypeScript
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
|