@aithe/aithe-ui 26.2.3 → 26.3.2

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 (620) hide show
  1. package/README.md +19 -11
  2. package/dist/apps/admin/app.js +12 -0
  3. package/dist/apps/admin/components/admin-app.js +83 -0
  4. package/dist/apps/admin/components/admin-layout.d.ts +0 -1
  5. package/dist/apps/admin/components/admin-layout.d.ts.map +1 -1
  6. package/dist/apps/admin/components/admin-layout.js +250 -0
  7. package/dist/apps/admin/datahub/auth.js +24 -0
  8. package/dist/apps/admin/datahub/dashboard.js +16 -0
  9. package/dist/apps/admin/datahub/index.js +42 -0
  10. package/dist/apps/admin/datahub/menu.js +16 -0
  11. package/dist/apps/admin/datahub/mock/auth.js +11 -0
  12. package/dist/apps/admin/datahub/mock/dashboard.js +10 -0
  13. package/dist/apps/admin/datahub/mock/menu.js +42 -0
  14. package/dist/apps/admin/i18n/de-DE.js +37 -0
  15. package/dist/apps/admin/i18n/en-US.js +37 -0
  16. package/dist/apps/admin/i18n/es-ES.js +38 -0
  17. package/dist/apps/admin/i18n/fr-FR.js +37 -0
  18. package/dist/apps/admin/i18n/index.js +27 -0
  19. package/dist/apps/admin/i18n/ja-JP.js +38 -0
  20. package/dist/apps/admin/i18n/ko-KR.js +37 -0
  21. package/dist/apps/admin/i18n/pt-BR.js +37 -0
  22. package/dist/apps/admin/i18n/zh-CN.js +37 -0
  23. package/dist/apps/admin/i18n/zh-HK.js +37 -0
  24. package/dist/apps/admin/i18n/zh-TW.js +37 -0
  25. package/dist/apps/admin/pages/dashboard-page.d.ts +1 -0
  26. package/dist/apps/admin/pages/dashboard-page.d.ts.map +1 -1
  27. package/dist/apps/admin/pages/dashboard-page.js +199 -0
  28. package/dist/apps/admin/pages/login-page.js +278 -0
  29. package/dist/apps/admin/pages/not-found-page.js +57 -0
  30. package/dist/apps/admin/pages/role-page.js +76 -0
  31. package/dist/apps/admin/pages/settings-page.js +95 -0
  32. package/dist/apps/admin/pages/user-page.js +76 -0
  33. package/dist/apps/admin/router/index.js +43 -0
  34. package/dist/apps/admin/standalone.js +1 -0
  35. package/dist/apps/admin/store/auth.js +42 -0
  36. package/dist/apps/api/app.js +82 -0
  37. package/dist/apps/api/demo-data.d.ts.map +1 -1
  38. package/dist/apps/api/demo-data.js +965 -0
  39. package/dist/apps/api/docs-viewer.js +684 -0
  40. package/dist/apps/api/i18n/de-DE.d.ts.map +1 -1
  41. package/dist/apps/api/i18n/de-DE.js +131 -0
  42. package/dist/apps/api/i18n/en-US.d.ts.map +1 -1
  43. package/dist/apps/api/i18n/en-US.js +141 -0
  44. package/dist/apps/api/i18n/es-ES.d.ts.map +1 -1
  45. package/dist/apps/api/i18n/es-ES.js +131 -0
  46. package/dist/apps/api/i18n/fr-FR.d.ts.map +1 -1
  47. package/dist/apps/api/i18n/fr-FR.js +131 -0
  48. package/dist/apps/api/i18n/index.js +27 -0
  49. package/dist/apps/api/i18n/ja-JP.d.ts.map +1 -1
  50. package/dist/apps/api/i18n/ja-JP.js +131 -0
  51. package/dist/apps/api/i18n/ko-KR.d.ts.map +1 -1
  52. package/dist/apps/api/i18n/ko-KR.js +131 -0
  53. package/dist/apps/api/i18n/pt-BR.d.ts.map +1 -1
  54. package/dist/apps/api/i18n/pt-BR.js +131 -0
  55. package/dist/apps/api/i18n/zh-CN.d.ts.map +1 -1
  56. package/dist/apps/api/i18n/zh-CN.js +141 -0
  57. package/dist/apps/api/i18n/zh-HK.d.ts.map +1 -1
  58. package/dist/apps/api/i18n/zh-HK.js +131 -0
  59. package/dist/apps/api/i18n/zh-TW.d.ts.map +1 -1
  60. package/dist/apps/api/i18n/zh-TW.js +131 -0
  61. package/dist/apps/api/pages/docs.d.ts.map +1 -1
  62. package/dist/apps/api/pages/docs.js +369 -0
  63. package/dist/apps/api/standalone.js +1 -0
  64. package/dist/apps/demo/app.d.ts.map +1 -1
  65. package/dist/apps/demo/app.js +275 -0
  66. package/dist/apps/demo/editor.d.ts.map +1 -1
  67. package/dist/apps/demo/editor.js +270 -0
  68. package/dist/apps/demo/helpers.js +7 -0
  69. package/dist/apps/demo/i18n/de-DE.d.ts.map +1 -1
  70. package/dist/apps/demo/i18n/de-DE.js +289 -0
  71. package/dist/apps/demo/i18n/en-US.d.ts.map +1 -1
  72. package/dist/apps/demo/i18n/en-US.js +301 -0
  73. package/dist/apps/demo/i18n/es-ES.d.ts.map +1 -1
  74. package/dist/apps/demo/i18n/es-ES.js +289 -0
  75. package/dist/apps/demo/i18n/fr-FR.d.ts.map +1 -1
  76. package/dist/apps/demo/i18n/fr-FR.js +289 -0
  77. package/dist/apps/demo/i18n/index.js +27 -0
  78. package/dist/apps/demo/i18n/ja-JP.d.ts.map +1 -1
  79. package/dist/apps/demo/i18n/ja-JP.js +289 -0
  80. package/dist/apps/demo/i18n/ko-KR.d.ts.map +1 -1
  81. package/dist/apps/demo/i18n/ko-KR.js +289 -0
  82. package/dist/apps/demo/i18n/pt-BR.d.ts.map +1 -1
  83. package/dist/apps/demo/i18n/pt-BR.js +289 -0
  84. package/dist/apps/demo/i18n/zh-CN.d.ts.map +1 -1
  85. package/dist/apps/demo/i18n/zh-CN.js +301 -0
  86. package/dist/apps/demo/i18n/zh-HK.d.ts.map +1 -1
  87. package/dist/apps/demo/i18n/zh-HK.js +289 -0
  88. package/dist/apps/demo/i18n/zh-TW.d.ts.map +1 -1
  89. package/dist/apps/demo/i18n/zh-TW.js +289 -0
  90. package/dist/apps/demo/pages/autoform.d.ts.map +1 -1
  91. package/dist/apps/demo/pages/autoform.js +422 -0
  92. package/dist/apps/demo/pages/autoview.d.ts +3 -0
  93. package/dist/apps/demo/pages/autoview.d.ts.map +1 -0
  94. package/dist/apps/demo/pages/autoview.js +310 -0
  95. package/dist/apps/demo/pages/basic.js +157 -0
  96. package/dist/apps/demo/pages/code.js +1088 -0
  97. package/dist/apps/demo/pages/container.js +42 -0
  98. package/dist/apps/demo/pages/dashboard.js +159 -0
  99. package/dist/apps/demo/pages/data.d.ts.map +1 -1
  100. package/dist/apps/demo/pages/data.js +327 -0
  101. package/dist/apps/demo/pages/display.d.ts.map +1 -1
  102. package/dist/apps/demo/pages/display.js +295 -0
  103. package/dist/apps/demo/pages/feedback.js +94 -0
  104. package/dist/apps/demo/pages/form.d.ts.map +1 -1
  105. package/dist/apps/demo/pages/form.js +119 -0
  106. package/dist/apps/demo/pages/layout.js +74 -0
  107. package/dist/apps/demo/pages/navigation.js +54 -0
  108. package/dist/apps/demo/pages/progress.js +42 -0
  109. package/dist/apps/demo/pages/theme.js +126 -0
  110. package/dist/apps/demo/standalone.js +1 -0
  111. package/dist/components/basic/AGENTS.md +1 -0
  112. package/dist/components/basic/avatar.js +168 -0
  113. package/dist/components/basic/badge.js +157 -0
  114. package/dist/components/basic/button-group.js +70 -0
  115. package/dist/components/basic/button.d.ts +2 -4
  116. package/dist/components/basic/button.d.ts.map +1 -1
  117. package/dist/components/basic/button.js +315 -0
  118. package/dist/components/basic/card.js +186 -0
  119. package/dist/components/basic/chip.js +103 -0
  120. package/dist/components/basic/divider.js +127 -0
  121. package/dist/components/basic/empty.js +72 -0
  122. package/dist/components/basic/icon.js +129 -0
  123. package/dist/components/basic/input.d.ts.map +1 -1
  124. package/dist/components/basic/input.js +314 -0
  125. package/dist/components/basic/tag.d.ts +7 -2
  126. package/dist/components/basic/tag.d.ts.map +1 -1
  127. package/dist/components/basic/tag.js +248 -0
  128. package/dist/components/basic/textarea.d.ts +0 -1
  129. package/dist/components/basic/textarea.d.ts.map +1 -1
  130. package/dist/components/basic/textarea.js +130 -0
  131. package/dist/components/container/callout.js +108 -0
  132. package/dist/components/container/details.js +117 -0
  133. package/dist/components/container/scroller.js +144 -0
  134. package/dist/components/container/split-panel.js +150 -0
  135. package/dist/components/data/AGENTS.md +1 -1
  136. package/dist/components/data/box-table.d.ts +53 -0
  137. package/dist/components/data/box-table.d.ts.map +1 -0
  138. package/dist/components/data/box-table.js +220 -0
  139. package/dist/components/data/dropdown.d.ts +8 -5
  140. package/dist/components/data/dropdown.d.ts.map +1 -1
  141. package/dist/components/data/dropdown.js +219 -0
  142. package/dist/components/data/metrics-group.js +180 -0
  143. package/dist/components/data/metrics.d.ts +11 -0
  144. package/dist/components/data/metrics.d.ts.map +1 -1
  145. package/dist/components/data/metrics.js +309 -0
  146. package/dist/components/data/pagination.js +119 -0
  147. package/dist/components/data/tab-pane.d.ts +58 -12
  148. package/dist/components/data/tab-pane.d.ts.map +1 -1
  149. package/dist/components/data/tab-pane.js +130 -0
  150. package/dist/components/data/table-column.d.ts +29 -5
  151. package/dist/components/data/table-column.d.ts.map +1 -1
  152. package/dist/components/data/table-column.js +123 -0
  153. package/dist/components/data/table.d.ts +134 -54
  154. package/dist/components/data/table.d.ts.map +1 -1
  155. package/dist/components/data/table.js +1210 -0
  156. package/dist/components/data/tabs.d.ts +60 -3
  157. package/dist/components/data/tabs.d.ts.map +1 -1
  158. package/dist/components/data/tabs.js +416 -0
  159. package/dist/components/data/timeline-item.js +127 -0
  160. package/dist/components/data/timeline.js +204 -0
  161. package/dist/components/data/tree-menu.d.ts +12 -2
  162. package/dist/components/data/tree-menu.d.ts.map +1 -1
  163. package/dist/components/data/tree-menu.js +482 -0
  164. package/dist/components/data/tree.js +269 -0
  165. package/dist/components/display/AGENTS.md +5 -2
  166. package/dist/components/display/animated-image.js +98 -0
  167. package/dist/components/display/autoview.d.ts +139 -0
  168. package/dist/components/display/autoview.d.ts.map +1 -0
  169. package/dist/components/display/autoview.js +460 -0
  170. package/dist/components/display/brief-box.d.ts +42 -0
  171. package/dist/components/display/brief-box.d.ts.map +1 -0
  172. package/dist/components/display/brief-box.js +117 -0
  173. package/dist/components/display/carousel.js +223 -0
  174. package/dist/components/display/code-editor.d.ts.map +1 -1
  175. package/dist/components/display/code-editor.js +976 -0
  176. package/dist/components/display/comparison.js +132 -0
  177. package/dist/components/display/desc-item.d.ts +48 -0
  178. package/dist/components/display/desc-item.d.ts.map +1 -0
  179. package/dist/components/display/desc-item.js +150 -0
  180. package/dist/components/display/desc.d.ts +68 -0
  181. package/dist/components/display/desc.d.ts.map +1 -0
  182. package/dist/components/display/desc.js +405 -0
  183. package/dist/components/display/detail-box.d.ts +51 -0
  184. package/dist/components/display/detail-box.d.ts.map +1 -0
  185. package/dist/components/display/detail-box.js +157 -0
  186. package/dist/components/display/label.js +166 -0
  187. package/dist/components/display/markdown-editor.js +319 -0
  188. package/dist/components/display/markdown.d.ts.map +1 -1
  189. package/dist/components/display/markdown.js +193 -0
  190. package/dist/components/display/mini-box.d.ts +31 -0
  191. package/dist/components/display/mini-box.d.ts.map +1 -0
  192. package/dist/components/display/mini-box.js +137 -0
  193. package/dist/components/display/profile.d.ts +18 -0
  194. package/dist/components/display/profile.d.ts.map +1 -0
  195. package/dist/components/display/profile.js +164 -0
  196. package/dist/components/feedback/AGENTS.md +1 -0
  197. package/dist/components/feedback/alert.js +150 -0
  198. package/dist/components/feedback/dialog.js +228 -0
  199. package/dist/components/feedback/drawer.d.ts.map +1 -1
  200. package/dist/components/feedback/drawer.js +338 -0
  201. package/dist/components/feedback/loading.js +130 -0
  202. package/dist/components/feedback/modal.d.ts.map +1 -1
  203. package/dist/components/feedback/modal.js +303 -0
  204. package/dist/components/feedback/notification.js +170 -0
  205. package/dist/components/feedback/popover.d.ts +1 -1
  206. package/dist/components/feedback/popover.js +124 -0
  207. package/dist/components/feedback/toast.js +142 -0
  208. package/dist/components/feedback/tooltip.d.ts +1 -1
  209. package/dist/components/feedback/tooltip.js +153 -0
  210. package/dist/components/form/AGENTS.md +4 -0
  211. package/dist/components/form/autoform-item.d.ts +6 -0
  212. package/dist/components/form/autoform-item.d.ts.map +1 -1
  213. package/dist/components/form/autoform-item.js +791 -0
  214. package/dist/components/form/autoform.d.ts +15 -5
  215. package/dist/components/form/autoform.d.ts.map +1 -1
  216. package/dist/components/form/autoform.js +303 -0
  217. package/dist/components/form/checkbox-group.js +118 -0
  218. package/dist/components/form/checkbox.js +123 -0
  219. package/dist/components/form/color-picker.js +148 -0
  220. package/dist/components/form/combobox.d.ts +4 -0
  221. package/dist/components/form/combobox.d.ts.map +1 -1
  222. package/dist/components/form/combobox.js +325 -0
  223. package/dist/components/form/date-picker.js +123 -0
  224. package/dist/components/form/form-item.d.ts.map +1 -1
  225. package/dist/components/form/form-item.js +141 -0
  226. package/dist/components/form/form.js +94 -0
  227. package/dist/components/form/radio-group.js +106 -0
  228. package/dist/components/form/radio.js +110 -0
  229. package/dist/components/form/rate.js +116 -0
  230. package/dist/components/form/select.d.ts +5 -1
  231. package/dist/components/form/select.d.ts.map +1 -1
  232. package/dist/components/form/select.js +539 -0
  233. package/dist/components/form/slider.js +134 -0
  234. package/dist/components/form/switch.js +146 -0
  235. package/dist/components/form/time-picker.js +92 -0
  236. package/dist/components/form/transfer.js +273 -0
  237. package/dist/components/form/upload.js +138 -0
  238. package/dist/components/framework/body.js +333 -0
  239. package/dist/components/framework/dashboard-panel.js +519 -0
  240. package/dist/components/framework/dashboard.d.ts.map +1 -1
  241. package/dist/components/framework/dashboard.js +1084 -0
  242. package/dist/components/framework/header.js +237 -0
  243. package/dist/components/framework/log-panel.js +637 -0
  244. package/dist/components/framework/page.js +151 -0
  245. package/dist/components/framework/sidebar.d.ts +4 -10
  246. package/dist/components/framework/sidebar.d.ts.map +1 -1
  247. package/dist/components/framework/sidebar.js +477 -0
  248. package/dist/components/layout/affix.js +137 -0
  249. package/dist/components/layout/col.js +103 -0
  250. package/dist/components/layout/collapse-item.js +165 -0
  251. package/dist/components/layout/collapse.js +108 -0
  252. package/dist/components/layout/container.js +92 -0
  253. package/dist/components/layout/flex.js +100 -0
  254. package/dist/components/layout/row.js +103 -0
  255. package/dist/components/layout/space.js +85 -0
  256. package/dist/components/navigation/back-top.js +127 -0
  257. package/dist/components/navigation/breadcrumb-item.js +108 -0
  258. package/dist/components/navigation/breadcrumb.js +70 -0
  259. package/dist/components/navigation/menu-item.js +181 -0
  260. package/dist/components/navigation/menu.js +126 -0
  261. package/dist/components/navigation/steps.js +183 -0
  262. package/dist/components/navigation/sub-menu.d.ts.map +1 -1
  263. package/dist/components/navigation/sub-menu.js +252 -0
  264. package/dist/components/progress/progress-bar.js +97 -0
  265. package/dist/components/progress/progress-ring.js +111 -0
  266. package/dist/components/progress/skeleton.js +108 -0
  267. package/dist/components/progress/spinner.js +129 -0
  268. package/dist/components/theme/locale-switch.js +241 -0
  269. package/dist/components/theme/shadow-picker.js +233 -0
  270. package/dist/components/theme/shape-picker.js +232 -0
  271. package/dist/components/theme/theme-picker.js +236 -0
  272. package/dist/components/theme/theme-preview.d.ts +1 -2
  273. package/dist/components/theme/theme-preview.d.ts.map +1 -1
  274. package/dist/components/theme/theme-preview.js +376 -0
  275. package/dist/components/theme/theme-switch.d.ts.map +1 -1
  276. package/dist/components/theme/theme-switch.js +318 -0
  277. package/dist/components/theme/typo-picker.js +219 -0
  278. package/dist/core/AGENTS.md +6 -1
  279. package/dist/core/aithe-element.d.ts +2 -2
  280. package/dist/core/aithe-element.js +135 -0
  281. package/dist/core/aithe-widget.js +30 -0
  282. package/dist/core/anchored-overlay.d.ts +3 -0
  283. package/dist/core/anchored-overlay.d.ts.map +1 -1
  284. package/dist/core/anchored-overlay.js +111 -0
  285. package/dist/core/autoform/autoform.js +79 -0
  286. package/dist/core/autoform/autoview.d.ts +86 -0
  287. package/dist/core/autoform/autoview.d.ts.map +1 -0
  288. package/dist/core/autoform/autoview.js +37 -0
  289. package/dist/core/autoform/condition.js +170 -0
  290. package/dist/core/autoform/index.d.ts +2 -0
  291. package/dist/core/autoform/index.d.ts.map +1 -1
  292. package/dist/core/autoform/index.js +9 -0
  293. package/dist/core/autoform/types.js +7 -0
  294. package/dist/core/datahub/__tests__/force-options.test.d.ts +8 -0
  295. package/dist/core/datahub/__tests__/force-options.test.d.ts.map +1 -0
  296. package/dist/core/datahub/__tests__/force-options.test.js +161 -0
  297. package/dist/core/datahub/config/strategy.d.ts +1 -1
  298. package/dist/core/datahub/config/strategy.d.ts.map +1 -1
  299. package/dist/core/datahub/config/strategy.js +50 -0
  300. package/dist/core/datahub/core/adapter/fetch-adapter.d.ts +1 -1
  301. package/dist/core/datahub/core/adapter/fetch-adapter.d.ts.map +1 -1
  302. package/dist/core/datahub/core/adapter/fetch-adapter.js +118 -0
  303. package/dist/core/datahub/core/adapter/index.js +7 -0
  304. package/dist/core/datahub/core/adapter/mock-adapter.d.ts +1 -1
  305. package/dist/core/datahub/core/adapter/mock-adapter.d.ts.map +1 -1
  306. package/dist/core/datahub/core/adapter/mock-adapter.js +58 -0
  307. package/dist/core/datahub/core/api-styles.d.ts +1 -1
  308. package/dist/core/datahub/core/api-styles.d.ts.map +1 -1
  309. package/dist/core/datahub/core/api-styles.js +136 -0
  310. package/dist/core/datahub/core/datahub-core.d.ts +53 -3
  311. package/dist/core/datahub/core/datahub-core.d.ts.map +1 -1
  312. package/dist/core/datahub/core/datahub-core.js +520 -0
  313. package/dist/core/datahub/core/index.js +7 -0
  314. package/dist/core/datahub/index.js +50 -0
  315. package/dist/core/datahub/types.d.ts +24 -0
  316. package/dist/core/datahub/types.d.ts.map +1 -1
  317. package/dist/core/datahub/types.js +31 -0
  318. package/dist/core/datahub/utils/cache.js +55 -0
  319. package/dist/core/datahub/utils/common.js +23 -0
  320. package/dist/core/datahub/utils/dedup.d.ts +1 -1
  321. package/dist/core/datahub/utils/dedup.d.ts.map +1 -1
  322. package/dist/core/datahub/utils/dedup.js +52 -0
  323. package/dist/core/datahub/utils/idempotent.js +61 -0
  324. package/dist/core/datahub/utils/is-query.js +53 -0
  325. package/dist/core/datahub/utils/loading.js +78 -0
  326. package/dist/core/filter/__tests__/index.test.d.ts +2 -0
  327. package/dist/core/filter/__tests__/index.test.d.ts.map +1 -0
  328. package/dist/core/filter/__tests__/index.test.js +230 -0
  329. package/dist/core/filter/builtins.d.ts +60 -0
  330. package/dist/core/filter/builtins.d.ts.map +1 -0
  331. package/dist/core/filter/builtins.js +172 -0
  332. package/dist/core/filter/factory.d.ts +54 -0
  333. package/dist/core/filter/factory.d.ts.map +1 -0
  334. package/dist/core/filter/factory.js +96 -0
  335. package/dist/core/filter/index.d.ts +11 -0
  336. package/dist/core/filter/index.d.ts.map +1 -0
  337. package/dist/core/filter/index.js +9 -0
  338. package/dist/core/filter/types.d.ts +12 -0
  339. package/dist/core/filter/types.d.ts.map +1 -0
  340. package/dist/core/filter/types.js +1 -0
  341. package/dist/core/floating.js +132 -0
  342. package/dist/core/highlight/index.js +43 -0
  343. package/dist/core/highlight/lang-bash.js +27 -0
  344. package/dist/core/highlight/lang-c.js +27 -0
  345. package/dist/core/highlight/lang-cmake.js +27 -0
  346. package/dist/core/highlight/lang-cpp.js +27 -0
  347. package/dist/core/highlight/lang-css.js +24 -0
  348. package/dist/core/highlight/lang-dart.js +27 -0
  349. package/dist/core/highlight/lang-dockerfile.js +16 -0
  350. package/dist/core/highlight/lang-fsharp.js +23 -0
  351. package/dist/core/highlight/lang-go.js +22 -0
  352. package/dist/core/highlight/lang-html.js +12 -0
  353. package/dist/core/highlight/lang-java.js +22 -0
  354. package/dist/core/highlight/lang-javascript.js +26 -0
  355. package/dist/core/highlight/lang-json.js +13 -0
  356. package/dist/core/highlight/lang-jsonline.js +13 -0
  357. package/dist/core/highlight/lang-jsx.js +30 -0
  358. package/dist/core/highlight/lang-kotlin.js +27 -0
  359. package/dist/core/highlight/lang-latex.js +22 -0
  360. package/dist/core/highlight/lang-lua.js +26 -0
  361. package/dist/core/highlight/lang-makefile.js +22 -0
  362. package/dist/core/highlight/lang-markdown.js +18 -0
  363. package/dist/core/highlight/lang-objectivec.js +24 -0
  364. package/dist/core/highlight/lang-perl.js +30 -0
  365. package/dist/core/highlight/lang-powershell.js +23 -0
  366. package/dist/core/highlight/lang-python.js +27 -0
  367. package/dist/core/highlight/lang-r.js +21 -0
  368. package/dist/core/highlight/lang-ruby.js +29 -0
  369. package/dist/core/highlight/lang-rust.js +24 -0
  370. package/dist/core/highlight/lang-scala.js +26 -0
  371. package/dist/core/highlight/lang-sql.js +21 -0
  372. package/dist/core/highlight/lang-svelte.js +27 -0
  373. package/dist/core/highlight/lang-swift.js +28 -0
  374. package/dist/core/highlight/lang-tsx.js +35 -0
  375. package/dist/core/highlight/lang-typescript.js +31 -0
  376. package/dist/core/highlight/lang-vue.js +29 -0
  377. package/dist/core/highlight/lang-wasm.js +22 -0
  378. package/dist/core/highlight/lang-xml.js +12 -0
  379. package/dist/core/highlight/lang-yaml.js +14 -0
  380. package/dist/core/highlight/registry.js +99 -0
  381. package/dist/core/logger/LoggerCore.js +626 -0
  382. package/dist/core/logger/index.js +10 -0
  383. package/dist/core/logger/types.js +29 -0
  384. package/dist/core/markdown/index.js +20 -0
  385. package/dist/core/markdown/parser.d.ts +2 -0
  386. package/dist/core/markdown/parser.d.ts.map +1 -1
  387. package/dist/core/markdown/parser.js +376 -0
  388. package/dist/core/markdown/plugins.d.ts +2 -1
  389. package/dist/core/markdown/plugins.d.ts.map +1 -1
  390. package/dist/core/markdown/plugins.js +755 -0
  391. package/dist/core/markdown/types.d.ts +5 -0
  392. package/dist/core/markdown/types.d.ts.map +1 -1
  393. package/dist/core/markdown/types.js +7 -0
  394. package/dist/core/router/index.js +244 -0
  395. package/dist/core/styles.js +44 -0
  396. package/dist/core/types.d.ts +52 -3
  397. package/dist/core/types.d.ts.map +1 -1
  398. package/dist/core/types.js +1 -0
  399. package/dist/index.d.ts +9 -0
  400. package/dist/index.d.ts.map +1 -1
  401. package/dist/index.js +3695 -1622
  402. package/dist/index.js.map +1 -1
  403. package/dist/index.umd.js +1844 -758
  404. package/dist/index.umd.js.map +1 -1
  405. package/dist/styles/aithe-ui.d.ts +23 -0
  406. package/dist/styles/aithe-ui.d.ts.map +1 -1
  407. package/dist/styles/aithe-ui.js +185 -0
  408. package/dist/styles/global.css.d.ts +1 -1
  409. package/dist/styles/global.css.d.ts.map +1 -1
  410. package/dist/styles/global.css.js +119 -0
  411. package/dist/styles/i18n/index.js +206 -0
  412. package/dist/styles/i18n/locales/de-DE.d.ts.map +1 -1
  413. package/dist/styles/i18n/locales/de-DE.js +151 -0
  414. package/dist/styles/i18n/locales/en-US.d.ts.map +1 -1
  415. package/dist/styles/i18n/locales/en-US.js +160 -0
  416. package/dist/styles/i18n/locales/es-ES.d.ts.map +1 -1
  417. package/dist/styles/i18n/locales/es-ES.js +151 -0
  418. package/dist/styles/i18n/locales/fr-FR.d.ts.map +1 -1
  419. package/dist/styles/i18n/locales/fr-FR.js +151 -0
  420. package/dist/styles/i18n/locales/index.js +14 -0
  421. package/dist/styles/i18n/locales/ja-JP.d.ts.map +1 -1
  422. package/dist/styles/i18n/locales/ja-JP.js +151 -0
  423. package/dist/styles/i18n/locales/ko-KR.d.ts.map +1 -1
  424. package/dist/styles/i18n/locales/ko-KR.js +151 -0
  425. package/dist/styles/i18n/locales/pt-BR.d.ts.map +1 -1
  426. package/dist/styles/i18n/locales/pt-BR.js +151 -0
  427. package/dist/styles/i18n/locales/zh-CN.d.ts.map +1 -1
  428. package/dist/styles/i18n/locales/zh-CN.js +160 -0
  429. package/dist/styles/i18n/locales/zh-HK.d.ts.map +1 -1
  430. package/dist/styles/i18n/locales/zh-HK.js +151 -0
  431. package/dist/styles/i18n/locales/zh-TW.d.ts.map +1 -1
  432. package/dist/styles/i18n/locales/zh-TW.js +151 -0
  433. package/dist/styles/layout/index.js +88 -0
  434. package/dist/styles/mixins.js +43 -0
  435. package/dist/styles/shadow/cyber.js +19 -0
  436. package/dist/styles/shadow/deep.js +19 -0
  437. package/dist/styles/shadow/diffuse.js +19 -0
  438. package/dist/styles/shadow/flat.js +19 -0
  439. package/dist/styles/shadow/glassmorphism.js +19 -0
  440. package/dist/styles/shadow/index.js +129 -0
  441. package/dist/styles/shadow/neumorphism.js +21 -0
  442. package/dist/styles/shadow/retro.js +19 -0
  443. package/dist/styles/shadow/sharp-business.js +19 -0
  444. package/dist/styles/shadow/skeuomorphic.js +21 -0
  445. package/dist/styles/shape/chamfer.js +19 -0
  446. package/dist/styles/shape/circle.js +19 -0
  447. package/dist/styles/shape/index.js +174 -0
  448. package/dist/styles/shape/organic.js +19 -0
  449. package/dist/styles/shape/pill.js +19 -0
  450. package/dist/styles/shape/rounded.js +21 -0
  451. package/dist/styles/shape/rounder.js +19 -0
  452. package/dist/styles/shape/sharp.js +19 -0
  453. package/dist/styles/shape/smooth.js +19 -0
  454. package/dist/styles/theme/aliyun.d.ts +1 -1
  455. package/dist/styles/theme/aliyun.d.ts.map +1 -1
  456. package/dist/styles/theme/aliyun.js +102 -0
  457. package/dist/styles/theme/amber.d.ts +1 -1
  458. package/dist/styles/theme/amber.d.ts.map +1 -1
  459. package/dist/styles/theme/amber.js +101 -0
  460. package/dist/styles/theme/blue.d.ts +1 -1
  461. package/dist/styles/theme/blue.d.ts.map +1 -1
  462. package/dist/styles/theme/blue.js +101 -0
  463. package/dist/styles/theme/charcoal.d.ts +1 -1
  464. package/dist/styles/theme/charcoal.d.ts.map +1 -1
  465. package/dist/styles/theme/charcoal.js +106 -0
  466. package/dist/styles/theme/cyan.d.ts +1 -1
  467. package/dist/styles/theme/cyan.d.ts.map +1 -1
  468. package/dist/styles/theme/cyan.js +96 -0
  469. package/dist/styles/theme/dark.d.ts +1 -1
  470. package/dist/styles/theme/dark.d.ts.map +1 -1
  471. package/dist/styles/theme/dark.js +106 -0
  472. package/dist/styles/theme/ebony.d.ts +1 -1
  473. package/dist/styles/theme/ebony.d.ts.map +1 -1
  474. package/dist/styles/theme/ebony.js +106 -0
  475. package/dist/styles/theme/festive.d.ts +1 -1
  476. package/dist/styles/theme/festive.d.ts.map +1 -1
  477. package/dist/styles/theme/festive.js +101 -0
  478. package/dist/styles/theme/graphite.d.ts +1 -1
  479. package/dist/styles/theme/graphite.d.ts.map +1 -1
  480. package/dist/styles/theme/graphite.js +106 -0
  481. package/dist/styles/theme/gray.d.ts +1 -1
  482. package/dist/styles/theme/gray.d.ts.map +1 -1
  483. package/dist/styles/theme/gray.js +101 -0
  484. package/dist/styles/theme/huawei.d.ts +1 -1
  485. package/dist/styles/theme/huawei.d.ts.map +1 -1
  486. package/dist/styles/theme/huawei.js +102 -0
  487. package/dist/styles/theme/index.d.ts +1 -1
  488. package/dist/styles/theme/index.d.ts.map +1 -1
  489. package/dist/styles/theme/index.js +276 -0
  490. package/dist/styles/theme/indigo.d.ts +1 -1
  491. package/dist/styles/theme/indigo.d.ts.map +1 -1
  492. package/dist/styles/theme/indigo.js +101 -0
  493. package/dist/styles/theme/ink.d.ts +1 -1
  494. package/dist/styles/theme/ink.d.ts.map +1 -1
  495. package/dist/styles/theme/ink.js +106 -0
  496. package/dist/styles/theme/light.d.ts +1 -1
  497. package/dist/styles/theme/light.d.ts.map +1 -1
  498. package/dist/styles/theme/light.js +102 -0
  499. package/dist/styles/theme/midnight.d.ts +1 -1
  500. package/dist/styles/theme/midnight.d.ts.map +1 -1
  501. package/dist/styles/theme/midnight.js +106 -0
  502. package/dist/styles/theme/navy.d.ts +1 -1
  503. package/dist/styles/theme/navy.d.ts.map +1 -1
  504. package/dist/styles/theme/navy.js +106 -0
  505. package/dist/styles/theme/obsidian.d.ts +1 -1
  506. package/dist/styles/theme/obsidian.d.ts.map +1 -1
  507. package/dist/styles/theme/obsidian.js +106 -0
  508. package/dist/styles/theme/onyx.d.ts +1 -1
  509. package/dist/styles/theme/onyx.d.ts.map +1 -1
  510. package/dist/styles/theme/onyx.js +106 -0
  511. package/dist/styles/theme/orange.d.ts +1 -1
  512. package/dist/styles/theme/orange.d.ts.map +1 -1
  513. package/dist/styles/theme/orange.js +101 -0
  514. package/dist/styles/theme/pink.d.ts +1 -1
  515. package/dist/styles/theme/pink.d.ts.map +1 -1
  516. package/dist/styles/theme/pink.js +101 -0
  517. package/dist/styles/theme/purple.d.ts +1 -1
  518. package/dist/styles/theme/purple.d.ts.map +1 -1
  519. package/dist/styles/theme/purple.js +101 -0
  520. package/dist/styles/theme/raisin.d.ts +1 -1
  521. package/dist/styles/theme/raisin.d.ts.map +1 -1
  522. package/dist/styles/theme/raisin.js +106 -0
  523. package/dist/styles/theme/slate.d.ts +1 -1
  524. package/dist/styles/theme/slate.d.ts.map +1 -1
  525. package/dist/styles/theme/slate.js +106 -0
  526. package/dist/styles/theme/teal.d.ts +1 -1
  527. package/dist/styles/theme/teal.d.ts.map +1 -1
  528. package/dist/styles/theme/teal.js +101 -0
  529. package/dist/styles/theme/tianyi.d.ts +1 -1
  530. package/dist/styles/theme/tianyi.d.ts.map +1 -1
  531. package/dist/styles/theme/tianyi.js +102 -0
  532. package/dist/styles/types.js +1 -0
  533. package/dist/styles/typo/business.js +34 -0
  534. package/dist/styles/typo/compact.js +34 -0
  535. package/dist/styles/typo/index.js +99 -0
  536. package/dist/styles/typo/luxury.js +34 -0
  537. package/dist/styles/typo/minimal.js +34 -0
  538. package/dist/types/index.js +2 -0
  539. package/dist/utils/dom.js +51 -0
  540. package/dist/utils/events.js +32 -0
  541. package/dist/utils/icon.js +176 -0
  542. package/dist/utils/index.js +4 -0
  543. package/dist/utils/utils.d.ts +5 -5
  544. package/dist/utils/utils.js +89 -0
  545. package/dist/utils/validation.js +52 -0
  546. package/docs/api/basic/button.md +9 -6
  547. package/docs/api/basic/tag.md +24 -17
  548. package/docs/api/data/box-table.md +73 -0
  549. package/docs/api/data/dropdown.md +3 -2
  550. package/docs/api/data/metrics.md +2 -0
  551. package/docs/api/data/table-column.md +37 -23
  552. package/docs/api/data/table.md +158 -44
  553. package/docs/api/data/tabs.md +46 -1
  554. package/docs/api/data/tree-menu.md +55 -2
  555. package/docs/api/display/autoview.md +277 -0
  556. package/docs/api/display/box.md +66 -0
  557. package/docs/api/display/brief-box.md +73 -0
  558. package/docs/api/display/desc-item.md +57 -0
  559. package/docs/api/display/desc.md +246 -0
  560. package/docs/api/display/detail-box.md +75 -0
  561. package/docs/api/display/mini-box.md +100 -0
  562. package/docs/api/display/profile.md +92 -0
  563. package/docs/api/feedback/popover.md +10 -10
  564. package/docs/api/feedback/tooltip.md +14 -14
  565. package/docs/api/form/autoform-item.md +115 -0
  566. package/docs/api/form/autoform.md +7 -3
  567. package/docs/api/form/combobox.md +27 -7
  568. package/docs/api/form/select.md +50 -28
  569. package/docs/api/framework/log-panel.md +46 -0
  570. package/docs/api/framework/sidebar.md +3 -2
  571. package/docs/api/summary.md +46 -35
  572. package/docs/api/theme/theme-switch.md +1 -1
  573. package/docs/autoform.md +14 -33
  574. package/docs/changelog/CHANGELOG.md +155 -0
  575. package/docs/changelog/VERSION_26.3.1.md +966 -0
  576. package/docs/changelog/VERSION_26.3.2.md +852 -0
  577. package/docs/datahub.md +4 -1
  578. package/docs/filter.md +332 -0
  579. package/docs/framework-integration.md +2 -2
  580. package/docs/guide.md +72 -6
  581. package/docs/i18n.md +2 -4
  582. package/docs/issue/26.3.1/issue_26.3.1.0.md +84 -0
  583. package/docs/issue/26.3.1/issue_26.3.1.1.md +72 -0
  584. package/docs/issue/26.3.1/issue_26.3.1.2.md +75 -0
  585. package/docs/issue/26.3.1/issue_26.3.1.3.md +78 -0
  586. package/docs/issue/26.3.1/issue_26.3.1.4.md +113 -0
  587. package/docs/issue/26.3.1/issue_26.3.1.5.md +142 -0
  588. package/docs/issue/26.3.1/issue_26.3.1.6.md +100 -0
  589. package/docs/issue/26.3.1/issue_26.3.1.7.md +78 -0
  590. package/docs/issue/26.3.2/issue_26.3.2.1.md +46 -0
  591. package/docs/issue/26.3.2/issue_26.3.2.2.md +82 -0
  592. package/docs/issue/26.3.2/issue_26.3.2.3.md +57 -0
  593. package/docs/issue/26.3.2/issue_26.3.2.4.md +43 -0
  594. package/docs/issue/AGENTS.md +24 -3
  595. package/docs/markdown.md +2 -2
  596. package/docs/quickstart.md +5 -5
  597. package/docs/theming.md +5 -4
  598. package/package.json +5 -2
  599. package/dist/components/navigation/dropdown.d.ts +0 -56
  600. package/dist/components/navigation/dropdown.d.ts.map +0 -1
  601. /package/docs/issue/{issue_26.2.2.1.md → 26.2.2/issue_26.2.2.1.md} +0 -0
  602. /package/docs/issue/{issue_26.2.2.2.md → 26.2.2/issue_26.2.2.2.md} +0 -0
  603. /package/docs/issue/{issue_26.2.2.3.md → 26.2.2/issue_26.2.2.3.md} +0 -0
  604. /package/docs/issue/{issue_26.2.2.4.md → 26.2.2/issue_26.2.2.4.md} +0 -0
  605. /package/docs/issue/{issue_26.2.3.1.md → 26.2.3/issue_26.2.3.1.md} +0 -0
  606. /package/docs/issue/{issue_26.2.3.10.md → 26.2.3/issue_26.2.3.10.md} +0 -0
  607. /package/docs/issue/{issue_26.2.3.11.md → 26.2.3/issue_26.2.3.11.md} +0 -0
  608. /package/docs/issue/{issue_26.2.3.12.md → 26.2.3/issue_26.2.3.12.md} +0 -0
  609. /package/docs/issue/{issue_26.2.3.13.md → 26.2.3/issue_26.2.3.13.md} +0 -0
  610. /package/docs/issue/{issue_26.2.3.14.md → 26.2.3/issue_26.2.3.14.md} +0 -0
  611. /package/docs/issue/{issue_26.2.3.15.md → 26.2.3/issue_26.2.3.15.md} +0 -0
  612. /package/docs/issue/{issue_26.2.3.16.md → 26.2.3/issue_26.2.3.16.md} +0 -0
  613. /package/docs/issue/{issue_26.2.3.2.md → 26.2.3/issue_26.2.3.2.md} +0 -0
  614. /package/docs/issue/{issue_26.2.3.3.md → 26.2.3/issue_26.2.3.3.md} +0 -0
  615. /package/docs/issue/{issue_26.2.3.4.md → 26.2.3/issue_26.2.3.4.md} +0 -0
  616. /package/docs/issue/{issue_26.2.3.5.md → 26.2.3/issue_26.2.3.5.md} +0 -0
  617. /package/docs/issue/{issue_26.2.3.6.md → 26.2.3/issue_26.2.3.6.md} +0 -0
  618. /package/docs/issue/{issue_26.2.3.7.md → 26.2.3/issue_26.2.3.7.md} +0 -0
  619. /package/docs/issue/{issue_26.2.3.8.md → 26.2.3/issue_26.2.3.8.md} +0 -0
  620. /package/docs/issue/{issue_26.2.3.9.md → 26.2.3/issue_26.2.3.9.md} +0 -0
@@ -0,0 +1,170 @@
1
+ /**
2
+ * @file Form condition expression parser and evaluator / 表单条件表达式解析与求值
3
+ * @description Parses condition expressions like "field === 'value' || field2 > 10"
4
+ * into an AST and evaluates them against a values map.
5
+ * 将条件表达式(如 "field === 'value' || field2 > 10")解析为 AST 并基于值映射求值。
6
+ */
7
+ import { safeStringify } from '../../utils/utils';
8
+ const TRUTHY_STRINGS = new Set(['true', '1', 'yes', 'on']);
9
+ const FALSY_STRINGS = new Set(['false', '0', 'no', 'off', '', 'null', 'undefined']);
10
+ /**
11
+ * Form condition expression parser and evaluator.
12
+ * 表单条件表达式解析与求值器。
13
+ * @description Parses condition expressions like "field === 'value' || field2 > 10"
14
+ * into an AST and evaluates them against a values map.
15
+ * Supports comparison operators (===, !==, >, >=, <, <=), logical AND (&&) and OR (||),
16
+ * nested parentheses, and automatic type coercion for comparison.
17
+ * 将条件表达式(如 "field === 'value' || field2 > 10")解析为 AST 并基于值映射求值。
18
+ * 支持比较运算符、逻辑与/或、嵌套括号及自动类型转换。
19
+ */
20
+ export class FormCondition {
21
+ /**
22
+ * Evaluate a condition expression against form values.
23
+ * 对条件表达式进行求值。
24
+ * @param condition - 条件表达式字符串 / Condition expression string
25
+ * @param values - 当前表单字段值映射 / Current form field values map
26
+ * @returns 求值结果,条件为空时返回 true / Evaluation result, returns true if condition is empty
27
+ */
28
+ static evaluate(condition, values) {
29
+ const node = FormCondition.parse(condition);
30
+ if (!node)
31
+ return true;
32
+ return FormCondition.evaluateNode(node, values);
33
+ }
34
+ /**
35
+ * Parse a condition expression string into an AST.
36
+ * 将条件表达式字符串解析为 AST。
37
+ * @param expr - 表达式字符串 / Expression string
38
+ * @returns AST 根节点,空字符串返回 null / Root AST node, or null for empty string
39
+ */
40
+ static parse(expr) {
41
+ const trimmed = expr.trim();
42
+ if (!trimmed)
43
+ return null;
44
+ const orParts = FormCondition.splitLogical(trimmed, '||');
45
+ if (orParts.length > 1) {
46
+ const children = orParts
47
+ .map((p) => FormCondition.parse(p))
48
+ .filter((n) => n !== null);
49
+ return children.length > 0 ? { kind: 'or', children } : null;
50
+ }
51
+ const andParts = FormCondition.splitLogical(trimmed, '&&');
52
+ if (andParts.length > 1) {
53
+ const children = andParts
54
+ .map((p) => FormCondition.parse(p))
55
+ .filter((n) => n !== null);
56
+ return children.length > 0 ? { kind: 'and', children } : null;
57
+ }
58
+ return FormCondition.parseSingleComparison(trimmed);
59
+ }
60
+ static evaluateNode(node, values) {
61
+ if (node.kind === 'comparison') {
62
+ const fieldValue = values[node.field] ?? '';
63
+ return FormCondition.compareValues(fieldValue, node.operator, node.value);
64
+ }
65
+ if (node.kind === 'and') {
66
+ return node.children.every((child) => FormCondition.evaluateNode(child, values));
67
+ }
68
+ if (node.kind === 'or') {
69
+ return node.children.some((child) => FormCondition.evaluateNode(child, values));
70
+ }
71
+ return false;
72
+ }
73
+ static toComparable(val) {
74
+ if (val === null || val === undefined)
75
+ return '';
76
+ if (typeof val === 'boolean')
77
+ return val;
78
+ if (typeof val === 'number')
79
+ return val;
80
+ const str = safeStringify(val);
81
+ if (TRUTHY_STRINGS.has(str))
82
+ return true;
83
+ if (FALSY_STRINGS.has(str))
84
+ return false;
85
+ const num = Number(str);
86
+ if (str !== '' && !Number.isNaN(num))
87
+ return num;
88
+ return str;
89
+ }
90
+ static compareValues(left, operator, right) {
91
+ const lv = FormCondition.toComparable(left);
92
+ const rv = FormCondition.toComparable(right);
93
+ switch (operator) {
94
+ case '===':
95
+ return lv === rv;
96
+ case '!==':
97
+ return lv !== rv;
98
+ case '>':
99
+ return typeof lv === 'number' && typeof rv === 'number' && lv > rv;
100
+ case '>=':
101
+ return typeof lv === 'number' && typeof rv === 'number' && lv >= rv;
102
+ case '<':
103
+ return typeof lv === 'number' && typeof rv === 'number' && lv < rv;
104
+ case '<=':
105
+ return typeof lv === 'number' && typeof rv === 'number' && lv <= rv;
106
+ default:
107
+ return false;
108
+ }
109
+ }
110
+ static parseLiteral(raw) {
111
+ const trimmed = raw.trim();
112
+ if (trimmed === 'true')
113
+ return true;
114
+ if (trimmed === 'false')
115
+ return false;
116
+ if (trimmed === 'null')
117
+ return null;
118
+ if (trimmed === 'undefined')
119
+ return undefined;
120
+ if (/^-?\d+(\.\d+)?$/.test(trimmed))
121
+ return Number(trimmed);
122
+ if ((trimmed.startsWith("'") && trimmed.endsWith("'")) ||
123
+ (trimmed.startsWith('"') && trimmed.endsWith('"'))) {
124
+ return trimmed.slice(1, -1);
125
+ }
126
+ return trimmed;
127
+ }
128
+ static parseSingleComparison(expr) {
129
+ const re = /^\s*([a-zA-Z_]\w*)\s*(===|!==|>=|<=|>|<)\s*(.+?)\s*$/;
130
+ const match = re.exec(expr);
131
+ if (!match?.[1] || !match?.[2] || match[3] === undefined)
132
+ return null;
133
+ return {
134
+ kind: 'comparison',
135
+ field: match[1],
136
+ operator: match[2],
137
+ value: FormCondition.parseLiteral(match[3]),
138
+ };
139
+ }
140
+ static splitLogical(expr, op) {
141
+ const parts = [];
142
+ let depth = 0;
143
+ let current = '';
144
+ let i = 0;
145
+ while (i < expr.length) {
146
+ if (expr[i] === '(') {
147
+ depth++;
148
+ current += expr[i];
149
+ i++;
150
+ }
151
+ else if (expr[i] === ')') {
152
+ depth--;
153
+ current += expr[i];
154
+ i++;
155
+ }
156
+ else if (depth === 0 && expr.slice(i, i + op.length) === op) {
157
+ parts.push(current);
158
+ current = '';
159
+ i += op.length;
160
+ }
161
+ else {
162
+ current += expr[i];
163
+ i++;
164
+ }
165
+ }
166
+ if (current.trim())
167
+ parts.push(current);
168
+ return parts;
169
+ }
170
+ }
@@ -8,4 +8,6 @@ export { FormRuleEngine, FormRegistry } from './autoform';
8
8
  export type { FormDependencyState, FormControlRenderer, FormControlContext, FormControlDefinition, } from './autoform';
9
9
  export { FormCondition } from './condition';
10
10
  export type { FormRule, FormRuleType, FormFieldConfig, FormItemOption } from './types';
11
+ export { ViewRegistry } from './autoview';
12
+ export type { ViewFieldConfig, ViewRenderContext, ViewRenderer, ViewControlDefinition, } from './autoview';
11
13
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/core/autoform/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,OAAO,EAAE,cAAc,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAC1D,YAAY,EACV,mBAAmB,EACnB,mBAAmB,EACnB,kBAAkB,EAClB,qBAAqB,GACtB,MAAM,YAAY,CAAC;AACpB,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAC5C,YAAY,EAAE,QAAQ,EAAE,YAAY,EAAE,eAAe,EAAE,cAAc,EAAE,MAAM,SAAS,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/core/autoform/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,OAAO,EAAE,cAAc,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAC1D,YAAY,EACV,mBAAmB,EACnB,mBAAmB,EACnB,kBAAkB,EAClB,qBAAqB,GACtB,MAAM,YAAY,CAAC;AACpB,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAC5C,YAAY,EAAE,QAAQ,EAAE,YAAY,EAAE,eAAe,EAAE,cAAc,EAAE,MAAM,SAAS,CAAC;AAEvF,OAAO,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAC1C,YAAY,EACV,eAAe,EACf,iBAAiB,EACjB,YAAY,EACZ,qBAAqB,GACtB,MAAM,YAAY,CAAC"}
@@ -0,0 +1,9 @@
1
+ /**
2
+ * @file Form module entry — unified exports / 表单模块入口 — 统一导出
3
+ * @description Re-exports all public APIs from the form module:
4
+ * FormRuleEngine, FormRegistry, FormCondition, and all related types.
5
+ * 重新导出表单模块的所有公开 API:规则引擎、控件注册表、条件解析器及相关类型。
6
+ */
7
+ export { FormRuleEngine, FormRegistry } from './autoform';
8
+ export { FormCondition } from './condition';
9
+ export { ViewRegistry } from './autoview';
@@ -0,0 +1,7 @@
1
+ /**
2
+ * @file Form module shared types / 表单模块共享类型定义
3
+ * @description Core type definitions for the form dependency rule engine, migrated from components/form
4
+ * to eliminate circular dependency between core and components.
5
+ * 表单依赖联动规则引擎核心类型定义,从 components/form 迁移至此,消除 core 与 components 之间的循环依赖。
6
+ */
7
+ export {};
@@ -0,0 +1,8 @@
1
+ /**
2
+ * @file DataHubCore forceDedup / forceCache 选项测试
3
+ * @description 验证当 URL 不以 query/list/get 结尾时,
4
+ * forceDedup 和 forceCache 选项能强制启用去重和缓存,
5
+ * 且不会被幂等守卫拦截。
6
+ */
7
+ export {};
8
+ //# sourceMappingURL=force-options.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"force-options.test.d.ts","sourceRoot":"","sources":["../../../../src/core/datahub/__tests__/force-options.test.ts"],"names":[],"mappings":"AAAA;;;;;GAKG"}
@@ -0,0 +1,161 @@
1
+ /**
2
+ * @file DataHubCore forceDedup / forceCache 选项测试
3
+ * @description 验证当 URL 不以 query/list/get 结尾时,
4
+ * forceDedup 和 forceCache 选项能强制启用去重和缓存,
5
+ * 且不会被幂等守卫拦截。
6
+ */
7
+ import { describe, it, expect, beforeEach } from 'vitest';
8
+ import { DataHubCore } from '../../datahub/core/datahub-core';
9
+ /** 构造一个可控的假适配器 / Build a controllable fake adapter */
10
+ function createFakeAdapter() {
11
+ const adapter = {
12
+ name: 'fake',
13
+ callCount: 0,
14
+ reset() {
15
+ this.callCount = 0;
16
+ },
17
+ async request(req) {
18
+ this.callCount++;
19
+ return { ok: true, status: 200, data: { url: req.url, n: this.callCount } };
20
+ },
21
+ };
22
+ return adapter;
23
+ }
24
+ /** 构造一个使用 raw APIStyle 的 DataHubCore(不做业务协议解析)/ Build a DataHubCore with raw APIStyle */
25
+ function createCore(adapter) {
26
+ const core = new DataHubCore({ defaultCacheTTL: 1000, defaultAdapter: adapter.name });
27
+ core.registerAdapter(adapter);
28
+ core.setAPIStyle('raw');
29
+ return core;
30
+ }
31
+ beforeEach(() => {
32
+ // 每个用例前清空全局缓存和去重记录,避免用例间相互干扰
33
+ // Clear global cache and dedup records before each case to avoid cross-test interference
34
+ });
35
+ describe('DataHubCore - forceDedup', () => {
36
+ it('非 query URL 默认走幂等守卫,并发第二个请求被拒绝', async () => {
37
+ const fake = createFakeAdapter();
38
+ const core = createCore(fake);
39
+ // /system/roles/viewer 结尾不是 query/list/get,默认判为 submit
40
+ const p1 = core.request('/system/roles/viewer', undefined, { method: 'GET' });
41
+ const p2 = core.request('/system/roles/viewer', undefined, { method: 'GET' });
42
+ // p2 应被幂等守卫拒绝
43
+ await expect(p2).rejects.toThrow(/duplicate submit/);
44
+ await p1;
45
+ expect(fake.callCount).toBe(1);
46
+ });
47
+ it('forceDedup: true 时,非 query URL 并发请求被去重,只发一次', async () => {
48
+ const fake = createFakeAdapter();
49
+ const core = createCore(fake);
50
+ core.clearDedup();
51
+ core.clearIdempotent();
52
+ const p1 = core.request('/system/roles/viewer', undefined, {
53
+ method: 'GET',
54
+ forceDedup: true,
55
+ });
56
+ const p2 = core.request('/system/roles/viewer', undefined, {
57
+ method: 'GET',
58
+ forceDedup: true,
59
+ });
60
+ const [r1, r2] = await Promise.all([p1, p2]);
61
+ // 两个调用共享同一结果,只发一次实际请求
62
+ expect(fake.callCount).toBe(1);
63
+ expect(r1).toEqual(r2);
64
+ });
65
+ it('forceDedup 不影响不同 URL 的请求', async () => {
66
+ const fake = createFakeAdapter();
67
+ const core = createCore(fake);
68
+ core.clearDedup();
69
+ core.clearIdempotent();
70
+ await Promise.all([
71
+ core.request('/system/roles/a', undefined, { method: 'GET', forceDedup: true }),
72
+ core.request('/system/roles/b', undefined, { method: 'GET', forceDedup: true }),
73
+ ]);
74
+ expect(fake.callCount).toBe(2);
75
+ });
76
+ });
77
+ describe('DataHubCore - forceCache', () => {
78
+ it('非 query URL 默认不缓存,两次请求发两次', async () => {
79
+ const fake = createFakeAdapter();
80
+ const core = createCore(fake);
81
+ core.clearCache();
82
+ core.clearIdempotent();
83
+ await core.request('/system/roles/viewer', undefined, { method: 'GET', skipIdempotent: true });
84
+ await core.request('/system/roles/viewer', undefined, { method: 'GET', skipIdempotent: true });
85
+ expect(fake.callCount).toBe(2);
86
+ });
87
+ it('forceCache: true 时,非 query URL 第二次请求命中缓存', async () => {
88
+ const fake = createFakeAdapter();
89
+ const core = createCore(fake);
90
+ core.clearCache();
91
+ core.clearIdempotent();
92
+ const r1 = await core.request('/system/roles/viewer', undefined, {
93
+ method: 'GET',
94
+ forceCache: true,
95
+ skipIdempotent: true,
96
+ });
97
+ const r2 = await core.request('/system/roles/viewer', undefined, {
98
+ method: 'GET',
99
+ forceCache: true,
100
+ skipIdempotent: true,
101
+ });
102
+ // 第二次命中缓存,只发一次实际请求
103
+ expect(fake.callCount).toBe(1);
104
+ expect(r1).toEqual(r2);
105
+ });
106
+ it('forceCache 配合 skipCache 时不命中缓存', async () => {
107
+ const fake = createFakeAdapter();
108
+ const core = createCore(fake);
109
+ core.clearCache();
110
+ core.clearIdempotent();
111
+ await core.request('/system/roles/viewer', undefined, {
112
+ method: 'GET',
113
+ forceCache: true,
114
+ skipIdempotent: true,
115
+ });
116
+ await core.request('/system/roles/viewer', undefined, {
117
+ method: 'GET',
118
+ forceCache: true,
119
+ skipCache: true,
120
+ skipIdempotent: true,
121
+ });
122
+ expect(fake.callCount).toBe(2);
123
+ });
124
+ });
125
+ describe('DataHubCore - forceDedup + forceCache 跳过幂等守卫', () => {
126
+ it('forceDedup 为 true 时,即使 URL 被判为 submit 也不会触发幂等守卫', async () => {
127
+ const fake = createFakeAdapter();
128
+ const core = createCore(fake);
129
+ core.clearDedup();
130
+ core.clearIdempotent();
131
+ // 串行两次请求(不并发),验证幂等守卫不会拦截第二次
132
+ await core.request('/system/roles/viewer', undefined, {
133
+ method: 'GET',
134
+ forceDedup: true,
135
+ });
136
+ // 第二次请求不应被幂等守卫拒绝(dedup 记录已清理,会重新发请求)
137
+ const r2 = await core.request('/system/roles/viewer', undefined, {
138
+ method: 'GET',
139
+ forceDedup: true,
140
+ });
141
+ expect(r2.ok).toBe(true);
142
+ expect(fake.callCount).toBe(2);
143
+ });
144
+ it('forceCache 为 true 时,即使 URL 被判为 submit 也不会触发幂等守卫', async () => {
145
+ const fake = createFakeAdapter();
146
+ const core = createCore(fake);
147
+ core.clearCache();
148
+ core.clearIdempotent();
149
+ await core.request('/system/roles/viewer', undefined, {
150
+ method: 'GET',
151
+ forceCache: true,
152
+ });
153
+ // 第二次命中缓存,且不被幂等守卫拦截
154
+ const r2 = await core.request('/system/roles/viewer', undefined, {
155
+ method: 'GET',
156
+ forceCache: true,
157
+ });
158
+ expect(r2.ok).toBe(true);
159
+ expect(fake.callCount).toBe(1);
160
+ });
161
+ });
@@ -10,7 +10,7 @@
10
10
  * - Query strategy: cacheable, dedupable, retryable
11
11
  * - Submit strategy: idempotent guard, no cache, no retry
12
12
  */
13
- import type { DataHubStrategyConfig } from '../types';
13
+ import type { DataHubStrategyConfig } from '../../datahub/types';
14
14
  /**
15
15
  * 根据 URL 解析请求策略 / Resolve request strategy based on URL
16
16
  * @param url - 请求地址 / Request URL
@@ -1 +1 @@
1
- {"version":3,"file":"strategy.d.ts","sourceRoot":"","sources":["../../../../src/core/datahub/config/strategy.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,OAAO,KAAK,EAAE,qBAAqB,EAAuB,MAAM,UAAU,CAAC;AA0B3E;;;;;;;;;GASG;AACH,wBAAgB,eAAe,CAAC,GAAG,EAAE,MAAM,GAAG,qBAAqB,CAIlE"}
1
+ {"version":3,"file":"strategy.d.ts","sourceRoot":"","sources":["../../../../src/core/datahub/config/strategy.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,OAAO,KAAK,EAAE,qBAAqB,EAAuB,MAAM,qBAAqB,CAAC;AA0BtF;;;;;;;;;GASG;AACH,wBAAgB,eAAe,CAAC,GAAG,EAAE,MAAM,GAAG,qBAAqB,CAIlE"}
@@ -0,0 +1,50 @@
1
+ /**
2
+ * @file 策略配置 / Strategy Configuration
3
+ * @description 根据 URL 自动识别请求策略(查询 or 提交),
4
+ * 并返回对应的策略配置。策略决定了请求经过哪些中间件处理:
5
+ * - 查询策略(query):可缓存、可去重、可重试
6
+ * - 提交策略(submit):幂等防护、不缓存、不重试
7
+ * Automatically identifies the request strategy (query or submit) based on the URL,
8
+ * and returns the corresponding strategy config. Strategy determines which middleware
9
+ * the request passes through:
10
+ * - Query strategy: cacheable, dedupable, retryable
11
+ * - Submit strategy: idempotent guard, no cache, no retry
12
+ */
13
+ import { isQueryAction } from '../../datahub/utils/is-query';
14
+ /**
15
+ * 策略映射表 / Strategy mapping table
16
+ * @description 定义两种策略的完整行为配置 / Defines the complete behavior config for both strategies
17
+ */
18
+ const STRATEGY_MAP = {
19
+ /** 查询策略:结果可缓存,并发请求可去重,失败可重试 / Query strategy: cacheable results, dedupable concurrent requests, retryable on failure */
20
+ query: {
21
+ type: 'query',
22
+ cacheable: true,
23
+ dedupable: true,
24
+ idempotent: false,
25
+ retryable: true,
26
+ },
27
+ /** 提交策略:不缓存,不去重,需幂等防护,失败不重试 / Submit strategy: no cache, no dedup, idempotent guard required, no retry on failure */
28
+ submit: {
29
+ type: 'submit',
30
+ cacheable: false,
31
+ dedupable: false,
32
+ idempotent: true,
33
+ retryable: false,
34
+ },
35
+ };
36
+ /**
37
+ * 根据 URL 解析请求策略 / Resolve request strategy based on URL
38
+ * @param url - 请求地址 / Request URL
39
+ * @returns 策略配置(返回副本,避免外部修改影响全局配置)/ Strategy config (returns a copy to prevent external mutation)
40
+ *
41
+ * @example
42
+ * resolveStrategy('/order/query') // { type: 'query', cacheable: true, ... }
43
+ * resolveStrategy('/order/submit') // { type: 'submit', idempotent: true, ... }
44
+ * resolveStrategy('/order/pay') // { type: 'submit', idempotent: true, ... }
45
+ */
46
+ export function resolveStrategy(url) {
47
+ const type = isQueryAction(url) ? 'query' : 'submit';
48
+ // 返回副本,防止外部修改影响策略映射表 / Return a copy to prevent external mutation of the strategy map
49
+ return { ...STRATEGY_MAP[type] };
50
+ }
@@ -16,7 +16,7 @@
16
16
  * 4. Support merging external signal with internal timeout signal
17
17
  * 5. Propagate traceId via request header
18
18
  */
19
- import type { DataHubAdapter, DataHubAdapterRequest, DataHubAdapterResponse } from '../../types';
19
+ import type { DataHubAdapter, DataHubAdapterRequest, DataHubAdapterResponse } from '../../../datahub/types';
20
20
  /**
21
21
  * FetchAdapter - 原生 fetch 适配器 / Native fetch adapter
22
22
  * @implements {DataHubAdapter}
@@ -1 +1 @@
1
- {"version":3,"file":"fetch-adapter.d.ts","sourceRoot":"","sources":["../../../../../src/core/datahub/core/adapter/fetch-adapter.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;GAiBG;AAEH,OAAO,KAAK,EAAE,cAAc,EAAE,qBAAqB,EAAE,sBAAsB,EAAE,MAAM,aAAa,CAAC;AAKjG;;;GAGG;AACH,qBAAa,YAAa,YAAW,cAAc;IACjD,wCAAwC;IACxC,SAAgB,IAAI,WAAW;IAE/B;;;;;OAKG;IACU,OAAO,CAAC,CAAC,GAAG,OAAO,EAC9B,GAAG,EAAE,qBAAqB,GACzB,OAAO,CAAC,sBAAsB,CAAC,CAAC,CAAC,CAAC;IA4DrC;;OAEG;IACI,KAAK,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI;CAOhC"}
1
+ {"version":3,"file":"fetch-adapter.d.ts","sourceRoot":"","sources":["../../../../../src/core/datahub/core/adapter/fetch-adapter.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;GAiBG;AAEH,OAAO,KAAK,EAAE,cAAc,EAAE,qBAAqB,EAAE,sBAAsB,EAAE,MAAM,qBAAqB,CAAC;AAKzG;;;GAGG;AACH,qBAAa,YAAa,YAAW,cAAc;IACjD,wCAAwC;IACxC,SAAgB,IAAI,WAAW;IAE/B;;;;;OAKG;IACU,OAAO,CAAC,CAAC,GAAG,OAAO,EAC9B,GAAG,EAAE,qBAAqB,GACzB,OAAO,CAAC,sBAAsB,CAAC,CAAC,CAAC,CAAC;IA4DrC;;OAEG;IACI,KAAK,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI;CAOhC"}
@@ -0,0 +1,118 @@
1
+ /**
2
+ * @file FetchAdapter - 浏览器原生 fetch 适配器 / Browser Native Fetch Adapter
3
+ * @description 基于 window.fetch 实现的零依赖 HTTP 适配器。
4
+ * 职责:
5
+ * 1. 将 DataHubAdapterRequest 转换为 fetch 调用
6
+ * 2. 解析 JSON 响应为原始数据,不假设任何业务协议结构
7
+ * 3. 支持超时自动中断(AbortController)
8
+ * 4. 支持外部 signal 与内部超时 signal 合并
9
+ * 5. traceId 通过请求头透传
10
+ *
11
+ * Zero-dependency HTTP adapter based on window.fetch.
12
+ * Responsibilities:
13
+ * 1. Convert DataHubAdapterRequest to fetch calls
14
+ * 2. Parse JSON responses as raw data, assuming no business protocol structure
15
+ * 3. Support timeout-based auto-abort (AbortController)
16
+ * 4. Support merging external signal with internal timeout signal
17
+ * 5. Propagate traceId via request header
18
+ */
19
+ /** 按 URL 存储的 AbortController 映射,用于主动取消请求 / AbortController map keyed by URL for active request cancellation */
20
+ const abortControllers = new Map();
21
+ /**
22
+ * FetchAdapter - 原生 fetch 适配器 / Native fetch adapter
23
+ * @implements {DataHubAdapter}
24
+ */
25
+ export class FetchAdapter {
26
+ constructor() {
27
+ /** 适配器名称标识 / Adapter name identifier */
28
+ this.name = 'fetch';
29
+ }
30
+ /**
31
+ * 执行 HTTP 请求 / Execute HTTP request
32
+ * @param req - 适配器请求对象 / Adapter request object
33
+ * @returns 标准化的适配器响应,data 为原始 JSON 解析结果,不含业务协议假设
34
+ * Standardized adapter response, data is raw JSON-parsed result with no business protocol assumptions
35
+ */
36
+ async request(req) {
37
+ const { url, data, options } = req;
38
+ const method = options.method ?? 'POST';
39
+ const timeout = options.timeout ?? 30000;
40
+ const controller = new AbortController();
41
+ abortControllers.set(url, controller);
42
+ const signal = options.signal
43
+ ? composeSignals(options.signal, controller.signal)
44
+ : controller.signal;
45
+ const init = {
46
+ method,
47
+ signal,
48
+ headers: {
49
+ 'Content-Type': 'application/json',
50
+ ...options.headers,
51
+ },
52
+ };
53
+ if (method !== 'GET' && data !== undefined) {
54
+ init.body = JSON.stringify(data);
55
+ }
56
+ if (method === 'GET' && data !== undefined) {
57
+ console.warn(`[DataHub] GET request with body is unusual: ${url}`);
58
+ }
59
+ const timer = setTimeout(() => controller.abort(), timeout);
60
+ try {
61
+ const response = await fetch(url, init);
62
+ const resHeaders = {};
63
+ for (const [k, v] of response.headers) {
64
+ resHeaders[k] = v;
65
+ }
66
+ // 只解析 JSON,不做任何业务语义判断
67
+ // Only parse JSON, no business semantics
68
+ let json;
69
+ try {
70
+ json = (await response.json());
71
+ }
72
+ catch {
73
+ json = undefined;
74
+ }
75
+ return {
76
+ ok: response.ok,
77
+ status: response.status,
78
+ data: json,
79
+ headers: resHeaders,
80
+ };
81
+ }
82
+ finally {
83
+ clearTimeout(timer);
84
+ abortControllers.delete(url);
85
+ }
86
+ }
87
+ /**
88
+ * 主动取消指定 URL 的请求 / Actively abort the request for the specified URL
89
+ */
90
+ abort(url) {
91
+ const controller = abortControllers.get(url);
92
+ if (controller) {
93
+ controller.abort();
94
+ abortControllers.delete(url);
95
+ }
96
+ }
97
+ }
98
+ /**
99
+ * 合并两个 AbortSignal / Compose two AbortSignals
100
+ */
101
+ function composeSignals(external, internal) {
102
+ const controller = new AbortController();
103
+ const cleanup = () => {
104
+ external.removeEventListener('abort', onAbort);
105
+ internal.removeEventListener('abort', onAbort);
106
+ };
107
+ const onAbort = () => {
108
+ cleanup();
109
+ controller.abort();
110
+ };
111
+ external.addEventListener('abort', onAbort, { once: true });
112
+ internal.addEventListener('abort', onAbort, { once: true });
113
+ if (external.aborted || internal.aborted) {
114
+ cleanup();
115
+ controller.abort();
116
+ }
117
+ return controller.signal;
118
+ }
@@ -0,0 +1,7 @@
1
+ /**
2
+ * @file 适配器导出 / Adapter Exports
3
+ * @description 统一导出内置适配器,方便外部按需引入或扩展。
4
+ * Unified export of built-in adapters for on-demand import or extension.
5
+ */
6
+ export { FetchAdapter } from './fetch-adapter';
7
+ export { MockAdapter } from './mock-adapter';
@@ -12,7 +12,7 @@
12
12
  * 2. Support mockDelay to simulate network latency
13
13
  * 3. Assume no business protocol structure, return raw mockData directly
14
14
  */
15
- import type { DataHubAdapter, DataHubAdapterRequest, DataHubAdapterResponse } from '../../types';
15
+ import type { DataHubAdapter, DataHubAdapterRequest, DataHubAdapterResponse } from '../../../datahub/types';
16
16
  /**
17
17
  * MockAdapter - 本地模拟适配器 / Local mock adapter
18
18
  * @implements {DataHubAdapter}
@@ -1 +1 @@
1
- {"version":3,"file":"mock-adapter.d.ts","sourceRoot":"","sources":["../../../../../src/core/datahub/core/adapter/mock-adapter.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAEH,OAAO,KAAK,EAAE,cAAc,EAAE,qBAAqB,EAAE,sBAAsB,EAAE,MAAM,aAAa,CAAC;AAEjG;;;GAGG;AACH,qBAAa,WAAY,YAAW,cAAc;IAChD,wCAAwC;IACxC,SAAgB,IAAI,UAAU;IAE9B;;;;;OAKG;IACU,OAAO,CAAC,CAAC,GAAG,OAAO,EAC9B,GAAG,EAAE,qBAAqB,GACzB,OAAO,CAAC,sBAAsB,CAAC,CAAC,CAAC,CAAC;CAatC"}
1
+ {"version":3,"file":"mock-adapter.d.ts","sourceRoot":"","sources":["../../../../../src/core/datahub/core/adapter/mock-adapter.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAEH,OAAO,KAAK,EAAE,cAAc,EAAE,qBAAqB,EAAE,sBAAsB,EAAE,MAAM,qBAAqB,CAAC;AAEzG;;;GAGG;AACH,qBAAa,WAAY,YAAW,cAAc;IAChD,wCAAwC;IACxC,SAAgB,IAAI,UAAU;IAE9B;;;;;OAKG;IACU,OAAO,CAAC,CAAC,GAAG,OAAO,EAC9B,GAAG,EAAE,qBAAqB,GACzB,OAAO,CAAC,sBAAsB,CAAC,CAAC,CAAC,CAAC;CAyBtC"}
@@ -0,0 +1,58 @@
1
+ /**
2
+ * @file MockAdapter - 本地模拟数据适配器 / Local Mock Data Adapter
3
+ * @description 用于开发调试阶段模拟后端接口响应,零依赖。
4
+ * 职责:
5
+ * 1. 根据配置的 mockData 返回模拟数据
6
+ * 2. 支持 mockDelay 模拟网络延迟
7
+ * 3. 不假设任何业务协议结构,直接返回原始 mockData
8
+ *
9
+ * Used during development/debugging to simulate backend API responses, zero dependencies.
10
+ * Responsibilities:
11
+ * 1. Return simulated data based on configured mockData
12
+ * 2. Support mockDelay to simulate network latency
13
+ * 3. Assume no business protocol structure, return raw mockData directly
14
+ */
15
+ /**
16
+ * MockAdapter - 本地模拟适配器 / Local mock adapter
17
+ * @implements {DataHubAdapter}
18
+ */
19
+ export class MockAdapter {
20
+ constructor() {
21
+ /** 适配器名称标识 / Adapter name identifier */
22
+ this.name = 'mock';
23
+ }
24
+ /**
25
+ * 执行模拟请求 / Execute mock request
26
+ * @param req - 适配器请求对象 / Adapter request object
27
+ * @returns 模拟的标准化响应,data 为原始 mockData,不含业务协议假设
28
+ * Simulated standardized response, data is raw mockData with no business protocol assumptions
29
+ */
30
+ async request(req) {
31
+ const { mockData, mockPath, mockDelay } = req.options;
32
+ let data;
33
+ if (mockData !== undefined) {
34
+ await sleep(mockDelay ?? 300);
35
+ data = mockData;
36
+ }
37
+ else if (mockPath) {
38
+ const response = await fetch(mockPath);
39
+ if (!response.ok) {
40
+ throw new Error(`${response.status} - Fetch mock resource failed: ${mockPath}`);
41
+ }
42
+ const text = await response.text();
43
+ try {
44
+ data = JSON.parse(text);
45
+ }
46
+ catch {
47
+ throw new Error(`Mock resource is not valid JSON: ${mockPath}`);
48
+ }
49
+ }
50
+ else {
51
+ data = {};
52
+ }
53
+ return { ok: true, status: 200, data };
54
+ }
55
+ }
56
+ function sleep(ms) {
57
+ return new Promise((resolve) => setTimeout(resolve, ms));
58
+ }