2025-08-25 21:34:26 +02:00

71 lines
2.1 KiB
JavaScript

import { getDirname, path } from "vuepress/utils"
import { defineUserConfig } from 'vuepress'
import { viteBundler } from '@vuepress/bundler-vite'
import meta from './config/meta'
import theme from './config/theme'
const __dirname = getDirname(import.meta.url)
export default defineUserConfig({
...meta,
theme,
bundler: viteBundler(),
base: process.env.VUEPRESS_BASE ? `/${process.env.VUEPRESS_BASE}/` : '/',
alias: {
'@theme': path.resolve(
__dirname,
'./theme',
),
},
locales: {
// The key is the path for the locale to be nested under.
// As a special case, the default locale can use '/' as its path.
'/de/': {
lang: 'de-DE',
},
'/en/': {
lang: 'en-EN',
},
'/es/': {
lang: 'es-ES',
},
'/fr/': {
lang: 'fr-FR',
},
},
plugins: [
{
name: "collect-article-true",
async onPrepared(app) {
const rows = app.pages
.filter((p) => p.frontmatter?.article === true || p.frontmatter?.article === "true")
.map((p) => {
const fm = p.frontmatter || {};
// gängige Cover-Keys im Theme Hope Umfeld:
const cover = fm.cover || fm.image || fm.banner || fm.heroImage || null;
// kurze Beschreibung / Excerpt
const excerpt = p.excerpt || fm.description || "";
return {
path: p.path,
title: p.title || fm.title || "",
date: fm.date || null, // ISO empfohlen
tags: Array.isArray(fm.tags) ? fm.tags : (fm.tag ? [].concat(fm.tag) : []),
category: Array.isArray(fm.category) ? fm.category : (fm.categories ? fm.categories : []),
cover,
excerpt,
locale: p.pathLocale || "/",
};
})
.sort((a, b) => {
const ta = a.date ? Date.parse(a.date) : 0;
const tb = b.date ? Date.parse(b.date) : 0;
return tb - ta;
});
await app.writeTemp("mini-blog.articles.json", JSON.stringify(rows, null, 2));
},
},
],
})