{"version":3,"file":"handlebars.cjs","names":["Handlebars","CustomFormatPromptTemplate"],"sources":["../../../src/experimental/prompts/handlebars.ts"],"sourcesContent":["import Handlebars from \"handlebars\";\nimport { type ParsedFStringNode } from \"@langchain/core/prompts\";\nimport type { InputValues } from \"@langchain/core/utils/types\";\nimport {\n  CustomFormatPromptTemplate,\n  CustomFormatPromptTemplateInput,\n} from \"./custom_format.js\";\n\nexport const parseHandlebars = (template: string): ParsedFStringNode[] => {\n  const parsed: ParsedFStringNode[] = [];\n  const nodes: { type: string }[] = [...Handlebars.parse(template).body];\n  while (nodes.length) {\n    const node = nodes.pop()!;\n    if (node.type === \"ContentStatement\") {\n      // @ts-expect-error - handlebars' hbs.AST.ContentStatement isn't exported\n      const text = node.value;\n      parsed.push({ type: \"literal\", text });\n    } else if (node.type === \"MustacheStatement\") {\n      // @ts-expect-error - handlebars' hbs.AST.MustacheStatement isn't exported\n      const name: string = node.path.parts[0];\n      // @ts-expect-error - handlebars' hbs.AST.MustacheStatement isn't exported\n      const { original } = node.path as { original: string };\n      if (\n        !!name &&\n        !original.startsWith(\"this.\") &&\n        !original.startsWith(\"@\")\n      ) {\n        parsed.push({ type: \"variable\", name });\n      }\n    } else if (node.type === \"PathExpression\") {\n      // @ts-expect-error - handlebars' hbs.AST.PathExpression isn't exported\n      const name: string = node.parts[0];\n      // @ts-expect-error - handlebars' hbs.AST.PathExpression isn't exported\n      const { original } = node;\n      if (\n        !!name &&\n        !original.startsWith(\"this.\") &&\n        !original.startsWith(\"@\")\n      ) {\n        parsed.push({ type: \"variable\", name });\n      }\n    } else if (node.type === \"BlockStatement\") {\n      // @ts-expect-error - handlebars' hbs.AST.BlockStatement isn't exported\n      nodes.push(...node.params, ...node.program.body);\n    }\n  }\n\n  return parsed;\n};\n\nexport const interpolateHandlebars = (\n  template: string,\n  values: InputValues\n) => {\n  const compiled = Handlebars.compile(template, { noEscape: true });\n  return compiled(values);\n};\n\nexport type HandlebarsPromptTemplateInput<RunInput extends InputValues> =\n  CustomFormatPromptTemplateInput<RunInput>;\n\nexport class HandlebarsPromptTemplate<\n  // oxlint-disable-next-line @typescript-eslint/no-explicit-any\n  RunInput extends InputValues = any,\n> extends CustomFormatPromptTemplate<RunInput> {\n  static lc_name() {\n    return \"HandlebarsPromptTemplate\";\n  }\n\n  /**\n   * Load prompt template from a template\n   */\n  static fromTemplate<\n    // oxlint-disable-next-line @typescript-eslint/no-explicit-any\n    RunInput extends InputValues = Record<string, any>,\n  >(\n    template: string,\n    params?: Omit<\n      HandlebarsPromptTemplateInput<RunInput>,\n      | \"template\"\n      | \"inputVariables\"\n      | \"customParser\"\n      | \"templateValidator\"\n      | \"renderer\"\n    >\n  ) {\n    return super.fromTemplate<RunInput>(template, {\n      ...params,\n      validateTemplate: false,\n      customParser: parseHandlebars,\n      renderer: interpolateHandlebars,\n    });\n  }\n}\n"],"mappings":";;;;;;;;;;;AAQA,MAAa,mBAAmB,aAA0C;CACxE,MAAM,SAA8B,EAAE;CACtC,MAAM,QAA4B,CAAC,GAAGA,WAAAA,QAAW,MAAM,SAAS,CAAC,KAAK;AACtE,QAAO,MAAM,QAAQ;EACnB,MAAM,OAAO,MAAM,KAAK;AACxB,MAAI,KAAK,SAAS,oBAAoB;GAEpC,MAAM,OAAO,KAAK;AAClB,UAAO,KAAK;IAAE,MAAM;IAAW;IAAM,CAAC;aAC7B,KAAK,SAAS,qBAAqB;GAE5C,MAAM,OAAe,KAAK,KAAK,MAAM;GAErC,MAAM,EAAE,aAAa,KAAK;AAC1B,OACE,CAAC,CAAC,QACF,CAAC,SAAS,WAAW,QAAQ,IAC7B,CAAC,SAAS,WAAW,IAAI,CAEzB,QAAO,KAAK;IAAE,MAAM;IAAY;IAAM,CAAC;aAEhC,KAAK,SAAS,kBAAkB;GAEzC,MAAM,OAAe,KAAK,MAAM;GAEhC,MAAM,EAAE,aAAa;AACrB,OACE,CAAC,CAAC,QACF,CAAC,SAAS,WAAW,QAAQ,IAC7B,CAAC,SAAS,WAAW,IAAI,CAEzB,QAAO,KAAK;IAAE,MAAM;IAAY;IAAM,CAAC;aAEhC,KAAK,SAAS,iBAEvB,OAAM,KAAK,GAAG,KAAK,QAAQ,GAAG,KAAK,QAAQ,KAAK;;AAIpD,QAAO;;AAGT,MAAa,yBACX,UACA,WACG;AAEH,QADiBA,WAAAA,QAAW,QAAQ,UAAU,EAAE,UAAU,MAAM,CAAC,CACjD,OAAO;;AAMzB,IAAa,2BAAb,cAGUC,2CAAAA,2BAAqC;CAC7C,OAAO,UAAU;AACf,SAAO;;;;;CAMT,OAAO,aAIL,UACA,QAQA;AACA,SAAO,MAAM,aAAuB,UAAU;GAC5C,GAAG;GACH,kBAAkB;GAClB,cAAc;GACd,UAAU;GACX,CAAC"}