weifuwu 0.87.0 → 0.89.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 (392) hide show
  1. package/README.md +111 -135
  2. package/dist/client/components/ActionSheet/ActionSheet.d.ts +1 -1
  3. package/dist/client/components/AiChat/AiChat.d.ts +3 -4
  4. package/dist/client/components/ChatInput/ChatInput.d.ts +5 -0
  5. package/dist/client/components/CitationCard/CitationCard.d.ts +1 -1
  6. package/dist/client/components/Command/Command.d.ts +1 -1
  7. package/dist/client/components/ContextMenu/ContextMenu.d.ts +1 -1
  8. package/dist/client/components/DatePicker/DatePicker.d.ts +1 -1
  9. package/dist/client/components/Dropdown/Dropdown.d.ts +1 -1
  10. package/dist/client/components/Editor/model/html.d.ts +10 -0
  11. package/dist/client/components/ImageCropper/ImageCropper.d.ts +6 -2
  12. package/dist/client/components/Menu/Menu.d.ts +1 -1
  13. package/dist/client/components/NavMenu/NavMenu.d.ts +1 -1
  14. package/dist/client/components/Popconfirm/Popconfirm.d.ts +1 -1
  15. package/dist/client/components/SlideCanvas/SlideCanvas.d.ts +1 -1
  16. package/dist/client/components/Tour/Tour.d.ts +1 -1
  17. package/dist/client/components/TreeSelect/TreeSelect.d.ts +1 -1
  18. package/dist/client/components/index.js +41 -41
  19. package/dist/client/components/style.css +298 -644
  20. package/dist/client/layout/weifuwu-layout.css +286 -640
  21. package/dist/client/vdom/browser/Browser.d.ts +2 -0
  22. package/dist/client/vdom/commands.d.ts +4 -1
  23. package/dist/client/vdom/context/UIContext.d.ts +8 -0
  24. package/dist/client/vdom/core/diff/attrs.d.ts +10 -2
  25. package/dist/client/vdom/core/field/attributes.d.ts +12 -0
  26. package/dist/client/vdom/core/field/events.d.ts +8 -0
  27. package/dist/client/vdom/core/field/input-sync.d.ts +14 -0
  28. package/dist/client/vdom/core/field/key.d.ts +3 -0
  29. package/dist/client/vdom/core/field/props.d.ts +13 -1
  30. package/dist/client/vdom/core/field/ref.d.ts +6 -0
  31. package/dist/client/vdom/core/field/style.d.ts +7 -1
  32. package/dist/client/vdom/core/node/component.d.ts +3 -4
  33. package/dist/client/vdom/core/node/native.d.ts +6 -1
  34. package/dist/client/vdom/core/patch/index.d.ts +24 -1
  35. package/dist/client/vdom/core/patch/processors.d.ts +8 -1
  36. package/dist/client/vdom/core/protocol.d.ts +45 -0
  37. package/dist/client/vdom/core/router.d.ts +7 -0
  38. package/dist/client/vdom/core/ssr/absorb.d.ts +31 -4
  39. package/dist/client/vdom/core/transform/index.d.ts +6 -6
  40. package/dist/client/vdom/core/v2/cycle.d.ts +54 -0
  41. package/dist/client/vdom/core/v2/diff.d.ts +80 -0
  42. package/dist/client/vdom/core/v2/integrate.d.ts +24 -0
  43. package/dist/client/vdom/core/v2/render.d.ts +28 -0
  44. package/dist/client/vdom/core/v2/schedule.d.ts +33 -0
  45. package/dist/client/vdom/core/v2/serve.d.ts +4 -0
  46. package/dist/client/vdom/core/v2/spy.d.ts +21 -0
  47. package/dist/client/vdom/core/v2/ssr.d.ts +14 -0
  48. package/dist/client/vdom/core/vnode.d.ts +9 -6
  49. package/dist/client/vdom/dev/error-counter.d.ts +27 -0
  50. package/dist/client/vdom/dev/render-health.d.ts +60 -0
  51. package/dist/client/vdom/hooks/chat.d.ts +32 -5
  52. package/dist/client/vdom/hooks/drag-media.d.ts +3 -1
  53. package/dist/client/vdom/hooks/env.d.ts +32 -0
  54. package/dist/client/vdom/hooks/popup-manager.d.ts +21 -0
  55. package/dist/client/vdom/hooks/popup.d.ts +4 -1
  56. package/dist/client/vdom/hooks/stable.d.ts +4 -0
  57. package/dist/client/vdom/hooks/use-observable.d.ts +13 -0
  58. package/dist/client/vdom/index.d.ts +14 -6
  59. package/dist/client/vdom/index.js +4 -7
  60. package/dist/client/vdom/jsx-runtime.js +1 -1
  61. package/dist/client/vdom/middlewares/api.d.ts +8 -0
  62. package/dist/client/vdom/middlewares/auth-i18n.d.ts +7 -0
  63. package/dist/client/vdom/middlewares/ws.d.ts +41 -1
  64. package/dist/client/vdom/observable/index.d.ts +13 -0
  65. package/dist/client/vdom/observable/observable.d.ts +26 -0
  66. package/dist/client/vdom/observable/operators.d.ts +76 -0
  67. package/dist/client/vdom/observable/sources.d.ts +54 -0
  68. package/dist/client/vdom/observable/types.d.ts +45 -0
  69. package/dist/client/vdom/store.d.ts +17 -2
  70. package/dist/client/vdom/testing.js +2 -2
  71. package/dist/server/ai/agent.d.ts +18 -0
  72. package/dist/server/ai/client.d.ts +14 -2
  73. package/dist/server/ai/contracts.d.ts +2 -2
  74. package/dist/server/ai/sse.d.ts +6 -0
  75. package/dist/server/core/collect.d.ts +31 -0
  76. package/dist/server/core/error-counter.d.ts +11 -0
  77. package/dist/server/core/hub.d.ts +2 -0
  78. package/dist/server/core/router.d.ts +12 -9
  79. package/dist/server/db/contracts.d.ts +24 -0
  80. package/dist/server/db/memory-redis.d.ts +3 -4
  81. package/dist/server/db/memory-sql.d.ts +20 -4
  82. package/dist/server/db/postgres-server.d.ts +2 -0
  83. package/dist/server/db/query.d.ts +21 -0
  84. package/dist/server/db/redis-server.d.ts +4 -2
  85. package/dist/server/db/sql-parser.d.ts +2 -1
  86. package/dist/server/email/index.d.ts +2 -0
  87. package/dist/server/index.d.ts +4 -1
  88. package/dist/server/index.js +3927 -1982
  89. package/dist/server/messager/index.d.ts +21 -2
  90. package/dist/server/middleware/compress.d.ts +25 -0
  91. package/dist/server/ui/index.d.ts +8 -1
  92. package/dist/server/user/index.d.ts +4 -0
  93. package/dist/shared/router/chain.d.ts +9 -0
  94. package/dist/shared/router/context.d.ts +35 -0
  95. package/dist/shared/router/ctx-fields.d.ts +20 -0
  96. package/dist/shared/router/pipeline.d.ts +70 -0
  97. package/dist/shared/router/trie.d.ts +11 -3
  98. package/dist/shared/router/types.d.ts +23 -0
  99. package/docs/style-guide.md +44 -41
  100. package/package.json +13 -10
  101. package/content/apps/admin.md +0 -55
  102. package/content/apps/agent-platform.md +0 -35
  103. package/content/apps/auth.md +0 -49
  104. package/content/apps/multi.md +0 -44
  105. package/content/apps/todo.md +0 -51
  106. package/content/backend/ai.md +0 -28
  107. package/content/backend/auth.md +0 -20
  108. package/content/backend/email.md +0 -23
  109. package/content/backend/graphql.md +0 -23
  110. package/content/backend/http.md +0 -23
  111. package/content/backend/limit.md +0 -23
  112. package/content/backend/middleware.md +0 -17
  113. package/content/backend/queue.md +0 -23
  114. package/content/backend/redis.md +0 -26
  115. package/content/backend/router.md +0 -23
  116. package/content/backend/schedule.md +0 -23
  117. package/content/backend/sql.md +0 -27
  118. package/content/backend/sse.md +0 -26
  119. package/content/backend/ws.md +0 -26
  120. package/content/capabilities/app-node.md +0 -21
  121. package/content/capabilities/data.md +0 -21
  122. package/content/capabilities/events.md +0 -21
  123. package/content/capabilities/hooks.md +0 -22
  124. package/content/capabilities/i18n.md +0 -21
  125. package/content/capabilities/popup.md +0 -21
  126. package/content/capabilities/render-only.md +0 -23
  127. package/content/capabilities/router.md +0 -22
  128. package/content/capabilities/self-id.md +0 -21
  129. package/content/capabilities/store.md +0 -21
  130. package/content/capabilities/theme.md +0 -21
  131. package/content/capabilities/two-phase.md +0 -21
  132. package/content/components/accordion.md +0 -50
  133. package/content/components/actionsheet.md +0 -46
  134. package/content/components/affix.md +0 -51
  135. package/content/components/aichat.md +0 -57
  136. package/content/components/alert.md +0 -52
  137. package/content/components/alertgroup.md +0 -45
  138. package/content/components/anchor.md +0 -52
  139. package/content/components/app.md +0 -37
  140. package/content/components/approvalcard.md +0 -56
  141. package/content/components/appshell.md +0 -50
  142. package/content/components/aspectratio.md +0 -47
  143. package/content/components/authpage.md +0 -61
  144. package/content/components/autocomplete-v2.md +0 -40
  145. package/content/components/autocomplete.md +0 -56
  146. package/content/components/avatar.md +0 -51
  147. package/content/components/avatargroup.md +0 -47
  148. package/content/components/backtop.md +0 -53
  149. package/content/components/badge.md +0 -55
  150. package/content/components/breadcrumb.md +0 -49
  151. package/content/components/button.md +0 -63
  152. package/content/components/calendar-v2.md +0 -40
  153. package/content/components/calendar.md +0 -50
  154. package/content/components/card.md +0 -58
  155. package/content/components/carousel.md +0 -52
  156. package/content/components/cascader-v2.md +0 -39
  157. package/content/components/cascader.md +0 -54
  158. package/content/components/chart.md +0 -53
  159. package/content/components/chatinput.md +0 -63
  160. package/content/components/checkbox.md +0 -51
  161. package/content/components/checkboxgroup.md +0 -52
  162. package/content/components/citationcard.md +0 -48
  163. package/content/components/codeblock.md +0 -48
  164. package/content/components/codeeditor.md +0 -47
  165. package/content/components/collapse.md +0 -49
  166. package/content/components/colorpicker.md +0 -50
  167. package/content/components/command.md +0 -50
  168. package/content/components/confirm.md +0 -57
  169. package/content/components/contextmenu.md +0 -48
  170. package/content/components/copybutton.md +0 -51
  171. package/content/components/datepicker.md +0 -52
  172. package/content/components/descriptions-v2.md +0 -39
  173. package/content/components/descriptions.md +0 -52
  174. package/content/components/diffview-v2.md +0 -39
  175. package/content/components/diffview.md +0 -50
  176. package/content/components/divider.md +0 -48
  177. package/content/components/drawer.md +0 -55
  178. package/content/components/dropdown.md +0 -53
  179. package/content/components/editor.md +0 -49
  180. package/content/components/emptystate.md +0 -51
  181. package/content/components/exportcsv.md +0 -38
  182. package/content/components/field.md +0 -54
  183. package/content/components/filepreview-office.md +0 -37
  184. package/content/components/filepreview.md +0 -49
  185. package/content/components/filetree.md +0 -56
  186. package/content/components/fileupload-v2.md +0 -39
  187. package/content/components/fileupload.md +0 -57
  188. package/content/components/floatbutton.md +0 -52
  189. package/content/components/form-v2.md +0 -41
  190. package/content/components/form.md +0 -60
  191. package/content/components/grid.md +0 -51
  192. package/content/components/highlight-v2.md +0 -39
  193. package/content/components/highlight.md +0 -46
  194. package/content/components/hovercard.md +0 -51
  195. package/content/components/icon.md +0 -50
  196. package/content/components/imagecropper.md +0 -45
  197. package/content/components/img.md +0 -56
  198. package/content/components/infinitescroll-v2.md +0 -40
  199. package/content/components/infinitescroll.md +0 -54
  200. package/content/components/input.md +0 -65
  201. package/content/components/inputnumber.md +0 -58
  202. package/content/components/inview.md +0 -56
  203. package/content/components/jsonschemaform.md +0 -53
  204. package/content/components/jsonviewer-v2.md +0 -39
  205. package/content/components/jsonviewer.md +0 -49
  206. package/content/components/kanban.md +0 -46
  207. package/content/components/label.md +0 -48
  208. package/content/components/layout.md +0 -54
  209. package/content/components/layoutcontent.md +0 -43
  210. package/content/components/layoutheader.md +0 -43
  211. package/content/components/layoutsider.md +0 -43
  212. package/content/components/link.md +0 -52
  213. package/content/components/list.md +0 -44
  214. package/content/components/loading.md +0 -45
  215. package/content/components/logviewer-v2.md +0 -39
  216. package/content/components/logviewer.md +0 -53
  217. package/content/components/markdown.md +0 -51
  218. package/content/components/markdowneditor.md +0 -47
  219. package/content/components/math.md +0 -42
  220. package/content/components/mentions-v2.md +0 -39
  221. package/content/components/mentions.md +0 -52
  222. package/content/components/menu.md +0 -56
  223. package/content/components/menubar.md +0 -44
  224. package/content/components/messagebubble.md +0 -50
  225. package/content/components/modal.md +0 -59
  226. package/content/components/navmenu.md +0 -47
  227. package/content/components/notification.md +0 -51
  228. package/content/components/pageheader.md +0 -53
  229. package/content/components/pagination.md +0 -49
  230. package/content/components/paragraph.md +0 -45
  231. package/content/components/passwordinput.md +0 -57
  232. package/content/components/pininput-v2.md +0 -39
  233. package/content/components/pininput.md +0 -50
  234. package/content/components/pipeline.md +0 -49
  235. package/content/components/popconfirm.md +0 -58
  236. package/content/components/popover.md +0 -61
  237. package/content/components/progressbar.md +0 -50
  238. package/content/components/prompttemplate.md +0 -49
  239. package/content/components/qrcode.md +0 -50
  240. package/content/components/radiogroup.md +0 -53
  241. package/content/components/rate.md +0 -53
  242. package/content/components/reasoningblock.md +0 -47
  243. package/content/components/relationgraph.md +0 -52
  244. package/content/components/resizable.md +0 -53
  245. package/content/components/result.md +0 -49
  246. package/content/components/scrollbar.md +0 -49
  247. package/content/components/searchinput.md +0 -51
  248. package/content/components/segmentedcontrol.md +0 -59
  249. package/content/components/select-searchable.md +0 -47
  250. package/content/components/select.md +0 -66
  251. package/content/components/sessionlist.md +0 -52
  252. package/content/components/sheetgrid.md +0 -44
  253. package/content/components/skeleton.md +0 -55
  254. package/content/components/slidecanvas.md +0 -44
  255. package/content/components/slider.md +0 -62
  256. package/content/components/sortablelist.md +0 -39
  257. package/content/components/space.md +0 -52
  258. package/content/components/sparkline.md +0 -52
  259. package/content/components/statcard-countdown.md +0 -39
  260. package/content/components/statcard.md +0 -56
  261. package/content/components/steps.md +0 -48
  262. package/content/components/switch.md +0 -50
  263. package/content/components/tabbar.md +0 -45
  264. package/content/components/table-v2.md +0 -40
  265. package/content/components/table.md +0 -66
  266. package/content/components/tabs.md +0 -56
  267. package/content/components/tag.md +0 -51
  268. package/content/components/tagsinput-v2.md +0 -39
  269. package/content/components/tagsinput.md +0 -54
  270. package/content/components/text.md +0 -45
  271. package/content/components/textarea.md +0 -57
  272. package/content/components/themeswitch.md +0 -69
  273. package/content/components/timeline.md +0 -50
  274. package/content/components/title.md +0 -45
  275. package/content/components/toast.md +0 -52
  276. package/content/components/toggle-togglegroup.md +0 -52
  277. package/content/components/togglegroup.md +0 -47
  278. package/content/components/toolcallcard.md +0 -51
  279. package/content/components/tooltip.md +0 -50
  280. package/content/components/tour.md +0 -50
  281. package/content/components/transfer.md +0 -52
  282. package/content/components/tree-v2.md +0 -39
  283. package/content/components/tree.md +0 -59
  284. package/content/components/treeselect.md +0 -54
  285. package/content/components/typography.md +0 -51
  286. package/content/components/videoplayer.md +0 -52
  287. package/content/components/virtuallist.md +0 -52
  288. package/content/components/virtualtable-v2.md +0 -39
  289. package/content/components/virtualtable.md +0 -55
  290. package/content/components/watermark.md +0 -53
  291. package/content/components/wave.md +0 -43
  292. package/content/guides/ai-chat-family.md +0 -24
  293. package/content/guides/choose.md +0 -67
  294. package/content/guides/component-model.md +0 -32
  295. package/content/guides/component-standards.md +0 -123
  296. package/content/guides/components-guide.md +0 -813
  297. package/content/guides/custom-component.md +0 -321
  298. package/content/guides/data-guide.md +0 -281
  299. package/content/guides/file-preview-family.md +0 -18
  300. package/content/guides/frontend.md +0 -968
  301. package/content/guides/layout-choice.md +0 -64
  302. package/content/guides/layout-guide.md +0 -241
  303. package/content/guides/middleware.md +0 -459
  304. package/content/guides/mobile-guide.md +0 -105
  305. package/content/guides/page-building.md +0 -98
  306. package/content/guides/production.md +0 -37
  307. package/content/guides/quality.md +0 -60
  308. package/content/guides/realtime-guide.md +0 -296
  309. package/content/guides/render-only.md +0 -44
  310. package/content/guides/saas-guide.md +0 -253
  311. package/content/guides/server-guide.md +0 -359
  312. package/content/guides/start.md +0 -41
  313. package/content/guides/styling.md +0 -154
  314. package/content/guides/ui-dom-guide.md +0 -157
  315. package/content/index.json +0 -4344
  316. package/content/index.md +0 -181
  317. package/content/layout/align.md +0 -20
  318. package/content/layout/anchor.md +0 -19
  319. package/content/layout/app-shell.md +0 -23
  320. package/content/layout/border.md +0 -20
  321. package/content/layout/center.md +0 -19
  322. package/content/layout/cluster.md +0 -19
  323. package/content/layout/container.md +0 -19
  324. package/content/layout/fill.md +0 -19
  325. package/content/layout/grid.md +0 -19
  326. package/content/layout/hidden.md +0 -22
  327. package/content/layout/layer.md +0 -19
  328. package/content/layout/position.md +0 -22
  329. package/content/layout/row.md +0 -23
  330. package/content/layout/safe-area.md +0 -20
  331. package/content/layout/scroll.md +0 -21
  332. package/content/layout/spacing.md +0 -22
  333. package/content/layout/split.md +0 -19
  334. package/content/layout/stack.md +0 -19
  335. package/content/layout/surface.md +0 -23
  336. package/content/layout/text.md +0 -22
  337. package/content/patterns/app-shell.md +0 -34
  338. package/content/patterns/dashboard.md +0 -36
  339. package/content/patterns/data-screen.md +0 -30
  340. package/content/patterns/detail-page.md +0 -31
  341. package/content/patterns/docs.md +0 -34
  342. package/content/patterns/focus-task.md +0 -34
  343. package/content/patterns/landing.md +0 -35
  344. package/content/patterns/list-page.md +0 -32
  345. package/content/patterns/mobile.md +0 -31
  346. package/content/patterns/settings-page.md +0 -33
  347. package/content/patterns/workspace.md +0 -32
  348. package/dist/cli/content-sync.test.d.ts +0 -1
  349. package/dist/cli/docs-cli.test.d.ts +0 -1
  350. package/dist/cli/docs.d.ts +0 -2
  351. package/dist/cli/docs.mjs +0 -10961
  352. package/dist/client/vdom/core/build.d.ts +0 -36
  353. package/dist/client/vdom/core/diff/children.d.ts +0 -29
  354. package/dist/client/vdom/core/diff/index.d.ts +0 -22
  355. package/dist/client/vdom/core/diff/output.d.ts +0 -30
  356. package/dist/client/vdom/core/diff/same.d.ts +0 -22
  357. package/dist/client/vdom/core/serve.d.ts +0 -75
  358. package/dist/client/vdom/core/ssr/index.d.ts +0 -25
  359. package/examples/apps/admin/README.md +0 -23
  360. package/examples/apps/admin/api.ts +0 -27
  361. package/examples/apps/admin/app.tsx +0 -144
  362. package/examples/apps/admin/main.tsx +0 -8
  363. package/examples/apps/admin/server.ts +0 -37
  364. package/examples/apps/auth/README.md +0 -23
  365. package/examples/apps/auth/api.ts +0 -49
  366. package/examples/apps/auth/app.tsx +0 -137
  367. package/examples/apps/auth/main.tsx +0 -8
  368. package/examples/apps/auth/server.ts +0 -37
  369. package/examples/apps/multi/README.md +0 -23
  370. package/examples/apps/multi/app.tsx +0 -83
  371. package/examples/apps/multi/main.tsx +0 -8
  372. package/examples/apps/multi/server.ts +0 -33
  373. package/examples/apps/todo/README.md +0 -23
  374. package/examples/apps/todo/api.ts +0 -26
  375. package/examples/apps/todo/app.tsx +0 -128
  376. package/examples/apps/todo/main.tsx +0 -9
  377. package/examples/apps/todo/server.ts +0 -39
  378. package/examples/hello-world/README.md +0 -9
  379. package/examples/hello-world/client.ts +0 -14
  380. package/examples/hello-world/routes.tsx +0 -26
  381. package/examples/hello-world/server.ts +0 -46
  382. package/examples/patterns/AppShell.tsx +0 -224
  383. package/examples/patterns/Dashboard.tsx +0 -153
  384. package/examples/patterns/DataScreen.tsx +0 -104
  385. package/examples/patterns/DetailPage.tsx +0 -79
  386. package/examples/patterns/Docs.tsx +0 -105
  387. package/examples/patterns/FocusTask.tsx +0 -67
  388. package/examples/patterns/Landing.tsx +0 -90
  389. package/examples/patterns/ListPage.tsx +0 -77
  390. package/examples/patterns/Mobile.tsx +0 -154
  391. package/examples/patterns/SettingsPage.tsx +0 -98
  392. package/examples/patterns/SplitWorkspace.tsx +0 -113
@@ -0,0 +1,31 @@
1
+ /**
2
+ * Trie 遍历收集纯函数(ROUTER-CORE 波次 E 纯移动拆解——2027-10)
3
+ *
4
+ * 自 router.ts Router 类移出(零 this 依赖——树遍历纯函数)。
5
+ * - collectAll/collectAllWs:mount 展平负载(A1 wildcardValue 修复在案)
6
+ * - collectRoutes/collectWsRoutes:routes() 调试清单
7
+ */
8
+ import type { Handler, Middleware } from '../types.ts';
9
+ import type { WebSocketHandler } from './ws.ts';
10
+ import type { TrieNode } from '../../shared/router/trie.ts';
11
+ export type RouteValue = {
12
+ handlers: Map<string, Handler>;
13
+ middlewares: Map<string, Middleware[]>;
14
+ };
15
+ export type WsValue = {
16
+ handler: WebSocketHandler;
17
+ middlewares: Middleware[];
18
+ };
19
+ export declare function collectAll(node: TrieNode<RouteValue>, prefix?: string): Array<{
20
+ method: string;
21
+ path: string;
22
+ handler: Handler;
23
+ middlewares: Middleware[];
24
+ }>;
25
+ export declare function collectAllWs(node: TrieNode<WsValue>, prefix?: string): Array<{
26
+ path: string;
27
+ handler: WebSocketHandler;
28
+ middlewares: Middleware[];
29
+ }>;
30
+ export declare function collectRoutes(node: TrieNode<RouteValue>, prefix: string, result: string[]): void;
31
+ export declare function collectWsRoutes(node: TrieNode<WsValue>, prefix: string, result: string[]): void;
@@ -0,0 +1,11 @@
1
+ /** handler 链 throw 时调用(router.ts handleError——console.error 去重门) */
2
+ export declare function noteHandlerError(routeKey: string, e: unknown): void;
3
+ /** 该路由请求正常完成时调用(恢复清出——再错再报) */
4
+ export declare function clearHandlerError(routeKey: string): void;
5
+ /** 可观测面(诊断/仪表接入点——total + byRoute 快照) */
6
+ export declare function errorSnapshot(): {
7
+ total: number;
8
+ byRoute: Record<string, number>;
9
+ };
10
+ /** 测试复位 */
11
+ export declare function resetErrorCounter(): void;
@@ -0,0 +1,2 @@
1
+ import type { Hub } from './ws.ts';
2
+ export declare function createInMemoryHub(): Hub;
@@ -19,8 +19,14 @@ export declare class Router<T extends object = Context> {
19
19
  private _hasWildcard;
20
20
  private _hub?;
21
21
  private _wss?;
22
- private _ctxFields;
22
+ private _ctxRegistry;
23
23
  private _closeables;
24
+ private _pipeline?;
25
+ /** 路由内核 pipeline(惰性构建——闭包 this 读 globalMws/errorHandler 最新态) */
26
+ private get pipeline();
27
+ private buildPipeline;
28
+ /** 链组装(S6:routeMws 空常态复用 globalMws 引用——免每请求数组分配) */
29
+ private runWithChain;
24
30
  private get wss();
25
31
  private get hub();
26
32
  wsHub(hub: Hub): this;
@@ -66,16 +72,8 @@ export declare class Router<T extends object = Context> {
66
72
  private _route;
67
73
  private _routeImpl;
68
74
  private _mountRouter;
69
- private _collectAll;
70
- private _collectAllWs;
71
- private _collectRoutes;
72
- private _collectWsRoutes;
73
- private matchTrie;
74
- private _resolveMatch;
75
75
  private matchWsTrie;
76
- private handle;
77
76
  private handleError;
78
- private runChain;
79
77
  /**
80
78
  * Register a Closeable resource for graceful shutdown.
81
79
  * Used for modules created outside of middleware chain (e.g., sub-router state).
@@ -84,7 +82,12 @@ export declare class Router<T extends object = Context> {
84
82
  /**
85
83
  * Gracefully shut down all registered Closeable resources.
86
84
  * Called by serve() during shutdown.
85
+ *
86
+ * S2(SERVER-PERF-PLAN):WS 客户端 1001 握手先行——
87
+ * `server.closeAllConnections()` 对已升级的 WS 连接无效(实证:socket 残留、
88
+ * 客户端 close 事件永不触发)——必须经 `wss.clients` 优雅关闭。
87
89
  */
90
+ private _closed;
88
91
  close(): Promise<void>;
89
92
  private _checkMiddlewareMeta;
90
93
  }
@@ -14,6 +14,25 @@
14
14
  */
15
15
  import type { RespValue } from './redis/resp.ts';
16
16
  import type { RedisSubscriber } from './redis/subscriber.ts';
17
+ /**
18
+ * Pipeline 面(S5——SERVER-PERF-PLAN 波次 2):批量命令单次网络往返发送。
19
+ * 结果按命令顺序;错误命令对应位置为 Error 实例,其余命令不受影响。
20
+ *
21
+ * 结构化接口:RedisPipeline(真库)与 MemoryPipeline(内存)均满足。
22
+ * 与并发 command() 同连接交错安全(连接层 FIFO pending——按序匹配)。
23
+ */
24
+ export interface RedisPipelineFace {
25
+ set(key: string, value: string | number, ttl?: number): RedisPipelineFace;
26
+ get(key: string): RedisPipelineFace;
27
+ del(...keys: string[]): RedisPipelineFace;
28
+ incr(key: string): RedisPipelineFace;
29
+ expire(key: string, seconds: number): RedisPipelineFace;
30
+ ttl(key: string): RedisPipelineFace;
31
+ /** 任意命令透传(不加 keyPrefix——对齐 pool.command 语义) */
32
+ raw(name: string, ...args: (string | number)[]): RedisPipelineFace;
33
+ /** 一次往返执行所有命令;exec 后可复用(cmds 清空) */
34
+ exec(): Promise<RespValue[]>;
35
+ }
17
36
  /**
18
37
  * 连接池中的连接项(Postgres/Redis 通用):生命周期 + 健康状态。
19
38
  * 各库特化(PostgresPoolConnection / RedisPoolConnection)扩展执行能力。
@@ -70,6 +89,11 @@ export interface Redis {
70
89
  createConnection(): Promise<RedisPoolConnection>;
71
90
  /** 原始命令(RespValue 返回值——RESP 协议层;阻塞命令超时 resolve(null)) */
72
91
  command(name: string, ...args: (string | number)[]): Promise<RespValue>;
92
+ /**
93
+ * 创建 pipeline(S5):批量命令单次往返。池实现取轮询连接——
94
+ * 与并发命令交错安全(FIFO pending)。
95
+ */
96
+ pipeline(): Promise<RedisPipelineFace>;
73
97
  /** 创建订阅者(Pub/Sub,独立连接——messager 跨进程广播用) */
74
98
  createSubscriber(): RedisSubscriber;
75
99
  /** 发布消息到频道(订阅者回调触发) */
@@ -11,9 +11,8 @@
11
11
  * 未实现命令抛 ProtocolError('unsupported')——绝不静默降级。
12
12
  * ⚠️ 仅供开发/测试/单实例——多实例一致性与持久化由真实 Redis 承担(文档红线)。
13
13
  */
14
- import type { Redis, RedisPoolConnection } from './contracts.ts';
14
+ import type { Redis, RedisPoolConnection, RedisPipelineFace } from './contracts.ts';
15
15
  import type { RespValue } from './redis/resp.ts';
16
- import type { RedisPipeline } from './redis/pipeline.ts';
17
16
  import type { RedisSubscriber } from './redis/subscriber.ts';
18
17
  /** 内存订阅者(RedisSubscriber 形状兼容):psubscribe 模式匹配 + publish 派发 */
19
18
  declare class MemorySubscriber {
@@ -25,7 +24,7 @@ declare class MemorySubscriber {
25
24
  subscribe(channel: string, fn: (channel: string, message: string) => void): Promise<void>;
26
25
  psubscribe(pattern: string, fn: (channel: string, message: string) => void): Promise<void>;
27
26
  close(): Promise<void>;
28
- _dispatch(channel: string, message: string): void;
27
+ _dispatch(channel: string, message: string): boolean;
29
28
  }
30
29
  export declare class MemoryRedis implements Redis {
31
30
  private strings;
@@ -72,7 +71,7 @@ export declare class MemoryRedis implements Redis {
72
71
  zadd(key: string, score: number, member: string | number): Promise<number>;
73
72
  zrange(key: string, start: number, stop: number): Promise<string[]>;
74
73
  publish(channel: string, message: string | number): Promise<number>;
75
- pipeline(): Promise<RedisPipeline>;
74
+ pipeline(): Promise<RedisPipelineFace>;
76
75
  createSubscriber(): RedisSubscriber;
77
76
  /**
78
77
  * 独立连接视图:queue worker 的 stop 会 close 连接——视图 close 不关底层
@@ -1,7 +1,23 @@
1
1
  import type { Sql, Row, QueryResult } from './contracts.ts';
2
2
  import type { Query } from './query.ts';
3
+ /** 事务快照表条目(rows + 元数据副本——restore 需复活事务内 DROP 掉的表) */
4
+ export interface MemorySnapshotEntry {
5
+ rows: Row[];
6
+ nextId: number;
7
+ columns: string[];
8
+ columnTypes: Record<string, string>;
9
+ pk?: {
10
+ col: string;
11
+ defaultUuid: boolean;
12
+ };
13
+ uniques: string[];
14
+ defaultNow: string[];
15
+ }
16
+ export type MemorySnapshot = Map<string, MemorySnapshotEntry>;
3
17
  export declare class MemorySql {
4
18
  private tables;
19
+ /** 派生表 AST 缓存(同 innerSql 不重复 parse——执行路径热缓存) */
20
+ private derivedAstCache;
5
21
  /** 标签模板 → 参数化 SQL(values 顺序即 $1..$n) */
6
22
  tag(strings: TemplateStringsArray, values: unknown[]): Promise<Row[]>;
7
23
  unsafe(sql: string, params?: unknown[]): Promise<Row[]>;
@@ -19,10 +35,10 @@ export declare class MemorySql {
19
35
  getColumnType(table: string, col: string): string | undefined;
20
36
  /** PG 服务器 Parse:INSERT VALUES 列序 → 类型列表 */
21
37
  getColumnTypes(table: string): string[];
22
- /** 事务快照(服务器 ROLLBACK 撤销事务内写入——内存自动提交的对偶) */
23
- snapshot(): Map<string, Row[]>;
24
- /** 恢复快照(ROLLBACK)——rows 替换为快照副本(保留元数据/约束) */
25
- restore(snap: Map<string, Row[]>): void;
38
+ /** 事务快照(服务器 ROLLBACK 撤销事务内写入——内存自动提交的对偶;含元数据) */
39
+ snapshot(): MemorySnapshot;
40
+ /** 恢复快照(ROLLBACK)——全量还原(含复活事务内 DROP 掉的表);快照后新建的表清空 */
41
+ restore(snap: MemorySnapshot): void;
26
42
  /** DDL 执行(parser 产出 DdlQuery)——约束提取到表元数据 */
27
43
  private executeDdl;
28
44
  }
@@ -16,6 +16,8 @@ export declare class MemoryPostgresServer implements DBServer {
16
16
  private closed;
17
17
  private queryLog;
18
18
  private txSnap;
19
+ /** 存活连接(close 时全量销毁——server.close 只停 accept,不等存量连接) */
20
+ private sockets;
19
21
  /** 命名 prepared statement 缓存(客户端复用——同 sql 不发 Parse) */
20
22
  private statements;
21
23
  /** portal → statement 绑定(Bind 创建、Execute 按 portal 执行——客户端 portal 通常空名) */
@@ -10,6 +10,8 @@ export type WhereScalar = string | number | boolean | null;
10
10
  export interface ColOps {
11
11
  /** 列引用(非字面量):`{ 'u.email': { col: 'o.user_id' } }` → u.email = o.user_id */
12
12
  col?: string;
13
+ /** 等值(同列合并形态:scalar 进 ColOps——parser 同列 = 合并 / builder scalar×ops 合并产出) */
14
+ eq?: WhereScalar;
13
15
  gt?: WhereScalar;
14
16
  gte?: WhereScalar;
15
17
  lt?: WhereScalar;
@@ -24,6 +26,11 @@ export interface ColOps {
24
26
  between?: [WhereScalar, WhereScalar];
25
27
  }
26
28
  export type WhereField = WhereScalar | WhereScalar[] | RawSql | ColOps;
29
+ /**
30
+ * WHERE 表达式:列条件 AND 连接。
31
+ * 结构键:`or: WhereExpr[]`(OR 组——组间 AND)、`and: WhereExpr[]`(AND 组——
32
+ * where 合并不可对象级合并时包装——AND 语义不丢)。
33
+ */
27
34
  export interface WhereExpr {
28
35
  [col: string]: WhereField | WhereExpr[];
29
36
  }
@@ -186,4 +193,18 @@ export declare function compileUpdate(q: UpdateQuery): Compiled;
186
193
  export declare function compileDelete(q: DeleteQuery): Compiled;
187
194
  /** 统一编译入口 */
188
195
  export declare function compileQuery(q: Query): Compiled;
196
+ /**
197
+ * 同列条件对象级合并(AND 语义)。不可合并返回 null(调用方 and 包装):
198
+ * ColOps × ColOps → 不相交操作符键 spread({gt:15}+{lt:35} 并存)
199
+ * scalar × ColOps → { eq: scalar, ...ops }(eq 登记——编译/执行双端认识)
200
+ * 数组(IN)/ raw / scalar × scalar / 同键冲突 / null 标量 → null
201
+ */
202
+ export declare function mergeWhereField(prev: WhereField, next: WhereField): WhereField | null;
203
+ /**
204
+ * 向 WhereExpr 追加同列条件(AND 语义)。不可对象级合并 → and 包装
205
+ * (既有条件保留 + 新条件入 and 组——不覆盖不静默丢弃)。
206
+ */
207
+ export declare function addWhereCond(expr: WhereExpr, col: string, field: WhereField): void;
208
+ /** where 表达式合并(builder 链式追加——AND 语义,不覆盖) */
209
+ export declare function mergeWhere(prev: WhereExpr, next: WhereExpr): WhereExpr;
189
210
  export {};
@@ -12,8 +12,8 @@ export declare class MemoryRedisServer implements DBServer {
12
12
  url: string;
13
13
  private server;
14
14
  private engine;
15
- private sockets;
16
- private subChannels;
15
+ private conns;
16
+ /** BLPOP 等待者(全局队列——LPUSH 跨连接唤醒;owner 回溯连接清理) */
17
17
  private blpopWaiters;
18
18
  private nextId;
19
19
  private opts;
@@ -21,6 +21,8 @@ export declare class MemoryRedisServer implements DBServer {
21
21
  constructor(options?: RedisServerOptions);
22
22
  start(): Promise<void>;
23
23
  close(): Promise<void>;
24
+ /** 释放某连接全部 BLPOP waiter(resolve null → dispatch 返回 null → 跳过写) */
25
+ private releaseWaiters;
24
26
  /** 测试辅助:断开发送端 socket(模拟 CLIENT KILL / 网络中断) */
25
27
  killSocket(socketId: number): void;
26
28
  /** 测试辅助:当前连接数 */
@@ -19,5 +19,6 @@
19
19
  */
20
20
  import type { Query, WhereExpr } from './query.ts';
21
21
  export declare function parseSqlToAst(sql: string, params?: unknown[]): Query;
22
- /** WHERE 子句 → Query Language WhereExpr(OR 拆分 → AND 组合 → 条件) */
22
+ /** WHERE 子句 → Query Language WhereExpr(OR 拆分 → AND 组合 → 条件)
23
+ * 同列多条件走 addWhereCond(对象级合并 / and 包装——不覆盖不静默丢弃) */
23
24
  export declare function parseWhereToExpr(clause: string, params: unknown[], alias?: string): WhereExpr;
@@ -45,6 +45,8 @@ export interface EmailOptions {
45
45
  baseUrl?: string;
46
46
  };
47
47
  smtp?: SmtpConfig;
48
+ /** E3:resend 适配器 HTTP 超时 ms(SMTP 用 smtp.timeoutMs——默认 30s)。默认 10_000 */
49
+ timeoutMs?: number;
48
50
  }
49
51
  export interface EmailInjected {
50
52
  email: Mailer;
@@ -9,6 +9,8 @@ export type { WebSocketHandler } from './core/ws.ts';
9
9
  export type { WebSocket } from './types.ts';
10
10
  export { cors } from './middleware/cors.ts';
11
11
  export type { CORSOptions } from './middleware/cors.ts';
12
+ export { compress } from './middleware/compress.ts';
13
+ export type { CompressOptions } from './middleware/compress.ts';
12
14
  export { serveStatic } from './middleware/static.ts';
13
15
  export type { ServeStaticOptions } from './middleware/static.ts';
14
16
  export { rateLimit } from './middleware/rate-limit.ts';
@@ -20,9 +22,10 @@ export { sendSmtp } from './email/smtp.ts';
20
22
  export type { SmtpConfig } from './email/smtp.ts';
21
23
  export { userSystem } from './user/index.ts';
22
24
  export { hashPassword, verifyPassword } from './user/password.ts';
25
+ export { signToken, verifyToken, generateRefreshToken } from './user/token.ts';
23
26
  export { messager } from './messager/index.ts';
24
27
  export type { UserSystemOptions, UserInjected, AuthApi, RegisterInput } from './user/index.ts';
25
- export type { MessagerOptions, MessagerInjected, MessagerClient, MessagerSystem, Message, Conversation } from './messager/index.ts';
28
+ export type { MessagerOptions, MessagerInjected, MessagerClient, MessagerSystem, MessagerHandlerOptions, Message, Conversation } from './messager/index.ts';
26
29
  export { queue } from './queue/index.ts';
27
30
  export { scheduler } from './scheduler/index.ts';
28
31
  export type { QueueOptions, QueueClient, QueueInjected, QueueWorker, WorkerOptions, AddOptions, Job } from './queue/index.ts';