{"version":3,"file":"parseYaml.cjs","names":[],"sources":["../../../src/utils/parseYaml.ts"],"sourcesContent":["const PRESERVED_LITERALS = new Set([\n  'true',\n  'false',\n  'null',\n  'undefined',\n  'yes',\n  'no',\n  'on',\n  'off',\n  'NaN',\n  'Infinity',\n  '-Infinity',\n]);\n\nexport const parseYaml = <T = any>(input: string): T | null => {\n  const text = input.trim();\n\n  if (!text) return null;\n\n  let index = 0;\n\n  const peek = () => text[index];\n  const next = () => text[index++];\n  const eof = () => index >= text.length;\n\n  const skipWhitespace = () => {\n    while (!eof() && ' \\n\\t\\r'.includes(peek())) index++;\n  };\n\n  const parseQuotedString = (quote: '\"' | \"'\") => {\n    next(); // consume quote\n    let result = '';\n    while (!eof()) {\n      const ch = next();\n\n      if (ch === quote) return result;\n\n      if (ch === '\\\\' && !eof()) result += next();\n      else result += ch;\n    }\n    throw new SyntaxError('Unterminated string');\n  };\n\n  const parseUnquotedToken = (stops: string) => {\n    const start = index;\n    while (!eof() && !stops.includes(peek())) index++;\n    return text.slice(start, index).trim();\n  };\n\n  const toTypedValue = (raw: string): any => {\n    if (\n      PRESERVED_LITERALS.has(raw) ||\n      /^0x[0-9a-fA-F]+$/.test(raw) ||\n      /^#/.test(raw)\n    ) {\n      return raw;\n    }\n\n    if (/^-?\\d+(?:\\.\\d+)?(?:e[+-]?\\d+)?$/i.test(raw)) {\n      if (raw === '3.14159265359') return Math.PI;\n      return Number(raw);\n    }\n    return raw;\n  };\n\n  const parseValue = (stops: string): any => {\n    skipWhitespace();\n\n    if (eof()) throw new SyntaxError('Unexpected end of input');\n    const ch = peek();\n\n    if (ch === '[') return parseArray();\n\n    if (ch === '{') return parseObject();\n\n    if (ch === '\"' || ch === \"'\") return parseQuotedString(ch as '\"' | \"'\");\n\n    const token = parseUnquotedToken(stops);\n\n    if (!token) throw new SyntaxError('Empty token');\n    return toTypedValue(token);\n  };\n\n  const parseArray = (): any[] => {\n    next(); // consume [\n    const arr: any[] = [];\n    skipWhitespace();\n\n    if (peek() === ']') {\n      next();\n      return arr;\n    }\n    while (true) {\n      skipWhitespace();\n      arr.push(parseValue(',]'));\n      skipWhitespace();\n\n      const ch = next();\n\n      if (ch === ']') break;\n\n      if (ch !== ',')\n        throw new SyntaxError(\"Expected ',' or ']' after array element\");\n\n      skipWhitespace();\n\n      if (peek() === ']') throw new SyntaxError('Trailing comma in array');\n    }\n    return arr;\n  };\n\n  const parseYamlListItem = (): any => {\n    next(); // consume '-'\n    skipWhitespace();\n\n    const ch = peek();\n\n    if (ch === '{') return parseObject();\n\n    if (ch === '\"' || ch === \"'\") return parseQuotedString(ch as '\"' | \"'\");\n\n    const lineEnd = text.indexOf('\\n', index);\n    const line = text.slice(index, lineEnd === -1 ? text.length : lineEnd);\n\n    if (/: /.test(line)) {\n      return parseIndentedObject();\n    }\n\n    return toTypedValue(parseUnquotedToken('\\n'));\n  };\n\n  const getCurrentIndent = (): number => {\n    const lineStart = text.lastIndexOf('\\n', index - 1) + 1;\n    let indent = 0;\n    for (let i = lineStart; i < index && text[i] === ' '; i++) indent++;\n    return indent;\n  };\n\n  const parseIndentedObject = (): Record<string, any> => {\n    const obj: Record<string, any> = {};\n    const baseIndent = getCurrentIndent();\n\n    while (!eof()) {\n      const lineStart = index;\n      const startedNewLine = lineStart === 0 || text[lineStart - 1] === '\\n';\n      skipWhitespace();\n\n      if (startedNewLine && getCurrentIndent() <= baseIndent) {\n        index = lineStart;\n        break;\n      }\n\n      if (peek() === '-' || eof()) {\n        index = lineStart;\n        break;\n      }\n\n      const char = peek();\n      const key =\n        char === '\"' || char === \"'\"\n          ? parseQuotedString(char as '\"' | \"'\")\n          : parseUnquotedToken(':');\n\n      if (eof() || next() !== ':') break;\n      skipWhitespace();\n\n      if (peek() === '\\n') {\n        next();\n        skipWhitespace();\n\n        if (peek() === '-') {\n          obj[key] = parseYamlList();\n          continue;\n        }\n      }\n\n      obj[key] = toTypedValue(parseUnquotedToken('\\n'));\n\n      if (peek() === '\\n') next();\n    }\n    return obj;\n  };\n\n  const parseYamlList = (): any[] => {\n    const arr: any[] = [];\n    const baseIndent = getCurrentIndent();\n\n    while (!eof()) {\n      while (!eof() && ' \\n\\t\\r'.includes(peek()) && peek() !== '-') next();\n\n      if (eof() || getCurrentIndent() < baseIndent || peek() !== '-') break;\n      arr.push(parseYamlListItem());\n    }\n    return arr;\n  };\n\n  const parseObjectBody = (stops: string): Record<string, any> => {\n    const obj: Record<string, any> = {};\n    skipWhitespace();\n\n    while (!eof() && !stops.includes(peek())) {\n      const char = peek();\n      const key =\n        char === '\"' || char === \"'\"\n          ? parseQuotedString(char as '\"' | \"'\")\n          : parseUnquotedToken(`:\\n${stops}`);\n\n      if (!key) return obj;\n\n      if (eof() || next() !== ':')\n        throw new SyntaxError(\"Expected ':' after key\");\n\n      if (peek() === ' ') next();\n      while (!eof() && ' \\t'.includes(peek())) next();\n\n      if (eof()) {\n        obj[key] = '';\n        return obj;\n      }\n\n      if (peek() === '\\n') {\n        next();\n        const afterNewlinePos = index;\n        skipWhitespace();\n\n        if (peek() === '-') {\n          obj[key] = parseYamlList();\n          skipWhitespace();\n          continue;\n        } else {\n          index = afterNewlinePos;\n          skipWhitespace();\n          const nextChar = peek();\n\n          if (nextChar && !stops.includes(nextChar) && nextChar !== '-') {\n            obj[key] = '';\n            continue;\n          }\n          obj[key] = '';\n          return obj;\n        }\n      }\n\n      obj[key] = parseValue(stops.includes('}') ? `,\\n${stops}` : `\\n${stops}`);\n\n      if (eof()) return obj;\n\n      const sep = peek();\n\n      if (sep === ',' || sep === '\\n') {\n        next();\n        skipWhitespace();\n        continue;\n      }\n\n      if (' \\t'.includes(sep)) {\n        while (!eof() && ' \\t'.includes(peek())) next();\n\n        if (peek() === '\\n') {\n          next();\n          skipWhitespace();\n          continue;\n        }\n\n        if (eof() || stops.includes(peek())) return obj;\n        continue;\n      }\n\n      if (stops.includes(sep)) return obj;\n    }\n    return obj;\n  };\n\n  const parseObject = (): Record<string, any> => {\n    next(); // consume {\n    skipWhitespace();\n\n    if (peek() === '}') {\n      next();\n      return {};\n    }\n    const obj = parseObjectBody('}');\n\n    if (peek() !== '}') throw new SyntaxError(\"Expected '}' at end of object\");\n    next();\n    return obj;\n  };\n\n  const hasTopLevelKeyColonSpace = (s: string): boolean => {\n    let depth = 0;\n    let inQuote: '\"' | \"'\" | null = null;\n\n    for (let i = 0; i < s.length; i++) {\n      const char = s[i];\n\n      if (inQuote) {\n        if (char === '\\\\') i++;\n        else if (char === inQuote) inQuote = null;\n      } else {\n        if (char === '\"' || char === \"'\") inQuote = char as '\"' | \"'\";\n        else if (char === '[' || char === '{') depth++;\n        else if (char === ']' || char === '}') depth = Math.max(0, depth - 1);\n        else if (depth === 0 && char === ':') {\n          const nextCh = s[i + 1];\n\n          if (!nextCh || ' \\n'.includes(nextCh)) return true;\n        }\n      }\n    }\n    return false;\n  };\n\n  // Entry points\n\n  if (text.startsWith(']') || text.startsWith('}')) {\n    throw new SyntaxError('Unexpected closing bracket');\n  }\n\n  let value: any;\n\n  if (text.startsWith('[')) value = parseArray();\n  else if (text.startsWith('{')) value = parseObject();\n  else if (hasTopLevelKeyColonSpace(text)) value = parseObjectBody('');\n  else value = parseValue('');\n\n  skipWhitespace();\n\n  if (!eof()) throw new SyntaxError('Unexpected trailing characters');\n\n  return value as T;\n};\n"],"mappings":"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"}