@aithe/aithe-ui 26.2.3 → 26.3.1

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 (564) hide show
  1. package/README.md +16 -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 +130 -0
  42. package/dist/apps/api/i18n/en-US.d.ts.map +1 -1
  43. package/dist/apps/api/i18n/en-US.js +140 -0
  44. package/dist/apps/api/i18n/es-ES.d.ts.map +1 -1
  45. package/dist/apps/api/i18n/es-ES.js +130 -0
  46. package/dist/apps/api/i18n/fr-FR.d.ts.map +1 -1
  47. package/dist/apps/api/i18n/fr-FR.js +130 -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 +130 -0
  51. package/dist/apps/api/i18n/ko-KR.d.ts.map +1 -1
  52. package/dist/apps/api/i18n/ko-KR.js +130 -0
  53. package/dist/apps/api/i18n/pt-BR.d.ts.map +1 -1
  54. package/dist/apps/api/i18n/pt-BR.js +130 -0
  55. package/dist/apps/api/i18n/zh-CN.d.ts.map +1 -1
  56. package/dist/apps/api/i18n/zh-CN.js +140 -0
  57. package/dist/apps/api/i18n/zh-HK.d.ts.map +1 -1
  58. package/dist/apps/api/i18n/zh-HK.js +130 -0
  59. package/dist/apps/api/i18n/zh-TW.d.ts.map +1 -1
  60. package/dist/apps/api/i18n/zh-TW.js +130 -0
  61. package/dist/apps/api/pages/docs.d.ts.map +1 -1
  62. package/dist/apps/api/pages/docs.js +367 -0
  63. package/dist/apps/api/standalone.js +1 -0
  64. package/dist/apps/demo/app.js +273 -0
  65. package/dist/apps/demo/editor.d.ts.map +1 -1
  66. package/dist/apps/demo/editor.js +270 -0
  67. package/dist/apps/demo/helpers.js +7 -0
  68. package/dist/apps/demo/i18n/de-DE.d.ts.map +1 -1
  69. package/dist/apps/demo/i18n/de-DE.js +269 -0
  70. package/dist/apps/demo/i18n/en-US.d.ts.map +1 -1
  71. package/dist/apps/demo/i18n/en-US.js +281 -0
  72. package/dist/apps/demo/i18n/es-ES.d.ts.map +1 -1
  73. package/dist/apps/demo/i18n/es-ES.js +269 -0
  74. package/dist/apps/demo/i18n/fr-FR.d.ts.map +1 -1
  75. package/dist/apps/demo/i18n/fr-FR.js +269 -0
  76. package/dist/apps/demo/i18n/index.js +27 -0
  77. package/dist/apps/demo/i18n/ja-JP.d.ts.map +1 -1
  78. package/dist/apps/demo/i18n/ja-JP.js +269 -0
  79. package/dist/apps/demo/i18n/ko-KR.d.ts.map +1 -1
  80. package/dist/apps/demo/i18n/ko-KR.js +269 -0
  81. package/dist/apps/demo/i18n/pt-BR.d.ts.map +1 -1
  82. package/dist/apps/demo/i18n/pt-BR.js +269 -0
  83. package/dist/apps/demo/i18n/zh-CN.d.ts.map +1 -1
  84. package/dist/apps/demo/i18n/zh-CN.js +281 -0
  85. package/dist/apps/demo/i18n/zh-HK.d.ts.map +1 -1
  86. package/dist/apps/demo/i18n/zh-HK.js +269 -0
  87. package/dist/apps/demo/i18n/zh-TW.d.ts.map +1 -1
  88. package/dist/apps/demo/i18n/zh-TW.js +269 -0
  89. package/dist/apps/demo/pages/autoform.js +412 -0
  90. package/dist/apps/demo/pages/basic.js +157 -0
  91. package/dist/apps/demo/pages/code.js +1088 -0
  92. package/dist/apps/demo/pages/container.js +42 -0
  93. package/dist/apps/demo/pages/dashboard.js +159 -0
  94. package/dist/apps/demo/pages/data.d.ts.map +1 -1
  95. package/dist/apps/demo/pages/data.js +327 -0
  96. package/dist/apps/demo/pages/display.d.ts.map +1 -1
  97. package/dist/apps/demo/pages/display.js +295 -0
  98. package/dist/apps/demo/pages/feedback.js +94 -0
  99. package/dist/apps/demo/pages/form.js +99 -0
  100. package/dist/apps/demo/pages/layout.js +74 -0
  101. package/dist/apps/demo/pages/navigation.js +54 -0
  102. package/dist/apps/demo/pages/progress.js +42 -0
  103. package/dist/apps/demo/pages/theme.js +126 -0
  104. package/dist/apps/demo/standalone.js +1 -0
  105. package/dist/components/basic/AGENTS.md +1 -0
  106. package/dist/components/basic/avatar.js +168 -0
  107. package/dist/components/basic/badge.js +157 -0
  108. package/dist/components/basic/button-group.js +70 -0
  109. package/dist/components/basic/button.d.ts +2 -4
  110. package/dist/components/basic/button.d.ts.map +1 -1
  111. package/dist/components/basic/button.js +315 -0
  112. package/dist/components/basic/card.js +186 -0
  113. package/dist/components/basic/chip.js +103 -0
  114. package/dist/components/basic/divider.js +127 -0
  115. package/dist/components/basic/empty.js +72 -0
  116. package/dist/components/basic/icon.js +129 -0
  117. package/dist/components/basic/input.d.ts.map +1 -1
  118. package/dist/components/basic/input.js +314 -0
  119. package/dist/components/basic/tag.d.ts +7 -2
  120. package/dist/components/basic/tag.d.ts.map +1 -1
  121. package/dist/components/basic/tag.js +248 -0
  122. package/dist/components/basic/textarea.d.ts +0 -1
  123. package/dist/components/basic/textarea.d.ts.map +1 -1
  124. package/dist/components/basic/textarea.js +130 -0
  125. package/dist/components/container/callout.js +108 -0
  126. package/dist/components/container/details.js +117 -0
  127. package/dist/components/container/scroller.js +144 -0
  128. package/dist/components/container/split-panel.js +150 -0
  129. package/dist/components/data/AGENTS.md +1 -1
  130. package/dist/components/data/box-table.d.ts +53 -0
  131. package/dist/components/data/box-table.d.ts.map +1 -0
  132. package/dist/components/data/box-table.js +220 -0
  133. package/dist/components/data/dropdown.d.ts +8 -5
  134. package/dist/components/data/dropdown.d.ts.map +1 -1
  135. package/dist/components/data/dropdown.js +219 -0
  136. package/dist/components/data/metrics-group.js +180 -0
  137. package/dist/components/data/metrics.d.ts +11 -0
  138. package/dist/components/data/metrics.d.ts.map +1 -1
  139. package/dist/components/data/metrics.js +309 -0
  140. package/dist/components/data/pagination.js +119 -0
  141. package/dist/components/data/tab-pane.d.ts +58 -12
  142. package/dist/components/data/tab-pane.d.ts.map +1 -1
  143. package/dist/components/data/tab-pane.js +130 -0
  144. package/dist/components/data/table-column.d.ts +29 -5
  145. package/dist/components/data/table-column.d.ts.map +1 -1
  146. package/dist/components/data/table-column.js +123 -0
  147. package/dist/components/data/table.d.ts +134 -54
  148. package/dist/components/data/table.d.ts.map +1 -1
  149. package/dist/components/data/table.js +1210 -0
  150. package/dist/components/data/tabs.d.ts +60 -3
  151. package/dist/components/data/tabs.d.ts.map +1 -1
  152. package/dist/components/data/tabs.js +416 -0
  153. package/dist/components/data/timeline-item.js +127 -0
  154. package/dist/components/data/timeline.js +204 -0
  155. package/dist/components/data/tree-menu.d.ts +12 -2
  156. package/dist/components/data/tree-menu.d.ts.map +1 -1
  157. package/dist/components/data/tree-menu.js +482 -0
  158. package/dist/components/data/tree.js +269 -0
  159. package/dist/components/display/AGENTS.md +5 -2
  160. package/dist/components/display/animated-image.js +98 -0
  161. package/dist/components/display/brief-box.d.ts +42 -0
  162. package/dist/components/display/brief-box.d.ts.map +1 -0
  163. package/dist/components/display/brief-box.js +117 -0
  164. package/dist/components/display/carousel.js +223 -0
  165. package/dist/components/display/code-editor.d.ts.map +1 -1
  166. package/dist/components/display/code-editor.js +976 -0
  167. package/dist/components/display/comparison.js +132 -0
  168. package/dist/components/display/desc-item.d.ts +48 -0
  169. package/dist/components/display/desc-item.d.ts.map +1 -0
  170. package/dist/components/display/desc-item.js +150 -0
  171. package/dist/components/display/desc.d.ts +64 -0
  172. package/dist/components/display/desc.d.ts.map +1 -0
  173. package/dist/components/display/desc.js +363 -0
  174. package/dist/components/display/detail-box.d.ts +51 -0
  175. package/dist/components/display/detail-box.d.ts.map +1 -0
  176. package/dist/components/display/detail-box.js +157 -0
  177. package/dist/components/display/label.js +166 -0
  178. package/dist/components/display/markdown-editor.js +319 -0
  179. package/dist/components/display/markdown.d.ts.map +1 -1
  180. package/dist/components/display/markdown.js +193 -0
  181. package/dist/components/display/mini-box.d.ts +31 -0
  182. package/dist/components/display/mini-box.d.ts.map +1 -0
  183. package/dist/components/display/mini-box.js +137 -0
  184. package/dist/components/display/profile.d.ts +18 -0
  185. package/dist/components/display/profile.d.ts.map +1 -0
  186. package/dist/components/display/profile.js +164 -0
  187. package/dist/components/feedback/AGENTS.md +1 -0
  188. package/dist/components/feedback/alert.js +150 -0
  189. package/dist/components/feedback/dialog.js +228 -0
  190. package/dist/components/feedback/drawer.d.ts.map +1 -1
  191. package/dist/components/feedback/drawer.js +338 -0
  192. package/dist/components/feedback/loading.js +130 -0
  193. package/dist/components/feedback/modal.d.ts.map +1 -1
  194. package/dist/components/feedback/modal.js +303 -0
  195. package/dist/components/feedback/notification.js +170 -0
  196. package/dist/components/feedback/popover.d.ts +1 -1
  197. package/dist/components/feedback/popover.js +124 -0
  198. package/dist/components/feedback/toast.js +142 -0
  199. package/dist/components/feedback/tooltip.d.ts +1 -1
  200. package/dist/components/feedback/tooltip.js +153 -0
  201. package/dist/components/form/AGENTS.md +4 -0
  202. package/dist/components/form/autoform-item.js +761 -0
  203. package/dist/components/form/autoform.d.ts +15 -5
  204. package/dist/components/form/autoform.d.ts.map +1 -1
  205. package/dist/components/form/autoform.js +303 -0
  206. package/dist/components/form/checkbox-group.js +118 -0
  207. package/dist/components/form/checkbox.js +123 -0
  208. package/dist/components/form/color-picker.js +148 -0
  209. package/dist/components/form/combobox.d.ts.map +1 -1
  210. package/dist/components/form/combobox.js +282 -0
  211. package/dist/components/form/date-picker.js +123 -0
  212. package/dist/components/form/form-item.d.ts.map +1 -1
  213. package/dist/components/form/form-item.js +141 -0
  214. package/dist/components/form/form.js +94 -0
  215. package/dist/components/form/radio-group.js +106 -0
  216. package/dist/components/form/radio.js +110 -0
  217. package/dist/components/form/rate.js +116 -0
  218. package/dist/components/form/select.d.ts +1 -1
  219. package/dist/components/form/select.js +495 -0
  220. package/dist/components/form/slider.js +134 -0
  221. package/dist/components/form/switch.js +146 -0
  222. package/dist/components/form/time-picker.js +92 -0
  223. package/dist/components/form/transfer.js +273 -0
  224. package/dist/components/form/upload.js +138 -0
  225. package/dist/components/framework/body.js +333 -0
  226. package/dist/components/framework/dashboard-panel.js +519 -0
  227. package/dist/components/framework/dashboard.d.ts.map +1 -1
  228. package/dist/components/framework/dashboard.js +1084 -0
  229. package/dist/components/framework/header.js +237 -0
  230. package/dist/components/framework/log-panel.js +637 -0
  231. package/dist/components/framework/page.js +151 -0
  232. package/dist/components/framework/sidebar.d.ts +4 -10
  233. package/dist/components/framework/sidebar.d.ts.map +1 -1
  234. package/dist/components/framework/sidebar.js +477 -0
  235. package/dist/components/layout/affix.js +137 -0
  236. package/dist/components/layout/col.js +103 -0
  237. package/dist/components/layout/collapse-item.js +165 -0
  238. package/dist/components/layout/collapse.js +108 -0
  239. package/dist/components/layout/container.js +92 -0
  240. package/dist/components/layout/flex.js +100 -0
  241. package/dist/components/layout/row.js +103 -0
  242. package/dist/components/layout/space.js +85 -0
  243. package/dist/components/navigation/back-top.js +127 -0
  244. package/dist/components/navigation/breadcrumb-item.js +108 -0
  245. package/dist/components/navigation/breadcrumb.js +70 -0
  246. package/dist/components/navigation/menu-item.js +181 -0
  247. package/dist/components/navigation/menu.js +126 -0
  248. package/dist/components/navigation/steps.js +183 -0
  249. package/dist/components/navigation/sub-menu.js +253 -0
  250. package/dist/components/progress/progress-bar.js +97 -0
  251. package/dist/components/progress/progress-ring.js +111 -0
  252. package/dist/components/progress/skeleton.js +108 -0
  253. package/dist/components/progress/spinner.js +129 -0
  254. package/dist/components/theme/locale-switch.js +241 -0
  255. package/dist/components/theme/shadow-picker.js +233 -0
  256. package/dist/components/theme/shape-picker.js +232 -0
  257. package/dist/components/theme/theme-picker.js +236 -0
  258. package/dist/components/theme/theme-preview.d.ts +1 -2
  259. package/dist/components/theme/theme-preview.d.ts.map +1 -1
  260. package/dist/components/theme/theme-preview.js +376 -0
  261. package/dist/components/theme/theme-switch.d.ts.map +1 -1
  262. package/dist/components/theme/theme-switch.js +318 -0
  263. package/dist/components/theme/typo-picker.js +219 -0
  264. package/dist/core/AGENTS.md +6 -1
  265. package/dist/core/aithe-element.d.ts +2 -2
  266. package/dist/core/aithe-element.js +135 -0
  267. package/dist/core/aithe-widget.js +30 -0
  268. package/dist/core/anchored-overlay.d.ts +3 -0
  269. package/dist/core/anchored-overlay.d.ts.map +1 -1
  270. package/dist/core/anchored-overlay.js +111 -0
  271. package/dist/core/autoform/autoform.js +79 -0
  272. package/dist/core/autoform/condition.js +170 -0
  273. package/dist/core/autoform/index.js +8 -0
  274. package/dist/core/autoform/types.js +7 -0
  275. package/dist/core/datahub/config/strategy.d.ts +1 -1
  276. package/dist/core/datahub/config/strategy.d.ts.map +1 -1
  277. package/dist/core/datahub/config/strategy.js +50 -0
  278. package/dist/core/datahub/core/adapter/fetch-adapter.d.ts +1 -1
  279. package/dist/core/datahub/core/adapter/fetch-adapter.d.ts.map +1 -1
  280. package/dist/core/datahub/core/adapter/fetch-adapter.js +118 -0
  281. package/dist/core/datahub/core/adapter/index.js +7 -0
  282. package/dist/core/datahub/core/adapter/mock-adapter.d.ts +1 -1
  283. package/dist/core/datahub/core/adapter/mock-adapter.d.ts.map +1 -1
  284. package/dist/core/datahub/core/adapter/mock-adapter.js +58 -0
  285. package/dist/core/datahub/core/api-styles.d.ts +1 -1
  286. package/dist/core/datahub/core/api-styles.d.ts.map +1 -1
  287. package/dist/core/datahub/core/api-styles.js +131 -0
  288. package/dist/core/datahub/core/datahub-core.d.ts +3 -3
  289. package/dist/core/datahub/core/datahub-core.d.ts.map +1 -1
  290. package/dist/core/datahub/core/datahub-core.js +441 -0
  291. package/dist/core/datahub/core/index.js +7 -0
  292. package/dist/core/datahub/index.js +50 -0
  293. package/dist/core/datahub/types.d.ts +6 -0
  294. package/dist/core/datahub/types.d.ts.map +1 -1
  295. package/dist/core/datahub/types.js +31 -0
  296. package/dist/core/datahub/utils/cache.js +55 -0
  297. package/dist/core/datahub/utils/common.js +23 -0
  298. package/dist/core/datahub/utils/dedup.d.ts +1 -1
  299. package/dist/core/datahub/utils/dedup.d.ts.map +1 -1
  300. package/dist/core/datahub/utils/dedup.js +52 -0
  301. package/dist/core/datahub/utils/idempotent.js +61 -0
  302. package/dist/core/datahub/utils/is-query.js +53 -0
  303. package/dist/core/datahub/utils/loading.js +78 -0
  304. package/dist/core/filter/__tests__/index.test.d.ts +2 -0
  305. package/dist/core/filter/__tests__/index.test.d.ts.map +1 -0
  306. package/dist/core/filter/__tests__/index.test.js +230 -0
  307. package/dist/core/filter/builtins.d.ts +60 -0
  308. package/dist/core/filter/builtins.d.ts.map +1 -0
  309. package/dist/core/filter/builtins.js +172 -0
  310. package/dist/core/filter/factory.d.ts +54 -0
  311. package/dist/core/filter/factory.d.ts.map +1 -0
  312. package/dist/core/filter/factory.js +96 -0
  313. package/dist/core/filter/index.d.ts +11 -0
  314. package/dist/core/filter/index.d.ts.map +1 -0
  315. package/dist/core/filter/index.js +9 -0
  316. package/dist/core/filter/types.d.ts +12 -0
  317. package/dist/core/filter/types.d.ts.map +1 -0
  318. package/dist/core/filter/types.js +1 -0
  319. package/dist/core/floating.js +132 -0
  320. package/dist/core/highlight/index.js +43 -0
  321. package/dist/core/highlight/lang-bash.js +27 -0
  322. package/dist/core/highlight/lang-c.js +27 -0
  323. package/dist/core/highlight/lang-cmake.js +27 -0
  324. package/dist/core/highlight/lang-cpp.js +27 -0
  325. package/dist/core/highlight/lang-css.js +24 -0
  326. package/dist/core/highlight/lang-dart.js +27 -0
  327. package/dist/core/highlight/lang-dockerfile.js +16 -0
  328. package/dist/core/highlight/lang-fsharp.js +23 -0
  329. package/dist/core/highlight/lang-go.js +22 -0
  330. package/dist/core/highlight/lang-html.js +12 -0
  331. package/dist/core/highlight/lang-java.js +22 -0
  332. package/dist/core/highlight/lang-javascript.js +26 -0
  333. package/dist/core/highlight/lang-json.js +13 -0
  334. package/dist/core/highlight/lang-jsonline.js +13 -0
  335. package/dist/core/highlight/lang-jsx.js +30 -0
  336. package/dist/core/highlight/lang-kotlin.js +27 -0
  337. package/dist/core/highlight/lang-latex.js +22 -0
  338. package/dist/core/highlight/lang-lua.js +26 -0
  339. package/dist/core/highlight/lang-makefile.js +22 -0
  340. package/dist/core/highlight/lang-markdown.js +18 -0
  341. package/dist/core/highlight/lang-objectivec.js +24 -0
  342. package/dist/core/highlight/lang-perl.js +30 -0
  343. package/dist/core/highlight/lang-powershell.js +23 -0
  344. package/dist/core/highlight/lang-python.js +27 -0
  345. package/dist/core/highlight/lang-r.js +21 -0
  346. package/dist/core/highlight/lang-ruby.js +29 -0
  347. package/dist/core/highlight/lang-rust.js +24 -0
  348. package/dist/core/highlight/lang-scala.js +26 -0
  349. package/dist/core/highlight/lang-sql.js +21 -0
  350. package/dist/core/highlight/lang-svelte.js +27 -0
  351. package/dist/core/highlight/lang-swift.js +28 -0
  352. package/dist/core/highlight/lang-tsx.js +35 -0
  353. package/dist/core/highlight/lang-typescript.js +31 -0
  354. package/dist/core/highlight/lang-vue.js +29 -0
  355. package/dist/core/highlight/lang-wasm.js +22 -0
  356. package/dist/core/highlight/lang-xml.js +12 -0
  357. package/dist/core/highlight/lang-yaml.js +14 -0
  358. package/dist/core/highlight/registry.js +99 -0
  359. package/dist/core/logger/LoggerCore.js +626 -0
  360. package/dist/core/logger/index.js +10 -0
  361. package/dist/core/logger/types.js +29 -0
  362. package/dist/core/markdown/index.js +20 -0
  363. package/dist/core/markdown/parser.d.ts +2 -0
  364. package/dist/core/markdown/parser.d.ts.map +1 -1
  365. package/dist/core/markdown/parser.js +376 -0
  366. package/dist/core/markdown/plugins.js +608 -0
  367. package/dist/core/markdown/types.d.ts +5 -0
  368. package/dist/core/markdown/types.d.ts.map +1 -1
  369. package/dist/core/markdown/types.js +7 -0
  370. package/dist/core/router/index.js +244 -0
  371. package/dist/core/styles.js +44 -0
  372. package/dist/core/types.d.ts +50 -3
  373. package/dist/core/types.d.ts.map +1 -1
  374. package/dist/core/types.js +1 -0
  375. package/dist/index.d.ts +8 -0
  376. package/dist/index.d.ts.map +1 -1
  377. package/dist/index.js +2812 -1253
  378. package/dist/index.js.map +1 -1
  379. package/dist/index.umd.js +1670 -728
  380. package/dist/index.umd.js.map +1 -1
  381. package/dist/styles/aithe-ui.d.ts +23 -0
  382. package/dist/styles/aithe-ui.d.ts.map +1 -1
  383. package/dist/styles/aithe-ui.js +185 -0
  384. package/dist/styles/global.css.d.ts +1 -1
  385. package/dist/styles/global.css.d.ts.map +1 -1
  386. package/dist/styles/global.css.js +119 -0
  387. package/dist/styles/i18n/index.js +206 -0
  388. package/dist/styles/i18n/locales/de-DE.d.ts.map +1 -1
  389. package/dist/styles/i18n/locales/de-DE.js +148 -0
  390. package/dist/styles/i18n/locales/en-US.d.ts.map +1 -1
  391. package/dist/styles/i18n/locales/en-US.js +157 -0
  392. package/dist/styles/i18n/locales/es-ES.d.ts.map +1 -1
  393. package/dist/styles/i18n/locales/es-ES.js +148 -0
  394. package/dist/styles/i18n/locales/fr-FR.d.ts.map +1 -1
  395. package/dist/styles/i18n/locales/fr-FR.js +148 -0
  396. package/dist/styles/i18n/locales/index.js +14 -0
  397. package/dist/styles/i18n/locales/ja-JP.d.ts.map +1 -1
  398. package/dist/styles/i18n/locales/ja-JP.js +148 -0
  399. package/dist/styles/i18n/locales/ko-KR.d.ts.map +1 -1
  400. package/dist/styles/i18n/locales/ko-KR.js +148 -0
  401. package/dist/styles/i18n/locales/pt-BR.d.ts.map +1 -1
  402. package/dist/styles/i18n/locales/pt-BR.js +148 -0
  403. package/dist/styles/i18n/locales/zh-CN.d.ts.map +1 -1
  404. package/dist/styles/i18n/locales/zh-CN.js +157 -0
  405. package/dist/styles/i18n/locales/zh-HK.d.ts.map +1 -1
  406. package/dist/styles/i18n/locales/zh-HK.js +148 -0
  407. package/dist/styles/i18n/locales/zh-TW.d.ts.map +1 -1
  408. package/dist/styles/i18n/locales/zh-TW.js +148 -0
  409. package/dist/styles/layout/index.js +88 -0
  410. package/dist/styles/mixins.js +43 -0
  411. package/dist/styles/shadow/cyber.js +19 -0
  412. package/dist/styles/shadow/deep.js +19 -0
  413. package/dist/styles/shadow/diffuse.js +19 -0
  414. package/dist/styles/shadow/flat.js +19 -0
  415. package/dist/styles/shadow/glassmorphism.js +19 -0
  416. package/dist/styles/shadow/index.js +129 -0
  417. package/dist/styles/shadow/neumorphism.js +21 -0
  418. package/dist/styles/shadow/retro.js +19 -0
  419. package/dist/styles/shadow/sharp-business.js +19 -0
  420. package/dist/styles/shadow/skeuomorphic.js +21 -0
  421. package/dist/styles/shape/chamfer.js +19 -0
  422. package/dist/styles/shape/circle.js +19 -0
  423. package/dist/styles/shape/index.js +174 -0
  424. package/dist/styles/shape/organic.js +19 -0
  425. package/dist/styles/shape/pill.js +19 -0
  426. package/dist/styles/shape/rounded.js +21 -0
  427. package/dist/styles/shape/rounder.js +19 -0
  428. package/dist/styles/shape/sharp.js +19 -0
  429. package/dist/styles/shape/smooth.js +19 -0
  430. package/dist/styles/theme/aliyun.d.ts +1 -1
  431. package/dist/styles/theme/aliyun.d.ts.map +1 -1
  432. package/dist/styles/theme/aliyun.js +102 -0
  433. package/dist/styles/theme/amber.d.ts +1 -1
  434. package/dist/styles/theme/amber.d.ts.map +1 -1
  435. package/dist/styles/theme/amber.js +101 -0
  436. package/dist/styles/theme/blue.d.ts +1 -1
  437. package/dist/styles/theme/blue.d.ts.map +1 -1
  438. package/dist/styles/theme/blue.js +101 -0
  439. package/dist/styles/theme/charcoal.d.ts +1 -1
  440. package/dist/styles/theme/charcoal.d.ts.map +1 -1
  441. package/dist/styles/theme/charcoal.js +106 -0
  442. package/dist/styles/theme/cyan.d.ts +1 -1
  443. package/dist/styles/theme/cyan.d.ts.map +1 -1
  444. package/dist/styles/theme/cyan.js +96 -0
  445. package/dist/styles/theme/dark.d.ts +1 -1
  446. package/dist/styles/theme/dark.d.ts.map +1 -1
  447. package/dist/styles/theme/dark.js +106 -0
  448. package/dist/styles/theme/ebony.d.ts +1 -1
  449. package/dist/styles/theme/ebony.d.ts.map +1 -1
  450. package/dist/styles/theme/ebony.js +106 -0
  451. package/dist/styles/theme/festive.d.ts +1 -1
  452. package/dist/styles/theme/festive.d.ts.map +1 -1
  453. package/dist/styles/theme/festive.js +101 -0
  454. package/dist/styles/theme/graphite.d.ts +1 -1
  455. package/dist/styles/theme/graphite.d.ts.map +1 -1
  456. package/dist/styles/theme/graphite.js +106 -0
  457. package/dist/styles/theme/gray.d.ts +1 -1
  458. package/dist/styles/theme/gray.d.ts.map +1 -1
  459. package/dist/styles/theme/gray.js +101 -0
  460. package/dist/styles/theme/huawei.d.ts +1 -1
  461. package/dist/styles/theme/huawei.d.ts.map +1 -1
  462. package/dist/styles/theme/huawei.js +102 -0
  463. package/dist/styles/theme/index.d.ts +1 -1
  464. package/dist/styles/theme/index.d.ts.map +1 -1
  465. package/dist/styles/theme/index.js +276 -0
  466. package/dist/styles/theme/indigo.d.ts +1 -1
  467. package/dist/styles/theme/indigo.d.ts.map +1 -1
  468. package/dist/styles/theme/indigo.js +101 -0
  469. package/dist/styles/theme/ink.d.ts +1 -1
  470. package/dist/styles/theme/ink.d.ts.map +1 -1
  471. package/dist/styles/theme/ink.js +106 -0
  472. package/dist/styles/theme/light.d.ts +1 -1
  473. package/dist/styles/theme/light.d.ts.map +1 -1
  474. package/dist/styles/theme/light.js +102 -0
  475. package/dist/styles/theme/midnight.d.ts +1 -1
  476. package/dist/styles/theme/midnight.d.ts.map +1 -1
  477. package/dist/styles/theme/midnight.js +106 -0
  478. package/dist/styles/theme/navy.d.ts +1 -1
  479. package/dist/styles/theme/navy.d.ts.map +1 -1
  480. package/dist/styles/theme/navy.js +106 -0
  481. package/dist/styles/theme/obsidian.d.ts +1 -1
  482. package/dist/styles/theme/obsidian.d.ts.map +1 -1
  483. package/dist/styles/theme/obsidian.js +106 -0
  484. package/dist/styles/theme/onyx.d.ts +1 -1
  485. package/dist/styles/theme/onyx.d.ts.map +1 -1
  486. package/dist/styles/theme/onyx.js +106 -0
  487. package/dist/styles/theme/orange.d.ts +1 -1
  488. package/dist/styles/theme/orange.d.ts.map +1 -1
  489. package/dist/styles/theme/orange.js +101 -0
  490. package/dist/styles/theme/pink.d.ts +1 -1
  491. package/dist/styles/theme/pink.d.ts.map +1 -1
  492. package/dist/styles/theme/pink.js +101 -0
  493. package/dist/styles/theme/purple.d.ts +1 -1
  494. package/dist/styles/theme/purple.d.ts.map +1 -1
  495. package/dist/styles/theme/purple.js +101 -0
  496. package/dist/styles/theme/raisin.d.ts +1 -1
  497. package/dist/styles/theme/raisin.d.ts.map +1 -1
  498. package/dist/styles/theme/raisin.js +106 -0
  499. package/dist/styles/theme/slate.d.ts +1 -1
  500. package/dist/styles/theme/slate.d.ts.map +1 -1
  501. package/dist/styles/theme/slate.js +106 -0
  502. package/dist/styles/theme/teal.d.ts +1 -1
  503. package/dist/styles/theme/teal.d.ts.map +1 -1
  504. package/dist/styles/theme/teal.js +101 -0
  505. package/dist/styles/theme/tianyi.d.ts +1 -1
  506. package/dist/styles/theme/tianyi.d.ts.map +1 -1
  507. package/dist/styles/theme/tianyi.js +102 -0
  508. package/dist/styles/types.js +1 -0
  509. package/dist/styles/typo/business.js +34 -0
  510. package/dist/styles/typo/compact.js +34 -0
  511. package/dist/styles/typo/index.js +99 -0
  512. package/dist/styles/typo/luxury.js +34 -0
  513. package/dist/styles/typo/minimal.js +34 -0
  514. package/dist/types/index.js +2 -0
  515. package/dist/utils/dom.js +51 -0
  516. package/dist/utils/events.js +32 -0
  517. package/dist/utils/icon.js +176 -0
  518. package/dist/utils/index.js +4 -0
  519. package/dist/utils/utils.d.ts +5 -5
  520. package/dist/utils/utils.js +89 -0
  521. package/dist/utils/validation.js +52 -0
  522. package/docs/api/basic/button.md +9 -6
  523. package/docs/api/basic/tag.md +24 -17
  524. package/docs/api/data/box-table.md +73 -0
  525. package/docs/api/data/dropdown.md +3 -2
  526. package/docs/api/data/metrics.md +2 -0
  527. package/docs/api/data/table-column.md +37 -23
  528. package/docs/api/data/table.md +158 -44
  529. package/docs/api/data/tabs.md +46 -1
  530. package/docs/api/data/tree-menu.md +55 -2
  531. package/docs/api/display/box.md +66 -0
  532. package/docs/api/display/brief-box.md +73 -0
  533. package/docs/api/display/desc-item.md +57 -0
  534. package/docs/api/display/desc.md +204 -0
  535. package/docs/api/display/detail-box.md +75 -0
  536. package/docs/api/display/mini-box.md +100 -0
  537. package/docs/api/display/profile.md +92 -0
  538. package/docs/api/feedback/popover.md +10 -10
  539. package/docs/api/feedback/tooltip.md +14 -14
  540. package/docs/api/form/autoform-item.md +100 -0
  541. package/docs/api/form/autoform.md +4 -1
  542. package/docs/api/form/select.md +28 -28
  543. package/docs/api/framework/log-panel.md +46 -0
  544. package/docs/api/framework/sidebar.md +3 -2
  545. package/docs/api/summary.md +45 -35
  546. package/docs/api/theme/theme-switch.md +1 -1
  547. package/docs/autoform.md +13 -1
  548. package/docs/changelog/CHANGELOG.md +80 -0
  549. package/docs/changelog/VERSION_26.3.1.md +966 -0
  550. package/docs/datahub.md +1 -1
  551. package/docs/filter.md +332 -0
  552. package/docs/framework-integration.md +2 -2
  553. package/docs/guide.md +66 -1
  554. package/docs/i18n.md +2 -2
  555. package/docs/issue/issue_26.3.1.0.md +84 -0
  556. package/docs/issue/issue_26.3.1.1.md +72 -0
  557. package/docs/issue/issue_26.3.1.2.md +75 -0
  558. package/docs/issue/issue_26.3.1.3.md +78 -0
  559. package/docs/issue/issue_26.3.1.4.md +113 -0
  560. package/docs/issue/issue_26.3.1.5.md +142 -0
  561. package/docs/issue/issue_26.3.1.6.md +100 -0
  562. package/docs/issue/issue_26.3.1.7.md +78 -0
  563. package/docs/quickstart.md +5 -5
  564. package/package.json +5 -2
@@ -0,0 +1,441 @@
1
+ /**
2
+ * @file DataHubCore - 核心调度器 / Core Dispatcher
3
+ * @description DataHub 的核心引擎,负责请求的完整生命周期管理:
4
+ * 1. 合并配置 → 2. 解析策略 → 3. 生成 traceId → 4. 请求拦截
5
+ * → 5. 缓存检查 → 6. 去重/幂等 → 7. 适配器调用 → 8. 响应拦截
6
+ * → 9. 缓存写入 → 10. 错误处理 → 11. loading 状态管理
7
+ *
8
+ * 设计原则:
9
+ * - DataHub 只处理 HTTP 传输层,不关心业务协议
10
+ * - 业务协议(code/message/data 等)由使用者在外部自行解析
11
+ * - DataHubAdapterResponse.data 为原始 JSON,不做任何业务语义假设
12
+ * - 适配器完全可插拔,核心不依赖任何具体适配器实现
13
+ * - 策略自动识别,业务层无需关心缓存/去重/防重细节
14
+ * - 统一错误处理,仅处理传输层异常
15
+ *
16
+ * The core engine of DataHub, managing the complete request lifecycle.
17
+ *
18
+ * Design principles:
19
+ * - DataHub handles only the HTTP transport layer, not business protocols
20
+ * - Business protocols (code/message/data, etc.) are interpreted by the consumer externally
21
+ * - DataHubAdapterResponse.data is raw JSON with no assumed business semantics
22
+ * - Adapters are fully pluggable; the core depends on no specific adapter implementation
23
+ * - Strategy is auto-detected; the business layer need not worry about cache/dedup/idempotent details
24
+ * - Unified error handling, only for transport-layer exceptions
25
+ */
26
+ import { DataHubError as DataHubErrorClass } from '../../datahub/types';
27
+ import { getBuiltinStyle, getBuiltinStyleNames } from './api-styles';
28
+ import { FetchAdapter } from './adapter/fetch-adapter';
29
+ import { MockAdapter } from './adapter/mock-adapter';
30
+ import { resolveStrategy } from '../../datahub/config/strategy';
31
+ import { cacheGet, cacheSet, cacheClear } from '../../datahub/utils/cache';
32
+ import { dedupTrack, dedupClear } from '../../datahub/utils/dedup';
33
+ import { loadingStart, loadingEnd, onLoadingChange, isLoading } from '../../datahub/utils/loading';
34
+ import { idempotentGuard, idempotentClear } from '../../datahub/utils/idempotent';
35
+ /** 默认配置项 / Default configuration values */
36
+ const DEFAULT_CONFIG = {
37
+ /** 默认超时 30 秒 / Default timeout 30s */
38
+ defaultTimeout: 30000,
39
+ /** 默认缓存有效期 60 秒 / Default cache TTL 60s */
40
+ defaultCacheTTL: 60_000,
41
+ /** 默认使用 fetch 适配器 / Default to fetch adapter */
42
+ defaultAdapter: 'fetch',
43
+ };
44
+ /**
45
+ * DataHubCore - 核心调度器 / Core Dispatcher
46
+ * @description 管理适配器注册、API 注册、请求调度及中间件编排。
47
+ * 返回 DataHubAdapterResponse<T>,其中 data 为原始 JSON 解析结果,
48
+ * 不包含任何业务协议假设。使用者自行解析业务结构。
49
+ * Manages adapter registration, API registration, request dispatch, and middleware orchestration.
50
+ * Returns DataHubAdapterResponse<T>, where data is raw JSON-parsed result
51
+ * without any business protocol assumptions. Consumers parse business structures themselves.
52
+ */
53
+ export class DataHubCore {
54
+ /**
55
+ * @param config - 全局配置 / Global configuration
56
+ */
57
+ constructor(config = {}) {
58
+ /** 已注册的适配器映射,键为适配器名称 / Registered adapter map, keyed by adapter name */
59
+ this.adapters = new Map();
60
+ // ─── Loading 状态代理 / Loading State Proxy ───────────────────
61
+ /** 订阅 loading 状态变更 / Subscribe to loading state changes */
62
+ this.onLoadingChange = onLoadingChange;
63
+ /** 查询指定 URL 是否正在加载 / Check if the specified URL is currently loading */
64
+ this.isLoading = isLoading;
65
+ this.config = config;
66
+ // APIStyle 默认为空,不处理业务协议
67
+ // APIStyle defaults to undefined — no business protocol handling
68
+ // 内置注册两个零依赖适配器 / Register two zero-dependency built-in adapters
69
+ this.registerAdapter(new FetchAdapter());
70
+ this.registerAdapter(new MockAdapter());
71
+ }
72
+ // ─── 适配器管理 / Adapter Management ──────────────────────────
73
+ /**
74
+ * 注册适配器 / Register an adapter
75
+ * @param adapter - 适配器实例,需实现 DataHubAdapter 接口 / Adapter instance implementing DataHubAdapter
76
+ * @throws 如果同名适配器已存在,静默覆盖 / Silently overwrites if an adapter with the same name already exists
77
+ */
78
+ registerAdapter(adapter) {
79
+ this.adapters.set(adapter.name, adapter);
80
+ }
81
+ /**
82
+ * 获取已注册的适配器 / Get a registered adapter by name
83
+ * @param name - 适配器名称 / Adapter name
84
+ * @returns 适配器实例,未找到返回 undefined / Adapter instance, or undefined if not found
85
+ */
86
+ getAdapter(name) {
87
+ return this.adapters.get(name);
88
+ }
89
+ // ─── APIStyle 管理 / APIStyle Management ──────────────────────
90
+ /**
91
+ * 设置 APIStyle / Set APIStyle
92
+ * @param style - APIStyle 实例或内置风格名称("default" | "k8s")/ APIStyle instance or built-in style name
93
+ *
94
+ * @example
95
+ * // 使用内置风格 / Use built-in style
96
+ * dataHub.setAPIStyle('k8s');
97
+ *
98
+ * @example
99
+ * // 使用自定义风格 / Use custom style
100
+ * dataHub.setAPIStyle({
101
+ * name: 'custom',
102
+ * onRequest(req) { ... },
103
+ * onResponse(res) { ... },
104
+ * });
105
+ */
106
+ setAPIStyle(style) {
107
+ if (typeof style === 'string') {
108
+ const builtin = getBuiltinStyle(style);
109
+ if (!builtin) {
110
+ throw new DataHubErrorClass({
111
+ code: 'APIStyleNotFound',
112
+ message: `Built-in APIStyle "${style}" is not found. Available: ${getBuiltinStyleNames().join(', ')}`,
113
+ });
114
+ }
115
+ this.apiStyle = builtin;
116
+ }
117
+ else {
118
+ this.apiStyle = style;
119
+ }
120
+ }
121
+ /**
122
+ * 获取当前 APIStyle / Get current APIStyle
123
+ * @returns 当前 APIStyle 实例 / Current APIStyle instance
124
+ */
125
+ getAPIStyle() {
126
+ return this.apiStyle;
127
+ }
128
+ /**
129
+ * 解析单次请求使用的 APIStyle:优先使用 options.apiStyle,否则回退到全局 this.apiStyle。
130
+ * 当 options.apiStyleRaw 为 true 时,返回 undefined 跳过 APIStyle 处理。
131
+ * Resolve the APIStyle for a single request: prefers options.apiStyle, falls back to this.apiStyle.
132
+ * Returns undefined when options.apiStyleRaw is true, skipping APIStyle processing.
133
+ */
134
+ resolveRequestStyle(options) {
135
+ if (options.apiStyle) {
136
+ if (typeof options.apiStyle === 'string') {
137
+ return getBuiltinStyle(options.apiStyle);
138
+ }
139
+ return options.apiStyle;
140
+ }
141
+ return this.apiStyle;
142
+ }
143
+ // ─── 核心请求方法 / Core Request Method ───────────────────────
144
+ /**
145
+ * 统一请求入口 / Unified request entry point
146
+ * @param url - 请求地址(相对路径会自动拼接 baseURL)/ Request URL (relative paths are auto-prepended with baseURL)
147
+ * @param data - 请求体数据 / Request body data
148
+ * @param options - 请求配置项 / Request options
149
+ * @returns DataHubAdapterResponse<T>,包含原始 JSON 响应体,业务协议由使用者自行解析
150
+ * DataHubAdapterResponse<T> with raw JSON body — business protocol is interpreted by the consumer
151
+ *
152
+ * @example
153
+ * // 使用者自行定义业务协议 / Consumer defines their own business protocol
154
+ * interface BizResponse { code: string; message: string; data: unknown }
155
+ *
156
+ * const res = await dataHub.request('/order/query', { id: '1' });
157
+ * // res.ok — HTTP 是否成功 / whether HTTP succeeded
158
+ * // res.status — HTTP 状态码 / HTTP status code
159
+ * // res.data — 原始 JSON,由使用者按 BizResponse 自行解析 / raw JSON, interpreted by consumer as BizResponse
160
+ * const biz = res.data as BizResponse;
161
+ * if (biz.code === 'Ok') { /* handle success *\/ }
162
+ */
163
+ async request(url, data, options) {
164
+ // 1. 合并默认配置与用户配置 / Merge default config with user config
165
+ const merged = this.mergeOptions(options);
166
+ // 2. 拼接完整 URL / Resolve full URL
167
+ const fullUrl = this.resolveUrl(url);
168
+ // 3. 根据 URL 自动识别策略 / Auto-detect strategy based on URL
169
+ const strategy = resolveStrategy(fullUrl);
170
+ // 4. 生成或使用 traceId / Generate or use existing traceId
171
+ const traceId = merged.traceId ?? this.generateTraceId();
172
+ // 将 traceId 写入配置,供适配器使用 / Write traceId into options for adapter usage
173
+ merged.traceId = traceId;
174
+ // 合并全局 headers 并透传 traceId 和 locale
175
+ // Merge global headers and propagate traceId and locale
176
+ const traceHeaderKey = this.config.traceHeaderKey ?? 'X-B3-TraceId';
177
+ const localeHeaderKey = this.config.localeHeaderKey ?? 'X-Locale';
178
+ merged.headers = {
179
+ ...this.config.headers,
180
+ ...merged.headers,
181
+ [traceHeaderKey]: traceId,
182
+ };
183
+ if (this.config.getLocale) {
184
+ merged.headers[localeHeaderKey] = this.config.getLocale();
185
+ }
186
+ // 使用 APIStyle 封装请求体数据 / Wrap request data using APIStyle
187
+ const req = { url: fullUrl, data, options: merged };
188
+ const requestStyle = this.resolveRequestStyle(merged);
189
+ requestStyle?.onRequest(req);
190
+ // 5. 请求拦截器 / Request interceptor
191
+ if (this.config.onRequest) {
192
+ const intercepted = this.config.onRequest(req);
193
+ if (intercepted)
194
+ Object.assign(req, intercepted);
195
+ }
196
+ // 6. 缓存检查:查询类请求且未跳过缓存时,尝试命中缓存
197
+ // Cache check: for query requests without skipCache, try to hit cache
198
+ if (strategy.cacheable && !merged.skipCache) {
199
+ const cached = cacheGet(fullUrl, data);
200
+ if (cached)
201
+ return cached;
202
+ }
203
+ // 实际执行请求的内部函数 / Internal function that actually executes the request
204
+ const execute = async () => {
205
+ // 标记 loading 开始 / Mark loading start
206
+ loadingStart(fullUrl);
207
+ try {
208
+ // 7. 解析并调用适配器 / Resolve and call adapter
209
+ const adapter = this.resolveAdapter(merged);
210
+ const res = await adapter.request(req);
211
+ // 8. 响应拦截器 / Response interceptor
212
+ if (this.config.onResponse) {
213
+ const intercepted = this.config.onResponse(res, req);
214
+ if (intercepted)
215
+ Object.assign(res, intercepted);
216
+ }
217
+ // 9. HTTP 传输层错误处理:HTTP 非 2xx 时,优先用 APIStyle 解析响应体
218
+ // HTTP transport error: when !res.ok, try APIStyle first, fall back to transport error
219
+ if (!res.ok) {
220
+ if (requestStyle) {
221
+ const result = requestStyle.onResponse(res);
222
+ throw new DataHubErrorClass({
223
+ code: result.code ?? `HTTP_${res.status}`,
224
+ message: result.message || `HTTP request failed with status ${res.status}`,
225
+ trace: traceId,
226
+ status: res.status,
227
+ url: fullUrl,
228
+ data: res.data,
229
+ });
230
+ }
231
+ throw this.createTransportError(res, traceId, fullUrl);
232
+ }
233
+ // 10. 使用 APIStyle 解析业务结果(code/message/data)
234
+ // Use APIStyle to parse business result (code/message/data)
235
+ if (requestStyle) {
236
+ const result = requestStyle.onResponse(res);
237
+ // 11. 业务错误处理:根据风格自定义的成功判断
238
+ // Business error handling: success check defined by the style
239
+ if (!requestStyle.isSuccess(result)) {
240
+ throw new DataHubErrorClass({
241
+ code: result.code,
242
+ message: result.message || `error: ${result.code}`,
243
+ trace: traceId,
244
+ status: res.status,
245
+ url: fullUrl,
246
+ });
247
+ }
248
+ // 缓存写入:查询类请求成功后写入缓存
249
+ // Cache write: write to cache after successful query request
250
+ if (strategy.cacheable && !merged.skipCache) {
251
+ const ttl = merged.cacheTTL ?? DEFAULT_CONFIG.defaultCacheTTL;
252
+ cacheSet(fullUrl, data, res, ttl);
253
+ }
254
+ // 返回时 data 替换为业务数据 / Replace data with business data in response
255
+ return { ...res, data: result.data };
256
+ }
257
+ // 缓存写入:查询类请求成功后写入缓存
258
+ // Cache write: write to cache after successful query request
259
+ if (strategy.cacheable && !merged.skipCache) {
260
+ const ttl = merged.cacheTTL ?? DEFAULT_CONFIG.defaultCacheTTL;
261
+ cacheSet(fullUrl, data, res, ttl);
262
+ }
263
+ // APIStyle 为空,直接返回原始响应 / No APIStyle, return raw response directly
264
+ return res;
265
+ }
266
+ catch (err) {
267
+ // 13. 统一错误处理:将各类异常转换为 DataHubError
268
+ // Unified error handling: convert all exceptions to DataHubError
269
+ const error = this.normalizeError(err, fullUrl, traceId);
270
+ if (this.config.onError) {
271
+ this.config.onError(error, req);
272
+ }
273
+ throw error;
274
+ }
275
+ finally {
276
+ // 无论成功失败,标记 loading 结束 / Mark loading end regardless of success or failure
277
+ loadingEnd(fullUrl);
278
+ }
279
+ };
280
+ // 12. 去重处理:查询类请求自动合并相同并发请求
281
+ // Dedup: automatically merge identical concurrent query requests
282
+ if (strategy.dedupable && !merged.skipDedup) {
283
+ return dedupTrack(fullUrl, data, execute);
284
+ }
285
+ // 13. 幂等防护:提交类请求阻止重复提交
286
+ // Idempotent guard: block duplicate submissions for submit requests
287
+ if (strategy.idempotent && !merged.skipIdempotent) {
288
+ return idempotentGuard(fullUrl, data, execute);
289
+ }
290
+ // 14. 无需中间件,直接执行 / No middleware needed, execute directly
291
+ return execute();
292
+ }
293
+ // ─── 状态清理方法 / State Cleanup Methods ─────────────────────
294
+ /** 清空所有缓存 / Clear all cache */
295
+ clearCache() {
296
+ cacheClear();
297
+ }
298
+ /** 清空所有去重记录 / Clear all dedup records */
299
+ clearDedup() {
300
+ dedupClear();
301
+ }
302
+ /** 清空所有幂等锁 / Clear all idempotent locks */
303
+ clearIdempotent() {
304
+ idempotentClear();
305
+ }
306
+ // ─── 配置修改方法 / Configuration Modification Methods ─────────
307
+ /**
308
+ * 设置请求拦截器 / Set request interceptor
309
+ */
310
+ setRequestInterceptor(handler) {
311
+ this.config.onRequest = handler;
312
+ }
313
+ /**
314
+ * 设置响应拦截器 / Set response interceptor
315
+ */
316
+ setResponseInterceptor(handler) {
317
+ this.config.onResponse = handler;
318
+ }
319
+ /**
320
+ * 设置全局错误回调 / Set global error handler
321
+ */
322
+ setErrorHandler(handler) {
323
+ this.config.onError = handler;
324
+ }
325
+ /**
326
+ * 更新全局配置(合并方式) / Update global config (merge mode)
327
+ */
328
+ updateConfig(config) {
329
+ this.config = { ...this.config, ...config };
330
+ }
331
+ /**
332
+ * 获取当前配置(只读副本) / Get current config (read-only copy)
333
+ */
334
+ getConfig() {
335
+ return { ...this.config };
336
+ }
337
+ // ─── 私有方法 / Private Methods ───────────────────────────────
338
+ /**
339
+ * 解析适配器 / Resolve adapter
340
+ */
341
+ resolveAdapter(options) {
342
+ if (this.config.forceMock || options.mock) {
343
+ return this.adapters.get('mock') ?? this.adapters.get(DEFAULT_CONFIG.defaultAdapter);
344
+ }
345
+ const name = options.adapter ?? this.config.defaultAdapter ?? DEFAULT_CONFIG.defaultAdapter;
346
+ const adapter = this.adapters.get(name);
347
+ if (!adapter) {
348
+ throw new DataHubErrorClass({
349
+ code: 'AdapterNotFound',
350
+ message: `Adapter "${name}" is not registered`,
351
+ });
352
+ }
353
+ return adapter;
354
+ }
355
+ /**
356
+ * 拼接完整 URL / Resolve full URL
357
+ */
358
+ resolveUrl(url) {
359
+ if (this.config.baseURL && !url.startsWith('http')) {
360
+ let base = this.config.baseURL;
361
+ while (base.endsWith('/'))
362
+ base = base.slice(0, -1);
363
+ let path = url;
364
+ while (path.startsWith('/'))
365
+ path = path.slice(1);
366
+ return `${base}/${path}`;
367
+ }
368
+ return url;
369
+ }
370
+ /**
371
+ * 合并请求配置 / Merge request options
372
+ */
373
+ mergeOptions(options) {
374
+ return {
375
+ timeout: DEFAULT_CONFIG.defaultTimeout,
376
+ cacheTTL: DEFAULT_CONFIG.defaultCacheTTL,
377
+ ...options,
378
+ };
379
+ }
380
+ /**
381
+ * 生成 traceId / Generate traceId
382
+ */
383
+ generateTraceId() {
384
+ if (this.config.generateTraceId)
385
+ return this.config.generateTraceId();
386
+ if (typeof crypto !== 'undefined' && typeof crypto.randomUUID === 'function') {
387
+ return crypto.randomUUID();
388
+ }
389
+ const timestamp = (typeof performance === 'undefined' ? Date.now() : performance.now()).toString(36);
390
+ const bytes = new Uint8Array(8);
391
+ if (typeof crypto !== 'undefined' && crypto.getRandomValues) {
392
+ crypto.getRandomValues(bytes);
393
+ }
394
+ const random = Array.from(bytes, (b) => b.toString(16).padStart(2, '0')).join('');
395
+ return timestamp + random;
396
+ }
397
+ /**
398
+ * 根据 HTTP 传输层错误创建 DataHubError / Create DataHubError from HTTP transport error
399
+ */
400
+ createTransportError(res, traceId, url) {
401
+ return new DataHubErrorClass({
402
+ code: `HTTP_${res.status}`,
403
+ message: `HTTP request failed with status ${res.status}`,
404
+ trace: traceId,
405
+ status: res.status,
406
+ url,
407
+ data: res.data,
408
+ });
409
+ }
410
+ /**
411
+ * 标准化错误:将各类异常统一转换为 DataHubError
412
+ * Normalize errors: convert all exception types to DataHubError uniformly
413
+ */
414
+ normalizeError(err, url, traceId) {
415
+ if (err instanceof DataHubErrorClass)
416
+ return err;
417
+ if (err instanceof DOMException && err.name === 'AbortError') {
418
+ return new DataHubErrorClass({
419
+ code: 'RequestAborted',
420
+ message: 'Request was aborted',
421
+ trace: traceId,
422
+ url,
423
+ });
424
+ }
425
+ if (err instanceof TypeError) {
426
+ return new DataHubErrorClass({
427
+ code: 'NetworkError',
428
+ message: err.message ?? 'Network error',
429
+ trace: traceId,
430
+ url,
431
+ });
432
+ }
433
+ const message = err instanceof Error ? err.message : String(err);
434
+ return new DataHubErrorClass({
435
+ code: 'UnknownError',
436
+ message,
437
+ trace: traceId,
438
+ url,
439
+ });
440
+ }
441
+ }
@@ -0,0 +1,7 @@
1
+ /**
2
+ * @file Core 模块导出 / Core Module Exports
3
+ * @description 统一导出核心调度器和内置适配器。
4
+ * Unified export of the core dispatcher and built-in adapters.
5
+ */
6
+ export { DataHubCore } from './datahub-core';
7
+ export { FetchAdapter, MockAdapter } from './adapter';
@@ -0,0 +1,50 @@
1
+ /**
2
+ * @file DataHub 数据中间层 — 对外出口 / DataHub Data Middleware — Public Exports
3
+ * @description 提供统一的导入入口,导出所有公开 API:
4
+ * - 核心类:DataHubCore
5
+ * - 内置适配器:FetchAdapter、MockAdapter
6
+ * - 类型定义:所有 interface / type / class
7
+ * - 工具函数:策略解析、缓存、去重、loading、幂等防护
8
+ * - 默认实例:default export(推荐使用默认实例或 new DataHubCore())
9
+ *
10
+ * Note: DataHub handles only the HTTP transport layer, not business protocols.
11
+ * DataHubAdapterResponse.data is raw JSON; business protocol is interpreted by the consumer.
12
+ *
13
+ * @example
14
+ * // 使用默认实例 / Use default instance
15
+ * import {dataHub} from './datahub';
16
+ * const res = await dataHub.request('/order/query', { id: '1' });
17
+ * // res.ok — HTTP 是否成功 / whether HTTP succeeded
18
+ * // res.data — 原始 JSON,由使用者自行解析业务协议 / raw JSON, consumer parses business protocol
19
+ *
20
+ * @example
21
+ * // 创建独立实例 / Create isolated instance
22
+ * import { DataHubCore } from './datahub';
23
+ * const hub = new DataHubCore({ baseURL: '/api' });
24
+ *
25
+ * @example
26
+ * // 扩展适配器 / Extend with custom adapter
27
+ * import { DataHubCore } from './datahub';
28
+ * const hub = new DataHubCore();
29
+ * hub.registerAdapter({ name: 'axios', async request(req) { ... } });
30
+ */
31
+ // ─── 核心类 / Core Class ────────────────────────────────────────
32
+ export { DataHubCore } from './core';
33
+ // ─── 内置适配器 / Built-in Adapters ─────────────────────────────
34
+ export { FetchAdapter, MockAdapter } from './core/adapter';
35
+ export { getBuiltinStyle, getBuiltinStyleNames } from './core/api-styles';
36
+ // ─── 错误类导出 / Error Class Export ────────────────────────────
37
+ export { DataHubError } from './types';
38
+ // ─── 策略解析 / Strategy Resolution ─────────────────────────────
39
+ export { resolveStrategy } from './config/strategy';
40
+ // ─── 工具函数导出 / Utility Function Exports ────────────────────
41
+ export { isQueryAction, setQueryKeywords, getQueryKeywords } from './utils/is-query';
42
+ export { buildKey } from './utils/common';
43
+ export { cacheGet, cacheSet, cacheDelete, cacheClear } from './utils/cache';
44
+ export { dedupTrack, dedupClear } from './utils/dedup';
45
+ export { loadingStart, loadingEnd, isLoading, onLoadingChange } from './utils/loading';
46
+ export { idempotentGuard, idempotentClear } from './utils/idempotent';
47
+ // ─── 默认实例 / Default Instance ────────────────────────────────
48
+ import { DataHubCore } from './core';
49
+ /** 默认 DataHub 实例,开箱即用 / Default DataHub instance, ready to use out of the box */
50
+ export const dataHub = new DataHubCore();
@@ -78,6 +78,8 @@ export interface DataHubRequestOptions {
78
78
  mock?: boolean;
79
79
  /** Mock 返回的业务数据 / Mock business data to return */
80
80
  mockData?: unknown;
81
+ /** Mock JSON 文件路径,用于加载本地 mock 数据文件 / Mock JSON file path for loading local mock data files */
82
+ mockPath?: string;
81
83
  /** Mock 延迟时间(毫秒),模拟网络耗时,默认 300 / Mock delay in ms simulating network latency, default 300 */
82
84
  mockDelay?: number;
83
85
  /** 手动指定 traceId,不传则自动生成 / Manually specified traceId, auto-generated if omitted */
@@ -166,6 +168,8 @@ export interface DataHubErrorDetail {
166
168
  status?: number;
167
169
  /** 请求 URL / Request URL */
168
170
  url?: string;
171
+ /** 原始响应体 / Raw response body */
172
+ data?: unknown;
169
173
  }
170
174
  /**
171
175
  * DataHub 统一错误类 / DataHub Unified Error Class
@@ -184,6 +188,8 @@ export declare class DataHubError extends Error {
184
188
  readonly status?: number;
185
189
  /** 请求 URL / Request URL */
186
190
  readonly url?: string;
191
+ /** 原始响应体 / Raw response body */
192
+ readonly data?: unknown;
187
193
  constructor(detail: DataHubErrorDetail);
188
194
  }
189
195
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/core/datahub/types.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/core/datahub/types.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,31 @@
1
+ /**
2
+ * @file DataHub 类型定义 / DataHub Type Definitions
3
+ * @description 定义 DataHub 数据中间层的所有标准类型,包括 APIStyle 业务协议相关类型。
4
+ *
5
+ * 核心设计原则:
6
+ * - DataHub 只负责 HTTP 传输层(请求/响应),不关心业务协议
7
+ * - 业务协议(如 code/message/data 结构)由 APIStyle 封装
8
+ * - 适配器只做 JSON 解析,不做业务语义判断
9
+ *
10
+ * Defines all standard types for the DataHub middleware layer,
11
+ * including APIStyle business protocol types.
12
+ */
13
+ /**
14
+ * DataHub 统一错误类 / DataHub Unified Error Class
15
+ * @description 封装网络错误、中断错误、HTTP 错误等,提供统一的错误结构。
16
+ * 包含错误码、链路追踪 ID、HTTP 状态码和请求 URL 等信息。
17
+ * Encapsulates network errors, abort errors, HTTP errors, etc.,
18
+ * providing a unified error structure with error code, trace ID,
19
+ * HTTP status code, and request URL.
20
+ */
21
+ export class DataHubError extends Error {
22
+ constructor(detail) {
23
+ super(detail.message);
24
+ this.name = 'DataHubError';
25
+ this.code = detail.code;
26
+ this.trace = detail.trace;
27
+ this.status = detail.status;
28
+ this.url = detail.url;
29
+ this.data = detail.data;
30
+ }
31
+ }
@@ -0,0 +1,55 @@
1
+ /**
2
+ * @file 内存缓存工具 / In-Memory Cache Utility
3
+ * @description 为查询类请求提供基于 TTL(Time-To-Live)的内存缓存。
4
+ * 缓存键由 URL + 请求数据序列化生成,确保相同参数命中同一缓存。
5
+ * 过期条目在读取时惰性删除,无需定时清理。
6
+ * Provides TTL (Time-To-Live) based in-memory caching for query requests.
7
+ * Cache keys are generated from URL + serialized request data, ensuring identical
8
+ * parameters hit the same cache entry. Expired entries are lazily evicted on read,
9
+ * requiring no periodic cleanup.
10
+ */
11
+ import { buildKey } from './common';
12
+ /** 内存缓存存储,键为 "url::data" 序列化字符串 / In-memory store, keyed by "url::data" serialized string */
13
+ const store = new Map();
14
+ /**
15
+ * 读取缓存 / Read from cache
16
+ * @param url - 请求地址 / Request URL
17
+ * @param data - 请求体数据 / Request body data
18
+ * @returns 缓存命中返回数据,未命中或已过期返回 null / Cached data on hit, null on miss or expiration
19
+ */
20
+ export function cacheGet(url, data) {
21
+ const key = buildKey(url, data);
22
+ const entry = store.get(key);
23
+ if (!entry)
24
+ return null;
25
+ // 惰性删除:已过期的条目在读取时清除 / Lazy eviction: expired entries are removed on read
26
+ if (Date.now() > entry.expireAt) {
27
+ store.delete(key);
28
+ return null;
29
+ }
30
+ return entry.data;
31
+ }
32
+ /**
33
+ * 写入缓存 / Write to cache
34
+ * @param url - 请求地址 / Request URL
35
+ * @param data - 请求体数据 / Request body data
36
+ * @param value - 要缓存的数据 / Data to cache
37
+ * @param ttl - 缓存有效期(毫秒)/ Cache TTL in milliseconds
38
+ */
39
+ export function cacheSet(url, data, value, ttl) {
40
+ const key = buildKey(url, data);
41
+ store.set(key, { data: value, expireAt: Date.now() + ttl });
42
+ }
43
+ /**
44
+ * 删除指定缓存条目 / Delete a specific cache entry
45
+ * @param url - 请求地址 / Request URL
46
+ * @param data - 请求体数据 / Request body data
47
+ * @returns 是否成功删除 / Whether the entry was successfully deleted
48
+ */
49
+ export function cacheDelete(url, data) {
50
+ return store.delete(buildKey(url, data));
51
+ }
52
+ /** 清空所有缓存 / Clear all cache entries */
53
+ export function cacheClear() {
54
+ store.clear();
55
+ }
@@ -0,0 +1,23 @@
1
+ /**
2
+ * @file 公共工具函数 / Common Utility Functions
3
+ * @description 提供 DataHub 内部各模块共享的工具函数,
4
+ * 避免在 cache、dedup、idempotent 等模块中重复实现。
5
+ * 当前提供 buildKey 函数,用于生成标准化的缓存/去重/幂等键。
6
+ * Provides shared utility functions for DataHub internal modules,
7
+ * avoiding duplicate implementations across cache, dedup, idempotent, etc.
8
+ * Currently provides buildKey for generating standardized cache/dedup/idempotent keys.
9
+ */
10
+ /**
11
+ * 生成标准化的键 / Generate a standardized key
12
+ * @param url - 请求地址 / Request URL
13
+ * @param data - 请求体数据 / Request body data
14
+ * @returns 唯一键,格式为 "url::JSON(data)" / Unique key in format "url::JSON(data)"
15
+ * @description 用于缓存、去重、幂等防护等模块的键生成,
16
+ * 确保相同 URL + 相同数据命中同一键。
17
+ * Used for key generation in cache, dedup, idempotent guard modules,
18
+ * ensuring identical URL + data hit the same key.
19
+ */
20
+ export function buildKey(url, data) {
21
+ const serialized = data === undefined ? 'null' : JSON.stringify(data);
22
+ return `${url}::${serialized}`;
23
+ }
@@ -22,7 +22,7 @@
22
22
  * ]);
23
23
  * // r1 === r2,共享同一结果 / r1 === r2, sharing the same result
24
24
  */
25
- export declare function dedupTrack<T>(url: string, data: unknown | undefined, factory: () => Promise<T>): Promise<T>;
25
+ export declare function dedupTrack<T>(url: string, data: unknown, factory: () => Promise<T>): Promise<T>;
26
26
  /** 清空所有去重记录(一般用于测试或重置状态)/ Clear all dedup records (typically for testing or state reset) */
27
27
  export declare function dedupClear(): void;
28
28
  //# sourceMappingURL=dedup.d.ts.map