From c1e28224aa2e1450031669d9a7e359b63e04687d Mon Sep 17 00:00:00 2001 From: Volpeon Date: Wed, 22 Jul 2026 19:40:59 +0200 Subject: Init --- src/schemas/misc.ts | 16 ++++++++++++++++ src/schemas/mod.ts | 8 ++++++++ src/schemas/releases.ts | 18 ++++++++++++++++++ 3 files changed, 42 insertions(+) create mode 100644 src/schemas/misc.ts create mode 100644 src/schemas/mod.ts create mode 100644 src/schemas/releases.ts (limited to 'src/schemas') 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 @@ +import { type } from "arktype"; + +export const miscSchema = type.or( + { + type: "'home'", + title: "string", + description: "string", + }, + { + type: "'releases-index'", + title: "string", + description: "string", + }, +); + +export 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 @@ +import { type } from "arktype"; + +import { miscSchema } from "$/schemas/misc.ts"; +import { releaseSchema } from "$/schemas/releases.ts"; + +export const pageDataSchema = type.or(releaseSchema, miscSchema); + +export 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 @@ +import { type } from "arktype"; + +import { nodeSchema } from "../deps/strapi.tsx"; +import { strapiLoader } from "../deps/strapi.tsx"; + +export const releaseStrapiSchema = type({ + "version": "string", + "date": "string.date.parse", + "notes?": nodeSchema.array().or("null"), + "files": strapiLoader.resolvedFileAttributeSchema, +}); + +export const releaseSchema = releaseStrapiSchema.merge({ + type: "'release'", + title: "string", +}); + +export type Release = typeof releaseSchema.infer; -- cgit v1.3.1