@n8n/ai-utilities 0.23.3 → 0.24.0

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 (282) hide show
  1. package/dist/cjs/adapters/langchain-chat-model.js +174 -184
  2. package/dist/cjs/adapters/langchain-chat-model.js.map +1 -1
  3. package/dist/cjs/adapters/langchain-history.js +23 -33
  4. package/dist/cjs/adapters/langchain-history.js.map +1 -1
  5. package/dist/cjs/adapters/langchain-memory.js +32 -42
  6. package/dist/cjs/adapters/langchain-memory.js.map +1 -1
  7. package/dist/cjs/agent-config/config-normalization.d.ts +11 -0
  8. package/dist/cjs/agent-config/config-normalization.js +134 -0
  9. package/dist/cjs/agent-config/config-normalization.js.map +1 -0
  10. package/dist/cjs/agent-config/from-ai-node-parameters.d.ts +7 -0
  11. package/dist/cjs/agent-config/from-ai-node-parameters.js +43 -0
  12. package/dist/cjs/agent-config/from-ai-node-parameters.js.map +1 -0
  13. package/dist/cjs/agent-config/index.d.ts +3 -0
  14. package/dist/cjs/agent-config/index.js +17 -0
  15. package/dist/cjs/agent-config/index.js.map +1 -0
  16. package/dist/cjs/agent-config/model-id.d.ts +5 -0
  17. package/dist/cjs/agent-config/model-id.js +16 -0
  18. package/dist/cjs/agent-config/model-id.js.map +1 -0
  19. package/dist/cjs/agent-config/native-web-search-provider-tools.d.ts +7 -0
  20. package/dist/cjs/agent-config/native-web-search-provider-tools.js +55 -0
  21. package/dist/cjs/agent-config/native-web-search-provider-tools.js.map +1 -0
  22. package/dist/cjs/ai-node-sdk-version.js +4 -14
  23. package/dist/cjs/ai-node-sdk-version.js.map +1 -1
  24. package/dist/cjs/chat-model/base.js +21 -31
  25. package/dist/cjs/chat-model/base.js.map +1 -1
  26. package/dist/cjs/converters/message.js +308 -318
  27. package/dist/cjs/converters/message.js.map +1 -1
  28. package/dist/cjs/converters/tool.js +50 -60
  29. package/dist/cjs/converters/tool.js.map +1 -1
  30. package/dist/cjs/guards.js +26 -36
  31. package/dist/cjs/guards.js.map +1 -1
  32. package/dist/cjs/index.js +99 -108
  33. package/dist/cjs/index.js.map +1 -1
  34. package/dist/cjs/memory/base-chat-history.js +9 -19
  35. package/dist/cjs/memory/base-chat-history.js.map +1 -1
  36. package/dist/cjs/memory/base-chat-memory.js +6 -16
  37. package/dist/cjs/memory/base-chat-memory.js.map +1 -1
  38. package/dist/cjs/memory/windowed-chat-memory.js +33 -43
  39. package/dist/cjs/memory/windowed-chat-memory.js.map +1 -1
  40. package/dist/cjs/model-discovery/index.js +61 -71
  41. package/dist/cjs/model-discovery/index.js.map +1 -1
  42. package/dist/cjs/model-discovery/providers/anthropic.js +12 -22
  43. package/dist/cjs/model-discovery/providers/anthropic.js.map +1 -1
  44. package/dist/cjs/model-discovery/providers/cohere.js +12 -22
  45. package/dist/cjs/model-discovery/providers/cohere.js.map +1 -1
  46. package/dist/cjs/model-discovery/providers/deepseek.js +5 -15
  47. package/dist/cjs/model-discovery/providers/deepseek.js.map +1 -1
  48. package/dist/cjs/model-discovery/providers/google.js +15 -25
  49. package/dist/cjs/model-discovery/providers/google.js.map +1 -1
  50. package/dist/cjs/model-discovery/providers/groq.js +9 -19
  51. package/dist/cjs/model-discovery/providers/groq.js.map +1 -1
  52. package/dist/cjs/model-discovery/providers/mistral.js +11 -21
  53. package/dist/cjs/model-discovery/providers/mistral.js.map +1 -1
  54. package/dist/cjs/model-discovery/providers/nvidia.js +21 -31
  55. package/dist/cjs/model-discovery/providers/nvidia.js.map +1 -1
  56. package/dist/cjs/model-discovery/providers/openai.js +31 -41
  57. package/dist/cjs/model-discovery/providers/openai.js.map +1 -1
  58. package/dist/cjs/model-discovery/providers/openrouter.js +5 -15
  59. package/dist/cjs/model-discovery/providers/openrouter.js.map +1 -1
  60. package/dist/cjs/model-discovery/providers/vercel.js +5 -15
  61. package/dist/cjs/model-discovery/providers/vercel.js.map +1 -1
  62. package/dist/cjs/model-discovery/providers/xai.js +5 -15
  63. package/dist/cjs/model-discovery/providers/xai.js.map +1 -1
  64. package/dist/cjs/model-discovery/request.js +40 -50
  65. package/dist/cjs/model-discovery/request.js.map +1 -1
  66. package/dist/cjs/model-discovery/types.js +2 -12
  67. package/dist/cjs/node-catalog/discriminator-utils.js +75 -85
  68. package/dist/cjs/node-catalog/discriminator-utils.js.map +1 -1
  69. package/dist/cjs/node-catalog/dynamic-node-parameters.js +169 -179
  70. package/dist/cjs/node-catalog/dynamic-node-parameters.js.map +1 -1
  71. package/dist/cjs/node-catalog/get.js +349 -359
  72. package/dist/cjs/node-catalog/get.js.map +1 -1
  73. package/dist/cjs/node-catalog/index.js +42 -52
  74. package/dist/cjs/node-catalog/index.js.map +1 -1
  75. package/dist/cjs/node-catalog/lean-node-type.js +46 -56
  76. package/dist/cjs/node-catalog/lean-node-type.js.map +1 -1
  77. package/dist/cjs/node-catalog/node-type-parser.js +61 -71
  78. package/dist/cjs/node-catalog/node-type-parser.js.map +1 -1
  79. package/dist/cjs/node-catalog/resource-operation-extractor.js +133 -143
  80. package/dist/cjs/node-catalog/resource-operation-extractor.js.map +1 -1
  81. package/dist/cjs/node-catalog/search-engine.js +285 -295
  82. package/dist/cjs/node-catalog/search-engine.js.map +1 -1
  83. package/dist/cjs/node-catalog/search.js +280 -290
  84. package/dist/cjs/node-catalog/search.js.map +1 -1
  85. package/dist/cjs/node-catalog/suggested-nodes-data.js +235 -245
  86. package/dist/cjs/node-catalog/suggested-nodes-data.js.map +1 -1
  87. package/dist/cjs/node-catalog/suggested.js +63 -73
  88. package/dist/cjs/node-catalog/suggested.js.map +1 -1
  89. package/dist/cjs/node-catalog/types.js +2 -12
  90. package/dist/cjs/suppliers/supplyMemory.js +13 -23
  91. package/dist/cjs/suppliers/supplyMemory.js.map +1 -1
  92. package/dist/cjs/suppliers/supplyModel.js +72 -82
  93. package/dist/cjs/suppliers/supplyModel.js.map +1 -1
  94. package/dist/cjs/typecheck.tsbuildinfo +1 -1
  95. package/dist/cjs/types/chat-model.js +2 -12
  96. package/dist/cjs/types/json.js +2 -12
  97. package/dist/cjs/types/memory.js +2 -12
  98. package/dist/cjs/types/message.js +2 -12
  99. package/dist/cjs/types/openai.js +2 -12
  100. package/dist/cjs/types/output.js +2 -12
  101. package/dist/cjs/types/tool.js +2 -12
  102. package/dist/cjs/utils/embeddings-input-validation.js +24 -34
  103. package/dist/cjs/utils/embeddings-input-validation.js.map +1 -1
  104. package/dist/cjs/utils/failed-attempt-handler/n8nDefaultFailedAttemptHandler.js +27 -37
  105. package/dist/cjs/utils/failed-attempt-handler/n8nDefaultFailedAttemptHandler.js.map +1 -1
  106. package/dist/cjs/utils/failed-attempt-handler/n8nLlmFailedAttemptHandler.d.ts +1 -1
  107. package/dist/cjs/utils/failed-attempt-handler/n8nLlmFailedAttemptHandler.js +23 -33
  108. package/dist/cjs/utils/failed-attempt-handler/n8nLlmFailedAttemptHandler.js.map +1 -1
  109. package/dist/cjs/utils/follow-redirects.js +38 -48
  110. package/dist/cjs/utils/follow-redirects.js.map +1 -1
  111. package/dist/cjs/utils/fromai-helpers.js +21 -31
  112. package/dist/cjs/utils/fromai-helpers.js.map +1 -1
  113. package/dist/cjs/utils/fromai-tool-factory.js +18 -28
  114. package/dist/cjs/utils/fromai-tool-factory.js.map +1 -1
  115. package/dist/cjs/utils/helpers.js +44 -54
  116. package/dist/cjs/utils/helpers.js.map +1 -1
  117. package/dist/cjs/utils/http-proxy-agent.js +38 -48
  118. package/dist/cjs/utils/http-proxy-agent.js.map +1 -1
  119. package/dist/cjs/utils/lazy-import.d.ts +1 -0
  120. package/dist/cjs/utils/lazy-import.js +7 -0
  121. package/dist/cjs/utils/lazy-import.js.map +1 -0
  122. package/dist/cjs/utils/loaders/n8n-pdf-loader.js +50 -94
  123. package/dist/cjs/utils/loaders/n8n-pdf-loader.js.map +1 -1
  124. package/dist/cjs/utils/log-ai-event.js +10 -20
  125. package/dist/cjs/utils/log-ai-event.js.map +1 -1
  126. package/dist/cjs/utils/log-wrapper.d.ts +1 -1
  127. package/dist/cjs/utils/log-wrapper.js +313 -323
  128. package/dist/cjs/utils/log-wrapper.js.map +1 -1
  129. package/dist/cjs/utils/n8n-binary-loader.js +143 -153
  130. package/dist/cjs/utils/n8n-binary-loader.js.map +1 -1
  131. package/dist/cjs/utils/n8n-json-loader.js +57 -67
  132. package/dist/cjs/utils/n8n-json-loader.js.map +1 -1
  133. package/dist/cjs/utils/n8n-llm-tracing.js +164 -174
  134. package/dist/cjs/utils/n8n-llm-tracing.js.map +1 -1
  135. package/dist/cjs/utils/redact-headers.js +42 -52
  136. package/dist/cjs/utils/redact-headers.js.map +1 -1
  137. package/dist/cjs/utils/shared-fields.js +137 -147
  138. package/dist/cjs/utils/shared-fields.js.map +1 -1
  139. package/dist/cjs/utils/sse.js +83 -93
  140. package/dist/cjs/utils/sse.js.map +1 -1
  141. package/dist/cjs/utils/text-editor.js +274 -284
  142. package/dist/cjs/utils/text-editor.js.map +1 -1
  143. package/dist/cjs/utils/tokenizer/tiktoken.js +38 -48
  144. package/dist/cjs/utils/tokenizer/tiktoken.js.map +1 -1
  145. package/dist/cjs/utils/tokenizer/token-estimator.js +86 -96
  146. package/dist/cjs/utils/tokenizer/token-estimator.js.map +1 -1
  147. package/dist/cjs/utils/vector-store/MemoryManager/MemoryCalculator.js +43 -53
  148. package/dist/cjs/utils/vector-store/MemoryManager/MemoryCalculator.js.map +1 -1
  149. package/dist/cjs/utils/vector-store/MemoryManager/MemoryVectorStoreManager.js +154 -164
  150. package/dist/cjs/utils/vector-store/MemoryManager/MemoryVectorStoreManager.js.map +1 -1
  151. package/dist/cjs/utils/vector-store/MemoryManager/StoreCleanupService.js +82 -92
  152. package/dist/cjs/utils/vector-store/MemoryManager/StoreCleanupService.js.map +1 -1
  153. package/dist/cjs/utils/vector-store/MemoryManager/config.js +34 -44
  154. package/dist/cjs/utils/vector-store/MemoryManager/config.js.map +1 -1
  155. package/dist/cjs/utils/vector-store/MemoryManager/types.js +2 -12
  156. package/dist/cjs/utils/vector-store/createVectorStoreNode/constants.js +44 -54
  157. package/dist/cjs/utils/vector-store/createVectorStoreNode/constants.js.map +1 -1
  158. package/dist/cjs/utils/vector-store/createVectorStoreNode/createVectorStoreNode.js +229 -229
  159. package/dist/cjs/utils/vector-store/createVectorStoreNode/createVectorStoreNode.js.map +1 -1
  160. package/dist/cjs/utils/vector-store/createVectorStoreNode/operations/index.js +8 -18
  161. package/dist/cjs/utils/vector-store/createVectorStoreNode/operations/index.js.map +1 -1
  162. package/dist/cjs/utils/vector-store/createVectorStoreNode/operations/insertOperation.js +33 -43
  163. package/dist/cjs/utils/vector-store/createVectorStoreNode/operations/insertOperation.js.map +1 -1
  164. package/dist/cjs/utils/vector-store/createVectorStoreNode/operations/loadOperation.js +41 -51
  165. package/dist/cjs/utils/vector-store/createVectorStoreNode/operations/loadOperation.js.map +1 -1
  166. package/dist/cjs/utils/vector-store/createVectorStoreNode/operations/retrieveAsToolExecuteOperation.js +59 -69
  167. package/dist/cjs/utils/vector-store/createVectorStoreNode/operations/retrieveAsToolExecuteOperation.js.map +1 -1
  168. package/dist/cjs/utils/vector-store/createVectorStoreNode/operations/retrieveAsToolOperation.js +58 -68
  169. package/dist/cjs/utils/vector-store/createVectorStoreNode/operations/retrieveAsToolOperation.js.map +1 -1
  170. package/dist/cjs/utils/vector-store/createVectorStoreNode/operations/retrieveOperation.js +26 -36
  171. package/dist/cjs/utils/vector-store/createVectorStoreNode/operations/retrieveOperation.js.map +1 -1
  172. package/dist/cjs/utils/vector-store/createVectorStoreNode/operations/updateOperation.js +34 -44
  173. package/dist/cjs/utils/vector-store/createVectorStoreNode/operations/updateOperation.js.map +1 -1
  174. package/dist/cjs/utils/vector-store/createVectorStoreNode/types.js +2 -12
  175. package/dist/cjs/utils/vector-store/createVectorStoreNode/utils.d.ts +2 -1
  176. package/dist/cjs/utils/vector-store/createVectorStoreNode/utils.js +34 -29
  177. package/dist/cjs/utils/vector-store/createVectorStoreNode/utils.js.map +1 -1
  178. package/dist/cjs/utils/vector-store/processDocuments.js +37 -47
  179. package/dist/cjs/utils/vector-store/processDocuments.js.map +1 -1
  180. package/dist/cjs/utils/workflow-text-editor.js +50 -60
  181. package/dist/cjs/utils/workflow-text-editor.js.map +1 -1
  182. package/dist/cjs/web-search/brave-search.js +38 -48
  183. package/dist/cjs/web-search/brave-search.js.map +1 -1
  184. package/dist/cjs/web-search/index.js +7 -17
  185. package/dist/cjs/web-search/index.js.map +1 -1
  186. package/dist/cjs/web-search/searxng-search.js +35 -45
  187. package/dist/cjs/web-search/searxng-search.js.map +1 -1
  188. package/dist/cjs/web-search/types.js +2 -12
  189. package/dist/esm/adapters/langchain-chat-model.js.map +1 -1
  190. package/dist/esm/adapters/langchain-history.js.map +1 -1
  191. package/dist/esm/adapters/langchain-memory.js.map +1 -1
  192. package/dist/esm/agent-config/config-normalization.d.ts +11 -0
  193. package/dist/esm/agent-config/config-normalization.js +134 -0
  194. package/dist/esm/agent-config/config-normalization.js.map +1 -0
  195. package/dist/esm/agent-config/from-ai-node-parameters.d.ts +7 -0
  196. package/dist/esm/agent-config/from-ai-node-parameters.js +43 -0
  197. package/dist/esm/agent-config/from-ai-node-parameters.js.map +1 -0
  198. package/dist/esm/agent-config/index.d.ts +3 -0
  199. package/dist/esm/agent-config/index.js +17 -0
  200. package/dist/esm/agent-config/index.js.map +1 -0
  201. package/dist/esm/agent-config/model-id.d.ts +5 -0
  202. package/dist/esm/agent-config/model-id.js +16 -0
  203. package/dist/esm/agent-config/model-id.js.map +1 -0
  204. package/dist/esm/agent-config/native-web-search-provider-tools.d.ts +7 -0
  205. package/dist/esm/agent-config/native-web-search-provider-tools.js +55 -0
  206. package/dist/esm/agent-config/native-web-search-provider-tools.js.map +1 -0
  207. package/dist/esm/chat-model/base.js.map +1 -1
  208. package/dist/esm/converters/message.js.map +1 -1
  209. package/dist/esm/converters/tool.js.map +1 -1
  210. package/dist/esm/guards.js.map +1 -1
  211. package/dist/esm/index.js.map +1 -1
  212. package/dist/esm/memory/base-chat-history.js.map +1 -1
  213. package/dist/esm/memory/base-chat-memory.js.map +1 -1
  214. package/dist/esm/memory/windowed-chat-memory.js.map +1 -1
  215. package/dist/esm/model-discovery/index.js.map +1 -1
  216. package/dist/esm/model-discovery/providers/anthropic.js.map +1 -1
  217. package/dist/esm/model-discovery/providers/cohere.js.map +1 -1
  218. package/dist/esm/model-discovery/providers/google.js.map +1 -1
  219. package/dist/esm/model-discovery/providers/groq.js.map +1 -1
  220. package/dist/esm/model-discovery/providers/mistral.js.map +1 -1
  221. package/dist/esm/model-discovery/providers/nvidia.js.map +1 -1
  222. package/dist/esm/model-discovery/providers/openai.js.map +1 -1
  223. package/dist/esm/model-discovery/request.js.map +1 -1
  224. package/dist/esm/node-catalog/discriminator-utils.js.map +1 -1
  225. package/dist/esm/node-catalog/dynamic-node-parameters.js.map +1 -1
  226. package/dist/esm/node-catalog/get.js.map +1 -1
  227. package/dist/esm/node-catalog/lean-node-type.js.map +1 -1
  228. package/dist/esm/node-catalog/node-type-parser.js.map +1 -1
  229. package/dist/esm/node-catalog/resource-operation-extractor.js.map +1 -1
  230. package/dist/esm/node-catalog/search-engine.js.map +1 -1
  231. package/dist/esm/node-catalog/search.js.map +1 -1
  232. package/dist/esm/node-catalog/suggested-nodes-data.js.map +1 -1
  233. package/dist/esm/node-catalog/suggested.js.map +1 -1
  234. package/dist/esm/suppliers/supplyMemory.js.map +1 -1
  235. package/dist/esm/suppliers/supplyModel.js.map +1 -1
  236. package/dist/esm/typecheck.tsbuildinfo +1 -1
  237. package/dist/esm/utils/embeddings-input-validation.js.map +1 -1
  238. package/dist/esm/utils/failed-attempt-handler/n8nDefaultFailedAttemptHandler.js.map +1 -1
  239. package/dist/esm/utils/failed-attempt-handler/n8nLlmFailedAttemptHandler.d.ts +1 -1
  240. package/dist/esm/utils/failed-attempt-handler/n8nLlmFailedAttemptHandler.js.map +1 -1
  241. package/dist/esm/utils/follow-redirects.js.map +1 -1
  242. package/dist/esm/utils/fromai-helpers.js.map +1 -1
  243. package/dist/esm/utils/fromai-tool-factory.js.map +1 -1
  244. package/dist/esm/utils/helpers.js.map +1 -1
  245. package/dist/esm/utils/http-proxy-agent.js.map +1 -1
  246. package/dist/esm/utils/lazy-import.d.ts +1 -0
  247. package/dist/esm/utils/lazy-import.js +7 -0
  248. package/dist/esm/utils/lazy-import.js.map +1 -0
  249. package/dist/esm/utils/loaders/n8n-pdf-loader.js +2 -35
  250. package/dist/esm/utils/loaders/n8n-pdf-loader.js.map +1 -1
  251. package/dist/esm/utils/log-ai-event.js.map +1 -1
  252. package/dist/esm/utils/log-wrapper.d.ts +1 -1
  253. package/dist/esm/utils/log-wrapper.js.map +1 -1
  254. package/dist/esm/utils/n8n-binary-loader.js.map +1 -1
  255. package/dist/esm/utils/n8n-json-loader.js.map +1 -1
  256. package/dist/esm/utils/n8n-llm-tracing.js.map +1 -1
  257. package/dist/esm/utils/redact-headers.js.map +1 -1
  258. package/dist/esm/utils/shared-fields.js.map +1 -1
  259. package/dist/esm/utils/sse.js.map +1 -1
  260. package/dist/esm/utils/text-editor.js.map +1 -1
  261. package/dist/esm/utils/tokenizer/tiktoken.js.map +1 -1
  262. package/dist/esm/utils/tokenizer/token-estimator.js.map +1 -1
  263. package/dist/esm/utils/vector-store/MemoryManager/MemoryCalculator.js.map +1 -1
  264. package/dist/esm/utils/vector-store/MemoryManager/MemoryVectorStoreManager.js.map +1 -1
  265. package/dist/esm/utils/vector-store/MemoryManager/StoreCleanupService.js.map +1 -1
  266. package/dist/esm/utils/vector-store/MemoryManager/config.js.map +1 -1
  267. package/dist/esm/utils/vector-store/createVectorStoreNode/createVectorStoreNode.js +43 -33
  268. package/dist/esm/utils/vector-store/createVectorStoreNode/createVectorStoreNode.js.map +1 -1
  269. package/dist/esm/utils/vector-store/createVectorStoreNode/operations/insertOperation.js.map +1 -1
  270. package/dist/esm/utils/vector-store/createVectorStoreNode/operations/loadOperation.js.map +1 -1
  271. package/dist/esm/utils/vector-store/createVectorStoreNode/operations/retrieveAsToolExecuteOperation.js.map +1 -1
  272. package/dist/esm/utils/vector-store/createVectorStoreNode/operations/retrieveAsToolOperation.js.map +1 -1
  273. package/dist/esm/utils/vector-store/createVectorStoreNode/operations/retrieveOperation.js.map +1 -1
  274. package/dist/esm/utils/vector-store/createVectorStoreNode/operations/updateOperation.js.map +1 -1
  275. package/dist/esm/utils/vector-store/createVectorStoreNode/utils.d.ts +2 -1
  276. package/dist/esm/utils/vector-store/createVectorStoreNode/utils.js +15 -0
  277. package/dist/esm/utils/vector-store/createVectorStoreNode/utils.js.map +1 -1
  278. package/dist/esm/utils/vector-store/processDocuments.js.map +1 -1
  279. package/dist/esm/utils/workflow-text-editor.js.map +1 -1
  280. package/dist/esm/web-search/brave-search.js.map +1 -1
  281. package/dist/esm/web-search/searxng-search.js.map +1 -1
  282. package/package.json +24 -9
@@ -1,322 +1,312 @@
1
- (function (factory) {
2
- if (typeof module === "object" && typeof module.exports === "object") {
3
- var v = factory(require, exports);
4
- if (v !== undefined) module.exports = v;
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.TextEditorDocument = exports.FileNotFoundError = exports.InvalidPathError = exports.InvalidViewRangeError = exports.InvalidLineNumberError = exports.MultipleMatchesError = exports.NoMatchFoundError = void 0;
4
+ exports.formatTextWithLineNumbers = formatTextWithLineNumbers;
5
+ exports.findDivergenceContext = findDivergenceContext;
6
+ exports.parseStrReplacements = parseStrReplacements;
7
+ class NoMatchFoundError extends Error {
8
+ constructor(_searchStr, nearMatchContext) {
9
+ const base = 'No exact match found for str_replace. The old_str content was not found in the file.';
10
+ const message = nearMatchContext ? `${base}\n${nearMatchContext}` : base;
11
+ super(message);
12
+ this.name = 'NoMatchFoundError';
5
13
  }
6
- else if (typeof define === "function" && define.amd) {
7
- define(["require", "exports"], factory);
14
+ }
15
+ exports.NoMatchFoundError = NoMatchFoundError;
16
+ class MultipleMatchesError extends Error {
17
+ constructor(count) {
18
+ super(`Found ${count} matches. Please provide more context to make the replacement unique.`);
19
+ this.name = 'MultipleMatchesError';
8
20
  }
9
- })(function (require, exports) {
10
- "use strict";
11
- Object.defineProperty(exports, "__esModule", { value: true });
12
- exports.TextEditorDocument = exports.FileNotFoundError = exports.InvalidPathError = exports.InvalidViewRangeError = exports.InvalidLineNumberError = exports.MultipleMatchesError = exports.NoMatchFoundError = void 0;
13
- exports.formatTextWithLineNumbers = formatTextWithLineNumbers;
14
- exports.findDivergenceContext = findDivergenceContext;
15
- exports.parseStrReplacements = parseStrReplacements;
16
- class NoMatchFoundError extends Error {
17
- constructor(_searchStr, nearMatchContext) {
18
- const base = 'No exact match found for str_replace. The old_str content was not found in the file.';
19
- const message = nearMatchContext ? `${base}\n${nearMatchContext}` : base;
20
- super(message);
21
- this.name = 'NoMatchFoundError';
22
- }
21
+ }
22
+ exports.MultipleMatchesError = MultipleMatchesError;
23
+ class InvalidLineNumberError extends Error {
24
+ constructor(line, maxLine) {
25
+ super(`Invalid line number ${line}. File has ${maxLine} lines (valid range: 0-${maxLine}).`);
26
+ this.name = 'InvalidLineNumberError';
23
27
  }
24
- exports.NoMatchFoundError = NoMatchFoundError;
25
- class MultipleMatchesError extends Error {
26
- constructor(count) {
27
- super(`Found ${count} matches. Please provide more context to make the replacement unique.`);
28
- this.name = 'MultipleMatchesError';
29
- }
28
+ }
29
+ exports.InvalidLineNumberError = InvalidLineNumberError;
30
+ class InvalidViewRangeError extends Error {
31
+ constructor(start, end, maxLine) {
32
+ super(`Invalid view range: end (${end}) must be >= start (${start}). File has ${maxLine} lines (valid range: 1-${maxLine}).`);
33
+ this.name = 'InvalidViewRangeError';
30
34
  }
31
- exports.MultipleMatchesError = MultipleMatchesError;
32
- class InvalidLineNumberError extends Error {
33
- constructor(line, maxLine) {
34
- super(`Invalid line number ${line}. File has ${maxLine} lines (valid range: 0-${maxLine}).`);
35
- this.name = 'InvalidLineNumberError';
36
- }
35
+ }
36
+ exports.InvalidViewRangeError = InvalidViewRangeError;
37
+ class InvalidPathError extends Error {
38
+ constructor(path, supportedPath, message) {
39
+ super(message ?? `Invalid path "${path}". Only ${supportedPath} is supported.`);
40
+ this.name = 'InvalidPathError';
37
41
  }
38
- exports.InvalidLineNumberError = InvalidLineNumberError;
39
- class InvalidViewRangeError extends Error {
40
- constructor(start, end, maxLine) {
41
- super(`Invalid view range: end (${end}) must be >= start (${start}). File has ${maxLine} lines (valid range: 1-${maxLine}).`);
42
- this.name = 'InvalidViewRangeError';
43
- }
42
+ }
43
+ exports.InvalidPathError = InvalidPathError;
44
+ class FileNotFoundError extends Error {
45
+ constructor(message = 'No file content exists yet. Use create first.') {
46
+ super(message);
47
+ this.name = 'FileNotFoundError';
44
48
  }
45
- exports.InvalidViewRangeError = InvalidViewRangeError;
46
- class InvalidPathError extends Error {
47
- constructor(path, supportedPath, message) {
48
- super(message ?? `Invalid path "${path}". Only ${supportedPath} is supported.`);
49
- this.name = 'InvalidPathError';
49
+ }
50
+ exports.FileNotFoundError = FileNotFoundError;
51
+ const PREVIEW_MAX_LENGTH = 80;
52
+ const MIN_PREFIX_LENGTH = 10;
53
+ const CONTEXT_LINES = 3;
54
+ const OLD_STR_CONTEXT_LENGTH = 40;
55
+ function truncatePreview(str) {
56
+ if (str.length <= PREVIEW_MAX_LENGTH)
57
+ return str;
58
+ return str.slice(0, PREVIEW_MAX_LENGTH) + '...';
59
+ }
60
+ function escapeWhitespace(str) {
61
+ return str.replace(/\n/g, '\\n').replace(/\t/g, '\\t').replace(/\r/g, '\\r');
62
+ }
63
+ function isObjectRecord(value) {
64
+ return typeof value === 'object' && value !== null && !Array.isArray(value);
65
+ }
66
+ function isUnknownArray(value) {
67
+ return Array.isArray(value);
68
+ }
69
+ function formatTextWithLineNumbers(text) {
70
+ const lines = text.split('\n');
71
+ return lines.map((line, i) => `${i + 1}: ${line}`).join('\n');
72
+ }
73
+ function findDivergenceContext(code, searchStr) {
74
+ let lo = 0;
75
+ let hi = searchStr.length;
76
+ while (lo < hi) {
77
+ const mid = Math.ceil((lo + hi) / 2);
78
+ if (code.includes(searchStr.substring(0, mid))) {
79
+ lo = mid;
50
80
  }
51
- }
52
- exports.InvalidPathError = InvalidPathError;
53
- class FileNotFoundError extends Error {
54
- constructor(message = 'No file content exists yet. Use create first.') {
55
- super(message);
56
- this.name = 'FileNotFoundError';
81
+ else {
82
+ hi = mid - 1;
57
83
  }
58
84
  }
59
- exports.FileNotFoundError = FileNotFoundError;
60
- const PREVIEW_MAX_LENGTH = 80;
61
- const MIN_PREFIX_LENGTH = 10;
62
- const CONTEXT_LINES = 3;
63
- const OLD_STR_CONTEXT_LENGTH = 40;
64
- function truncatePreview(str) {
65
- if (str.length <= PREVIEW_MAX_LENGTH)
66
- return str;
67
- return str.slice(0, PREVIEW_MAX_LENGTH) + '...';
68
- }
69
- function escapeWhitespace(str) {
70
- return str.replace(/\n/g, '\\n').replace(/\t/g, '\\t').replace(/\r/g, '\\r');
71
- }
72
- function isObjectRecord(value) {
73
- return typeof value === 'object' && value !== null && !Array.isArray(value);
74
- }
75
- function isUnknownArray(value) {
76
- return Array.isArray(value);
85
+ const matchLength = lo;
86
+ if (matchLength < MIN_PREFIX_LENGTH)
87
+ return undefined;
88
+ const matchPos = code.indexOf(searchStr.substring(0, matchLength));
89
+ const divergePos = matchPos + matchLength;
90
+ const percentage = Math.round((matchLength / searchStr.length) * 100);
91
+ const codeUpToDiverge = code.substring(0, divergePos);
92
+ const divergeLine = codeUpToDiverge.split('\n').length;
93
+ const oldStrRemainder = searchStr.substring(matchLength, matchLength + OLD_STR_CONTEXT_LENGTH);
94
+ const oldStrPrefix = searchStr.substring(Math.max(0, matchLength - 20), matchLength);
95
+ const codeLines = code.split('\n');
96
+ const startLine = Math.max(0, divergeLine - CONTEXT_LINES);
97
+ const endLine = Math.min(codeLines.length, divergeLine + 1);
98
+ const fileContext = codeLines
99
+ .slice(startLine, endLine)
100
+ .map((line, i) => ` ${startLine + i + 1}: ${line}`)
101
+ .join('\n');
102
+ return (`Closest match (${percentage}% of old_str matched, diverges at line ${divergeLine}):\n` +
103
+ ` old_str: ...${escapeWhitespace(oldStrPrefix)}>>> ${escapeWhitespace(oldStrRemainder)}\n` +
104
+ ` file:\n${fileContext}`);
105
+ }
106
+ function parseStrReplacements(raw) {
107
+ let parsed = raw;
108
+ if (typeof parsed === 'string') {
109
+ try {
110
+ parsed = JSON.parse(parsed);
111
+ }
112
+ catch {
113
+ throw new Error('replacements must be a JSON array of {old_str, new_str} objects, but received an invalid JSON string.');
114
+ }
77
115
  }
78
- function formatTextWithLineNumbers(text) {
79
- const lines = text.split('\n');
80
- return lines.map((line, i) => `${i + 1}: ${line}`).join('\n');
116
+ if (!isUnknownArray(parsed)) {
117
+ throw new Error('replacements must be an array of {old_str, new_str} objects. Example: {"replacements": [{"old_str": "foo", "new_str": "bar"}]}');
81
118
  }
82
- function findDivergenceContext(code, searchStr) {
83
- let lo = 0;
84
- let hi = searchStr.length;
85
- while (lo < hi) {
86
- const mid = Math.ceil((lo + hi) / 2);
87
- if (code.includes(searchStr.substring(0, mid))) {
88
- lo = mid;
89
- }
90
- else {
91
- hi = mid - 1;
92
- }
119
+ const replacements = [];
120
+ for (let i = 0; i < parsed.length; i++) {
121
+ const item = parsed[i];
122
+ if (!isObjectRecord(item) || typeof item.old_str !== 'string') {
123
+ throw new Error(`replacements[${i}] is missing a valid "old_str" string. Each replacement must have {old_str: string, new_str: string}.`);
124
+ }
125
+ if (typeof item.new_str !== 'string') {
126
+ throw new Error(`replacements[${i}] is missing a valid "new_str" string. Each replacement must have {old_str: string, new_str: string}.`);
93
127
  }
94
- const matchLength = lo;
95
- if (matchLength < MIN_PREFIX_LENGTH)
96
- return undefined;
97
- const matchPos = code.indexOf(searchStr.substring(0, matchLength));
98
- const divergePos = matchPos + matchLength;
99
- const percentage = Math.round((matchLength / searchStr.length) * 100);
100
- const codeUpToDiverge = code.substring(0, divergePos);
101
- const divergeLine = codeUpToDiverge.split('\n').length;
102
- const oldStrRemainder = searchStr.substring(matchLength, matchLength + OLD_STR_CONTEXT_LENGTH);
103
- const oldStrPrefix = searchStr.substring(Math.max(0, matchLength - 20), matchLength);
104
- const codeLines = code.split('\n');
105
- const startLine = Math.max(0, divergeLine - CONTEXT_LINES);
106
- const endLine = Math.min(codeLines.length, divergeLine + 1);
107
- const fileContext = codeLines
108
- .slice(startLine, endLine)
109
- .map((line, i) => ` ${startLine + i + 1}: ${line}`)
110
- .join('\n');
111
- return (`Closest match (${percentage}% of old_str matched, diverges at line ${divergeLine}):\n` +
112
- ` old_str: ...${escapeWhitespace(oldStrPrefix)}>>> ${escapeWhitespace(oldStrRemainder)}\n` +
113
- ` file:\n${fileContext}`);
128
+ replacements.push({ old_str: item.old_str, new_str: item.new_str });
114
129
  }
115
- function parseStrReplacements(raw) {
116
- let parsed = raw;
117
- if (typeof parsed === 'string') {
118
- try {
119
- parsed = JSON.parse(parsed);
120
- }
121
- catch {
122
- throw new Error('replacements must be a JSON array of {old_str, new_str} objects, but received an invalid JSON string.');
123
- }
130
+ return replacements;
131
+ }
132
+ class TextEditorDocument {
133
+ constructor(options = {}) {
134
+ this.text = options.initialText ?? null;
135
+ this.options = options;
136
+ }
137
+ execute(command) {
138
+ if (command.command === 'create') {
139
+ this.validateCreatePath(command.path);
124
140
  }
125
- if (!isUnknownArray(parsed)) {
126
- throw new Error('replacements must be an array of {old_str, new_str} objects. Example: {"replacements": [{"old_str": "foo", "new_str": "bar"}]}');
141
+ this.validatePath(command.path);
142
+ switch (command.command) {
143
+ case 'view':
144
+ return this.handleView(command);
145
+ case 'create':
146
+ return this.handleCreate(command);
147
+ case 'str_replace':
148
+ return this.handleStrReplace(command);
149
+ case 'insert':
150
+ return this.handleInsert(command);
127
151
  }
128
- const replacements = [];
129
- for (let i = 0; i < parsed.length; i++) {
130
- const item = parsed[i];
131
- if (!isObjectRecord(item) || typeof item.old_str !== 'string') {
132
- throw new Error(`replacements[${i}] is missing a valid "old_str" string. Each replacement must have {old_str: string, new_str: string}.`);
133
- }
134
- if (typeof item.new_str !== 'string') {
135
- throw new Error(`replacements[${i}] is missing a valid "new_str" string. Each replacement must have {old_str: string, new_str: string}.`);
136
- }
137
- replacements.push({ old_str: item.old_str, new_str: item.new_str });
138
- }
139
- return replacements;
140
152
  }
141
- class TextEditorDocument {
142
- constructor(options = {}) {
143
- this.text = options.initialText ?? null;
144
- this.options = options;
153
+ executeBatch(replacements) {
154
+ if (this.text === null) {
155
+ throw this.createFileNotFoundError();
145
156
  }
146
- execute(command) {
147
- if (command.command === 'create') {
148
- this.validateCreatePath(command.path);
149
- }
150
- this.validatePath(command.path);
151
- switch (command.command) {
152
- case 'view':
153
- return this.handleView(command);
154
- case 'create':
155
- return this.handleCreate(command);
156
- case 'str_replace':
157
- return this.handleStrReplace(command);
158
- case 'insert':
159
- return this.handleInsert(command);
160
- }
157
+ if (replacements.length === 0) {
158
+ return 'No replacements to apply.';
161
159
  }
162
- executeBatch(replacements) {
163
- if (this.text === null) {
164
- throw this.createFileNotFoundError();
165
- }
166
- if (replacements.length === 0) {
167
- return 'No replacements to apply.';
160
+ const snapshot = this.text;
161
+ const results = [];
162
+ for (let i = 0; i < replacements.length; i++) {
163
+ const { old_str, new_str } = replacements[i];
164
+ const preview = truncatePreview(old_str);
165
+ const count = this.countOccurrences(this.text, old_str);
166
+ if (count === 0) {
167
+ this.text = snapshot;
168
+ results.push({
169
+ index: i,
170
+ old_str: preview,
171
+ status: 'failed',
172
+ error: new NoMatchFoundError(old_str).message,
173
+ });
174
+ this.appendNotAttemptedResults(results, replacements, i + 1);
175
+ return results;
168
176
  }
169
- const snapshot = this.text;
170
- const results = [];
171
- for (let i = 0; i < replacements.length; i++) {
172
- const { old_str, new_str } = replacements[i];
173
- const preview = truncatePreview(old_str);
174
- const count = this.countOccurrences(this.text, old_str);
175
- if (count === 0) {
176
- this.text = snapshot;
177
- results.push({
178
- index: i,
179
- old_str: preview,
180
- status: 'failed',
181
- error: new NoMatchFoundError(old_str).message,
182
- });
183
- this.appendNotAttemptedResults(results, replacements, i + 1);
184
- return results;
185
- }
186
- if (count > 1) {
187
- this.text = snapshot;
188
- results.push({
189
- index: i,
190
- old_str: preview,
191
- status: 'failed',
192
- error: new MultipleMatchesError(count).message,
193
- });
194
- this.appendNotAttemptedResults(results, replacements, i + 1);
195
- return results;
196
- }
197
- this.text = this.text.replace(old_str, this.escapeReplacement(new_str));
198
- results.push({ index: i, old_str: preview, status: 'success' });
177
+ if (count > 1) {
178
+ this.text = snapshot;
179
+ results.push({
180
+ index: i,
181
+ old_str: preview,
182
+ status: 'failed',
183
+ error: new MultipleMatchesError(count).message,
184
+ });
185
+ this.appendNotAttemptedResults(results, replacements, i + 1);
186
+ return results;
199
187
  }
200
- return `All ${replacements.length} replacements applied successfully.`;
201
- }
202
- getText() {
203
- return this.text;
204
- }
205
- setText(text) {
206
- this.text = text;
207
- }
208
- hasText() {
209
- return this.text !== null;
188
+ this.text = this.text.replace(old_str, this.escapeReplacement(new_str));
189
+ results.push({ index: i, old_str: preview, status: 'success' });
210
190
  }
211
- clearText() {
212
- this.text = null;
191
+ return `All ${replacements.length} replacements applied successfully.`;
192
+ }
193
+ getText() {
194
+ return this.text;
195
+ }
196
+ setText(text) {
197
+ this.text = text;
198
+ }
199
+ hasText() {
200
+ return this.text !== null;
201
+ }
202
+ clearText() {
203
+ this.text = null;
204
+ }
205
+ validateCreatePath(path) {
206
+ const supportedPath = this.options.supportedPath;
207
+ if (supportedPath === undefined || path === supportedPath) {
208
+ return;
213
209
  }
214
- validateCreatePath(path) {
215
- const supportedPath = this.options.supportedPath;
216
- if (supportedPath === undefined || path === supportedPath) {
217
- return;
218
- }
219
- throw new Error(this.options.createInvalidPathMessage?.(path, supportedPath) ??
220
- `Cannot create "${path}". Only ${supportedPath} is supported.`);
210
+ throw new Error(this.options.createInvalidPathMessage?.(path, supportedPath) ??
211
+ `Cannot create "${path}". Only ${supportedPath} is supported.`);
212
+ }
213
+ validatePath(path) {
214
+ const supportedPath = this.options.supportedPath;
215
+ if (supportedPath === undefined || path === supportedPath) {
216
+ return;
221
217
  }
222
- validatePath(path) {
223
- const supportedPath = this.options.supportedPath;
224
- if (supportedPath === undefined || path === supportedPath) {
225
- return;
226
- }
227
- throw this.createInvalidPathError(path, supportedPath, this.options.invalidPathMessage?.(path, supportedPath));
218
+ throw this.createInvalidPathError(path, supportedPath, this.options.invalidPathMessage?.(path, supportedPath));
219
+ }
220
+ handleView(command) {
221
+ if (this.text === null) {
222
+ throw this.createFileNotFoundError();
228
223
  }
229
- handleView(command) {
230
- if (this.text === null) {
231
- throw this.createFileNotFoundError();
224
+ const lines = this.text.split('\n');
225
+ if (command.view_range) {
226
+ const [start, rawEnd] = command.view_range;
227
+ const end = rawEnd === -1 ? lines.length : rawEnd;
228
+ if (start < 1 || start > lines.length) {
229
+ throw new InvalidLineNumberError(start, lines.length);
232
230
  }
233
- const lines = this.text.split('\n');
234
- if (command.view_range) {
235
- const [start, rawEnd] = command.view_range;
236
- const end = rawEnd === -1 ? lines.length : rawEnd;
237
- if (start < 1 || start > lines.length) {
238
- throw new InvalidLineNumberError(start, lines.length);
239
- }
240
- if (end < start) {
241
- throw new InvalidViewRangeError(start, end, lines.length);
242
- }
243
- const startIndex = start - 1;
244
- const endIndex = Math.min(end, lines.length);
245
- const selectedLines = lines.slice(startIndex, endIndex);
246
- return selectedLines.map((line, i) => `${startIndex + i + 1}: ${line}`).join('\n');
231
+ if (end < start) {
232
+ throw new InvalidViewRangeError(start, end, lines.length);
247
233
  }
248
- return formatTextWithLineNumbers(this.text);
234
+ const startIndex = start - 1;
235
+ const endIndex = Math.min(end, lines.length);
236
+ const selectedLines = lines.slice(startIndex, endIndex);
237
+ return selectedLines.map((line, i) => `${startIndex + i + 1}: ${line}`).join('\n');
249
238
  }
250
- handleCreate(command) {
251
- this.text = command.file_text;
252
- return 'File created successfully.';
239
+ return formatTextWithLineNumbers(this.text);
240
+ }
241
+ handleCreate(command) {
242
+ this.text = command.file_text;
243
+ return 'File created successfully.';
244
+ }
245
+ handleStrReplace(command) {
246
+ if (this.text === null) {
247
+ throw this.createFileNotFoundError();
253
248
  }
254
- handleStrReplace(command) {
255
- if (this.text === null) {
256
- throw this.createFileNotFoundError();
249
+ const { old_str, new_str } = command;
250
+ const count = this.countOccurrences(this.text, old_str);
251
+ if (count === 0) {
252
+ const normalized = old_str.endsWith('\n') ? old_str.slice(0, -1) : old_str + '\n';
253
+ const normalizedCount = this.countOccurrences(this.text, normalized);
254
+ if (normalizedCount === 1) {
255
+ this.text = this.text.replace(normalized, this.escapeReplacement(new_str));
256
+ return 'Edit applied successfully.';
257
257
  }
258
- const { old_str, new_str } = command;
259
- const count = this.countOccurrences(this.text, old_str);
260
- if (count === 0) {
261
- const normalized = old_str.endsWith('\n') ? old_str.slice(0, -1) : old_str + '\n';
262
- const normalizedCount = this.countOccurrences(this.text, normalized);
263
- if (normalizedCount === 1) {
264
- this.text = this.text.replace(normalized, this.escapeReplacement(new_str));
265
- return 'Edit applied successfully.';
266
- }
267
- const context = findDivergenceContext(this.text, old_str);
268
- throw new NoMatchFoundError(old_str, context);
269
- }
270
- if (count > 1) {
271
- throw new MultipleMatchesError(count);
272
- }
273
- this.text = this.text.replace(old_str, this.escapeReplacement(new_str));
274
- return 'Edit applied successfully.';
258
+ const context = findDivergenceContext(this.text, old_str);
259
+ throw new NoMatchFoundError(old_str, context);
275
260
  }
276
- handleInsert(command) {
277
- if (this.text === null) {
278
- throw this.createFileNotFoundError();
279
- }
280
- const { insert_line, insert_text } = command;
281
- const lines = this.text.split('\n');
282
- if (insert_line < 0 || insert_line > lines.length) {
283
- throw new InvalidLineNumberError(insert_line, lines.length);
284
- }
285
- lines.splice(insert_line, 0, insert_text);
286
- this.text = lines.join('\n');
287
- return 'Text inserted successfully.';
261
+ if (count > 1) {
262
+ throw new MultipleMatchesError(count);
288
263
  }
289
- countOccurrences(text, search) {
290
- if (search.length === 0) {
291
- return 0;
292
- }
293
- let count = 0;
294
- let pos = 0;
295
- while ((pos = text.indexOf(search, pos)) !== -1) {
296
- count++;
297
- pos += search.length;
298
- }
299
- return count;
264
+ this.text = this.text.replace(old_str, this.escapeReplacement(new_str));
265
+ return 'Edit applied successfully.';
266
+ }
267
+ handleInsert(command) {
268
+ if (this.text === null) {
269
+ throw this.createFileNotFoundError();
300
270
  }
301
- appendNotAttemptedResults(results, replacements, startIndex) {
302
- for (let i = startIndex; i < replacements.length; i++) {
303
- results.push({
304
- index: i,
305
- old_str: truncatePreview(replacements[i].old_str),
306
- status: 'not_attempted',
307
- });
308
- }
271
+ const { insert_line, insert_text } = command;
272
+ const lines = this.text.split('\n');
273
+ if (insert_line < 0 || insert_line > lines.length) {
274
+ throw new InvalidLineNumberError(insert_line, lines.length);
309
275
  }
310
- createInvalidPathError(path, supportedPath, message) {
311
- return new InvalidPathError(path, supportedPath, message);
276
+ lines.splice(insert_line, 0, insert_text);
277
+ this.text = lines.join('\n');
278
+ return 'Text inserted successfully.';
279
+ }
280
+ countOccurrences(text, search) {
281
+ if (search.length === 0) {
282
+ return 0;
312
283
  }
313
- createFileNotFoundError() {
314
- return new FileNotFoundError(this.options.fileNotFoundMessage);
284
+ let count = 0;
285
+ let pos = 0;
286
+ while ((pos = text.indexOf(search, pos)) !== -1) {
287
+ count++;
288
+ pos += search.length;
315
289
  }
316
- escapeReplacement(replacement) {
317
- return replacement.replace(/\$/g, '$$$$');
290
+ return count;
291
+ }
292
+ appendNotAttemptedResults(results, replacements, startIndex) {
293
+ for (let i = startIndex; i < replacements.length; i++) {
294
+ results.push({
295
+ index: i,
296
+ old_str: truncatePreview(replacements[i].old_str),
297
+ status: 'not_attempted',
298
+ });
318
299
  }
319
300
  }
320
- exports.TextEditorDocument = TextEditorDocument;
321
- });
301
+ createInvalidPathError(path, supportedPath, message) {
302
+ return new InvalidPathError(path, supportedPath, message);
303
+ }
304
+ createFileNotFoundError() {
305
+ return new FileNotFoundError(this.options.fileNotFoundMessage);
306
+ }
307
+ escapeReplacement(replacement) {
308
+ return replacement.replace(/\$/g, '$$$$');
309
+ }
310
+ }
311
+ exports.TextEditorDocument = TextEditorDocument;
322
312
  //# sourceMappingURL=text-editor.js.map