{"version":3,"file":"json.cjs","names":["BaseCumulativeTransformOutputParser","compare","parseJsonMarkdown"],"sources":["../../src/output_parsers/json.ts"],"sourcesContent":["import { BaseCumulativeTransformOutputParser } from \"./transform.js\";\nimport { Operation, compare } from \"../utils/json_patch.js\";\nimport { ChatGeneration, Generation } from \"../outputs.js\";\nimport { parseJsonMarkdown, parsePartialJson } from \"../utils/json.js\";\nimport type { BaseMessage } from \"../messages/index.js\";\n\n/**\n * Class for parsing the output of an LLM into a JSON object.\n */\nexport class JsonOutputParser<\n  // oxlint-disable-next-line @typescript-eslint/no-explicit-any\n  T extends Record<string, any> = Record<string, any>,\n> extends BaseCumulativeTransformOutputParser<T> {\n  static lc_name() {\n    return \"JsonOutputParser\";\n  }\n\n  lc_namespace = [\"langchain_core\", \"output_parsers\"];\n\n  lc_serializable = true;\n\n  /** @internal */\n  override _concatOutputChunks<T>(first: T, second: T): T {\n    if (this.diff) {\n      return super._concatOutputChunks(first, second);\n    }\n    return second;\n  }\n\n  protected _diff(\n    prev: unknown | undefined,\n    next: unknown\n  ): Operation[] | undefined {\n    if (!next) {\n      return undefined;\n    }\n    if (!prev) {\n      return [{ op: \"replace\", path: \"\", value: next }];\n    }\n    return compare(prev, next);\n  }\n\n  // This should actually return Partial<T>, but there's no way\n  // to specify emitted chunks as instances separate from the main output type.\n  async parsePartialResult(\n    generations: ChatGeneration[] | Generation[]\n  ): Promise<T | undefined> {\n    return parseJsonMarkdown(generations[0].text) as T | undefined;\n  }\n\n  async parse(text: string): Promise<T> {\n    return parseJsonMarkdown(text, JSON.parse) as T;\n  }\n\n  getFormatInstructions(): string {\n    return \"\";\n  }\n\n  /**\n   * Extracts text content from a message for JSON parsing.\n   * Uses the message's `.text` accessor which properly handles both\n   * string content and ContentBlock[] arrays (extracting text from text blocks).\n   * @param message The message to extract text from\n   * @returns The text content of the message\n   */\n  protected _baseMessageToString(message: BaseMessage): string {\n    return message.text;\n  }\n}\n\nexport { parsePartialJson, parseJsonMarkdown };\n"],"mappings":";;;;;;;;AASA,IAAa,mBAAb,cAGUA,kBAAAA,oCAAuC;CAC/C,OAAO,UAAU;EACf,OAAO;CACT;CAEA,eAAe,CAAC,kBAAkB,gBAAgB;CAElD,kBAAkB;;CAGlB,oBAAgC,OAAU,QAAc;EACtD,IAAI,KAAK,MACP,OAAO,MAAM,oBAAoB,OAAO,MAAM;EAEhD,OAAO;CACT;CAEA,MACE,MACA,MACyB;EACzB,IAAI,CAAC,MACH;EAEF,IAAI,CAAC,MACH,OAAO,CAAC;GAAE,IAAI;GAAW,MAAM;GAAI,OAAO;EAAK,CAAC;EAElD,OAAOC,eAAAA,QAAQ,MAAM,IAAI;CAC3B;CAIA,MAAM,mBACJ,aACwB;EACxB,OAAOC,aAAAA,kBAAkB,YAAY,EAAE,CAAC,IAAI;CAC9C;CAEA,MAAM,MAAM,MAA0B;EACpC,OAAOA,aAAAA,kBAAkB,MAAM,KAAK,KAAK;CAC3C;CAEA,wBAAgC;EAC9B,OAAO;CACT;;;;;;;;CASA,qBAA+B,SAA8B;EAC3D,OAAO,QAAQ;CACjB;AACF"}