-
Notifications
You must be signed in to change notification settings - Fork 375
Expand file tree
/
Copy pathastro.config.mjs
More file actions
executable file
·77 lines (71 loc) · 2.37 KB
/
astro.config.mjs
File metadata and controls
executable file
·77 lines (71 loc) · 2.37 KB
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
66
67
68
69
70
71
72
73
74
75
76
77
import mdx from "@astrojs/mdx";
import react from "@astrojs/react";
import sitemap from "@astrojs/sitemap";
import tailwindcss from "@tailwindcss/vite";
import AutoImport from "astro-auto-import";
import { defineConfig, fontProviders } from "astro/config";
import remarkCollapse from "remark-collapse";
import remarkToc from "remark-toc";
import sharp from "sharp";
import config from "./src/config/config.json";
import theme from "./src/config/theme.json";
// Helper to parse font string format: "FontName:wght@400;500;600;700"
function parseFontString(fontStr) {
const [name, weightPart] = fontStr.split(":");
let weights = [400]; // default weight
if (weightPart) {
// Extract weights from wght@400;500;600 format
const weightMatch = weightPart.match(/wght@?([\d;]+)/);
if (weightMatch) {
weights = weightMatch[1].split(";").map((w) => parseInt(w, 10));
}
}
// remove + from font name and add space
const cleanName = name.replace(/\+/g, " ");
return { name: cleanName, weights };
}
// Build fonts configuration from theme.json
const fontsConfig = Object.entries(theme.fonts.font_family)
.filter(([key]) => !key.includes("_type")) // Filter out type entries
.map(([key, fontStr]) => {
const { name, weights } = parseFontString(fontStr);
const typeKey = `${key}_type`;
const fallback = theme.fonts.font_family[typeKey] || "sans-serif";
return {
name,
cssVariable: `--font-${key}`,
provider: fontProviders.google(),
weights,
display: "swap",
fallbacks: [fallback],
};
});
// https://astro.build/config
export default defineConfig({
site: config.site.base_url ? config.site.base_url : "http://examplesite.com",
base: config.site.base_path ? config.site.base_path : "/",
trailingSlash: config.site.trailing_slash ? "always" : "never",
image: { service: sharp() },
vite: { plugins: [tailwindcss()] },
fonts: fontsConfig,
integrations: [
react(),
sitemap(),
AutoImport({
imports: [
"@/shortcodes/Button",
"@/shortcodes/Accordion",
"@/shortcodes/Notice",
"@/shortcodes/Video",
"@/shortcodes/Youtube",
"@/shortcodes/Tabs",
"@/shortcodes/Tab",
],
}),
mdx(),
],
markdown: {
remarkPlugins: [remarkToc, [remarkCollapse, { test: "Table of contents" }]],
shikiConfig: { theme: "one-dark-pro", wrap: true },
},
});