Download packages/coding-agent/src/utils/frontmatter.ts from SaylorTwift/pi: direct link, hf CLI and curl.
- Browser
- Download file 1.2 kB
-
https://huggingface.co/SaylorTwift/pi/resolve/main/packages/coding-agent/src/utils/frontmatter.ts
- Command line
-
hf download hf://SaylorTwift/pi/packages/coding-agent/src/utils/frontmatter.ts
-
curl -L -o frontmatter.ts https://huggingface.co/SaylorTwift/pi/resolve/main/packages/coding-agent/src/utils/frontmatter.ts
1.2 kB
| import { parse } from "yaml"; | |
| import { stripBom } from "./text.ts"; | |
| type ParsedFrontmatter<T extends Record<string, unknown>> = { | |
| frontmatter: T; | |
| body: string; | |
| }; | |
| const normalizeNewlines = (value: string): string => value.replace(/\r\n/g, "\n").replace(/\r/g, "\n"); | |
| const extractFrontmatter = (content: string): { yamlString: string | null; body: string } => { | |
| const normalized = normalizeNewlines(stripBom(content)); | |
| if (!normalized.startsWith("---")) { | |
| return { yamlString: null, body: normalized }; | |
| } | |
| const endIndex = normalized.indexOf("\n---", 3); | |
| if (endIndex === -1) { | |
| return { yamlString: null, body: normalized }; | |
| } | |
| return { | |
| yamlString: normalized.slice(4, endIndex), | |
| body: normalized.slice(endIndex + 4).trim(), | |
| }; | |
| }; | |
| export const parseFrontmatter = <T extends Record<string, unknown> = Record<string, unknown>>( | |
| content: string, | |
| ): ParsedFrontmatter<T> => { | |
| const { yamlString, body } = extractFrontmatter(content); | |
| if (!yamlString) { | |
| return { frontmatter: {} as T, body }; | |
| } | |
| const parsed = parse(yamlString); | |
| return { frontmatter: (parsed ?? {}) as T, body }; | |
| }; | |
| export const stripFrontmatter = (content: string): string => parseFrontmatter(content).body; | |