-
Notifications
You must be signed in to change notification settings - Fork 0
/
vite.config.js
65 lines (60 loc) · 1.95 KB
/
vite.config.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
import vituum from 'vituum'
import handlebars from '@vituum/vite-plugin-handlebars'
import tailwindcss from '@vituum/vite-plugin-tailwindcss'
import { addDynamicIconSelectors } from '@iconify/tailwind'
import { readFileSync, readdirSync } from 'node:fs'
const readJson = path => JSON.parse(readFileSync(path, { encoding: 'utf8' }))
const { ICONS, TITLES } = readdirSync('./src/pages').reduce(
(acc, page) => {
const themeOptions = readJson(`./src/pages/${page}`)?.meta?.themeOptions
const { iconMap, sectionTitles } = themeOptions || {}
return {
ICONS: { ...acc.ICONS, ...iconMap },
TITLES: { ...acc.TITLES, ...sectionTitles },
}
},
{
ICONS: {
// dark: 'mage:moon-fill',
// light: 'mage:sun-fill',
dark: 'line-md:sunny-filled-loop-to-moon-filled-alt-loop-transition',
light: 'line-md:moon-filled-alt-to-sunny-filled-loop-transition',
},
TITLES: {},
}
)
const getIcon = x => `icon-[${ICONS[x.toLowerCase()]}]`.replace(':', '--')
const getTitle = x => TITLES[x] || x
const mkDateFormatter = opt => str =>
Date.parse(str)
? new Intl.DateTimeFormat('en-US', opt).format(new Date(str))
: str
export default {
plugins: [
vituum(),
handlebars({
root: './src',
helpers: {
Y: mkDateFormatter({ year: 'numeric' }),
MY: mkDateFormatter({ year: 'numeric', month: 'short' }),
DMY: mkDateFormatter({ year: 'numeric', month: 'short', day: 'numeric', }),
ICO: getIcon,
TITLE: getTitle,
URL: url => url.split('/').at(-1),
URL_SEMI: url => url.split('https://').at(-1),
URL_ICO: url => {
const [,domain] = url.match(/https:..(\w+).\w+/)
return getIcon(domain)
}
},
}),
tailwindcss({
tailwindcss: {
content: ['./src/components/*.hbs'],
theme: { extend: {} },
safelist: Object.keys(ICONS).map(getIcon),
plugins: [addDynamicIconSelectors()],
},
}),
],
}