mirror of
https://gitea.toothfairyai.com/ToothFairyAI/tf_code.git
synced 2026-04-02 15:13:46 +00:00
42 lines
1.0 KiB
TypeScript
42 lines
1.0 KiB
TypeScript
import { NamedError } from "@opencode-ai/util/error"
|
|
import matter from "gray-matter"
|
|
import { z } from "zod"
|
|
|
|
export namespace ConfigMarkdown {
|
|
export const FILE_REGEX = /(?<![\w`])@(\.?[^\s`,.]*(?:\.[^\s`,.]+)*)/g
|
|
export const SHELL_REGEX = /!`([^`]+)`/g
|
|
|
|
export function files(template: string) {
|
|
return Array.from(template.matchAll(FILE_REGEX))
|
|
}
|
|
|
|
export function shell(template: string) {
|
|
return Array.from(template.matchAll(SHELL_REGEX))
|
|
}
|
|
|
|
export async function parse(filePath: string) {
|
|
const template = await Bun.file(filePath).text()
|
|
|
|
try {
|
|
const md = matter(template)
|
|
return md
|
|
} catch (err) {
|
|
throw new FrontmatterError(
|
|
{
|
|
path: filePath,
|
|
message: `Failed to parse YAML frontmatter: ${err instanceof Error ? err.message : String(err)}`,
|
|
},
|
|
{ cause: err },
|
|
)
|
|
}
|
|
}
|
|
|
|
export const FrontmatterError = NamedError.create(
|
|
"ConfigFrontmatterError",
|
|
z.object({
|
|
path: z.string(),
|
|
message: z.string(),
|
|
}),
|
|
)
|
|
}
|