@langchain/core 1.2.9 → 1.2.10

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (167) hide show
  1. package/CHANGELOG.md +6 -0
  2. package/dist/_virtual/_rolldown/runtime.cjs +1 -1
  3. package/dist/callbacks/dispatch/index.cjs +2 -1
  4. package/dist/callbacks/dispatch/index.cjs.map +1 -1
  5. package/dist/callbacks/dispatch/index.js +2 -1
  6. package/dist/callbacks/dispatch/index.js.map +1 -1
  7. package/dist/indexing/base.cjs +10 -6
  8. package/dist/indexing/base.cjs.map +1 -1
  9. package/dist/indexing/base.js +10 -6
  10. package/dist/indexing/base.js.map +1 -1
  11. package/dist/language_models/base.cjs +1 -1
  12. package/dist/language_models/base.cjs.map +1 -1
  13. package/dist/language_models/base.js +1 -1
  14. package/dist/language_models/base.js.map +1 -1
  15. package/dist/language_models/chat_models.cjs +10 -5
  16. package/dist/language_models/chat_models.cjs.map +1 -1
  17. package/dist/language_models/chat_models.js +10 -5
  18. package/dist/language_models/chat_models.js.map +1 -1
  19. package/dist/language_models/stream.cjs +0 -2
  20. package/dist/language_models/stream.cjs.map +1 -1
  21. package/dist/language_models/stream.js +0 -2
  22. package/dist/language_models/stream.js.map +1 -1
  23. package/dist/load/index.cjs +7 -5
  24. package/dist/load/index.cjs.map +1 -1
  25. package/dist/load/index.js +7 -5
  26. package/dist/load/index.js.map +1 -1
  27. package/dist/load/serializable.cjs +2 -1
  28. package/dist/load/serializable.cjs.map +1 -1
  29. package/dist/load/serializable.js +2 -1
  30. package/dist/load/serializable.js.map +1 -1
  31. package/dist/load/validation.cjs +4 -3
  32. package/dist/load/validation.cjs.map +1 -1
  33. package/dist/load/validation.js +4 -3
  34. package/dist/load/validation.js.map +1 -1
  35. package/dist/messages/base.cjs +13 -18
  36. package/dist/messages/base.cjs.map +1 -1
  37. package/dist/messages/base.d.cts.map +1 -1
  38. package/dist/messages/base.d.ts.map +1 -1
  39. package/dist/messages/base.js +13 -18
  40. package/dist/messages/base.js.map +1 -1
  41. package/dist/messages/block_translators/anthropic.cjs.map +1 -1
  42. package/dist/messages/block_translators/anthropic.js.map +1 -1
  43. package/dist/messages/block_translators/google.cjs +10 -9
  44. package/dist/messages/block_translators/google.cjs.map +1 -1
  45. package/dist/messages/block_translators/google.js +10 -9
  46. package/dist/messages/block_translators/google.js.map +1 -1
  47. package/dist/messages/block_translators/google_vertexai.cjs +14 -12
  48. package/dist/messages/block_translators/google_vertexai.cjs.map +1 -1
  49. package/dist/messages/block_translators/google_vertexai.js +14 -12
  50. package/dist/messages/block_translators/google_vertexai.js.map +1 -1
  51. package/dist/messages/message.cjs.map +1 -1
  52. package/dist/messages/message.d.cts.map +1 -1
  53. package/dist/messages/message.d.ts.map +1 -1
  54. package/dist/messages/message.js.map +1 -1
  55. package/dist/messages/transformers.cjs +12 -8
  56. package/dist/messages/transformers.cjs.map +1 -1
  57. package/dist/messages/transformers.js +12 -8
  58. package/dist/messages/transformers.js.map +1 -1
  59. package/dist/output_parsers/transform.cjs.map +1 -1
  60. package/dist/prompts/chat.cjs +2 -1
  61. package/dist/prompts/chat.cjs.map +1 -1
  62. package/dist/prompts/chat.js +2 -1
  63. package/dist/prompts/chat.js.map +1 -1
  64. package/dist/prompts/few_shot.cjs +6 -4
  65. package/dist/prompts/few_shot.cjs.map +1 -1
  66. package/dist/prompts/few_shot.js +6 -4
  67. package/dist/prompts/few_shot.js.map +1 -1
  68. package/dist/prompts/image.cjs +2 -1
  69. package/dist/prompts/image.cjs.map +1 -1
  70. package/dist/prompts/image.js +2 -1
  71. package/dist/prompts/image.js.map +1 -1
  72. package/dist/prompts/prompt.cjs.map +1 -1
  73. package/dist/prompts/prompt.d.cts.map +1 -1
  74. package/dist/prompts/prompt.d.ts.map +1 -1
  75. package/dist/prompts/prompt.js.map +1 -1
  76. package/dist/prompts/string.cjs +2 -1
  77. package/dist/prompts/string.cjs.map +1 -1
  78. package/dist/prompts/string.js +2 -1
  79. package/dist/prompts/string.js.map +1 -1
  80. package/dist/prompts/template.cjs.map +1 -1
  81. package/dist/prompts/template.js.map +1 -1
  82. package/dist/runnables/base.cjs +60 -40
  83. package/dist/runnables/base.cjs.map +1 -1
  84. package/dist/runnables/base.js +60 -40
  85. package/dist/runnables/base.js.map +1 -1
  86. package/dist/runnables/branch.cjs +16 -12
  87. package/dist/runnables/branch.cjs.map +1 -1
  88. package/dist/runnables/branch.js +16 -12
  89. package/dist/runnables/branch.js.map +1 -1
  90. package/dist/runnables/config.cjs +28 -23
  91. package/dist/runnables/config.cjs.map +1 -1
  92. package/dist/runnables/config.js +28 -23
  93. package/dist/runnables/config.js.map +1 -1
  94. package/dist/runnables/graph.cjs +2 -1
  95. package/dist/runnables/graph.cjs.map +1 -1
  96. package/dist/runnables/graph.js +2 -1
  97. package/dist/runnables/graph.js.map +1 -1
  98. package/dist/runnables/passthrough.cjs +8 -6
  99. package/dist/runnables/passthrough.cjs.map +1 -1
  100. package/dist/runnables/passthrough.js +8 -6
  101. package/dist/runnables/passthrough.js.map +1 -1
  102. package/dist/singletons/async_local_storage/context.cjs.map +1 -1
  103. package/dist/singletons/tracer.cjs +4 -1
  104. package/dist/singletons/tracer.cjs.map +1 -1
  105. package/dist/singletons/tracer.js +4 -1
  106. package/dist/singletons/tracer.js.map +1 -1
  107. package/dist/tools/index.cjs +22 -20
  108. package/dist/tools/index.cjs.map +1 -1
  109. package/dist/tools/index.js +22 -20
  110. package/dist/tools/index.js.map +1 -1
  111. package/dist/tracers/base.cjs +11 -10
  112. package/dist/tracers/base.cjs.map +1 -1
  113. package/dist/tracers/base.js +11 -10
  114. package/dist/tracers/base.js.map +1 -1
  115. package/dist/tracers/log_stream.cjs +7 -6
  116. package/dist/tracers/log_stream.cjs.map +1 -1
  117. package/dist/tracers/log_stream.js +7 -6
  118. package/dist/tracers/log_stream.js.map +1 -1
  119. package/dist/tracers/tracer_langchain.cjs.map +1 -1
  120. package/dist/utils/env.cjs.map +1 -1
  121. package/dist/utils/env.d.cts.map +1 -1
  122. package/dist/utils/env.d.ts.map +1 -1
  123. package/dist/utils/env.js.map +1 -1
  124. package/dist/utils/event_source_parse.cjs +1 -3
  125. package/dist/utils/event_source_parse.cjs.map +1 -1
  126. package/dist/utils/event_source_parse.js +1 -3
  127. package/dist/utils/event_source_parse.js.map +1 -1
  128. package/dist/utils/fast-json-patch/src/core.cjs +4 -2
  129. package/dist/utils/fast-json-patch/src/core.cjs.map +1 -1
  130. package/dist/utils/fast-json-patch/src/core.js +4 -2
  131. package/dist/utils/fast-json-patch/src/core.js.map +1 -1
  132. package/dist/utils/fast-json-patch/src/helpers.cjs.map +1 -1
  133. package/dist/utils/fast-json-patch/src/helpers.js.map +1 -1
  134. package/dist/utils/js-sha256/hash.cjs.map +1 -1
  135. package/dist/utils/js-sha256/hash.js.map +1 -1
  136. package/dist/utils/json_schema.cjs +4 -2
  137. package/dist/utils/json_schema.cjs.map +1 -1
  138. package/dist/utils/json_schema.js +4 -2
  139. package/dist/utils/json_schema.js.map +1 -1
  140. package/dist/utils/sax-js/sax.cjs +41 -35
  141. package/dist/utils/sax-js/sax.cjs.map +1 -1
  142. package/dist/utils/sax-js/sax.js +41 -35
  143. package/dist/utils/sax-js/sax.js.map +1 -1
  144. package/dist/utils/testing/chat_models.cjs +2 -1
  145. package/dist/utils/testing/chat_models.cjs.map +1 -1
  146. package/dist/utils/testing/chat_models.js +2 -1
  147. package/dist/utils/testing/chat_models.js.map +1 -1
  148. package/dist/utils/tiktoken.cjs.map +1 -1
  149. package/dist/utils/types/zod.cjs.map +1 -1
  150. package/dist/utils/types/zod.js.map +1 -1
  151. package/dist/utils/zod-to-json-schema/parsers/bigint.cjs +9 -9
  152. package/dist/utils/zod-to-json-schema/parsers/bigint.cjs.map +1 -1
  153. package/dist/utils/zod-to-json-schema/parsers/bigint.js +9 -9
  154. package/dist/utils/zod-to-json-schema/parsers/bigint.js.map +1 -1
  155. package/dist/utils/zod-to-json-schema/parsers/date.cjs +1 -3
  156. package/dist/utils/zod-to-json-schema/parsers/date.cjs.map +1 -1
  157. package/dist/utils/zod-to-json-schema/parsers/date.js +1 -3
  158. package/dist/utils/zod-to-json-schema/parsers/date.js.map +1 -1
  159. package/dist/utils/zod-to-json-schema/parsers/number.cjs +9 -9
  160. package/dist/utils/zod-to-json-schema/parsers/number.cjs.map +1 -1
  161. package/dist/utils/zod-to-json-schema/parsers/number.js +9 -9
  162. package/dist/utils/zod-to-json-schema/parsers/number.js.map +1 -1
  163. package/dist/utils/zod-to-json-schema/parsers/string.cjs +3 -13
  164. package/dist/utils/zod-to-json-schema/parsers/string.cjs.map +1 -1
  165. package/dist/utils/zod-to-json-schema/parsers/string.js +3 -13
  166. package/dist/utils/zod-to-json-schema/parsers/string.js.map +1 -1
  167. package/package.json +5 -5
@@ -1 +1 @@
1
- {"version":3,"file":"sax.js","names":[],"sources":["../../../src/utils/sax-js/sax.ts"],"sourcesContent":["// @ts-nocheck\n\n// Inlined to deal with portability issues\n// Originally from: https://github.com/isaacs/sax-js\n\nconst initializeSax = function () {\n const sax: any = {};\n sax.parser = function (strict, opt) {\n return new SAXParser(strict, opt);\n };\n sax.SAXParser = SAXParser;\n sax.SAXStream = SAXStream;\n sax.createStream = createStream;\n\n // When we pass the MAX_BUFFER_LENGTH position, start checking for buffer overruns.\n // When we check, schedule the next check for MAX_BUFFER_LENGTH - (max(buffer lengths)),\n // since that's the earliest that a buffer overrun could occur. This way, checks are\n // as rare as required, but as often as necessary to ensure never crossing this bound.\n // Furthermore, buffers are only tested at most once per write(), so passing a very\n // large string into write() might have undesirable effects, but this is manageable by\n // the caller, so it is assumed to be safe. Thus, a call to write() may, in the extreme\n // edge case, result in creating at most one complete copy of the string passed in.\n // Set to Infinity to have unlimited buffers.\n sax.MAX_BUFFER_LENGTH = 64 * 1024;\n\n const buffers = [\n \"comment\",\n \"sgmlDecl\",\n \"textNode\",\n \"tagName\",\n \"doctype\",\n \"procInstName\",\n \"procInstBody\",\n \"entity\",\n \"attribName\",\n \"attribValue\",\n \"cdata\",\n \"script\",\n ];\n\n sax.EVENTS = [\n \"text\",\n \"processinginstruction\",\n \"sgmldeclaration\",\n \"doctype\",\n \"comment\",\n \"opentagstart\",\n \"attribute\",\n \"opentag\",\n \"closetag\",\n \"opencdata\",\n \"cdata\",\n \"closecdata\",\n \"error\",\n \"end\",\n \"ready\",\n \"script\",\n \"opennamespace\",\n \"closenamespace\",\n ];\n\n function SAXParser(strict, opt) {\n if (!(this instanceof SAXParser)) {\n return new SAXParser(strict, opt);\n }\n\n var parser = this;\n clearBuffers(parser);\n parser.q = parser.c = \"\";\n parser.bufferCheckPosition = sax.MAX_BUFFER_LENGTH;\n parser.opt = opt || {};\n parser.opt.lowercase = parser.opt.lowercase || parser.opt.lowercasetags;\n parser.looseCase = parser.opt.lowercase ? \"toLowerCase\" : \"toUpperCase\";\n parser.tags = [];\n parser.closed = parser.closedRoot = parser.sawRoot = false;\n parser.tag = parser.error = null;\n parser.strict = !!strict;\n parser.noscript = !!(strict || parser.opt.noscript);\n parser.state = S.BEGIN;\n parser.strictEntities = parser.opt.strictEntities;\n parser.ENTITIES = parser.strictEntities\n ? Object.create(sax.XML_ENTITIES)\n : Object.create(sax.ENTITIES);\n parser.attribList = [];\n\n // namespaces form a prototype chain.\n // it always points at the current tag,\n // which protos to its parent tag.\n if (parser.opt.xmlns) {\n parser.ns = Object.create(rootNS);\n }\n\n // mostly just for error reporting\n parser.trackPosition = parser.opt.position !== false;\n if (parser.trackPosition) {\n parser.position = parser.line = parser.column = 0;\n }\n emit(parser, \"onready\");\n }\n\n if (!Object.create) {\n Object.create = function (o) {\n function F() {}\n F.prototype = o;\n var newf = new F();\n return newf;\n };\n }\n\n if (!Object.keys) {\n Object.keys = function (o) {\n var a = [];\n for (var i in o) if (o.hasOwnProperty(i)) a.push(i);\n return a;\n };\n }\n\n function checkBufferLength(parser) {\n var maxAllowed = Math.max(sax.MAX_BUFFER_LENGTH, 10);\n var maxActual = 0;\n for (var i = 0, l = buffers.length; i < l; i++) {\n var len = parser[buffers[i]].length;\n if (len > maxAllowed) {\n // Text/cdata nodes can get big, and since they're buffered,\n // we can get here under normal conditions.\n // Avoid issues by emitting the text node now,\n // so at least it won't get any bigger.\n switch (buffers[i]) {\n case \"textNode\":\n closeText(parser);\n break;\n\n case \"cdata\":\n emitNode(parser, \"oncdata\", parser.cdata);\n parser.cdata = \"\";\n break;\n\n case \"script\":\n emitNode(parser, \"onscript\", parser.script);\n parser.script = \"\";\n break;\n\n default:\n error(parser, \"Max buffer length exceeded: \" + buffers[i]);\n }\n }\n maxActual = Math.max(maxActual, len);\n }\n // schedule the next check for the earliest possible buffer overrun.\n var m = sax.MAX_BUFFER_LENGTH - maxActual;\n parser.bufferCheckPosition = m + parser.position;\n }\n\n function clearBuffers(parser) {\n for (var i = 0, l = buffers.length; i < l; i++) {\n parser[buffers[i]] = \"\";\n }\n }\n\n function flushBuffers(parser) {\n closeText(parser);\n if (parser.cdata !== \"\") {\n emitNode(parser, \"oncdata\", parser.cdata);\n parser.cdata = \"\";\n }\n if (parser.script !== \"\") {\n emitNode(parser, \"onscript\", parser.script);\n parser.script = \"\";\n }\n }\n\n SAXParser.prototype = {\n end: function () {\n end(this);\n },\n write: write,\n resume: function () {\n this.error = null;\n return this;\n },\n close: function () {\n return this.write(null);\n },\n flush: function () {\n flushBuffers(this);\n },\n };\n\n var Stream = ReadableStream;\n if (!Stream) Stream = function () {};\n\n var streamWraps = sax.EVENTS.filter(function (ev) {\n return ev !== \"error\" && ev !== \"end\";\n });\n\n function createStream(strict, opt) {\n return new SAXStream(strict, opt);\n }\n\n function SAXStream(strict, opt) {\n if (!(this instanceof SAXStream)) {\n return new SAXStream(strict, opt);\n }\n\n Stream.apply(this);\n\n this._parser = new SAXParser(strict, opt);\n this.writable = true;\n this.readable = true;\n\n var me = this;\n\n this._parser.onend = function () {\n me.emit(\"end\");\n };\n\n this._parser.onerror = function (er) {\n me.emit(\"error\", er);\n\n // if didn't throw, then means error was handled.\n // go ahead and clear error, so we can write again.\n me._parser.error = null;\n };\n\n this._decoder = null;\n\n streamWraps.forEach(function (ev) {\n Object.defineProperty(me, \"on\" + ev, {\n get: function () {\n return me._parser[\"on\" + ev];\n },\n set: function (h) {\n if (!h) {\n me.removeAllListeners(ev);\n me._parser[\"on\" + ev] = h;\n return h;\n }\n me.on(ev, h);\n },\n enumerable: true,\n configurable: false,\n });\n });\n }\n\n SAXStream.prototype = Object.create(Stream.prototype, {\n constructor: {\n value: SAXStream,\n },\n });\n\n SAXStream.prototype.write = function (data) {\n this._parser.write(data.toString());\n this.emit(\"data\", data);\n return true;\n };\n\n SAXStream.prototype.end = function (chunk) {\n if (chunk && chunk.length) {\n this.write(chunk);\n }\n this._parser.end();\n return true;\n };\n\n SAXStream.prototype.on = function (ev, handler) {\n var me = this;\n if (!me._parser[\"on\" + ev] && streamWraps.indexOf(ev) !== -1) {\n me._parser[\"on\" + ev] = function () {\n var args =\n arguments.length === 1\n ? [arguments[0]]\n : Array.apply(null, arguments);\n args.splice(0, 0, ev);\n me.emit.apply(me, args);\n };\n }\n\n return Stream.prototype.on.call(me, ev, handler);\n };\n\n // this really needs to be replaced with character classes.\n // XML allows all manner of ridiculous numbers and digits.\n var CDATA = \"[CDATA[\";\n var DOCTYPE = \"DOCTYPE\";\n var XML_NAMESPACE = \"http://www.w3.org/XML/1998/namespace\";\n var XMLNS_NAMESPACE = \"http://www.w3.org/2000/xmlns/\";\n var rootNS = { xml: XML_NAMESPACE, xmlns: XMLNS_NAMESPACE };\n\n // http://www.w3.org/TR/REC-xml/#NT-NameStartChar\n // This implementation works on strings, a single character at a time\n // as such, it cannot ever support astral-plane characters (10000-EFFFF)\n // without a significant breaking change to either this parser, or the\n // JavaScript language. Implementation of an emoji-capable xml parser\n // is left as an exercise for the reader.\n var nameStart =\n /[:_A-Za-z\\u00C0-\\u00D6\\u00D8-\\u00F6\\u00F8-\\u02FF\\u0370-\\u037D\\u037F-\\u1FFF\\u200C-\\u200D\\u2070-\\u218F\\u2C00-\\u2FEF\\u3001-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFFD]/;\n\n var nameBody =\n /[:_A-Za-z\\u00C0-\\u00D6\\u00D8-\\u00F6\\u00F8-\\u02FF\\u0370-\\u037D\\u037F-\\u1FFF\\u200C-\\u200D\\u2070-\\u218F\\u2C00-\\u2FEF\\u3001-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFFD\\u00B7\\u0300-\\u036F\\u203F-\\u2040.\\d-]/;\n\n var entityStart =\n /[#:_A-Za-z\\u00C0-\\u00D6\\u00D8-\\u00F6\\u00F8-\\u02FF\\u0370-\\u037D\\u037F-\\u1FFF\\u200C-\\u200D\\u2070-\\u218F\\u2C00-\\u2FEF\\u3001-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFFD]/;\n var entityBody =\n /[#:_A-Za-z\\u00C0-\\u00D6\\u00D8-\\u00F6\\u00F8-\\u02FF\\u0370-\\u037D\\u037F-\\u1FFF\\u200C-\\u200D\\u2070-\\u218F\\u2C00-\\u2FEF\\u3001-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFFD\\u00B7\\u0300-\\u036F\\u203F-\\u2040.\\d-]/;\n\n function isWhitespace(c) {\n return c === \" \" || c === \"\\n\" || c === \"\\r\" || c === \"\\t\";\n }\n\n function isQuote(c) {\n return c === '\"' || c === \"'\";\n }\n\n function isAttribEnd(c) {\n return c === \">\" || isWhitespace(c);\n }\n\n function isMatch(regex, c) {\n return regex.test(c);\n }\n\n function notMatch(regex, c) {\n return !isMatch(regex, c);\n }\n\n var S = 0;\n sax.STATE = {\n BEGIN: S++, // leading byte order mark or whitespace\n BEGIN_WHITESPACE: S++, // leading whitespace\n TEXT: S++, // general stuff\n TEXT_ENTITY: S++, // &amp and such.\n OPEN_WAKA: S++, // <\n SGML_DECL: S++, // <!BLARG\n SGML_DECL_QUOTED: S++, // <!BLARG foo \"bar\n DOCTYPE: S++, // <!DOCTYPE\n DOCTYPE_QUOTED: S++, // <!DOCTYPE \"//blah\n DOCTYPE_DTD: S++, // <!DOCTYPE \"//blah\" [ ...\n DOCTYPE_DTD_QUOTED: S++, // <!DOCTYPE \"//blah\" [ \"foo\n COMMENT_STARTING: S++, // <!-\n COMMENT: S++, // <!--\n COMMENT_ENDING: S++, // <!-- blah -\n COMMENT_ENDED: S++, // <!-- blah --\n CDATA: S++, // <![CDATA[ something\n CDATA_ENDING: S++, // ]\n CDATA_ENDING_2: S++, // ]]\n PROC_INST: S++, // <?hi\n PROC_INST_BODY: S++, // <?hi there\n PROC_INST_ENDING: S++, // <?hi \"there\" ?\n OPEN_TAG: S++, // <strong\n OPEN_TAG_SLASH: S++, // <strong /\n ATTRIB: S++, // <a\n ATTRIB_NAME: S++, // <a foo\n ATTRIB_NAME_SAW_WHITE: S++, // <a foo _\n ATTRIB_VALUE: S++, // <a foo=\n ATTRIB_VALUE_QUOTED: S++, // <a foo=\"bar\n ATTRIB_VALUE_CLOSED: S++, // <a foo=\"bar\"\n ATTRIB_VALUE_UNQUOTED: S++, // <a foo=bar\n ATTRIB_VALUE_ENTITY_Q: S++, // <foo bar=\"&quot;\"\n ATTRIB_VALUE_ENTITY_U: S++, // <foo bar=&quot\n CLOSE_TAG: S++, // </a\n CLOSE_TAG_SAW_WHITE: S++, // </a >\n SCRIPT: S++, // <script> ...\n SCRIPT_ENDING: S++, // <script> ... <\n };\n\n sax.XML_ENTITIES = {\n amp: \"&\",\n gt: \">\",\n lt: \"<\",\n quot: '\"',\n apos: \"'\",\n };\n\n sax.ENTITIES = {\n amp: \"&\",\n gt: \">\",\n lt: \"<\",\n quot: '\"',\n apos: \"'\",\n AElig: 198,\n Aacute: 193,\n Acirc: 194,\n Agrave: 192,\n Aring: 197,\n Atilde: 195,\n Auml: 196,\n Ccedil: 199,\n ETH: 208,\n Eacute: 201,\n Ecirc: 202,\n Egrave: 200,\n Euml: 203,\n Iacute: 205,\n Icirc: 206,\n Igrave: 204,\n Iuml: 207,\n Ntilde: 209,\n Oacute: 211,\n Ocirc: 212,\n Ograve: 210,\n Oslash: 216,\n Otilde: 213,\n Ouml: 214,\n THORN: 222,\n Uacute: 218,\n Ucirc: 219,\n Ugrave: 217,\n Uuml: 220,\n Yacute: 221,\n aacute: 225,\n acirc: 226,\n aelig: 230,\n agrave: 224,\n aring: 229,\n atilde: 227,\n auml: 228,\n ccedil: 231,\n eacute: 233,\n ecirc: 234,\n egrave: 232,\n eth: 240,\n euml: 235,\n iacute: 237,\n icirc: 238,\n igrave: 236,\n iuml: 239,\n ntilde: 241,\n oacute: 243,\n ocirc: 244,\n ograve: 242,\n oslash: 248,\n otilde: 245,\n ouml: 246,\n szlig: 223,\n thorn: 254,\n uacute: 250,\n ucirc: 251,\n ugrave: 249,\n uuml: 252,\n yacute: 253,\n yuml: 255,\n copy: 169,\n reg: 174,\n nbsp: 160,\n iexcl: 161,\n cent: 162,\n pound: 163,\n curren: 164,\n yen: 165,\n brvbar: 166,\n sect: 167,\n uml: 168,\n ordf: 170,\n laquo: 171,\n not: 172,\n shy: 173,\n macr: 175,\n deg: 176,\n plusmn: 177,\n sup1: 185,\n sup2: 178,\n sup3: 179,\n acute: 180,\n micro: 181,\n para: 182,\n middot: 183,\n cedil: 184,\n ordm: 186,\n raquo: 187,\n frac14: 188,\n frac12: 189,\n frac34: 190,\n iquest: 191,\n times: 215,\n divide: 247,\n OElig: 338,\n oelig: 339,\n Scaron: 352,\n scaron: 353,\n Yuml: 376,\n fnof: 402,\n circ: 710,\n tilde: 732,\n Alpha: 913,\n Beta: 914,\n Gamma: 915,\n Delta: 916,\n Epsilon: 917,\n Zeta: 918,\n Eta: 919,\n Theta: 920,\n Iota: 921,\n Kappa: 922,\n Lambda: 923,\n Mu: 924,\n Nu: 925,\n Xi: 926,\n Omicron: 927,\n Pi: 928,\n Rho: 929,\n Sigma: 931,\n Tau: 932,\n Upsilon: 933,\n Phi: 934,\n Chi: 935,\n Psi: 936,\n Omega: 937,\n alpha: 945,\n beta: 946,\n gamma: 947,\n delta: 948,\n epsilon: 949,\n zeta: 950,\n eta: 951,\n theta: 952,\n iota: 953,\n kappa: 954,\n lambda: 955,\n mu: 956,\n nu: 957,\n xi: 958,\n omicron: 959,\n pi: 960,\n rho: 961,\n sigmaf: 962,\n sigma: 963,\n tau: 964,\n upsilon: 965,\n phi: 966,\n chi: 967,\n psi: 968,\n omega: 969,\n thetasym: 977,\n upsih: 978,\n piv: 982,\n ensp: 8194,\n emsp: 8195,\n thinsp: 8201,\n zwnj: 8204,\n zwj: 8205,\n lrm: 8206,\n rlm: 8207,\n ndash: 8211,\n mdash: 8212,\n lsquo: 8216,\n rsquo: 8217,\n sbquo: 8218,\n ldquo: 8220,\n rdquo: 8221,\n bdquo: 8222,\n dagger: 8224,\n Dagger: 8225,\n bull: 8226,\n hellip: 8230,\n permil: 8240,\n prime: 8242,\n Prime: 8243,\n lsaquo: 8249,\n rsaquo: 8250,\n oline: 8254,\n frasl: 8260,\n euro: 8364,\n image: 8465,\n weierp: 8472,\n real: 8476,\n trade: 8482,\n alefsym: 8501,\n larr: 8592,\n uarr: 8593,\n rarr: 8594,\n darr: 8595,\n harr: 8596,\n crarr: 8629,\n lArr: 8656,\n uArr: 8657,\n rArr: 8658,\n dArr: 8659,\n hArr: 8660,\n forall: 8704,\n part: 8706,\n exist: 8707,\n empty: 8709,\n nabla: 8711,\n isin: 8712,\n notin: 8713,\n ni: 8715,\n prod: 8719,\n sum: 8721,\n minus: 8722,\n lowast: 8727,\n radic: 8730,\n prop: 8733,\n infin: 8734,\n ang: 8736,\n and: 8743,\n or: 8744,\n cap: 8745,\n cup: 8746,\n int: 8747,\n there4: 8756,\n sim: 8764,\n cong: 8773,\n asymp: 8776,\n ne: 8800,\n equiv: 8801,\n le: 8804,\n ge: 8805,\n sub: 8834,\n sup: 8835,\n nsub: 8836,\n sube: 8838,\n supe: 8839,\n oplus: 8853,\n otimes: 8855,\n perp: 8869,\n sdot: 8901,\n lceil: 8968,\n rceil: 8969,\n lfloor: 8970,\n rfloor: 8971,\n lang: 9001,\n rang: 9002,\n loz: 9674,\n spades: 9824,\n clubs: 9827,\n hearts: 9829,\n diams: 9830,\n };\n\n Object.keys(sax.ENTITIES).forEach(function (key) {\n var e = sax.ENTITIES[key];\n var s = typeof e === \"number\" ? String.fromCharCode(e) : e;\n sax.ENTITIES[key] = s;\n });\n\n for (var s in sax.STATE) {\n sax.STATE[sax.STATE[s]] = s;\n }\n\n // shorthand\n S = sax.STATE;\n\n function emit(parser, event, data) {\n parser[event] && parser[event](data);\n }\n\n function emitNode(parser, nodeType, data) {\n if (parser.textNode) closeText(parser);\n emit(parser, nodeType, data);\n }\n\n function closeText(parser) {\n parser.textNode = textopts(parser.opt, parser.textNode);\n if (parser.textNode) emit(parser, \"ontext\", parser.textNode);\n parser.textNode = \"\";\n }\n\n function textopts(opt, text) {\n if (opt.trim) text = text.trim();\n if (opt.normalize) text = text.replace(/\\s+/g, \" \");\n return text;\n }\n\n function error(parser, er) {\n closeText(parser);\n if (parser.trackPosition) {\n er +=\n \"\\nLine: \" +\n parser.line +\n \"\\nColumn: \" +\n parser.column +\n \"\\nChar: \" +\n parser.c;\n }\n er = new Error(er);\n parser.error = er;\n emit(parser, \"onerror\", er);\n return parser;\n }\n\n function end(parser) {\n if (parser.sawRoot && !parser.closedRoot)\n strictFail(parser, \"Unclosed root tag\");\n if (\n parser.state !== S.BEGIN &&\n parser.state !== S.BEGIN_WHITESPACE &&\n parser.state !== S.TEXT\n ) {\n error(parser, \"Unexpected end\");\n }\n closeText(parser);\n parser.c = \"\";\n parser.closed = true;\n emit(parser, \"onend\");\n SAXParser.call(parser, parser.strict, parser.opt);\n return parser;\n }\n\n function strictFail(parser, message) {\n if (typeof parser !== \"object\" || !(parser instanceof SAXParser)) {\n throw new Error(\"bad call to strictFail\");\n }\n if (parser.strict) {\n error(parser, message);\n }\n }\n\n function newTag(parser) {\n if (!parser.strict) parser.tagName = parser.tagName[parser.looseCase]();\n var parent = parser.tags[parser.tags.length - 1] || parser;\n var tag = (parser.tag = { name: parser.tagName, attributes: {} });\n\n // will be overridden if tag contails an xmlns=\"foo\" or xmlns:foo=\"bar\"\n if (parser.opt.xmlns) {\n tag.ns = parent.ns;\n }\n parser.attribList.length = 0;\n emitNode(parser, \"onopentagstart\", tag);\n }\n\n function qname(name, attribute) {\n var i = name.indexOf(\":\");\n var qualName = i < 0 ? [\"\", name] : name.split(\":\");\n var prefix = qualName[0];\n var local = qualName[1];\n\n // <x \"xmlns\"=\"http://foo\">\n if (attribute && name === \"xmlns\") {\n prefix = \"xmlns\";\n local = \"\";\n }\n\n return { prefix: prefix, local: local };\n }\n\n function attrib(parser) {\n if (!parser.strict) {\n parser.attribName = parser.attribName[parser.looseCase]();\n }\n\n if (\n parser.attribList.indexOf(parser.attribName) !== -1 ||\n parser.tag.attributes.hasOwnProperty(parser.attribName)\n ) {\n parser.attribName = parser.attribValue = \"\";\n return;\n }\n\n if (parser.opt.xmlns) {\n var qn = qname(parser.attribName, true);\n var prefix = qn.prefix;\n var local = qn.local;\n\n if (prefix === \"xmlns\") {\n // namespace binding attribute. push the binding into scope\n if (local === \"xml\" && parser.attribValue !== XML_NAMESPACE) {\n strictFail(\n parser,\n \"xml: prefix must be bound to \" +\n XML_NAMESPACE +\n \"\\n\" +\n \"Actual: \" +\n parser.attribValue\n );\n } else if (\n local === \"xmlns\" &&\n parser.attribValue !== XMLNS_NAMESPACE\n ) {\n strictFail(\n parser,\n \"xmlns: prefix must be bound to \" +\n XMLNS_NAMESPACE +\n \"\\n\" +\n \"Actual: \" +\n parser.attribValue\n );\n } else {\n var tag = parser.tag;\n var parent = parser.tags[parser.tags.length - 1] || parser;\n if (tag.ns === parent.ns) {\n tag.ns = Object.create(parent.ns);\n }\n tag.ns[local] = parser.attribValue;\n }\n }\n\n // defer onattribute events until all attributes have been seen\n // so any new bindings can take effect. preserve attribute order\n // so deferred events can be emitted in document order\n parser.attribList.push([parser.attribName, parser.attribValue]);\n } else {\n // in non-xmlns mode, we can emit the event right away\n parser.tag.attributes[parser.attribName] = parser.attribValue;\n emitNode(parser, \"onattribute\", {\n name: parser.attribName,\n value: parser.attribValue,\n });\n }\n\n parser.attribName = parser.attribValue = \"\";\n }\n\n function openTag(parser, selfClosing) {\n if (parser.opt.xmlns) {\n // emit namespace binding events\n var tag = parser.tag;\n\n // add namespace info to tag\n var qn = qname(parser.tagName);\n tag.prefix = qn.prefix;\n tag.local = qn.local;\n tag.uri = tag.ns[qn.prefix] || \"\";\n\n if (tag.prefix && !tag.uri) {\n strictFail(\n parser,\n \"Unbound namespace prefix: \" + JSON.stringify(parser.tagName)\n );\n tag.uri = qn.prefix;\n }\n\n var parent = parser.tags[parser.tags.length - 1] || parser;\n if (tag.ns && parent.ns !== tag.ns) {\n Object.keys(tag.ns).forEach(function (p) {\n emitNode(parser, \"onopennamespace\", {\n prefix: p,\n uri: tag.ns[p],\n });\n });\n }\n\n // handle deferred onattribute events\n // Note: do not apply default ns to attributes:\n // http://www.w3.org/TR/REC-xml-names/#defaulting\n for (var i = 0, l = parser.attribList.length; i < l; i++) {\n var nv = parser.attribList[i];\n var name = nv[0];\n var value = nv[1];\n var qualName = qname(name, true);\n var prefix = qualName.prefix;\n var local = qualName.local;\n var uri = prefix === \"\" ? \"\" : tag.ns[prefix] || \"\";\n var a = {\n name: name,\n value: value,\n prefix: prefix,\n local: local,\n uri: uri,\n };\n\n // if there's any attributes with an undefined namespace,\n // then fail on them now.\n if (prefix && prefix !== \"xmlns\" && !uri) {\n strictFail(\n parser,\n \"Unbound namespace prefix: \" + JSON.stringify(prefix)\n );\n a.uri = prefix;\n }\n parser.tag.attributes[name] = a;\n emitNode(parser, \"onattribute\", a);\n }\n parser.attribList.length = 0;\n }\n\n parser.tag.isSelfClosing = !!selfClosing;\n\n // process the tag\n parser.sawRoot = true;\n parser.tags.push(parser.tag);\n emitNode(parser, \"onopentag\", parser.tag);\n if (!selfClosing) {\n // special case for <script> in non-strict mode.\n if (!parser.noscript && parser.tagName.toLowerCase() === \"script\") {\n parser.state = S.SCRIPT;\n } else {\n parser.state = S.TEXT;\n }\n parser.tag = null;\n parser.tagName = \"\";\n }\n parser.attribName = parser.attribValue = \"\";\n parser.attribList.length = 0;\n }\n\n function closeTag(parser) {\n if (!parser.tagName) {\n strictFail(parser, \"Weird empty close tag.\");\n parser.textNode += \"</>\";\n parser.state = S.TEXT;\n return;\n }\n\n if (parser.script) {\n if (parser.tagName !== \"script\") {\n parser.script += \"</\" + parser.tagName + \">\";\n parser.tagName = \"\";\n parser.state = S.SCRIPT;\n return;\n }\n emitNode(parser, \"onscript\", parser.script);\n parser.script = \"\";\n }\n\n // first make sure that the closing tag actually exists.\n // <a><b></c></b></a> will close everything, otherwise.\n var t = parser.tags.length;\n var tagName = parser.tagName;\n if (!parser.strict) {\n tagName = tagName[parser.looseCase]();\n }\n var closeTo = tagName;\n while (t--) {\n var close = parser.tags[t];\n if (close.name !== closeTo) {\n // fail the first time in strict mode\n strictFail(parser, \"Unexpected close tag\");\n } else {\n break;\n }\n }\n\n // didn't find it. we already failed for strict, so just abort.\n if (t < 0) {\n strictFail(parser, \"Unmatched closing tag: \" + parser.tagName);\n parser.textNode += \"</\" + parser.tagName + \">\";\n parser.state = S.TEXT;\n return;\n }\n parser.tagName = tagName;\n var s = parser.tags.length;\n while (s-- > t) {\n var tag = (parser.tag = parser.tags.pop());\n parser.tagName = parser.tag.name;\n emitNode(parser, \"onclosetag\", parser.tagName);\n\n var x = {};\n for (var i in tag.ns) {\n x[i] = tag.ns[i];\n }\n\n var parent = parser.tags[parser.tags.length - 1] || parser;\n if (parser.opt.xmlns && tag.ns !== parent.ns) {\n // remove namespace bindings introduced by tag\n Object.keys(tag.ns).forEach(function (p) {\n var n = tag.ns[p];\n emitNode(parser, \"onclosenamespace\", { prefix: p, uri: n });\n });\n }\n }\n if (t === 0) parser.closedRoot = true;\n parser.tagName = parser.attribValue = parser.attribName = \"\";\n parser.attribList.length = 0;\n parser.state = S.TEXT;\n }\n\n function parseEntity(parser) {\n var entity = parser.entity;\n var entityLC = entity.toLowerCase();\n var num;\n var numStr = \"\";\n\n if (parser.ENTITIES[entity]) {\n return parser.ENTITIES[entity];\n }\n if (parser.ENTITIES[entityLC]) {\n return parser.ENTITIES[entityLC];\n }\n entity = entityLC;\n if (entity.charAt(0) === \"#\") {\n if (entity.charAt(1) === \"x\") {\n entity = entity.slice(2);\n num = parseInt(entity, 16);\n numStr = num.toString(16);\n } else {\n entity = entity.slice(1);\n num = parseInt(entity, 10);\n numStr = num.toString(10);\n }\n }\n entity = entity.replace(/^0+/, \"\");\n if (isNaN(num) || numStr.toLowerCase() !== entity) {\n strictFail(parser, \"Invalid character entity\");\n return \"&\" + parser.entity + \";\";\n }\n\n return String.fromCodePoint(num);\n }\n\n function beginWhiteSpace(parser, c) {\n if (c === \"<\") {\n parser.state = S.OPEN_WAKA;\n parser.startTagPosition = parser.position;\n } else if (!isWhitespace(c)) {\n // have to process this as a text node.\n // weird, but happens.\n strictFail(parser, \"Non-whitespace before first tag.\");\n parser.textNode = c;\n parser.state = S.TEXT;\n }\n }\n\n function charAt(chunk, i) {\n var result = \"\";\n if (i < chunk.length) {\n result = chunk.charAt(i);\n }\n return result;\n }\n\n function write(chunk) {\n var parser = this;\n if (this.error) {\n throw this.error;\n }\n if (parser.closed) {\n return error(\n parser,\n \"Cannot write after close. Assign an onready handler.\"\n );\n }\n if (chunk === null) {\n return end(parser);\n }\n if (typeof chunk === \"object\") {\n chunk = chunk.toString();\n }\n var i = 0;\n var c = \"\";\n while (true) {\n c = charAt(chunk, i++);\n parser.c = c;\n\n if (!c) {\n break;\n }\n\n if (parser.trackPosition) {\n parser.position++;\n if (c === \"\\n\") {\n parser.line++;\n parser.column = 0;\n } else {\n parser.column++;\n }\n }\n\n switch (parser.state) {\n case S.BEGIN:\n parser.state = S.BEGIN_WHITESPACE;\n if (c === \"\\uFEFF\") {\n continue;\n }\n beginWhiteSpace(parser, c);\n continue;\n\n case S.BEGIN_WHITESPACE:\n beginWhiteSpace(parser, c);\n continue;\n\n case S.TEXT:\n if (parser.sawRoot && !parser.closedRoot) {\n var starti = i - 1;\n while (c && c !== \"<\" && c !== \"&\") {\n c = charAt(chunk, i++);\n if (c && parser.trackPosition) {\n parser.position++;\n if (c === \"\\n\") {\n parser.line++;\n parser.column = 0;\n } else {\n parser.column++;\n }\n }\n }\n parser.textNode += chunk.substring(starti, i - 1);\n }\n if (\n c === \"<\" &&\n !(parser.sawRoot && parser.closedRoot && !parser.strict)\n ) {\n parser.state = S.OPEN_WAKA;\n parser.startTagPosition = parser.position;\n } else {\n if (!isWhitespace(c) && (!parser.sawRoot || parser.closedRoot)) {\n strictFail(parser, \"Text data outside of root node.\");\n }\n if (c === \"&\") {\n parser.state = S.TEXT_ENTITY;\n } else {\n parser.textNode += c;\n }\n }\n continue;\n\n case S.SCRIPT:\n // only non-strict\n if (c === \"<\") {\n parser.state = S.SCRIPT_ENDING;\n } else {\n parser.script += c;\n }\n continue;\n\n case S.SCRIPT_ENDING:\n if (c === \"/\") {\n parser.state = S.CLOSE_TAG;\n } else {\n parser.script += \"<\" + c;\n parser.state = S.SCRIPT;\n }\n continue;\n\n case S.OPEN_WAKA:\n // either a /, ?, !, or text is coming next.\n if (c === \"!\") {\n parser.state = S.SGML_DECL;\n parser.sgmlDecl = \"\";\n } else if (isWhitespace(c)) {\n // wait for it...\n } else if (isMatch(nameStart, c)) {\n parser.state = S.OPEN_TAG;\n parser.tagName = c;\n } else if (c === \"/\") {\n parser.state = S.CLOSE_TAG;\n parser.tagName = \"\";\n } else if (c === \"?\") {\n parser.state = S.PROC_INST;\n parser.procInstName = parser.procInstBody = \"\";\n } else {\n strictFail(parser, \"Unencoded <\");\n // if there was some whitespace, then add that in.\n if (parser.startTagPosition + 1 < parser.position) {\n var pad = parser.position - parser.startTagPosition;\n c = new Array(pad).join(\" \") + c;\n }\n parser.textNode += \"<\" + c;\n parser.state = S.TEXT;\n }\n continue;\n\n case S.SGML_DECL:\n if ((parser.sgmlDecl + c).toUpperCase() === CDATA) {\n emitNode(parser, \"onopencdata\");\n parser.state = S.CDATA;\n parser.sgmlDecl = \"\";\n parser.cdata = \"\";\n } else if (parser.sgmlDecl + c === \"--\") {\n parser.state = S.COMMENT;\n parser.comment = \"\";\n parser.sgmlDecl = \"\";\n } else if ((parser.sgmlDecl + c).toUpperCase() === DOCTYPE) {\n parser.state = S.DOCTYPE;\n if (parser.doctype || parser.sawRoot) {\n strictFail(parser, \"Inappropriately located doctype declaration\");\n }\n parser.doctype = \"\";\n parser.sgmlDecl = \"\";\n } else if (c === \">\") {\n emitNode(parser, \"onsgmldeclaration\", parser.sgmlDecl);\n parser.sgmlDecl = \"\";\n parser.state = S.TEXT;\n } else if (isQuote(c)) {\n parser.state = S.SGML_DECL_QUOTED;\n parser.sgmlDecl += c;\n } else {\n parser.sgmlDecl += c;\n }\n continue;\n\n case S.SGML_DECL_QUOTED:\n if (c === parser.q) {\n parser.state = S.SGML_DECL;\n parser.q = \"\";\n }\n parser.sgmlDecl += c;\n continue;\n\n case S.DOCTYPE:\n if (c === \">\") {\n parser.state = S.TEXT;\n emitNode(parser, \"ondoctype\", parser.doctype);\n parser.doctype = true; // just remember that we saw it.\n } else {\n parser.doctype += c;\n if (c === \"[\") {\n parser.state = S.DOCTYPE_DTD;\n } else if (isQuote(c)) {\n parser.state = S.DOCTYPE_QUOTED;\n parser.q = c;\n }\n }\n continue;\n\n case S.DOCTYPE_QUOTED:\n parser.doctype += c;\n if (c === parser.q) {\n parser.q = \"\";\n parser.state = S.DOCTYPE;\n }\n continue;\n\n case S.DOCTYPE_DTD:\n parser.doctype += c;\n if (c === \"]\") {\n parser.state = S.DOCTYPE;\n } else if (isQuote(c)) {\n parser.state = S.DOCTYPE_DTD_QUOTED;\n parser.q = c;\n }\n continue;\n\n case S.DOCTYPE_DTD_QUOTED:\n parser.doctype += c;\n if (c === parser.q) {\n parser.state = S.DOCTYPE_DTD;\n parser.q = \"\";\n }\n continue;\n\n case S.COMMENT:\n if (c === \"-\") {\n parser.state = S.COMMENT_ENDING;\n } else {\n parser.comment += c;\n }\n continue;\n\n case S.COMMENT_ENDING:\n if (c === \"-\") {\n parser.state = S.COMMENT_ENDED;\n parser.comment = textopts(parser.opt, parser.comment);\n if (parser.comment) {\n emitNode(parser, \"oncomment\", parser.comment);\n }\n parser.comment = \"\";\n } else {\n parser.comment += \"-\" + c;\n parser.state = S.COMMENT;\n }\n continue;\n\n case S.COMMENT_ENDED:\n if (c !== \">\") {\n strictFail(parser, \"Malformed comment\");\n // allow <!-- blah -- bloo --> in non-strict mode,\n // which is a comment of \" blah -- bloo \"\n parser.comment += \"--\" + c;\n parser.state = S.COMMENT;\n } else {\n parser.state = S.TEXT;\n }\n continue;\n\n case S.CDATA:\n if (c === \"]\") {\n parser.state = S.CDATA_ENDING;\n } else {\n parser.cdata += c;\n }\n continue;\n\n case S.CDATA_ENDING:\n if (c === \"]\") {\n parser.state = S.CDATA_ENDING_2;\n } else {\n parser.cdata += \"]\" + c;\n parser.state = S.CDATA;\n }\n continue;\n\n case S.CDATA_ENDING_2:\n if (c === \">\") {\n if (parser.cdata) {\n emitNode(parser, \"oncdata\", parser.cdata);\n }\n emitNode(parser, \"onclosecdata\");\n parser.cdata = \"\";\n parser.state = S.TEXT;\n } else if (c === \"]\") {\n parser.cdata += \"]\";\n } else {\n parser.cdata += \"]]\" + c;\n parser.state = S.CDATA;\n }\n continue;\n\n case S.PROC_INST:\n if (c === \"?\") {\n parser.state = S.PROC_INST_ENDING;\n } else if (isWhitespace(c)) {\n parser.state = S.PROC_INST_BODY;\n } else {\n parser.procInstName += c;\n }\n continue;\n\n case S.PROC_INST_BODY:\n if (!parser.procInstBody && isWhitespace(c)) {\n continue;\n } else if (c === \"?\") {\n parser.state = S.PROC_INST_ENDING;\n } else {\n parser.procInstBody += c;\n }\n continue;\n\n case S.PROC_INST_ENDING:\n if (c === \">\") {\n emitNode(parser, \"onprocessinginstruction\", {\n name: parser.procInstName,\n body: parser.procInstBody,\n });\n parser.procInstName = parser.procInstBody = \"\";\n parser.state = S.TEXT;\n } else {\n parser.procInstBody += \"?\" + c;\n parser.state = S.PROC_INST_BODY;\n }\n continue;\n\n case S.OPEN_TAG:\n if (isMatch(nameBody, c)) {\n parser.tagName += c;\n } else {\n newTag(parser);\n if (c === \">\") {\n openTag(parser);\n } else if (c === \"/\") {\n parser.state = S.OPEN_TAG_SLASH;\n } else {\n if (!isWhitespace(c)) {\n strictFail(parser, \"Invalid character in tag name\");\n }\n parser.state = S.ATTRIB;\n }\n }\n continue;\n\n case S.OPEN_TAG_SLASH:\n if (c === \">\") {\n openTag(parser, true);\n closeTag(parser);\n } else {\n strictFail(\n parser,\n \"Forward-slash in opening tag not followed by >\"\n );\n parser.state = S.ATTRIB;\n }\n continue;\n\n case S.ATTRIB:\n // haven't read the attribute name yet.\n if (isWhitespace(c)) {\n continue;\n } else if (c === \">\") {\n openTag(parser);\n } else if (c === \"/\") {\n parser.state = S.OPEN_TAG_SLASH;\n } else if (isMatch(nameStart, c)) {\n parser.attribName = c;\n parser.attribValue = \"\";\n parser.state = S.ATTRIB_NAME;\n } else {\n strictFail(parser, \"Invalid attribute name\");\n }\n continue;\n\n case S.ATTRIB_NAME:\n if (c === \"=\") {\n parser.state = S.ATTRIB_VALUE;\n } else if (c === \">\") {\n strictFail(parser, \"Attribute without value\");\n parser.attribValue = parser.attribName;\n attrib(parser);\n openTag(parser);\n } else if (isWhitespace(c)) {\n parser.state = S.ATTRIB_NAME_SAW_WHITE;\n } else if (isMatch(nameBody, c)) {\n parser.attribName += c;\n } else {\n strictFail(parser, \"Invalid attribute name\");\n }\n continue;\n\n case S.ATTRIB_NAME_SAW_WHITE:\n if (c === \"=\") {\n parser.state = S.ATTRIB_VALUE;\n } else if (isWhitespace(c)) {\n continue;\n } else {\n strictFail(parser, \"Attribute without value\");\n parser.tag.attributes[parser.attribName] = \"\";\n parser.attribValue = \"\";\n emitNode(parser, \"onattribute\", {\n name: parser.attribName,\n value: \"\",\n });\n parser.attribName = \"\";\n if (c === \">\") {\n openTag(parser);\n } else if (isMatch(nameStart, c)) {\n parser.attribName = c;\n parser.state = S.ATTRIB_NAME;\n } else {\n strictFail(parser, \"Invalid attribute name\");\n parser.state = S.ATTRIB;\n }\n }\n continue;\n\n case S.ATTRIB_VALUE:\n if (isWhitespace(c)) {\n continue;\n } else if (isQuote(c)) {\n parser.q = c;\n parser.state = S.ATTRIB_VALUE_QUOTED;\n } else {\n strictFail(parser, \"Unquoted attribute value\");\n parser.state = S.ATTRIB_VALUE_UNQUOTED;\n parser.attribValue = c;\n }\n continue;\n\n case S.ATTRIB_VALUE_QUOTED:\n if (c !== parser.q) {\n if (c === \"&\") {\n parser.state = S.ATTRIB_VALUE_ENTITY_Q;\n } else {\n parser.attribValue += c;\n }\n continue;\n }\n attrib(parser);\n parser.q = \"\";\n parser.state = S.ATTRIB_VALUE_CLOSED;\n continue;\n\n case S.ATTRIB_VALUE_CLOSED:\n if (isWhitespace(c)) {\n parser.state = S.ATTRIB;\n } else if (c === \">\") {\n openTag(parser);\n } else if (c === \"/\") {\n parser.state = S.OPEN_TAG_SLASH;\n } else if (isMatch(nameStart, c)) {\n strictFail(parser, \"No whitespace between attributes\");\n parser.attribName = c;\n parser.attribValue = \"\";\n parser.state = S.ATTRIB_NAME;\n } else {\n strictFail(parser, \"Invalid attribute name\");\n }\n continue;\n\n case S.ATTRIB_VALUE_UNQUOTED:\n if (!isAttribEnd(c)) {\n if (c === \"&\") {\n parser.state = S.ATTRIB_VALUE_ENTITY_U;\n } else {\n parser.attribValue += c;\n }\n continue;\n }\n attrib(parser);\n if (c === \">\") {\n openTag(parser);\n } else {\n parser.state = S.ATTRIB;\n }\n continue;\n\n case S.CLOSE_TAG:\n if (!parser.tagName) {\n if (isWhitespace(c)) {\n continue;\n } else if (notMatch(nameStart, c)) {\n if (parser.script) {\n parser.script += \"</\" + c;\n parser.state = S.SCRIPT;\n } else {\n strictFail(parser, \"Invalid tagname in closing tag.\");\n }\n } else {\n parser.tagName = c;\n }\n } else if (c === \">\") {\n closeTag(parser);\n } else if (isMatch(nameBody, c)) {\n parser.tagName += c;\n } else if (parser.script) {\n parser.script += \"</\" + parser.tagName;\n parser.tagName = \"\";\n parser.state = S.SCRIPT;\n } else {\n if (!isWhitespace(c)) {\n strictFail(parser, \"Invalid tagname in closing tag\");\n }\n parser.state = S.CLOSE_TAG_SAW_WHITE;\n }\n continue;\n\n case S.CLOSE_TAG_SAW_WHITE:\n if (isWhitespace(c)) {\n continue;\n }\n if (c === \">\") {\n closeTag(parser);\n } else {\n strictFail(parser, \"Invalid characters in closing tag\");\n }\n continue;\n\n case S.TEXT_ENTITY:\n case S.ATTRIB_VALUE_ENTITY_Q:\n case S.ATTRIB_VALUE_ENTITY_U:\n var returnState;\n var buffer;\n switch (parser.state) {\n case S.TEXT_ENTITY:\n returnState = S.TEXT;\n buffer = \"textNode\";\n break;\n\n case S.ATTRIB_VALUE_ENTITY_Q:\n returnState = S.ATTRIB_VALUE_QUOTED;\n buffer = \"attribValue\";\n break;\n\n case S.ATTRIB_VALUE_ENTITY_U:\n returnState = S.ATTRIB_VALUE_UNQUOTED;\n buffer = \"attribValue\";\n break;\n }\n\n if (c === \";\") {\n if (parser.opt.unparsedEntities) {\n var parsedEntity = parseEntity(parser);\n parser.entity = \"\";\n parser.state = returnState;\n parser.write(parsedEntity);\n } else {\n parser[buffer] += parseEntity(parser);\n parser.entity = \"\";\n parser.state = returnState;\n }\n } else if (\n isMatch(parser.entity.length ? entityBody : entityStart, c)\n ) {\n parser.entity += c;\n } else {\n strictFail(parser, \"Invalid character in entity name\");\n parser[buffer] += \"&\" + parser.entity + c;\n parser.entity = \"\";\n parser.state = returnState;\n }\n\n continue;\n\n default: /* istanbul ignore next */ {\n throw new Error(parser, \"Unknown state: \" + parser.state);\n }\n }\n } // while\n\n if (parser.position >= parser.bufferCheckPosition) {\n checkBufferLength(parser);\n }\n return parser;\n }\n\n /*! http://mths.be/fromcodepoint v0.1.0 by @mathias */\n /* istanbul ignore next */\n if (!String.fromCodePoint) {\n (function () {\n var stringFromCharCode = String.fromCharCode;\n var floor = Math.floor;\n var fromCodePoint = function () {\n var MAX_SIZE = 0x4000;\n var codeUnits = [];\n var highSurrogate;\n var lowSurrogate;\n var index = -1;\n var length = arguments.length;\n if (!length) {\n return \"\";\n }\n var result = \"\";\n while (++index < length) {\n var codePoint = Number(arguments[index]);\n if (\n !isFinite(codePoint) || // `NaN`, `+Infinity`, or `-Infinity`\n codePoint < 0 || // not a valid Unicode code point\n codePoint > 0x10ffff || // not a valid Unicode code point\n floor(codePoint) !== codePoint // not an integer\n ) {\n throw RangeError(\"Invalid code point: \" + codePoint);\n }\n if (codePoint <= 0xffff) {\n // BMP code point\n codeUnits.push(codePoint);\n } else {\n // Astral code point; split in surrogate halves\n // http://mathiasbynens.be/notes/javascript-encoding#surrogate-formulae\n codePoint -= 0x10000;\n highSurrogate = (codePoint >> 10) + 0xd800;\n lowSurrogate = (codePoint % 0x400) + 0xdc00;\n codeUnits.push(highSurrogate, lowSurrogate);\n }\n if (index + 1 === length || codeUnits.length > MAX_SIZE) {\n result += stringFromCharCode.apply(null, codeUnits);\n codeUnits.length = 0;\n }\n }\n return result;\n };\n /* istanbul ignore next */\n if (Object.defineProperty) {\n Object.defineProperty(String, \"fromCodePoint\", {\n value: fromCodePoint,\n configurable: true,\n writable: true,\n });\n } else {\n String.fromCodePoint = fromCodePoint;\n }\n })();\n }\n return sax;\n};\n\nconst sax = /** #__PURE__ */ initializeSax();\n\nexport { sax };\n"],"mappings":"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"}
1
+ {"version":3,"file":"sax.js","names":[],"sources":["../../../src/utils/sax-js/sax.ts"],"sourcesContent":["// @ts-nocheck\n\n// Inlined to deal with portability issues\n// Originally from: https://github.com/isaacs/sax-js\n\nconst initializeSax = function () {\n const sax: any = {};\n sax.parser = function (strict, opt) {\n return new SAXParser(strict, opt);\n };\n sax.SAXParser = SAXParser;\n sax.SAXStream = SAXStream;\n sax.createStream = createStream;\n\n // When we pass the MAX_BUFFER_LENGTH position, start checking for buffer overruns.\n // When we check, schedule the next check for MAX_BUFFER_LENGTH - (max(buffer lengths)),\n // since that's the earliest that a buffer overrun could occur. This way, checks are\n // as rare as required, but as often as necessary to ensure never crossing this bound.\n // Furthermore, buffers are only tested at most once per write(), so passing a very\n // large string into write() might have undesirable effects, but this is manageable by\n // the caller, so it is assumed to be safe. Thus, a call to write() may, in the extreme\n // edge case, result in creating at most one complete copy of the string passed in.\n // Set to Infinity to have unlimited buffers.\n sax.MAX_BUFFER_LENGTH = 64 * 1024;\n\n const buffers = [\n \"comment\",\n \"sgmlDecl\",\n \"textNode\",\n \"tagName\",\n \"doctype\",\n \"procInstName\",\n \"procInstBody\",\n \"entity\",\n \"attribName\",\n \"attribValue\",\n \"cdata\",\n \"script\",\n ];\n\n sax.EVENTS = [\n \"text\",\n \"processinginstruction\",\n \"sgmldeclaration\",\n \"doctype\",\n \"comment\",\n \"opentagstart\",\n \"attribute\",\n \"opentag\",\n \"closetag\",\n \"opencdata\",\n \"cdata\",\n \"closecdata\",\n \"error\",\n \"end\",\n \"ready\",\n \"script\",\n \"opennamespace\",\n \"closenamespace\",\n ];\n\n function SAXParser(strict, opt) {\n if (!(this instanceof SAXParser)) {\n return new SAXParser(strict, opt);\n }\n\n var parser = this;\n clearBuffers(parser);\n parser.q = parser.c = \"\";\n parser.bufferCheckPosition = sax.MAX_BUFFER_LENGTH;\n parser.opt = opt || {};\n parser.opt.lowercase = parser.opt.lowercase || parser.opt.lowercasetags;\n parser.looseCase = parser.opt.lowercase ? \"toLowerCase\" : \"toUpperCase\";\n parser.tags = [];\n parser.closed = parser.closedRoot = parser.sawRoot = false;\n parser.tag = parser.error = null;\n parser.strict = !!strict;\n parser.noscript = !!(strict || parser.opt.noscript);\n parser.state = S.BEGIN;\n parser.strictEntities = parser.opt.strictEntities;\n parser.ENTITIES = parser.strictEntities\n ? Object.create(sax.XML_ENTITIES)\n : Object.create(sax.ENTITIES);\n parser.attribList = [];\n\n // namespaces form a prototype chain.\n // it always points at the current tag,\n // which protos to its parent tag.\n if (parser.opt.xmlns) {\n parser.ns = Object.create(rootNS);\n }\n\n // mostly just for error reporting\n parser.trackPosition = parser.opt.position !== false;\n if (parser.trackPosition) {\n parser.position = parser.line = parser.column = 0;\n }\n emit(parser, \"onready\");\n }\n\n if (!Object.create) {\n Object.create = function (o) {\n function F() {}\n F.prototype = o;\n var newf = new F();\n return newf;\n };\n }\n\n if (!Object.keys) {\n Object.keys = function (o) {\n var a = [];\n for (var i in o) if (o.hasOwnProperty(i)) a.push(i);\n return a;\n };\n }\n\n function checkBufferLength(parser) {\n var maxAllowed = Math.max(sax.MAX_BUFFER_LENGTH, 10);\n var maxActual = 0;\n for (var i = 0, l = buffers.length; i < l; i++) {\n var len = parser[buffers[i]].length;\n if (len > maxAllowed) {\n // Text/cdata nodes can get big, and since they're buffered,\n // we can get here under normal conditions.\n // Avoid issues by emitting the text node now,\n // so at least it won't get any bigger.\n switch (buffers[i]) {\n case \"textNode\":\n closeText(parser);\n break;\n\n case \"cdata\":\n emitNode(parser, \"oncdata\", parser.cdata);\n parser.cdata = \"\";\n break;\n\n case \"script\":\n emitNode(parser, \"onscript\", parser.script);\n parser.script = \"\";\n break;\n\n default:\n error(parser, \"Max buffer length exceeded: \" + buffers[i]);\n }\n }\n maxActual = Math.max(maxActual, len);\n }\n // schedule the next check for the earliest possible buffer overrun.\n var m = sax.MAX_BUFFER_LENGTH - maxActual;\n parser.bufferCheckPosition = m + parser.position;\n }\n\n function clearBuffers(parser) {\n for (var i = 0, l = buffers.length; i < l; i++) {\n parser[buffers[i]] = \"\";\n }\n }\n\n function flushBuffers(parser) {\n closeText(parser);\n if (parser.cdata !== \"\") {\n emitNode(parser, \"oncdata\", parser.cdata);\n parser.cdata = \"\";\n }\n if (parser.script !== \"\") {\n emitNode(parser, \"onscript\", parser.script);\n parser.script = \"\";\n }\n }\n\n SAXParser.prototype = {\n end: function () {\n end(this);\n },\n write: write,\n resume: function () {\n this.error = null;\n return this;\n },\n close: function () {\n return this.write(null);\n },\n flush: function () {\n flushBuffers(this);\n },\n };\n\n var Stream = ReadableStream;\n if (!Stream) Stream = function () {};\n\n var streamWraps = sax.EVENTS.filter(function (ev) {\n return ev !== \"error\" && ev !== \"end\";\n });\n\n function createStream(strict, opt) {\n return new SAXStream(strict, opt);\n }\n\n function SAXStream(strict, opt) {\n if (!(this instanceof SAXStream)) {\n return new SAXStream(strict, opt);\n }\n\n Stream.apply(this);\n\n this._parser = new SAXParser(strict, opt);\n this.writable = true;\n this.readable = true;\n\n var me = this;\n\n this._parser.onend = function () {\n me.emit(\"end\");\n };\n\n this._parser.onerror = function (er) {\n me.emit(\"error\", er);\n\n // if didn't throw, then means error was handled.\n // go ahead and clear error, so we can write again.\n me._parser.error = null;\n };\n\n this._decoder = null;\n\n streamWraps.forEach(function (ev) {\n Object.defineProperty(me, \"on\" + ev, {\n get: function () {\n return me._parser[\"on\" + ev];\n },\n set: function (h) {\n if (!h) {\n me.removeAllListeners(ev);\n me._parser[\"on\" + ev] = h;\n return h;\n }\n me.on(ev, h);\n },\n enumerable: true,\n configurable: false,\n });\n });\n }\n\n SAXStream.prototype = Object.create(Stream.prototype, {\n constructor: {\n value: SAXStream,\n },\n });\n\n SAXStream.prototype.write = function (data) {\n this._parser.write(data.toString());\n this.emit(\"data\", data);\n return true;\n };\n\n SAXStream.prototype.end = function (chunk) {\n if (chunk && chunk.length) {\n this.write(chunk);\n }\n this._parser.end();\n return true;\n };\n\n SAXStream.prototype.on = function (ev, handler) {\n var me = this;\n if (!me._parser[\"on\" + ev] && streamWraps.indexOf(ev) !== -1) {\n me._parser[\"on\" + ev] = function () {\n var args =\n arguments.length === 1\n ? [arguments[0]]\n : Array.apply(null, arguments);\n args.splice(0, 0, ev);\n me.emit.apply(me, args);\n };\n }\n\n return Stream.prototype.on.call(me, ev, handler);\n };\n\n // this really needs to be replaced with character classes.\n // XML allows all manner of ridiculous numbers and digits.\n var CDATA = \"[CDATA[\";\n var DOCTYPE = \"DOCTYPE\";\n var XML_NAMESPACE = \"http://www.w3.org/XML/1998/namespace\";\n var XMLNS_NAMESPACE = \"http://www.w3.org/2000/xmlns/\";\n var rootNS = { xml: XML_NAMESPACE, xmlns: XMLNS_NAMESPACE };\n\n // http://www.w3.org/TR/REC-xml/#NT-NameStartChar\n // This implementation works on strings, a single character at a time\n // as such, it cannot ever support astral-plane characters (10000-EFFFF)\n // without a significant breaking change to either this parser, or the\n // JavaScript language. Implementation of an emoji-capable xml parser\n // is left as an exercise for the reader.\n var nameStart =\n /[:_A-Za-z\\u00C0-\\u00D6\\u00D8-\\u00F6\\u00F8-\\u02FF\\u0370-\\u037D\\u037F-\\u1FFF\\u200C-\\u200D\\u2070-\\u218F\\u2C00-\\u2FEF\\u3001-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFFD]/;\n\n var nameBody =\n /[:_A-Za-z\\u00C0-\\u00D6\\u00D8-\\u00F6\\u00F8-\\u02FF\\u0370-\\u037D\\u037F-\\u1FFF\\u200C-\\u200D\\u2070-\\u218F\\u2C00-\\u2FEF\\u3001-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFFD\\u00B7\\u0300-\\u036F\\u203F-\\u2040.\\d-]/;\n\n var entityStart =\n /[#:_A-Za-z\\u00C0-\\u00D6\\u00D8-\\u00F6\\u00F8-\\u02FF\\u0370-\\u037D\\u037F-\\u1FFF\\u200C-\\u200D\\u2070-\\u218F\\u2C00-\\u2FEF\\u3001-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFFD]/;\n var entityBody =\n /[#:_A-Za-z\\u00C0-\\u00D6\\u00D8-\\u00F6\\u00F8-\\u02FF\\u0370-\\u037D\\u037F-\\u1FFF\\u200C-\\u200D\\u2070-\\u218F\\u2C00-\\u2FEF\\u3001-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFFD\\u00B7\\u0300-\\u036F\\u203F-\\u2040.\\d-]/;\n\n function isWhitespace(c) {\n return c === \" \" || c === \"\\n\" || c === \"\\r\" || c === \"\\t\";\n }\n\n function isQuote(c) {\n return c === '\"' || c === \"'\";\n }\n\n function isAttribEnd(c) {\n return c === \">\" || isWhitespace(c);\n }\n\n function isMatch(regex, c) {\n return regex.test(c);\n }\n\n function notMatch(regex, c) {\n return !isMatch(regex, c);\n }\n\n var S = 0;\n sax.STATE = {\n BEGIN: S++, // leading byte order mark or whitespace\n BEGIN_WHITESPACE: S++, // leading whitespace\n TEXT: S++, // general stuff\n TEXT_ENTITY: S++, // &amp and such.\n OPEN_WAKA: S++, // <\n SGML_DECL: S++, // <!BLARG\n SGML_DECL_QUOTED: S++, // <!BLARG foo \"bar\n DOCTYPE: S++, // <!DOCTYPE\n DOCTYPE_QUOTED: S++, // <!DOCTYPE \"//blah\n DOCTYPE_DTD: S++, // <!DOCTYPE \"//blah\" [ ...\n DOCTYPE_DTD_QUOTED: S++, // <!DOCTYPE \"//blah\" [ \"foo\n COMMENT_STARTING: S++, // <!-\n COMMENT: S++, // <!--\n COMMENT_ENDING: S++, // <!-- blah -\n COMMENT_ENDED: S++, // <!-- blah --\n CDATA: S++, // <![CDATA[ something\n CDATA_ENDING: S++, // ]\n CDATA_ENDING_2: S++, // ]]\n PROC_INST: S++, // <?hi\n PROC_INST_BODY: S++, // <?hi there\n PROC_INST_ENDING: S++, // <?hi \"there\" ?\n OPEN_TAG: S++, // <strong\n OPEN_TAG_SLASH: S++, // <strong /\n ATTRIB: S++, // <a\n ATTRIB_NAME: S++, // <a foo\n ATTRIB_NAME_SAW_WHITE: S++, // <a foo _\n ATTRIB_VALUE: S++, // <a foo=\n ATTRIB_VALUE_QUOTED: S++, // <a foo=\"bar\n ATTRIB_VALUE_CLOSED: S++, // <a foo=\"bar\"\n ATTRIB_VALUE_UNQUOTED: S++, // <a foo=bar\n ATTRIB_VALUE_ENTITY_Q: S++, // <foo bar=\"&quot;\"\n ATTRIB_VALUE_ENTITY_U: S++, // <foo bar=&quot\n CLOSE_TAG: S++, // </a\n CLOSE_TAG_SAW_WHITE: S++, // </a >\n SCRIPT: S++, // <script> ...\n SCRIPT_ENDING: S++, // <script> ... <\n };\n\n sax.XML_ENTITIES = {\n amp: \"&\",\n gt: \">\",\n lt: \"<\",\n quot: '\"',\n apos: \"'\",\n };\n\n sax.ENTITIES = {\n amp: \"&\",\n gt: \">\",\n lt: \"<\",\n quot: '\"',\n apos: \"'\",\n AElig: 198,\n Aacute: 193,\n Acirc: 194,\n Agrave: 192,\n Aring: 197,\n Atilde: 195,\n Auml: 196,\n Ccedil: 199,\n ETH: 208,\n Eacute: 201,\n Ecirc: 202,\n Egrave: 200,\n Euml: 203,\n Iacute: 205,\n Icirc: 206,\n Igrave: 204,\n Iuml: 207,\n Ntilde: 209,\n Oacute: 211,\n Ocirc: 212,\n Ograve: 210,\n Oslash: 216,\n Otilde: 213,\n Ouml: 214,\n THORN: 222,\n Uacute: 218,\n Ucirc: 219,\n Ugrave: 217,\n Uuml: 220,\n Yacute: 221,\n aacute: 225,\n acirc: 226,\n aelig: 230,\n agrave: 224,\n aring: 229,\n atilde: 227,\n auml: 228,\n ccedil: 231,\n eacute: 233,\n ecirc: 234,\n egrave: 232,\n eth: 240,\n euml: 235,\n iacute: 237,\n icirc: 238,\n igrave: 236,\n iuml: 239,\n ntilde: 241,\n oacute: 243,\n ocirc: 244,\n ograve: 242,\n oslash: 248,\n otilde: 245,\n ouml: 246,\n szlig: 223,\n thorn: 254,\n uacute: 250,\n ucirc: 251,\n ugrave: 249,\n uuml: 252,\n yacute: 253,\n yuml: 255,\n copy: 169,\n reg: 174,\n nbsp: 160,\n iexcl: 161,\n cent: 162,\n pound: 163,\n curren: 164,\n yen: 165,\n brvbar: 166,\n sect: 167,\n uml: 168,\n ordf: 170,\n laquo: 171,\n not: 172,\n shy: 173,\n macr: 175,\n deg: 176,\n plusmn: 177,\n sup1: 185,\n sup2: 178,\n sup3: 179,\n acute: 180,\n micro: 181,\n para: 182,\n middot: 183,\n cedil: 184,\n ordm: 186,\n raquo: 187,\n frac14: 188,\n frac12: 189,\n frac34: 190,\n iquest: 191,\n times: 215,\n divide: 247,\n OElig: 338,\n oelig: 339,\n Scaron: 352,\n scaron: 353,\n Yuml: 376,\n fnof: 402,\n circ: 710,\n tilde: 732,\n Alpha: 913,\n Beta: 914,\n Gamma: 915,\n Delta: 916,\n Epsilon: 917,\n Zeta: 918,\n Eta: 919,\n Theta: 920,\n Iota: 921,\n Kappa: 922,\n Lambda: 923,\n Mu: 924,\n Nu: 925,\n Xi: 926,\n Omicron: 927,\n Pi: 928,\n Rho: 929,\n Sigma: 931,\n Tau: 932,\n Upsilon: 933,\n Phi: 934,\n Chi: 935,\n Psi: 936,\n Omega: 937,\n alpha: 945,\n beta: 946,\n gamma: 947,\n delta: 948,\n epsilon: 949,\n zeta: 950,\n eta: 951,\n theta: 952,\n iota: 953,\n kappa: 954,\n lambda: 955,\n mu: 956,\n nu: 957,\n xi: 958,\n omicron: 959,\n pi: 960,\n rho: 961,\n sigmaf: 962,\n sigma: 963,\n tau: 964,\n upsilon: 965,\n phi: 966,\n chi: 967,\n psi: 968,\n omega: 969,\n thetasym: 977,\n upsih: 978,\n piv: 982,\n ensp: 8194,\n emsp: 8195,\n thinsp: 8201,\n zwnj: 8204,\n zwj: 8205,\n lrm: 8206,\n rlm: 8207,\n ndash: 8211,\n mdash: 8212,\n lsquo: 8216,\n rsquo: 8217,\n sbquo: 8218,\n ldquo: 8220,\n rdquo: 8221,\n bdquo: 8222,\n dagger: 8224,\n Dagger: 8225,\n bull: 8226,\n hellip: 8230,\n permil: 8240,\n prime: 8242,\n Prime: 8243,\n lsaquo: 8249,\n rsaquo: 8250,\n oline: 8254,\n frasl: 8260,\n euro: 8364,\n image: 8465,\n weierp: 8472,\n real: 8476,\n trade: 8482,\n alefsym: 8501,\n larr: 8592,\n uarr: 8593,\n rarr: 8594,\n darr: 8595,\n harr: 8596,\n crarr: 8629,\n lArr: 8656,\n uArr: 8657,\n rArr: 8658,\n dArr: 8659,\n hArr: 8660,\n forall: 8704,\n part: 8706,\n exist: 8707,\n empty: 8709,\n nabla: 8711,\n isin: 8712,\n notin: 8713,\n ni: 8715,\n prod: 8719,\n sum: 8721,\n minus: 8722,\n lowast: 8727,\n radic: 8730,\n prop: 8733,\n infin: 8734,\n ang: 8736,\n and: 8743,\n or: 8744,\n cap: 8745,\n cup: 8746,\n int: 8747,\n there4: 8756,\n sim: 8764,\n cong: 8773,\n asymp: 8776,\n ne: 8800,\n equiv: 8801,\n le: 8804,\n ge: 8805,\n sub: 8834,\n sup: 8835,\n nsub: 8836,\n sube: 8838,\n supe: 8839,\n oplus: 8853,\n otimes: 8855,\n perp: 8869,\n sdot: 8901,\n lceil: 8968,\n rceil: 8969,\n lfloor: 8970,\n rfloor: 8971,\n lang: 9001,\n rang: 9002,\n loz: 9674,\n spades: 9824,\n clubs: 9827,\n hearts: 9829,\n diams: 9830,\n };\n\n Object.keys(sax.ENTITIES).forEach(function (key) {\n var e = sax.ENTITIES[key];\n var s = typeof e === \"number\" ? String.fromCharCode(e) : e;\n sax.ENTITIES[key] = s;\n });\n\n for (var s in sax.STATE) {\n sax.STATE[sax.STATE[s]] = s;\n }\n\n // shorthand\n S = sax.STATE;\n\n function emit(parser, event, data) {\n parser[event] && parser[event](data);\n }\n\n function emitNode(parser, nodeType, data) {\n if (parser.textNode) closeText(parser);\n emit(parser, nodeType, data);\n }\n\n function closeText(parser) {\n parser.textNode = textopts(parser.opt, parser.textNode);\n if (parser.textNode) emit(parser, \"ontext\", parser.textNode);\n parser.textNode = \"\";\n }\n\n function textopts(opt, text) {\n if (opt.trim) text = text.trim();\n if (opt.normalize) text = text.replace(/\\s+/g, \" \");\n return text;\n }\n\n function error(parser, er) {\n closeText(parser);\n if (parser.trackPosition) {\n er +=\n \"\\nLine: \" +\n parser.line +\n \"\\nColumn: \" +\n parser.column +\n \"\\nChar: \" +\n parser.c;\n }\n er = new Error(er);\n parser.error = er;\n emit(parser, \"onerror\", er);\n return parser;\n }\n\n function end(parser) {\n if (parser.sawRoot && !parser.closedRoot)\n strictFail(parser, \"Unclosed root tag\");\n if (\n parser.state !== S.BEGIN &&\n parser.state !== S.BEGIN_WHITESPACE &&\n parser.state !== S.TEXT\n ) {\n error(parser, \"Unexpected end\");\n }\n closeText(parser);\n parser.c = \"\";\n parser.closed = true;\n emit(parser, \"onend\");\n SAXParser.call(parser, parser.strict, parser.opt);\n return parser;\n }\n\n function strictFail(parser, message) {\n if (typeof parser !== \"object\" || !(parser instanceof SAXParser)) {\n throw new Error(\"bad call to strictFail\");\n }\n if (parser.strict) {\n error(parser, message);\n }\n }\n\n function newTag(parser) {\n if (!parser.strict) parser.tagName = parser.tagName[parser.looseCase]();\n var parent = parser.tags[parser.tags.length - 1] || parser;\n var tag = (parser.tag = { name: parser.tagName, attributes: {} });\n\n // will be overridden if tag contails an xmlns=\"foo\" or xmlns:foo=\"bar\"\n if (parser.opt.xmlns) {\n tag.ns = parent.ns;\n }\n parser.attribList.length = 0;\n emitNode(parser, \"onopentagstart\", tag);\n }\n\n function qname(name, attribute) {\n var i = name.indexOf(\":\");\n var qualName = i < 0 ? [\"\", name] : name.split(\":\");\n var prefix = qualName[0];\n var local = qualName[1];\n\n // <x \"xmlns\"=\"http://foo\">\n if (attribute && name === \"xmlns\") {\n prefix = \"xmlns\";\n local = \"\";\n }\n\n return { prefix: prefix, local: local };\n }\n\n function attrib(parser) {\n if (!parser.strict) {\n parser.attribName = parser.attribName[parser.looseCase]();\n }\n\n if (\n parser.attribList.indexOf(parser.attribName) !== -1 ||\n parser.tag.attributes.hasOwnProperty(parser.attribName)\n ) {\n parser.attribName = parser.attribValue = \"\";\n return;\n }\n\n if (parser.opt.xmlns) {\n var qn = qname(parser.attribName, true);\n var prefix = qn.prefix;\n var local = qn.local;\n\n if (prefix === \"xmlns\") {\n // namespace binding attribute. push the binding into scope\n if (local === \"xml\" && parser.attribValue !== XML_NAMESPACE) {\n strictFail(\n parser,\n \"xml: prefix must be bound to \" +\n XML_NAMESPACE +\n \"\\n\" +\n \"Actual: \" +\n parser.attribValue\n );\n } else if (\n local === \"xmlns\" &&\n parser.attribValue !== XMLNS_NAMESPACE\n ) {\n strictFail(\n parser,\n \"xmlns: prefix must be bound to \" +\n XMLNS_NAMESPACE +\n \"\\n\" +\n \"Actual: \" +\n parser.attribValue\n );\n } else {\n var tag = parser.tag;\n var parent = parser.tags[parser.tags.length - 1] || parser;\n if (tag.ns === parent.ns) {\n tag.ns = Object.create(parent.ns);\n }\n tag.ns[local] = parser.attribValue;\n }\n }\n\n // defer onattribute events until all attributes have been seen\n // so any new bindings can take effect. preserve attribute order\n // so deferred events can be emitted in document order\n parser.attribList.push([parser.attribName, parser.attribValue]);\n } else {\n // in non-xmlns mode, we can emit the event right away\n parser.tag.attributes[parser.attribName] = parser.attribValue;\n emitNode(parser, \"onattribute\", {\n name: parser.attribName,\n value: parser.attribValue,\n });\n }\n\n parser.attribName = parser.attribValue = \"\";\n }\n\n function openTag(parser, selfClosing) {\n if (parser.opt.xmlns) {\n // emit namespace binding events\n var tag = parser.tag;\n\n // add namespace info to tag\n var qn = qname(parser.tagName);\n tag.prefix = qn.prefix;\n tag.local = qn.local;\n tag.uri = tag.ns[qn.prefix] || \"\";\n\n if (tag.prefix && !tag.uri) {\n strictFail(\n parser,\n \"Unbound namespace prefix: \" + JSON.stringify(parser.tagName)\n );\n tag.uri = qn.prefix;\n }\n\n var parent = parser.tags[parser.tags.length - 1] || parser;\n if (tag.ns && parent.ns !== tag.ns) {\n Object.keys(tag.ns).forEach(function (p) {\n emitNode(parser, \"onopennamespace\", {\n prefix: p,\n uri: tag.ns[p],\n });\n });\n }\n\n // handle deferred onattribute events\n // Note: do not apply default ns to attributes:\n // http://www.w3.org/TR/REC-xml-names/#defaulting\n for (var i = 0, l = parser.attribList.length; i < l; i++) {\n var nv = parser.attribList[i];\n var name = nv[0];\n var value = nv[1];\n var qualName = qname(name, true);\n var prefix = qualName.prefix;\n var local = qualName.local;\n var uri = prefix === \"\" ? \"\" : tag.ns[prefix] || \"\";\n var a = {\n name: name,\n value: value,\n prefix: prefix,\n local: local,\n uri: uri,\n };\n\n // if there's any attributes with an undefined namespace,\n // then fail on them now.\n if (prefix && prefix !== \"xmlns\" && !uri) {\n strictFail(\n parser,\n \"Unbound namespace prefix: \" + JSON.stringify(prefix)\n );\n a.uri = prefix;\n }\n parser.tag.attributes[name] = a;\n emitNode(parser, \"onattribute\", a);\n }\n parser.attribList.length = 0;\n }\n\n parser.tag.isSelfClosing = !!selfClosing;\n\n // process the tag\n parser.sawRoot = true;\n parser.tags.push(parser.tag);\n emitNode(parser, \"onopentag\", parser.tag);\n if (!selfClosing) {\n // special case for <script> in non-strict mode.\n if (!parser.noscript && parser.tagName.toLowerCase() === \"script\") {\n parser.state = S.SCRIPT;\n } else {\n parser.state = S.TEXT;\n }\n parser.tag = null;\n parser.tagName = \"\";\n }\n parser.attribName = parser.attribValue = \"\";\n parser.attribList.length = 0;\n }\n\n function closeTag(parser) {\n if (!parser.tagName) {\n strictFail(parser, \"Weird empty close tag.\");\n parser.textNode += \"</>\";\n parser.state = S.TEXT;\n return;\n }\n\n if (parser.script) {\n if (parser.tagName !== \"script\") {\n parser.script += \"</\" + parser.tagName + \">\";\n parser.tagName = \"\";\n parser.state = S.SCRIPT;\n return;\n }\n emitNode(parser, \"onscript\", parser.script);\n parser.script = \"\";\n }\n\n // first make sure that the closing tag actually exists.\n // <a><b></c></b></a> will close everything, otherwise.\n var t = parser.tags.length;\n var tagName = parser.tagName;\n if (!parser.strict) {\n tagName = tagName[parser.looseCase]();\n }\n var closeTo = tagName;\n while (t--) {\n var close = parser.tags[t];\n if (close.name !== closeTo) {\n // fail the first time in strict mode\n strictFail(parser, \"Unexpected close tag\");\n } else {\n break;\n }\n }\n\n // didn't find it. we already failed for strict, so just abort.\n if (t < 0) {\n strictFail(parser, \"Unmatched closing tag: \" + parser.tagName);\n parser.textNode += \"</\" + parser.tagName + \">\";\n parser.state = S.TEXT;\n return;\n }\n parser.tagName = tagName;\n var s = parser.tags.length;\n while (s-- > t) {\n var tag = (parser.tag = parser.tags.pop());\n parser.tagName = parser.tag.name;\n emitNode(parser, \"onclosetag\", parser.tagName);\n\n var x = {};\n for (var i in tag.ns) {\n x[i] = tag.ns[i];\n }\n\n var parent = parser.tags[parser.tags.length - 1] || parser;\n if (parser.opt.xmlns && tag.ns !== parent.ns) {\n // remove namespace bindings introduced by tag\n Object.keys(tag.ns).forEach(function (p) {\n var n = tag.ns[p];\n emitNode(parser, \"onclosenamespace\", { prefix: p, uri: n });\n });\n }\n }\n if (t === 0) parser.closedRoot = true;\n parser.tagName = parser.attribValue = parser.attribName = \"\";\n parser.attribList.length = 0;\n parser.state = S.TEXT;\n }\n\n function parseEntity(parser) {\n var entity = parser.entity;\n var entityLC = entity.toLowerCase();\n var num;\n var numStr = \"\";\n\n if (parser.ENTITIES[entity]) {\n return parser.ENTITIES[entity];\n }\n if (parser.ENTITIES[entityLC]) {\n return parser.ENTITIES[entityLC];\n }\n entity = entityLC;\n if (entity.charAt(0) === \"#\") {\n if (entity.charAt(1) === \"x\") {\n entity = entity.slice(2);\n num = parseInt(entity, 16);\n numStr = num.toString(16);\n } else {\n entity = entity.slice(1);\n num = parseInt(entity, 10);\n numStr = num.toString(10);\n }\n }\n entity = entity.replace(/^0+/, \"\");\n if (isNaN(num) || numStr.toLowerCase() !== entity) {\n strictFail(parser, \"Invalid character entity\");\n return \"&\" + parser.entity + \";\";\n }\n\n return String.fromCodePoint(num);\n }\n\n function beginWhiteSpace(parser, c) {\n if (c === \"<\") {\n parser.state = S.OPEN_WAKA;\n parser.startTagPosition = parser.position;\n } else if (!isWhitespace(c)) {\n // have to process this as a text node.\n // weird, but happens.\n strictFail(parser, \"Non-whitespace before first tag.\");\n parser.textNode = c;\n parser.state = S.TEXT;\n }\n }\n\n function charAt(chunk, i) {\n var result = \"\";\n if (i < chunk.length) {\n result = chunk.charAt(i);\n }\n return result;\n }\n\n function write(chunk) {\n var parser = this;\n if (this.error) {\n throw this.error;\n }\n if (parser.closed) {\n return error(\n parser,\n \"Cannot write after close. Assign an onready handler.\"\n );\n }\n if (chunk === null) {\n return end(parser);\n }\n if (typeof chunk === \"object\") {\n chunk = chunk.toString();\n }\n var i = 0;\n var c = \"\";\n while (true) {\n c = charAt(chunk, i++);\n parser.c = c;\n\n if (!c) {\n break;\n }\n\n if (parser.trackPosition) {\n parser.position++;\n if (c === \"\\n\") {\n parser.line++;\n parser.column = 0;\n } else {\n parser.column++;\n }\n }\n\n switch (parser.state) {\n case S.BEGIN:\n parser.state = S.BEGIN_WHITESPACE;\n if (c === \"\\uFEFF\") {\n continue;\n }\n beginWhiteSpace(parser, c);\n continue;\n\n case S.BEGIN_WHITESPACE:\n beginWhiteSpace(parser, c);\n continue;\n\n case S.TEXT:\n if (parser.sawRoot && !parser.closedRoot) {\n var starti = i - 1;\n while (c && c !== \"<\" && c !== \"&\") {\n c = charAt(chunk, i++);\n if (c && parser.trackPosition) {\n parser.position++;\n if (c === \"\\n\") {\n parser.line++;\n parser.column = 0;\n } else {\n parser.column++;\n }\n }\n }\n parser.textNode += chunk.substring(starti, i - 1);\n }\n if (\n c === \"<\" &&\n !(parser.sawRoot && parser.closedRoot && !parser.strict)\n ) {\n parser.state = S.OPEN_WAKA;\n parser.startTagPosition = parser.position;\n } else {\n if (!isWhitespace(c) && (!parser.sawRoot || parser.closedRoot)) {\n strictFail(parser, \"Text data outside of root node.\");\n }\n if (c === \"&\") {\n parser.state = S.TEXT_ENTITY;\n } else {\n parser.textNode += c;\n }\n }\n continue;\n\n case S.SCRIPT:\n // only non-strict\n if (c === \"<\") {\n parser.state = S.SCRIPT_ENDING;\n } else {\n parser.script += c;\n }\n continue;\n\n case S.SCRIPT_ENDING:\n if (c === \"/\") {\n parser.state = S.CLOSE_TAG;\n } else {\n parser.script += \"<\" + c;\n parser.state = S.SCRIPT;\n }\n continue;\n\n case S.OPEN_WAKA:\n // either a /, ?, !, or text is coming next.\n if (c === \"!\") {\n parser.state = S.SGML_DECL;\n parser.sgmlDecl = \"\";\n } else if (isWhitespace(c)) {\n // wait for it...\n } else if (isMatch(nameStart, c)) {\n parser.state = S.OPEN_TAG;\n parser.tagName = c;\n } else if (c === \"/\") {\n parser.state = S.CLOSE_TAG;\n parser.tagName = \"\";\n } else if (c === \"?\") {\n parser.state = S.PROC_INST;\n parser.procInstName = parser.procInstBody = \"\";\n } else {\n strictFail(parser, \"Unencoded <\");\n // if there was some whitespace, then add that in.\n if (parser.startTagPosition + 1 < parser.position) {\n var pad = parser.position - parser.startTagPosition;\n c = new Array(pad).join(\" \") + c;\n }\n parser.textNode += \"<\" + c;\n parser.state = S.TEXT;\n }\n continue;\n\n case S.SGML_DECL:\n if ((parser.sgmlDecl + c).toUpperCase() === CDATA) {\n emitNode(parser, \"onopencdata\");\n parser.state = S.CDATA;\n parser.sgmlDecl = \"\";\n parser.cdata = \"\";\n } else if (parser.sgmlDecl + c === \"--\") {\n parser.state = S.COMMENT;\n parser.comment = \"\";\n parser.sgmlDecl = \"\";\n } else if ((parser.sgmlDecl + c).toUpperCase() === DOCTYPE) {\n parser.state = S.DOCTYPE;\n if (parser.doctype || parser.sawRoot) {\n strictFail(parser, \"Inappropriately located doctype declaration\");\n }\n parser.doctype = \"\";\n parser.sgmlDecl = \"\";\n } else if (c === \">\") {\n emitNode(parser, \"onsgmldeclaration\", parser.sgmlDecl);\n parser.sgmlDecl = \"\";\n parser.state = S.TEXT;\n } else if (isQuote(c)) {\n parser.state = S.SGML_DECL_QUOTED;\n parser.sgmlDecl += c;\n } else {\n parser.sgmlDecl += c;\n }\n continue;\n\n case S.SGML_DECL_QUOTED:\n if (c === parser.q) {\n parser.state = S.SGML_DECL;\n parser.q = \"\";\n }\n parser.sgmlDecl += c;\n continue;\n\n case S.DOCTYPE:\n if (c === \">\") {\n parser.state = S.TEXT;\n emitNode(parser, \"ondoctype\", parser.doctype);\n parser.doctype = true; // just remember that we saw it.\n } else {\n parser.doctype += c;\n if (c === \"[\") {\n parser.state = S.DOCTYPE_DTD;\n } else if (isQuote(c)) {\n parser.state = S.DOCTYPE_QUOTED;\n parser.q = c;\n }\n }\n continue;\n\n case S.DOCTYPE_QUOTED:\n parser.doctype += c;\n if (c === parser.q) {\n parser.q = \"\";\n parser.state = S.DOCTYPE;\n }\n continue;\n\n case S.DOCTYPE_DTD:\n parser.doctype += c;\n if (c === \"]\") {\n parser.state = S.DOCTYPE;\n } else if (isQuote(c)) {\n parser.state = S.DOCTYPE_DTD_QUOTED;\n parser.q = c;\n }\n continue;\n\n case S.DOCTYPE_DTD_QUOTED:\n parser.doctype += c;\n if (c === parser.q) {\n parser.state = S.DOCTYPE_DTD;\n parser.q = \"\";\n }\n continue;\n\n case S.COMMENT:\n if (c === \"-\") {\n parser.state = S.COMMENT_ENDING;\n } else {\n parser.comment += c;\n }\n continue;\n\n case S.COMMENT_ENDING:\n if (c === \"-\") {\n parser.state = S.COMMENT_ENDED;\n parser.comment = textopts(parser.opt, parser.comment);\n if (parser.comment) {\n emitNode(parser, \"oncomment\", parser.comment);\n }\n parser.comment = \"\";\n } else {\n parser.comment += \"-\" + c;\n parser.state = S.COMMENT;\n }\n continue;\n\n case S.COMMENT_ENDED:\n if (c !== \">\") {\n strictFail(parser, \"Malformed comment\");\n // allow <!-- blah -- bloo --> in non-strict mode,\n // which is a comment of \" blah -- bloo \"\n parser.comment += \"--\" + c;\n parser.state = S.COMMENT;\n } else {\n parser.state = S.TEXT;\n }\n continue;\n\n case S.CDATA:\n if (c === \"]\") {\n parser.state = S.CDATA_ENDING;\n } else {\n parser.cdata += c;\n }\n continue;\n\n case S.CDATA_ENDING:\n if (c === \"]\") {\n parser.state = S.CDATA_ENDING_2;\n } else {\n parser.cdata += \"]\" + c;\n parser.state = S.CDATA;\n }\n continue;\n\n case S.CDATA_ENDING_2:\n if (c === \">\") {\n if (parser.cdata) {\n emitNode(parser, \"oncdata\", parser.cdata);\n }\n emitNode(parser, \"onclosecdata\");\n parser.cdata = \"\";\n parser.state = S.TEXT;\n } else if (c === \"]\") {\n parser.cdata += \"]\";\n } else {\n parser.cdata += \"]]\" + c;\n parser.state = S.CDATA;\n }\n continue;\n\n case S.PROC_INST:\n if (c === \"?\") {\n parser.state = S.PROC_INST_ENDING;\n } else if (isWhitespace(c)) {\n parser.state = S.PROC_INST_BODY;\n } else {\n parser.procInstName += c;\n }\n continue;\n\n case S.PROC_INST_BODY:\n if (!parser.procInstBody && isWhitespace(c)) {\n continue;\n } else if (c === \"?\") {\n parser.state = S.PROC_INST_ENDING;\n } else {\n parser.procInstBody += c;\n }\n continue;\n\n case S.PROC_INST_ENDING:\n if (c === \">\") {\n emitNode(parser, \"onprocessinginstruction\", {\n name: parser.procInstName,\n body: parser.procInstBody,\n });\n parser.procInstName = parser.procInstBody = \"\";\n parser.state = S.TEXT;\n } else {\n parser.procInstBody += \"?\" + c;\n parser.state = S.PROC_INST_BODY;\n }\n continue;\n\n case S.OPEN_TAG:\n if (isMatch(nameBody, c)) {\n parser.tagName += c;\n } else {\n newTag(parser);\n if (c === \">\") {\n openTag(parser);\n } else if (c === \"/\") {\n parser.state = S.OPEN_TAG_SLASH;\n } else {\n if (!isWhitespace(c)) {\n strictFail(parser, \"Invalid character in tag name\");\n }\n parser.state = S.ATTRIB;\n }\n }\n continue;\n\n case S.OPEN_TAG_SLASH:\n if (c === \">\") {\n openTag(parser, true);\n closeTag(parser);\n } else {\n strictFail(\n parser,\n \"Forward-slash in opening tag not followed by >\"\n );\n parser.state = S.ATTRIB;\n }\n continue;\n\n case S.ATTRIB:\n // haven't read the attribute name yet.\n if (isWhitespace(c)) {\n continue;\n } else if (c === \">\") {\n openTag(parser);\n } else if (c === \"/\") {\n parser.state = S.OPEN_TAG_SLASH;\n } else if (isMatch(nameStart, c)) {\n parser.attribName = c;\n parser.attribValue = \"\";\n parser.state = S.ATTRIB_NAME;\n } else {\n strictFail(parser, \"Invalid attribute name\");\n }\n continue;\n\n case S.ATTRIB_NAME:\n if (c === \"=\") {\n parser.state = S.ATTRIB_VALUE;\n } else if (c === \">\") {\n strictFail(parser, \"Attribute without value\");\n parser.attribValue = parser.attribName;\n attrib(parser);\n openTag(parser);\n } else if (isWhitespace(c)) {\n parser.state = S.ATTRIB_NAME_SAW_WHITE;\n } else if (isMatch(nameBody, c)) {\n parser.attribName += c;\n } else {\n strictFail(parser, \"Invalid attribute name\");\n }\n continue;\n\n case S.ATTRIB_NAME_SAW_WHITE:\n if (c === \"=\") {\n parser.state = S.ATTRIB_VALUE;\n } else if (isWhitespace(c)) {\n continue;\n } else {\n strictFail(parser, \"Attribute without value\");\n parser.tag.attributes[parser.attribName] = \"\";\n parser.attribValue = \"\";\n emitNode(parser, \"onattribute\", {\n name: parser.attribName,\n value: \"\",\n });\n parser.attribName = \"\";\n if (c === \">\") {\n openTag(parser);\n } else if (isMatch(nameStart, c)) {\n parser.attribName = c;\n parser.state = S.ATTRIB_NAME;\n } else {\n strictFail(parser, \"Invalid attribute name\");\n parser.state = S.ATTRIB;\n }\n }\n continue;\n\n case S.ATTRIB_VALUE:\n if (isWhitespace(c)) {\n continue;\n } else if (isQuote(c)) {\n parser.q = c;\n parser.state = S.ATTRIB_VALUE_QUOTED;\n } else {\n strictFail(parser, \"Unquoted attribute value\");\n parser.state = S.ATTRIB_VALUE_UNQUOTED;\n parser.attribValue = c;\n }\n continue;\n\n case S.ATTRIB_VALUE_QUOTED:\n if (c !== parser.q) {\n if (c === \"&\") {\n parser.state = S.ATTRIB_VALUE_ENTITY_Q;\n } else {\n parser.attribValue += c;\n }\n continue;\n }\n attrib(parser);\n parser.q = \"\";\n parser.state = S.ATTRIB_VALUE_CLOSED;\n continue;\n\n case S.ATTRIB_VALUE_CLOSED:\n if (isWhitespace(c)) {\n parser.state = S.ATTRIB;\n } else if (c === \">\") {\n openTag(parser);\n } else if (c === \"/\") {\n parser.state = S.OPEN_TAG_SLASH;\n } else if (isMatch(nameStart, c)) {\n strictFail(parser, \"No whitespace between attributes\");\n parser.attribName = c;\n parser.attribValue = \"\";\n parser.state = S.ATTRIB_NAME;\n } else {\n strictFail(parser, \"Invalid attribute name\");\n }\n continue;\n\n case S.ATTRIB_VALUE_UNQUOTED:\n if (!isAttribEnd(c)) {\n if (c === \"&\") {\n parser.state = S.ATTRIB_VALUE_ENTITY_U;\n } else {\n parser.attribValue += c;\n }\n continue;\n }\n attrib(parser);\n if (c === \">\") {\n openTag(parser);\n } else {\n parser.state = S.ATTRIB;\n }\n continue;\n\n case S.CLOSE_TAG:\n if (!parser.tagName) {\n if (isWhitespace(c)) {\n continue;\n } else if (notMatch(nameStart, c)) {\n if (parser.script) {\n parser.script += \"</\" + c;\n parser.state = S.SCRIPT;\n } else {\n strictFail(parser, \"Invalid tagname in closing tag.\");\n }\n } else {\n parser.tagName = c;\n }\n } else if (c === \">\") {\n closeTag(parser);\n } else if (isMatch(nameBody, c)) {\n parser.tagName += c;\n } else if (parser.script) {\n parser.script += \"</\" + parser.tagName;\n parser.tagName = \"\";\n parser.state = S.SCRIPT;\n } else {\n if (!isWhitespace(c)) {\n strictFail(parser, \"Invalid tagname in closing tag\");\n }\n parser.state = S.CLOSE_TAG_SAW_WHITE;\n }\n continue;\n\n case S.CLOSE_TAG_SAW_WHITE:\n if (isWhitespace(c)) {\n continue;\n }\n if (c === \">\") {\n closeTag(parser);\n } else {\n strictFail(parser, \"Invalid characters in closing tag\");\n }\n continue;\n\n case S.TEXT_ENTITY:\n case S.ATTRIB_VALUE_ENTITY_Q:\n case S.ATTRIB_VALUE_ENTITY_U:\n var returnState;\n var buffer;\n switch (parser.state) {\n case S.TEXT_ENTITY:\n returnState = S.TEXT;\n buffer = \"textNode\";\n break;\n\n case S.ATTRIB_VALUE_ENTITY_Q:\n returnState = S.ATTRIB_VALUE_QUOTED;\n buffer = \"attribValue\";\n break;\n\n case S.ATTRIB_VALUE_ENTITY_U:\n returnState = S.ATTRIB_VALUE_UNQUOTED;\n buffer = \"attribValue\";\n break;\n }\n\n if (c === \";\") {\n if (parser.opt.unparsedEntities) {\n var parsedEntity = parseEntity(parser);\n parser.entity = \"\";\n parser.state = returnState;\n parser.write(parsedEntity);\n } else {\n parser[buffer] += parseEntity(parser);\n parser.entity = \"\";\n parser.state = returnState;\n }\n } else if (\n isMatch(parser.entity.length ? entityBody : entityStart, c)\n ) {\n parser.entity += c;\n } else {\n strictFail(parser, \"Invalid character in entity name\");\n parser[buffer] += \"&\" + parser.entity + c;\n parser.entity = \"\";\n parser.state = returnState;\n }\n\n continue;\n\n default: /* istanbul ignore next */ {\n throw new Error(parser, \"Unknown state: \" + parser.state);\n }\n }\n } // while\n\n if (parser.position >= parser.bufferCheckPosition) {\n checkBufferLength(parser);\n }\n return parser;\n }\n\n /*! http://mths.be/fromcodepoint v0.1.0 by @mathias */\n /* istanbul ignore next */\n if (!String.fromCodePoint) {\n (function () {\n var stringFromCharCode = String.fromCharCode;\n var floor = Math.floor;\n var fromCodePoint = function () {\n var MAX_SIZE = 0x4000;\n var codeUnits = [];\n var highSurrogate;\n var lowSurrogate;\n var index = -1;\n var length = arguments.length;\n if (!length) {\n return \"\";\n }\n var result = \"\";\n while (++index < length) {\n var codePoint = Number(arguments[index]);\n if (\n !isFinite(codePoint) || // `NaN`, `+Infinity`, or `-Infinity`\n codePoint < 0 || // not a valid Unicode code point\n codePoint > 0x10ffff || // not a valid Unicode code point\n floor(codePoint) !== codePoint // not an integer\n ) {\n throw RangeError(\"Invalid code point: \" + codePoint);\n }\n if (codePoint <= 0xffff) {\n // BMP code point\n codeUnits.push(codePoint);\n } else {\n // Astral code point; split in surrogate halves\n // http://mathiasbynens.be/notes/javascript-encoding#surrogate-formulae\n codePoint -= 0x10000;\n highSurrogate = (codePoint >> 10) + 0xd800;\n lowSurrogate = (codePoint % 0x400) + 0xdc00;\n codeUnits.push(highSurrogate, lowSurrogate);\n }\n if (index + 1 === length || codeUnits.length > MAX_SIZE) {\n result += stringFromCharCode.apply(null, codeUnits);\n codeUnits.length = 0;\n }\n }\n return result;\n };\n /* istanbul ignore next */\n if (Object.defineProperty) {\n Object.defineProperty(String, \"fromCodePoint\", {\n value: fromCodePoint,\n configurable: true,\n writable: true,\n });\n } else {\n String.fromCodePoint = fromCodePoint;\n }\n })();\n }\n return sax;\n};\n\nconst sax = /** #__PURE__ */ initializeSax();\n\nexport { sax };\n"],"mappings":"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"}
@@ -92,10 +92,11 @@ var FakeStreamingChatModel = class FakeStreamingChatModel extends require_langua
92
92
  }
93
93
  async _generate(messages, _options, _runManager) {
94
94
  if (this.thrownErrorString) throw new Error(this.thrownErrorString);
95
+ const content = this.responses?.[0]?.content ?? messages[0].content ?? "";
95
96
  return { generations: [{
96
97
  text: "",
97
98
  message: new require_ai.AIMessage({
98
- content: this.responses?.[0]?.content ?? messages[0].content ?? "",
99
+ content,
99
100
  tool_calls: this.chunks?.[0]?.tool_calls
100
101
  })
101
102
  }] };
@@ -1 +1 @@
1
- {"version":3,"file":"chat_models.cjs","names":["BaseChatModel","AIMessage","toJsonSchema","ChatGenerationChunk","AIMessageChunk","RunnableLambda"],"sources":["../../../src/utils/testing/chat_models.ts"],"sourcesContent":["import { CallbackManagerForLLMRun } from \"../../callbacks/manager.js\";\nimport {\n BaseChatModel,\n BaseChatModelCallOptions,\n BaseChatModelParams,\n} from \"../../language_models/chat_models.js\";\nimport { BaseLLMParams } from \"../../language_models/llms.js\";\nimport {\n BaseMessage,\n AIMessage,\n AIMessageChunk,\n} from \"../../messages/index.js\";\nimport { type ChatResult, ChatGenerationChunk } from \"../../outputs.js\";\nimport { Runnable, RunnableLambda } from \"../../runnables/base.js\";\nimport { StructuredTool } from \"../../tools/index.js\";\nimport {\n StructuredOutputMethodParams,\n BaseLanguageModelInput,\n StructuredOutputMethodOptions,\n} from \"../../language_models/base.js\";\n\nimport { toJsonSchema } from \"../json_schema.js\";\nimport { InteropZodType } from \"../types/zod.js\";\n\n/** Minimal shape actually needed by `bindTools` */\nexport interface ToolSpec {\n name: string;\n description?: string;\n schema: InteropZodType | Record<string, unknown>; // Either a Zod schema *or* a plain JSON-Schema object\n}\n\n/**\n * Interface specific to the Fake Streaming Chat model.\n */\nexport interface FakeStreamingChatModelCallOptions extends BaseChatModelCallOptions {}\n/**\n * Interface for the Constructor-field specific to the Fake Streaming Chat model (all optional because we fill in defaults).\n */\nexport interface FakeStreamingChatModelFields extends BaseChatModelParams {\n /** Milliseconds to pause between fallback char-by-char chunks */\n sleep?: number;\n\n /** Full AI messages to fall back to when no `chunks` supplied */\n responses?: BaseMessage[];\n\n /** Exact chunks to emit (can include tool-call deltas) */\n chunks?: AIMessageChunk[];\n\n /** How tool specs are formatted in `bindTools` */\n toolStyle?: \"openai\" | \"anthropic\" | \"bedrock\" | \"google\";\n\n /** Throw this error instead of streaming (useful in tests) */\n thrownErrorString?: string;\n}\n\nexport class FakeChatModel extends BaseChatModel {\n _combineLLMOutput() {\n return [];\n }\n\n _llmType(): string {\n return \"fake\";\n }\n\n async _generate(\n messages: BaseMessage[],\n options?: this[\"ParsedCallOptions\"],\n runManager?: CallbackManagerForLLMRun\n ): Promise<ChatResult> {\n if (options?.stop?.length) {\n return {\n generations: [\n {\n message: new AIMessage(options.stop[0]),\n text: options.stop[0],\n },\n ],\n };\n }\n const text = messages\n .map((m) => {\n if (typeof m.content === \"string\") {\n return m.content;\n }\n return JSON.stringify(m.content, null, 2);\n })\n .join(\"\\n\");\n await runManager?.handleLLMNewToken(text);\n return {\n generations: [\n {\n message: new AIMessage(text),\n text,\n },\n ],\n llmOutput: {},\n };\n }\n}\n\nexport class FakeStreamingChatModel extends BaseChatModel<FakeStreamingChatModelCallOptions> {\n sleep = 50;\n\n responses: BaseMessage[] = [];\n\n chunks: AIMessageChunk[] = [];\n\n toolStyle: \"openai\" | \"anthropic\" | \"bedrock\" | \"google\" = \"openai\";\n\n thrownErrorString?: string;\n\n private tools: (StructuredTool | ToolSpec)[] = [];\n\n constructor({\n sleep = 50,\n responses = [],\n chunks = [],\n toolStyle = \"openai\",\n thrownErrorString,\n ...rest\n }: FakeStreamingChatModelFields & BaseLLMParams) {\n super(rest);\n this.sleep = sleep;\n this.responses = responses;\n this.chunks = chunks;\n this.toolStyle = toolStyle;\n this.thrownErrorString = thrownErrorString;\n }\n\n _llmType() {\n return \"fake\";\n }\n\n bindTools(tools: (StructuredTool | ToolSpec)[]) {\n const merged = [...this.tools, ...tools];\n\n const toolDicts = merged.map((t) => {\n switch (this.toolStyle) {\n case \"openai\":\n return {\n type: \"function\",\n function: {\n name: t.name,\n description: t.description,\n parameters: toJsonSchema(t.schema),\n },\n };\n case \"anthropic\":\n return {\n name: t.name,\n description: t.description,\n input_schema: toJsonSchema(t.schema),\n };\n case \"bedrock\":\n return {\n toolSpec: {\n name: t.name,\n description: t.description,\n inputSchema: toJsonSchema(t.schema),\n },\n };\n case \"google\":\n return {\n name: t.name,\n description: t.description,\n parameters: toJsonSchema(t.schema),\n };\n default:\n throw new Error(`Unsupported tool style: ${this.toolStyle}`);\n }\n });\n\n const wrapped =\n this.toolStyle === \"google\"\n ? [{ functionDeclarations: toolDicts }]\n : toolDicts;\n\n /* creating a *new* instance – mirrors LangChain .bind semantics for type-safety and avoiding noise */\n const next = new FakeStreamingChatModel({\n sleep: this.sleep,\n responses: this.responses,\n chunks: this.chunks,\n toolStyle: this.toolStyle,\n thrownErrorString: this.thrownErrorString,\n });\n next.tools = merged;\n\n return next.withConfig({ tools: wrapped } as BaseChatModelCallOptions);\n }\n\n async _generate(\n messages: BaseMessage[],\n _options: this[\"ParsedCallOptions\"],\n _runManager?: CallbackManagerForLLMRun\n ): Promise<ChatResult> {\n if (this.thrownErrorString) {\n throw new Error(this.thrownErrorString);\n }\n\n const content = this.responses?.[0]?.content ?? messages[0].content ?? \"\";\n\n const generation: ChatResult = {\n generations: [\n {\n text: \"\",\n message: new AIMessage({\n content,\n tool_calls: this.chunks?.[0]?.tool_calls,\n }),\n },\n ],\n };\n\n return generation;\n }\n\n async *_streamResponseChunks(\n _messages: BaseMessage[],\n options: this[\"ParsedCallOptions\"],\n runManager?: CallbackManagerForLLMRun\n ): AsyncGenerator<ChatGenerationChunk> {\n if (this.thrownErrorString) {\n throw new Error(this.thrownErrorString);\n }\n if (this.chunks?.length) {\n for (const msgChunk of this.chunks) {\n const cg = new ChatGenerationChunk({\n message: new AIMessageChunk({\n content: msgChunk.content,\n tool_calls: msgChunk.tool_calls,\n additional_kwargs: msgChunk.additional_kwargs ?? {},\n }),\n text: msgChunk.content?.toString() ?? \"\",\n });\n\n if (options.signal?.aborted) break;\n yield cg;\n await runManager?.handleLLMNewToken(\n msgChunk.content as string,\n undefined,\n undefined,\n undefined,\n undefined,\n { chunk: cg }\n );\n }\n return;\n }\n\n const fallback =\n this.responses?.[0] ??\n new AIMessage(\n typeof _messages[0].content === \"string\" ? _messages[0].content : \"\"\n );\n const text = typeof fallback.content === \"string\" ? fallback.content : \"\";\n\n for (const ch of text) {\n await new Promise((r) => setTimeout(r, this.sleep));\n const cg = new ChatGenerationChunk({\n message: new AIMessageChunk({ content: ch }),\n text: ch,\n });\n if (options.signal?.aborted) break;\n yield cg;\n await runManager?.handleLLMNewToken(\n ch,\n undefined,\n undefined,\n undefined,\n undefined,\n { chunk: cg }\n );\n }\n }\n}\n\n/**\n * Interface for the input parameters specific to the Fake List Chat model.\n */\nexport interface FakeChatInput extends BaseChatModelParams {\n /** Responses to return */\n responses: string[];\n\n /** Time to sleep in milliseconds between responses */\n sleep?: number;\n\n emitCustomEvent?: boolean;\n\n /**\n * Generation info to include on the last chunk during streaming.\n * This gets merged into response_metadata by the base chat model.\n * Useful for testing response_metadata propagation (e.g., finish_reason).\n */\n generationInfo?: Record<string, unknown>;\n}\n\nexport interface FakeListChatModelCallOptions extends BaseChatModelCallOptions {\n thrownErrorString?: string;\n}\n\n/**\n * A fake Chat Model that returns a predefined list of responses. It can be used\n * for testing purposes.\n * @example\n * ```typescript\n * const chat = new FakeListChatModel({\n * responses: [\"I'll callback later.\", \"You 'console' them!\"]\n * });\n *\n * const firstMessage = new HumanMessage(\"You want to hear a JavaScript joke?\");\n * const secondMessage = new HumanMessage(\"How do you cheer up a JavaScript developer?\");\n *\n * // Call the chat model with a message and log the response\n * const firstResponse = await chat.call([firstMessage]);\n * console.log({ firstResponse });\n *\n * const secondResponse = await chat.call([secondMessage]);\n * console.log({ secondResponse });\n * ```\n */\nexport class FakeListChatModel extends BaseChatModel<FakeListChatModelCallOptions> {\n static lc_name() {\n return \"FakeListChatModel\";\n }\n\n lc_serializable = true;\n\n responses: string[];\n\n i = 0;\n\n sleep?: number;\n\n emitCustomEvent = false;\n\n generationInfo?: Record<string, unknown>;\n\n private tools: (StructuredTool | ToolSpec)[] = [];\n\n toolStyle: \"openai\" | \"anthropic\" | \"bedrock\" | \"google\" = \"openai\";\n\n constructor(params: FakeChatInput) {\n super(params);\n const { responses, sleep, emitCustomEvent, generationInfo } = params;\n this.responses = responses;\n this.sleep = sleep;\n this.emitCustomEvent = emitCustomEvent ?? this.emitCustomEvent;\n this.generationInfo = generationInfo;\n }\n\n _combineLLMOutput() {\n return [];\n }\n\n _llmType(): string {\n return \"fake-list\";\n }\n\n async _generate(\n _messages: BaseMessage[],\n options?: this[\"ParsedCallOptions\"],\n runManager?: CallbackManagerForLLMRun\n ): Promise<ChatResult> {\n await this._sleepIfRequested();\n if (options?.thrownErrorString) {\n throw new Error(options.thrownErrorString);\n }\n if (this.emitCustomEvent) {\n await runManager?.handleCustomEvent(\"some_test_event\", {\n someval: true,\n });\n }\n\n if (options?.stop?.length) {\n return {\n generations: [this._formatGeneration(options.stop[0])],\n };\n } else {\n const response = this._currentResponse();\n this._incrementResponse();\n\n return {\n generations: [this._formatGeneration(response)],\n llmOutput: {},\n };\n }\n }\n\n _formatGeneration(text: string) {\n return {\n message: new AIMessage(text),\n text,\n };\n }\n\n async *_streamResponseChunks(\n _messages: BaseMessage[],\n options: this[\"ParsedCallOptions\"],\n runManager?: CallbackManagerForLLMRun\n ): AsyncGenerator<ChatGenerationChunk> {\n const response = this._currentResponse();\n this._incrementResponse();\n if (this.emitCustomEvent) {\n await runManager?.handleCustomEvent(\"some_test_event\", {\n someval: true,\n });\n }\n\n const responseChars = [...response];\n for (let i = 0; i < responseChars.length; i++) {\n const text = responseChars[i];\n const isLastChunk = i === responseChars.length - 1;\n await this._sleepIfRequested();\n if (options?.thrownErrorString) {\n throw new Error(options.thrownErrorString);\n }\n // Include generationInfo on the last chunk (like real providers do)\n // This gets merged into response_metadata by the base chat model\n const chunk = this._createResponseChunk(\n text,\n isLastChunk ? this.generationInfo : undefined\n );\n if (options.signal?.aborted) break;\n yield chunk;\n // oxlint-disable-next-line no-void\n void runManager?.handleLLMNewToken(text);\n }\n }\n\n async _sleepIfRequested() {\n if (this.sleep !== undefined) {\n await this._sleep();\n }\n }\n\n async _sleep() {\n return new Promise<void>((resolve) => {\n setTimeout(() => resolve(), this.sleep);\n });\n }\n\n _createResponseChunk(\n text: string,\n // oxlint-disable-next-line @typescript-eslint/no-explicit-any\n generationInfo?: Record<string, any>\n ): ChatGenerationChunk {\n return new ChatGenerationChunk({\n message: new AIMessageChunk({ content: text }),\n text,\n generationInfo,\n });\n }\n\n _currentResponse() {\n return this.responses[this.i];\n }\n\n _incrementResponse() {\n if (this.i < this.responses.length - 1) {\n this.i += 1;\n } else {\n this.i = 0;\n }\n }\n\n bindTools(tools: (StructuredTool | ToolSpec)[]) {\n const merged = [...this.tools, ...tools];\n\n const toolDicts = merged.map((t) => {\n switch (this.toolStyle) {\n case \"openai\":\n return {\n type: \"function\",\n function: {\n name: t.name,\n description: t.description,\n parameters: toJsonSchema(t.schema),\n },\n };\n case \"anthropic\":\n return {\n name: t.name,\n description: t.description,\n input_schema: toJsonSchema(t.schema),\n };\n case \"bedrock\":\n return {\n toolSpec: {\n name: t.name,\n description: t.description,\n inputSchema: toJsonSchema(t.schema),\n },\n };\n case \"google\":\n return {\n name: t.name,\n description: t.description,\n parameters: toJsonSchema(t.schema),\n };\n default:\n throw new Error(`Unsupported tool style: ${this.toolStyle}`);\n }\n });\n\n const wrapped =\n this.toolStyle === \"google\"\n ? [{ functionDeclarations: toolDicts }]\n : toolDicts;\n\n const next = new FakeListChatModel({\n responses: this.responses,\n sleep: this.sleep,\n emitCustomEvent: this.emitCustomEvent,\n generationInfo: this.generationInfo,\n });\n next.tools = merged;\n next.toolStyle = this.toolStyle;\n next.i = this.i;\n\n return next.withConfig({ tools: wrapped } as BaseChatModelCallOptions);\n }\n\n withStructuredOutput<\n // oxlint-disable-next-line @typescript-eslint/no-explicit-any\n RunOutput extends Record<string, any> = Record<string, any>,\n >(\n _params:\n | StructuredOutputMethodParams<RunOutput, false>\n | InteropZodType<RunOutput>\n // oxlint-disable-next-line @typescript-eslint/no-explicit-any\n | Record<string, any>,\n config?: StructuredOutputMethodOptions<false>\n ): Runnable<BaseLanguageModelInput, RunOutput>;\n\n withStructuredOutput<\n // oxlint-disable-next-line @typescript-eslint/no-explicit-any\n RunOutput extends Record<string, any> = Record<string, any>,\n >(\n _params:\n | StructuredOutputMethodParams<RunOutput, true>\n | InteropZodType<RunOutput>\n // oxlint-disable-next-line @typescript-eslint/no-explicit-any\n | Record<string, any>,\n config?: StructuredOutputMethodOptions<true>\n ): Runnable<BaseLanguageModelInput, { raw: BaseMessage; parsed: RunOutput }>;\n\n withStructuredOutput<\n // oxlint-disable-next-line @typescript-eslint/no-explicit-any\n RunOutput extends Record<string, any> = Record<string, any>,\n >(\n _params:\n | StructuredOutputMethodParams<RunOutput, boolean>\n | InteropZodType<RunOutput>\n // oxlint-disable-next-line @typescript-eslint/no-explicit-any\n | Record<string, any>,\n _config?: StructuredOutputMethodOptions<boolean>\n ):\n | Runnable<BaseLanguageModelInput, RunOutput>\n | Runnable<\n BaseLanguageModelInput,\n { raw: BaseMessage; parsed: RunOutput }\n > {\n return RunnableLambda.from(async (input) => {\n const message = await this.invoke(input);\n if (message.tool_calls?.[0]?.args) {\n return message.tool_calls[0].args as RunOutput;\n }\n if (typeof message.content === \"string\") {\n return JSON.parse(message.content);\n }\n throw new Error(\"No structured output found\");\n }) as Runnable;\n }\n}\n"],"mappings":";;;;;;;AAuDA,IAAa,gBAAb,cAAmCA,oCAAAA,cAAc;CAC/C,oBAAoB;EAClB,OAAO,CAAC;CACV;CAEA,WAAmB;EACjB,OAAO;CACT;CAEA,MAAM,UACJ,UACA,SACA,YACqB;EACrB,IAAI,SAAS,MAAM,QACjB,OAAO,EACL,aAAa,CACX;GACE,SAAS,IAAIC,WAAAA,UAAU,QAAQ,KAAK,EAAE;GACtC,MAAM,QAAQ,KAAK;EACrB,CACF,EACF;EAEF,MAAM,OAAO,SACV,KAAK,MAAM;GACV,IAAI,OAAO,EAAE,YAAY,UACvB,OAAO,EAAE;GAEX,OAAO,KAAK,UAAU,EAAE,SAAS,MAAM,CAAC;EAC1C,CAAC,CAAC,CACD,KAAK,IAAI;EACZ,MAAM,YAAY,kBAAkB,IAAI;EACxC,OAAO;GACL,aAAa,CACX;IACE,SAAS,IAAIA,WAAAA,UAAU,IAAI;IAC3B;GACF,CACF;GACA,WAAW,CAAC;EACd;CACF;AACF;AAEA,IAAa,yBAAb,MAAa,+BAA+BD,oCAAAA,cAAiD;CAC3F,QAAQ;CAER,YAA2B,CAAC;CAE5B,SAA2B,CAAC;CAE5B,YAA2D;CAE3D;CAEA,QAA+C,CAAC;CAEhD,YAAY,EACV,QAAQ,IACR,YAAY,CAAC,GACb,SAAS,CAAC,GACV,YAAY,UACZ,mBACA,GAAG,QAC4C;EAC/C,MAAM,IAAI;EACV,KAAK,QAAQ;EACb,KAAK,YAAY;EACjB,KAAK,SAAS;EACd,KAAK,YAAY;EACjB,KAAK,oBAAoB;CAC3B;CAEA,WAAW;EACT,OAAO;CACT;CAEA,UAAU,OAAsC;EAC9C,MAAM,SAAS,CAAC,GAAG,KAAK,OAAO,GAAG,KAAK;EAEvC,MAAM,YAAY,OAAO,KAAK,MAAM;GAClC,QAAQ,KAAK,WAAb;IACE,KAAK,UACH,OAAO;KACL,MAAM;KACN,UAAU;MACR,MAAM,EAAE;MACR,aAAa,EAAE;MACf,YAAYE,0BAAAA,aAAa,EAAE,MAAM;KACnC;IACF;IACF,KAAK,aACH,OAAO;KACL,MAAM,EAAE;KACR,aAAa,EAAE;KACf,cAAcA,0BAAAA,aAAa,EAAE,MAAM;IACrC;IACF,KAAK,WACH,OAAO,EACL,UAAU;KACR,MAAM,EAAE;KACR,aAAa,EAAE;KACf,aAAaA,0BAAAA,aAAa,EAAE,MAAM;IACpC,EACF;IACF,KAAK,UACH,OAAO;KACL,MAAM,EAAE;KACR,aAAa,EAAE;KACf,YAAYA,0BAAAA,aAAa,EAAE,MAAM;IACnC;IACF,SACE,MAAM,IAAI,MAAM,2BAA2B,KAAK,WAAW;GAC/D;EACF,CAAC;EAED,MAAM,UACJ,KAAK,cAAc,WACf,CAAC,EAAE,sBAAsB,UAAU,CAAC,IACpC;EAGN,MAAM,OAAO,IAAI,uBAAuB;GACtC,OAAO,KAAK;GACZ,WAAW,KAAK;GAChB,QAAQ,KAAK;GACb,WAAW,KAAK;GAChB,mBAAmB,KAAK;EAC1B,CAAC;EACD,KAAK,QAAQ;EAEb,OAAO,KAAK,WAAW,EAAE,OAAO,QAAQ,CAA6B;CACvE;CAEA,MAAM,UACJ,UACA,UACA,aACqB;EACrB,IAAI,KAAK,mBACP,MAAM,IAAI,MAAM,KAAK,iBAAiB;EAiBxC,OAAO,EAXL,aAAa,CACX;GACE,MAAM;GACN,SAAS,IAAID,WAAAA,UAAU;IACrB,SAPQ,KAAK,YAAY,EAAE,EAAE,WAAW,SAAS,EAAE,CAAC,WAAW;IAQ/D,YAAY,KAAK,SAAS,EAAE,EAAE;GAChC,CAAC;EACH,CACF,EAGc;CAClB;CAEA,OAAO,sBACL,WACA,SACA,YACqC;EACrC,IAAI,KAAK,mBACP,MAAM,IAAI,MAAM,KAAK,iBAAiB;EAExC,IAAI,KAAK,QAAQ,QAAQ;GACvB,KAAK,MAAM,YAAY,KAAK,QAAQ;IAClC,MAAM,KAAK,IAAIE,gBAAAA,oBAAoB;KACjC,SAAS,IAAIC,WAAAA,eAAe;MAC1B,SAAS,SAAS;MAClB,YAAY,SAAS;MACrB,mBAAmB,SAAS,qBAAqB,CAAC;KACpD,CAAC;KACD,MAAM,SAAS,SAAS,SAAS,KAAK;IACxC,CAAC;IAED,IAAI,QAAQ,QAAQ,SAAS;IAC7B,MAAM;IACN,MAAM,YAAY,kBAChB,SAAS,SACT,KAAA,GACA,KAAA,GACA,KAAA,GACA,KAAA,GACA,EAAE,OAAO,GAAG,CACd;GACF;GACA;EACF;EAEA,MAAM,WACJ,KAAK,YAAY,MACjB,IAAIH,WAAAA,UACF,OAAO,UAAU,EAAE,CAAC,YAAY,WAAW,UAAU,EAAE,CAAC,UAAU,EACpE;EACF,MAAM,OAAO,OAAO,SAAS,YAAY,WAAW,SAAS,UAAU;EAEvE,KAAK,MAAM,MAAM,MAAM;GACrB,MAAM,IAAI,SAAS,MAAM,WAAW,GAAG,KAAK,KAAK,CAAC;GAClD,MAAM,KAAK,IAAIE,gBAAAA,oBAAoB;IACjC,SAAS,IAAIC,WAAAA,eAAe,EAAE,SAAS,GAAG,CAAC;IAC3C,MAAM;GACR,CAAC;GACD,IAAI,QAAQ,QAAQ,SAAS;GAC7B,MAAM;GACN,MAAM,YAAY,kBAChB,IACA,KAAA,GACA,KAAA,GACA,KAAA,GACA,KAAA,GACA,EAAE,OAAO,GAAG,CACd;EACF;CACF;AACF;;;;;;;;;;;;;;;;;;;;;AA8CA,IAAa,oBAAb,MAAa,0BAA0BJ,oCAAAA,cAA4C;CACjF,OAAO,UAAU;EACf,OAAO;CACT;CAEA,kBAAkB;CAElB;CAEA,IAAI;CAEJ;CAEA,kBAAkB;CAElB;CAEA,QAA+C,CAAC;CAEhD,YAA2D;CAE3D,YAAY,QAAuB;EACjC,MAAM,MAAM;EACZ,MAAM,EAAE,WAAW,OAAO,iBAAiB,mBAAmB;EAC9D,KAAK,YAAY;EACjB,KAAK,QAAQ;EACb,KAAK,kBAAkB,mBAAmB,KAAK;EAC/C,KAAK,iBAAiB;CACxB;CAEA,oBAAoB;EAClB,OAAO,CAAC;CACV;CAEA,WAAmB;EACjB,OAAO;CACT;CAEA,MAAM,UACJ,WACA,SACA,YACqB;EACrB,MAAM,KAAK,kBAAkB;EAC7B,IAAI,SAAS,mBACX,MAAM,IAAI,MAAM,QAAQ,iBAAiB;EAE3C,IAAI,KAAK,iBACP,MAAM,YAAY,kBAAkB,mBAAmB,EACrD,SAAS,KACX,CAAC;EAGH,IAAI,SAAS,MAAM,QACjB,OAAO,EACL,aAAa,CAAC,KAAK,kBAAkB,QAAQ,KAAK,EAAE,CAAC,EACvD;OACK;GACL,MAAM,WAAW,KAAK,iBAAiB;GACvC,KAAK,mBAAmB;GAExB,OAAO;IACL,aAAa,CAAC,KAAK,kBAAkB,QAAQ,CAAC;IAC9C,WAAW,CAAC;GACd;EACF;CACF;CAEA,kBAAkB,MAAc;EAC9B,OAAO;GACL,SAAS,IAAIC,WAAAA,UAAU,IAAI;GAC3B;EACF;CACF;CAEA,OAAO,sBACL,WACA,SACA,YACqC;EACrC,MAAM,WAAW,KAAK,iBAAiB;EACvC,KAAK,mBAAmB;EACxB,IAAI,KAAK,iBACP,MAAM,YAAY,kBAAkB,mBAAmB,EACrD,SAAS,KACX,CAAC;EAGH,MAAM,gBAAgB,CAAC,GAAG,QAAQ;EAClC,KAAK,IAAI,IAAI,GAAG,IAAI,cAAc,QAAQ,KAAK;GAC7C,MAAM,OAAO,cAAc;GAC3B,MAAM,cAAc,MAAM,cAAc,SAAS;GACjD,MAAM,KAAK,kBAAkB;GAC7B,IAAI,SAAS,mBACX,MAAM,IAAI,MAAM,QAAQ,iBAAiB;GAI3C,MAAM,QAAQ,KAAK,qBACjB,MACA,cAAc,KAAK,iBAAiB,KAAA,CACtC;GACA,IAAI,QAAQ,QAAQ,SAAS;GAC7B,MAAM;GAEN,YAAiB,kBAAkB,IAAI;EACzC;CACF;CAEA,MAAM,oBAAoB;EACxB,IAAI,KAAK,UAAU,KAAA,GACjB,MAAM,KAAK,OAAO;CAEtB;CAEA,MAAM,SAAS;EACb,OAAO,IAAI,SAAe,YAAY;GACpC,iBAAiB,QAAQ,GAAG,KAAK,KAAK;EACxC,CAAC;CACH;CAEA,qBACE,MAEA,gBACqB;EACrB,OAAO,IAAIE,gBAAAA,oBAAoB;GAC7B,SAAS,IAAIC,WAAAA,eAAe,EAAE,SAAS,KAAK,CAAC;GAC7C;GACA;EACF,CAAC;CACH;CAEA,mBAAmB;EACjB,OAAO,KAAK,UAAU,KAAK;CAC7B;CAEA,qBAAqB;EACnB,IAAI,KAAK,IAAI,KAAK,UAAU,SAAS,GACnC,KAAK,KAAK;OAEV,KAAK,IAAI;CAEb;CAEA,UAAU,OAAsC;EAC9C,MAAM,SAAS,CAAC,GAAG,KAAK,OAAO,GAAG,KAAK;EAEvC,MAAM,YAAY,OAAO,KAAK,MAAM;GAClC,QAAQ,KAAK,WAAb;IACE,KAAK,UACH,OAAO;KACL,MAAM;KACN,UAAU;MACR,MAAM,EAAE;MACR,aAAa,EAAE;MACf,YAAYF,0BAAAA,aAAa,EAAE,MAAM;KACnC;IACF;IACF,KAAK,aACH,OAAO;KACL,MAAM,EAAE;KACR,aAAa,EAAE;KACf,cAAcA,0BAAAA,aAAa,EAAE,MAAM;IACrC;IACF,KAAK,WACH,OAAO,EACL,UAAU;KACR,MAAM,EAAE;KACR,aAAa,EAAE;KACf,aAAaA,0BAAAA,aAAa,EAAE,MAAM;IACpC,EACF;IACF,KAAK,UACH,OAAO;KACL,MAAM,EAAE;KACR,aAAa,EAAE;KACf,YAAYA,0BAAAA,aAAa,EAAE,MAAM;IACnC;IACF,SACE,MAAM,IAAI,MAAM,2BAA2B,KAAK,WAAW;GAC/D;EACF,CAAC;EAED,MAAM,UACJ,KAAK,cAAc,WACf,CAAC,EAAE,sBAAsB,UAAU,CAAC,IACpC;EAEN,MAAM,OAAO,IAAI,kBAAkB;GACjC,WAAW,KAAK;GAChB,OAAO,KAAK;GACZ,iBAAiB,KAAK;GACtB,gBAAgB,KAAK;EACvB,CAAC;EACD,KAAK,QAAQ;EACb,KAAK,YAAY,KAAK;EACtB,KAAK,IAAI,KAAK;EAEd,OAAO,KAAK,WAAW,EAAE,OAAO,QAAQ,CAA6B;CACvE;CA0BA,qBAIE,SAKA,SAMI;EACJ,OAAOG,aAAAA,eAAe,KAAK,OAAO,UAAU;GAC1C,MAAM,UAAU,MAAM,KAAK,OAAO,KAAK;GACvC,IAAI,QAAQ,aAAa,EAAE,EAAE,MAC3B,OAAO,QAAQ,WAAW,EAAE,CAAC;GAE/B,IAAI,OAAO,QAAQ,YAAY,UAC7B,OAAO,KAAK,MAAM,QAAQ,OAAO;GAEnC,MAAM,IAAI,MAAM,4BAA4B;EAC9C,CAAC;CACH;AACF"}
1
+ {"version":3,"file":"chat_models.cjs","names":["BaseChatModel","AIMessage","toJsonSchema","ChatGenerationChunk","AIMessageChunk","RunnableLambda"],"sources":["../../../src/utils/testing/chat_models.ts"],"sourcesContent":["import { CallbackManagerForLLMRun } from \"../../callbacks/manager.js\";\nimport {\n BaseChatModel,\n BaseChatModelCallOptions,\n BaseChatModelParams,\n} from \"../../language_models/chat_models.js\";\nimport { BaseLLMParams } from \"../../language_models/llms.js\";\nimport {\n BaseMessage,\n AIMessage,\n AIMessageChunk,\n} from \"../../messages/index.js\";\nimport { type ChatResult, ChatGenerationChunk } from \"../../outputs.js\";\nimport { Runnable, RunnableLambda } from \"../../runnables/base.js\";\nimport { StructuredTool } from \"../../tools/index.js\";\nimport {\n StructuredOutputMethodParams,\n BaseLanguageModelInput,\n StructuredOutputMethodOptions,\n} from \"../../language_models/base.js\";\n\nimport { toJsonSchema } from \"../json_schema.js\";\nimport { InteropZodType } from \"../types/zod.js\";\n\n/** Minimal shape actually needed by `bindTools` */\nexport interface ToolSpec {\n name: string;\n description?: string;\n schema: InteropZodType | Record<string, unknown>; // Either a Zod schema *or* a plain JSON-Schema object\n}\n\n/**\n * Interface specific to the Fake Streaming Chat model.\n */\nexport interface FakeStreamingChatModelCallOptions extends BaseChatModelCallOptions {}\n/**\n * Interface for the Constructor-field specific to the Fake Streaming Chat model (all optional because we fill in defaults).\n */\nexport interface FakeStreamingChatModelFields extends BaseChatModelParams {\n /** Milliseconds to pause between fallback char-by-char chunks */\n sleep?: number;\n\n /** Full AI messages to fall back to when no `chunks` supplied */\n responses?: BaseMessage[];\n\n /** Exact chunks to emit (can include tool-call deltas) */\n chunks?: AIMessageChunk[];\n\n /** How tool specs are formatted in `bindTools` */\n toolStyle?: \"openai\" | \"anthropic\" | \"bedrock\" | \"google\";\n\n /** Throw this error instead of streaming (useful in tests) */\n thrownErrorString?: string;\n}\n\nexport class FakeChatModel extends BaseChatModel {\n _combineLLMOutput() {\n return [];\n }\n\n _llmType(): string {\n return \"fake\";\n }\n\n async _generate(\n messages: BaseMessage[],\n options?: this[\"ParsedCallOptions\"],\n runManager?: CallbackManagerForLLMRun\n ): Promise<ChatResult> {\n if (options?.stop?.length) {\n return {\n generations: [\n {\n message: new AIMessage(options.stop[0]),\n text: options.stop[0],\n },\n ],\n };\n }\n const text = messages\n .map((m) => {\n if (typeof m.content === \"string\") {\n return m.content;\n }\n return JSON.stringify(m.content, null, 2);\n })\n .join(\"\\n\");\n await runManager?.handleLLMNewToken(text);\n return {\n generations: [\n {\n message: new AIMessage(text),\n text,\n },\n ],\n llmOutput: {},\n };\n }\n}\n\nexport class FakeStreamingChatModel extends BaseChatModel<FakeStreamingChatModelCallOptions> {\n sleep = 50;\n\n responses: BaseMessage[] = [];\n\n chunks: AIMessageChunk[] = [];\n\n toolStyle: \"openai\" | \"anthropic\" | \"bedrock\" | \"google\" = \"openai\";\n\n thrownErrorString?: string;\n\n private tools: (StructuredTool | ToolSpec)[] = [];\n\n constructor({\n sleep = 50,\n responses = [],\n chunks = [],\n toolStyle = \"openai\",\n thrownErrorString,\n ...rest\n }: FakeStreamingChatModelFields & BaseLLMParams) {\n super(rest);\n this.sleep = sleep;\n this.responses = responses;\n this.chunks = chunks;\n this.toolStyle = toolStyle;\n this.thrownErrorString = thrownErrorString;\n }\n\n _llmType() {\n return \"fake\";\n }\n\n bindTools(tools: (StructuredTool | ToolSpec)[]) {\n const merged = [...this.tools, ...tools];\n\n const toolDicts = merged.map((t) => {\n switch (this.toolStyle) {\n case \"openai\":\n return {\n type: \"function\",\n function: {\n name: t.name,\n description: t.description,\n parameters: toJsonSchema(t.schema),\n },\n };\n case \"anthropic\":\n return {\n name: t.name,\n description: t.description,\n input_schema: toJsonSchema(t.schema),\n };\n case \"bedrock\":\n return {\n toolSpec: {\n name: t.name,\n description: t.description,\n inputSchema: toJsonSchema(t.schema),\n },\n };\n case \"google\":\n return {\n name: t.name,\n description: t.description,\n parameters: toJsonSchema(t.schema),\n };\n default:\n throw new Error(`Unsupported tool style: ${this.toolStyle}`);\n }\n });\n\n const wrapped =\n this.toolStyle === \"google\"\n ? [{ functionDeclarations: toolDicts }]\n : toolDicts;\n\n /* creating a *new* instance – mirrors LangChain .bind semantics for type-safety and avoiding noise */\n const next = new FakeStreamingChatModel({\n sleep: this.sleep,\n responses: this.responses,\n chunks: this.chunks,\n toolStyle: this.toolStyle,\n thrownErrorString: this.thrownErrorString,\n });\n next.tools = merged;\n\n return next.withConfig({ tools: wrapped } as BaseChatModelCallOptions);\n }\n\n async _generate(\n messages: BaseMessage[],\n _options: this[\"ParsedCallOptions\"],\n _runManager?: CallbackManagerForLLMRun\n ): Promise<ChatResult> {\n if (this.thrownErrorString) {\n throw new Error(this.thrownErrorString);\n }\n\n const content = this.responses?.[0]?.content ?? messages[0].content ?? \"\";\n\n const generation: ChatResult = {\n generations: [\n {\n text: \"\",\n message: new AIMessage({\n content,\n tool_calls: this.chunks?.[0]?.tool_calls,\n }),\n },\n ],\n };\n\n return generation;\n }\n\n async *_streamResponseChunks(\n _messages: BaseMessage[],\n options: this[\"ParsedCallOptions\"],\n runManager?: CallbackManagerForLLMRun\n ): AsyncGenerator<ChatGenerationChunk> {\n if (this.thrownErrorString) {\n throw new Error(this.thrownErrorString);\n }\n if (this.chunks?.length) {\n for (const msgChunk of this.chunks) {\n const cg = new ChatGenerationChunk({\n message: new AIMessageChunk({\n content: msgChunk.content,\n tool_calls: msgChunk.tool_calls,\n additional_kwargs: msgChunk.additional_kwargs ?? {},\n }),\n text: msgChunk.content?.toString() ?? \"\",\n });\n\n if (options.signal?.aborted) break;\n yield cg;\n await runManager?.handleLLMNewToken(\n msgChunk.content as string,\n undefined,\n undefined,\n undefined,\n undefined,\n { chunk: cg }\n );\n }\n return;\n }\n\n const fallback =\n this.responses?.[0] ??\n new AIMessage(\n typeof _messages[0].content === \"string\" ? _messages[0].content : \"\"\n );\n const text = typeof fallback.content === \"string\" ? fallback.content : \"\";\n\n for (const ch of text) {\n await new Promise((r) => setTimeout(r, this.sleep));\n const cg = new ChatGenerationChunk({\n message: new AIMessageChunk({ content: ch }),\n text: ch,\n });\n if (options.signal?.aborted) break;\n yield cg;\n await runManager?.handleLLMNewToken(\n ch,\n undefined,\n undefined,\n undefined,\n undefined,\n { chunk: cg }\n );\n }\n }\n}\n\n/**\n * Interface for the input parameters specific to the Fake List Chat model.\n */\nexport interface FakeChatInput extends BaseChatModelParams {\n /** Responses to return */\n responses: string[];\n\n /** Time to sleep in milliseconds between responses */\n sleep?: number;\n\n emitCustomEvent?: boolean;\n\n /**\n * Generation info to include on the last chunk during streaming.\n * This gets merged into response_metadata by the base chat model.\n * Useful for testing response_metadata propagation (e.g., finish_reason).\n */\n generationInfo?: Record<string, unknown>;\n}\n\nexport interface FakeListChatModelCallOptions extends BaseChatModelCallOptions {\n thrownErrorString?: string;\n}\n\n/**\n * A fake Chat Model that returns a predefined list of responses. It can be used\n * for testing purposes.\n * @example\n * ```typescript\n * const chat = new FakeListChatModel({\n * responses: [\"I'll callback later.\", \"You 'console' them!\"]\n * });\n *\n * const firstMessage = new HumanMessage(\"You want to hear a JavaScript joke?\");\n * const secondMessage = new HumanMessage(\"How do you cheer up a JavaScript developer?\");\n *\n * // Call the chat model with a message and log the response\n * const firstResponse = await chat.call([firstMessage]);\n * console.log({ firstResponse });\n *\n * const secondResponse = await chat.call([secondMessage]);\n * console.log({ secondResponse });\n * ```\n */\nexport class FakeListChatModel extends BaseChatModel<FakeListChatModelCallOptions> {\n static lc_name() {\n return \"FakeListChatModel\";\n }\n\n lc_serializable = true;\n\n responses: string[];\n\n i = 0;\n\n sleep?: number;\n\n emitCustomEvent = false;\n\n generationInfo?: Record<string, unknown>;\n\n private tools: (StructuredTool | ToolSpec)[] = [];\n\n toolStyle: \"openai\" | \"anthropic\" | \"bedrock\" | \"google\" = \"openai\";\n\n constructor(params: FakeChatInput) {\n super(params);\n const { responses, sleep, emitCustomEvent, generationInfo } = params;\n this.responses = responses;\n this.sleep = sleep;\n this.emitCustomEvent = emitCustomEvent ?? this.emitCustomEvent;\n this.generationInfo = generationInfo;\n }\n\n _combineLLMOutput() {\n return [];\n }\n\n _llmType(): string {\n return \"fake-list\";\n }\n\n async _generate(\n _messages: BaseMessage[],\n options?: this[\"ParsedCallOptions\"],\n runManager?: CallbackManagerForLLMRun\n ): Promise<ChatResult> {\n await this._sleepIfRequested();\n if (options?.thrownErrorString) {\n throw new Error(options.thrownErrorString);\n }\n if (this.emitCustomEvent) {\n await runManager?.handleCustomEvent(\"some_test_event\", {\n someval: true,\n });\n }\n\n if (options?.stop?.length) {\n return {\n generations: [this._formatGeneration(options.stop[0])],\n };\n } else {\n const response = this._currentResponse();\n this._incrementResponse();\n\n return {\n generations: [this._formatGeneration(response)],\n llmOutput: {},\n };\n }\n }\n\n _formatGeneration(text: string) {\n return {\n message: new AIMessage(text),\n text,\n };\n }\n\n async *_streamResponseChunks(\n _messages: BaseMessage[],\n options: this[\"ParsedCallOptions\"],\n runManager?: CallbackManagerForLLMRun\n ): AsyncGenerator<ChatGenerationChunk> {\n const response = this._currentResponse();\n this._incrementResponse();\n if (this.emitCustomEvent) {\n await runManager?.handleCustomEvent(\"some_test_event\", {\n someval: true,\n });\n }\n\n const responseChars = [...response];\n for (let i = 0; i < responseChars.length; i++) {\n const text = responseChars[i];\n const isLastChunk = i === responseChars.length - 1;\n await this._sleepIfRequested();\n if (options?.thrownErrorString) {\n throw new Error(options.thrownErrorString);\n }\n // Include generationInfo on the last chunk (like real providers do)\n // This gets merged into response_metadata by the base chat model\n const chunk = this._createResponseChunk(\n text,\n isLastChunk ? this.generationInfo : undefined\n );\n if (options.signal?.aborted) break;\n yield chunk;\n // oxlint-disable-next-line no-void\n void runManager?.handleLLMNewToken(text);\n }\n }\n\n async _sleepIfRequested() {\n if (this.sleep !== undefined) {\n await this._sleep();\n }\n }\n\n async _sleep() {\n return new Promise<void>((resolve) => {\n setTimeout(() => resolve(), this.sleep);\n });\n }\n\n _createResponseChunk(\n text: string,\n // oxlint-disable-next-line @typescript-eslint/no-explicit-any\n generationInfo?: Record<string, any>\n ): ChatGenerationChunk {\n return new ChatGenerationChunk({\n message: new AIMessageChunk({ content: text }),\n text,\n generationInfo,\n });\n }\n\n _currentResponse() {\n return this.responses[this.i];\n }\n\n _incrementResponse() {\n if (this.i < this.responses.length - 1) {\n this.i += 1;\n } else {\n this.i = 0;\n }\n }\n\n bindTools(tools: (StructuredTool | ToolSpec)[]) {\n const merged = [...this.tools, ...tools];\n\n const toolDicts = merged.map((t) => {\n switch (this.toolStyle) {\n case \"openai\":\n return {\n type: \"function\",\n function: {\n name: t.name,\n description: t.description,\n parameters: toJsonSchema(t.schema),\n },\n };\n case \"anthropic\":\n return {\n name: t.name,\n description: t.description,\n input_schema: toJsonSchema(t.schema),\n };\n case \"bedrock\":\n return {\n toolSpec: {\n name: t.name,\n description: t.description,\n inputSchema: toJsonSchema(t.schema),\n },\n };\n case \"google\":\n return {\n name: t.name,\n description: t.description,\n parameters: toJsonSchema(t.schema),\n };\n default:\n throw new Error(`Unsupported tool style: ${this.toolStyle}`);\n }\n });\n\n const wrapped =\n this.toolStyle === \"google\"\n ? [{ functionDeclarations: toolDicts }]\n : toolDicts;\n\n const next = new FakeListChatModel({\n responses: this.responses,\n sleep: this.sleep,\n emitCustomEvent: this.emitCustomEvent,\n generationInfo: this.generationInfo,\n });\n next.tools = merged;\n next.toolStyle = this.toolStyle;\n next.i = this.i;\n\n return next.withConfig({ tools: wrapped } as BaseChatModelCallOptions);\n }\n\n withStructuredOutput<\n // oxlint-disable-next-line @typescript-eslint/no-explicit-any\n RunOutput extends Record<string, any> = Record<string, any>,\n >(\n _params:\n | StructuredOutputMethodParams<RunOutput, false>\n | InteropZodType<RunOutput>\n // oxlint-disable-next-line @typescript-eslint/no-explicit-any\n | Record<string, any>,\n config?: StructuredOutputMethodOptions<false>\n ): Runnable<BaseLanguageModelInput, RunOutput>;\n\n withStructuredOutput<\n // oxlint-disable-next-line @typescript-eslint/no-explicit-any\n RunOutput extends Record<string, any> = Record<string, any>,\n >(\n _params:\n | StructuredOutputMethodParams<RunOutput, true>\n | InteropZodType<RunOutput>\n // oxlint-disable-next-line @typescript-eslint/no-explicit-any\n | Record<string, any>,\n config?: StructuredOutputMethodOptions<true>\n ): Runnable<BaseLanguageModelInput, { raw: BaseMessage; parsed: RunOutput }>;\n\n withStructuredOutput<\n // oxlint-disable-next-line @typescript-eslint/no-explicit-any\n RunOutput extends Record<string, any> = Record<string, any>,\n >(\n _params:\n | StructuredOutputMethodParams<RunOutput, boolean>\n | InteropZodType<RunOutput>\n // oxlint-disable-next-line @typescript-eslint/no-explicit-any\n | Record<string, any>,\n _config?: StructuredOutputMethodOptions<boolean>\n ):\n | Runnable<BaseLanguageModelInput, RunOutput>\n | Runnable<\n BaseLanguageModelInput,\n { raw: BaseMessage; parsed: RunOutput }\n > {\n return RunnableLambda.from(async (input) => {\n const message = await this.invoke(input);\n if (message.tool_calls?.[0]?.args) {\n return message.tool_calls[0].args as RunOutput;\n }\n if (typeof message.content === \"string\") {\n return JSON.parse(message.content);\n }\n throw new Error(\"No structured output found\");\n }) as Runnable;\n }\n}\n"],"mappings":"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"}
@@ -92,10 +92,11 @@ var FakeStreamingChatModel = class FakeStreamingChatModel extends BaseChatModel
92
92
  }
93
93
  async _generate(messages, _options, _runManager) {
94
94
  if (this.thrownErrorString) throw new Error(this.thrownErrorString);
95
+ const content = this.responses?.[0]?.content ?? messages[0].content ?? "";
95
96
  return { generations: [{
96
97
  text: "",
97
98
  message: new AIMessage({
98
- content: this.responses?.[0]?.content ?? messages[0].content ?? "",
99
+ content,
99
100
  tool_calls: this.chunks?.[0]?.tool_calls
100
101
  })
101
102
  }] };
@@ -1 +1 @@
1
- {"version":3,"file":"chat_models.js","names":[],"sources":["../../../src/utils/testing/chat_models.ts"],"sourcesContent":["import { CallbackManagerForLLMRun } from \"../../callbacks/manager.js\";\nimport {\n BaseChatModel,\n BaseChatModelCallOptions,\n BaseChatModelParams,\n} from \"../../language_models/chat_models.js\";\nimport { BaseLLMParams } from \"../../language_models/llms.js\";\nimport {\n BaseMessage,\n AIMessage,\n AIMessageChunk,\n} from \"../../messages/index.js\";\nimport { type ChatResult, ChatGenerationChunk } from \"../../outputs.js\";\nimport { Runnable, RunnableLambda } from \"../../runnables/base.js\";\nimport { StructuredTool } from \"../../tools/index.js\";\nimport {\n StructuredOutputMethodParams,\n BaseLanguageModelInput,\n StructuredOutputMethodOptions,\n} from \"../../language_models/base.js\";\n\nimport { toJsonSchema } from \"../json_schema.js\";\nimport { InteropZodType } from \"../types/zod.js\";\n\n/** Minimal shape actually needed by `bindTools` */\nexport interface ToolSpec {\n name: string;\n description?: string;\n schema: InteropZodType | Record<string, unknown>; // Either a Zod schema *or* a plain JSON-Schema object\n}\n\n/**\n * Interface specific to the Fake Streaming Chat model.\n */\nexport interface FakeStreamingChatModelCallOptions extends BaseChatModelCallOptions {}\n/**\n * Interface for the Constructor-field specific to the Fake Streaming Chat model (all optional because we fill in defaults).\n */\nexport interface FakeStreamingChatModelFields extends BaseChatModelParams {\n /** Milliseconds to pause between fallback char-by-char chunks */\n sleep?: number;\n\n /** Full AI messages to fall back to when no `chunks` supplied */\n responses?: BaseMessage[];\n\n /** Exact chunks to emit (can include tool-call deltas) */\n chunks?: AIMessageChunk[];\n\n /** How tool specs are formatted in `bindTools` */\n toolStyle?: \"openai\" | \"anthropic\" | \"bedrock\" | \"google\";\n\n /** Throw this error instead of streaming (useful in tests) */\n thrownErrorString?: string;\n}\n\nexport class FakeChatModel extends BaseChatModel {\n _combineLLMOutput() {\n return [];\n }\n\n _llmType(): string {\n return \"fake\";\n }\n\n async _generate(\n messages: BaseMessage[],\n options?: this[\"ParsedCallOptions\"],\n runManager?: CallbackManagerForLLMRun\n ): Promise<ChatResult> {\n if (options?.stop?.length) {\n return {\n generations: [\n {\n message: new AIMessage(options.stop[0]),\n text: options.stop[0],\n },\n ],\n };\n }\n const text = messages\n .map((m) => {\n if (typeof m.content === \"string\") {\n return m.content;\n }\n return JSON.stringify(m.content, null, 2);\n })\n .join(\"\\n\");\n await runManager?.handleLLMNewToken(text);\n return {\n generations: [\n {\n message: new AIMessage(text),\n text,\n },\n ],\n llmOutput: {},\n };\n }\n}\n\nexport class FakeStreamingChatModel extends BaseChatModel<FakeStreamingChatModelCallOptions> {\n sleep = 50;\n\n responses: BaseMessage[] = [];\n\n chunks: AIMessageChunk[] = [];\n\n toolStyle: \"openai\" | \"anthropic\" | \"bedrock\" | \"google\" = \"openai\";\n\n thrownErrorString?: string;\n\n private tools: (StructuredTool | ToolSpec)[] = [];\n\n constructor({\n sleep = 50,\n responses = [],\n chunks = [],\n toolStyle = \"openai\",\n thrownErrorString,\n ...rest\n }: FakeStreamingChatModelFields & BaseLLMParams) {\n super(rest);\n this.sleep = sleep;\n this.responses = responses;\n this.chunks = chunks;\n this.toolStyle = toolStyle;\n this.thrownErrorString = thrownErrorString;\n }\n\n _llmType() {\n return \"fake\";\n }\n\n bindTools(tools: (StructuredTool | ToolSpec)[]) {\n const merged = [...this.tools, ...tools];\n\n const toolDicts = merged.map((t) => {\n switch (this.toolStyle) {\n case \"openai\":\n return {\n type: \"function\",\n function: {\n name: t.name,\n description: t.description,\n parameters: toJsonSchema(t.schema),\n },\n };\n case \"anthropic\":\n return {\n name: t.name,\n description: t.description,\n input_schema: toJsonSchema(t.schema),\n };\n case \"bedrock\":\n return {\n toolSpec: {\n name: t.name,\n description: t.description,\n inputSchema: toJsonSchema(t.schema),\n },\n };\n case \"google\":\n return {\n name: t.name,\n description: t.description,\n parameters: toJsonSchema(t.schema),\n };\n default:\n throw new Error(`Unsupported tool style: ${this.toolStyle}`);\n }\n });\n\n const wrapped =\n this.toolStyle === \"google\"\n ? [{ functionDeclarations: toolDicts }]\n : toolDicts;\n\n /* creating a *new* instance – mirrors LangChain .bind semantics for type-safety and avoiding noise */\n const next = new FakeStreamingChatModel({\n sleep: this.sleep,\n responses: this.responses,\n chunks: this.chunks,\n toolStyle: this.toolStyle,\n thrownErrorString: this.thrownErrorString,\n });\n next.tools = merged;\n\n return next.withConfig({ tools: wrapped } as BaseChatModelCallOptions);\n }\n\n async _generate(\n messages: BaseMessage[],\n _options: this[\"ParsedCallOptions\"],\n _runManager?: CallbackManagerForLLMRun\n ): Promise<ChatResult> {\n if (this.thrownErrorString) {\n throw new Error(this.thrownErrorString);\n }\n\n const content = this.responses?.[0]?.content ?? messages[0].content ?? \"\";\n\n const generation: ChatResult = {\n generations: [\n {\n text: \"\",\n message: new AIMessage({\n content,\n tool_calls: this.chunks?.[0]?.tool_calls,\n }),\n },\n ],\n };\n\n return generation;\n }\n\n async *_streamResponseChunks(\n _messages: BaseMessage[],\n options: this[\"ParsedCallOptions\"],\n runManager?: CallbackManagerForLLMRun\n ): AsyncGenerator<ChatGenerationChunk> {\n if (this.thrownErrorString) {\n throw new Error(this.thrownErrorString);\n }\n if (this.chunks?.length) {\n for (const msgChunk of this.chunks) {\n const cg = new ChatGenerationChunk({\n message: new AIMessageChunk({\n content: msgChunk.content,\n tool_calls: msgChunk.tool_calls,\n additional_kwargs: msgChunk.additional_kwargs ?? {},\n }),\n text: msgChunk.content?.toString() ?? \"\",\n });\n\n if (options.signal?.aborted) break;\n yield cg;\n await runManager?.handleLLMNewToken(\n msgChunk.content as string,\n undefined,\n undefined,\n undefined,\n undefined,\n { chunk: cg }\n );\n }\n return;\n }\n\n const fallback =\n this.responses?.[0] ??\n new AIMessage(\n typeof _messages[0].content === \"string\" ? _messages[0].content : \"\"\n );\n const text = typeof fallback.content === \"string\" ? fallback.content : \"\";\n\n for (const ch of text) {\n await new Promise((r) => setTimeout(r, this.sleep));\n const cg = new ChatGenerationChunk({\n message: new AIMessageChunk({ content: ch }),\n text: ch,\n });\n if (options.signal?.aborted) break;\n yield cg;\n await runManager?.handleLLMNewToken(\n ch,\n undefined,\n undefined,\n undefined,\n undefined,\n { chunk: cg }\n );\n }\n }\n}\n\n/**\n * Interface for the input parameters specific to the Fake List Chat model.\n */\nexport interface FakeChatInput extends BaseChatModelParams {\n /** Responses to return */\n responses: string[];\n\n /** Time to sleep in milliseconds between responses */\n sleep?: number;\n\n emitCustomEvent?: boolean;\n\n /**\n * Generation info to include on the last chunk during streaming.\n * This gets merged into response_metadata by the base chat model.\n * Useful for testing response_metadata propagation (e.g., finish_reason).\n */\n generationInfo?: Record<string, unknown>;\n}\n\nexport interface FakeListChatModelCallOptions extends BaseChatModelCallOptions {\n thrownErrorString?: string;\n}\n\n/**\n * A fake Chat Model that returns a predefined list of responses. It can be used\n * for testing purposes.\n * @example\n * ```typescript\n * const chat = new FakeListChatModel({\n * responses: [\"I'll callback later.\", \"You 'console' them!\"]\n * });\n *\n * const firstMessage = new HumanMessage(\"You want to hear a JavaScript joke?\");\n * const secondMessage = new HumanMessage(\"How do you cheer up a JavaScript developer?\");\n *\n * // Call the chat model with a message and log the response\n * const firstResponse = await chat.call([firstMessage]);\n * console.log({ firstResponse });\n *\n * const secondResponse = await chat.call([secondMessage]);\n * console.log({ secondResponse });\n * ```\n */\nexport class FakeListChatModel extends BaseChatModel<FakeListChatModelCallOptions> {\n static lc_name() {\n return \"FakeListChatModel\";\n }\n\n lc_serializable = true;\n\n responses: string[];\n\n i = 0;\n\n sleep?: number;\n\n emitCustomEvent = false;\n\n generationInfo?: Record<string, unknown>;\n\n private tools: (StructuredTool | ToolSpec)[] = [];\n\n toolStyle: \"openai\" | \"anthropic\" | \"bedrock\" | \"google\" = \"openai\";\n\n constructor(params: FakeChatInput) {\n super(params);\n const { responses, sleep, emitCustomEvent, generationInfo } = params;\n this.responses = responses;\n this.sleep = sleep;\n this.emitCustomEvent = emitCustomEvent ?? this.emitCustomEvent;\n this.generationInfo = generationInfo;\n }\n\n _combineLLMOutput() {\n return [];\n }\n\n _llmType(): string {\n return \"fake-list\";\n }\n\n async _generate(\n _messages: BaseMessage[],\n options?: this[\"ParsedCallOptions\"],\n runManager?: CallbackManagerForLLMRun\n ): Promise<ChatResult> {\n await this._sleepIfRequested();\n if (options?.thrownErrorString) {\n throw new Error(options.thrownErrorString);\n }\n if (this.emitCustomEvent) {\n await runManager?.handleCustomEvent(\"some_test_event\", {\n someval: true,\n });\n }\n\n if (options?.stop?.length) {\n return {\n generations: [this._formatGeneration(options.stop[0])],\n };\n } else {\n const response = this._currentResponse();\n this._incrementResponse();\n\n return {\n generations: [this._formatGeneration(response)],\n llmOutput: {},\n };\n }\n }\n\n _formatGeneration(text: string) {\n return {\n message: new AIMessage(text),\n text,\n };\n }\n\n async *_streamResponseChunks(\n _messages: BaseMessage[],\n options: this[\"ParsedCallOptions\"],\n runManager?: CallbackManagerForLLMRun\n ): AsyncGenerator<ChatGenerationChunk> {\n const response = this._currentResponse();\n this._incrementResponse();\n if (this.emitCustomEvent) {\n await runManager?.handleCustomEvent(\"some_test_event\", {\n someval: true,\n });\n }\n\n const responseChars = [...response];\n for (let i = 0; i < responseChars.length; i++) {\n const text = responseChars[i];\n const isLastChunk = i === responseChars.length - 1;\n await this._sleepIfRequested();\n if (options?.thrownErrorString) {\n throw new Error(options.thrownErrorString);\n }\n // Include generationInfo on the last chunk (like real providers do)\n // This gets merged into response_metadata by the base chat model\n const chunk = this._createResponseChunk(\n text,\n isLastChunk ? this.generationInfo : undefined\n );\n if (options.signal?.aborted) break;\n yield chunk;\n // oxlint-disable-next-line no-void\n void runManager?.handleLLMNewToken(text);\n }\n }\n\n async _sleepIfRequested() {\n if (this.sleep !== undefined) {\n await this._sleep();\n }\n }\n\n async _sleep() {\n return new Promise<void>((resolve) => {\n setTimeout(() => resolve(), this.sleep);\n });\n }\n\n _createResponseChunk(\n text: string,\n // oxlint-disable-next-line @typescript-eslint/no-explicit-any\n generationInfo?: Record<string, any>\n ): ChatGenerationChunk {\n return new ChatGenerationChunk({\n message: new AIMessageChunk({ content: text }),\n text,\n generationInfo,\n });\n }\n\n _currentResponse() {\n return this.responses[this.i];\n }\n\n _incrementResponse() {\n if (this.i < this.responses.length - 1) {\n this.i += 1;\n } else {\n this.i = 0;\n }\n }\n\n bindTools(tools: (StructuredTool | ToolSpec)[]) {\n const merged = [...this.tools, ...tools];\n\n const toolDicts = merged.map((t) => {\n switch (this.toolStyle) {\n case \"openai\":\n return {\n type: \"function\",\n function: {\n name: t.name,\n description: t.description,\n parameters: toJsonSchema(t.schema),\n },\n };\n case \"anthropic\":\n return {\n name: t.name,\n description: t.description,\n input_schema: toJsonSchema(t.schema),\n };\n case \"bedrock\":\n return {\n toolSpec: {\n name: t.name,\n description: t.description,\n inputSchema: toJsonSchema(t.schema),\n },\n };\n case \"google\":\n return {\n name: t.name,\n description: t.description,\n parameters: toJsonSchema(t.schema),\n };\n default:\n throw new Error(`Unsupported tool style: ${this.toolStyle}`);\n }\n });\n\n const wrapped =\n this.toolStyle === \"google\"\n ? [{ functionDeclarations: toolDicts }]\n : toolDicts;\n\n const next = new FakeListChatModel({\n responses: this.responses,\n sleep: this.sleep,\n emitCustomEvent: this.emitCustomEvent,\n generationInfo: this.generationInfo,\n });\n next.tools = merged;\n next.toolStyle = this.toolStyle;\n next.i = this.i;\n\n return next.withConfig({ tools: wrapped } as BaseChatModelCallOptions);\n }\n\n withStructuredOutput<\n // oxlint-disable-next-line @typescript-eslint/no-explicit-any\n RunOutput extends Record<string, any> = Record<string, any>,\n >(\n _params:\n | StructuredOutputMethodParams<RunOutput, false>\n | InteropZodType<RunOutput>\n // oxlint-disable-next-line @typescript-eslint/no-explicit-any\n | Record<string, any>,\n config?: StructuredOutputMethodOptions<false>\n ): Runnable<BaseLanguageModelInput, RunOutput>;\n\n withStructuredOutput<\n // oxlint-disable-next-line @typescript-eslint/no-explicit-any\n RunOutput extends Record<string, any> = Record<string, any>,\n >(\n _params:\n | StructuredOutputMethodParams<RunOutput, true>\n | InteropZodType<RunOutput>\n // oxlint-disable-next-line @typescript-eslint/no-explicit-any\n | Record<string, any>,\n config?: StructuredOutputMethodOptions<true>\n ): Runnable<BaseLanguageModelInput, { raw: BaseMessage; parsed: RunOutput }>;\n\n withStructuredOutput<\n // oxlint-disable-next-line @typescript-eslint/no-explicit-any\n RunOutput extends Record<string, any> = Record<string, any>,\n >(\n _params:\n | StructuredOutputMethodParams<RunOutput, boolean>\n | InteropZodType<RunOutput>\n // oxlint-disable-next-line @typescript-eslint/no-explicit-any\n | Record<string, any>,\n _config?: StructuredOutputMethodOptions<boolean>\n ):\n | Runnable<BaseLanguageModelInput, RunOutput>\n | Runnable<\n BaseLanguageModelInput,\n { raw: BaseMessage; parsed: RunOutput }\n > {\n return RunnableLambda.from(async (input) => {\n const message = await this.invoke(input);\n if (message.tool_calls?.[0]?.args) {\n return message.tool_calls[0].args as RunOutput;\n }\n if (typeof message.content === \"string\") {\n return JSON.parse(message.content);\n }\n throw new Error(\"No structured output found\");\n }) as Runnable;\n }\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"chat_models.js","names":[],"sources":["../../../src/utils/testing/chat_models.ts"],"sourcesContent":["import { CallbackManagerForLLMRun } from \"../../callbacks/manager.js\";\nimport {\n BaseChatModel,\n BaseChatModelCallOptions,\n BaseChatModelParams,\n} from \"../../language_models/chat_models.js\";\nimport { BaseLLMParams } from \"../../language_models/llms.js\";\nimport {\n BaseMessage,\n AIMessage,\n AIMessageChunk,\n} from \"../../messages/index.js\";\nimport { type ChatResult, ChatGenerationChunk } from \"../../outputs.js\";\nimport { Runnable, RunnableLambda } from \"../../runnables/base.js\";\nimport { StructuredTool } from \"../../tools/index.js\";\nimport {\n StructuredOutputMethodParams,\n BaseLanguageModelInput,\n StructuredOutputMethodOptions,\n} from \"../../language_models/base.js\";\n\nimport { toJsonSchema } from \"../json_schema.js\";\nimport { InteropZodType } from \"../types/zod.js\";\n\n/** Minimal shape actually needed by `bindTools` */\nexport interface ToolSpec {\n name: string;\n description?: string;\n schema: InteropZodType | Record<string, unknown>; // Either a Zod schema *or* a plain JSON-Schema object\n}\n\n/**\n * Interface specific to the Fake Streaming Chat model.\n */\nexport interface FakeStreamingChatModelCallOptions extends BaseChatModelCallOptions {}\n/**\n * Interface for the Constructor-field specific to the Fake Streaming Chat model (all optional because we fill in defaults).\n */\nexport interface FakeStreamingChatModelFields extends BaseChatModelParams {\n /** Milliseconds to pause between fallback char-by-char chunks */\n sleep?: number;\n\n /** Full AI messages to fall back to when no `chunks` supplied */\n responses?: BaseMessage[];\n\n /** Exact chunks to emit (can include tool-call deltas) */\n chunks?: AIMessageChunk[];\n\n /** How tool specs are formatted in `bindTools` */\n toolStyle?: \"openai\" | \"anthropic\" | \"bedrock\" | \"google\";\n\n /** Throw this error instead of streaming (useful in tests) */\n thrownErrorString?: string;\n}\n\nexport class FakeChatModel extends BaseChatModel {\n _combineLLMOutput() {\n return [];\n }\n\n _llmType(): string {\n return \"fake\";\n }\n\n async _generate(\n messages: BaseMessage[],\n options?: this[\"ParsedCallOptions\"],\n runManager?: CallbackManagerForLLMRun\n ): Promise<ChatResult> {\n if (options?.stop?.length) {\n return {\n generations: [\n {\n message: new AIMessage(options.stop[0]),\n text: options.stop[0],\n },\n ],\n };\n }\n const text = messages\n .map((m) => {\n if (typeof m.content === \"string\") {\n return m.content;\n }\n return JSON.stringify(m.content, null, 2);\n })\n .join(\"\\n\");\n await runManager?.handleLLMNewToken(text);\n return {\n generations: [\n {\n message: new AIMessage(text),\n text,\n },\n ],\n llmOutput: {},\n };\n }\n}\n\nexport class FakeStreamingChatModel extends BaseChatModel<FakeStreamingChatModelCallOptions> {\n sleep = 50;\n\n responses: BaseMessage[] = [];\n\n chunks: AIMessageChunk[] = [];\n\n toolStyle: \"openai\" | \"anthropic\" | \"bedrock\" | \"google\" = \"openai\";\n\n thrownErrorString?: string;\n\n private tools: (StructuredTool | ToolSpec)[] = [];\n\n constructor({\n sleep = 50,\n responses = [],\n chunks = [],\n toolStyle = \"openai\",\n thrownErrorString,\n ...rest\n }: FakeStreamingChatModelFields & BaseLLMParams) {\n super(rest);\n this.sleep = sleep;\n this.responses = responses;\n this.chunks = chunks;\n this.toolStyle = toolStyle;\n this.thrownErrorString = thrownErrorString;\n }\n\n _llmType() {\n return \"fake\";\n }\n\n bindTools(tools: (StructuredTool | ToolSpec)[]) {\n const merged = [...this.tools, ...tools];\n\n const toolDicts = merged.map((t) => {\n switch (this.toolStyle) {\n case \"openai\":\n return {\n type: \"function\",\n function: {\n name: t.name,\n description: t.description,\n parameters: toJsonSchema(t.schema),\n },\n };\n case \"anthropic\":\n return {\n name: t.name,\n description: t.description,\n input_schema: toJsonSchema(t.schema),\n };\n case \"bedrock\":\n return {\n toolSpec: {\n name: t.name,\n description: t.description,\n inputSchema: toJsonSchema(t.schema),\n },\n };\n case \"google\":\n return {\n name: t.name,\n description: t.description,\n parameters: toJsonSchema(t.schema),\n };\n default:\n throw new Error(`Unsupported tool style: ${this.toolStyle}`);\n }\n });\n\n const wrapped =\n this.toolStyle === \"google\"\n ? [{ functionDeclarations: toolDicts }]\n : toolDicts;\n\n /* creating a *new* instance – mirrors LangChain .bind semantics for type-safety and avoiding noise */\n const next = new FakeStreamingChatModel({\n sleep: this.sleep,\n responses: this.responses,\n chunks: this.chunks,\n toolStyle: this.toolStyle,\n thrownErrorString: this.thrownErrorString,\n });\n next.tools = merged;\n\n return next.withConfig({ tools: wrapped } as BaseChatModelCallOptions);\n }\n\n async _generate(\n messages: BaseMessage[],\n _options: this[\"ParsedCallOptions\"],\n _runManager?: CallbackManagerForLLMRun\n ): Promise<ChatResult> {\n if (this.thrownErrorString) {\n throw new Error(this.thrownErrorString);\n }\n\n const content = this.responses?.[0]?.content ?? messages[0].content ?? \"\";\n\n const generation: ChatResult = {\n generations: [\n {\n text: \"\",\n message: new AIMessage({\n content,\n tool_calls: this.chunks?.[0]?.tool_calls,\n }),\n },\n ],\n };\n\n return generation;\n }\n\n async *_streamResponseChunks(\n _messages: BaseMessage[],\n options: this[\"ParsedCallOptions\"],\n runManager?: CallbackManagerForLLMRun\n ): AsyncGenerator<ChatGenerationChunk> {\n if (this.thrownErrorString) {\n throw new Error(this.thrownErrorString);\n }\n if (this.chunks?.length) {\n for (const msgChunk of this.chunks) {\n const cg = new ChatGenerationChunk({\n message: new AIMessageChunk({\n content: msgChunk.content,\n tool_calls: msgChunk.tool_calls,\n additional_kwargs: msgChunk.additional_kwargs ?? {},\n }),\n text: msgChunk.content?.toString() ?? \"\",\n });\n\n if (options.signal?.aborted) break;\n yield cg;\n await runManager?.handleLLMNewToken(\n msgChunk.content as string,\n undefined,\n undefined,\n undefined,\n undefined,\n { chunk: cg }\n );\n }\n return;\n }\n\n const fallback =\n this.responses?.[0] ??\n new AIMessage(\n typeof _messages[0].content === \"string\" ? _messages[0].content : \"\"\n );\n const text = typeof fallback.content === \"string\" ? fallback.content : \"\";\n\n for (const ch of text) {\n await new Promise((r) => setTimeout(r, this.sleep));\n const cg = new ChatGenerationChunk({\n message: new AIMessageChunk({ content: ch }),\n text: ch,\n });\n if (options.signal?.aborted) break;\n yield cg;\n await runManager?.handleLLMNewToken(\n ch,\n undefined,\n undefined,\n undefined,\n undefined,\n { chunk: cg }\n );\n }\n }\n}\n\n/**\n * Interface for the input parameters specific to the Fake List Chat model.\n */\nexport interface FakeChatInput extends BaseChatModelParams {\n /** Responses to return */\n responses: string[];\n\n /** Time to sleep in milliseconds between responses */\n sleep?: number;\n\n emitCustomEvent?: boolean;\n\n /**\n * Generation info to include on the last chunk during streaming.\n * This gets merged into response_metadata by the base chat model.\n * Useful for testing response_metadata propagation (e.g., finish_reason).\n */\n generationInfo?: Record<string, unknown>;\n}\n\nexport interface FakeListChatModelCallOptions extends BaseChatModelCallOptions {\n thrownErrorString?: string;\n}\n\n/**\n * A fake Chat Model that returns a predefined list of responses. It can be used\n * for testing purposes.\n * @example\n * ```typescript\n * const chat = new FakeListChatModel({\n * responses: [\"I'll callback later.\", \"You 'console' them!\"]\n * });\n *\n * const firstMessage = new HumanMessage(\"You want to hear a JavaScript joke?\");\n * const secondMessage = new HumanMessage(\"How do you cheer up a JavaScript developer?\");\n *\n * // Call the chat model with a message and log the response\n * const firstResponse = await chat.call([firstMessage]);\n * console.log({ firstResponse });\n *\n * const secondResponse = await chat.call([secondMessage]);\n * console.log({ secondResponse });\n * ```\n */\nexport class FakeListChatModel extends BaseChatModel<FakeListChatModelCallOptions> {\n static lc_name() {\n return \"FakeListChatModel\";\n }\n\n lc_serializable = true;\n\n responses: string[];\n\n i = 0;\n\n sleep?: number;\n\n emitCustomEvent = false;\n\n generationInfo?: Record<string, unknown>;\n\n private tools: (StructuredTool | ToolSpec)[] = [];\n\n toolStyle: \"openai\" | \"anthropic\" | \"bedrock\" | \"google\" = \"openai\";\n\n constructor(params: FakeChatInput) {\n super(params);\n const { responses, sleep, emitCustomEvent, generationInfo } = params;\n this.responses = responses;\n this.sleep = sleep;\n this.emitCustomEvent = emitCustomEvent ?? this.emitCustomEvent;\n this.generationInfo = generationInfo;\n }\n\n _combineLLMOutput() {\n return [];\n }\n\n _llmType(): string {\n return \"fake-list\";\n }\n\n async _generate(\n _messages: BaseMessage[],\n options?: this[\"ParsedCallOptions\"],\n runManager?: CallbackManagerForLLMRun\n ): Promise<ChatResult> {\n await this._sleepIfRequested();\n if (options?.thrownErrorString) {\n throw new Error(options.thrownErrorString);\n }\n if (this.emitCustomEvent) {\n await runManager?.handleCustomEvent(\"some_test_event\", {\n someval: true,\n });\n }\n\n if (options?.stop?.length) {\n return {\n generations: [this._formatGeneration(options.stop[0])],\n };\n } else {\n const response = this._currentResponse();\n this._incrementResponse();\n\n return {\n generations: [this._formatGeneration(response)],\n llmOutput: {},\n };\n }\n }\n\n _formatGeneration(text: string) {\n return {\n message: new AIMessage(text),\n text,\n };\n }\n\n async *_streamResponseChunks(\n _messages: BaseMessage[],\n options: this[\"ParsedCallOptions\"],\n runManager?: CallbackManagerForLLMRun\n ): AsyncGenerator<ChatGenerationChunk> {\n const response = this._currentResponse();\n this._incrementResponse();\n if (this.emitCustomEvent) {\n await runManager?.handleCustomEvent(\"some_test_event\", {\n someval: true,\n });\n }\n\n const responseChars = [...response];\n for (let i = 0; i < responseChars.length; i++) {\n const text = responseChars[i];\n const isLastChunk = i === responseChars.length - 1;\n await this._sleepIfRequested();\n if (options?.thrownErrorString) {\n throw new Error(options.thrownErrorString);\n }\n // Include generationInfo on the last chunk (like real providers do)\n // This gets merged into response_metadata by the base chat model\n const chunk = this._createResponseChunk(\n text,\n isLastChunk ? this.generationInfo : undefined\n );\n if (options.signal?.aborted) break;\n yield chunk;\n // oxlint-disable-next-line no-void\n void runManager?.handleLLMNewToken(text);\n }\n }\n\n async _sleepIfRequested() {\n if (this.sleep !== undefined) {\n await this._sleep();\n }\n }\n\n async _sleep() {\n return new Promise<void>((resolve) => {\n setTimeout(() => resolve(), this.sleep);\n });\n }\n\n _createResponseChunk(\n text: string,\n // oxlint-disable-next-line @typescript-eslint/no-explicit-any\n generationInfo?: Record<string, any>\n ): ChatGenerationChunk {\n return new ChatGenerationChunk({\n message: new AIMessageChunk({ content: text }),\n text,\n generationInfo,\n });\n }\n\n _currentResponse() {\n return this.responses[this.i];\n }\n\n _incrementResponse() {\n if (this.i < this.responses.length - 1) {\n this.i += 1;\n } else {\n this.i = 0;\n }\n }\n\n bindTools(tools: (StructuredTool | ToolSpec)[]) {\n const merged = [...this.tools, ...tools];\n\n const toolDicts = merged.map((t) => {\n switch (this.toolStyle) {\n case \"openai\":\n return {\n type: \"function\",\n function: {\n name: t.name,\n description: t.description,\n parameters: toJsonSchema(t.schema),\n },\n };\n case \"anthropic\":\n return {\n name: t.name,\n description: t.description,\n input_schema: toJsonSchema(t.schema),\n };\n case \"bedrock\":\n return {\n toolSpec: {\n name: t.name,\n description: t.description,\n inputSchema: toJsonSchema(t.schema),\n },\n };\n case \"google\":\n return {\n name: t.name,\n description: t.description,\n parameters: toJsonSchema(t.schema),\n };\n default:\n throw new Error(`Unsupported tool style: ${this.toolStyle}`);\n }\n });\n\n const wrapped =\n this.toolStyle === \"google\"\n ? [{ functionDeclarations: toolDicts }]\n : toolDicts;\n\n const next = new FakeListChatModel({\n responses: this.responses,\n sleep: this.sleep,\n emitCustomEvent: this.emitCustomEvent,\n generationInfo: this.generationInfo,\n });\n next.tools = merged;\n next.toolStyle = this.toolStyle;\n next.i = this.i;\n\n return next.withConfig({ tools: wrapped } as BaseChatModelCallOptions);\n }\n\n withStructuredOutput<\n // oxlint-disable-next-line @typescript-eslint/no-explicit-any\n RunOutput extends Record<string, any> = Record<string, any>,\n >(\n _params:\n | StructuredOutputMethodParams<RunOutput, false>\n | InteropZodType<RunOutput>\n // oxlint-disable-next-line @typescript-eslint/no-explicit-any\n | Record<string, any>,\n config?: StructuredOutputMethodOptions<false>\n ): Runnable<BaseLanguageModelInput, RunOutput>;\n\n withStructuredOutput<\n // oxlint-disable-next-line @typescript-eslint/no-explicit-any\n RunOutput extends Record<string, any> = Record<string, any>,\n >(\n _params:\n | StructuredOutputMethodParams<RunOutput, true>\n | InteropZodType<RunOutput>\n // oxlint-disable-next-line @typescript-eslint/no-explicit-any\n | Record<string, any>,\n config?: StructuredOutputMethodOptions<true>\n ): Runnable<BaseLanguageModelInput, { raw: BaseMessage; parsed: RunOutput }>;\n\n withStructuredOutput<\n // oxlint-disable-next-line @typescript-eslint/no-explicit-any\n RunOutput extends Record<string, any> = Record<string, any>,\n >(\n _params:\n | StructuredOutputMethodParams<RunOutput, boolean>\n | InteropZodType<RunOutput>\n // oxlint-disable-next-line @typescript-eslint/no-explicit-any\n | Record<string, any>,\n _config?: StructuredOutputMethodOptions<boolean>\n ):\n | Runnable<BaseLanguageModelInput, RunOutput>\n | Runnable<\n BaseLanguageModelInput,\n { raw: BaseMessage; parsed: RunOutput }\n > {\n return RunnableLambda.from(async (input) => {\n const message = await this.invoke(input);\n if (message.tool_calls?.[0]?.args) {\n return message.tool_calls[0].args as RunOutput;\n }\n if (typeof message.content === \"string\") {\n return JSON.parse(message.content);\n }\n throw new Error(\"No structured output found\");\n }) as Runnable;\n }\n}\n"],"mappings":"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"}