tei.su/astro.config.mjs
alina sireneva b1e85615a1
All checks were successful
Publish and deploy / publish (push) Successful in 36s
Publish and deploy / deploy (push) Successful in 7s
feat: blog!
2025-01-26 19:51:00 +03:00

72 lines
1.7 KiB
JavaScript

import node from '@astrojs/node'
import solid from '@astrojs/solid-js'
import { Graphviz } from '@hpcc-js/wasm-graphviz'
import { defineConfig } from 'astro/config'
import { toString } from 'mdast-util-to-string'
import getReadingTime from 'reading-time'
import { visit } from 'unist-util-visit'
import UnoCSS from 'unocss/astro'
function remarkReadingTime() {
return function (tree, { data }) {
const textOnPage = toString(tree)
const readingTime = getReadingTime(textOnPage)
data.astro.frontmatter.minutesRead = readingTime.text
}
}
function remarkGraphvizSvg() {
return async function (tree) {
const graphviz = await Graphviz.load()
const instances = []
visit(tree, { type: 'code', lang: 'dot' }, (node, index, parent) => {
instances.push([node.value, index, parent])
})
for (const [dot, index, parent] of instances) {
const svg = graphviz.dot(dot, 'svg')
parent.children.splice(index, 1, {
type: 'html',
value: `<div class="graphviz-svg">${svg}</div>`,
})
}
}
}
// https://astro.build/config
export default defineConfig({
output: 'server',
site: 'https://tei.su',
integrations: [
solid(),
UnoCSS({
injectReset: true,
}),
],
markdown: {
remarkPlugins: [
remarkReadingTime,
remarkGraphvizSvg,
],
smartypants: false,
shikiConfig: {
themes: {
dark: 'catppuccin-mocha',
light: 'catppuccin-latte',
},
},
},
vite: {
esbuild: { jsx: 'automatic' },
define: {
'import.meta.env.VITE_BUILD_DATE': JSON.stringify(new Date().toISOString().split('T')[0]),
},
},
adapter: node({
mode: 'standalone',
}),
server: {
host: true,
},
})