{"version":3,"sources":["../../../src/agents/parsers/field.ts"],"names":["ParserField","Serializable","raw","write","chunk","end","createSnapshot","loadSnapshot","snapshot","Object","assign","ZodParserField","register","constructor","schema","get","parse","getPartial","JSONParserField","stream","jsonParser","errored","ref","input","base","undefined","ValueError","init","value","shallowCopy","JSONParser","emitPartialTokens","emitPartialValues","jsonrepairTransform","on","toString","onValue","key","stack","keys","map","s","concat","filter","String","length","prefix","setProp","matchPair","startChar","index","indexOf","substring","merged","match","findFirstPair","push","inputToParse","parseBrokenJson","pair","closed","isEnded","Promise","resolve","reject","onEnd","onError","cacheKey","SingletonCacheKeyFn"],"mappings":"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","file":"field.cjs","sourcesContent":["/**\n * Copyright 2025 IBM Corp.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { ZodSchema } from \"zod\";\nimport { setProp } from \"@/internals/helpers/object.js\";\nimport { ValueError } from \"@/errors.js\";\nimport { Serializable } from \"@/internals/serializable.js\";\nimport { JSONParser } from \"@streamparser/json\";\nimport { jsonrepairTransform } from \"jsonrepair/stream\";\nimport { Cache, SingletonCacheKeyFn } from \"@/cache/decoratorCache.js\";\nimport { shallowCopy } from \"@/serializer/utils.js\";\nimport { parseBrokenJson } from \"@/internals/helpers/schema.js\";\nimport { findFirstPair } from \"@/internals/helpers/string.js\";\n\nexport abstract class ParserField<T, TPartial> extends Serializable {\n  public raw = \"\";\n\n  abstract get(): T;\n  abstract getPartial(): TPartial;\n\n  write(chunk: string) {\n    this.raw += chunk;\n  }\n\n  async end() {}\n\n  createSnapshot() {\n    return { raw: this.raw };\n  }\n\n  loadSnapshot(snapshot: ReturnType<typeof this.createSnapshot>) {\n    Object.assign(this, snapshot);\n  }\n}\n\nexport class ZodParserField<T> extends ParserField<T, string> {\n  static {\n    this.register();\n  }\n\n  constructor(protected readonly schema: ZodSchema<T>) {\n    super();\n  }\n\n  get(): T {\n    return this.schema.parse(this.raw);\n  }\n\n  getPartial(): string {\n    return this.raw;\n  }\n\n  createSnapshot() {\n    return { ...super.createSnapshot(), schema: this.schema };\n  }\n}\n\nexport class JSONParserField<T> extends ParserField<T, Partial<T>> {\n  protected stream!: ReturnType<typeof jsonrepairTransform>;\n  protected jsonParser!: JSONParser;\n  protected errored = false;\n  protected ref!: { value: Partial<T> };\n\n  constructor(\n    protected readonly input: {\n      schema: ZodSchema<T>;\n      base: Partial<T>;\n      matchPair?: [string, string];\n    },\n  ) {\n    super();\n    if (input.base === undefined) {\n      throw new ValueError(`Base must be defined!`);\n    }\n    this.init();\n  }\n\n  @Cache({ cacheKey: SingletonCacheKeyFn })\n  protected init() {\n    this.ref = { value: shallowCopy(this.input.base) };\n    this.jsonParser = new JSONParser({ emitPartialTokens: false, emitPartialValues: true });\n    this.stream = jsonrepairTransform();\n    this.stream.on(\"data\", (chunk) => {\n      if (this.errored) {\n        return;\n      }\n\n      try {\n        this.jsonParser.write(chunk.toString());\n      } catch {\n        this.errored = true;\n      }\n    });\n    this.jsonParser.onValue = ({ value, key, stack }) => {\n      const keys = stack\n        .map((s) => s.key)\n        .concat(key)\n        .filter((s) => s !== undefined)\n        .map(String);\n\n      if (keys.length === 0 && value === undefined) {\n        return;\n      }\n      const prefix: keyof typeof this.ref = \"value\";\n      setProp(this.ref, [prefix, ...keys], value);\n    };\n  }\n\n  write(chunk: string) {\n    if (this.input.matchPair) {\n      if (!this.raw) {\n        const startChar = this.input.matchPair[0];\n        const index = chunk.indexOf(startChar);\n        if (index === -1) {\n          return;\n        }\n        chunk = chunk.substring(index);\n      } else {\n        const merged = this.raw.concat(chunk);\n        const match = findFirstPair(merged, this.input.matchPair);\n        if (match) {\n          if (match.end < this.raw.length) {\n            return;\n          }\n          chunk = merged.substring(this.raw.length, match.end);\n        }\n      }\n    }\n\n    super.write(chunk);\n    try {\n      this.stream.push(chunk);\n    } catch {\n      this.errored = true;\n    }\n  }\n\n  get() {\n    const inputToParse = this.errored\n      ? parseBrokenJson(this.raw, {\n          pair: this.input.matchPair,\n        })\n      : this.ref.value;\n\n    return this.input.schema.parse(inputToParse);\n  }\n\n  getPartial() {\n    return this.ref.value;\n  }\n\n  async end() {\n    if (this.stream.closed || this.jsonParser.isEnded || this.errored) {\n      return;\n    }\n\n    return new Promise<void>((resolve, reject) => {\n      this.jsonParser.onEnd = resolve;\n      this.jsonParser.onError = reject;\n\n      this.stream.push(null);\n      this.jsonParser.end();\n    });\n  }\n\n  createSnapshot() {\n    return { ...super.createSnapshot(), input: this.input, errored: this.errored };\n  }\n\n  loadSnapshot({ raw, ...snapshot }: ReturnType<typeof this.createSnapshot>) {\n    Object.assign(this, { raw: \"\", ...snapshot });\n    this.init();\n    this.write(raw);\n  }\n}\n\n// eslint-disable-next-line @typescript-eslint/no-namespace\nexport namespace ParserField {\n  export type inferValue<T> = T extends ParserField<infer L, unknown> ? L : never;\n  export type inferPartialValue<T> = T extends ParserField<any, infer L> ? L : never;\n}\n"]}