Files
taskgraph_ts/tasks/implementation/frontmatter/splitter.md

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
setup/project-init
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:

  1. Checks for opening --- delimiter (not ----)
  2. Finds closing \n--- delimiter
  3. Extracts YAML data string and markdown content body
  4. Returns { data: string, content: string } or null if 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 null if 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 (added splitFrontmatter function, ~65 lines including JSDoc)
  • Modified: src/frontmatter/index.ts (exported splitFrontmatter)
  • Modified: test/frontmatter.test.ts (18 comprehensive tests)
  • Tests: 18 splitFrontmatter tests + 4 existing placeholder tests, all passing (22 total)
  • TypeScript check: passing