@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.
- package/README.md +19 -11
- package/dist/apps/admin/app.js +12 -0
- package/dist/apps/admin/components/admin-app.js +83 -0
- package/dist/apps/admin/components/admin-layout.d.ts +0 -1
- package/dist/apps/admin/components/admin-layout.d.ts.map +1 -1
- package/dist/apps/admin/components/admin-layout.js +250 -0
- package/dist/apps/admin/datahub/auth.js +24 -0
- package/dist/apps/admin/datahub/dashboard.js +16 -0
- package/dist/apps/admin/datahub/index.js +42 -0
- package/dist/apps/admin/datahub/menu.js +16 -0
- package/dist/apps/admin/datahub/mock/auth.js +11 -0
- package/dist/apps/admin/datahub/mock/dashboard.js +10 -0
- package/dist/apps/admin/datahub/mock/menu.js +42 -0
- package/dist/apps/admin/i18n/de-DE.js +37 -0
- package/dist/apps/admin/i18n/en-US.js +37 -0
- package/dist/apps/admin/i18n/es-ES.js +38 -0
- package/dist/apps/admin/i18n/fr-FR.js +37 -0
- package/dist/apps/admin/i18n/index.js +27 -0
- package/dist/apps/admin/i18n/ja-JP.js +38 -0
- package/dist/apps/admin/i18n/ko-KR.js +37 -0
- package/dist/apps/admin/i18n/pt-BR.js +37 -0
- package/dist/apps/admin/i18n/zh-CN.js +37 -0
- package/dist/apps/admin/i18n/zh-HK.js +37 -0
- package/dist/apps/admin/i18n/zh-TW.js +37 -0
- package/dist/apps/admin/pages/dashboard-page.d.ts +1 -0
- package/dist/apps/admin/pages/dashboard-page.d.ts.map +1 -1
- package/dist/apps/admin/pages/dashboard-page.js +199 -0
- package/dist/apps/admin/pages/login-page.js +278 -0
- package/dist/apps/admin/pages/not-found-page.js +57 -0
- package/dist/apps/admin/pages/role-page.js +76 -0
- package/dist/apps/admin/pages/settings-page.js +95 -0
- package/dist/apps/admin/pages/user-page.js +76 -0
- package/dist/apps/admin/router/index.js +43 -0
- package/dist/apps/admin/standalone.js +1 -0
- package/dist/apps/admin/store/auth.js +42 -0
- package/dist/apps/api/app.js +82 -0
- package/dist/apps/api/demo-data.d.ts.map +1 -1
- package/dist/apps/api/demo-data.js +965 -0
- package/dist/apps/api/docs-viewer.js +684 -0
- package/dist/apps/api/i18n/de-DE.d.ts.map +1 -1
- package/dist/apps/api/i18n/de-DE.js +131 -0
- package/dist/apps/api/i18n/en-US.d.ts.map +1 -1
- package/dist/apps/api/i18n/en-US.js +141 -0
- package/dist/apps/api/i18n/es-ES.d.ts.map +1 -1
- package/dist/apps/api/i18n/es-ES.js +131 -0
- package/dist/apps/api/i18n/fr-FR.d.ts.map +1 -1
- package/dist/apps/api/i18n/fr-FR.js +131 -0
- package/dist/apps/api/i18n/index.js +27 -0
- package/dist/apps/api/i18n/ja-JP.d.ts.map +1 -1
- package/dist/apps/api/i18n/ja-JP.js +131 -0
- package/dist/apps/api/i18n/ko-KR.d.ts.map +1 -1
- package/dist/apps/api/i18n/ko-KR.js +131 -0
- package/dist/apps/api/i18n/pt-BR.d.ts.map +1 -1
- package/dist/apps/api/i18n/pt-BR.js +131 -0
- package/dist/apps/api/i18n/zh-CN.d.ts.map +1 -1
- package/dist/apps/api/i18n/zh-CN.js +141 -0
- package/dist/apps/api/i18n/zh-HK.d.ts.map +1 -1
- package/dist/apps/api/i18n/zh-HK.js +131 -0
- package/dist/apps/api/i18n/zh-TW.d.ts.map +1 -1
- package/dist/apps/api/i18n/zh-TW.js +131 -0
- package/dist/apps/api/pages/docs.d.ts.map +1 -1
- package/dist/apps/api/pages/docs.js +369 -0
- package/dist/apps/api/standalone.js +1 -0
- package/dist/apps/demo/app.d.ts.map +1 -1
- package/dist/apps/demo/app.js +275 -0
- package/dist/apps/demo/editor.d.ts.map +1 -1
- package/dist/apps/demo/editor.js +270 -0
- package/dist/apps/demo/helpers.js +7 -0
- package/dist/apps/demo/i18n/de-DE.d.ts.map +1 -1
- package/dist/apps/demo/i18n/de-DE.js +289 -0
- package/dist/apps/demo/i18n/en-US.d.ts.map +1 -1
- package/dist/apps/demo/i18n/en-US.js +301 -0
- package/dist/apps/demo/i18n/es-ES.d.ts.map +1 -1
- package/dist/apps/demo/i18n/es-ES.js +289 -0
- package/dist/apps/demo/i18n/fr-FR.d.ts.map +1 -1
- package/dist/apps/demo/i18n/fr-FR.js +289 -0
- package/dist/apps/demo/i18n/index.js +27 -0
- package/dist/apps/demo/i18n/ja-JP.d.ts.map +1 -1
- package/dist/apps/demo/i18n/ja-JP.js +289 -0
- package/dist/apps/demo/i18n/ko-KR.d.ts.map +1 -1
- package/dist/apps/demo/i18n/ko-KR.js +289 -0
- package/dist/apps/demo/i18n/pt-BR.d.ts.map +1 -1
- package/dist/apps/demo/i18n/pt-BR.js +289 -0
- package/dist/apps/demo/i18n/zh-CN.d.ts.map +1 -1
- package/dist/apps/demo/i18n/zh-CN.js +301 -0
- package/dist/apps/demo/i18n/zh-HK.d.ts.map +1 -1
- package/dist/apps/demo/i18n/zh-HK.js +289 -0
- package/dist/apps/demo/i18n/zh-TW.d.ts.map +1 -1
- package/dist/apps/demo/i18n/zh-TW.js +289 -0
- package/dist/apps/demo/pages/autoform.d.ts.map +1 -1
- package/dist/apps/demo/pages/autoform.js +422 -0
- package/dist/apps/demo/pages/autoview.d.ts +3 -0
- package/dist/apps/demo/pages/autoview.d.ts.map +1 -0
- package/dist/apps/demo/pages/autoview.js +310 -0
- package/dist/apps/demo/pages/basic.js +157 -0
- package/dist/apps/demo/pages/code.js +1088 -0
- package/dist/apps/demo/pages/container.js +42 -0
- package/dist/apps/demo/pages/dashboard.js +159 -0
- package/dist/apps/demo/pages/data.d.ts.map +1 -1
- package/dist/apps/demo/pages/data.js +327 -0
- package/dist/apps/demo/pages/display.d.ts.map +1 -1
- package/dist/apps/demo/pages/display.js +295 -0
- package/dist/apps/demo/pages/feedback.js +94 -0
- package/dist/apps/demo/pages/form.d.ts.map +1 -1
- package/dist/apps/demo/pages/form.js +119 -0
- package/dist/apps/demo/pages/layout.js +74 -0
- package/dist/apps/demo/pages/navigation.js +54 -0
- package/dist/apps/demo/pages/progress.js +42 -0
- package/dist/apps/demo/pages/theme.js +126 -0
- package/dist/apps/demo/standalone.js +1 -0
- package/dist/components/basic/AGENTS.md +1 -0
- package/dist/components/basic/avatar.js +168 -0
- package/dist/components/basic/badge.js +157 -0
- package/dist/components/basic/button-group.js +70 -0
- package/dist/components/basic/button.d.ts +2 -4
- package/dist/components/basic/button.d.ts.map +1 -1
- package/dist/components/basic/button.js +315 -0
- package/dist/components/basic/card.js +186 -0
- package/dist/components/basic/chip.js +103 -0
- package/dist/components/basic/divider.js +127 -0
- package/dist/components/basic/empty.js +72 -0
- package/dist/components/basic/icon.js +129 -0
- package/dist/components/basic/input.d.ts.map +1 -1
- package/dist/components/basic/input.js +314 -0
- package/dist/components/basic/tag.d.ts +7 -2
- package/dist/components/basic/tag.d.ts.map +1 -1
- package/dist/components/basic/tag.js +248 -0
- package/dist/components/basic/textarea.d.ts +0 -1
- package/dist/components/basic/textarea.d.ts.map +1 -1
- package/dist/components/basic/textarea.js +130 -0
- package/dist/components/container/callout.js +108 -0
- package/dist/components/container/details.js +117 -0
- package/dist/components/container/scroller.js +144 -0
- package/dist/components/container/split-panel.js +150 -0
- package/dist/components/data/AGENTS.md +1 -1
- package/dist/components/data/box-table.d.ts +53 -0
- package/dist/components/data/box-table.d.ts.map +1 -0
- package/dist/components/data/box-table.js +220 -0
- package/dist/components/data/dropdown.d.ts +8 -5
- package/dist/components/data/dropdown.d.ts.map +1 -1
- package/dist/components/data/dropdown.js +219 -0
- package/dist/components/data/metrics-group.js +180 -0
- package/dist/components/data/metrics.d.ts +11 -0
- package/dist/components/data/metrics.d.ts.map +1 -1
- package/dist/components/data/metrics.js +309 -0
- package/dist/components/data/pagination.js +119 -0
- package/dist/components/data/tab-pane.d.ts +58 -12
- package/dist/components/data/tab-pane.d.ts.map +1 -1
- package/dist/components/data/tab-pane.js +130 -0
- package/dist/components/data/table-column.d.ts +29 -5
- package/dist/components/data/table-column.d.ts.map +1 -1
- package/dist/components/data/table-column.js +123 -0
- package/dist/components/data/table.d.ts +134 -54
- package/dist/components/data/table.d.ts.map +1 -1
- package/dist/components/data/table.js +1210 -0
- package/dist/components/data/tabs.d.ts +60 -3
- package/dist/components/data/tabs.d.ts.map +1 -1
- package/dist/components/data/tabs.js +416 -0
- package/dist/components/data/timeline-item.js +127 -0
- package/dist/components/data/timeline.js +204 -0
- package/dist/components/data/tree-menu.d.ts +12 -2
- package/dist/components/data/tree-menu.d.ts.map +1 -1
- package/dist/components/data/tree-menu.js +482 -0
- package/dist/components/data/tree.js +269 -0
- package/dist/components/display/AGENTS.md +5 -2
- package/dist/components/display/animated-image.js +98 -0
- package/dist/components/display/autoview.d.ts +139 -0
- package/dist/components/display/autoview.d.ts.map +1 -0
- package/dist/components/display/autoview.js +460 -0
- package/dist/components/display/brief-box.d.ts +42 -0
- package/dist/components/display/brief-box.d.ts.map +1 -0
- package/dist/components/display/brief-box.js +117 -0
- package/dist/components/display/carousel.js +223 -0
- package/dist/components/display/code-editor.d.ts.map +1 -1
- package/dist/components/display/code-editor.js +976 -0
- package/dist/components/display/comparison.js +132 -0
- package/dist/components/display/desc-item.d.ts +48 -0
- package/dist/components/display/desc-item.d.ts.map +1 -0
- package/dist/components/display/desc-item.js +150 -0
- package/dist/components/display/desc.d.ts +68 -0
- package/dist/components/display/desc.d.ts.map +1 -0
- package/dist/components/display/desc.js +405 -0
- package/dist/components/display/detail-box.d.ts +51 -0
- package/dist/components/display/detail-box.d.ts.map +1 -0
- package/dist/components/display/detail-box.js +157 -0
- package/dist/components/display/label.js +166 -0
- package/dist/components/display/markdown-editor.js +319 -0
- package/dist/components/display/markdown.d.ts.map +1 -1
- package/dist/components/display/markdown.js +193 -0
- package/dist/components/display/mini-box.d.ts +31 -0
- package/dist/components/display/mini-box.d.ts.map +1 -0
- package/dist/components/display/mini-box.js +137 -0
- package/dist/components/display/profile.d.ts +18 -0
- package/dist/components/display/profile.d.ts.map +1 -0
- package/dist/components/display/profile.js +164 -0
- package/dist/components/feedback/AGENTS.md +1 -0
- package/dist/components/feedback/alert.js +150 -0
- package/dist/components/feedback/dialog.js +228 -0
- package/dist/components/feedback/drawer.d.ts.map +1 -1
- package/dist/components/feedback/drawer.js +338 -0
- package/dist/components/feedback/loading.js +130 -0
- package/dist/components/feedback/modal.d.ts.map +1 -1
- package/dist/components/feedback/modal.js +303 -0
- package/dist/components/feedback/notification.js +170 -0
- package/dist/components/feedback/popover.d.ts +1 -1
- package/dist/components/feedback/popover.js +124 -0
- package/dist/components/feedback/toast.js +142 -0
- package/dist/components/feedback/tooltip.d.ts +1 -1
- package/dist/components/feedback/tooltip.js +153 -0
- package/dist/components/form/AGENTS.md +4 -0
- package/dist/components/form/autoform-item.d.ts +6 -0
- package/dist/components/form/autoform-item.d.ts.map +1 -1
- package/dist/components/form/autoform-item.js +791 -0
- package/dist/components/form/autoform.d.ts +15 -5
- package/dist/components/form/autoform.d.ts.map +1 -1
- package/dist/components/form/autoform.js +303 -0
- package/dist/components/form/checkbox-group.js +118 -0
- package/dist/components/form/checkbox.js +123 -0
- package/dist/components/form/color-picker.js +148 -0
- package/dist/components/form/combobox.d.ts +4 -0
- package/dist/components/form/combobox.d.ts.map +1 -1
- package/dist/components/form/combobox.js +325 -0
- package/dist/components/form/date-picker.js +123 -0
- package/dist/components/form/form-item.d.ts.map +1 -1
- package/dist/components/form/form-item.js +141 -0
- package/dist/components/form/form.js +94 -0
- package/dist/components/form/radio-group.js +106 -0
- package/dist/components/form/radio.js +110 -0
- package/dist/components/form/rate.js +116 -0
- package/dist/components/form/select.d.ts +5 -1
- package/dist/components/form/select.d.ts.map +1 -1
- package/dist/components/form/select.js +539 -0
- package/dist/components/form/slider.js +134 -0
- package/dist/components/form/switch.js +146 -0
- package/dist/components/form/time-picker.js +92 -0
- package/dist/components/form/transfer.js +273 -0
- package/dist/components/form/upload.js +138 -0
- package/dist/components/framework/body.js +333 -0
- package/dist/components/framework/dashboard-panel.js +519 -0
- package/dist/components/framework/dashboard.d.ts.map +1 -1
- package/dist/components/framework/dashboard.js +1084 -0
- package/dist/components/framework/header.js +237 -0
- package/dist/components/framework/log-panel.js +637 -0
- package/dist/components/framework/page.js +151 -0
- package/dist/components/framework/sidebar.d.ts +4 -10
- package/dist/components/framework/sidebar.d.ts.map +1 -1
- package/dist/components/framework/sidebar.js +477 -0
- package/dist/components/layout/affix.js +137 -0
- package/dist/components/layout/col.js +103 -0
- package/dist/components/layout/collapse-item.js +165 -0
- package/dist/components/layout/collapse.js +108 -0
- package/dist/components/layout/container.js +92 -0
- package/dist/components/layout/flex.js +100 -0
- package/dist/components/layout/row.js +103 -0
- package/dist/components/layout/space.js +85 -0
- package/dist/components/navigation/back-top.js +127 -0
- package/dist/components/navigation/breadcrumb-item.js +108 -0
- package/dist/components/navigation/breadcrumb.js +70 -0
- package/dist/components/navigation/menu-item.js +181 -0
- package/dist/components/navigation/menu.js +126 -0
- package/dist/components/navigation/steps.js +183 -0
- package/dist/components/navigation/sub-menu.d.ts.map +1 -1
- package/dist/components/navigation/sub-menu.js +252 -0
- package/dist/components/progress/progress-bar.js +97 -0
- package/dist/components/progress/progress-ring.js +111 -0
- package/dist/components/progress/skeleton.js +108 -0
- package/dist/components/progress/spinner.js +129 -0
- package/dist/components/theme/locale-switch.js +241 -0
- package/dist/components/theme/shadow-picker.js +233 -0
- package/dist/components/theme/shape-picker.js +232 -0
- package/dist/components/theme/theme-picker.js +236 -0
- package/dist/components/theme/theme-preview.d.ts +1 -2
- package/dist/components/theme/theme-preview.d.ts.map +1 -1
- package/dist/components/theme/theme-preview.js +376 -0
- package/dist/components/theme/theme-switch.d.ts.map +1 -1
- package/dist/components/theme/theme-switch.js +318 -0
- package/dist/components/theme/typo-picker.js +219 -0
- package/dist/core/AGENTS.md +6 -1
- package/dist/core/aithe-element.d.ts +2 -2
- package/dist/core/aithe-element.js +135 -0
- package/dist/core/aithe-widget.js +30 -0
- package/dist/core/anchored-overlay.d.ts +3 -0
- package/dist/core/anchored-overlay.d.ts.map +1 -1
- package/dist/core/anchored-overlay.js +111 -0
- package/dist/core/autoform/autoform.js +79 -0
- package/dist/core/autoform/autoview.d.ts +86 -0
- package/dist/core/autoform/autoview.d.ts.map +1 -0
- package/dist/core/autoform/autoview.js +37 -0
- package/dist/core/autoform/condition.js +170 -0
- package/dist/core/autoform/index.d.ts +2 -0
- package/dist/core/autoform/index.d.ts.map +1 -1
- package/dist/core/autoform/index.js +9 -0
- package/dist/core/autoform/types.js +7 -0
- package/dist/core/datahub/__tests__/force-options.test.d.ts +8 -0
- package/dist/core/datahub/__tests__/force-options.test.d.ts.map +1 -0
- package/dist/core/datahub/__tests__/force-options.test.js +161 -0
- package/dist/core/datahub/config/strategy.d.ts +1 -1
- package/dist/core/datahub/config/strategy.d.ts.map +1 -1
- package/dist/core/datahub/config/strategy.js +50 -0
- package/dist/core/datahub/core/adapter/fetch-adapter.d.ts +1 -1
- package/dist/core/datahub/core/adapter/fetch-adapter.d.ts.map +1 -1
- package/dist/core/datahub/core/adapter/fetch-adapter.js +118 -0
- package/dist/core/datahub/core/adapter/index.js +7 -0
- package/dist/core/datahub/core/adapter/mock-adapter.d.ts +1 -1
- package/dist/core/datahub/core/adapter/mock-adapter.d.ts.map +1 -1
- package/dist/core/datahub/core/adapter/mock-adapter.js +58 -0
- package/dist/core/datahub/core/api-styles.d.ts +1 -1
- package/dist/core/datahub/core/api-styles.d.ts.map +1 -1
- package/dist/core/datahub/core/api-styles.js +136 -0
- package/dist/core/datahub/core/datahub-core.d.ts +53 -3
- package/dist/core/datahub/core/datahub-core.d.ts.map +1 -1
- package/dist/core/datahub/core/datahub-core.js +520 -0
- package/dist/core/datahub/core/index.js +7 -0
- package/dist/core/datahub/index.js +50 -0
- package/dist/core/datahub/types.d.ts +24 -0
- package/dist/core/datahub/types.d.ts.map +1 -1
- package/dist/core/datahub/types.js +31 -0
- package/dist/core/datahub/utils/cache.js +55 -0
- package/dist/core/datahub/utils/common.js +23 -0
- package/dist/core/datahub/utils/dedup.d.ts +1 -1
- package/dist/core/datahub/utils/dedup.d.ts.map +1 -1
- package/dist/core/datahub/utils/dedup.js +52 -0
- package/dist/core/datahub/utils/idempotent.js +61 -0
- package/dist/core/datahub/utils/is-query.js +53 -0
- package/dist/core/datahub/utils/loading.js +78 -0
- package/dist/core/filter/__tests__/index.test.d.ts +2 -0
- package/dist/core/filter/__tests__/index.test.d.ts.map +1 -0
- package/dist/core/filter/__tests__/index.test.js +230 -0
- package/dist/core/filter/builtins.d.ts +60 -0
- package/dist/core/filter/builtins.d.ts.map +1 -0
- package/dist/core/filter/builtins.js +172 -0
- package/dist/core/filter/factory.d.ts +54 -0
- package/dist/core/filter/factory.d.ts.map +1 -0
- package/dist/core/filter/factory.js +96 -0
- package/dist/core/filter/index.d.ts +11 -0
- package/dist/core/filter/index.d.ts.map +1 -0
- package/dist/core/filter/index.js +9 -0
- package/dist/core/filter/types.d.ts +12 -0
- package/dist/core/filter/types.d.ts.map +1 -0
- package/dist/core/filter/types.js +1 -0
- package/dist/core/floating.js +132 -0
- package/dist/core/highlight/index.js +43 -0
- package/dist/core/highlight/lang-bash.js +27 -0
- package/dist/core/highlight/lang-c.js +27 -0
- package/dist/core/highlight/lang-cmake.js +27 -0
- package/dist/core/highlight/lang-cpp.js +27 -0
- package/dist/core/highlight/lang-css.js +24 -0
- package/dist/core/highlight/lang-dart.js +27 -0
- package/dist/core/highlight/lang-dockerfile.js +16 -0
- package/dist/core/highlight/lang-fsharp.js +23 -0
- package/dist/core/highlight/lang-go.js +22 -0
- package/dist/core/highlight/lang-html.js +12 -0
- package/dist/core/highlight/lang-java.js +22 -0
- package/dist/core/highlight/lang-javascript.js +26 -0
- package/dist/core/highlight/lang-json.js +13 -0
- package/dist/core/highlight/lang-jsonline.js +13 -0
- package/dist/core/highlight/lang-jsx.js +30 -0
- package/dist/core/highlight/lang-kotlin.js +27 -0
- package/dist/core/highlight/lang-latex.js +22 -0
- package/dist/core/highlight/lang-lua.js +26 -0
- package/dist/core/highlight/lang-makefile.js +22 -0
- package/dist/core/highlight/lang-markdown.js +18 -0
- package/dist/core/highlight/lang-objectivec.js +24 -0
- package/dist/core/highlight/lang-perl.js +30 -0
- package/dist/core/highlight/lang-powershell.js +23 -0
- package/dist/core/highlight/lang-python.js +27 -0
- package/dist/core/highlight/lang-r.js +21 -0
- package/dist/core/highlight/lang-ruby.js +29 -0
- package/dist/core/highlight/lang-rust.js +24 -0
- package/dist/core/highlight/lang-scala.js +26 -0
- package/dist/core/highlight/lang-sql.js +21 -0
- package/dist/core/highlight/lang-svelte.js +27 -0
- package/dist/core/highlight/lang-swift.js +28 -0
- package/dist/core/highlight/lang-tsx.js +35 -0
- package/dist/core/highlight/lang-typescript.js +31 -0
- package/dist/core/highlight/lang-vue.js +29 -0
- package/dist/core/highlight/lang-wasm.js +22 -0
- package/dist/core/highlight/lang-xml.js +12 -0
- package/dist/core/highlight/lang-yaml.js +14 -0
- package/dist/core/highlight/registry.js +99 -0
- package/dist/core/logger/LoggerCore.js +626 -0
- package/dist/core/logger/index.js +10 -0
- package/dist/core/logger/types.js +29 -0
- package/dist/core/markdown/index.js +20 -0
- package/dist/core/markdown/parser.d.ts +2 -0
- package/dist/core/markdown/parser.d.ts.map +1 -1
- package/dist/core/markdown/parser.js +376 -0
- package/dist/core/markdown/plugins.d.ts +2 -1
- package/dist/core/markdown/plugins.d.ts.map +1 -1
- package/dist/core/markdown/plugins.js +755 -0
- package/dist/core/markdown/types.d.ts +5 -0
- package/dist/core/markdown/types.d.ts.map +1 -1
- package/dist/core/markdown/types.js +7 -0
- package/dist/core/router/index.js +244 -0
- package/dist/core/styles.js +44 -0
- package/dist/core/types.d.ts +52 -3
- package/dist/core/types.d.ts.map +1 -1
- package/dist/core/types.js +1 -0
- package/dist/index.d.ts +9 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +3695 -1622
- package/dist/index.js.map +1 -1
- package/dist/index.umd.js +1844 -758
- package/dist/index.umd.js.map +1 -1
- package/dist/styles/aithe-ui.d.ts +23 -0
- package/dist/styles/aithe-ui.d.ts.map +1 -1
- package/dist/styles/aithe-ui.js +185 -0
- package/dist/styles/global.css.d.ts +1 -1
- package/dist/styles/global.css.d.ts.map +1 -1
- package/dist/styles/global.css.js +119 -0
- package/dist/styles/i18n/index.js +206 -0
- package/dist/styles/i18n/locales/de-DE.d.ts.map +1 -1
- package/dist/styles/i18n/locales/de-DE.js +151 -0
- package/dist/styles/i18n/locales/en-US.d.ts.map +1 -1
- package/dist/styles/i18n/locales/en-US.js +160 -0
- package/dist/styles/i18n/locales/es-ES.d.ts.map +1 -1
- package/dist/styles/i18n/locales/es-ES.js +151 -0
- package/dist/styles/i18n/locales/fr-FR.d.ts.map +1 -1
- package/dist/styles/i18n/locales/fr-FR.js +151 -0
- package/dist/styles/i18n/locales/index.js +14 -0
- package/dist/styles/i18n/locales/ja-JP.d.ts.map +1 -1
- package/dist/styles/i18n/locales/ja-JP.js +151 -0
- package/dist/styles/i18n/locales/ko-KR.d.ts.map +1 -1
- package/dist/styles/i18n/locales/ko-KR.js +151 -0
- package/dist/styles/i18n/locales/pt-BR.d.ts.map +1 -1
- package/dist/styles/i18n/locales/pt-BR.js +151 -0
- package/dist/styles/i18n/locales/zh-CN.d.ts.map +1 -1
- package/dist/styles/i18n/locales/zh-CN.js +160 -0
- package/dist/styles/i18n/locales/zh-HK.d.ts.map +1 -1
- package/dist/styles/i18n/locales/zh-HK.js +151 -0
- package/dist/styles/i18n/locales/zh-TW.d.ts.map +1 -1
- package/dist/styles/i18n/locales/zh-TW.js +151 -0
- package/dist/styles/layout/index.js +88 -0
- package/dist/styles/mixins.js +43 -0
- package/dist/styles/shadow/cyber.js +19 -0
- package/dist/styles/shadow/deep.js +19 -0
- package/dist/styles/shadow/diffuse.js +19 -0
- package/dist/styles/shadow/flat.js +19 -0
- package/dist/styles/shadow/glassmorphism.js +19 -0
- package/dist/styles/shadow/index.js +129 -0
- package/dist/styles/shadow/neumorphism.js +21 -0
- package/dist/styles/shadow/retro.js +19 -0
- package/dist/styles/shadow/sharp-business.js +19 -0
- package/dist/styles/shadow/skeuomorphic.js +21 -0
- package/dist/styles/shape/chamfer.js +19 -0
- package/dist/styles/shape/circle.js +19 -0
- package/dist/styles/shape/index.js +174 -0
- package/dist/styles/shape/organic.js +19 -0
- package/dist/styles/shape/pill.js +19 -0
- package/dist/styles/shape/rounded.js +21 -0
- package/dist/styles/shape/rounder.js +19 -0
- package/dist/styles/shape/sharp.js +19 -0
- package/dist/styles/shape/smooth.js +19 -0
- package/dist/styles/theme/aliyun.d.ts +1 -1
- package/dist/styles/theme/aliyun.d.ts.map +1 -1
- package/dist/styles/theme/aliyun.js +102 -0
- package/dist/styles/theme/amber.d.ts +1 -1
- package/dist/styles/theme/amber.d.ts.map +1 -1
- package/dist/styles/theme/amber.js +101 -0
- package/dist/styles/theme/blue.d.ts +1 -1
- package/dist/styles/theme/blue.d.ts.map +1 -1
- package/dist/styles/theme/blue.js +101 -0
- package/dist/styles/theme/charcoal.d.ts +1 -1
- package/dist/styles/theme/charcoal.d.ts.map +1 -1
- package/dist/styles/theme/charcoal.js +106 -0
- package/dist/styles/theme/cyan.d.ts +1 -1
- package/dist/styles/theme/cyan.d.ts.map +1 -1
- package/dist/styles/theme/cyan.js +96 -0
- package/dist/styles/theme/dark.d.ts +1 -1
- package/dist/styles/theme/dark.d.ts.map +1 -1
- package/dist/styles/theme/dark.js +106 -0
- package/dist/styles/theme/ebony.d.ts +1 -1
- package/dist/styles/theme/ebony.d.ts.map +1 -1
- package/dist/styles/theme/ebony.js +106 -0
- package/dist/styles/theme/festive.d.ts +1 -1
- package/dist/styles/theme/festive.d.ts.map +1 -1
- package/dist/styles/theme/festive.js +101 -0
- package/dist/styles/theme/graphite.d.ts +1 -1
- package/dist/styles/theme/graphite.d.ts.map +1 -1
- package/dist/styles/theme/graphite.js +106 -0
- package/dist/styles/theme/gray.d.ts +1 -1
- package/dist/styles/theme/gray.d.ts.map +1 -1
- package/dist/styles/theme/gray.js +101 -0
- package/dist/styles/theme/huawei.d.ts +1 -1
- package/dist/styles/theme/huawei.d.ts.map +1 -1
- package/dist/styles/theme/huawei.js +102 -0
- package/dist/styles/theme/index.d.ts +1 -1
- package/dist/styles/theme/index.d.ts.map +1 -1
- package/dist/styles/theme/index.js +276 -0
- package/dist/styles/theme/indigo.d.ts +1 -1
- package/dist/styles/theme/indigo.d.ts.map +1 -1
- package/dist/styles/theme/indigo.js +101 -0
- package/dist/styles/theme/ink.d.ts +1 -1
- package/dist/styles/theme/ink.d.ts.map +1 -1
- package/dist/styles/theme/ink.js +106 -0
- package/dist/styles/theme/light.d.ts +1 -1
- package/dist/styles/theme/light.d.ts.map +1 -1
- package/dist/styles/theme/light.js +102 -0
- package/dist/styles/theme/midnight.d.ts +1 -1
- package/dist/styles/theme/midnight.d.ts.map +1 -1
- package/dist/styles/theme/midnight.js +106 -0
- package/dist/styles/theme/navy.d.ts +1 -1
- package/dist/styles/theme/navy.d.ts.map +1 -1
- package/dist/styles/theme/navy.js +106 -0
- package/dist/styles/theme/obsidian.d.ts +1 -1
- package/dist/styles/theme/obsidian.d.ts.map +1 -1
- package/dist/styles/theme/obsidian.js +106 -0
- package/dist/styles/theme/onyx.d.ts +1 -1
- package/dist/styles/theme/onyx.d.ts.map +1 -1
- package/dist/styles/theme/onyx.js +106 -0
- package/dist/styles/theme/orange.d.ts +1 -1
- package/dist/styles/theme/orange.d.ts.map +1 -1
- package/dist/styles/theme/orange.js +101 -0
- package/dist/styles/theme/pink.d.ts +1 -1
- package/dist/styles/theme/pink.d.ts.map +1 -1
- package/dist/styles/theme/pink.js +101 -0
- package/dist/styles/theme/purple.d.ts +1 -1
- package/dist/styles/theme/purple.d.ts.map +1 -1
- package/dist/styles/theme/purple.js +101 -0
- package/dist/styles/theme/raisin.d.ts +1 -1
- package/dist/styles/theme/raisin.d.ts.map +1 -1
- package/dist/styles/theme/raisin.js +106 -0
- package/dist/styles/theme/slate.d.ts +1 -1
- package/dist/styles/theme/slate.d.ts.map +1 -1
- package/dist/styles/theme/slate.js +106 -0
- package/dist/styles/theme/teal.d.ts +1 -1
- package/dist/styles/theme/teal.d.ts.map +1 -1
- package/dist/styles/theme/teal.js +101 -0
- package/dist/styles/theme/tianyi.d.ts +1 -1
- package/dist/styles/theme/tianyi.d.ts.map +1 -1
- package/dist/styles/theme/tianyi.js +102 -0
- package/dist/styles/types.js +1 -0
- package/dist/styles/typo/business.js +34 -0
- package/dist/styles/typo/compact.js +34 -0
- package/dist/styles/typo/index.js +99 -0
- package/dist/styles/typo/luxury.js +34 -0
- package/dist/styles/typo/minimal.js +34 -0
- package/dist/types/index.js +2 -0
- package/dist/utils/dom.js +51 -0
- package/dist/utils/events.js +32 -0
- package/dist/utils/icon.js +176 -0
- package/dist/utils/index.js +4 -0
- package/dist/utils/utils.d.ts +5 -5
- package/dist/utils/utils.js +89 -0
- package/dist/utils/validation.js +52 -0
- package/docs/api/basic/button.md +9 -6
- package/docs/api/basic/tag.md +24 -17
- package/docs/api/data/box-table.md +73 -0
- package/docs/api/data/dropdown.md +3 -2
- package/docs/api/data/metrics.md +2 -0
- package/docs/api/data/table-column.md +37 -23
- package/docs/api/data/table.md +158 -44
- package/docs/api/data/tabs.md +46 -1
- package/docs/api/data/tree-menu.md +55 -2
- package/docs/api/display/autoview.md +277 -0
- package/docs/api/display/box.md +66 -0
- package/docs/api/display/brief-box.md +73 -0
- package/docs/api/display/desc-item.md +57 -0
- package/docs/api/display/desc.md +246 -0
- package/docs/api/display/detail-box.md +75 -0
- package/docs/api/display/mini-box.md +100 -0
- package/docs/api/display/profile.md +92 -0
- package/docs/api/feedback/popover.md +10 -10
- package/docs/api/feedback/tooltip.md +14 -14
- package/docs/api/form/autoform-item.md +115 -0
- package/docs/api/form/autoform.md +7 -3
- package/docs/api/form/combobox.md +27 -7
- package/docs/api/form/select.md +50 -28
- package/docs/api/framework/log-panel.md +46 -0
- package/docs/api/framework/sidebar.md +3 -2
- package/docs/api/summary.md +46 -35
- package/docs/api/theme/theme-switch.md +1 -1
- package/docs/autoform.md +14 -33
- package/docs/changelog/CHANGELOG.md +155 -0
- package/docs/changelog/VERSION_26.3.1.md +966 -0
- package/docs/changelog/VERSION_26.3.2.md +852 -0
- package/docs/datahub.md +4 -1
- package/docs/filter.md +332 -0
- package/docs/framework-integration.md +2 -2
- package/docs/guide.md +72 -6
- package/docs/i18n.md +2 -4
- package/docs/issue/26.3.1/issue_26.3.1.0.md +84 -0
- package/docs/issue/26.3.1/issue_26.3.1.1.md +72 -0
- package/docs/issue/26.3.1/issue_26.3.1.2.md +75 -0
- package/docs/issue/26.3.1/issue_26.3.1.3.md +78 -0
- package/docs/issue/26.3.1/issue_26.3.1.4.md +113 -0
- package/docs/issue/26.3.1/issue_26.3.1.5.md +142 -0
- package/docs/issue/26.3.1/issue_26.3.1.6.md +100 -0
- package/docs/issue/26.3.1/issue_26.3.1.7.md +78 -0
- package/docs/issue/26.3.2/issue_26.3.2.1.md +46 -0
- package/docs/issue/26.3.2/issue_26.3.2.2.md +82 -0
- package/docs/issue/26.3.2/issue_26.3.2.3.md +57 -0
- package/docs/issue/26.3.2/issue_26.3.2.4.md +43 -0
- package/docs/issue/AGENTS.md +24 -3
- package/docs/markdown.md +2 -2
- package/docs/quickstart.md +5 -5
- package/docs/theming.md +5 -4
- package/package.json +5 -2
- package/dist/components/navigation/dropdown.d.ts +0 -56
- package/dist/components/navigation/dropdown.d.ts.map +0 -1
- /package/docs/issue/{issue_26.2.2.1.md → 26.2.2/issue_26.2.2.1.md} +0 -0
- /package/docs/issue/{issue_26.2.2.2.md → 26.2.2/issue_26.2.2.2.md} +0 -0
- /package/docs/issue/{issue_26.2.2.3.md → 26.2.2/issue_26.2.2.3.md} +0 -0
- /package/docs/issue/{issue_26.2.2.4.md → 26.2.2/issue_26.2.2.4.md} +0 -0
- /package/docs/issue/{issue_26.2.3.1.md → 26.2.3/issue_26.2.3.1.md} +0 -0
- /package/docs/issue/{issue_26.2.3.10.md → 26.2.3/issue_26.2.3.10.md} +0 -0
- /package/docs/issue/{issue_26.2.3.11.md → 26.2.3/issue_26.2.3.11.md} +0 -0
- /package/docs/issue/{issue_26.2.3.12.md → 26.2.3/issue_26.2.3.12.md} +0 -0
- /package/docs/issue/{issue_26.2.3.13.md → 26.2.3/issue_26.2.3.13.md} +0 -0
- /package/docs/issue/{issue_26.2.3.14.md → 26.2.3/issue_26.2.3.14.md} +0 -0
- /package/docs/issue/{issue_26.2.3.15.md → 26.2.3/issue_26.2.3.15.md} +0 -0
- /package/docs/issue/{issue_26.2.3.16.md → 26.2.3/issue_26.2.3.16.md} +0 -0
- /package/docs/issue/{issue_26.2.3.2.md → 26.2.3/issue_26.2.3.2.md} +0 -0
- /package/docs/issue/{issue_26.2.3.3.md → 26.2.3/issue_26.2.3.3.md} +0 -0
- /package/docs/issue/{issue_26.2.3.4.md → 26.2.3/issue_26.2.3.4.md} +0 -0
- /package/docs/issue/{issue_26.2.3.5.md → 26.2.3/issue_26.2.3.5.md} +0 -0
- /package/docs/issue/{issue_26.2.3.6.md → 26.2.3/issue_26.2.3.6.md} +0 -0
- /package/docs/issue/{issue_26.2.3.7.md → 26.2.3/issue_26.2.3.7.md} +0 -0
- /package/docs/issue/{issue_26.2.3.8.md → 26.2.3/issue_26.2.3.8.md} +0 -0
- /package/docs/issue/{issue_26.2.3.9.md → 26.2.3/issue_26.2.3.9.md} +0 -0
|
@@ -0,0 +1,520 @@
|
|
|
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
|
+
// forceCache 选项可无视 URL 命名约定强制启用缓存
|
|
199
|
+
// forceCache option bypasses URL naming convention to force-enable caching
|
|
200
|
+
const cacheable = this.isCacheable(strategy, merged);
|
|
201
|
+
if (cacheable && !merged.skipCache) {
|
|
202
|
+
const cached = cacheGet(fullUrl, data);
|
|
203
|
+
if (cached) {
|
|
204
|
+
// 缓存命中:先走全局响应拦截器,再走统一响应处理(与实际请求路径保持一致)
|
|
205
|
+
// Cache hit: apply global response interceptor first, then unified response handling
|
|
206
|
+
// (consistent with the real-request path)
|
|
207
|
+
this.applyResponseInterceptor(cached, req);
|
|
208
|
+
return this.handleResponse(cached, requestStyle, traceId, fullUrl);
|
|
209
|
+
}
|
|
210
|
+
}
|
|
211
|
+
// 实际执行请求的内部函数 / Internal function that actually executes the request
|
|
212
|
+
const execute = () => this.executeRequest(req, merged, requestStyle, traceId, fullUrl, data, cacheable);
|
|
213
|
+
// 12. 去重处理:查询类请求自动合并相同并发请求
|
|
214
|
+
// Dedup: automatically merge identical concurrent query requests
|
|
215
|
+
// forceDedup 选项可无视 URL 命名约定强制启用去重
|
|
216
|
+
// forceDedup option bypasses URL naming convention to force-enable dedup
|
|
217
|
+
const dedupable = this.isDedupable(strategy, merged);
|
|
218
|
+
if (dedupable && !merged.skipDedup) {
|
|
219
|
+
return dedupTrack(fullUrl, data, execute);
|
|
220
|
+
}
|
|
221
|
+
// 13. 幂等防护:提交类请求阻止重复提交
|
|
222
|
+
// Idempotent guard: block duplicate submissions for submit requests
|
|
223
|
+
// 当 forceDedup 或 forceCache 为 true 时跳过幂等防护,避免并发查询请求被误判为重复提交
|
|
224
|
+
// Skip idempotent guard when forceDedup or forceCache is true, preventing concurrent
|
|
225
|
+
// query requests from being misjudged as duplicate submissions
|
|
226
|
+
if (this.shouldGuardIdempotent(strategy, merged)) {
|
|
227
|
+
return idempotentGuard(fullUrl, data, execute);
|
|
228
|
+
}
|
|
229
|
+
// 14. 无需中间件,直接执行 / No middleware needed, execute directly
|
|
230
|
+
return execute();
|
|
231
|
+
}
|
|
232
|
+
/**
|
|
233
|
+
* 应用全局响应拦截器(命中缓存与实际请求路径共用)。
|
|
234
|
+
* Apply global response interceptor (shared by cache-hit and real-request paths).
|
|
235
|
+
*/
|
|
236
|
+
applyResponseInterceptor(res, req) {
|
|
237
|
+
if (!this.config.onResponse)
|
|
238
|
+
return;
|
|
239
|
+
const intercepted = this.config.onResponse(res, req);
|
|
240
|
+
if (intercepted)
|
|
241
|
+
Object.assign(res, intercepted);
|
|
242
|
+
}
|
|
243
|
+
/**
|
|
244
|
+
* 实际执行请求:适配器调用 + 响应拦截 + HTTP 错误处理 + 统一响应处理 + 缓存写入。
|
|
245
|
+
* Execute the request: adapter call + response interceptor + HTTP error handling +
|
|
246
|
+
* unified response handling + cache write.
|
|
247
|
+
*/
|
|
248
|
+
async executeRequest(req, merged, requestStyle, traceId, fullUrl, data, cacheable) {
|
|
249
|
+
// 标记 loading 开始 / Mark loading start
|
|
250
|
+
loadingStart(fullUrl);
|
|
251
|
+
try {
|
|
252
|
+
// 7. 解析并调用适配器 / Resolve and call adapter
|
|
253
|
+
const adapter = this.resolveAdapter(merged);
|
|
254
|
+
const res = await adapter.request(req);
|
|
255
|
+
// 8. 响应拦截器 / Response interceptor
|
|
256
|
+
this.applyResponseInterceptor(res, req);
|
|
257
|
+
// 9. HTTP 传输层错误处理:HTTP 非 2xx 时,优先用 APIStyle 解析响应体
|
|
258
|
+
// HTTP transport error: when !res.ok, try APIStyle first, fall back to transport error
|
|
259
|
+
if (!res.ok) {
|
|
260
|
+
throw this.buildHttpError(res, requestStyle, traceId, fullUrl);
|
|
261
|
+
}
|
|
262
|
+
// 10. 统一响应处理:APIStyle 转换 + isSuccess 业务校验 + 返回业务数据
|
|
263
|
+
// Unified response handling: APIStyle transform + isSuccess check + return business data
|
|
264
|
+
// 注意:handleResponse 内部会抛出 DataHubError,与原逻辑保持一致
|
|
265
|
+
// Note: handleResponse throws DataHubError on business failure, consistent with original logic
|
|
266
|
+
const handled = this.handleResponse(res, requestStyle, traceId, fullUrl);
|
|
267
|
+
// 11. 缓存写入:查询类请求成功后写入缓存(写入原始 res,保持现有行为)
|
|
268
|
+
// Cache write: write to cache after successful query request (write raw res, keep existing behavior)
|
|
269
|
+
if (cacheable && !merged.skipCache) {
|
|
270
|
+
const ttl = merged.cacheTTL ?? DEFAULT_CONFIG.defaultCacheTTL;
|
|
271
|
+
cacheSet(fullUrl, data, res, ttl);
|
|
272
|
+
}
|
|
273
|
+
// 返回经 handleResponse 处理后的响应(data 已替换为业务数据)
|
|
274
|
+
// Return the response processed by handleResponse (data replaced with business data)
|
|
275
|
+
return handled;
|
|
276
|
+
}
|
|
277
|
+
catch (err) {
|
|
278
|
+
// 统一错误处理:将各类异常转换为 DataHubError
|
|
279
|
+
// Unified error handling: convert all exceptions to DataHubError
|
|
280
|
+
const error = this.normalizeError(err, fullUrl, traceId);
|
|
281
|
+
if (this.config.onError) {
|
|
282
|
+
this.config.onError(error, req);
|
|
283
|
+
}
|
|
284
|
+
throw error;
|
|
285
|
+
}
|
|
286
|
+
finally {
|
|
287
|
+
// 无论成功失败,标记 loading 结束 / Mark loading end regardless of success or failure
|
|
288
|
+
loadingEnd(fullUrl);
|
|
289
|
+
}
|
|
290
|
+
}
|
|
291
|
+
/**
|
|
292
|
+
* 构造 HTTP 传输层错误:优先用 APIStyle 解析响应体,回退到 transport error。
|
|
293
|
+
* Build HTTP transport error: try APIStyle first, fall back to transport error.
|
|
294
|
+
*/
|
|
295
|
+
buildHttpError(res, requestStyle, traceId, fullUrl) {
|
|
296
|
+
if (requestStyle) {
|
|
297
|
+
const result = requestStyle.onResponse(res);
|
|
298
|
+
return new DataHubErrorClass({
|
|
299
|
+
code: result.code ?? `HTTP_${res.status}`,
|
|
300
|
+
message: result.message || `HTTP request failed with status ${res.status}`,
|
|
301
|
+
trace: traceId,
|
|
302
|
+
status: res.status,
|
|
303
|
+
url: fullUrl,
|
|
304
|
+
data: res.data,
|
|
305
|
+
});
|
|
306
|
+
}
|
|
307
|
+
return this.createTransportError(res, traceId, fullUrl);
|
|
308
|
+
}
|
|
309
|
+
/**
|
|
310
|
+
* 是否可缓存:strategy 默认判定,或 forceCache 强制启用。
|
|
311
|
+
* Whether cacheable: by strategy, or force-enabled by forceCache.
|
|
312
|
+
*/
|
|
313
|
+
isCacheable(strategy, options) {
|
|
314
|
+
return strategy.cacheable || options.forceCache === true;
|
|
315
|
+
}
|
|
316
|
+
/**
|
|
317
|
+
* 是否可去重:strategy 默认判定,或 forceDedup 强制启用。
|
|
318
|
+
* Whether dedupable: by strategy, or force-enabled by forceDedup.
|
|
319
|
+
*/
|
|
320
|
+
isDedupable(strategy, options) {
|
|
321
|
+
return strategy.dedupable || options.forceDedup === true;
|
|
322
|
+
}
|
|
323
|
+
/**
|
|
324
|
+
* 是否需要幂等防护:strategy 判定为提交类、未跳过、且未被 force 选项豁免。
|
|
325
|
+
* Whether idempotent guard applies: strategy says submit, not skipped, and not
|
|
326
|
+
* exempted by forceDedup/forceCache (which mark the request as a query).
|
|
327
|
+
*/
|
|
328
|
+
shouldGuardIdempotent(strategy, options) {
|
|
329
|
+
if (!strategy.idempotent || options.skipIdempotent)
|
|
330
|
+
return false;
|
|
331
|
+
const forceQuery = options.forceDedup === true || options.forceCache === true;
|
|
332
|
+
return !forceQuery;
|
|
333
|
+
}
|
|
334
|
+
/**
|
|
335
|
+
* 统一响应处理:APIStyle 转换 + isSuccess 业务校验 + 返回业务数据
|
|
336
|
+
* Unified response handling: APIStyle transform + isSuccess check + return business data
|
|
337
|
+
*
|
|
338
|
+
* 抽取该方法的目的:让「实际请求路径」与「缓存命中路径」走完全一致的响应处理逻辑,
|
|
339
|
+
* 避免缓存命中时跳过 isSuccess 校验或丢失 code/message 等字段。
|
|
340
|
+
*
|
|
341
|
+
* This method is extracted so that both the real-request path and the cache-hit path
|
|
342
|
+
* share identical response handling, avoiding skipped isSuccess checks or lost
|
|
343
|
+
* code/message fields when cache hits.
|
|
344
|
+
*
|
|
345
|
+
* @param res - 适配器返回的原始响应 / Raw response from adapter
|
|
346
|
+
* @param requestStyle - 解析后的 APIStyle / Resolved APIStyle
|
|
347
|
+
* @param traceId - 链路追踪 ID / Trace ID
|
|
348
|
+
* @param fullUrl - 完整请求 URL / Full request URL
|
|
349
|
+
* @returns 业务数据已替换的响应 / Response with business data replaced
|
|
350
|
+
*/
|
|
351
|
+
handleResponse(res, requestStyle, traceId, fullUrl) {
|
|
352
|
+
// 无 APIStyle:直接返回原始响应,不做业务转换 / No APIStyle: return raw response
|
|
353
|
+
if (!requestStyle)
|
|
354
|
+
return res;
|
|
355
|
+
// 使用 APIStyle 解析业务结果(code/message/data)
|
|
356
|
+
// Use APIStyle to parse business result (code/message/data)
|
|
357
|
+
const result = requestStyle.onResponse(res);
|
|
358
|
+
// 业务错误处理:根据风格自定义的成功判断
|
|
359
|
+
// Business error handling: success check defined by the style
|
|
360
|
+
if (!requestStyle.isSuccess(result)) {
|
|
361
|
+
throw new DataHubErrorClass({
|
|
362
|
+
code: result.code,
|
|
363
|
+
message: result.message || `error: ${result.code}`,
|
|
364
|
+
trace: traceId,
|
|
365
|
+
status: res.status,
|
|
366
|
+
url: fullUrl,
|
|
367
|
+
});
|
|
368
|
+
}
|
|
369
|
+
// 返回时 data 替换为业务数据 / Replace data with business data in response
|
|
370
|
+
return { ...res, data: result.data };
|
|
371
|
+
}
|
|
372
|
+
// ─── 状态清理方法 / State Cleanup Methods ─────────────────────
|
|
373
|
+
/** 清空所有缓存 / Clear all cache */
|
|
374
|
+
clearCache() {
|
|
375
|
+
cacheClear();
|
|
376
|
+
}
|
|
377
|
+
/** 清空所有去重记录 / Clear all dedup records */
|
|
378
|
+
clearDedup() {
|
|
379
|
+
dedupClear();
|
|
380
|
+
}
|
|
381
|
+
/** 清空所有幂等锁 / Clear all idempotent locks */
|
|
382
|
+
clearIdempotent() {
|
|
383
|
+
idempotentClear();
|
|
384
|
+
}
|
|
385
|
+
// ─── 配置修改方法 / Configuration Modification Methods ─────────
|
|
386
|
+
/**
|
|
387
|
+
* 设置请求拦截器 / Set request interceptor
|
|
388
|
+
*/
|
|
389
|
+
setRequestInterceptor(handler) {
|
|
390
|
+
this.config.onRequest = handler;
|
|
391
|
+
}
|
|
392
|
+
/**
|
|
393
|
+
* 设置响应拦截器 / Set response interceptor
|
|
394
|
+
*/
|
|
395
|
+
setResponseInterceptor(handler) {
|
|
396
|
+
this.config.onResponse = handler;
|
|
397
|
+
}
|
|
398
|
+
/**
|
|
399
|
+
* 设置全局错误回调 / Set global error handler
|
|
400
|
+
*/
|
|
401
|
+
setErrorHandler(handler) {
|
|
402
|
+
this.config.onError = handler;
|
|
403
|
+
}
|
|
404
|
+
/**
|
|
405
|
+
* 更新全局配置(合并方式) / Update global config (merge mode)
|
|
406
|
+
*/
|
|
407
|
+
updateConfig(config) {
|
|
408
|
+
this.config = { ...this.config, ...config };
|
|
409
|
+
}
|
|
410
|
+
/**
|
|
411
|
+
* 获取当前配置(只读副本) / Get current config (read-only copy)
|
|
412
|
+
*/
|
|
413
|
+
getConfig() {
|
|
414
|
+
return { ...this.config };
|
|
415
|
+
}
|
|
416
|
+
// ─── 私有方法 / Private Methods ───────────────────────────────
|
|
417
|
+
/**
|
|
418
|
+
* 解析适配器 / Resolve adapter
|
|
419
|
+
*/
|
|
420
|
+
resolveAdapter(options) {
|
|
421
|
+
if (this.config.forceMock || options.mock) {
|
|
422
|
+
return this.adapters.get('mock') ?? this.adapters.get(DEFAULT_CONFIG.defaultAdapter);
|
|
423
|
+
}
|
|
424
|
+
const name = options.adapter ?? this.config.defaultAdapter ?? DEFAULT_CONFIG.defaultAdapter;
|
|
425
|
+
const adapter = this.adapters.get(name);
|
|
426
|
+
if (!adapter) {
|
|
427
|
+
throw new DataHubErrorClass({
|
|
428
|
+
code: 'AdapterNotFound',
|
|
429
|
+
message: `Adapter "${name}" is not registered`,
|
|
430
|
+
});
|
|
431
|
+
}
|
|
432
|
+
return adapter;
|
|
433
|
+
}
|
|
434
|
+
/**
|
|
435
|
+
* 拼接完整 URL / Resolve full URL
|
|
436
|
+
*/
|
|
437
|
+
resolveUrl(url) {
|
|
438
|
+
if (this.config.baseURL && !url.startsWith('http')) {
|
|
439
|
+
let base = this.config.baseURL;
|
|
440
|
+
while (base.endsWith('/'))
|
|
441
|
+
base = base.slice(0, -1);
|
|
442
|
+
let path = url;
|
|
443
|
+
while (path.startsWith('/'))
|
|
444
|
+
path = path.slice(1);
|
|
445
|
+
return `${base}/${path}`;
|
|
446
|
+
}
|
|
447
|
+
return url;
|
|
448
|
+
}
|
|
449
|
+
/**
|
|
450
|
+
* 合并请求配置 / Merge request options
|
|
451
|
+
*/
|
|
452
|
+
mergeOptions(options) {
|
|
453
|
+
return {
|
|
454
|
+
timeout: DEFAULT_CONFIG.defaultTimeout,
|
|
455
|
+
cacheTTL: DEFAULT_CONFIG.defaultCacheTTL,
|
|
456
|
+
...options,
|
|
457
|
+
};
|
|
458
|
+
}
|
|
459
|
+
/**
|
|
460
|
+
* 生成 traceId / Generate traceId
|
|
461
|
+
*/
|
|
462
|
+
generateTraceId() {
|
|
463
|
+
if (this.config.generateTraceId)
|
|
464
|
+
return this.config.generateTraceId();
|
|
465
|
+
if (typeof crypto !== 'undefined' && typeof crypto.randomUUID === 'function') {
|
|
466
|
+
return crypto.randomUUID();
|
|
467
|
+
}
|
|
468
|
+
const timestamp = (typeof performance === 'undefined' ? Date.now() : performance.now()).toString(36);
|
|
469
|
+
const bytes = new Uint8Array(8);
|
|
470
|
+
if (typeof crypto !== 'undefined' && crypto.getRandomValues) {
|
|
471
|
+
crypto.getRandomValues(bytes);
|
|
472
|
+
}
|
|
473
|
+
const random = Array.from(bytes, (b) => b.toString(16).padStart(2, '0')).join('');
|
|
474
|
+
return timestamp + random;
|
|
475
|
+
}
|
|
476
|
+
/**
|
|
477
|
+
* 根据 HTTP 传输层错误创建 DataHubError / Create DataHubError from HTTP transport error
|
|
478
|
+
*/
|
|
479
|
+
createTransportError(res, traceId, url) {
|
|
480
|
+
return new DataHubErrorClass({
|
|
481
|
+
code: `HTTP_${res.status}`,
|
|
482
|
+
message: `HTTP request failed with status ${res.status}`,
|
|
483
|
+
trace: traceId,
|
|
484
|
+
status: res.status,
|
|
485
|
+
url,
|
|
486
|
+
data: res.data,
|
|
487
|
+
});
|
|
488
|
+
}
|
|
489
|
+
/**
|
|
490
|
+
* 标准化错误:将各类异常统一转换为 DataHubError
|
|
491
|
+
* Normalize errors: convert all exception types to DataHubError uniformly
|
|
492
|
+
*/
|
|
493
|
+
normalizeError(err, url, traceId) {
|
|
494
|
+
if (err instanceof DataHubErrorClass)
|
|
495
|
+
return err;
|
|
496
|
+
if (err instanceof DOMException && err.name === 'AbortError') {
|
|
497
|
+
return new DataHubErrorClass({
|
|
498
|
+
code: 'RequestAborted',
|
|
499
|
+
message: 'Request was aborted',
|
|
500
|
+
trace: traceId,
|
|
501
|
+
url,
|
|
502
|
+
});
|
|
503
|
+
}
|
|
504
|
+
if (err instanceof TypeError) {
|
|
505
|
+
return new DataHubErrorClass({
|
|
506
|
+
code: 'NetworkError',
|
|
507
|
+
message: err.message ?? 'Network error',
|
|
508
|
+
trace: traceId,
|
|
509
|
+
url,
|
|
510
|
+
});
|
|
511
|
+
}
|
|
512
|
+
const message = err instanceof Error ? err.message : String(err);
|
|
513
|
+
return new DataHubErrorClass({
|
|
514
|
+
code: 'UnknownError',
|
|
515
|
+
message,
|
|
516
|
+
trace: traceId,
|
|
517
|
+
url,
|
|
518
|
+
});
|
|
519
|
+
}
|
|
520
|
+
}
|
|
@@ -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();
|
|
@@ -74,10 +74,30 @@ export interface DataHubRequestOptions {
|
|
|
74
74
|
skipDedup?: boolean;
|
|
75
75
|
/** 是否跳过幂等防护,允许同一提交重复执行 / Whether to skip idempotent guard, allowing duplicate submissions */
|
|
76
76
|
skipIdempotent?: boolean;
|
|
77
|
+
/**
|
|
78
|
+
* 是否强制启用去重:为 true 时无视 URL 命名约定,对本请求启用并发去重。
|
|
79
|
+
* 适用于 URL 不以 query/list/get 结尾、但语义为查询且可能被并发调用的 GET 请求。
|
|
80
|
+
* Force enable dedup: when true, bypasses URL naming convention and enables
|
|
81
|
+
* concurrent dedup for this request. Applicable to GET requests whose URL does
|
|
82
|
+
* not end with query/list/get but are semantically queries and may be called concurrently.
|
|
83
|
+
*/
|
|
84
|
+
forceDedup?: boolean;
|
|
85
|
+
/**
|
|
86
|
+
* 是否强制启用缓存:为 true 时无视 URL 命名约定,对本请求启用结果缓存。
|
|
87
|
+
* 配合 cacheTTL 控制有效期。适用于 URL 不以 query/list/get 结尾、
|
|
88
|
+
* 但语义为查询且结果可短期复用的 GET 请求。
|
|
89
|
+
* Force enable cache: when true, bypasses URL naming convention and enables
|
|
90
|
+
* result caching for this request. Use with cacheTTL to control TTL.
|
|
91
|
+
* Applicable to GET requests whose URL does not end with query/list/get
|
|
92
|
+
* but are semantically queries with short-term reusable results.
|
|
93
|
+
*/
|
|
94
|
+
forceCache?: boolean;
|
|
77
95
|
/** 是否使用 Mock 适配器 / Whether to use the Mock adapter */
|
|
78
96
|
mock?: boolean;
|
|
79
97
|
/** Mock 返回的业务数据 / Mock business data to return */
|
|
80
98
|
mockData?: unknown;
|
|
99
|
+
/** Mock JSON 文件路径,用于加载本地 mock 数据文件 / Mock JSON file path for loading local mock data files */
|
|
100
|
+
mockPath?: string;
|
|
81
101
|
/** Mock 延迟时间(毫秒),模拟网络耗时,默认 300 / Mock delay in ms simulating network latency, default 300 */
|
|
82
102
|
mockDelay?: number;
|
|
83
103
|
/** 手动指定 traceId,不传则自动生成 / Manually specified traceId, auto-generated if omitted */
|
|
@@ -166,6 +186,8 @@ export interface DataHubErrorDetail {
|
|
|
166
186
|
status?: number;
|
|
167
187
|
/** 请求 URL / Request URL */
|
|
168
188
|
url?: string;
|
|
189
|
+
/** 原始响应体 / Raw response body */
|
|
190
|
+
data?: unknown;
|
|
169
191
|
}
|
|
170
192
|
/**
|
|
171
193
|
* DataHub 统一错误类 / DataHub Unified Error Class
|
|
@@ -184,6 +206,8 @@ export declare class DataHubError extends Error {
|
|
|
184
206
|
readonly status?: number;
|
|
185
207
|
/** 请求 URL / Request URL */
|
|
186
208
|
readonly url?: string;
|
|
209
|
+
/** 原始响应体 / Raw response body */
|
|
210
|
+
readonly data?: unknown;
|
|
187
211
|
constructor(detail: DataHubErrorDetail);
|
|
188
212
|
}
|
|
189
213
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/core/datahub/types.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,iGAAiG;AACjG,MAAM,WAAW,qBAAqB;IACpC,qEAAqE;IACrE,GAAG,EAAE,MAAM,CAAC;IACZ,gCAAgC;IAChC,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,wCAAwC;IACxC,OAAO,EAAE,qBAAqB,CAAC;CAChC;AAED;;;;;;;;GAQG;AACH,MAAM,WAAW,sBAAsB,CAAC,CAAC,GAAG,OAAO;IACjD,4EAA4E;IAC5E,EAAE,EAAE,OAAO,CAAC;IACZ,kCAAkC;IAClC,MAAM,EAAE,MAAM,CAAC;IACf,qGAAqG;IACrG,IAAI,EAAE,CAAC,CAAC;IACR,sDAAsD;IACtD,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CAClC;AAED;;;;;;;;;GASG;AACH,MAAM,WAAW,cAAc;IAC7B,6EAA6E;IAC7E,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,sEAAsE;IACtE,OAAO,CAAC,CAAC,GAAG,OAAO,EAAE,GAAG,EAAE,qBAAqB,GAAG,OAAO,CAAC,sBAAsB,CAAC,CAAC,CAAC,CAAC,CAAC;IACrF,wEAAwE;IACxE,KAAK,CAAC,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI,CAAC;CAC3B;AAED,yEAAyE;AACzE,MAAM,WAAW,qBAAqB;IACpC,iFAAiF;IACjF,MAAM,CAAC,EAAE,KAAK,GAAG,MAAM,GAAG,KAAK,GAAG,QAAQ,GAAG,OAAO,CAAC;IACrD,0EAA0E;IAC1E,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACjC,yGAAyG;IACzG,MAAM,CAAC,EAAE,WAAW,CAAC;IACrB,iEAAiE;IACjE,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,mFAAmF;IACnF,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,uEAAuE;IACvE,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,wFAAwF;IACxF,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,6FAA6F;IAC7F,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB,sDAAsD;IACtD,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,kDAAkD;IAClD,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,6FAA6F;IAC7F,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,mFAAmF;IACnF,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,2FAA2F;IAC3F,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,6FAA6F;IAC7F,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;IACvB;;;;;OAKG;IACH,QAAQ,CAAC,EAAE,eAAe,GAAG,MAAM,CAAC;CACrC;AAED,qDAAqD;AACrD,MAAM,MAAM,mBAAmB,GAAG,OAAO,GAAG,QAAQ,CAAC;AAErD,mGAAmG;AACnG,MAAM,WAAW,qBAAqB;IACpC,wCAAwC;IACxC,IAAI,EAAE,mBAAmB,CAAC;IAC1B,oGAAoG;IACpG,SAAS,EAAE,OAAO,CAAC;IACnB,sGAAsG;IACtG,SAAS,EAAE,OAAO,CAAC;IACnB,2GAA2G;IAC3G,UAAU,EAAE,OAAO,CAAC;IACpB,kGAAkG;IAClG,SAAS,EAAE,OAAO,CAAC;CACpB;AAED,kDAAkD;AAClD,MAAM,WAAW,aAAa;IAC5B,+EAA+E;IAC/E,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,iEAAiE;IACjE,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,2EAA2E;IAC3E,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,oEAAoE;IACpE,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,gEAAgE;IAChE,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACjC,yGAAyG;IACzG,eAAe,CAAC,EAAE,MAAM,MAAM,CAAC;IAC/B;;;OAGG;IACH,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB;;;OAGG;IACH,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB;;;;;OAKG;IACH,SAAS,CAAC,EAAE,MAAM,MAAM,CAAC;IACzB;;;;;OAKG;IACH,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,2EAA2E;IAC3E,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,YAAY,EAAE,GAAG,EAAE,qBAAqB,KAAK,IAAI,CAAC;IACpE,wFAAwF;IACxF,SAAS,CAAC,EAAE,CAAC,GAAG,EAAE,qBAAqB,KAAK,qBAAqB,GAAG,IAAI,CAAC;IACzE,0FAA0F;IAC1F,UAAU,CAAC,EAAE,CACX,GAAG,EAAE,sBAAsB,EAC3B,GAAG,EAAE,qBAAqB,KACvB,sBAAsB,GAAG,IAAI,CAAC;CACpC;AAED,8DAA8D;AAC9D,MAAM,WAAW,kBAAkB;IACjC,uBAAuB;IACvB,IAAI,EAAE,MAAM,CAAC;IACb,+BAA+B;IAC/B,OAAO,EAAE,MAAM,CAAC;IAChB,yBAAyB;IACzB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,kCAAkC;IAClC,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,2BAA2B;IAC3B,GAAG,CAAC,EAAE,MAAM,CAAC;
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/core/datahub/types.ts"],"names":[],"mappings":"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"}
|