{"version":3,"sources":["../../../../src/transpiler/markdown/getMarkdownMetadata.ts"],"sourcesContent":["const parseToObject = <T = any>(input: string): T | null => {\n  // Normalize different bracket types and keys/values\n  let normalizedInput = input\n    .trim()\n    .replace(/^\\[/, '[') // Keep array brackets\n    .replace(/^\\{/, '{') // Keep object brackets\n    .replace(/\\]$/, ']') // Keep array brackets\n    .replace(/\\}$/, '}') // Keep object brackets\n    .replace(/([\\w\\d_]+)\\s*:/g, '\"$1\":') // Ensure JSON-valid keys (e.g., key: -> \"key\":)\n    .replace(/:\\s*([a-zA-Z_][\\w\\d_]*)/g, ': \"$1\"'); // Handle unquoted string values\n\n  // Fix arrays with unquoted items (e.g., [content, anotherContent])\n  normalizedInput = normalizedInput.replace(\n    /\\[([^\\[\\]]+?)\\]/g,\n    (_match, arrayContent) => {\n      const newContent = (arrayContent as string)\n        .split(',')\n        .map((item) => {\n          const trimmed = item.trim();\n          // If already quoted or is a valid number, return as is.\n          if (\n            (trimmed.startsWith('\"') && trimmed.endsWith('\"')) ||\n            !isNaN(Number(trimmed))\n          ) {\n            return trimmed;\n          }\n          return `\"${trimmed}\"`;\n        })\n        .join(', ');\n      return `[${newContent}]`;\n    }\n  );\n\n  // Parse the string into an object\n  return JSON.parse(normalizedInput) as T;\n};\n\nexport const getMarkdownMetadata = (\n  markdown: string\n): Record<string, any> | undefined => {\n  try {\n    const lines = markdown.split(/\\r?\\n/);\n\n    // Check if the very first non-empty line is the metadata start delimiter.\n    const firstNonEmptyLine = lines.find((line) => line.trim() !== '');\n\n    if (!firstNonEmptyLine || firstNonEmptyLine.trim() !== '---') {\n      return {};\n    }\n\n    const metadata: Record<string, any> = {};\n    let inMetadataBlock = false;\n\n    for (const line of lines) {\n      const trimmedLine = line.trim();\n\n      // Toggle metadata block on encountering the delimiter.\n      if (trimmedLine === '---') {\n        if (!inMetadataBlock) {\n          // Begin metadata block.\n          inMetadataBlock = true;\n          continue;\n        } else {\n          // End of metadata block; stop processing.\n          break;\n        }\n      }\n\n      // If we're inside the metadata block, parse key: value pairs.\n      if (inMetadataBlock) {\n        const match = line.match(/^([^:]+)\\s*:\\s*(.*)$/);\n        if (match) {\n          const key = match[1].trim();\n          const value = match[2].trim();\n          try {\n            metadata[key] = parseToObject(value);\n          } catch (e) {\n            metadata[key] = value;\n          }\n        }\n      }\n    }\n\n    return metadata;\n  } catch (e) {\n    return undefined;\n  }\n};\n"],"mappings":";;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAAM,gBAAgB,CAAU,UAA4B;AAE1D,MAAI,kBAAkB,MACnB,KAAK,EACL,QAAQ,OAAO,GAAG,EAClB,QAAQ,OAAO,GAAG,EAClB,QAAQ,OAAO,GAAG,EAClB,QAAQ,OAAO,GAAG,EAClB,QAAQ,mBAAmB,OAAO,EAClC,QAAQ,4BAA4B,QAAQ;AAG/C,oBAAkB,gBAAgB;AAAA,IAChC;AAAA,IACA,CAAC,QAAQ,iBAAiB;AACxB,YAAM,aAAc,aACjB,MAAM,GAAG,EACT,IAAI,CAAC,SAAS;AACb,cAAM,UAAU,KAAK,KAAK;AAE1B,YACG,QAAQ,WAAW,GAAG,KAAK,QAAQ,SAAS,GAAG,KAChD,CAAC,MAAM,OAAO,OAAO,CAAC,GACtB;AACA,iBAAO;AAAA,QACT;AACA,eAAO,IAAI,OAAO;AAAA,MACpB,CAAC,EACA,KAAK,IAAI;AACZ,aAAO,IAAI,UAAU;AAAA,IACvB;AAAA,EACF;AAGA,SAAO,KAAK,MAAM,eAAe;AACnC;AAEO,MAAM,sBAAsB,CACjC,aACoC;AACpC,MAAI;AACF,UAAM,QAAQ,SAAS,MAAM,OAAO;AAGpC,UAAM,oBAAoB,MAAM,KAAK,CAAC,SAAS,KAAK,KAAK,MAAM,EAAE;AAEjE,QAAI,CAAC,qBAAqB,kBAAkB,KAAK,MAAM,OAAO;AAC5D,aAAO,CAAC;AAAA,IACV;AAEA,UAAM,WAAgC,CAAC;AACvC,QAAI,kBAAkB;AAEtB,eAAW,QAAQ,OAAO;AACxB,YAAM,cAAc,KAAK,KAAK;AAG9B,UAAI,gBAAgB,OAAO;AACzB,YAAI,CAAC,iBAAiB;AAEpB,4BAAkB;AAClB;AAAA,QACF,OAAO;AAEL;AAAA,QACF;AAAA,MACF;AAGA,UAAI,iBAAiB;AACnB,cAAM,QAAQ,KAAK,MAAM,sBAAsB;AAC/C,YAAI,OAAO;AACT,gBAAM,MAAM,MAAM,CAAC,EAAE,KAAK;AAC1B,gBAAM,QAAQ,MAAM,CAAC,EAAE,KAAK;AAC5B,cAAI;AACF,qBAAS,GAAG,IAAI,cAAc,KAAK;AAAA,UACrC,SAAS,GAAG;AACV,qBAAS,GAAG,IAAI;AAAA,UAClB;AAAA,QACF;AAAA,MACF;AAAA,IACF;AAEA,WAAO;AAAA,EACT,SAAS,GAAG;AACV,WAAO;AAAA,EACT;AACF;","names":[]}