@yunzai-ng/core 0.1.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 (357) hide show
  1. package/LICENSE +661 -0
  2. package/README.md +51 -0
  3. package/dist/adapter/accounts.d.ts +174 -0
  4. package/dist/adapter/accounts.d.ts.map +1 -0
  5. package/dist/adapter/accounts.js +653 -0
  6. package/dist/adapter/accounts.js.map +1 -0
  7. package/dist/adapter/bots.d.ts +142 -0
  8. package/dist/adapter/bots.d.ts.map +1 -0
  9. package/dist/adapter/bots.js +454 -0
  10. package/dist/adapter/bots.js.map +1 -0
  11. package/dist/adapter/host.d.ts +114 -0
  12. package/dist/adapter/host.d.ts.map +1 -0
  13. package/dist/adapter/host.js +90 -0
  14. package/dist/adapter/host.js.map +1 -0
  15. package/dist/adapter/login.d.ts +174 -0
  16. package/dist/adapter/login.d.ts.map +1 -0
  17. package/dist/adapter/login.js +345 -0
  18. package/dist/adapter/login.js.map +1 -0
  19. package/dist/adapter/registry.d.ts +102 -0
  20. package/dist/adapter/registry.d.ts.map +1 -0
  21. package/dist/adapter/registry.js +150 -0
  22. package/dist/adapter/registry.js.map +1 -0
  23. package/dist/config/core-config.d.ts +151 -0
  24. package/dist/config/core-config.d.ts.map +1 -0
  25. package/dist/config/core-config.js +338 -0
  26. package/dist/config/core-config.js.map +1 -0
  27. package/dist/config/schema.d.ts +449 -0
  28. package/dist/config/schema.d.ts.map +1 -0
  29. package/dist/config/schema.js +871 -0
  30. package/dist/config/schema.js.map +1 -0
  31. package/dist/config/store.d.ts +184 -0
  32. package/dist/config/store.d.ts.map +1 -0
  33. package/dist/config/store.js +428 -0
  34. package/dist/config/store.js.map +1 -0
  35. package/dist/config/yaml.d.ts +23 -0
  36. package/dist/config/yaml.d.ts.map +1 -0
  37. package/dist/config/yaml.js +108 -0
  38. package/dist/config/yaml.js.map +1 -0
  39. package/dist/http/client.d.ts +82 -0
  40. package/dist/http/client.d.ts.map +1 -0
  41. package/dist/http/client.js +658 -0
  42. package/dist/http/client.js.map +1 -0
  43. package/dist/index.d.ts +77 -0
  44. package/dist/index.d.ts.map +1 -0
  45. package/dist/index.js +94 -0
  46. package/dist/index.js.map +1 -0
  47. package/dist/kernel/app.d.ts +244 -0
  48. package/dist/kernel/app.d.ts.map +1 -0
  49. package/dist/kernel/app.js +654 -0
  50. package/dist/kernel/app.js.map +1 -0
  51. package/dist/kernel/kv-sink.d.ts +34 -0
  52. package/dist/kernel/kv-sink.d.ts.map +1 -0
  53. package/dist/kernel/kv-sink.js +25 -0
  54. package/dist/kernel/kv-sink.js.map +1 -0
  55. package/dist/kernel/policy.d.ts +77 -0
  56. package/dist/kernel/policy.d.ts.map +1 -0
  57. package/dist/kernel/policy.js +99 -0
  58. package/dist/kernel/policy.js.map +1 -0
  59. package/dist/kernel/runtime.d.ts +117 -0
  60. package/dist/kernel/runtime.d.ts.map +1 -0
  61. package/dist/kernel/runtime.js +197 -0
  62. package/dist/kernel/runtime.js.map +1 -0
  63. package/dist/kernel/sql-sink.d.ts +36 -0
  64. package/dist/kernel/sql-sink.d.ts.map +1 -0
  65. package/dist/kernel/sql-sink.js +114 -0
  66. package/dist/kernel/sql-sink.js.map +1 -0
  67. package/dist/logger/format.d.ts +67 -0
  68. package/dist/logger/format.d.ts.map +1 -0
  69. package/dist/logger/format.js +218 -0
  70. package/dist/logger/format.js.map +1 -0
  71. package/dist/logger/index.d.ts +97 -0
  72. package/dist/logger/index.d.ts.map +1 -0
  73. package/dist/logger/index.js +363 -0
  74. package/dist/logger/index.js.map +1 -0
  75. package/dist/logger/rotate.d.ts +47 -0
  76. package/dist/logger/rotate.d.ts.map +1 -0
  77. package/dist/logger/rotate.js +242 -0
  78. package/dist/logger/rotate.js.map +1 -0
  79. package/dist/message/segment.d.ts +255 -0
  80. package/dist/message/segment.d.ts.map +1 -0
  81. package/dist/message/segment.js +510 -0
  82. package/dist/message/segment.js.map +1 -0
  83. package/dist/message/split.d.ts +34 -0
  84. package/dist/message/split.d.ts.map +1 -0
  85. package/dist/message/split.js +79 -0
  86. package/dist/message/split.js.map +1 -0
  87. package/dist/message/target.d.ts +29 -0
  88. package/dist/message/target.d.ts.map +1 -0
  89. package/dist/message/target.js +34 -0
  90. package/dist/message/target.js.map +1 -0
  91. package/dist/pipeline/cooldown.d.ts +84 -0
  92. package/dist/pipeline/cooldown.d.ts.map +1 -0
  93. package/dist/pipeline/cooldown.js +94 -0
  94. package/dist/pipeline/cooldown.js.map +1 -0
  95. package/dist/pipeline/dispatch.d.ts +98 -0
  96. package/dist/pipeline/dispatch.d.ts.map +1 -0
  97. package/dist/pipeline/dispatch.js +323 -0
  98. package/dist/pipeline/dispatch.js.map +1 -0
  99. package/dist/pipeline/event.d.ts +130 -0
  100. package/dist/pipeline/event.d.ts.map +1 -0
  101. package/dist/pipeline/event.js +538 -0
  102. package/dist/pipeline/event.js.map +1 -0
  103. package/dist/pipeline/middleware.d.ts +63 -0
  104. package/dist/pipeline/middleware.d.ts.map +1 -0
  105. package/dist/pipeline/middleware.js +174 -0
  106. package/dist/pipeline/middleware.js.map +1 -0
  107. package/dist/pipeline/prompt.d.ts +80 -0
  108. package/dist/pipeline/prompt.d.ts.map +1 -0
  109. package/dist/pipeline/prompt.js +155 -0
  110. package/dist/pipeline/prompt.js.map +1 -0
  111. package/dist/pipeline/router.d.ts +98 -0
  112. package/dist/pipeline/router.d.ts.map +1 -0
  113. package/dist/pipeline/router.js +489 -0
  114. package/dist/pipeline/router.js.map +1 -0
  115. package/dist/platform/detect.d.ts +24 -0
  116. package/dist/platform/detect.d.ts.map +1 -0
  117. package/dist/platform/detect.js +178 -0
  118. package/dist/platform/detect.js.map +1 -0
  119. package/dist/platform/paths.d.ts +38 -0
  120. package/dist/platform/paths.d.ts.map +1 -0
  121. package/dist/platform/paths.js +129 -0
  122. package/dist/platform/paths.js.map +1 -0
  123. package/dist/platform/system.d.ts +71 -0
  124. package/dist/platform/system.d.ts.map +1 -0
  125. package/dist/platform/system.js +242 -0
  126. package/dist/platform/system.js.map +1 -0
  127. package/dist/plugin/context.d.ts +92 -0
  128. package/dist/plugin/context.d.ts.map +1 -0
  129. package/dist/plugin/context.js +573 -0
  130. package/dist/plugin/context.js.map +1 -0
  131. package/dist/plugin/define.d.ts +92 -0
  132. package/dist/plugin/define.d.ts.map +1 -0
  133. package/dist/plugin/define.js +82 -0
  134. package/dist/plugin/define.js.map +1 -0
  135. package/dist/plugin/discover.d.ts +106 -0
  136. package/dist/plugin/discover.d.ts.map +1 -0
  137. package/dist/plugin/discover.js +254 -0
  138. package/dist/plugin/discover.js.map +1 -0
  139. package/dist/plugin/events.d.ts +109 -0
  140. package/dist/plugin/events.d.ts.map +1 -0
  141. package/dist/plugin/events.js +209 -0
  142. package/dist/plugin/events.js.map +1 -0
  143. package/dist/plugin/hooks.d.ts +266 -0
  144. package/dist/plugin/hooks.d.ts.map +1 -0
  145. package/dist/plugin/hooks.js +84 -0
  146. package/dist/plugin/hooks.js.map +1 -0
  147. package/dist/plugin/host.d.ts +160 -0
  148. package/dist/plugin/host.d.ts.map +1 -0
  149. package/dist/plugin/host.js +546 -0
  150. package/dist/plugin/host.js.map +1 -0
  151. package/dist/plugin/market.d.ts +264 -0
  152. package/dist/plugin/market.d.ts.map +1 -0
  153. package/dist/plugin/market.js +700 -0
  154. package/dist/plugin/market.js.map +1 -0
  155. package/dist/plugin/services.d.ts +116 -0
  156. package/dist/plugin/services.d.ts.map +1 -0
  157. package/dist/plugin/services.js +213 -0
  158. package/dist/plugin/services.js.map +1 -0
  159. package/dist/plugin/tar.d.ts +65 -0
  160. package/dist/plugin/tar.d.ts.map +1 -0
  161. package/dist/plugin/tar.js +277 -0
  162. package/dist/plugin/tar.js.map +1 -0
  163. package/dist/render/registry.d.ts +127 -0
  164. package/dist/render/registry.d.ts.map +1 -0
  165. package/dist/render/registry.js +306 -0
  166. package/dist/render/registry.js.map +1 -0
  167. package/dist/scheduler/index.d.ts +67 -0
  168. package/dist/scheduler/index.d.ts.map +1 -0
  169. package/dist/scheduler/index.js +279 -0
  170. package/dist/scheduler/index.js.map +1 -0
  171. package/dist/server/api.d.ts +179 -0
  172. package/dist/server/api.d.ts.map +1 -0
  173. package/dist/server/api.js +602 -0
  174. package/dist/server/api.js.map +1 -0
  175. package/dist/server/auth.d.ts +83 -0
  176. package/dist/server/auth.d.ts.map +1 -0
  177. package/dist/server/auth.js +178 -0
  178. package/dist/server/auth.js.map +1 -0
  179. package/dist/server/browse.d.ts +60 -0
  180. package/dist/server/browse.d.ts.map +1 -0
  181. package/dist/server/browse.js +187 -0
  182. package/dist/server/browse.js.map +1 -0
  183. package/dist/server/files.d.ts +27 -0
  184. package/dist/server/files.d.ts.map +1 -0
  185. package/dist/server/files.js +76 -0
  186. package/dist/server/files.js.map +1 -0
  187. package/dist/server/index.d.ts +189 -0
  188. package/dist/server/index.d.ts.map +1 -0
  189. package/dist/server/index.js +1123 -0
  190. package/dist/server/index.js.map +1 -0
  191. package/dist/server/table.d.ts +105 -0
  192. package/dist/server/table.d.ts.map +1 -0
  193. package/dist/server/table.js +289 -0
  194. package/dist/server/table.js.map +1 -0
  195. package/dist/store/index.d.ts +50 -0
  196. package/dist/store/index.d.ts.map +1 -0
  197. package/dist/store/index.js +120 -0
  198. package/dist/store/index.js.map +1 -0
  199. package/dist/store/json.d.ts +73 -0
  200. package/dist/store/json.d.ts.map +1 -0
  201. package/dist/store/json.js +174 -0
  202. package/dist/store/json.js.map +1 -0
  203. package/dist/store/kv.d.ts +126 -0
  204. package/dist/store/kv.d.ts.map +1 -0
  205. package/dist/store/kv.js +232 -0
  206. package/dist/store/kv.js.map +1 -0
  207. package/dist/store/level.d.ts +103 -0
  208. package/dist/store/level.d.ts.map +1 -0
  209. package/dist/store/level.js +119 -0
  210. package/dist/store/level.js.map +1 -0
  211. package/dist/store/memory.d.ts +61 -0
  212. package/dist/store/memory.d.ts.map +1 -0
  213. package/dist/store/memory.js +94 -0
  214. package/dist/store/memory.js.map +1 -0
  215. package/dist/store/sql.d.ts +142 -0
  216. package/dist/store/sql.d.ts.map +1 -0
  217. package/dist/store/sql.js +246 -0
  218. package/dist/store/sql.js.map +1 -0
  219. package/dist/testing/fake.d.ts +109 -0
  220. package/dist/testing/fake.d.ts.map +1 -0
  221. package/dist/testing/fake.js +196 -0
  222. package/dist/testing/fake.js.map +1 -0
  223. package/dist/testing/index.d.ts +16 -0
  224. package/dist/testing/index.d.ts.map +1 -0
  225. package/dist/testing/index.js +16 -0
  226. package/dist/testing/index.js.map +1 -0
  227. package/dist/testing/mock-adapter.d.ts +205 -0
  228. package/dist/testing/mock-adapter.d.ts.map +1 -0
  229. package/dist/testing/mock-adapter.js +309 -0
  230. package/dist/testing/mock-adapter.js.map +1 -0
  231. package/dist/util/deep.d.ts +108 -0
  232. package/dist/util/deep.d.ts.map +1 -0
  233. package/dist/util/deep.js +275 -0
  234. package/dist/util/deep.js.map +1 -0
  235. package/dist/util/defer.d.ts +107 -0
  236. package/dist/util/defer.d.ts.map +1 -0
  237. package/dist/util/defer.js +163 -0
  238. package/dist/util/defer.js.map +1 -0
  239. package/dist/util/dispose.d.ts +88 -0
  240. package/dist/util/dispose.d.ts.map +1 -0
  241. package/dist/util/dispose.js +143 -0
  242. package/dist/util/dispose.js.map +1 -0
  243. package/dist/util/duration.d.ts +28 -0
  244. package/dist/util/duration.d.ts.map +1 -0
  245. package/dist/util/duration.js +77 -0
  246. package/dist/util/duration.js.map +1 -0
  247. package/dist/util/fs.d.ts +110 -0
  248. package/dist/util/fs.d.ts.map +1 -0
  249. package/dist/util/fs.js +269 -0
  250. package/dist/util/fs.js.map +1 -0
  251. package/dist/util/id.d.ts +49 -0
  252. package/dist/util/id.d.ts.map +1 -0
  253. package/dist/util/id.js +87 -0
  254. package/dist/util/id.js.map +1 -0
  255. package/dist/util/lru.d.ts +74 -0
  256. package/dist/util/lru.d.ts.map +1 -0
  257. package/dist/util/lru.js +156 -0
  258. package/dist/util/lru.js.map +1 -0
  259. package/dist/util/queue.d.ts +64 -0
  260. package/dist/util/queue.d.ts.map +1 -0
  261. package/dist/util/queue.js +147 -0
  262. package/dist/util/queue.js.map +1 -0
  263. package/dist/util/text.d.ts +86 -0
  264. package/dist/util/text.d.ts.map +1 -0
  265. package/dist/util/text.js +182 -0
  266. package/dist/util/text.js.map +1 -0
  267. package/package.json +44 -0
  268. package/src/adapter/accounts.ts +758 -0
  269. package/src/adapter/bots.ts +582 -0
  270. package/src/adapter/host.ts +224 -0
  271. package/src/adapter/login.ts +481 -0
  272. package/src/adapter/registry.ts +202 -0
  273. package/src/config/core-config.test.ts +60 -0
  274. package/src/config/core-config.ts +401 -0
  275. package/src/config/schema.test.ts +179 -0
  276. package/src/config/schema.ts +1036 -0
  277. package/src/config/store.test.ts +245 -0
  278. package/src/config/store.ts +506 -0
  279. package/src/config/yaml.ts +119 -0
  280. package/src/http/client.test.ts +568 -0
  281. package/src/http/client.ts +777 -0
  282. package/src/index.ts +106 -0
  283. package/src/kernel/app.test.ts +267 -0
  284. package/src/kernel/app.ts +843 -0
  285. package/src/kernel/kv-sink.ts +58 -0
  286. package/src/kernel/policy.ts +120 -0
  287. package/src/kernel/runtime.test.ts +542 -0
  288. package/src/kernel/runtime.ts +307 -0
  289. package/src/kernel/sql-sink.ts +154 -0
  290. package/src/logger/format.ts +259 -0
  291. package/src/logger/index.ts +427 -0
  292. package/src/logger/rotate.ts +265 -0
  293. package/src/message/segment.test.ts +335 -0
  294. package/src/message/segment.ts +569 -0
  295. package/src/message/split.ts +97 -0
  296. package/src/message/target.ts +48 -0
  297. package/src/pipeline/cooldown.ts +136 -0
  298. package/src/pipeline/dispatch.ts +419 -0
  299. package/src/pipeline/event.ts +735 -0
  300. package/src/pipeline/middleware.test.ts +426 -0
  301. package/src/pipeline/middleware.ts +199 -0
  302. package/src/pipeline/prompt.ts +212 -0
  303. package/src/pipeline/router.test.ts +432 -0
  304. package/src/pipeline/router.ts +575 -0
  305. package/src/platform/detect.ts +178 -0
  306. package/src/platform/paths.ts +147 -0
  307. package/src/platform/system.test.ts +102 -0
  308. package/src/platform/system.ts +289 -0
  309. package/src/plugin/context.test.ts +459 -0
  310. package/src/plugin/context.ts +757 -0
  311. package/src/plugin/define.test.ts +120 -0
  312. package/src/plugin/define.ts +142 -0
  313. package/src/plugin/discover.test.ts +253 -0
  314. package/src/plugin/discover.ts +353 -0
  315. package/src/plugin/events.test.ts +162 -0
  316. package/src/plugin/events.ts +266 -0
  317. package/src/plugin/hooks.ts +373 -0
  318. package/src/plugin/host.test.ts +696 -0
  319. package/src/plugin/host.ts +738 -0
  320. package/src/plugin/market.test.ts +781 -0
  321. package/src/plugin/market.ts +870 -0
  322. package/src/plugin/services.test.ts +135 -0
  323. package/src/plugin/services.ts +261 -0
  324. package/src/plugin/tar.test.ts +158 -0
  325. package/src/plugin/tar.ts +309 -0
  326. package/src/render/registry.test.ts +127 -0
  327. package/src/render/registry.ts +439 -0
  328. package/src/scheduler/index.ts +357 -0
  329. package/src/server/api.test.ts +802 -0
  330. package/src/server/api.ts +869 -0
  331. package/src/server/auth.ts +201 -0
  332. package/src/server/browse.test.ts +193 -0
  333. package/src/server/browse.ts +240 -0
  334. package/src/server/files.ts +97 -0
  335. package/src/server/index.test.ts +566 -0
  336. package/src/server/index.ts +1386 -0
  337. package/src/server/table.ts +351 -0
  338. package/src/store/index.ts +156 -0
  339. package/src/store/json.ts +198 -0
  340. package/src/store/kv.test.ts +307 -0
  341. package/src/store/kv.ts +256 -0
  342. package/src/store/level.ts +167 -0
  343. package/src/store/memory.ts +109 -0
  344. package/src/store/sql.test.ts +204 -0
  345. package/src/store/sql.ts +324 -0
  346. package/src/testing/fake.ts +297 -0
  347. package/src/testing/index.ts +15 -0
  348. package/src/testing/mock-adapter.ts +588 -0
  349. package/src/util/deep.ts +272 -0
  350. package/src/util/defer.ts +211 -0
  351. package/src/util/dispose.ts +169 -0
  352. package/src/util/duration.ts +82 -0
  353. package/src/util/fs.ts +279 -0
  354. package/src/util/id.ts +94 -0
  355. package/src/util/lru.ts +185 -0
  356. package/src/util/queue.ts +167 -0
  357. package/src/util/text.ts +189 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"event.js","sourceRoot":"","sources":["../../src/pipeline/event.ts"],"names":[],"mappings":"AAgDA,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAE,QAAQ,EAAE,GAAG,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,uBAAuB,CAAA;AAC9F,OAAO,EAAE,aAAa,EAAE,MAAM,eAAe,CAAA;AAC7C,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAA;AACnD,OAAO,EAAE,sBAAsB,EAAE,cAAc,EAAE,YAAY,EAAE,MAAM,aAAa,CAAA;AAElF;;;;;GAKG;AACH,MAAM,gBAAgB,GAAG,aAAa,CAAA;AAsEtC;;;;GAIG;AACH,SAAS,OAAO,CAAC,GAAY;IAC3B,OAAO,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAA;AACzD,CAAC;AAED;;;;;;;GAOG;AACH,SAAS,cAAc,CAAC,CAAsB;IAC5C,IAAI,CAAC,CAAC,GAAG,KAAK,SAAS;QAAE,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,GAAG,EAAE,CAAC,CAAC,GAAG,EAAE,CAAA;IAC9D,IAAI,CAAC,CAAC,GAAG,KAAK,SAAS;QAAE,OAAO,EAAE,KAAK,EAAE,SAAS,EAAE,GAAG,EAAE,CAAC,CAAC,GAAG,EAAE,CAAA;IAChE,OAAO,SAAS,CAAA;AAClB,CAAC;AAED,gBAAgB;AAChB,MAAM,gBAAgB;IACpB,WAAW;IACF,IAAI,GAAG,SAAkB,CAAA;IAElC,cAAc;IACL,EAAE,CAAQ;IACnB,eAAe;IACN,IAAI,CAAQ;IACrB,WAAW;IACF,QAAQ,CAAQ;IACzB,kBAAkB;IACT,MAAM,CAAQ;IACvB,iBAAiB;IACR,GAAG,CAAQ;IACpB,aAAa;IACJ,GAAG,CAAS;IACrB,iBAAiB;IACR,KAAK,GAA4B,EAAE,CAAA;IAE5C,SAAS;IACA,KAAK,CAAc;IAC5B,aAAa;IACJ,OAAO,CAAQ;IACxB,cAAc;IACL,SAAS,CAAQ;IAC1B,YAAY;IACH,GAAG,CAAS;IAErB,+BAA+B;IAC/B,OAAO,CAAW;IAClB,YAAY;IACZ,IAAI,GAAG,EAAE,CAAA;IAET,UAAU;IACD,MAAM,CAAuB;IACtC,UAAU;IACD,KAAK,CAAY;IAC1B,YAAY;IACH,OAAO,CAAc;IAC9B,YAAY;IACH,KAAK,CAAY;IAE1B,aAAa;IACb,OAAO,CAAe;IAEtB,UAAU;IACD,OAAO,CAAQ;IACxB,WAAW;IACF,OAAO,CAAiB;IACjC,aAAa;IACJ,QAAQ,CAAgB;IAEjC,8BAA8B;IACrB,OAAO,CAAY;IAC5B,gBAAgB;IACP,KAAK,CAAuB;IACrC,WAAW;IACF,SAAS,CAAS;IAE3B,eAAe;IACf,KAAK,GAAG,KAAK,CAAA;IACb,cAAc;IACd,QAAQ,GAAsB,EAAE,CAAA;IAChC,mBAAmB;IACnB,OAAO,GAA4B,EAAE,CAAA;IACrC,aAAa;IACb,QAAQ,GAAG,KAAK,CAAA;IAChB,eAAe;IACf,QAAQ,CAA+B;IAEvC;;;;OAIG;IACH,YAAY,QAA8B,EAAE,GAAW,EAAE,IAAyB;QAChF,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,MAAM,CAAA;QAC1B,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,MAAM,CAAA;QAC1B,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,OAAO,CAAA;QAE5B,IAAI,CAAC,EAAE,GAAG,QAAQ,CAAC,EAAE,IAAI,aAAa,EAAE,CAAA;QACxC,IAAI,CAAC,IAAI,GAAG,QAAQ,CAAC,IAAI,IAAI,IAAI,CAAC,GAAG,EAAE,CAAA;QACvC,IAAI,CAAC,QAAQ,GAAG,GAAG,CAAC,QAAQ,CAAA;QAC5B,IAAI,CAAC,MAAM,GAAG,GAAG,CAAC,MAAM,CAAA;QACxB,IAAI,CAAC,GAAG,GAAG,GAAG,CAAA;QACd,IAAI,CAAC,GAAG,GAAG,QAAQ,CAAC,GAAG,CAAA;QAEvB,IAAI,CAAC,KAAK,GAAG,QAAQ,CAAC,KAAK,CAAA;QAC3B,IAAI,CAAC,OAAO,GAAG,QAAQ,CAAC,OAAO,IAAI,QAAQ,CAAC,KAAK,CAAA;QACjD,IAAI,CAAC,SAAS,GAAG,QAAQ,CAAC,SAAS,CAAA;QACnC,IAAI,CAAC,GAAG,GAAG,QAAQ,CAAC,GAAG,CAAA;QACvB,mCAAmC;QACnC,+BAA+B;QAC/B,IAAI,CAAC,OAAO,GAAG,QAAQ,CAAC,OAAO,CAAA;QAC/B,IAAI,CAAC,MAAM,GAAG,QAAQ,CAAC,MAAM,CAAA;QAC7B,IAAI,CAAC,KAAK,GAAG,QAAQ,CAAC,KAAK,CAAA;QAC3B,IAAI,CAAC,OAAO,GAAG,QAAQ,CAAC,OAAO,CAAA;QAC/B,IAAI,CAAC,KAAK,GAAG,QAAQ,CAAC,KAAK,CAAA;QAE3B,IAAI,CAAC,KAAK,GAAG,MAAM,IAAI,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,SAAS,CAAA;QACzE,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,QAAQ,CAAC,MAAM,CAAC,GAAG,CAAC,CAAA;QAC1D,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,cAAc,EAAE,CAAA;QACpC,IAAI,CAAC,OAAO,EAAE,CAAA;IAChB,CAAC;IAED,4BAA4B;IAC5B,IAAI,IAAI;QACN,OAAO,IAAI,CAAC,KAAK,CAAA;IACnB,CAAC;IAED,oBAAoB;IACpB,IAAI,OAAO;QACT,OAAO,IAAI,CAAC,QAAQ,CAAA;IACtB,CAAC;IAED,wBAAwB;IACxB,IAAI,MAAM;QACR,OAAO,IAAI,CAAC,OAAO,CAAA;IACrB,CAAC;IAED,cAAc;IACd,IAAI,QAAQ;QACV,OAAO,IAAI,CAAC,SAAS,CAAA;IACvB,CAAC;IAED,qBAAqB;IACrB,IAAI,YAAY;QACd,OAAO,IAAI,CAAC,KAAK,KAAK,OAAO,IAAI,IAAI,CAAC,KAAK,KAAK,OAAO,CAAA;IACzD,CAAC;IAED,cAAc;IACd,IAAI,YAAY;QACd,OAAO,IAAI,CAAC,KAAK,KAAK,OAAO,CAAA;IAC/B,CAAC;IAED,WAAW;IACX,IAAI,SAAS;QACX,OAAO,IAAI,CAAC,KAAK,KAAK,SAAS,CAAA;IACjC,CAAC;IAED,2CAA2C;IAC3C,IAAI,OAAO;QACT,OAAO,IAAI,CAAC,KAAK,KAAK,OAAO,CAAA;IAC/B,CAAC;IAED,mBAAmB;IACnB,IAAI,MAAM;QACR,OAAO,IAAI,CAAC,OAAO,CAAA;IACrB,CAAC;IAED,aAAa;IACb,IAAI,OAAO;QACT,OAAO,IAAI,CAAC,QAAQ,CAAA;IACtB,CAAC;IAED,mBAAmB;IACnB,IAAI;QACF,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAA;IACtB,CAAC;IAED;;;OAGG;IACH,IAAI,CAAC,IAAmC;QACtC,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAA;IACtB,CAAC;IAED,2BAA2B;IAC3B,OAAO;QACL,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,CAAA;QAC5B,MAAM,OAAO,GAAG,SAAS,CAAC,OAAO,CAAC,CAAA;QAClC,MAAM,MAAM,GAAG,QAAQ,CAAC,OAAO,CAAC,CAAA;QAEhC,gCAAgC;QAChC,4BAA4B;QAC5B,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,EAAE,OAAO,CAAA;QAClC,IAAI,MAAM,KAAK,SAAS,IAAI,MAAM,CAAC,MAAM,GAAG,CAAC;YAAE,MAAM,CAAC,IAAI,CAAC,GAAG,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAA;QAE/E,IAAI,IAAI,GAAG,QAAQ,CAAC,OAAO,CAAC,CAAA;QAC5B,IAAI,CAAC,IAAI,EAAE,CAAC;YACV,KAAK,MAAM,GAAG,IAAI,OAAO,EAAE,CAAC;gBAC1B,IAAI,GAAG,KAAK,IAAI,CAAC,MAAM,EAAE,CAAC;oBACxB,IAAI,GAAG,IAAI,CAAA;oBACX,MAAK;gBACP,CAAC;YACH,CAAC;QACH,CAAC;QAED,IAAI,IAAI,GAAG,MAAM,CAAC,OAAO,CAAC,CAAA;QAC1B,MAAM,QAAQ,GAAG,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,CAAA;QAC1C,IAAI,QAAQ,KAAK,SAAS,EAAE,CAAC;YAC3B,6CAA6C;YAC7C,eAAe;YACf,IAAI,GAAG,QAAQ,CAAA;YACf,IAAI,GAAG,IAAI,CAAA;QACb,CAAC;QAED,IAAI,CAAC,IAAI,GAAG,IAAI,CAAA;QAChB,IAAI,CAAC,QAAQ,GAAG,OAAO,CAAA;QACvB,IAAI,CAAC,OAAO,GAAG,MAAM,CAAA;QACrB,IAAI,CAAC,KAAK,GAAG,IAAI,CAAA;IACnB,CAAC;IAED;;;;;OAKG;IACH,KAAK,CAAC,KAAK,CAAC,OAAuB,EAAE,OAAqB,EAAE;QAC1D,MAAM,QAAQ,GAAG,UAAU,CAAC,OAAO,CAAC,CAAA;QACpC,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAC1B,uCAAuC;YACvC,uBAAuB;YACvB,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,MAAM,IAAI,CAAC,QAAQ,EAAE,IAAI,IAAI,IAAI,kBAAkB,IAAI,CAAC,EAAE,GAAG,CAAC,CAAA;YAChF,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,SAAS,EAAE,EAAE,EAAE,IAAI,EAAE,IAAI,CAAC,GAAG,EAAE,EAAE,CAAA;QACvD,CAAC;QAED,MAAM,OAAO,GACX,IAAI,CAAC,EAAE,KAAK,IAAI,IAAI,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,MAAM,CAAC,GAAG,EAAE,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAA;QAExG,MAAM,IAAI,GAAgB,EAAE,CAAA;QAC5B,IAAI,IAAI,CAAC,KAAK,KAAK,IAAI;YAAE,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,SAAS,CAAA;aAC/C,IAAI,OAAO,IAAI,CAAC,KAAK,KAAK,QAAQ;YAAE,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK,CAAA;QAChE,IAAI,IAAI,CAAC,WAAW,KAAK,SAAS;YAAE,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,WAAW,CAAA;QACvE,IAAI,IAAI,CAAC,WAAW,KAAK,SAAS;YAAE,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,WAAW,CAAA;QACvE,IAAI,IAAI,CAAC,WAAW,KAAK,SAAS;YAAE,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,WAAW,CAAA;QAEvE,OAAO,IAAI,CAAC,GAAG,CAAC,WAAW,CAAC,IAAI,CAAC,OAAO,EAAE,OAAO,EAAE,IAAI,CAAC,CAAA;IAC1D,CAAC;IAiBD;;;;;;;OAOG;IACH,KAAK,CAAC,MAAM,CACV,KAA8B,EAC9B,MAAgD,EAChD,KAAqB;QAErB,MAAM,OAAO,GAAG,IAAI,CAAC,QAAQ,CAAA;QAC7B,IAAI,OAAO,KAAK,SAAS,EAAE,CAAC;YAC1B,MAAM,IAAI,KAAK,CACb,mDAAmD;gBACjD,8CAA8C,CACjD,CAAA;QACH,CAAC;QACD,uCAAuC;QACvC,sBAAsB;QACtB,IAAI,OAAO,KAAK,KAAK,QAAQ;YAAE,OAAO,OAAO,CAAC,MAAM,CAAC,KAAK,EAAE,MAA6C,EAAE,KAAK,CAAC,CAAA;QACjH,OAAO,OAAO,CAAC,MAAM,CAAC,KAAK,EAAE,MAAmC,CAAC,CAAA;IACnE,CAAC;IAqBD;;;;;;OAMG;IACH,KAAK,CAAC,WAAW,CACf,KAA8B,EAC9B,MAAiE,EACjE,KAAoC;QAEpC,qCAAqC;QACrC,8CAA8C;QAC9C,MAAM,IAAI,GAAG,OAAO,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAE,MAAqD,CAAA;QACvG,MAAM,KAAK,GACT,OAAO,KAAK,KAAK,QAAQ;YACvB,CAAC,CAAC,MAAM,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE,MAA6C,EAAE,KAAK,CAAC;YAChF,CAAC,CAAC,MAAM,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE,MAAoD,CAAC,CAAA;QACpF,OAAO,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE,IAAI,CAAC,CAAA;IAChC,CAAC;IAED;;;OAGG;IACH,KAAK,CAAC,MAAM;QACV,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC;YAAE,OAAO,KAAK,CAAA;QAC9C,IAAI,CAAC;YACH,OAAO,MAAM,IAAI,CAAC,GAAG,CAAC,aAAa,CAAC,IAAI,CAAC,SAAS,CAAC,CAAA;QACrD,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,mCAAmC;YACnC,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,QAAQ,IAAI,CAAC,SAAS,OAAO,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAA;YAC/D,OAAO,KAAK,CAAA;QACd,CAAC;IACH,CAAC;IAED;;;;OAIG;IACH,KAAK,CAAC,MAAM,CAAC,OAAsB,EAAE;QACnC,IAAI,IAAI,CAAC,GAAG,KAAK,SAAS;YAAE,MAAM,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAA;QACtD,MAAM,OAAO,GAAG,IAAI,CAAC,QAAQ,CAAA;QAC7B,OAAO,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC;YACxB,GAAG,EAAE,YAAY,CAAC,IAAI,CAAC;YACvB,GAAG,EAAE,IAAI,CAAC,MAAM,CAAC,GAAG;YACpB,QAAQ,EAAE,IAAI,CAAC,QAAQ,KAAK,KAAK;YACjC,OAAO,EAAE,aAAa,CAAC,IAAI,CAAC,OAAO,EAAE,sBAAsB,CAAC;YAC5D,MAAM,EAAE,IAAI,CAAC,MAAM;YACnB,MAAM,EAAE,OAAO,EAAE,IAAI,IAAI,IAAI;YAC7B,MAAM,EAAE,OAAO,EAAE,MAAM;SACxB,CAAC,CAAA;IACJ,CAAC;IAED;;;;;;;;OAQG;IACH,cAAc,CAAC,IAAY;QACzB,IAAI,IAAI,KAAK,EAAE;YAAE,OAAO,SAAS,CAAA;QACjC,IAAI,IAAI,GAAG,EAAE,CAAA;QACb,KAAK,MAAM,IAAI,IAAI,IAAI,CAAC,OAAO,CAAC,SAAS,EAAE,CAAC;YAC1C,IAAI,IAAI,KAAK,EAAE,IAAI,IAAI,CAAC,MAAM,IAAI,IAAI,CAAC,MAAM;gBAAE,SAAQ;YACvD,IAAI,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC;gBAAE,IAAI,GAAG,IAAI,CAAA;QACxC,CAAC;QACD,IAAI,IAAI,KAAK,EAAE;YAAE,OAAO,SAAS,CAAA;QACjC,OAAO,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC,gBAAgB,EAAE,EAAE,CAAC,CAAA;IAC9D,CAAC;IAED;;;OAGG;IACH,cAAc;QACZ,QAAQ,IAAI,CAAC,KAAK,EAAE,CAAC;YACnB,KAAK,OAAO,CAAC,CAAC,CAAC;gBACb,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,EAAE,GAAG,CAAA;gBAC3B,IAAI,GAAG,KAAK,SAAS;oBAAE,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,GAAG,EAAE,CAAA;gBACrD,MAAK;YACP,CAAC;YACD,KAAK,OAAO,CAAC,CAAC,CAAC;gBACb,MAAM,EAAE,GAAG,IAAI,CAAC,OAAO,CAAA;gBACvB,IAAI,EAAE,KAAK,SAAS;oBAAE,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,OAAO,EAAE,EAAE,CAAC,OAAO,EAAE,SAAS,EAAE,EAAE,CAAC,SAAS,EAAE,CAAA;gBAC7F,MAAK;YACP,CAAC;YACD,KAAK,SAAS,CAAC,CAAC,CAAC;gBACf,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,EAAE,GAAG,CAAA;gBAC3B,0CAA0C;gBAC1C,OAAO,GAAG,KAAK,SAAS;oBACtB,CAAC,CAAC,EAAE,KAAK,EAAE,SAAS,EAAE,GAAG,EAAE,IAAI,CAAC,MAAM,CAAC,GAAG,EAAE;oBAC5C,CAAC,CAAC,EAAE,KAAK,EAAE,SAAS,EAAE,GAAG,EAAE,IAAI,CAAC,MAAM,CAAC,GAAG,EAAE,GAAG,EAAE,CAAA;YACrD,CAAC;QACH,CAAC;QACD,gCAAgC;QAChC,gCAAgC;QAChC,IAAI,CAAC,OAAO,CAAC,KAAK,CAChB,MAAM,IAAI,CAAC,EAAE,SAAS,IAAI,CAAC,KAAK,OAAO,IAAI,CAAC,KAAK,KAAK,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,MAAM,GAAG;YAC9E,mBAAmB,IAAI,CAAC,GAAG,CAAC,SAAS,EAAE,CAC1C,CAAA;QACD,OAAO,EAAE,KAAK,EAAE,SAAS,EAAE,GAAG,EAAE,IAAI,CAAC,MAAM,CAAC,GAAG,EAAE,CAAA;IACnD,CAAC;CACF;AAED;;;;;GAKG;AACH,MAAM,OAAO,YAAY;IACvB,WAAW;IACF,KAAK,CAAqB;IAEnC;;OAEG;IACH,YAAY,IAAyB;QACnC,IAAI,CAAC,KAAK,GAAG,IAAI,CAAA;IACnB,CAAC;IAED;;;;;OAKG;IACH,MAAM,CAAC,QAAuB,EAAE,GAAW;QACzC,QAAQ,QAAQ,CAAC,IAAI,EAAE,CAAC;YACtB,KAAK,SAAS;gBACZ,OAAO,IAAI,CAAC,aAAa,CAAC,QAAQ,EAAE,GAAG,CAAC,CAAA;YAC1C,KAAK,QAAQ;gBACX,OAAO,IAAI,CAAC,YAAY,CAAC,QAAQ,EAAE,GAAG,CAAC,CAAA;YACzC,KAAK,SAAS;gBACZ,OAAO,IAAI,CAAC,aAAa,CAAC,QAAQ,EAAE,GAAG,CAAC,CAAA;YAC1C,KAAK,MAAM;gBACT,OAAO,IAAI,CAAC,UAAU,CAAC,QAAQ,EAAE,GAAG,CAAC,CAAA;QACzC,CAAC;IACH,CAAC;IAED;;;;;OAKG;IACH,aAAa,CAAC,QAA8B,EAAE,GAAW;QACvD,OAAO,IAAI,gBAAgB,CAAC,QAAQ,EAAE,GAAG,EAAE,IAAI,CAAC,KAAK,CAAC,CAAA;IACxD,CAAC;IAED;;;;;OAKG;IACH,YAAY,CAAC,QAA6B,EAAE,GAAW;QACrD,MAAM,MAAM,GAAG,cAAc,CAAC,QAAQ,CAAC,CAAA;QACvC,IAAI,OAAO,GAAG,KAAK,CAAA;QACnB,MAAM,KAAK,GAAG;YACZ,GAAG,QAAQ;YACX,EAAE,EAAE,QAAQ,CAAC,EAAE,IAAI,aAAa,EAAE;YAClC,IAAI,EAAE,QAAQ,CAAC,IAAI,IAAI,IAAI,CAAC,GAAG,EAAE;YACjC,QAAQ,EAAE,GAAG,CAAC,QAAQ;YACtB,MAAM,EAAE,GAAG,CAAC,MAAM;YAClB,GAAG;YACH,GAAG,EAAE,QAAQ,CAAC,GAAG;YACjB,KAAK,EAAE,EAA6B;YACpC,IAAI;gBACF,OAAO,GAAG,IAAI,CAAA;YAChB,CAAC;YACD,wCAAwC;YACxC,IAAI,OAAO;gBACT,OAAO,OAAO,CAAA;YAChB,CAAC;YACD;;;;;eAKG;YACH,KAAK,CAAC,KAAK,CAAC,OAAuB;gBACjC,IAAI,MAAM,KAAK,SAAS,EAAE,CAAC;oBACzB,MAAM,IAAI,KAAK,CAAC,QAAQ,QAAQ,CAAC,UAAU,wBAAwB,CAAC,CAAA;gBACtE,CAAC;gBACD,OAAO,GAAG,CAAC,WAAW,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;YACzC,CAAC;SACF,CAAA;QACD,OAAO,KAAoB,CAAA;IAC7B,CAAC;IAED;;;;;OAKG;IACH,aAAa,CAAC,QAA8B,EAAE,GAAW;QACvD,IAAI,OAAO,GAAG,KAAK,CAAA;QAEnB;;;;;;;WAOG;QACH,MAAM,MAAM,GAAG,KAAK,EAAE,OAAgB,EAAE,KAAc,EAAiB,EAAE;YACvE,IAAI,QAAQ,CAAC,WAAW,KAAK,QAAQ,EAAE,CAAC;gBACtC,IAAI,GAAG,CAAC,mBAAmB,KAAK,SAAS,EAAE,CAAC;oBAC1C,MAAM,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC,MAAM,gBAAgB,CAAC,CAAA;gBACnD,CAAC;gBACD,MAAM,GAAG,CAAC,mBAAmB,CAAC,QAAQ,CAAC,IAAI,EAAE,OAAO,EAAE,OAAO,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,SAAS,CAAC,CAAA;gBAClF,OAAM;YACR,CAAC;YACD,IAAI,GAAG,CAAC,kBAAkB,KAAK,SAAS,EAAE,CAAC;gBACzC,MAAM,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC,MAAM,gBAAgB,CAAC,CAAA;YACnD,CAAC;YACD,MAAM,GAAG,CAAC,kBAAkB,CAAC,QAAQ,CAAC,IAAI,EAAE,OAAO,EAAE,OAAO,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,KAAK,CAAC,CAAA;QACnF,CAAC,CAAA;QAED,MAAM,KAAK,GAAG;YACZ,GAAG,QAAQ;YACX,EAAE,EAAE,QAAQ,CAAC,EAAE,IAAI,aAAa,EAAE;YAClC,IAAI,EAAE,QAAQ,CAAC,IAAI,IAAI,IAAI,CAAC,GAAG,EAAE;YACjC,QAAQ,EAAE,GAAG,CAAC,QAAQ;YACtB,MAAM,EAAE,GAAG,CAAC,MAAM;YAClB,GAAG;YACH,GAAG,EAAE,QAAQ,CAAC,GAAG;YACjB,KAAK,EAAE,EAA6B;YACpC,IAAI;gBACF,OAAO,GAAG,IAAI,CAAA;YAChB,CAAC;YACD,aAAa;YACb,IAAI,OAAO;gBACT,OAAO,OAAO,CAAA;YAChB,CAAC;YACD;;;eAGG;YACH,KAAK,CAAC,OAAO,CAAC,KAAc;gBAC1B,MAAM,MAAM,CAAC,IAAI,EAAE,KAAK,CAAC,CAAA;YAC3B,CAAC;YACD;;;eAGG;YACH,KAAK,CAAC,MAAM,CAAC,MAAe;gBAC1B,MAAM,MAAM,CAAC,KAAK,EAAE,MAAM,CAAC,CAAA;YAC7B,CAAC;SACF,CAAA;QACD,OAAO,KAAqB,CAAA;IAC9B,CAAC;IAED;;;;;OAKG;IACH,UAAU,CAAC,QAA2B,EAAE,GAAW;QACjD,IAAI,OAAO,GAAG,KAAK,CAAA;QACnB,MAAM,KAAK,GAAG;YACZ,GAAG,QAAQ;YACX,EAAE,EAAE,QAAQ,CAAC,EAAE,IAAI,aAAa,EAAE;YAClC,IAAI,EAAE,QAAQ,CAAC,IAAI,IAAI,IAAI,CAAC,GAAG,EAAE;YACjC,QAAQ,EAAE,GAAG,CAAC,QAAQ;YACtB,MAAM,EAAE,GAAG,CAAC,MAAM;YAClB,GAAG;YACH,GAAG,EAAE,QAAQ,CAAC,GAAG;YACjB,KAAK,EAAE,EAA6B;YACpC,IAAI;gBACF,OAAO,GAAG,IAAI,CAAA;YAChB,CAAC;YACD,aAAa;YACb,IAAI,OAAO;gBACT,OAAO,OAAO,CAAA;YAChB,CAAC;SACF,CAAA;QACD,OAAO,KAAkB,CAAA;IAC3B,CAAC;CACF"}
@@ -0,0 +1,63 @@
1
+ /**
2
+ * 模块职责:Koa 式中间件管线(实现 `MiddlewareSink`)
3
+ * 依赖方向:依赖类型包与 plugin/hooks 的登记结构
4
+ * 生命周期:随内核创建;每条注册返回 Disposer,插件卸载即摘除
5
+ * 注意事项:中间件是"把业务逻辑挡在内核之外"的关键机制。诸如 `*` → 星铁、
6
+ * `%` → 绝区零这类前缀识别,都是插件里的一个中间件,内核对"游戏"
7
+ * 一词毫不知情 —— 写进内核就再也洗不掉。
8
+ *
9
+ * 按事件大类预分桶(`#byKind`)而不是每条消息 filter 一遍:
10
+ * 注册是低频的,消息是高频的。
11
+ *
12
+ * `next()` 只能调一次。重复调用在 Koa 里也是硬错误 —— 它意味着
13
+ * 下游会被跑两遍,而"回复发了两条"这种症状极难追回到源头。
14
+ */
15
+ import type { AnyEvent, Disposer, Logger, MiddlewareInfo } from "@yunzai-ng/types";
16
+ import type { MiddlewareRegistration, MiddlewareSink } from "../plugin/hooks.js";
17
+ /** 中间件管线 */
18
+ export declare class MiddlewarePipeline implements MiddlewareSink {
19
+ #private;
20
+ /**
21
+ * @param logger 日志器
22
+ */
23
+ constructor(logger: Logger);
24
+ /** 已注册的中间件条数 */
25
+ get size(): number;
26
+ /**
27
+ * 列出全部中间件,顺序即实际的执行顺序
28
+ *
29
+ * **按 `message` 桶的顺序输出,不按注册顺序。** 面板上这张表要回答的是
30
+ * 「一条消息先过谁」,而注册顺序与执行顺序并不一致 —— `register()` 是插入排序,
31
+ * 后注册的高优先级中间件会排到前面去。
32
+ *
33
+ * 只对某几类**非** message 事件生效的中间件不在 message 桶里,故补在末尾:
34
+ * 少列一条比顺序不完美糟得多,那会让人以为某个插件没注册上。
35
+ * @returns 中间件描述数组
36
+ */
37
+ list(): MiddlewareInfo[];
38
+ /**
39
+ * 登记中间件
40
+ * @param reg 登记内容
41
+ * @returns 注销句柄
42
+ */
43
+ register(reg: MiddlewareRegistration): Disposer;
44
+ /**
45
+ * 执行整条管线
46
+ *
47
+ * `core` 是管线最内层 —— 对消息事件而言即命令路由。中间件未调用 `next()`
48
+ * 或调用了 `e.stop()` 均将导致 `core` 不执行,这正是"拦截消息"的实现方式。
49
+ * @param e 事件
50
+ * @param core 最内层处理
51
+ * @throws 任一中间件或 core 抛错时原样冒泡(由 dispatch 统一处理)
52
+ */
53
+ run(e: AnyEvent, core: () => Promise<void>): Promise<void>;
54
+ /**
55
+ * 摘除某插件的全部中间件
56
+ * @param plugin 插件名
57
+ * @returns 摘除的条数
58
+ */
59
+ removePlugin(plugin: string): number;
60
+ /** 清空全部登记 */
61
+ clear(): void;
62
+ }
63
+ //# sourceMappingURL=middleware.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"middleware.d.ts","sourceRoot":"","sources":["../../src/pipeline/middleware.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AACH,OAAO,KAAK,EAAE,QAAQ,EAAE,QAAQ,EAAa,MAAM,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAA;AAC7F,OAAO,KAAK,EAAE,sBAAsB,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAA;AAkBhF,YAAY;AACZ,qBAAa,kBAAmB,YAAW,cAAc;;IAQvD;;OAEG;gBACS,MAAM,EAAE,MAAM;IAK1B,gBAAgB;IAChB,IAAI,IAAI,IAAI,MAAM,CAEjB;IAED;;;;;;;;;;OAUG;IACH,IAAI,IAAI,cAAc,EAAE;IAYxB;;;;OAIG;IACH,QAAQ,CAAC,GAAG,EAAE,sBAAsB,GAAG,QAAQ;IAgB/C;;;;;;;;OAQG;IACG,GAAG,CAAC,CAAC,EAAE,QAAQ,EAAE,IAAI,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC;IA8ChE;;;;OAIG;IACH,YAAY,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM;IAWpC,aAAa;IACb,KAAK,IAAI,IAAI;CA2Bd"}
@@ -0,0 +1,174 @@
1
+ /** 缺省优先级 */
2
+ const DEFAULT_PRIORITY = 100;
3
+ /** 全部事件大类 */
4
+ const ALL_KINDS = ["message", "notice", "request", "meta"];
5
+ /**
6
+ * 比较两条中间件的执行顺序
7
+ * @param a 登记 a
8
+ * @param b 登记 b
9
+ * @returns 排序结果
10
+ */
11
+ function byPriority(a, b) {
12
+ return (a.options.priority ?? DEFAULT_PRIORITY) - (b.options.priority ?? DEFAULT_PRIORITY);
13
+ }
14
+ /** 中间件管线 */
15
+ export class MiddlewarePipeline {
16
+ /** 日志器 */
17
+ #logger;
18
+ /** 全部登记,用于 `size` 与按插件摘除 */
19
+ #all = new Set();
20
+ /** 按事件大类预分桶的有序执行链 */
21
+ #byKind = new Map();
22
+ /**
23
+ * @param logger 日志器
24
+ */
25
+ constructor(logger) {
26
+ this.#logger = logger;
27
+ for (const kind of ALL_KINDS)
28
+ this.#byKind.set(kind, []);
29
+ }
30
+ /** 已注册的中间件条数 */
31
+ get size() {
32
+ return this.#all.size;
33
+ }
34
+ /**
35
+ * 列出全部中间件,顺序即实际的执行顺序
36
+ *
37
+ * **按 `message` 桶的顺序输出,不按注册顺序。** 面板上这张表要回答的是
38
+ * 「一条消息先过谁」,而注册顺序与执行顺序并不一致 —— `register()` 是插入排序,
39
+ * 后注册的高优先级中间件会排到前面去。
40
+ *
41
+ * 只对某几类**非** message 事件生效的中间件不在 message 桶里,故补在末尾:
42
+ * 少列一条比顺序不完美糟得多,那会让人以为某个插件没注册上。
43
+ * @returns 中间件描述数组
44
+ */
45
+ list() {
46
+ const ordered = [...(this.#byKind.get("message") ?? [])];
47
+ for (const reg of this.#all) {
48
+ if (!ordered.includes(reg))
49
+ ordered.push(reg);
50
+ }
51
+ return ordered.map(reg => ({
52
+ plugin: reg.plugin,
53
+ priority: reg.options.priority ?? DEFAULT_PRIORITY,
54
+ kinds: [...this.#kindsOf(reg)]
55
+ }));
56
+ }
57
+ /**
58
+ * 登记中间件
59
+ * @param reg 登记内容
60
+ * @returns 注销句柄
61
+ */
62
+ register(reg) {
63
+ if (this.#all.has(reg))
64
+ return () => this.#remove(reg);
65
+ this.#all.add(reg);
66
+ for (const kind of this.#kindsOf(reg)) {
67
+ const list = this.#byKind.get(kind);
68
+ if (list === undefined)
69
+ continue;
70
+ // 插入排序:同优先级时后注册的排在后面,符合"先装的插件先跑"的直觉
71
+ let at = list.length;
72
+ while (at > 0 && byPriority(list[at - 1], reg) > 0)
73
+ at--;
74
+ list.splice(at, 0, reg);
75
+ }
76
+ return () => this.#remove(reg);
77
+ }
78
+ /**
79
+ * 执行整条管线
80
+ *
81
+ * `core` 是管线最内层 —— 对消息事件而言即命令路由。中间件未调用 `next()`
82
+ * 或调用了 `e.stop()` 均将导致 `core` 不执行,这正是"拦截消息"的实现方式。
83
+ * @param e 事件
84
+ * @param core 最内层处理
85
+ * @throws 任一中间件或 core 抛错时原样冒泡(由 dispatch 统一处理)
86
+ */
87
+ async run(e, core) {
88
+ const chain = this.#byKind.get(e.kind);
89
+ // 没有中间件时直接执行核心逻辑,一个闭包都不分配
90
+ if (chain === undefined || chain.length === 0) {
91
+ if (!e.stopped)
92
+ await core();
93
+ return;
94
+ }
95
+ // 取快照:中间件里调 ctx.middleware() 注册新中间件不该影响本次执行,
96
+ // 否则同一条消息的处理链会在跑的过程中变长,行为不可复现
97
+ const list = chain.slice();
98
+ /**
99
+ * 递归执行第 i 层
100
+ * @param i 层号
101
+ */
102
+ const dispatch = async (i) => {
103
+ if (e.stopped)
104
+ return;
105
+ if (i === list.length) {
106
+ await core();
107
+ return;
108
+ }
109
+ const reg = list[i];
110
+ let called = false;
111
+ /** 传给中间件的 next */
112
+ const next = async () => {
113
+ if (called) {
114
+ throw new Error(`插件 ${reg.plugin} 的中间件重复调用了 next():下游会被执行多次`);
115
+ }
116
+ called = true;
117
+ await dispatch(i + 1);
118
+ };
119
+ await reg.fn(e, next);
120
+ // 中间件既没调 next 也没显式 stop:这是合法的"拦截",但很容易是忘了写。
121
+ // 只在 trace 级别提示,避免正常拦截也刷日志。
122
+ if (!called && !e.stopped && this.#logger.isLevelEnabled("trace")) {
123
+ this.#logger.trace(`插件 ${reg.plugin} 的中间件未调用 next(),事件 ${e.id} 到此中断`);
124
+ }
125
+ };
126
+ await dispatch(0);
127
+ }
128
+ /**
129
+ * 摘除某插件的全部中间件
130
+ * @param plugin 插件名
131
+ * @returns 摘除的条数
132
+ */
133
+ removePlugin(plugin) {
134
+ let n = 0;
135
+ for (const reg of [...this.#all]) {
136
+ if (reg.plugin === plugin) {
137
+ this.#remove(reg);
138
+ n++;
139
+ }
140
+ }
141
+ return n;
142
+ }
143
+ /** 清空全部登记 */
144
+ clear() {
145
+ this.#all.clear();
146
+ for (const list of this.#byKind.values())
147
+ list.length = 0;
148
+ }
149
+ /**
150
+ * 取某条登记适用的事件大类
151
+ * @param reg 登记内容
152
+ * @returns 事件大类数组
153
+ */
154
+ #kindsOf(reg) {
155
+ const want = reg.options.kind;
156
+ if (want === undefined)
157
+ return ALL_KINDS;
158
+ return Array.isArray(want) ? want : [want];
159
+ }
160
+ /**
161
+ * 注销一条登记
162
+ * @param reg 登记内容
163
+ */
164
+ #remove(reg) {
165
+ if (!this.#all.delete(reg))
166
+ return;
167
+ for (const list of this.#byKind.values()) {
168
+ const at = list.indexOf(reg);
169
+ if (at >= 0)
170
+ list.splice(at, 1);
171
+ }
172
+ }
173
+ }
174
+ //# sourceMappingURL=middleware.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"middleware.js","sourceRoot":"","sources":["../../src/pipeline/middleware.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,80 @@
1
+ /**
2
+ * 模块职责:`e.prompt()` 的等待者登记表(会话内"等下一条消息")
3
+ * 依赖方向:仅依赖类型包
4
+ * 生命周期:随内核创建;每个等待者自带超时与插件卸载信号,不会长期驻留
5
+ * 注意事项:**等待者集中登记,不挂在插件实例上。** 挂在实例上的上下文会随热重载
6
+ * 一并悬空:使用者仍在等输入,而插件已被替换,此后他回复的消息永远得不到
7
+ * 响应,那个闭包也永远不被释放。
8
+ *
9
+ * 集中登记后**同时**绑定三个终止条件:
10
+ * 超时、插件卸载信号、被消息满足。任一条件触发均会摘除登记,
11
+ * 因此不存在永久驻留的等待者。
12
+ *
13
+ * 同一会话可存在多个等待者,按 FIFO 交付:先登记者先取得。
14
+ * 随机交付或全部唤醒均将使"两个插件同时向使用者提问"的行为不可预测。
15
+ */
16
+ import type { MessageEvent } from "@yunzai-ng/types";
17
+ /** 缺省等待超时(毫秒) */
18
+ export declare const DEFAULT_PROMPT_TIMEOUT = 60000;
19
+ /** 登记一个等待者所需的参数 */
20
+ export interface PromptWaitParams {
21
+ /** 会话键,用 `sessionKeyOf()` 计算 */
22
+ readonly key: string;
23
+ /** 发起等待的用户 id */
24
+ readonly uid: string;
25
+ /** 是否只接受同一用户的消息 */
26
+ readonly sameUser: boolean;
27
+ /** 超时毫秒 */
28
+ readonly timeout: number;
29
+ /** 额外过滤;返回 false 表示这条不算,继续等 */
30
+ readonly filter?: ((e: MessageEvent) => boolean) | undefined;
31
+ /** 发起等待的插件名 */
32
+ readonly plugin: string;
33
+ /** 插件卸载信号;abort 时等待以 undefined 结束 */
34
+ readonly signal?: AbortSignal | undefined;
35
+ }
36
+ /**
37
+ * 计算会话键
38
+ *
39
+ * `selfId` 参与计算:同一个群中接入两个账号时,各自的等待互不干扰。
40
+ * 缺少它,A 号提出的问题会被回复给 B 号的等待者。
41
+ *
42
+ * 会话部分复用 `targetKey()`:发送队列用的是同一个函数,两处对"哪个算同一个
43
+ * 会话"的理解因此不可能走样。
44
+ * @param e 消息事件
45
+ * @returns 会话键
46
+ */
47
+ export declare function sessionKeyOf(e: MessageEvent): string;
48
+ /** `e.prompt()` 的等待者登记表 */
49
+ export declare class PromptRegistry {
50
+ #private;
51
+ /** 当前等待中的数量 */
52
+ get pending(): number;
53
+ /**
54
+ * 登记一个等待者
55
+ * @param params 等待参数
56
+ * @returns 下一条满足条件的消息;超时或插件卸载时 undefined
57
+ */
58
+ wait(params: PromptWaitParams): Promise<MessageEvent | undefined>;
59
+ /**
60
+ * 把消息投给该会话上的等待者
61
+ *
62
+ * 命中即消费:这条消息不再进入命令路由。否则"用户回答的内容恰好是个命令"
63
+ * 就会既满足等待又触发命令,两条回复一起发出来。
64
+ * @param e 消息事件
65
+ * @returns 是否被某个等待者消费
66
+ */
67
+ offer(e: MessageEvent): boolean;
68
+ /**
69
+ * 取消某插件的全部等待
70
+ *
71
+ * 插件的 `ctx.signal` 已经能覆盖正常卸载路径,这里是兜底:`prompt` 若被
72
+ * 转手到别的插件(服务注入场景)调用,signal 可能对不上。
73
+ * @param plugin 插件名
74
+ * @returns 取消的数量
75
+ */
76
+ cancelPlugin(plugin: string): number;
77
+ /** 结束全部等待(停机时调用) */
78
+ clear(): void;
79
+ }
80
+ //# sourceMappingURL=prompt.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"prompt.d.ts","sourceRoot":"","sources":["../../src/pipeline/prompt.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AACH,OAAO,KAAK,EAAY,YAAY,EAAE,MAAM,kBAAkB,CAAA;AAG9D,iBAAiB;AACjB,eAAO,MAAM,sBAAsB,QAAS,CAAA;AAoB5C,mBAAmB;AACnB,MAAM,WAAW,gBAAgB;IAC/B,gCAAgC;IAChC,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAA;IACpB,iBAAiB;IACjB,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAA;IACpB,mBAAmB;IACnB,QAAQ,CAAC,QAAQ,EAAE,OAAO,CAAA;IAC1B,WAAW;IACX,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAA;IACxB,+BAA+B;IAC/B,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,YAAY,KAAK,OAAO,CAAC,GAAG,SAAS,CAAA;IAC5D,eAAe;IACf,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAA;IACvB,qCAAqC;IACrC,QAAQ,CAAC,MAAM,CAAC,EAAE,WAAW,GAAG,SAAS,CAAA;CAC1C;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,YAAY,CAAC,CAAC,EAAE,YAAY,GAAG,MAAM,CAEpD;AAED,2BAA2B;AAC3B,qBAAa,cAAc;;IAIzB,eAAe;IACf,IAAI,OAAO,IAAI,MAAM,CAIpB;IAED;;;;OAIG;IACH,IAAI,CAAC,MAAM,EAAE,gBAAgB,GAAG,OAAO,CAAC,YAAY,GAAG,SAAS,CAAC;IA2DjE;;;;;;;OAOG;IACH,KAAK,CAAC,CAAC,EAAE,YAAY,GAAG,OAAO;IAc/B;;;;;;;OAOG;IACH,YAAY,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM;IAapC,oBAAoB;IACpB,KAAK,IAAI,IAAI;CAmBd"}
@@ -0,0 +1,155 @@
1
+ import { targetKey } from "../message/target.js";
2
+ /** 缺省等待超时(毫秒) */
3
+ export const DEFAULT_PROMPT_TIMEOUT = 60_000;
4
+ /**
5
+ * 计算会话键
6
+ *
7
+ * `selfId` 参与计算:同一个群中接入两个账号时,各自的等待互不干扰。
8
+ * 缺少它,A 号提出的问题会被回复给 B 号的等待者。
9
+ *
10
+ * 会话部分复用 `targetKey()`:发送队列用的是同一个函数,两处对"哪个算同一个
11
+ * 会话"的理解因此不可能走样。
12
+ * @param e 消息事件
13
+ * @returns 会话键
14
+ */
15
+ export function sessionKeyOf(e) {
16
+ return `${e.platform}:${e.selfId}:${targetKey(e.target)}`;
17
+ }
18
+ /** `e.prompt()` 的等待者登记表 */
19
+ export class PromptRegistry {
20
+ /** 会话键 → 该会话上的等待者队列(FIFO) */
21
+ #waiters = new Map();
22
+ /** 当前等待中的数量 */
23
+ get pending() {
24
+ let n = 0;
25
+ for (const list of this.#waiters.values())
26
+ n += list.length;
27
+ return n;
28
+ }
29
+ /**
30
+ * 登记一个等待者
31
+ * @param params 等待参数
32
+ * @returns 下一条满足条件的消息;超时或插件卸载时 undefined
33
+ */
34
+ wait(params) {
35
+ return new Promise(resolve => {
36
+ let done = false;
37
+ let timer;
38
+ let offSignal;
39
+ /** 统一收尾:摘登记、清定时器、解绑信号 */
40
+ const cleanup = () => {
41
+ if (timer !== undefined)
42
+ clearTimeout(timer);
43
+ offSignal?.();
44
+ this.#detach(params.key, waiter);
45
+ };
46
+ /** 只允许结束一次 */
47
+ const finish = (e) => {
48
+ if (done)
49
+ return;
50
+ done = true;
51
+ cleanup();
52
+ resolve(e);
53
+ };
54
+ const waiter = {
55
+ key: params.key,
56
+ uid: params.uid,
57
+ sameUser: params.sameUser,
58
+ filter: params.filter,
59
+ plugin: params.plugin,
60
+ resolve: finish,
61
+ cleanup
62
+ };
63
+ if (params.timeout > 0) {
64
+ timer = setTimeout(() => finish(undefined), params.timeout);
65
+ // 不使一个等待中的 prompt 阻止进程退出:使用者可能始终不再回复,
66
+ // 而停机不应为此额外等待 60 秒
67
+ timer.unref?.();
68
+ }
69
+ const signal = params.signal;
70
+ if (signal !== undefined) {
71
+ if (signal.aborted) {
72
+ finish(undefined);
73
+ return;
74
+ }
75
+ /** 插件卸载即结束等待 */
76
+ const onAbort = () => finish(undefined);
77
+ signal.addEventListener("abort", onAbort, { once: true });
78
+ offSignal = () => signal.removeEventListener("abort", onAbort);
79
+ }
80
+ let list = this.#waiters.get(params.key);
81
+ if (list === undefined) {
82
+ list = [];
83
+ this.#waiters.set(params.key, list);
84
+ }
85
+ list.push(waiter);
86
+ });
87
+ }
88
+ /**
89
+ * 把消息投给该会话上的等待者
90
+ *
91
+ * 命中即消费:这条消息不再进入命令路由。否则"用户回答的内容恰好是个命令"
92
+ * 就会既满足等待又触发命令,两条回复一起发出来。
93
+ * @param e 消息事件
94
+ * @returns 是否被某个等待者消费
95
+ */
96
+ offer(e) {
97
+ const key = sessionKeyOf(e);
98
+ const list = this.#waiters.get(key);
99
+ if (list === undefined || list.length === 0)
100
+ return false;
101
+ for (const waiter of [...list]) {
102
+ if (waiter.sameUser && waiter.uid !== e.sender.uid)
103
+ continue;
104
+ if (waiter.filter !== undefined && !waiter.filter(e))
105
+ continue;
106
+ waiter.resolve(e);
107
+ return true;
108
+ }
109
+ return false;
110
+ }
111
+ /**
112
+ * 取消某插件的全部等待
113
+ *
114
+ * 插件的 `ctx.signal` 已经能覆盖正常卸载路径,这里是兜底:`prompt` 若被
115
+ * 转手到别的插件(服务注入场景)调用,signal 可能对不上。
116
+ * @param plugin 插件名
117
+ * @returns 取消的数量
118
+ */
119
+ cancelPlugin(plugin) {
120
+ let n = 0;
121
+ for (const list of [...this.#waiters.values()]) {
122
+ for (const waiter of [...list]) {
123
+ if (waiter.plugin === plugin) {
124
+ waiter.resolve(undefined);
125
+ n++;
126
+ }
127
+ }
128
+ }
129
+ return n;
130
+ }
131
+ /** 结束全部等待(停机时调用) */
132
+ clear() {
133
+ for (const list of [...this.#waiters.values()]) {
134
+ for (const waiter of [...list])
135
+ waiter.resolve(undefined);
136
+ }
137
+ this.#waiters.clear();
138
+ }
139
+ /**
140
+ * 将等待者从队列中摘除
141
+ * @param key 会话键
142
+ * @param waiter 等待者
143
+ */
144
+ #detach(key, waiter) {
145
+ const list = this.#waiters.get(key);
146
+ if (list === undefined)
147
+ return;
148
+ const at = list.indexOf(waiter);
149
+ if (at >= 0)
150
+ list.splice(at, 1);
151
+ if (list.length === 0)
152
+ this.#waiters.delete(key);
153
+ }
154
+ }
155
+ //# sourceMappingURL=prompt.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"prompt.js","sourceRoot":"","sources":["../../src/pipeline/prompt.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,98 @@
1
+ /**
2
+ * 模块职责:命令注册表与匹配(实现 `CommandSink`)
3
+ * 依赖方向:依赖类型包、plugin/hooks 的登记结构、util/text;不依赖事件实现与适配器
4
+ * 生命周期:随内核创建,随内核销毁;每条注册返回 Disposer,插件卸载即摘除
5
+ * 注意事项:**按触发词首字符分桶,而不是每条消息线性匹配全部正则。** 线性匹配下,
6
+ * 装 20 个插件就意味着每条消息数百次正则测试,且插件越多越慢。
7
+ *
8
+ * 分桶后:`"#体力"` 进入 `#` 桶,一条 `#体力` 仅
9
+ * 尝试 `#` 桶内的候选。桶内按 `priority` 预排序(注册时排序一次,
10
+ * 匹配时不排序),因此匹配路径上不存在 sort 与正则编译。
11
+ *
12
+ * 正则模式尽力提取字面前缀(`/^#体力$/` → `#`)亦进入桶;无法提取的
13
+ * (`/^\d+/`、带 `m` 或 `i` 标志的字母开头)落入 `#unbucketed`,
14
+ * 每条消息均需尝试 —— 这是必须付出的代价,因此插件作者在可使用字符串时
15
+ * 不应改用正则。
16
+ */
17
+ import type { CommandInfo, CommandMatch, Disposer, Logger, MessageEvent } from "@yunzai-ng/types";
18
+ import type { CommandRegistration, CommandSink } from "../plugin/hooks.js";
19
+ /** 一条命中的候选 */
20
+ export interface RouterCandidate {
21
+ /** 命中的登记 */
22
+ readonly reg: CommandRegistration;
23
+ /** 填给 `e.command` 的匹配结果 */
24
+ readonly match: CommandMatch;
25
+ }
26
+ /** 命令路由器构造参数 */
27
+ export interface CommandRouterOptions {
28
+ /** 日志器 */
29
+ readonly logger: Logger;
30
+ /**
31
+ * 判断某命令是否被用户禁用
32
+ *
33
+ * 由配置层注入而非由路由器自行读取配置:路由器不应知晓配置文件的结构,
34
+ * 而 WebUI 的"停用某命令"开关(阶段四)只需替换该函数即可接入。
35
+ * @param reg 登记内容
36
+ * @returns 是否禁用
37
+ */
38
+ readonly isDisabled?: (reg: CommandRegistration) => boolean;
39
+ }
40
+ /**
41
+ * 命令路由器
42
+ *
43
+ * 既是 `ctx.command()` 的落点(`CommandSink`),也是消息管线的查询入口
44
+ * (`match()`),还是 WebUI 的数据来源(`list()`)。
45
+ */
46
+ export declare class CommandRouter implements CommandSink {
47
+ #private;
48
+ /**
49
+ * @param opts 构造参数
50
+ */
51
+ constructor(opts: CommandRouterOptions);
52
+ /** 已注册的命令条数 */
53
+ get size(): number;
54
+ /**
55
+ * 登记一条命令
56
+ *
57
+ * 不会抛错:单个模式编译失败(如空串)只落一条 error 日志并跳过该模式,
58
+ * 其余别名照旧可用 —— 一条命令的一个别名写错不该让插件装不上。
59
+ * @param reg 登记内容
60
+ * @returns 注销句柄
61
+ */
62
+ register(reg: CommandRegistration): Disposer;
63
+ /**
64
+ * 模式变化后重建索引
65
+ *
66
+ * 链式构造器的 `.alias()` 会往 `reg.patterns` 里塞新模式。整条重建而不是
67
+ * 增量追加:别名极少,而增量逻辑要处理"旧键还在不在别的模式里用"这种
68
+ * 引用计数问题,不值得。
69
+ * @param reg 登记内容
70
+ */
71
+ reindex(reg: CommandRegistration): void;
72
+ /**
73
+ * 找出该消息命中的全部命令,按匹配顺序排列
74
+ *
75
+ * 只做**模式匹配**与**零成本的静态过滤**(禁用、场景、@我、权限)。
76
+ * 冷却是异步的、要写 KV,且命中后才该计费,因此留给 dispatch。
77
+ * @param e 消息事件
78
+ * @returns 候选数组;无命中时为空数组
79
+ */
80
+ match(e: MessageEvent): RouterCandidate[];
81
+ /**
82
+ * 导出全部命令描述
83
+ * @returns 命令描述数组,按匹配顺序
84
+ */
85
+ list(): CommandInfo[];
86
+ /**
87
+ * 摘除某插件的全部命令
88
+ *
89
+ * 插件卸载时上下文会逐条调用 Disposer,此处为兜底:若存在未经 ctx 的登记
90
+ *(例如插件 setup 中途抛错),亦不会留下悬空命令。
91
+ * @param plugin 插件名
92
+ * @returns 摘除的条数
93
+ */
94
+ removePlugin(plugin: string): number;
95
+ /** 清空全部登记 */
96
+ clear(): void;
97
+ }
98
+ //# sourceMappingURL=router.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"router.d.ts","sourceRoot":"","sources":["../../src/pipeline/router.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AACH,OAAO,KAAK,EACV,WAAW,EACX,YAAY,EAGZ,QAAQ,EACR,MAAM,EACN,YAAY,EAEb,MAAM,kBAAkB,CAAA;AACzB,OAAO,KAAK,EAAE,mBAAmB,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAA;AAqD1E,cAAc;AACd,MAAM,WAAW,eAAe;IAC9B,YAAY;IACZ,QAAQ,CAAC,GAAG,EAAE,mBAAmB,CAAA;IACjC,2BAA2B;IAC3B,QAAQ,CAAC,KAAK,EAAE,YAAY,CAAA;CAC7B;AAED,gBAAgB;AAChB,MAAM,WAAW,oBAAoB;IACnC,UAAU;IACV,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAA;IACvB;;;;;;;OAOG;IACH,QAAQ,CAAC,UAAU,CAAC,EAAE,CAAC,GAAG,EAAE,mBAAmB,KAAK,OAAO,CAAA;CAC5D;AA8LD;;;;;GAKG;AACH,qBAAa,aAAc,YAAW,WAAW;;IAc/C;;OAEG;gBACS,IAAI,EAAE,oBAAoB;IAKtC,eAAe;IACf,IAAI,IAAI,IAAI,MAAM,CAEjB;IAED;;;;;;;OAOG;IACH,QAAQ,CAAC,GAAG,EAAE,mBAAmB,GAAG,QAAQ;IAW5C;;;;;;;OAOG;IACH,OAAO,CAAC,GAAG,EAAE,mBAAmB,GAAG,IAAI;IAQvC;;;;;;;OAOG;IACH,KAAK,CAAC,CAAC,EAAE,YAAY,GAAG,eAAe,EAAE;IAyCzC;;;OAGG;IACH,IAAI,IAAI,WAAW,EAAE;IAoBrB;;;;;;;OAOG;IACH,YAAY,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM;IAWpC,aAAa;IACb,KAAK,IAAI,IAAI;CA2Hd"}