Something went wrong. Try again.
fork of prime agent with changes i want but are not upstreamable probqbly (and some fixes)
Something went wrong. Try again.
3.6 kB · 88 lines
TypeScript
1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889import { describe, expect, it } from "vitest";import { parseFrontmatter, stripFrontmatter } from "../src/utils/frontmatter.js";
describe("parseFrontmatter", () => { it("parses frontmatter behind a UTF-8 BOM", () => { const input = "\uFEFF---\nname: bom-skill\n---\nBody"; const result = parseFrontmatter(input); expect(result.frontmatter).toEqual({ name: "bom-skill" }); expect(result.body).toBe("Body"); });
it("parses keys, strips quotes, and returns body", () => { const input = "---\nname: \"skill-name\"\ndescription: 'A desc'\nfoo-bar: value\n---\n\nBody text"; const { frontmatter, body } = parseFrontmatter<Record<string, string>>(input); expect(frontmatter.name).toBe("skill-name"); expect(frontmatter.description).toBe("A desc"); expect(frontmatter["foo-bar"]).toBe("value"); expect(body).toBe("Body text"); });
it("normalizes newlines and handles CRLF", () => { const input = "---\r\nname: test\r\n---\r\nLine one\r\nLine two"; const { body } = parseFrontmatter<Record<string, string>>(input); expect(body).toBe("Line one\nLine two"); });
it("strips a UTF-8 BOM before frontmatter (Windows editors)", () => { const input = "\uFEFF---\nname: skill-name\ndescription: A desc\n---\n\nBody text"; const { frontmatter, body } = parseFrontmatter<Record<string, string>>(input); expect(frontmatter.name).toBe("skill-name"); expect(frontmatter.description).toBe("A desc"); expect(body).toBe("Body text"); });
it("strips a UTF-8 BOM with CRLF newlines", () => { const input = "\uFEFF---\r\nname: test\r\n---\r\nLine one"; const { frontmatter, body } = parseFrontmatter<Record<string, string>>(input); expect(frontmatter.name).toBe("test"); expect(body).toBe("Line one"); });
it("strips a UTF-8 BOM from content without frontmatter", () => { const input = "\uFEFFJust text"; const result = parseFrontmatter(input); expect(result.body).toBe("Just text"); });
it("throws on invalid YAML frontmatter", () => { const input = "---\nfoo: [bar\n---\nBody"; expect(() => parseFrontmatter<Record<string, string>>(input)).toThrow(/at line 1, column 10/); });
it("parses | multiline yaml syntax", () => { const input = "---\ndescription: |\n Line one\n Line two\n---\n\nBody"; const { frontmatter, body } = parseFrontmatter<Record<string, string>>(input); expect(frontmatter.description).toBe("Line one\nLine two\n"); expect(body).toBe("Body"); });
it("returns original content when frontmatter is missing or unterminated", () => { const noFrontmatter = "Just text\nsecond line"; const missingEnd = "---\nname: test\nBody without terminator"; const resultNoFrontmatter = parseFrontmatter<Record<string, string>>(noFrontmatter); const resultMissingEnd = parseFrontmatter<Record<string, string>>(missingEnd); expect(resultNoFrontmatter.body).toBe("Just text\nsecond line"); expect(resultMissingEnd.body).toBe( "---\nname: test\nBody without terminator".replace(/\r\n/g, "\n").replace(/\r/g, "\n"), ); });
it("returns empty object for empty or comment-only frontmatter", () => { const input = "---\n# just a comment\n---\nBody"; const { frontmatter } = parseFrontmatter(input); expect(frontmatter).toEqual({}); });});
describe("stripFrontmatter", () => { it("removes frontmatter and trims body", () => { const input = "---\nkey: value\n---\n\nBody\n"; expect(stripFrontmatter(input)).toBe("Body"); });
it("returns body when no frontmatter present", () => { const input = "\n No frontmatter body \n"; expect(stripFrontmatter(input)).toBe("\n No frontmatter body \n"); });});