import fs from 'node:fs' import { defineConfig, presetAttributify, presetIcons, presetTypography, presetUno } from 'unocss' import { ARTICLE_TEXT, DIRECTORY_NAME } from './constant' function getMainCss() { const env = process.env.NODE_ENV const input = fs.readFileSync('main.css', 'utf8') if (env === 'development') return input // eslint-disable-next-line @typescript-eslint/no-require-imports, @typescript-eslint/no-var-requires const CleanCSS = require('clean-css') return new CleanCSS().minify(input).styles } export default defineConfig({ cli: { entry: { patterns: [`${DIRECTORY_NAME}/template.html`], outFile: `${DIRECTORY_NAME}/stylesheet.css`, }, }, shortcuts: [ [/^(.*)Text$/, ([,c]) => `text-${ARTICLE_TEXT[c]}`], ], theme: { maxWidth: { prose: '80ch', }, fontFamily: { sans: ['ui-sans-serif', 'system-ui'], serif: ['ui-serif', 'Georgia'], mono: ['ui-monospace', 'SFMono-Regular'], display: ['ui-sans-serif'], body: ['ui-sans-serif'], }, }, presets: [ presetUno({ dark: 'media', }), presetAttributify(), presetIcons({ scale: 1.2, }), presetTypography({ cssExtend: { blockquote: { 'font-style': 'none', }, }, }), ], preflights: [ { layer: 'my-style', getCSS: () => getMainCss(), }, ], safelist: [...Object.keys(ARTICLE_TEXT).map(i => `${i}Text`)], })