summaryrefslogtreecommitdiffstats
path: root/corvos.config.ts
blob: deae10150942227d73bcb88d00140f030ba0d1fb (plain) (blame)
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
78
79
80
import "https://deno.land/std@0.224.0/dotenv/load.ts";
import type { Page } from "corvos";

import { Pipeline, Site } from "corvos";
import { assets } from "corvos/plugins/assets.ts";
import { brotli } from "corvos/plugins/brotli.ts";
import { cache } from "corvos/plugins/cache.ts";
import { esbuild } from "corvos/plugins/esbuild.ts";
import { feeds } from "corvos/plugins/feeds.ts";
import { gzip } from "corvos/plugins/gzip.ts";
import { hash } from "corvos/plugins/hash.ts";
import { icons } from "corvos/plugins/icons.ts";
import { images } from "corvos/plugins/images.ts";
import { jsx } from "corvos/plugins/jsx.ts";
import { markdown } from "corvos/plugins/markdown.ts";
import { mdx } from "corvos/plugins/mdx.ts";
import { modules } from "corvos/plugins/modules.ts";
import { queryBuilder } from "corvos/plugins/query_builder.ts";
import { sass } from "corvos/plugins/sass.ts";
import { sitemap } from "corvos/plugins/sitemap.ts";
import { templates } from "corvos/plugins/templates.ts";
import { transformImages } from "corvos/plugins/transform_images.ts";
import { urls } from "corvos/plugins/urls.ts";

import type { Node } from "$/deps/strapi.tsx";
import type { PageData } from "$/schemas/mod.ts";

import { strapi } from "$/deps/strapi.tsx";
import { pageDataSchema } from "$/schemas/mod.ts";

const assetPipeline = Pipeline.create()
	.use(cache())

	.use(assets())
	.use(hash())

	.use(esbuild())
	.use(sass())
	.use(icons())
	.use(
		images({
			allowedOrigins: ["strapi.volpeon.ink"],
			defaults: { formats: ["avif", "webp", "png"], densities: [1, 2] },
		}),
	)
	.use(transformImages())

	.use(brotli())
	.use(gzip());

const pagePipeline = Pipeline.create()
	// Helpers
	.use(queryBuilder())

	// Content
	.use(modules<Page<".strapi", Node[], PageData> | Page<".", Uint8Array<ArrayBuffer>>>())
	.use(markdown({ frontmatterSchema: pageDataSchema }))
	.use(mdx({ frontmatterSchema: pageDataSchema }))
	.use(strapi())
	.use(jsx())
	.use(urls({ base: new URL("https://corvos.volpeon.ink/") }))

	// Page listings
	.use(feeds<{ type: "releases" }>())
	.use(sitemap())

	// Templates
	.use(templates())
	.use(jsx())

	.use(brotli())
	.use(gzip());

const site = new Site({
	assetPipeline,
	pagePipeline,
	redirects: [[/^\/(scripts|styles)\//, "/assets/"]],
});

export default site;