diff options
| author | nsfisis <nsfisis@gmail.com> | 2025-04-09 20:27:54 +0900 |
|---|---|---|
| committer | nsfisis <nsfisis@gmail.com> | 2025-04-09 22:24:37 +0900 |
| commit | dbc3e0dfd893435f31cca39873f7ba9bf13b93a6 (patch) | |
| tree | 2cee4227ec6a995a9ddc99894dce604523833dc7 /vhosts/blog/nuldoc-src/djot/document.ts | |
| parent | bba1212ab46ed85c2ed3b646f2362bdbb1f45b63 (diff) | |
| download | nsfisis.dev-dbc3e0dfd893435f31cca39873f7ba9bf13b93a6.tar.gz nsfisis.dev-dbc3e0dfd893435f31cca39873f7ba9bf13b93a6.tar.zst nsfisis.dev-dbc3e0dfd893435f31cca39873f7ba9bf13b93a6.zip | |
feat(blog/nuldoc): change format of nuldoc builder from .ndoc to .dj
Diffstat (limited to 'vhosts/blog/nuldoc-src/djot/document.ts')
| -rw-r--r-- | vhosts/blog/nuldoc-src/djot/document.ts | 60 |
1 files changed, 60 insertions, 0 deletions
diff --git a/vhosts/blog/nuldoc-src/djot/document.ts b/vhosts/blog/nuldoc-src/djot/document.ts new file mode 100644 index 00000000..be9c08d5 --- /dev/null +++ b/vhosts/blog/nuldoc-src/djot/document.ts @@ -0,0 +1,60 @@ +import { Doc as DjotDoc } from "@djot/djot"; +import { join } from "@std/path"; +import { z } from "zod/mod.ts"; +import { Config } from "../config.ts"; +import { Element } from "../dom.ts"; +import { Revision, stringToDate } from "../revision.ts"; +import { djot2ndoc } from "./djot2ndoc.ts"; + +export 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(), + })), + }), +}); + +export type PostMetadata = z.infer<typeof PostMetadataSchema>; + +export type Document = { + root: Element; + sourceFilePath: string; + uuid: string; + link: string; + title: string; + description: string; // TODO: should it be markup text? + tags: string[]; + revisions: Revision[]; +}; + +export function createNewDocumentFromDjotDocument( + root: DjotDoc, + meta: PostMetadata, + sourceFilePath: string, + config: Config, +): Document { + const cwd = Deno.cwd(); + const contentDir = join(cwd, config.locations.contentDir); + const link = sourceFilePath.replace(contentDir, "").replace(".xml", "/"); + return { + root: djot2ndoc(root), + sourceFilePath, + uuid: meta.article.uuid, + link: link, + title: meta.article.title, + description: meta.article.description, + tags: meta.article.tags, + revisions: meta.article.revisions.map((r, i) => ({ + number: i, + date: stringToDate(r.date), + remark: r.remark, + isInternal: !!r.isInternal, + })), + }; +} |
