{"version":3,"sources":["../../src/parsers/field.ts"],"names":["ParserField","Serializable","raw","write","chunk","end","createSnapshot","loadSnapshot","snapshot","Object","assign","ZodParserField","register","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 © BeeAI a Series of LF Projects, LLC\n * SPDX-License-Identifier: Apache-2.0\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"]}