summaryrefslogtreecommitdiffstats
path: root/corvos.config.ts
diff options
context:
space:
mode:
authorVolpeon <git@volpeon.ink>2026-07-22 19:40:59 +0200
committerVolpeon <git@volpeon.ink>2026-07-22 19:40:59 +0200
commitc1e28224aa2e1450031669d9a7e359b63e04687d (patch)
tree68f3d8905c763a91f68001d868197effa92adafa /corvos.config.ts
downloadcorvos-website-c1e28224aa2e1450031669d9a7e359b63e04687d.tar.gz
corvos-website-c1e28224aa2e1450031669d9a7e359b63e04687d.tar.bz2
corvos-website-c1e28224aa2e1450031669d9a7e359b63e04687d.zip
Init
Diffstat (limited to 'corvos.config.ts')
-rw-r--r--corvos.config.ts80
1 files changed, 80 insertions, 0 deletions
diff --git a/corvos.config.ts b/corvos.config.ts
new file mode 100644
index 0000000..deae101
--- /dev/null
+++ b/corvos.config.ts
@@ -0,0 +1,80 @@
1import "https://deno.land/std@0.224.0/dotenv/load.ts";
2import type { Page } from "corvos";
3
4import { Pipeline, Site } from "corvos";
5import { assets } from "corvos/plugins/assets.ts";
6import { brotli } from "corvos/plugins/brotli.ts";
7import { cache } from "corvos/plugins/cache.ts";
8import { esbuild } from "corvos/plugins/esbuild.ts";
9import { feeds } from "corvos/plugins/feeds.ts";
10import { gzip } from "corvos/plugins/gzip.ts";
11import { hash } from "corvos/plugins/hash.ts";
12import { icons } from "corvos/plugins/icons.ts";
13import { images } from "corvos/plugins/images.ts";
14import { jsx } from "corvos/plugins/jsx.ts";
15import { markdown } from "corvos/plugins/markdown.ts";
16import { mdx } from "corvos/plugins/mdx.ts";
17import { modules } from "corvos/plugins/modules.ts";
18import { queryBuilder } from "corvos/plugins/query_builder.ts";
19import { sass } from "corvos/plugins/sass.ts";
20import { sitemap } from "corvos/plugins/sitemap.ts";
21import { templates } from "corvos/plugins/templates.ts";
22import { transformImages } from "corvos/plugins/transform_images.ts";
23import { urls } from "corvos/plugins/urls.ts";
24
25import type { Node } from "$/deps/strapi.tsx";
26import type { PageData } from "$/schemas/mod.ts";
27
28import { strapi } from "$/deps/strapi.tsx";
29import { pageDataSchema } from "$/schemas/mod.ts";
30
31const assetPipeline = Pipeline.create()
32 .use(cache())
33
34 .use(assets())
35 .use(hash())
36
37 .use(esbuild())
38 .use(sass())
39 .use(icons())
40 .use(
41 images({
42 allowedOrigins: ["strapi.volpeon.ink"],
43 defaults: { formats: ["avif", "webp", "png"], densities: [1, 2] },
44 }),
45 )
46 .use(transformImages())
47
48 .use(brotli())
49 .use(gzip());
50
51const pagePipeline = Pipeline.create()
52 // Helpers
53 .use(queryBuilder())
54
55 // Content
56 .use(modules<Page<".strapi", Node[], PageData> | Page<".", Uint8Array<ArrayBuffer>>>())
57 .use(markdown({ frontmatterSchema: pageDataSchema }))
58 .use(mdx({ frontmatterSchema: pageDataSchema }))
59 .use(strapi())
60 .use(jsx())
61 .use(urls({ base: new URL("https://corvos.volpeon.ink/") }))
62
63 // Page listings
64 .use(feeds<{ type: "releases" }>())
65 .use(sitemap())
66
67 // Templates
68 .use(templates())
69 .use(jsx())
70
71 .use(brotli())
72 .use(gzip());
73
74const site = new Site({
75 assetPipeline,
76 pagePipeline,
77 redirects: [[/^\/(scripts|styles)\//, "/assets/"]],
78});
79
80export default site;