{"version":3,"file":"loaders-Cbyi3UiR.mjs","names":["parseYaml","parse"],"sources":["../src/loaders/errors.ts","../src/loaders/json.ts","../src/loaders/jsonc.ts","../src/loaders/markdown.ts","../src/loaders/toml.ts","../src/loaders/yaml.ts","../src/loaders/index.ts"],"sourcesContent":["export class LoaderError extends Error {\n  readonly filePath: string;\n  readonly format: string;\n  readonly line?: number;\n  readonly column?: number;\n\n  constructor(message: string, filePath: string, format: string, line?: number, column?: number) {\n    super(`${format} parse error in ${filePath}${line ? `:${line}` : \"\"}: ${message}`);\n    this.name = \"LoaderError\";\n    this.filePath = filePath;\n    this.format = format;\n    this.line = line;\n    this.column = column;\n  }\n}\n","/**\n * JSON / JSON5 / JSONC loader.\n *\n * Detects format from file extension and parses accordingly.\n */\n\nimport { readFile } from \"fs/promises\";\nimport JSON5 from \"json5\";\nimport { LoaderError } from \"./errors\";\nimport type { Loader, LoaderResult } from \"./types\";\n\nexport class JsonLoader implements Loader {\n  name = \"json\";\n  kind = \"data\" as const;\n  extensions = [\".json\", \".json5\"];\n\n  async load(filePath: string): Promise<LoaderResult> {\n    const raw = await readFile(filePath, \"utf-8\");\n    const isJson = filePath.endsWith(\".json\");\n\n    try {\n      const data = isJson ? JSON.parse(raw) : JSON5.parse(raw);\n      return { data };\n    } catch (err) {\n      const message = err instanceof Error ? err.message : String(err);\n      throw new LoaderError(message, filePath, isJson ? \"JSON\" : \"JSON5\");\n    }\n  }\n}\n","/**\n * JSONC loader — JSON with Comments.\n *\n * Strips single-line (//) and multi-line comments before parsing.\n * Delegates to JSON.parse after stripping (no JSON5 superset features).\n */\n\nimport { readFile } from \"fs/promises\";\nimport { LoaderError } from \"./errors\";\nimport type { Loader, LoaderResult } from \"./types\";\n\n/** Strip // and block comments, preserving strings. */\nfunction stripComments(raw: string): string {\n  let result = \"\";\n  let i = 0;\n  const len = raw.length;\n\n  while (i < len) {\n    // String literal — copy verbatim to preserve contents\n    if (raw[i] === '\"') {\n      let end = i + 1;\n      while (end < len && raw[end] !== '\"') {\n        if (raw[end] === \"\\\\\") end++; // skip escaped char\n        end++;\n      }\n      result += raw.slice(i, end + 1);\n      i = end + 1;\n      continue;\n    }\n\n    // Single-line comment\n    if (raw[i] === \"/\" && raw[i + 1] === \"/\") {\n      i += 2;\n      while (i < len && raw[i] !== \"\\n\") i++;\n      continue;\n    }\n\n    // Block comment\n    if (raw[i] === \"/\" && raw[i + 1] === \"*\") {\n      i += 2;\n      while (i < len && !(raw[i] === \"*\" && raw[i + 1] === \"/\")) i++;\n      if (i < len) i += 2; // skip closing */ only if found\n      continue;\n    }\n\n    result += raw[i];\n    i++;\n  }\n\n  return result;\n}\n\nexport class JsoncLoader implements Loader {\n  name = \"jsonc\";\n  kind = \"data\" as const;\n  extensions = [\".jsonc\"];\n\n  async load(filePath: string): Promise<LoaderResult> {\n    const raw = await readFile(filePath, \"utf-8\");\n    try {\n      const stripped = stripComments(raw);\n      const withoutTrailingCommas = stripped.replace(/,\\s*([}\\]])/g, \"$1\");\n      const data = JSON.parse(withoutTrailingCommas);\n      return { data };\n    } catch (err) {\n      const message = err instanceof Error ? err.message : String(err);\n      throw new LoaderError(message, filePath, \"JSONC\");\n    }\n  }\n}\n","/**\n * Markdown loader.\n *\n * Uses gray-matter to extract YAML frontmatter and body content.\n * Rendering is NOT done here — it's deferred to ContentEntry.render().\n */\n\nimport { readFile } from \"fs/promises\";\nimport matter from \"gray-matter\";\nimport { parse as parseYaml } from \"yaml\";\nimport { LoaderError } from \"./errors\";\nimport type { Loader, LoaderResult } from \"./types\";\n\nexport class MarkdownLoader implements Loader {\n  name = \"markdown\";\n  kind = \"markdown\" as const;\n  extensions = [\".md\"];\n\n  async load(filePath: string): Promise<LoaderResult> {\n    const raw = await readFile(filePath, \"utf-8\");\n    try {\n      const { data, content } = matter(raw, { engines: { yaml: parseYaml } });\n      return { data, content };\n    } catch (err) {\n      const message = err instanceof Error ? err.message : String(err);\n      throw new LoaderError(message, filePath, \"Markdown\");\n    }\n  }\n}\n","/**\n * TOML loader.\n */\n\nimport { readFile } from \"fs/promises\";\nimport { parse } from \"smol-toml\";\nimport { LoaderError } from \"./errors\";\nimport type { Loader, LoaderResult } from \"./types\";\n\nexport class TomlLoader implements Loader {\n  name = \"toml\";\n  kind = \"data\" as const;\n  extensions = [\".toml\"];\n\n  async load(filePath: string): Promise<LoaderResult> {\n    const raw = await readFile(filePath, \"utf-8\");\n    try {\n      const data = parse(raw);\n      return { data };\n    } catch (err) {\n      const message = err instanceof Error ? err.message : String(err);\n      throw new LoaderError(message, filePath, \"TOML\");\n    }\n  }\n}\n","/**\n * YAML loader.\n */\n\nimport { readFile } from \"fs/promises\";\nimport { parse } from \"yaml\";\nimport { LoaderError } from \"./errors\";\nimport type { Loader, LoaderResult } from \"./types\";\n\nexport class YamlLoader implements Loader {\n  name = \"yaml\";\n  kind = \"data\" as const;\n  extensions = [\".yaml\", \".yml\"];\n\n  async load(filePath: string): Promise<LoaderResult> {\n    const raw = await readFile(filePath, \"utf-8\");\n    try {\n      const data = parse(raw) ?? {};\n      return { data };\n    } catch (err) {\n      const message = err instanceof Error ? err.message : String(err);\n      const line =\n        err != null && typeof err === \"object\" && \"linePos\" in err\n          ? (err as any).linePos?.[0]?.line\n          : undefined;\n      throw new LoaderError(message, filePath, \"YAML\", line);\n    }\n  }\n}\n","/**\n * Loader registry — resolves loader type strings to Loader instances.\n */\n\nexport { JsonLoader } from \"./json\";\nexport { JsoncLoader } from \"./jsonc\";\nexport { LoaderError } from \"./errors\";\nexport { MarkdownLoader } from \"./markdown\";\nexport { TomlLoader } from \"./toml\";\nexport type { Loader, LoaderResult, LoaderType } from \"./types\";\nexport { YamlLoader } from \"./yaml\";\n\nimport { JsonLoader } from \"./json\";\nimport { JsoncLoader } from \"./jsonc\";\nimport { MarkdownLoader } from \"./markdown\";\nimport { TomlLoader } from \"./toml\";\nimport type { Loader, LoaderType } from \"./types\";\nimport { YamlLoader } from \"./yaml\";\n\n/** Singleton loader instances (loaders are stateless). */\nconst markdownLoader = new MarkdownLoader();\nconst jsonLoader = new JsonLoader();\nconst jsoncLoader = new JsoncLoader();\nconst yamlLoader = new YamlLoader();\nconst tomlLoader = new TomlLoader();\n\n/** Custom loader registry for user-registered loaders. */\nconst customLoaders = new Map<string, Loader>();\n\n/** Register a custom loader by name. */\nexport function registerLoader(name: string, loader: Loader): void {\n  customLoaders.set(name, loader);\n}\n\n/** Resolve a loader type string or custom Loader instance. */\nexport function resolveLoader(loaderOrType: LoaderType | Loader): Loader {\n  if (typeof loaderOrType === \"object\") return loaderOrType;\n\n  const custom = customLoaders.get(loaderOrType);\n  if (custom) return custom;\n\n  switch (loaderOrType) {\n    case \"markdown\":\n      return markdownLoader;\n    case \"json\":\n    case \"json5\":\n      return jsonLoader;\n    case \"jsonc\":\n      return jsoncLoader;\n    case \"yaml\":\n      return yamlLoader;\n    case \"toml\":\n      return tomlLoader;\n    default:\n      throw new Error(`Unknown loader type: ${loaderOrType as string}`);\n  }\n}\n\n/** Get default include glob patterns for a loader. */\nexport function defaultIncludePatterns(loader: Loader): string[] {\n  return loader.extensions.map((ext) => `**/*${ext}`);\n}\n"],"mappings":"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"}