From bf7f99302614586f5f58fefa185a59fa450d79fe Mon Sep 17 00:00:00 2001 From: Claude Date: Fri, 19 Jun 2026 01:56:20 +0000 Subject: [PATCH] feat: assemble final post text Co-Authored-By: Claude --- src/buildPost.test.ts | 14 ++++++++++++++ src/buildPost.ts | 7 +++++++ 2 files changed, 21 insertions(+) create mode 100644 src/buildPost.test.ts create mode 100644 src/buildPost.ts diff --git a/src/buildPost.test.ts b/src/buildPost.test.ts new file mode 100644 index 0000000..562d65e --- /dev/null +++ b/src/buildPost.test.ts @@ -0,0 +1,14 @@ +import { expect, test } from "vitest"; +import { buildPost } from "./buildPost"; + +test("assembles frontmatter + body with single trailing newline", () => { + const out = buildPost({ + frontmatterPairs: [{ key: "layout", value: "post" }], + body: "Hello world", + }); + expect(out).toBe("---\nlayout: post\n---\n\nHello world\n"); +}); + +test("empty frontmatter still emits a delimiter block", () => { + expect(buildPost({ frontmatterPairs: [], body: "x" })).toBe("---\n\n---\n\nx\n"); +}); diff --git a/src/buildPost.ts b/src/buildPost.ts new file mode 100644 index 0000000..dc7dd8b --- /dev/null +++ b/src/buildPost.ts @@ -0,0 +1,7 @@ +import { Pair, serializeFrontmatter } from "./frontmatter"; + +export function buildPost(o: { frontmatterPairs: Pair[]; body: string }): string { + const fm = serializeFrontmatter(o.frontmatterPairs); + const body = o.body.replace(/\s+$/, ""); + return `${fm}\n${body}\n`; +}