{"version":3,"file":"utils.cjs","names":["Runnable","AsyncLocalStorageProviderSingleton","ensureLangGraphConfig"],"sources":["../src/utils.ts"],"sourcesContent":["import { CallbackManagerForChainRun } from \"@langchain/core/callbacks/manager\";\nimport {\n  mergeConfigs,\n  patchConfig,\n  Runnable,\n  RunnableConfig,\n} from \"@langchain/core/runnables\";\nimport { AsyncLocalStorageProviderSingleton } from \"@langchain/core/singletons\";\nimport { ensureLangGraphConfig } from \"./pregel/utils/config.js\";\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nexport interface RunnableCallableArgs extends Partial<any> {\n  name?: string;\n  // eslint-disable-next-line @typescript-eslint/no-explicit-any\n  func: (...args: any[]) => any;\n  tags?: string[];\n  trace?: boolean;\n  recurse?: boolean;\n}\n\nexport class RunnableCallable<I = unknown, O = unknown> extends Runnable<I, O> {\n  lc_namespace: string[] = [\"langgraph\"];\n\n  // eslint-disable-next-line @typescript-eslint/no-explicit-any\n  func: (...args: any[]) => any;\n\n  tags?: string[];\n\n  config?: RunnableConfig;\n\n  trace: boolean = true;\n\n  recurse: boolean = true;\n\n  constructor(fields: RunnableCallableArgs) {\n    super();\n    this.name = fields.name ?? fields.func.name;\n    this.func = fields.func;\n    this.config = fields.tags ? { tags: fields.tags } : undefined;\n    this.trace = fields.trace ?? this.trace;\n    this.recurse = fields.recurse ?? this.recurse;\n  }\n\n  protected async _tracedInvoke(\n    input: I,\n    config?: Partial<RunnableConfig>,\n    runManager?: CallbackManagerForChainRun\n  ) {\n    return new Promise<O>((resolve, reject) => {\n      const childConfig = patchConfig(config, {\n        callbacks: runManager?.getChild(),\n      });\n      void AsyncLocalStorageProviderSingleton.runWithConfig(\n        childConfig,\n        async () => {\n          try {\n            const output = await this.func(input, childConfig);\n            resolve(output);\n          } catch (e) {\n            reject(e);\n          }\n        }\n      );\n    });\n  }\n\n  async invoke(\n    // eslint-disable-next-line @typescript-eslint/no-explicit-any\n    input: I,\n    options?: Partial<RunnableConfig> | undefined\n    // eslint-disable-next-line @typescript-eslint/no-explicit-any\n  ): Promise<O> {\n    // eslint-disable-next-line @typescript-eslint/no-explicit-any\n    let returnValue: any;\n    const config = ensureLangGraphConfig(options);\n    const mergedConfig = mergeConfigs(this.config, config);\n\n    if (this.trace) {\n      returnValue = await this._callWithConfig(\n        this._tracedInvoke,\n        input,\n        mergedConfig\n      );\n    } else {\n      returnValue = await AsyncLocalStorageProviderSingleton.runWithConfig(\n        mergedConfig,\n        async () => this.func(input, mergedConfig)\n      );\n    }\n\n    if (Runnable.isRunnable(returnValue) && this.recurse) {\n      return await AsyncLocalStorageProviderSingleton.runWithConfig(\n        mergedConfig,\n        async () => returnValue.invoke(input, mergedConfig)\n      );\n    }\n\n    return returnValue;\n  }\n}\n\nexport function prefixGenerator<T, Prefix extends string>(\n  generator: Generator<T>,\n  prefix: Prefix\n): Generator<[Prefix, T]>;\n\nexport function prefixGenerator<T>(\n  generator: Generator<T>,\n  prefix?: undefined\n): Generator<T>;\n\nexport function prefixGenerator<\n  T,\n  Prefix extends string | undefined = undefined,\n>(\n  generator: Generator<T>,\n  prefix?: Prefix | undefined\n): Generator<Prefix extends string ? [Prefix, T] : T>;\nexport function* prefixGenerator<\n  T,\n  Prefix extends string | undefined = undefined,\n>(\n  generator: Generator<T>,\n  prefix?: Prefix | undefined\n): Generator<Prefix extends string ? [Prefix, T] : T> {\n  if (prefix === undefined) {\n    yield* generator as Generator<Prefix extends string ? [Prefix, T] : T>;\n  } else {\n    for (const value of generator) {\n      yield [prefix, value] as Prefix extends string ? [Prefix, T] : T;\n    }\n  }\n}\n\n// https://github.com/tc39/proposal-array-from-async\nexport async function gatherIterator<T>(\n  i:\n    | AsyncIterable<T>\n    | Promise<AsyncIterable<T>>\n    | Iterable<T>\n    | Promise<Iterable<T>>\n): Promise<Array<T>> {\n  const out: T[] = [];\n  for await (const item of await i) {\n    out.push(item);\n  }\n  return out;\n}\n\nexport function gatherIteratorSync<T>(i: Iterable<T>): Array<T> {\n  const out: T[] = [];\n  for (const item of i) {\n    out.push(item);\n  }\n  return out;\n}\n\nexport function patchConfigurable(\n  config: RunnableConfig | undefined,\n  // eslint-disable-next-line @typescript-eslint/no-explicit-any\n  patch: Record<string, any>\n): RunnableConfig {\n  if (!config) {\n    return {\n      configurable: patch,\n    };\n  } else if (!(\"configurable\" in config)) {\n    return {\n      ...config,\n      configurable: patch,\n    };\n  } else {\n    return {\n      ...config,\n      configurable: {\n        ...config.configurable,\n        ...patch,\n      },\n    };\n  }\n}\n\nexport function isAsyncGeneratorFunction(\n  val: unknown\n): val is AsyncGeneratorFunction {\n  return (\n    val != null &&\n    typeof val === \"function\" &&\n    // eslint-disable-next-line no-instanceof/no-instanceof\n    val instanceof Object.getPrototypeOf(async function* () {}).constructor\n  );\n}\n\nexport function isGeneratorFunction(val: unknown): val is GeneratorFunction {\n  return (\n    val != null &&\n    typeof val === \"function\" &&\n    // eslint-disable-next-line no-instanceof/no-instanceof\n    val instanceof Object.getPrototypeOf(function* () {}).constructor\n  );\n}\n"],"mappings":";;;;AAoBA,IAAa,mBAAb,cAAgEA,0BAAAA,SAAe;CAC7E,eAAyB,CAAC,YAAY;CAGtC;CAEA;CAEA;CAEA,QAAiB;CAEjB,UAAmB;CAEnB,YAAY,QAA8B;AACxC,SAAO;AACP,OAAK,OAAO,OAAO,QAAQ,OAAO,KAAK;AACvC,OAAK,OAAO,OAAO;AACnB,OAAK,SAAS,OAAO,OAAO,EAAE,MAAM,OAAO,MAAM,GAAG,KAAA;AACpD,OAAK,QAAQ,OAAO,SAAS,KAAK;AAClC,OAAK,UAAU,OAAO,WAAW,KAAK;;CAGxC,MAAgB,cACd,OACA,QACA,YACA;AACA,SAAO,IAAI,SAAY,SAAS,WAAW;GACzC,MAAM,eAAA,GAAA,0BAAA,aAA0B,QAAQ,EACtC,WAAW,YAAY,UAAU,EAClC,CAAC;AACGC,8BAAAA,mCAAmC,cACtC,aACA,YAAY;AACV,QAAI;AAEF,aADe,MAAM,KAAK,KAAK,OAAO,YAAY,CACnC;aACR,GAAG;AACV,YAAO,EAAE;;KAGd;IACD;;CAGJ,MAAM,OAEJ,OACA,SAEY;EAEZ,IAAI;EACJ,MAAM,SAASC,eAAAA,sBAAsB,QAAQ;EAC7C,MAAM,gBAAA,GAAA,0BAAA,cAA4B,KAAK,QAAQ,OAAO;AAEtD,MAAI,KAAK,MACP,eAAc,MAAM,KAAK,gBACvB,KAAK,eACL,OACA,aACD;MAED,eAAc,MAAMD,2BAAAA,mCAAmC,cACrD,cACA,YAAY,KAAK,KAAK,OAAO,aAAa,CAC3C;AAGH,MAAID,0BAAAA,SAAS,WAAW,YAAY,IAAI,KAAK,QAC3C,QAAO,MAAMC,2BAAAA,mCAAmC,cAC9C,cACA,YAAY,YAAY,OAAO,OAAO,aAAa,CACpD;AAGH,SAAO;;;AAqBX,UAAiB,gBAIf,WACA,QACoD;AACpD,KAAI,WAAW,KAAA,EACb,QAAO;KAEP,MAAK,MAAM,SAAS,UAClB,OAAM,CAAC,QAAQ,MAAM;;AAM3B,eAAsB,eACpB,GAKmB;CACnB,MAAM,MAAW,EAAE;AACnB,YAAW,MAAM,QAAQ,MAAM,EAC7B,KAAI,KAAK,KAAK;AAEhB,QAAO;;AAGT,SAAgB,mBAAsB,GAA0B;CAC9D,MAAM,MAAW,EAAE;AACnB,MAAK,MAAM,QAAQ,EACjB,KAAI,KAAK,KAAK;AAEhB,QAAO;;AAGT,SAAgB,kBACd,QAEA,OACgB;AAChB,KAAI,CAAC,OACH,QAAO,EACL,cAAc,OACf;UACQ,EAAE,kBAAkB,QAC7B,QAAO;EACL,GAAG;EACH,cAAc;EACf;KAED,QAAO;EACL,GAAG;EACH,cAAc;GACZ,GAAG,OAAO;GACV,GAAG;GACJ;EACF;;AAIL,SAAgB,yBACd,KAC+B;AAC/B,QACE,OAAO,QACP,OAAO,QAAQ,cAEf,eAAe,OAAO,eAAe,mBAAmB,GAAG,CAAC;;AAIhE,SAAgB,oBAAoB,KAAwC;AAC1E,QACE,OAAO,QACP,OAAO,QAAQ,cAEf,eAAe,OAAO,eAAe,aAAa,GAAG,CAAC"}