2.4 KiB
2.4 KiB
id, name, status, depends_on, scope, risk, impact, level
| id | name | status | depends_on | scope | risk | impact | level | |
|---|---|---|---|---|---|---|---|---|
| frontmatter/splitter | Implement frontmatter delimiter splitter (~40 lines) | completed |
|
single | trivial | component | implementation |
Description
Implement the self-contained --- delimited frontmatter splitter in src/frontmatter/parse.ts. This is a ~40 line function that extracts the YAML data string and markdown content body from a markdown string. No gray-matter dependency.
Per frontmatter.md, the splitter:
- Checks for opening
---delimiter (not----) - Finds closing
\n---delimiter - Extracts YAML data string and markdown content body
- Returns
{ data: string, content: string }ornullif no valid frontmatter
Acceptance Criteria
splitFrontmatter(markdown: string): { data: string; content: string } | null- Opening
---must be at the start of the file (or after optional BOM/whitespace on first line) ----(4+ dashes) is NOT a valid delimiter — only exact---- Closing delimiter requires
\n---(newline before dashes) - Returns
nullif no valid frontmatter found - Returns
{ data: "", content: "" }if frontmatter is present but empty (e.g.,---\n---) - Content body starts after the closing
---+ newline - Handles edge cases: no closing delimiter (returns null), file with only
---\n---, file with no---at all - Unit tests: standard frontmatter, no frontmatter, empty frontmatter, multi-line content, dashes in content body (shouldn't be treated as delimiters), 4+ dashes ignored
References
- docs/architecture/frontmatter.md — splitter design, supply chain decision
Notes
Self-contained splitFrontmatter function implemented with no external dependencies. Uses regex for opening delimiter match and manual scan for closing delimiter to enforce exact 3-dash rule. Handles BOM stripping and empty frontmatter.
Summary
Implemented the splitFrontmatter function in src/frontmatter/parse.ts per architecture spec.
- Modified:
src/frontmatter/parse.ts(addedsplitFrontmatterfunction, ~65 lines including JSDoc) - Modified:
src/frontmatter/index.ts(exportedsplitFrontmatter) - Modified:
test/frontmatter.test.ts(18 comprehensive tests) - Tests: 18 splitFrontmatter tests + 4 existing placeholder tests, all passing (22 total)
- TypeScript check: passing