diff options
Diffstat (limited to 'vhosts/blog/nuldoc-src/ndoc')
| -rw-r--r-- | vhosts/blog/nuldoc-src/ndoc/parse.ts | 48 |
1 files changed, 20 insertions, 28 deletions
diff --git a/vhosts/blog/nuldoc-src/ndoc/parse.ts b/vhosts/blog/nuldoc-src/ndoc/parse.ts index 136bc53e..857c086c 100644 --- a/vhosts/blog/nuldoc-src/ndoc/parse.ts +++ b/vhosts/blog/nuldoc-src/ndoc/parse.ts @@ -3,6 +3,23 @@ import { Config } from "../config.ts"; import { parseXmlString } from "../xml.ts"; import { createNewDocumentFromRootElement, Document } from "./document.ts"; import toHtml from "./to_html.ts"; +import { z } from "zod/mod.ts"; + +const PostMetadataSchema = z.object({ + article: z.object({ + uuid: z.string(), + title: z.string(), + description: z.string(), + tags: z.array(z.string()), + revisions: z.array(z.object({ + date: z.string(), + remark: z.string(), + isInternal: z.boolean().optional(), + })), + }), +}); + +type PostMetadata = z.infer<typeof PostMetadataSchema>; export async function parseNulDocFile( filePath: string, @@ -11,7 +28,7 @@ export async function parseNulDocFile( try { const fileContent = await Deno.readTextFile(filePath); const parts = fileContent.split(/^---$/m); - const meta = parseMetaInfo(parts[1]); + const meta = parseMetadata(parts[1]); const root = parseXmlString("<?xml ?>" + parts[2]); const doc = createNewDocumentFromRootElement(root, meta, filePath, config); return toHtml(doc); @@ -21,31 +38,6 @@ export async function parseNulDocFile( } } -function parseMetaInfo(s: string): { - article: { - uuid: string; - title: string; - description: string; - tags: string[]; - revisions: { - date: string; - remark: string; - isInternal?: boolean; - }[]; - }; -} { - const root = parseToml(s) as { - article: { - uuid: string; - title: string; - description: string; - tags: string[]; - revisions: { - date: string; - remark: string; - isInternal?: boolean; - }[]; - }; - }; - return root; +function parseMetadata(s: string): PostMetadata { + return PostMetadataSchema.parse(parseToml(s)); } |
