beeai-framework 0.1.20 → 0.1.22

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 (485) hide show
  1. package/dist/adapters/a2a/agents/agent.cjs +4 -4
  2. package/dist/adapters/a2a/agents/agent.cjs.map +1 -1
  3. package/dist/adapters/a2a/agents/agent.d.cts +6 -10
  4. package/dist/adapters/a2a/agents/agent.d.ts +6 -10
  5. package/dist/adapters/a2a/agents/agent.js +4 -4
  6. package/dist/adapters/a2a/agents/agent.js.map +1 -1
  7. package/dist/adapters/a2a/agents/events.d.cts +1 -1
  8. package/dist/adapters/a2a/agents/events.d.ts +1 -1
  9. package/dist/adapters/a2a/agents/types.d.cts +2 -2
  10. package/dist/adapters/a2a/agents/types.d.ts +2 -2
  11. package/dist/adapters/a2a/agents/utils.cjs +2 -2
  12. package/dist/adapters/a2a/agents/utils.cjs.map +1 -1
  13. package/dist/adapters/a2a/agents/utils.js +2 -2
  14. package/dist/adapters/a2a/agents/utils.js.map +1 -1
  15. package/dist/adapters/a2a/serve/agent_executor.cjs +1 -3
  16. package/dist/adapters/a2a/serve/agent_executor.cjs.map +1 -1
  17. package/dist/adapters/a2a/serve/agent_executor.d.cts +4 -3
  18. package/dist/adapters/a2a/serve/agent_executor.d.ts +4 -3
  19. package/dist/adapters/a2a/serve/agent_executor.js +1 -3
  20. package/dist/adapters/a2a/serve/agent_executor.js.map +1 -1
  21. package/dist/adapters/a2a/serve/server.cjs +15 -0
  22. package/dist/adapters/a2a/serve/server.cjs.map +1 -1
  23. package/dist/adapters/a2a/serve/server.d.cts +4 -2
  24. package/dist/adapters/a2a/serve/server.d.ts +4 -2
  25. package/dist/adapters/a2a/serve/server.js +15 -0
  26. package/dist/adapters/a2a/serve/server.js.map +1 -1
  27. package/dist/adapters/acp/agents/agent.d.cts +6 -10
  28. package/dist/adapters/acp/agents/agent.d.ts +6 -10
  29. package/dist/adapters/acp/agents/events.d.cts +1 -1
  30. package/dist/adapters/acp/agents/events.d.ts +1 -1
  31. package/dist/adapters/{beeai_platform → agentstack}/agents/agent.cjs +4 -4
  32. package/dist/adapters/agentstack/agents/agent.cjs.map +1 -0
  33. package/dist/adapters/{beeai_platform → agentstack}/agents/agent.d.cts +18 -16
  34. package/dist/adapters/{beeai_platform → agentstack}/agents/agent.d.ts +18 -16
  35. package/dist/adapters/{beeai_platform → agentstack}/agents/agent.js +4 -4
  36. package/dist/adapters/agentstack/agents/agent.js.map +1 -0
  37. package/dist/adapters/agentstack/agents/events.d.cts +23 -0
  38. package/dist/adapters/agentstack/agents/events.d.ts +23 -0
  39. package/dist/adapters/{beeai_platform → agentstack}/agents/types.d.cts +4 -4
  40. package/dist/adapters/{beeai_platform → agentstack}/agents/types.d.ts +4 -4
  41. package/dist/adapters/amazon-bedrock/backend/chat.cjs +3 -2
  42. package/dist/adapters/amazon-bedrock/backend/chat.cjs.map +1 -1
  43. package/dist/adapters/amazon-bedrock/backend/chat.d.cts +5 -6
  44. package/dist/adapters/amazon-bedrock/backend/chat.d.ts +5 -6
  45. package/dist/adapters/amazon-bedrock/backend/chat.js +3 -2
  46. package/dist/adapters/amazon-bedrock/backend/chat.js.map +1 -1
  47. package/dist/adapters/amazon-bedrock/backend/embedding.cjs +2 -2
  48. package/dist/adapters/amazon-bedrock/backend/embedding.cjs.map +1 -1
  49. package/dist/adapters/amazon-bedrock/backend/embedding.d.cts +4 -4
  50. package/dist/adapters/amazon-bedrock/backend/embedding.d.ts +4 -4
  51. package/dist/adapters/amazon-bedrock/backend/embedding.js +2 -2
  52. package/dist/adapters/amazon-bedrock/backend/embedding.js.map +1 -1
  53. package/dist/adapters/anthropic/backend/chat.cjs +3 -2
  54. package/dist/adapters/anthropic/backend/chat.cjs.map +1 -1
  55. package/dist/adapters/anthropic/backend/chat.d.cts +5 -6
  56. package/dist/adapters/anthropic/backend/chat.d.ts +5 -6
  57. package/dist/adapters/anthropic/backend/chat.js +3 -2
  58. package/dist/adapters/anthropic/backend/chat.js.map +1 -1
  59. package/dist/adapters/anthropic/backend/embedding.d.cts +2 -2
  60. package/dist/adapters/anthropic/backend/embedding.d.ts +2 -2
  61. package/dist/adapters/azure-openai/backend/chat.cjs +3 -2
  62. package/dist/adapters/azure-openai/backend/chat.cjs.map +1 -1
  63. package/dist/adapters/azure-openai/backend/chat.d.cts +5 -6
  64. package/dist/adapters/azure-openai/backend/chat.d.ts +5 -6
  65. package/dist/adapters/azure-openai/backend/chat.js +3 -2
  66. package/dist/adapters/azure-openai/backend/chat.js.map +1 -1
  67. package/dist/adapters/azure-openai/backend/embedding.cjs +2 -2
  68. package/dist/adapters/azure-openai/backend/embedding.cjs.map +1 -1
  69. package/dist/adapters/azure-openai/backend/embedding.d.cts +3 -3
  70. package/dist/adapters/azure-openai/backend/embedding.d.ts +3 -3
  71. package/dist/adapters/azure-openai/backend/embedding.js +2 -2
  72. package/dist/adapters/azure-openai/backend/embedding.js.map +1 -1
  73. package/dist/adapters/dummy/backend/chat.d.cts +2 -2
  74. package/dist/adapters/dummy/backend/chat.d.ts +2 -2
  75. package/dist/adapters/dummy/backend/embedding.d.cts +2 -2
  76. package/dist/adapters/dummy/backend/embedding.d.ts +2 -2
  77. package/dist/adapters/google-vertex/backend/chat.cjs +3 -2
  78. package/dist/adapters/google-vertex/backend/chat.cjs.map +1 -1
  79. package/dist/adapters/google-vertex/backend/chat.d.cts +5 -6
  80. package/dist/adapters/google-vertex/backend/chat.d.ts +5 -6
  81. package/dist/adapters/google-vertex/backend/chat.js +3 -2
  82. package/dist/adapters/google-vertex/backend/chat.js.map +1 -1
  83. package/dist/adapters/google-vertex/backend/embedding.d.cts +2 -2
  84. package/dist/adapters/google-vertex/backend/embedding.d.ts +2 -2
  85. package/dist/adapters/groq/backend/chat.cjs +3 -2
  86. package/dist/adapters/groq/backend/chat.cjs.map +1 -1
  87. package/dist/adapters/groq/backend/chat.d.cts +5 -6
  88. package/dist/adapters/groq/backend/chat.d.ts +5 -6
  89. package/dist/adapters/groq/backend/chat.js +3 -2
  90. package/dist/adapters/groq/backend/chat.js.map +1 -1
  91. package/dist/adapters/groq/backend/embedding.d.cts +2 -2
  92. package/dist/adapters/groq/backend/embedding.d.ts +2 -2
  93. package/dist/adapters/langchain/backend/chat.cjs +6 -5
  94. package/dist/adapters/langchain/backend/chat.cjs.map +1 -1
  95. package/dist/adapters/langchain/backend/chat.d.cts +2 -2
  96. package/dist/adapters/langchain/backend/chat.d.ts +2 -2
  97. package/dist/adapters/langchain/backend/chat.js +6 -5
  98. package/dist/adapters/langchain/backend/chat.js.map +1 -1
  99. package/dist/adapters/langchain/backend/embedding.d.cts +3 -3
  100. package/dist/adapters/langchain/backend/embedding.d.ts +3 -3
  101. package/dist/adapters/langchain/tools.d.cts +1 -1
  102. package/dist/adapters/langchain/tools.d.ts +1 -1
  103. package/dist/adapters/ollama/backend/chat.cjs +1 -4
  104. package/dist/adapters/ollama/backend/chat.cjs.map +1 -1
  105. package/dist/adapters/ollama/backend/chat.d.cts +4 -4
  106. package/dist/adapters/ollama/backend/chat.d.ts +4 -4
  107. package/dist/adapters/ollama/backend/chat.js +1 -4
  108. package/dist/adapters/ollama/backend/chat.js.map +1 -1
  109. package/dist/adapters/ollama/backend/client.cjs +2 -2
  110. package/dist/adapters/ollama/backend/client.cjs.map +1 -1
  111. package/dist/adapters/ollama/backend/client.d.cts +1 -1
  112. package/dist/adapters/ollama/backend/client.d.ts +1 -1
  113. package/dist/adapters/ollama/backend/client.js +1 -1
  114. package/dist/adapters/ollama/backend/client.js.map +1 -1
  115. package/dist/adapters/ollama/backend/embedding.cjs.map +1 -1
  116. package/dist/adapters/ollama/backend/embedding.d.cts +3 -3
  117. package/dist/adapters/ollama/backend/embedding.d.ts +3 -3
  118. package/dist/adapters/ollama/backend/embedding.js.map +1 -1
  119. package/dist/adapters/openai/backend/chat.cjs +3 -2
  120. package/dist/adapters/openai/backend/chat.cjs.map +1 -1
  121. package/dist/adapters/openai/backend/chat.d.cts +5 -6
  122. package/dist/adapters/openai/backend/chat.d.ts +5 -6
  123. package/dist/adapters/openai/backend/chat.js +3 -2
  124. package/dist/adapters/openai/backend/chat.js.map +1 -1
  125. package/dist/adapters/openai/backend/client.cjs +2 -11
  126. package/dist/adapters/openai/backend/client.cjs.map +1 -1
  127. package/dist/adapters/openai/backend/client.js +3 -12
  128. package/dist/adapters/openai/backend/client.js.map +1 -1
  129. package/dist/adapters/openai/backend/embedding.cjs +2 -2
  130. package/dist/adapters/openai/backend/embedding.cjs.map +1 -1
  131. package/dist/adapters/openai/backend/embedding.d.cts +4 -4
  132. package/dist/adapters/openai/backend/embedding.d.ts +4 -4
  133. package/dist/adapters/openai/backend/embedding.js +2 -2
  134. package/dist/adapters/openai/backend/embedding.js.map +1 -1
  135. package/dist/adapters/vercel/backend/chat.cjs +26 -21
  136. package/dist/adapters/vercel/backend/chat.cjs.map +1 -1
  137. package/dist/adapters/vercel/backend/chat.d.cts +6 -4
  138. package/dist/adapters/vercel/backend/chat.d.ts +6 -4
  139. package/dist/adapters/vercel/backend/chat.js +27 -22
  140. package/dist/adapters/vercel/backend/chat.js.map +1 -1
  141. package/dist/adapters/vercel/backend/embedding.cjs.map +1 -1
  142. package/dist/adapters/vercel/backend/embedding.d.cts +3 -3
  143. package/dist/adapters/vercel/backend/embedding.d.ts +3 -3
  144. package/dist/adapters/vercel/backend/embedding.js.map +1 -1
  145. package/dist/adapters/vercel/backend/utils.cjs +26 -0
  146. package/dist/adapters/vercel/backend/utils.cjs.map +1 -1
  147. package/dist/adapters/vercel/backend/utils.d.cts +20 -2
  148. package/dist/adapters/vercel/backend/utils.d.ts +20 -2
  149. package/dist/adapters/vercel/backend/utils.js +25 -1
  150. package/dist/adapters/vercel/backend/utils.js.map +1 -1
  151. package/dist/adapters/watsonx/backend/chat.cjs +10 -4
  152. package/dist/adapters/watsonx/backend/chat.cjs.map +1 -1
  153. package/dist/adapters/watsonx/backend/chat.d.cts +2 -2
  154. package/dist/adapters/watsonx/backend/chat.d.ts +2 -2
  155. package/dist/adapters/watsonx/backend/chat.js +10 -4
  156. package/dist/adapters/watsonx/backend/chat.js.map +1 -1
  157. package/dist/adapters/watsonx/backend/embedding.d.cts +2 -2
  158. package/dist/adapters/watsonx/backend/embedding.d.ts +2 -2
  159. package/dist/adapters/xai/backend/chat.cjs +3 -2
  160. package/dist/adapters/xai/backend/chat.cjs.map +1 -1
  161. package/dist/adapters/xai/backend/chat.d.cts +5 -6
  162. package/dist/adapters/xai/backend/chat.d.ts +5 -6
  163. package/dist/adapters/xai/backend/chat.js +3 -2
  164. package/dist/adapters/xai/backend/chat.js.map +1 -1
  165. package/dist/{agent-I0Saf4A1.d.cts → agent-BMfyig7X.d.cts} +5 -4
  166. package/dist/{agent-CtrCeN7o.d.ts → agent-Dxw8AGWb.d.ts} +5 -4
  167. package/dist/agents/base.cjs +5 -2
  168. package/dist/agents/base.cjs.map +1 -1
  169. package/dist/agents/base.d.cts +2 -2
  170. package/dist/agents/base.d.ts +2 -2
  171. package/dist/agents/base.js +5 -2
  172. package/dist/agents/base.js.map +1 -1
  173. package/dist/agents/experimental/replan/agent.d.cts +3 -3
  174. package/dist/agents/experimental/replan/agent.d.ts +3 -3
  175. package/dist/agents/experimental/replan/prompts.d.cts +1 -1
  176. package/dist/agents/experimental/replan/prompts.d.ts +1 -1
  177. package/dist/agents/experimental/streamlit/agent.d.cts +8 -12
  178. package/dist/agents/experimental/streamlit/agent.d.ts +8 -12
  179. package/dist/agents/react/agent.d.cts +5 -4
  180. package/dist/agents/react/agent.d.ts +5 -4
  181. package/dist/agents/react/prompts.d.cts +1 -1
  182. package/dist/agents/react/prompts.d.ts +1 -1
  183. package/dist/agents/react/runners/base.cjs.map +1 -1
  184. package/dist/agents/react/runners/base.d.cts +5 -4
  185. package/dist/agents/react/runners/base.d.ts +5 -4
  186. package/dist/agents/react/runners/base.js.map +1 -1
  187. package/dist/agents/react/runners/deep-think/prompts.d.cts +1 -1
  188. package/dist/agents/react/runners/deep-think/prompts.d.ts +1 -1
  189. package/dist/agents/react/runners/deep-think/runner.d.cts +6 -5
  190. package/dist/agents/react/runners/deep-think/runner.d.ts +6 -5
  191. package/dist/agents/react/runners/default/runner.cjs.map +1 -1
  192. package/dist/agents/react/runners/default/runner.d.cts +6 -5
  193. package/dist/agents/react/runners/default/runner.d.ts +6 -5
  194. package/dist/agents/react/runners/default/runner.js.map +1 -1
  195. package/dist/agents/react/runners/granite/prompts.d.cts +1 -1
  196. package/dist/agents/react/runners/granite/prompts.d.ts +1 -1
  197. package/dist/agents/react/runners/granite/runner.cjs +4 -2
  198. package/dist/agents/react/runners/granite/runner.cjs.map +1 -1
  199. package/dist/agents/react/runners/granite/runner.d.cts +6 -5
  200. package/dist/agents/react/runners/granite/runner.d.ts +6 -5
  201. package/dist/agents/react/runners/granite/runner.js +4 -2
  202. package/dist/agents/react/runners/granite/runner.js.map +1 -1
  203. package/dist/agents/react/types.d.cts +3 -2
  204. package/dist/agents/react/types.d.ts +3 -2
  205. package/dist/agents/requirement/agent.cjs +162 -0
  206. package/dist/agents/requirement/agent.cjs.map +1 -0
  207. package/dist/agents/requirement/agent.d.cts +29 -0
  208. package/dist/agents/requirement/agent.d.ts +29 -0
  209. package/dist/agents/requirement/agent.js +160 -0
  210. package/dist/agents/requirement/agent.js.map +1 -0
  211. package/dist/agents/requirement/prompts.cjs +95 -0
  212. package/dist/agents/requirement/prompts.cjs.map +1 -0
  213. package/dist/agents/requirement/prompts.d.cts +107 -0
  214. package/dist/agents/requirement/prompts.d.ts +107 -0
  215. package/dist/agents/requirement/prompts.js +90 -0
  216. package/dist/agents/requirement/prompts.js.map +1 -0
  217. package/dist/agents/requirement/requirements/conditional.cjs +190 -0
  218. package/dist/agents/requirement/requirements/conditional.cjs.map +1 -0
  219. package/dist/agents/requirement/requirements/conditional.d.cts +71 -0
  220. package/dist/agents/requirement/requirements/conditional.d.ts +71 -0
  221. package/dist/agents/requirement/requirements/conditional.js +188 -0
  222. package/dist/agents/requirement/requirements/conditional.js.map +1 -0
  223. package/dist/agents/requirement/requirements/requirement.cjs +107 -0
  224. package/dist/agents/requirement/requirements/requirement.cjs.map +1 -0
  225. package/dist/agents/requirement/requirements/requirement.d.cts +59 -0
  226. package/dist/agents/requirement/requirements/requirement.d.ts +59 -0
  227. package/dist/agents/requirement/requirements/requirement.js +104 -0
  228. package/dist/agents/requirement/requirements/requirement.js.map +1 -0
  229. package/dist/agents/requirement/requirements/utils.cjs +74 -0
  230. package/dist/agents/requirement/requirements/utils.cjs.map +1 -0
  231. package/dist/agents/requirement/requirements/utils.d.cts +40 -0
  232. package/dist/agents/requirement/requirements/utils.d.ts +40 -0
  233. package/dist/agents/requirement/requirements/utils.js +69 -0
  234. package/dist/agents/requirement/requirements/utils.js.map +1 -0
  235. package/dist/agents/requirement/runner.cjs +252 -0
  236. package/dist/agents/requirement/runner.cjs.map +1 -0
  237. package/dist/agents/requirement/runner.d.cts +117 -0
  238. package/dist/agents/requirement/runner.d.ts +117 -0
  239. package/dist/agents/requirement/runner.js +250 -0
  240. package/dist/agents/requirement/runner.js.map +1 -0
  241. package/dist/agents/requirement/types.cjs +40 -0
  242. package/dist/agents/requirement/types.cjs.map +1 -0
  243. package/dist/agents/requirement/types.d.cts +24 -0
  244. package/dist/agents/requirement/types.d.ts +24 -0
  245. package/dist/agents/requirement/types.js +35 -0
  246. package/dist/agents/requirement/types.js.map +1 -0
  247. package/dist/agents/requirement/utils/llm.cjs +202 -0
  248. package/dist/agents/requirement/utils/llm.cjs.map +1 -0
  249. package/dist/agents/requirement/utils/llm.d.cts +50 -0
  250. package/dist/agents/requirement/utils/llm.d.ts +50 -0
  251. package/dist/agents/requirement/utils/llm.js +199 -0
  252. package/dist/agents/requirement/utils/llm.js.map +1 -0
  253. package/dist/agents/requirement/utils/tool.cjs +94 -0
  254. package/dist/agents/requirement/utils/tool.cjs.map +1 -0
  255. package/dist/agents/requirement/utils/tool.d.cts +24 -0
  256. package/dist/agents/requirement/utils/tool.d.ts +24 -0
  257. package/dist/agents/requirement/utils/tool.js +91 -0
  258. package/dist/agents/requirement/utils/tool.js.map +1 -0
  259. package/dist/agents/requirement/utils/toolCallChecker.cjs +61 -0
  260. package/dist/agents/requirement/utils/toolCallChecker.cjs.map +1 -0
  261. package/dist/agents/requirement/utils/toolCallChecker.d.cts +28 -0
  262. package/dist/agents/requirement/utils/toolCallChecker.d.ts +28 -0
  263. package/dist/agents/requirement/utils/toolCallChecker.js +59 -0
  264. package/dist/agents/requirement/utils/toolCallChecker.js.map +1 -0
  265. package/dist/agents/toolCalling/agent.cjs +9 -5
  266. package/dist/agents/toolCalling/agent.cjs.map +1 -1
  267. package/dist/agents/toolCalling/agent.d.cts +8 -12
  268. package/dist/agents/toolCalling/agent.d.ts +8 -12
  269. package/dist/agents/toolCalling/agent.js +9 -5
  270. package/dist/agents/toolCalling/agent.js.map +1 -1
  271. package/dist/agents/toolCalling/types.d.cts +1 -1
  272. package/dist/agents/toolCalling/types.d.ts +1 -1
  273. package/dist/agents/types.d.cts +2 -2
  274. package/dist/agents/types.d.ts +2 -2
  275. package/dist/backend/backend.d.cts +2 -2
  276. package/dist/backend/backend.d.ts +2 -2
  277. package/dist/backend/chat.cjs +1 -1
  278. package/dist/backend/chat.cjs.map +1 -1
  279. package/dist/backend/chat.d.cts +2 -2
  280. package/dist/backend/chat.d.ts +2 -2
  281. package/dist/backend/chat.js +1 -1
  282. package/dist/backend/chat.js.map +1 -1
  283. package/dist/backend/core.d.cts +2 -2
  284. package/dist/backend/core.d.ts +2 -2
  285. package/dist/backend/embedding.d.cts +2 -2
  286. package/dist/backend/embedding.d.ts +2 -2
  287. package/dist/backend/message.cjs +59 -3
  288. package/dist/backend/message.cjs.map +1 -1
  289. package/dist/backend/message.d.cts +3 -0
  290. package/dist/backend/message.d.ts +3 -0
  291. package/dist/backend/message.js +59 -3
  292. package/dist/backend/message.js.map +1 -1
  293. package/dist/backend/utils.d.cts +2 -2
  294. package/dist/backend/utils.d.ts +2 -2
  295. package/dist/{base-BsY2baWy.d.ts → base-BurRTBA7.d.ts} +4 -2
  296. package/dist/{base-BP7v-NSL.d.cts → base-v-PYIq5G.d.cts} +4 -2
  297. package/dist/cache/fileCache.cjs.map +1 -1
  298. package/dist/cache/fileCache.js.map +1 -1
  299. package/dist/{chat-W9j8T6UU.d.ts → chat-BbCYMAdE.d.ts} +4 -2
  300. package/dist/{chat-CR4yfOR9.d.cts → chat-DB_cf15S.d.cts} +4 -2
  301. package/dist/context.cjs +22 -5
  302. package/dist/context.cjs.map +1 -1
  303. package/dist/context.d.cts +19 -6
  304. package/dist/context.d.ts +19 -6
  305. package/dist/context.js +23 -7
  306. package/dist/context.js.map +1 -1
  307. package/dist/emitter/emitter.cjs +19 -13
  308. package/dist/emitter/emitter.cjs.map +1 -1
  309. package/dist/emitter/emitter.d.cts +1 -1
  310. package/dist/emitter/emitter.d.ts +1 -1
  311. package/dist/emitter/emitter.js +19 -13
  312. package/dist/emitter/emitter.js.map +1 -1
  313. package/dist/emitter/types.d.cts +1 -1
  314. package/dist/emitter/types.d.ts +1 -1
  315. package/dist/{emitter-DWEsd-ud.d.cts → emitter-CGKd_-kK.d.cts} +6 -5
  316. package/dist/{emitter-C9nwGLt6.d.ts → emitter-CN7I4uSV.d.ts} +6 -5
  317. package/dist/index.d.cts +5 -5
  318. package/dist/index.d.ts +5 -5
  319. package/dist/internals/fetcher.d.cts +1 -1
  320. package/dist/internals/fetcher.d.ts +1 -1
  321. package/dist/internals/helpers/array.cjs +35 -0
  322. package/dist/internals/helpers/array.cjs.map +1 -1
  323. package/dist/internals/helpers/array.d.cts +6 -1
  324. package/dist/internals/helpers/array.d.ts +6 -1
  325. package/dist/internals/helpers/array.js +35 -1
  326. package/dist/internals/helpers/array.js.map +1 -1
  327. package/dist/internals/helpers/object.cjs +30 -5
  328. package/dist/internals/helpers/object.cjs.map +1 -1
  329. package/dist/internals/helpers/object.d.cts +3 -2
  330. package/dist/internals/helpers/object.d.ts +3 -2
  331. package/dist/internals/helpers/object.js +29 -5
  332. package/dist/internals/helpers/object.js.map +1 -1
  333. package/dist/internals/helpers/prototype.cjs +5 -0
  334. package/dist/internals/helpers/prototype.cjs.map +1 -1
  335. package/dist/internals/helpers/prototype.d.cts +2 -1
  336. package/dist/internals/helpers/prototype.d.ts +2 -1
  337. package/dist/internals/helpers/prototype.js +5 -1
  338. package/dist/internals/helpers/prototype.js.map +1 -1
  339. package/dist/internals/types.cjs.map +1 -1
  340. package/dist/internals/types.d.cts +1 -1
  341. package/dist/internals/types.d.ts +1 -1
  342. package/dist/internals/types.js.map +1 -1
  343. package/dist/logger/logger.cjs +8 -4
  344. package/dist/logger/logger.cjs.map +1 -1
  345. package/dist/logger/logger.d.cts +21 -15
  346. package/dist/logger/logger.d.ts +21 -15
  347. package/dist/logger/logger.js +6 -3
  348. package/dist/logger/logger.js.map +1 -1
  349. package/dist/logger/pretty.cjs +2 -2
  350. package/dist/logger/pretty.cjs.map +1 -1
  351. package/dist/logger/pretty.js +2 -2
  352. package/dist/logger/pretty.js.map +1 -1
  353. package/dist/memory/slidingMemory.d.cts +1 -1
  354. package/dist/memory/slidingMemory.d.ts +1 -1
  355. package/dist/memory/summarizeMemory.d.cts +2 -2
  356. package/dist/memory/summarizeMemory.d.ts +2 -2
  357. package/dist/middleware/trajectory.cjs +322 -0
  358. package/dist/middleware/trajectory.cjs.map +1 -0
  359. package/dist/middleware/trajectory.d.cts +115 -0
  360. package/dist/middleware/trajectory.d.ts +115 -0
  361. package/dist/middleware/trajectory.js +320 -0
  362. package/dist/middleware/trajectory.js.map +1 -0
  363. package/dist/parsers/linePrefix.cjs.map +1 -1
  364. package/dist/parsers/linePrefix.d.cts +4 -8
  365. package/dist/parsers/linePrefix.d.ts +4 -8
  366. package/dist/parsers/linePrefix.js.map +1 -1
  367. package/dist/serializer/serializer.cjs +5 -4
  368. package/dist/serializer/serializer.cjs.map +1 -1
  369. package/dist/serializer/serializer.d.cts +1 -1
  370. package/dist/serializer/serializer.d.ts +1 -1
  371. package/dist/serializer/serializer.js +5 -4
  372. package/dist/serializer/serializer.js.map +1 -1
  373. package/dist/serializer/utils.cjs +3 -0
  374. package/dist/serializer/utils.cjs.map +1 -1
  375. package/dist/serializer/utils.d.cts +1 -1
  376. package/dist/serializer/utils.d.ts +1 -1
  377. package/dist/serializer/utils.js +3 -0
  378. package/dist/serializer/utils.js.map +1 -1
  379. package/dist/{serializer-CQxucveV.d.ts → serializer-53t8gGQa.d.ts} +3 -2
  380. package/dist/{serializer-BKn50Vnx.d.cts → serializer-c51B2z6d.d.cts} +3 -2
  381. package/dist/template.cjs +20 -0
  382. package/dist/template.cjs.map +1 -1
  383. package/dist/template.d.cts +1 -0
  384. package/dist/template.d.ts +1 -0
  385. package/dist/template.js +20 -0
  386. package/dist/template.js.map +1 -1
  387. package/dist/tools/arxiv.cjs.map +1 -1
  388. package/dist/tools/arxiv.d.cts +1 -1
  389. package/dist/tools/arxiv.d.ts +1 -1
  390. package/dist/tools/arxiv.js.map +1 -1
  391. package/dist/tools/base.cjs.map +1 -1
  392. package/dist/tools/base.d.cts +3 -2
  393. package/dist/tools/base.d.ts +3 -2
  394. package/dist/tools/base.js.map +1 -1
  395. package/dist/tools/calculator.d.cts +1 -1
  396. package/dist/tools/calculator.d.ts +1 -1
  397. package/dist/tools/custom.d.cts +2 -2
  398. package/dist/tools/custom.d.ts +2 -2
  399. package/dist/tools/database/elasticsearch.cjs.map +1 -1
  400. package/dist/tools/database/elasticsearch.d.cts +1 -1
  401. package/dist/tools/database/elasticsearch.d.ts +1 -1
  402. package/dist/tools/database/elasticsearch.js.map +1 -1
  403. package/dist/tools/database/milvus.cjs +3 -3
  404. package/dist/tools/database/milvus.cjs.map +1 -1
  405. package/dist/tools/database/milvus.d.cts +3 -3
  406. package/dist/tools/database/milvus.d.ts +3 -3
  407. package/dist/tools/database/milvus.js +3 -3
  408. package/dist/tools/database/milvus.js.map +1 -1
  409. package/dist/tools/database/qdrant.cjs +2 -2
  410. package/dist/tools/database/qdrant.cjs.map +1 -1
  411. package/dist/tools/database/qdrant.d.cts +1 -1
  412. package/dist/tools/database/qdrant.d.ts +1 -1
  413. package/dist/tools/database/qdrant.js +2 -2
  414. package/dist/tools/database/qdrant.js.map +1 -1
  415. package/dist/tools/database/sql.cjs.map +1 -1
  416. package/dist/tools/database/sql.d.cts +1 -1
  417. package/dist/tools/database/sql.d.ts +1 -1
  418. package/dist/tools/database/sql.js.map +1 -1
  419. package/dist/tools/llm.d.cts +2 -2
  420. package/dist/tools/llm.d.ts +2 -2
  421. package/dist/tools/mcp.d.cts +1 -1
  422. package/dist/tools/mcp.d.ts +1 -1
  423. package/dist/tools/openapi.d.cts +1 -1
  424. package/dist/tools/openapi.d.ts +1 -1
  425. package/dist/tools/python/output.d.cts +1 -1
  426. package/dist/tools/python/output.d.ts +1 -1
  427. package/dist/tools/python/python.d.cts +2 -2
  428. package/dist/tools/python/python.d.ts +2 -2
  429. package/dist/tools/search/base.cjs.map +1 -1
  430. package/dist/tools/search/base.d.cts +1 -1
  431. package/dist/tools/search/base.d.ts +1 -1
  432. package/dist/tools/search/base.js.map +1 -1
  433. package/dist/tools/search/duckDuckGoSearch.cjs.map +1 -1
  434. package/dist/tools/search/duckDuckGoSearch.d.cts +1 -1
  435. package/dist/tools/search/duckDuckGoSearch.d.ts +1 -1
  436. package/dist/tools/search/duckDuckGoSearch.js.map +1 -1
  437. package/dist/tools/search/googleSearch.cjs.map +1 -1
  438. package/dist/tools/search/googleSearch.d.cts +1 -1
  439. package/dist/tools/search/googleSearch.d.ts +1 -1
  440. package/dist/tools/search/googleSearch.js.map +1 -1
  441. package/dist/tools/search/searXNGSearch.d.cts +1 -1
  442. package/dist/tools/search/searXNGSearch.d.ts +1 -1
  443. package/dist/tools/search/wikipedia.cjs +25 -0
  444. package/dist/tools/search/wikipedia.cjs.map +1 -1
  445. package/dist/tools/search/wikipedia.d.cts +2 -3
  446. package/dist/tools/search/wikipedia.d.ts +2 -3
  447. package/dist/tools/search/wikipedia.js +23 -0
  448. package/dist/tools/search/wikipedia.js.map +1 -1
  449. package/dist/tools/similarity.d.cts +1 -1
  450. package/dist/tools/similarity.d.ts +1 -1
  451. package/dist/tools/think.cjs +52 -0
  452. package/dist/tools/think.cjs.map +1 -0
  453. package/dist/tools/think.d.cts +47 -0
  454. package/dist/tools/think.d.ts +47 -0
  455. package/dist/tools/think.js +50 -0
  456. package/dist/tools/think.js.map +1 -0
  457. package/dist/tools/weather/openMeteo.cjs.map +1 -1
  458. package/dist/tools/weather/openMeteo.d.cts +1 -1
  459. package/dist/tools/weather/openMeteo.d.ts +1 -1
  460. package/dist/tools/weather/openMeteo.js.map +1 -1
  461. package/dist/tools/web/webCrawler.cjs.map +1 -1
  462. package/dist/tools/web/webCrawler.d.cts +1 -1
  463. package/dist/tools/web/webCrawler.d.ts +1 -1
  464. package/dist/tools/web/webCrawler.js.map +1 -1
  465. package/dist/types-BXkkbABd.d.ts +213 -0
  466. package/dist/types-Cx6f43du.d.cts +213 -0
  467. package/dist/version.cjs +1 -1
  468. package/dist/version.js +1 -1
  469. package/dist/workflows/agent.d.cts +3 -3
  470. package/dist/workflows/agent.d.ts +3 -3
  471. package/dist/workflows/workflow.d.cts +1 -1
  472. package/dist/workflows/workflow.d.ts +1 -1
  473. package/package.json +70 -69
  474. package/dist/adapters/beeai_platform/agents/agent.cjs.map +0 -1
  475. package/dist/adapters/beeai_platform/agents/agent.js.map +0 -1
  476. package/dist/adapters/beeai_platform/agents/events.d.cts +0 -23
  477. package/dist/adapters/beeai_platform/agents/events.d.ts +0 -23
  478. /package/dist/adapters/{beeai_platform → agentstack}/agents/events.cjs +0 -0
  479. /package/dist/adapters/{beeai_platform → agentstack}/agents/events.cjs.map +0 -0
  480. /package/dist/adapters/{beeai_platform → agentstack}/agents/events.js +0 -0
  481. /package/dist/adapters/{beeai_platform → agentstack}/agents/events.js.map +0 -0
  482. /package/dist/adapters/{beeai_platform → agentstack}/agents/types.cjs +0 -0
  483. /package/dist/adapters/{beeai_platform → agentstack}/agents/types.cjs.map +0 -0
  484. /package/dist/adapters/{beeai_platform → agentstack}/agents/types.js +0 -0
  485. /package/dist/adapters/{beeai_platform → agentstack}/agents/types.js.map +0 -0
package/dist/context.d.ts CHANGED
@@ -1,6 +1,7 @@
1
- import { E as Emitter, C as Callback } from './emitter-C9nwGLt6.js';
1
+ import { E as Emitter, C as Callback } from './emitter-CN7I4uSV.js';
2
2
  import { Serializable } from './internals/serializable.js';
3
3
  import { LazyPromise } from './internals/helpers/promise.js';
4
+ import { FrameworkError } from './errors.js';
4
5
  import './internals/types.js';
5
6
  import './internals/helpers/guards.js';
6
7
 
@@ -13,13 +14,25 @@ interface RunInstance<T = any> {
13
14
  emitter: Emitter<T>;
14
15
  }
15
16
  interface RunContextCallbacks {
16
- start: Callback<null>;
17
+ start: Callback<{
18
+ input: any;
19
+ output: any;
20
+ }>;
17
21
  success: Callback<unknown>;
18
22
  error: Callback<Error>;
19
- finish: Callback<null>;
23
+ finish: Callback<{
24
+ input: any;
25
+ output?: any;
26
+ error?: FrameworkError;
27
+ }>;
28
+ }
29
+ declare abstract class Middleware<T extends RunInstance = any> {
30
+ abstract bind(ctx: RunContext<T>): void;
20
31
  }
21
32
  type GetRunContext<T, P = any> = T extends RunInstance ? RunContext<T, P> : never;
22
33
  type GetRunInstance<T> = T extends RunInstance<infer P> ? P : never;
34
+ type MiddlewareFn<T> = (context: GetRunContext<T>) => void;
35
+ type MiddlewareType<T extends RunInstance> = Middleware<T> | MiddlewareFn<T>;
23
36
  declare class Run<R, I extends RunInstance, P = any> extends LazyPromise<R> {
24
37
  protected readonly runContext: GetRunContext<I, P>;
25
38
  protected readonly tasks: (() => Promise<void>)[];
@@ -27,7 +40,7 @@ declare class Run<R, I extends RunInstance, P = any> extends LazyPromise<R> {
27
40
  readonly [Symbol.toStringTag] = "Promise";
28
41
  observe(fn: (emitter: Emitter<GetRunInstance<I>>) => void): this;
29
42
  context(value: object): this;
30
- middleware(fn: (context: GetRunContext<I, P>) => void): this;
43
+ middleware(...fns: MiddlewareType<I>[]): this;
31
44
  protected before(): Promise<void>;
32
45
  [Symbol.asyncIterator](): R extends AsyncIterable<infer X> ? AsyncIterator<X> : never;
33
46
  }
@@ -45,7 +58,7 @@ declare class RunContext<T extends RunInstance, P = any> extends Serializable {
45
58
  readonly parentId?: string;
46
59
  readonly emitter: Emitter<GetRunInstance<T>>;
47
60
  readonly context: object;
48
- readonly runParams: P;
61
+ runParams: P;
49
62
  readonly createdAt: Date;
50
63
  get signal(): AbortSignal;
51
64
  abort(reason?: Error): void;
@@ -65,4 +78,4 @@ declare class RunContext<T extends RunInstance, P = any> extends Serializable {
65
78
  loadSnapshot(snapshot: ReturnType<typeof this.createSnapshot>): void;
66
79
  }
67
80
 
68
- export { type GetRunContext, type GetRunInstance, Run, RunContext, type RunContextCallbacks, type RunContextInput, type RunInstance };
81
+ export { type GetRunContext, type GetRunInstance, Middleware, type MiddlewareFn, type MiddlewareType, Run, RunContext, type RunContextCallbacks, type RunContextInput, type RunInstance };
package/dist/context.js CHANGED
@@ -1,6 +1,6 @@
1
1
  import { AsyncLocalStorage } from 'node:async_hooks';
2
2
  import { createRandomHash } from './internals/helpers/hash.js';
3
- import { omit } from 'remeda';
3
+ import { isFunction, omit } from 'remeda';
4
4
  import { registerSignals } from './internals/helpers/cancellation.js';
5
5
  import { Serializable } from './internals/serializable.js';
6
6
  import { LazyPromise, executeSequentially } from './internals/helpers/promise.js';
@@ -10,6 +10,11 @@ import { isAsyncIterable } from './internals/helpers/stream.js';
10
10
 
11
11
  var __defProp = Object.defineProperty;
12
12
  var __name = (target, value) => __defProp(target, "name", { value, configurable: true });
13
+ class Middleware {
14
+ static {
15
+ __name(this, "Middleware");
16
+ }
17
+ }
13
18
  class Run extends LazyPromise {
14
19
  static {
15
20
  __name(this, "Run");
@@ -31,8 +36,10 @@ class Run extends LazyPromise {
31
36
  });
32
37
  return this;
33
38
  }
34
- middleware(fn) {
35
- this.tasks.push(async () => fn(this.runContext));
39
+ middleware(...fns) {
40
+ for (const fn of fns) {
41
+ this.tasks.push(async () => isFunction(fn) ? fn(this.runContext) : fn.bind(this.runContext));
42
+ }
36
43
  return this;
37
44
  }
38
45
  async before() {
@@ -115,20 +122,29 @@ class RunContext extends Serializable {
115
122
  internal: true
116
123
  }
117
124
  });
125
+ const finishEvent = {};
118
126
  try {
119
- await emitter.emit("start", null);
127
+ const startEvent = {
128
+ input: runContext.runParams,
129
+ output: void 0
130
+ };
131
+ await emitter.emit("start", startEvent);
132
+ runContext.runParams = startEvent.input;
133
+ finishEvent.input = startEvent.input;
120
134
  const result = await Promise.race([
121
- RunContext.#storage.run(runContext, fn, runContext),
135
+ RunContext.#storage.run(runContext, startEvent.output === void 0 ? fn : async () => startEvent.output, runContext),
122
136
  new Promise((_, reject) => runContext.signal.addEventListener("abort", () => setTimeout(() => reject(runContext.signal.reason), 0)))
123
137
  ]);
138
+ finishEvent.output = result;
124
139
  await emitter.emit("success", result);
125
140
  return result;
126
141
  } catch (_e) {
127
142
  const e = FrameworkError.ensure(_e);
143
+ finishEvent.output = e;
128
144
  await emitter.emit("error", e);
129
145
  throw e;
130
146
  } finally {
131
- await emitter.emit("finish", null);
147
+ await emitter.emit("finish", finishEvent);
132
148
  runContext.destroy();
133
149
  }
134
150
  }, runContext);
@@ -153,6 +169,6 @@ class RunContext extends Serializable {
153
169
  }
154
170
  }
155
171
 
156
- export { Run, RunContext };
172
+ export { Middleware, Run, RunContext };
157
173
  //# sourceMappingURL=context.js.map
158
174
  //# sourceMappingURL=context.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/context.ts"],"names":["Run","LazyPromise","tasks","handler","runContext","Symbol","toStringTag","observe","fn","push","emitter","context","value","Object","assign","middleware","before","executeSequentially","splice","Infinity","asyncIterator","response","then","isAsyncIterable","Error","RunContext","Serializable","AsyncLocalStorage","controller","runId","groupId","parentId","runParams","createdAt","signal","abort","reason","instance","input","parent","Date","params","createRandomHash","omit","AbortController","registerSignals","child","trace","id","parentRunId","pipe","destroy","FrameworkError","enter","getStore","namespace","creator","internal","emit","result","Promise","race","run","_","reject","addEventListener","setTimeout","_e","e","ensure","register","createSnapshot","shallowCopy","loadSnapshot","snapshot"],"mappings":"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","file":"context.js","sourcesContent":["/**\n * Copyright 2025 © BeeAI a Series of LF Projects, LLC\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport { AsyncLocalStorage } from \"node:async_hooks\";\nimport { Emitter } from \"@/emitter/emitter.js\";\nimport { createRandomHash } from \"@/internals/helpers/hash.js\";\nimport { omit } from \"remeda\";\nimport { Callback } from \"@/emitter/types.js\";\nimport { registerSignals } from \"@/internals/helpers/cancellation.js\";\nimport { Serializable } from \"@/internals/serializable.js\";\nimport { executeSequentially, LazyPromise } from \"@/internals/helpers/promise.js\";\nimport { FrameworkError } from \"@/errors.js\";\nimport { shallowCopy } from \"@/serializer/utils.js\";\nimport { isAsyncIterable } from \"@/internals/helpers/stream.js\";\n\nexport interface RunInstance<T = any> {\n emitter: Emitter<T>;\n}\n\nexport interface RunContextCallbacks {\n start: Callback<null>;\n success: Callback<unknown>;\n error: Callback<Error>;\n finish: Callback<null>;\n}\n\nexport type GetRunContext<T, P = any> = T extends RunInstance ? RunContext<T, P> : never;\nexport type GetRunInstance<T> = T extends RunInstance<infer P> ? P : never;\n\nexport class Run<R, I extends RunInstance, P = any> extends LazyPromise<R> {\n protected readonly tasks: (() => Promise<void>)[] = [];\n\n constructor(\n handler: () => Promise<R>,\n protected readonly runContext: GetRunContext<I, P>,\n ) {\n super(handler);\n }\n\n readonly [Symbol.toStringTag] = \"Promise\";\n\n observe(fn: (emitter: Emitter<GetRunInstance<I>>) => void) {\n this.tasks.push(async () => fn(this.runContext.emitter));\n return this;\n }\n\n context(value: object) {\n this.tasks.push(async () => {\n Object.assign(this.runContext.context, value);\n Object.assign(this.runContext.emitter.context, value);\n });\n return this;\n }\n\n middleware(fn: (context: GetRunContext<I, P>) => void) {\n this.tasks.push(async () => fn(this.runContext));\n return this;\n }\n\n protected async before(): Promise<void> {\n await super.before();\n await executeSequentially(this.tasks.splice(0, Infinity));\n }\n\n // @ts-expect-error too complex\n async *[Symbol.asyncIterator](): R extends AsyncIterable<infer X> ? AsyncIterator<X> : never {\n const response = await this.then();\n if (isAsyncIterable(response)) {\n yield* response;\n } else {\n throw new Error(\"Result is not iterable!\");\n }\n }\n}\n\nexport interface RunContextInput<P> {\n params: P;\n signal?: AbortSignal;\n}\n\nexport class RunContext<T extends RunInstance, P = any> extends Serializable {\n static #storage = new AsyncLocalStorage<RunContext<any>>();\n\n protected readonly controller: AbortController;\n public readonly runId: string;\n public readonly groupId: string;\n public readonly parentId?: string;\n public readonly emitter;\n public readonly context: object;\n public readonly runParams: P;\n public readonly createdAt: Date;\n\n get signal() {\n return this.controller.signal;\n }\n\n abort(reason?: Error) {\n this.controller.abort(reason);\n }\n\n constructor(\n public readonly instance: T,\n protected readonly input: RunContextInput<P>,\n parent?: RunContext<any>,\n ) {\n super();\n this.createdAt = new Date();\n this.runParams = input.params;\n this.runId = createRandomHash(5);\n this.parentId = parent?.runId;\n this.groupId = parent?.groupId ?? createRandomHash();\n this.context = omit((parent?.context ?? {}) as any, [\"id\", \"parentId\"]);\n\n this.controller = new AbortController();\n registerSignals(this.controller, [input.signal, parent?.signal]);\n\n this.emitter = instance.emitter.child<GetRunInstance<T>>({\n context: this.context,\n trace: {\n id: this.groupId,\n runId: this.runId,\n parentRunId: parent?.runId,\n },\n });\n if (parent) {\n this.emitter.pipe(parent.emitter);\n }\n }\n\n destroy() {\n this.emitter.destroy();\n this.controller.abort(new FrameworkError(\"Context destroyed.\"));\n }\n\n static enter<C2 extends RunInstance, R2, P2>(\n instance: C2,\n input: RunContextInput<P2>,\n fn: (context: GetRunContext<C2, P2>) => Promise<R2>,\n ) {\n const parent = RunContext.#storage.getStore();\n const runContext = new RunContext(instance, input, parent) as GetRunContext<C2, P2>;\n\n return new Run(async () => {\n const emitter = runContext.emitter.child<RunContextCallbacks>({\n namespace: [\"run\"],\n creator: runContext,\n context: { internal: true },\n });\n\n try {\n await emitter.emit(\"start\", null);\n const result = await Promise.race([\n RunContext.#storage.run(runContext, fn, runContext),\n new Promise<never>((_, reject) =>\n runContext.signal.addEventListener(\"abort\", () =>\n setTimeout(() => reject(runContext.signal.reason), 0),\n ),\n ),\n ]);\n await emitter.emit(\"success\", result);\n return result;\n } catch (_e) {\n const e = FrameworkError.ensure(_e);\n await emitter.emit(\"error\", e);\n throw e;\n } finally {\n await emitter.emit(\"finish\", null);\n runContext.destroy();\n }\n }, runContext);\n }\n\n static {\n this.register();\n }\n\n createSnapshot() {\n return {\n controller: this.controller,\n runId: this.runId,\n groupId: this.groupId,\n parentId: this.parentId,\n emitter: this.emitter,\n context: shallowCopy(this.context),\n runParams: shallowCopy(this.runParams),\n createdAt: new Date(this.createdAt),\n };\n }\n\n loadSnapshot(snapshot: ReturnType<typeof this.createSnapshot>) {\n Object.assign(this, snapshot);\n }\n}\n"]}
1
+ {"version":3,"sources":["../src/context.ts"],"names":["Middleware","Run","LazyPromise","tasks","handler","runContext","Symbol","toStringTag","observe","fn","push","emitter","context","value","Object","assign","middleware","fns","isFunction","bind","before","executeSequentially","splice","Infinity","asyncIterator","response","then","isAsyncIterable","Error","RunContext","Serializable","AsyncLocalStorage","controller","runId","groupId","parentId","runParams","createdAt","signal","abort","reason","instance","input","parent","Date","params","createRandomHash","omit","AbortController","registerSignals","child","trace","id","parentRunId","pipe","destroy","FrameworkError","enter","getStore","namespace","creator","internal","finishEvent","startEvent","output","undefined","emit","result","Promise","race","run","_","reject","addEventListener","setTimeout","_e","e","ensure","register","createSnapshot","shallowCopy","loadSnapshot","snapshot"],"mappings":"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","file":"context.js","sourcesContent":["/**\n * Copyright 2025 © BeeAI a Series of LF Projects, LLC\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport { AsyncLocalStorage } from \"node:async_hooks\";\nimport { Emitter } from \"@/emitter/emitter.js\";\nimport { createRandomHash } from \"@/internals/helpers/hash.js\";\nimport { isFunction, omit } from \"remeda\";\nimport { Callback, InferCallbackValue } from \"@/emitter/types.js\";\nimport { registerSignals } from \"@/internals/helpers/cancellation.js\";\nimport { Serializable } from \"@/internals/serializable.js\";\nimport { executeSequentially, LazyPromise } from \"@/internals/helpers/promise.js\";\nimport { FrameworkError } from \"@/errors.js\";\nimport { shallowCopy } from \"@/serializer/utils.js\";\nimport { isAsyncIterable } from \"@/internals/helpers/stream.js\";\n\nexport interface RunInstance<T = any> {\n emitter: Emitter<T>;\n}\n\nexport interface RunContextCallbacks {\n start: Callback<{ input: any; output: any }>;\n success: Callback<unknown>; // TODO: should be updated to Callback<{ input: any; output: any }>\n error: Callback<Error>;\n finish: Callback<{ input: any; output?: any; error?: FrameworkError }>;\n}\n\nexport abstract class Middleware<T extends RunInstance = any> {\n abstract bind(ctx: RunContext<T>): void;\n}\n\nexport type GetRunContext<T, P = any> = T extends RunInstance ? RunContext<T, P> : never;\nexport type GetRunInstance<T> = T extends RunInstance<infer P> ? P : never;\nexport type MiddlewareFn<T> = (context: GetRunContext<T>) => void;\nexport type MiddlewareType<T extends RunInstance> = Middleware<T> | MiddlewareFn<T>;\n\nexport class Run<R, I extends RunInstance, P = any> extends LazyPromise<R> {\n protected readonly tasks: (() => Promise<void>)[] = [];\n\n constructor(\n handler: () => Promise<R>,\n protected readonly runContext: GetRunContext<I, P>,\n ) {\n super(handler);\n }\n\n readonly [Symbol.toStringTag] = \"Promise\";\n\n observe(fn: (emitter: Emitter<GetRunInstance<I>>) => void) {\n this.tasks.push(async () => fn(this.runContext.emitter));\n return this;\n }\n\n context(value: object) {\n this.tasks.push(async () => {\n Object.assign(this.runContext.context, value);\n Object.assign(this.runContext.emitter.context, value);\n });\n return this;\n }\n\n middleware(...fns: MiddlewareType<I>[]) {\n for (const fn of fns) {\n this.tasks.push(async () =>\n isFunction(fn) ? fn(this.runContext) : fn.bind(this.runContext),\n );\n }\n return this;\n }\n\n protected async before(): Promise<void> {\n await super.before();\n await executeSequentially(this.tasks.splice(0, Infinity));\n }\n\n // @ts-expect-error too complex\n async *[Symbol.asyncIterator](): R extends AsyncIterable<infer X> ? AsyncIterator<X> : never {\n const response = await this.then();\n if (isAsyncIterable(response)) {\n yield* response;\n } else {\n throw new Error(\"Result is not iterable!\");\n }\n }\n}\n\nexport interface RunContextInput<P> {\n params: P;\n signal?: AbortSignal;\n}\n\nexport class RunContext<T extends RunInstance, P = any> extends Serializable {\n static #storage = new AsyncLocalStorage<RunContext<any>>();\n\n protected readonly controller: AbortController;\n public readonly runId: string;\n public readonly groupId: string;\n public readonly parentId?: string;\n public readonly emitter;\n public readonly context: object;\n public runParams: P;\n public readonly createdAt: Date;\n\n get signal() {\n return this.controller.signal;\n }\n\n abort(reason?: Error) {\n this.controller.abort(reason);\n }\n\n constructor(\n public readonly instance: T,\n protected readonly input: RunContextInput<P>,\n parent?: RunContext<any>,\n ) {\n super();\n this.createdAt = new Date();\n this.runParams = input.params;\n this.runId = createRandomHash(5);\n this.parentId = parent?.runId;\n this.groupId = parent?.groupId ?? createRandomHash();\n this.context = omit((parent?.context ?? {}) as any, [\"id\", \"parentId\"]);\n\n this.controller = new AbortController();\n registerSignals(this.controller, [input.signal, parent?.signal]);\n\n this.emitter = instance.emitter.child<GetRunInstance<T>>({\n context: this.context,\n trace: {\n id: this.groupId,\n runId: this.runId,\n parentRunId: parent?.runId,\n },\n });\n if (parent) {\n this.emitter.pipe(parent.emitter);\n }\n }\n\n destroy() {\n this.emitter.destroy();\n this.controller.abort(new FrameworkError(\"Context destroyed.\"));\n }\n\n static enter<C2 extends RunInstance, R2, P2>(\n instance: C2,\n input: RunContextInput<P2>,\n fn: (context: GetRunContext<C2, P2>) => Promise<R2>,\n ) {\n const parent = RunContext.#storage.getStore();\n const runContext = new RunContext(instance, input, parent) as GetRunContext<C2, P2>;\n\n return new Run(async () => {\n const emitter = runContext.emitter.child<RunContextCallbacks>({\n namespace: [\"run\"],\n creator: runContext,\n context: { internal: true },\n });\n\n const finishEvent = {} as InferCallbackValue<RunContextCallbacks[\"finish\"]>;\n try {\n const startEvent: InferCallbackValue<RunContextCallbacks[\"start\"]> = {\n input: runContext.runParams,\n output: undefined,\n };\n await emitter.emit(\"start\", startEvent);\n\n // Copy back any modifications made by middleware to run_params\n runContext.runParams = startEvent.input;\n finishEvent.input = startEvent.input;\n\n const result: R2 = await Promise.race([\n RunContext.#storage.run(\n runContext,\n startEvent.output === undefined ? fn : async () => startEvent.output,\n runContext,\n ),\n new Promise<never>((_, reject) =>\n runContext.signal.addEventListener(\"abort\", () =>\n setTimeout(() => reject(runContext.signal.reason), 0),\n ),\n ),\n ]);\n finishEvent.output = result;\n await emitter.emit(\"success\", result);\n return result;\n } catch (_e) {\n const e = FrameworkError.ensure(_e);\n finishEvent.output = e;\n await emitter.emit(\"error\", e);\n throw e;\n } finally {\n await emitter.emit(\"finish\", finishEvent);\n runContext.destroy();\n }\n }, runContext);\n }\n\n static {\n this.register();\n }\n\n createSnapshot() {\n return {\n controller: this.controller,\n runId: this.runId,\n groupId: this.groupId,\n parentId: this.parentId,\n emitter: this.emitter,\n context: shallowCopy(this.context),\n runParams: shallowCopy(this.runParams),\n createdAt: new Date(this.createdAt),\n };\n }\n\n loadSnapshot(snapshot: ReturnType<typeof this.createSnapshot>) {\n Object.assign(this, snapshot);\n }\n}\n"]}
@@ -7,6 +7,7 @@ var hash_cjs = require('../internals/helpers/hash.cjs');
7
7
  var utils_cjs$1 = require('../serializer/utils.cjs');
8
8
  var serializable_cjs = require('../internals/serializable.cjs');
9
9
  var remeda = require('remeda');
10
+ var array_cjs = require('../internals/helpers/array.cjs');
10
11
 
11
12
  var __defProp = Object.defineProperty;
12
13
  var __name = (target, value) => __defProp(target, "name", { value, configurable: true });
@@ -25,7 +26,7 @@ class Emitter extends serializable_cjs.Serializable {
25
26
  static {
26
27
  __name(this, "Emitter");
27
28
  }
28
- listeners = /* @__PURE__ */ new Set();
29
+ listeners = [];
29
30
  groupId;
30
31
  namespace;
31
32
  creator;
@@ -89,16 +90,12 @@ class Emitter extends serializable_cjs.Serializable {
89
90
  );
90
91
  }
91
92
  destroy() {
92
- this.listeners.clear();
93
+ this.listeners.length = 0;
93
94
  this.cleanups.forEach((child) => child());
94
95
  this.cleanups.length = 0;
95
96
  }
96
97
  reset() {
97
- for (const listener of this.listeners) {
98
- if (!listener.options?.persistent) {
99
- this.listeners.delete(listener);
100
- }
101
- }
98
+ this.listeners = this.listeners.filter((listener) => listener.options?.persistent);
102
99
  }
103
100
  registerCallbacks(callbacks, options) {
104
101
  const listeners = [];
@@ -153,8 +150,16 @@ class Emitter extends serializable_cjs.Serializable {
153
150
  raw: matcher,
154
151
  match: createMatcher()
155
152
  };
156
- this.listeners.add(listener);
157
- return () => this.listeners.delete(listener);
153
+ const priority = options?.priority ?? 0;
154
+ const insertIndex = this.listeners.findIndex((l) => (l.options?.priority ?? 0) >= priority);
155
+ if (insertIndex === -1) {
156
+ this.listeners.push(listener);
157
+ } else {
158
+ this.listeners.splice(insertIndex, 0, listener);
159
+ }
160
+ return () => {
161
+ array_cjs.removeFromArray(this.listeners, listener);
162
+ };
158
163
  }
159
164
  async emit(name, value) {
160
165
  utils_cjs.assertValidName(name);
@@ -163,12 +168,13 @@ class Emitter extends serializable_cjs.Serializable {
163
168
  }
164
169
  async invoke(data, event) {
165
170
  const executions = [];
166
- for (const listener of this.listeners.values()) {
171
+ for (let i = this.listeners.length - 1; i >= 0; i--) {
172
+ const listener = this.listeners[i];
167
173
  if (!listener.match(event)) {
168
174
  continue;
169
175
  }
170
176
  if (listener.options?.once) {
171
- this.listeners.delete(listener);
177
+ this.listeners.splice(i, 1);
172
178
  }
173
179
  const run = /* @__PURE__ */ __name(async () => listener.callback(data, event), "run");
174
180
  executions.push(listener.options?.isBlocking ? await run() : run());
@@ -196,7 +202,7 @@ class Emitter extends serializable_cjs.Serializable {
196
202
  creator: this.creator,
197
203
  context: this.context,
198
204
  trace: this.trace,
199
- listeners: Array.from(this.listeners).map(remeda.pick([
205
+ listeners: this.listeners.map(remeda.pick([
200
206
  "raw",
201
207
  "options",
202
208
  "callback"
@@ -206,7 +212,7 @@ class Emitter extends serializable_cjs.Serializable {
206
212
  }
207
213
  loadSnapshot({ listeners, ...snapshot }) {
208
214
  Object.assign(this, snapshot, {
209
- listeners: /* @__PURE__ */ new Set()
215
+ listeners: []
210
216
  });
211
217
  listeners.forEach(({ raw, callback, options }) => this.match(raw, callback, options));
212
218
  }
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/emitter/emitter.ts"],"names":["Emitter","Serializable","listeners","Set","groupId","namespace","creator","context","trace","cleanups","input","Object","prototype","assertValidNamespace","register","root","create","child","slice","cleanup","pipe","push","target","on","toBoundedFunction","args","invoke","value","name","isBlocking","once","persistent","destroy","clear","forEach","length","reset","listener","options","delete","registerCallbacks","callbacks","entries","key","event","callback","match","matcher","createMatcher","matchers","matchNested","path","createFullPath","RegExp","test","isPath","EmitterError","matchSameRun","runId","unshift","every","raw","add","emit","assertValidName","createEvent","data","executions","values","run","Promise","all","id","createRandomHash","createdAt","Date","source","assign","shallowCopy","createSnapshot","Array","from","map","pick","loadSnapshot","snapshot"],"mappings":"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","file":"emitter.cjs","sourcesContent":["/**\n * Copyright 2025 © BeeAI a Series of LF Projects, LLC\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport {\n Callback,\n CleanupFn,\n EmitterOptions,\n EventMeta,\n EventTrace,\n Matcher,\n MatcherFn,\n StringKey,\n} from \"@/emitter/types.js\";\nexport type { EventMeta, EventTrace, Callback };\nimport { Cache } from \"@/cache/decoratorCache.js\";\nimport { createFullPath, isPath, assertValidName, assertValidNamespace } from \"@/emitter/utils.js\";\nimport { EmitterError } from \"@/emitter/errors.js\";\nimport { createRandomHash } from \"@/internals/helpers/hash.js\";\nimport { shallowCopy, toBoundedFunction } from \"@/serializer/utils.js\";\nimport { RequiredAll } from \"@/internals/types.js\";\nimport { Serializable } from \"@/internals/serializable.js\";\nimport { pick } from \"remeda\";\n\nexport interface EmitterInput<E extends object = object> {\n groupId?: string;\n namespace?: string[];\n creator?: object;\n context?: E & object;\n trace?: EventTrace;\n}\nexport interface EmitterChildInput<E extends object = object> {\n groupId?: string;\n namespace?: string[];\n creator?: object;\n context?: E & object;\n trace?: EventTrace;\n}\n\ninterface Listener<T = any> {\n readonly match: MatcherFn;\n readonly raw: Matcher;\n readonly callback: Callback<T>;\n readonly options?: EmitterOptions;\n}\n\nexport class Emitter<T = Record<keyof any, Callback<unknown>>> extends Serializable {\n protected listeners = new Set<Listener>();\n protected readonly groupId?: string;\n public readonly namespace: string[];\n public readonly creator?: object;\n public readonly context: object;\n public readonly trace?: EventTrace;\n protected readonly cleanups: CleanupFn[] = [];\n\n constructor(input: EmitterInput = {}) {\n super();\n this.groupId = input?.groupId;\n this.namespace = input?.namespace ?? [];\n this.creator = input.creator ?? Object.prototype;\n this.context = input?.context ?? {};\n this.trace = input.trace;\n assertValidNamespace(this.namespace);\n }\n\n static {\n this.register();\n }\n\n @Cache()\n static get root() {\n return new Emitter<Record<string, Callback<any>>>({ creator: Object.create(null) });\n }\n\n child<R = T>(input: EmitterChildInput = {}): Emitter<R> {\n const child = new Emitter<R>({\n trace: input.trace ?? this.trace,\n groupId: input?.groupId ?? this.groupId,\n context: { ...this.context, ...input?.context },\n creator: input?.creator ?? this.creator,\n namespace: input?.namespace\n ? [...this.namespace, ...input.namespace]\n : this.namespace.slice(),\n });\n\n const cleanup = child.pipe(this);\n this.cleanups.push(cleanup);\n\n return child;\n }\n\n pipe(target: Emitter<any>): CleanupFn {\n return this.on(\n // @ts-expect-error\n \"*.*\",\n toBoundedFunction(\n // @ts-expect-error\n (...args) => target.invoke(...args),\n [{ value: target, name: \"target\" }],\n ),\n {\n isBlocking: true,\n once: false,\n persistent: true,\n },\n );\n }\n\n destroy() {\n this.listeners.clear();\n this.cleanups.forEach((child) => child());\n this.cleanups.length = 0;\n }\n\n reset() {\n for (const listener of this.listeners) {\n if (!listener.options?.persistent) {\n this.listeners.delete(listener);\n }\n }\n }\n\n registerCallbacks<K extends StringKey<RequiredAll<T>>>(\n callbacks: Partial<\n Record<K, NonNullable<T[K]> extends Callback<infer X> ? Callback<X> : never>\n >,\n options?: Partial<Record<K, EmitterOptions>>,\n ): CleanupFn {\n const listeners: CleanupFn[] = [];\n Object.entries(callbacks).forEach(([key, value]) => {\n if (value) {\n // @ts-expect-error\n listeners.push(this.on(key, value, options?.[key]));\n }\n });\n return () => listeners.forEach((cleanup) => cleanup());\n }\n\n on<K extends StringKey<RequiredAll<T>>>(\n event: K,\n callback: NonNullable<T[K]> extends Callback<any> ? T[K] : never,\n options?: EmitterOptions,\n ): CleanupFn {\n return this.match(event as Matcher, callback as Callback<any>, options);\n }\n\n match<L>(matcher: Matcher, callback: Callback<L>, options?: EmitterOptions): CleanupFn {\n const createMatcher = (): MatcherFn => {\n const matchers: MatcherFn[] = [];\n let matchNested = options?.matchNested;\n\n if (matcher === \"*\") {\n matchNested ??= false;\n matchers.push((event) => event.path === createFullPath(this.namespace, event.name));\n } else if (matcher === \"*.*\") {\n matchNested ??= true;\n matchers.push(() => true);\n } else if (matcher instanceof RegExp) {\n matchNested ??= true;\n matchers.push((event) => matcher.test(event.path));\n } else if (typeof matcher === \"function\") {\n matchNested ??= false;\n matchers.push(matcher);\n } else if (typeof matcher === \"string\") {\n if (isPath(matcher)) {\n matchNested ??= true;\n matchers.push((event) => event.path === matcher);\n } else {\n matchNested ??= false;\n matchers.push(\n (event) =>\n event.name === matcher && event.path === createFullPath(this.namespace, event.name),\n );\n }\n } else {\n throw new EmitterError(\"Invalid matcher provided!\");\n }\n\n if (!matchNested) {\n const matchSameRun = (event: EventMeta) => {\n // global observability x scoped observability\n return !this.trace?.runId ? true : this.trace?.runId === event.trace?.runId;\n };\n matchers.unshift(matchSameRun);\n }\n\n return (event) => matchers.every((matcher) => matcher(event));\n };\n\n const listener: Listener = {\n options,\n callback,\n raw: matcher,\n match: createMatcher(),\n };\n this.listeners.add(listener);\n\n return () => this.listeners.delete(listener);\n }\n\n async emit<K extends StringKey<RequiredAll<T>>>(\n name: K,\n value: NonNullable<T[K]> extends Callback<infer X> ? X : unknown,\n ): Promise<void> {\n assertValidName(name);\n\n const event = this.createEvent(name);\n return await this.invoke(value, event);\n }\n\n protected async invoke(data: unknown, event: EventMeta) {\n const executions: unknown[] = [];\n for (const listener of this.listeners.values()) {\n if (!listener.match(event)) {\n continue;\n }\n\n if (listener.options?.once) {\n this.listeners.delete(listener);\n }\n\n const run = async () => listener.callback(data, event);\n executions.push(listener.options?.isBlocking ? await run() : run());\n }\n await Promise.all(executions);\n }\n\n protected createEvent(name: string): EventMeta {\n return {\n id: createRandomHash(),\n groupId: this.groupId,\n name,\n path: createFullPath(this.namespace, name),\n createdAt: new Date(),\n source: this,\n creator: this.creator!,\n context: Object.assign({}, this.context, {}),\n trace: shallowCopy(this.trace), // TODO\n };\n }\n\n createSnapshot() {\n return {\n groupId: this.groupId,\n namespace: shallowCopy(this.namespace),\n creator: this.creator,\n context: this.context,\n trace: this.trace,\n listeners: Array.from(this.listeners).map(pick([\"raw\", \"options\", \"callback\"])),\n cleanups: this.cleanups,\n };\n }\n\n loadSnapshot({ listeners, ...snapshot }: ReturnType<typeof this.createSnapshot>): void {\n Object.assign(this, snapshot, { listeners: new Set() });\n listeners.forEach(({ raw, callback, options }) => this.match(raw, callback, options));\n }\n}\n"]}
1
+ {"version":3,"sources":["../../src/emitter/emitter.ts"],"names":["Emitter","Serializable","listeners","groupId","namespace","creator","context","trace","cleanups","input","Object","prototype","assertValidNamespace","register","root","create","child","slice","cleanup","pipe","push","target","on","toBoundedFunction","args","invoke","value","name","isBlocking","once","persistent","destroy","length","forEach","reset","filter","listener","options","registerCallbacks","callbacks","entries","key","event","callback","match","matcher","createMatcher","matchers","matchNested","path","createFullPath","RegExp","test","isPath","EmitterError","matchSameRun","runId","unshift","every","raw","priority","insertIndex","findIndex","l","splice","removeFromArray","emit","assertValidName","createEvent","data","executions","i","run","Promise","all","id","createRandomHash","createdAt","Date","source","assign","shallowCopy","createSnapshot","map","pick","loadSnapshot","snapshot"],"mappings":"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","file":"emitter.cjs","sourcesContent":["/**\n * Copyright 2025 © BeeAI a Series of LF Projects, LLC\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport {\n Callback,\n CleanupFn,\n EmitterOptions,\n EventMeta,\n EventTrace,\n Matcher,\n MatcherFn,\n StringKey,\n} from \"@/emitter/types.js\";\nexport type { EventMeta, EventTrace, Callback };\nimport { Cache } from \"@/cache/decoratorCache.js\";\nimport { createFullPath, isPath, assertValidName, assertValidNamespace } from \"@/emitter/utils.js\";\nimport { EmitterError } from \"@/emitter/errors.js\";\nimport { createRandomHash } from \"@/internals/helpers/hash.js\";\nimport { shallowCopy, toBoundedFunction } from \"@/serializer/utils.js\";\nimport { RequiredAll } from \"@/internals/types.js\";\nimport { Serializable } from \"@/internals/serializable.js\";\nimport { pick } from \"remeda\";\nimport { removeFromArray } from \"@/internals/helpers/array.js\";\n\nexport interface EmitterInput<E extends object = object> {\n groupId?: string;\n namespace?: string[];\n creator?: object;\n context?: E & object;\n trace?: EventTrace;\n}\nexport interface EmitterChildInput<E extends object = object> {\n groupId?: string;\n namespace?: string[];\n creator?: object;\n context?: E & object;\n trace?: EventTrace;\n}\n\ninterface Listener<T = any> {\n readonly match: MatcherFn;\n readonly raw: Matcher;\n readonly callback: Callback<T>;\n readonly options?: EmitterOptions;\n}\n\nexport class Emitter<T = Record<keyof any, Callback<unknown>>> extends Serializable {\n protected listeners: Listener[] = [];\n protected readonly groupId?: string;\n public readonly namespace: string[];\n public readonly creator?: object;\n public readonly context: object;\n public readonly trace?: EventTrace;\n protected readonly cleanups: CleanupFn[] = [];\n\n constructor(input: EmitterInput = {}) {\n super();\n this.groupId = input?.groupId;\n this.namespace = input?.namespace ?? [];\n this.creator = input.creator ?? Object.prototype;\n this.context = input?.context ?? {};\n this.trace = input.trace;\n assertValidNamespace(this.namespace);\n }\n\n static {\n this.register();\n }\n\n @Cache()\n static get root() {\n return new Emitter<Record<string, Callback<any>>>({ creator: Object.create(null) });\n }\n\n child<R = T>(input: EmitterChildInput = {}): Emitter<R> {\n const child = new Emitter<R>({\n trace: input.trace ?? this.trace,\n groupId: input?.groupId ?? this.groupId,\n context: { ...this.context, ...input?.context },\n creator: input?.creator ?? this.creator,\n namespace: input?.namespace\n ? [...this.namespace, ...input.namespace]\n : this.namespace.slice(),\n });\n\n const cleanup = child.pipe(this);\n this.cleanups.push(cleanup);\n\n return child;\n }\n\n pipe(target: Emitter<any>): CleanupFn {\n return this.on(\n // @ts-expect-error\n \"*.*\",\n toBoundedFunction(\n // @ts-expect-error\n (...args) => target.invoke(...args),\n [{ value: target, name: \"target\" }],\n ),\n {\n isBlocking: true,\n once: false,\n persistent: true,\n },\n );\n }\n\n destroy() {\n this.listeners.length = 0;\n this.cleanups.forEach((child) => child());\n this.cleanups.length = 0;\n }\n\n reset() {\n this.listeners = this.listeners.filter((listener) => listener.options?.persistent);\n }\n\n registerCallbacks<K extends StringKey<RequiredAll<T>>>(\n callbacks: Partial<\n Record<K, NonNullable<T[K]> extends Callback<infer X> ? Callback<X> : never>\n >,\n options?: Partial<Record<K, EmitterOptions>>,\n ): CleanupFn {\n const listeners: CleanupFn[] = [];\n Object.entries(callbacks).forEach(([key, value]) => {\n if (value) {\n // @ts-expect-error\n listeners.push(this.on(key, value, options?.[key]));\n }\n });\n return () => listeners.forEach((cleanup) => cleanup());\n }\n\n on<K extends StringKey<RequiredAll<T>>>(\n event: K,\n callback: NonNullable<T[K]> extends Callback<any> ? T[K] : never,\n options?: EmitterOptions,\n ): CleanupFn {\n return this.match(event as Matcher, callback as Callback<any>, options);\n }\n\n match<L>(matcher: Matcher, callback: Callback<L>, options?: EmitterOptions): CleanupFn {\n const createMatcher = (): MatcherFn => {\n const matchers: MatcherFn[] = [];\n let matchNested = options?.matchNested;\n\n if (matcher === \"*\") {\n matchNested ??= false;\n matchers.push((event) => event.path === createFullPath(this.namespace, event.name));\n } else if (matcher === \"*.*\") {\n matchNested ??= true;\n matchers.push(() => true);\n } else if (matcher instanceof RegExp) {\n matchNested ??= true;\n matchers.push((event) => matcher.test(event.path));\n } else if (typeof matcher === \"function\") {\n matchNested ??= false;\n matchers.push(matcher);\n } else if (typeof matcher === \"string\") {\n if (isPath(matcher)) {\n matchNested ??= true;\n matchers.push((event) => event.path === matcher);\n } else {\n matchNested ??= false;\n matchers.push(\n (event) =>\n event.name === matcher && event.path === createFullPath(this.namespace, event.name),\n );\n }\n } else {\n throw new EmitterError(\"Invalid matcher provided!\");\n }\n\n if (!matchNested) {\n const matchSameRun = (event: EventMeta) => {\n // global observability x scoped observability\n return !this.trace?.runId ? true : this.trace?.runId === event.trace?.runId;\n };\n matchers.unshift(matchSameRun);\n }\n\n return (event) => matchers.every((matcher) => matcher(event));\n };\n\n const listener: Listener = {\n options,\n callback,\n raw: matcher,\n match: createMatcher(),\n };\n\n const priority = options?.priority ?? 0;\n const insertIndex = this.listeners.findIndex((l) => (l.options?.priority ?? 0) >= priority);\n if (insertIndex === -1) {\n this.listeners.push(listener);\n } else {\n this.listeners.splice(insertIndex, 0, listener);\n }\n\n return () => {\n removeFromArray(this.listeners, listener);\n };\n }\n\n async emit<K extends StringKey<RequiredAll<T>>>(\n name: K,\n value: NonNullable<T[K]> extends Callback<infer X> ? X : unknown,\n ): Promise<void> {\n assertValidName(name);\n\n const event = this.createEvent(name);\n return await this.invoke(value, event);\n }\n\n protected async invoke(data: unknown, event: EventMeta) {\n const executions: unknown[] = [];\n // Iterate in reverse to match Python's behavior (reversed list iteration)\n for (let i = this.listeners.length - 1; i >= 0; i--) {\n const listener = this.listeners[i];\n if (!listener.match(event)) {\n continue;\n }\n\n if (listener.options?.once) {\n this.listeners.splice(i, 1);\n }\n\n const run = async () => listener.callback(data, event);\n executions.push(listener.options?.isBlocking ? await run() : run());\n }\n await Promise.all(executions);\n }\n\n protected createEvent(name: string): EventMeta {\n return {\n id: createRandomHash(),\n groupId: this.groupId,\n name,\n path: createFullPath(this.namespace, name),\n createdAt: new Date(),\n source: this,\n creator: this.creator!,\n context: Object.assign({}, this.context, {}),\n trace: shallowCopy(this.trace), // TODO\n };\n }\n\n createSnapshot() {\n return {\n groupId: this.groupId,\n namespace: shallowCopy(this.namespace),\n creator: this.creator,\n context: this.context,\n trace: this.trace,\n listeners: this.listeners.map(pick([\"raw\", \"options\", \"callback\"])),\n cleanups: this.cleanups,\n };\n }\n\n loadSnapshot({ listeners, ...snapshot }: ReturnType<typeof this.createSnapshot>): void {\n Object.assign(this, snapshot, { listeners: [] });\n listeners.forEach(({ raw, callback, options }) => this.match(raw, callback, options));\n }\n}\n"]}
@@ -1,4 +1,4 @@
1
- export { C as Callback, E as Emitter, g as EmitterChildInput, f as EmitterInput, e as EventMeta, d as EventTrace } from '../emitter-DWEsd-ud.cjs';
1
+ export { C as Callback, E as Emitter, g as EmitterChildInput, f as EmitterInput, a as EventMeta, e as EventTrace } from '../emitter-CGKd_-kK.cjs';
2
2
  import '../internals/types.cjs';
3
3
  import '../internals/serializable.cjs';
4
4
  import '../internals/helpers/guards.cjs';
@@ -1,4 +1,4 @@
1
- export { C as Callback, E as Emitter, g as EmitterChildInput, f as EmitterInput, e as EventMeta, d as EventTrace } from '../emitter-C9nwGLt6.js';
1
+ export { C as Callback, E as Emitter, g as EmitterChildInput, f as EmitterInput, a as EventMeta, e as EventTrace } from '../emitter-CN7I4uSV.js';
2
2
  import '../internals/types.js';
3
3
  import '../internals/serializable.js';
4
4
  import '../internals/helpers/guards.js';
@@ -5,6 +5,7 @@ import { createRandomHash } from '../internals/helpers/hash.js';
5
5
  import { toBoundedFunction, shallowCopy } from '../serializer/utils.js';
6
6
  import { Serializable } from '../internals/serializable.js';
7
7
  import { pick } from 'remeda';
8
+ import { removeFromArray } from '../internals/helpers/array.js';
8
9
 
9
10
  var __defProp = Object.defineProperty;
10
11
  var __name = (target, value) => __defProp(target, "name", { value, configurable: true });
@@ -23,7 +24,7 @@ class Emitter extends Serializable {
23
24
  static {
24
25
  __name(this, "Emitter");
25
26
  }
26
- listeners = /* @__PURE__ */ new Set();
27
+ listeners = [];
27
28
  groupId;
28
29
  namespace;
29
30
  creator;
@@ -87,16 +88,12 @@ class Emitter extends Serializable {
87
88
  );
88
89
  }
89
90
  destroy() {
90
- this.listeners.clear();
91
+ this.listeners.length = 0;
91
92
  this.cleanups.forEach((child) => child());
92
93
  this.cleanups.length = 0;
93
94
  }
94
95
  reset() {
95
- for (const listener of this.listeners) {
96
- if (!listener.options?.persistent) {
97
- this.listeners.delete(listener);
98
- }
99
- }
96
+ this.listeners = this.listeners.filter((listener) => listener.options?.persistent);
100
97
  }
101
98
  registerCallbacks(callbacks, options) {
102
99
  const listeners = [];
@@ -151,8 +148,16 @@ class Emitter extends Serializable {
151
148
  raw: matcher,
152
149
  match: createMatcher()
153
150
  };
154
- this.listeners.add(listener);
155
- return () => this.listeners.delete(listener);
151
+ const priority = options?.priority ?? 0;
152
+ const insertIndex = this.listeners.findIndex((l) => (l.options?.priority ?? 0) >= priority);
153
+ if (insertIndex === -1) {
154
+ this.listeners.push(listener);
155
+ } else {
156
+ this.listeners.splice(insertIndex, 0, listener);
157
+ }
158
+ return () => {
159
+ removeFromArray(this.listeners, listener);
160
+ };
156
161
  }
157
162
  async emit(name, value) {
158
163
  assertValidName(name);
@@ -161,12 +166,13 @@ class Emitter extends Serializable {
161
166
  }
162
167
  async invoke(data, event) {
163
168
  const executions = [];
164
- for (const listener of this.listeners.values()) {
169
+ for (let i = this.listeners.length - 1; i >= 0; i--) {
170
+ const listener = this.listeners[i];
165
171
  if (!listener.match(event)) {
166
172
  continue;
167
173
  }
168
174
  if (listener.options?.once) {
169
- this.listeners.delete(listener);
175
+ this.listeners.splice(i, 1);
170
176
  }
171
177
  const run = /* @__PURE__ */ __name(async () => listener.callback(data, event), "run");
172
178
  executions.push(listener.options?.isBlocking ? await run() : run());
@@ -194,7 +200,7 @@ class Emitter extends Serializable {
194
200
  creator: this.creator,
195
201
  context: this.context,
196
202
  trace: this.trace,
197
- listeners: Array.from(this.listeners).map(pick([
203
+ listeners: this.listeners.map(pick([
198
204
  "raw",
199
205
  "options",
200
206
  "callback"
@@ -204,7 +210,7 @@ class Emitter extends Serializable {
204
210
  }
205
211
  loadSnapshot({ listeners, ...snapshot }) {
206
212
  Object.assign(this, snapshot, {
207
- listeners: /* @__PURE__ */ new Set()
213
+ listeners: []
208
214
  });
209
215
  listeners.forEach(({ raw, callback, options }) => this.match(raw, callback, options));
210
216
  }
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/emitter/emitter.ts"],"names":["Emitter","Serializable","listeners","Set","groupId","namespace","creator","context","trace","cleanups","input","Object","prototype","assertValidNamespace","register","root","create","child","slice","cleanup","pipe","push","target","on","toBoundedFunction","args","invoke","value","name","isBlocking","once","persistent","destroy","clear","forEach","length","reset","listener","options","delete","registerCallbacks","callbacks","entries","key","event","callback","match","matcher","createMatcher","matchers","matchNested","path","createFullPath","RegExp","test","isPath","EmitterError","matchSameRun","runId","unshift","every","raw","add","emit","assertValidName","createEvent","data","executions","values","run","Promise","all","id","createRandomHash","createdAt","Date","source","assign","shallowCopy","createSnapshot","Array","from","map","pick","loadSnapshot","snapshot"],"mappings":"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","file":"emitter.js","sourcesContent":["/**\n * Copyright 2025 © BeeAI a Series of LF Projects, LLC\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport {\n Callback,\n CleanupFn,\n EmitterOptions,\n EventMeta,\n EventTrace,\n Matcher,\n MatcherFn,\n StringKey,\n} from \"@/emitter/types.js\";\nexport type { EventMeta, EventTrace, Callback };\nimport { Cache } from \"@/cache/decoratorCache.js\";\nimport { createFullPath, isPath, assertValidName, assertValidNamespace } from \"@/emitter/utils.js\";\nimport { EmitterError } from \"@/emitter/errors.js\";\nimport { createRandomHash } from \"@/internals/helpers/hash.js\";\nimport { shallowCopy, toBoundedFunction } from \"@/serializer/utils.js\";\nimport { RequiredAll } from \"@/internals/types.js\";\nimport { Serializable } from \"@/internals/serializable.js\";\nimport { pick } from \"remeda\";\n\nexport interface EmitterInput<E extends object = object> {\n groupId?: string;\n namespace?: string[];\n creator?: object;\n context?: E & object;\n trace?: EventTrace;\n}\nexport interface EmitterChildInput<E extends object = object> {\n groupId?: string;\n namespace?: string[];\n creator?: object;\n context?: E & object;\n trace?: EventTrace;\n}\n\ninterface Listener<T = any> {\n readonly match: MatcherFn;\n readonly raw: Matcher;\n readonly callback: Callback<T>;\n readonly options?: EmitterOptions;\n}\n\nexport class Emitter<T = Record<keyof any, Callback<unknown>>> extends Serializable {\n protected listeners = new Set<Listener>();\n protected readonly groupId?: string;\n public readonly namespace: string[];\n public readonly creator?: object;\n public readonly context: object;\n public readonly trace?: EventTrace;\n protected readonly cleanups: CleanupFn[] = [];\n\n constructor(input: EmitterInput = {}) {\n super();\n this.groupId = input?.groupId;\n this.namespace = input?.namespace ?? [];\n this.creator = input.creator ?? Object.prototype;\n this.context = input?.context ?? {};\n this.trace = input.trace;\n assertValidNamespace(this.namespace);\n }\n\n static {\n this.register();\n }\n\n @Cache()\n static get root() {\n return new Emitter<Record<string, Callback<any>>>({ creator: Object.create(null) });\n }\n\n child<R = T>(input: EmitterChildInput = {}): Emitter<R> {\n const child = new Emitter<R>({\n trace: input.trace ?? this.trace,\n groupId: input?.groupId ?? this.groupId,\n context: { ...this.context, ...input?.context },\n creator: input?.creator ?? this.creator,\n namespace: input?.namespace\n ? [...this.namespace, ...input.namespace]\n : this.namespace.slice(),\n });\n\n const cleanup = child.pipe(this);\n this.cleanups.push(cleanup);\n\n return child;\n }\n\n pipe(target: Emitter<any>): CleanupFn {\n return this.on(\n // @ts-expect-error\n \"*.*\",\n toBoundedFunction(\n // @ts-expect-error\n (...args) => target.invoke(...args),\n [{ value: target, name: \"target\" }],\n ),\n {\n isBlocking: true,\n once: false,\n persistent: true,\n },\n );\n }\n\n destroy() {\n this.listeners.clear();\n this.cleanups.forEach((child) => child());\n this.cleanups.length = 0;\n }\n\n reset() {\n for (const listener of this.listeners) {\n if (!listener.options?.persistent) {\n this.listeners.delete(listener);\n }\n }\n }\n\n registerCallbacks<K extends StringKey<RequiredAll<T>>>(\n callbacks: Partial<\n Record<K, NonNullable<T[K]> extends Callback<infer X> ? Callback<X> : never>\n >,\n options?: Partial<Record<K, EmitterOptions>>,\n ): CleanupFn {\n const listeners: CleanupFn[] = [];\n Object.entries(callbacks).forEach(([key, value]) => {\n if (value) {\n // @ts-expect-error\n listeners.push(this.on(key, value, options?.[key]));\n }\n });\n return () => listeners.forEach((cleanup) => cleanup());\n }\n\n on<K extends StringKey<RequiredAll<T>>>(\n event: K,\n callback: NonNullable<T[K]> extends Callback<any> ? T[K] : never,\n options?: EmitterOptions,\n ): CleanupFn {\n return this.match(event as Matcher, callback as Callback<any>, options);\n }\n\n match<L>(matcher: Matcher, callback: Callback<L>, options?: EmitterOptions): CleanupFn {\n const createMatcher = (): MatcherFn => {\n const matchers: MatcherFn[] = [];\n let matchNested = options?.matchNested;\n\n if (matcher === \"*\") {\n matchNested ??= false;\n matchers.push((event) => event.path === createFullPath(this.namespace, event.name));\n } else if (matcher === \"*.*\") {\n matchNested ??= true;\n matchers.push(() => true);\n } else if (matcher instanceof RegExp) {\n matchNested ??= true;\n matchers.push((event) => matcher.test(event.path));\n } else if (typeof matcher === \"function\") {\n matchNested ??= false;\n matchers.push(matcher);\n } else if (typeof matcher === \"string\") {\n if (isPath(matcher)) {\n matchNested ??= true;\n matchers.push((event) => event.path === matcher);\n } else {\n matchNested ??= false;\n matchers.push(\n (event) =>\n event.name === matcher && event.path === createFullPath(this.namespace, event.name),\n );\n }\n } else {\n throw new EmitterError(\"Invalid matcher provided!\");\n }\n\n if (!matchNested) {\n const matchSameRun = (event: EventMeta) => {\n // global observability x scoped observability\n return !this.trace?.runId ? true : this.trace?.runId === event.trace?.runId;\n };\n matchers.unshift(matchSameRun);\n }\n\n return (event) => matchers.every((matcher) => matcher(event));\n };\n\n const listener: Listener = {\n options,\n callback,\n raw: matcher,\n match: createMatcher(),\n };\n this.listeners.add(listener);\n\n return () => this.listeners.delete(listener);\n }\n\n async emit<K extends StringKey<RequiredAll<T>>>(\n name: K,\n value: NonNullable<T[K]> extends Callback<infer X> ? X : unknown,\n ): Promise<void> {\n assertValidName(name);\n\n const event = this.createEvent(name);\n return await this.invoke(value, event);\n }\n\n protected async invoke(data: unknown, event: EventMeta) {\n const executions: unknown[] = [];\n for (const listener of this.listeners.values()) {\n if (!listener.match(event)) {\n continue;\n }\n\n if (listener.options?.once) {\n this.listeners.delete(listener);\n }\n\n const run = async () => listener.callback(data, event);\n executions.push(listener.options?.isBlocking ? await run() : run());\n }\n await Promise.all(executions);\n }\n\n protected createEvent(name: string): EventMeta {\n return {\n id: createRandomHash(),\n groupId: this.groupId,\n name,\n path: createFullPath(this.namespace, name),\n createdAt: new Date(),\n source: this,\n creator: this.creator!,\n context: Object.assign({}, this.context, {}),\n trace: shallowCopy(this.trace), // TODO\n };\n }\n\n createSnapshot() {\n return {\n groupId: this.groupId,\n namespace: shallowCopy(this.namespace),\n creator: this.creator,\n context: this.context,\n trace: this.trace,\n listeners: Array.from(this.listeners).map(pick([\"raw\", \"options\", \"callback\"])),\n cleanups: this.cleanups,\n };\n }\n\n loadSnapshot({ listeners, ...snapshot }: ReturnType<typeof this.createSnapshot>): void {\n Object.assign(this, snapshot, { listeners: new Set() });\n listeners.forEach(({ raw, callback, options }) => this.match(raw, callback, options));\n }\n}\n"]}
1
+ {"version":3,"sources":["../../src/emitter/emitter.ts"],"names":["Emitter","Serializable","listeners","groupId","namespace","creator","context","trace","cleanups","input","Object","prototype","assertValidNamespace","register","root","create","child","slice","cleanup","pipe","push","target","on","toBoundedFunction","args","invoke","value","name","isBlocking","once","persistent","destroy","length","forEach","reset","filter","listener","options","registerCallbacks","callbacks","entries","key","event","callback","match","matcher","createMatcher","matchers","matchNested","path","createFullPath","RegExp","test","isPath","EmitterError","matchSameRun","runId","unshift","every","raw","priority","insertIndex","findIndex","l","splice","removeFromArray","emit","assertValidName","createEvent","data","executions","i","run","Promise","all","id","createRandomHash","createdAt","Date","source","assign","shallowCopy","createSnapshot","map","pick","loadSnapshot","snapshot"],"mappings":"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","file":"emitter.js","sourcesContent":["/**\n * Copyright 2025 © BeeAI a Series of LF Projects, LLC\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport {\n Callback,\n CleanupFn,\n EmitterOptions,\n EventMeta,\n EventTrace,\n Matcher,\n MatcherFn,\n StringKey,\n} from \"@/emitter/types.js\";\nexport type { EventMeta, EventTrace, Callback };\nimport { Cache } from \"@/cache/decoratorCache.js\";\nimport { createFullPath, isPath, assertValidName, assertValidNamespace } from \"@/emitter/utils.js\";\nimport { EmitterError } from \"@/emitter/errors.js\";\nimport { createRandomHash } from \"@/internals/helpers/hash.js\";\nimport { shallowCopy, toBoundedFunction } from \"@/serializer/utils.js\";\nimport { RequiredAll } from \"@/internals/types.js\";\nimport { Serializable } from \"@/internals/serializable.js\";\nimport { pick } from \"remeda\";\nimport { removeFromArray } from \"@/internals/helpers/array.js\";\n\nexport interface EmitterInput<E extends object = object> {\n groupId?: string;\n namespace?: string[];\n creator?: object;\n context?: E & object;\n trace?: EventTrace;\n}\nexport interface EmitterChildInput<E extends object = object> {\n groupId?: string;\n namespace?: string[];\n creator?: object;\n context?: E & object;\n trace?: EventTrace;\n}\n\ninterface Listener<T = any> {\n readonly match: MatcherFn;\n readonly raw: Matcher;\n readonly callback: Callback<T>;\n readonly options?: EmitterOptions;\n}\n\nexport class Emitter<T = Record<keyof any, Callback<unknown>>> extends Serializable {\n protected listeners: Listener[] = [];\n protected readonly groupId?: string;\n public readonly namespace: string[];\n public readonly creator?: object;\n public readonly context: object;\n public readonly trace?: EventTrace;\n protected readonly cleanups: CleanupFn[] = [];\n\n constructor(input: EmitterInput = {}) {\n super();\n this.groupId = input?.groupId;\n this.namespace = input?.namespace ?? [];\n this.creator = input.creator ?? Object.prototype;\n this.context = input?.context ?? {};\n this.trace = input.trace;\n assertValidNamespace(this.namespace);\n }\n\n static {\n this.register();\n }\n\n @Cache()\n static get root() {\n return new Emitter<Record<string, Callback<any>>>({ creator: Object.create(null) });\n }\n\n child<R = T>(input: EmitterChildInput = {}): Emitter<R> {\n const child = new Emitter<R>({\n trace: input.trace ?? this.trace,\n groupId: input?.groupId ?? this.groupId,\n context: { ...this.context, ...input?.context },\n creator: input?.creator ?? this.creator,\n namespace: input?.namespace\n ? [...this.namespace, ...input.namespace]\n : this.namespace.slice(),\n });\n\n const cleanup = child.pipe(this);\n this.cleanups.push(cleanup);\n\n return child;\n }\n\n pipe(target: Emitter<any>): CleanupFn {\n return this.on(\n // @ts-expect-error\n \"*.*\",\n toBoundedFunction(\n // @ts-expect-error\n (...args) => target.invoke(...args),\n [{ value: target, name: \"target\" }],\n ),\n {\n isBlocking: true,\n once: false,\n persistent: true,\n },\n );\n }\n\n destroy() {\n this.listeners.length = 0;\n this.cleanups.forEach((child) => child());\n this.cleanups.length = 0;\n }\n\n reset() {\n this.listeners = this.listeners.filter((listener) => listener.options?.persistent);\n }\n\n registerCallbacks<K extends StringKey<RequiredAll<T>>>(\n callbacks: Partial<\n Record<K, NonNullable<T[K]> extends Callback<infer X> ? Callback<X> : never>\n >,\n options?: Partial<Record<K, EmitterOptions>>,\n ): CleanupFn {\n const listeners: CleanupFn[] = [];\n Object.entries(callbacks).forEach(([key, value]) => {\n if (value) {\n // @ts-expect-error\n listeners.push(this.on(key, value, options?.[key]));\n }\n });\n return () => listeners.forEach((cleanup) => cleanup());\n }\n\n on<K extends StringKey<RequiredAll<T>>>(\n event: K,\n callback: NonNullable<T[K]> extends Callback<any> ? T[K] : never,\n options?: EmitterOptions,\n ): CleanupFn {\n return this.match(event as Matcher, callback as Callback<any>, options);\n }\n\n match<L>(matcher: Matcher, callback: Callback<L>, options?: EmitterOptions): CleanupFn {\n const createMatcher = (): MatcherFn => {\n const matchers: MatcherFn[] = [];\n let matchNested = options?.matchNested;\n\n if (matcher === \"*\") {\n matchNested ??= false;\n matchers.push((event) => event.path === createFullPath(this.namespace, event.name));\n } else if (matcher === \"*.*\") {\n matchNested ??= true;\n matchers.push(() => true);\n } else if (matcher instanceof RegExp) {\n matchNested ??= true;\n matchers.push((event) => matcher.test(event.path));\n } else if (typeof matcher === \"function\") {\n matchNested ??= false;\n matchers.push(matcher);\n } else if (typeof matcher === \"string\") {\n if (isPath(matcher)) {\n matchNested ??= true;\n matchers.push((event) => event.path === matcher);\n } else {\n matchNested ??= false;\n matchers.push(\n (event) =>\n event.name === matcher && event.path === createFullPath(this.namespace, event.name),\n );\n }\n } else {\n throw new EmitterError(\"Invalid matcher provided!\");\n }\n\n if (!matchNested) {\n const matchSameRun = (event: EventMeta) => {\n // global observability x scoped observability\n return !this.trace?.runId ? true : this.trace?.runId === event.trace?.runId;\n };\n matchers.unshift(matchSameRun);\n }\n\n return (event) => matchers.every((matcher) => matcher(event));\n };\n\n const listener: Listener = {\n options,\n callback,\n raw: matcher,\n match: createMatcher(),\n };\n\n const priority = options?.priority ?? 0;\n const insertIndex = this.listeners.findIndex((l) => (l.options?.priority ?? 0) >= priority);\n if (insertIndex === -1) {\n this.listeners.push(listener);\n } else {\n this.listeners.splice(insertIndex, 0, listener);\n }\n\n return () => {\n removeFromArray(this.listeners, listener);\n };\n }\n\n async emit<K extends StringKey<RequiredAll<T>>>(\n name: K,\n value: NonNullable<T[K]> extends Callback<infer X> ? X : unknown,\n ): Promise<void> {\n assertValidName(name);\n\n const event = this.createEvent(name);\n return await this.invoke(value, event);\n }\n\n protected async invoke(data: unknown, event: EventMeta) {\n const executions: unknown[] = [];\n // Iterate in reverse to match Python's behavior (reversed list iteration)\n for (let i = this.listeners.length - 1; i >= 0; i--) {\n const listener = this.listeners[i];\n if (!listener.match(event)) {\n continue;\n }\n\n if (listener.options?.once) {\n this.listeners.splice(i, 1);\n }\n\n const run = async () => listener.callback(data, event);\n executions.push(listener.options?.isBlocking ? await run() : run());\n }\n await Promise.all(executions);\n }\n\n protected createEvent(name: string): EventMeta {\n return {\n id: createRandomHash(),\n groupId: this.groupId,\n name,\n path: createFullPath(this.namespace, name),\n createdAt: new Date(),\n source: this,\n creator: this.creator!,\n context: Object.assign({}, this.context, {}),\n trace: shallowCopy(this.trace), // TODO\n };\n }\n\n createSnapshot() {\n return {\n groupId: this.groupId,\n namespace: shallowCopy(this.namespace),\n creator: this.creator,\n context: this.context,\n trace: this.trace,\n listeners: this.listeners.map(pick([\"raw\", \"options\", \"callback\"])),\n cleanups: this.cleanups,\n };\n }\n\n loadSnapshot({ listeners, ...snapshot }: ReturnType<typeof this.createSnapshot>): void {\n Object.assign(this, snapshot, { listeners: [] });\n listeners.forEach(({ raw, callback, options }) => this.match(raw, callback, options));\n }\n}\n"]}
@@ -1,4 +1,4 @@
1
1
  import '../internals/types.cjs';
2
- export { C as Callback, b as CleanupFn, c as EmitterOptions, e as EventMeta, d as EventTrace, I as InferCallbackValue, a as Matcher, M as MatcherFn, S as StringKey } from '../emitter-DWEsd-ud.cjs';
2
+ export { C as Callback, c as CleanupFn, d as EmitterOptions, a as EventMeta, e as EventTrace, I as InferCallbackValue, b as Matcher, M as MatcherFn, S as StringKey } from '../emitter-CGKd_-kK.cjs';
3
3
  import '../internals/helpers/guards.cjs';
4
4
  import '../internals/serializable.cjs';
@@ -1,4 +1,4 @@
1
1
  import '../internals/types.js';
2
- export { C as Callback, b as CleanupFn, c as EmitterOptions, e as EventMeta, d as EventTrace, I as InferCallbackValue, a as Matcher, M as MatcherFn, S as StringKey } from '../emitter-C9nwGLt6.js';
2
+ export { C as Callback, c as CleanupFn, d as EmitterOptions, a as EventMeta, e as EventTrace, I as InferCallbackValue, b as Matcher, M as MatcherFn, S as StringKey } from '../emitter-CN7I4uSV.js';
3
3
  import '../internals/helpers/guards.js';
4
4
  import '../internals/serializable.js';
@@ -17,6 +17,7 @@ interface EmitterOptions {
17
17
  once?: boolean;
18
18
  persistent?: boolean;
19
19
  matchNested?: boolean;
20
+ priority?: number;
20
21
  }
21
22
  interface EventTrace {
22
23
  id: string;
@@ -61,7 +62,7 @@ interface Listener<T = any> {
61
62
  readonly options?: EmitterOptions;
62
63
  }
63
64
  declare class Emitter<T = Record<keyof any, Callback<unknown>>> extends Serializable {
64
- protected listeners: Set<Listener<any>>;
65
+ protected listeners: Listener[];
65
66
  protected readonly groupId?: string;
66
67
  readonly namespace: string[];
67
68
  readonly creator?: object;
@@ -87,13 +88,13 @@ declare class Emitter<T = Record<keyof any, Callback<unknown>>> extends Serializ
87
88
  context: object;
88
89
  trace: EventTrace | undefined;
89
90
  listeners: {
90
- readonly options?: EmitterOptions | undefined;
91
- readonly raw: Matcher;
92
- readonly callback: Callback<any>;
91
+ options?: EmitterOptions | undefined;
92
+ raw: Matcher;
93
+ callback: Callback<any>;
93
94
  }[];
94
95
  cleanups: CleanupFn[];
95
96
  };
96
97
  loadSnapshot({ listeners, ...snapshot }: ReturnType<typeof this.createSnapshot>): void;
97
98
  }
98
99
 
99
- export { type Callback as C, Emitter as E, type InferCallbackValue as I, type MatcherFn as M, type StringKey as S, type Matcher as a, type CleanupFn as b, type EmitterOptions as c, type EventTrace as d, type EventMeta as e, type EmitterInput as f, type EmitterChildInput as g };
100
+ export { type Callback as C, Emitter as E, type InferCallbackValue as I, type MatcherFn as M, type StringKey as S, type EventMeta as a, type Matcher as b, type CleanupFn as c, type EmitterOptions as d, type EventTrace as e, type EmitterInput as f, type EmitterChildInput as g };