| 1234567891011121314151617181920212223242526272829303132333435363738394041 |
- 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(),
- }),
- )
- }
|