summaryrefslogtreecommitdiffstats
path: root/src/schemas
diff options
context:
space:
mode:
Diffstat (limited to 'src/schemas')
-rw-r--r--src/schemas/misc.ts16
-rw-r--r--src/schemas/mod.ts8
-rw-r--r--src/schemas/releases.ts18
3 files changed, 42 insertions, 0 deletions
diff --git a/src/schemas/misc.ts b/src/schemas/misc.ts
new file mode 100644
index 0000000..e86df72
--- /dev/null
+++ b/src/schemas/misc.ts
@@ -0,0 +1,16 @@
1import { type } from "arktype";
2
3export const miscSchema = type.or(
4 {
5 type: "'home'",
6 title: "string",
7 description: "string",
8 },
9 {
10 type: "'releases-index'",
11 title: "string",
12 description: "string",
13 },
14);
15
16export type Misc = typeof miscSchema.infer;
diff --git a/src/schemas/mod.ts b/src/schemas/mod.ts
new file mode 100644
index 0000000..69d6c6f
--- /dev/null
+++ b/src/schemas/mod.ts
@@ -0,0 +1,8 @@
1import { type } from "arktype";
2
3import { miscSchema } from "$/schemas/misc.ts";
4import { releaseSchema } from "$/schemas/releases.ts";
5
6export const pageDataSchema = type.or(releaseSchema, miscSchema);
7
8export type PageData = typeof pageDataSchema.infer;
diff --git a/src/schemas/releases.ts b/src/schemas/releases.ts
new file mode 100644
index 0000000..0ccb6a6
--- /dev/null
+++ b/src/schemas/releases.ts
@@ -0,0 +1,18 @@
1import { type } from "arktype";
2
3import { nodeSchema } from "../deps/strapi.tsx";
4import { strapiLoader } from "../deps/strapi.tsx";
5
6export const releaseStrapiSchema = type({
7 "version": "string",
8 "date": "string.date.parse",
9 "notes?": nodeSchema.array().or("null"),
10 "files": strapiLoader.resolvedFileAttributeSchema,
11});
12
13export const releaseSchema = releaseStrapiSchema.merge({
14 type: "'release'",
15 title: "string",
16});
17
18export type Release = typeof releaseSchema.infer;