taro-uno-ui 0.9.0 → 1.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +21 -0
- package/dist/app.config.d.ts +38 -0
- package/dist/app.d.ts +6 -0
- package/dist/components/basic/Button/Button.d.ts +6 -0
- package/dist/components/basic/Button/Button.styles.d.ts +2 -0
- package/dist/components/basic/Button/Button.types.d.ts +74 -0
- package/dist/components/basic/Button/index.d.ts +4 -0
- package/dist/components/basic/Divider/Divider.d.ts +6 -0
- package/dist/components/basic/Divider/Divider.styles.d.ts +87 -0
- package/dist/components/basic/Divider/Divider.types.d.ts +242 -0
- package/dist/components/basic/Divider/index.d.ts +6 -0
- package/dist/components/basic/Icon/Icon.d.ts +5 -0
- package/dist/components/basic/Icon/Icon.data.d.ts +29 -0
- package/dist/components/basic/Icon/Icon.styles.d.ts +61 -0
- package/dist/components/basic/Icon/Icon.types.d.ts +199 -0
- package/dist/components/basic/Icon/IconManager.d.ts +120 -0
- package/dist/components/basic/Icon/index.d.ts +6 -0
- package/dist/components/basic/Text/Text.d.ts +7 -0
- package/dist/components/basic/Text/Text.styles.d.ts +67 -0
- package/dist/components/basic/Text/Text.types.d.ts +274 -0
- package/dist/components/basic/Text/index.d.ts +5 -0
- package/dist/components/basic/Typography/Typography.d.ts +8 -0
- package/dist/components/basic/Typography/Typography.styles.d.ts +83 -0
- package/dist/components/basic/Typography/Typography.types.d.ts +245 -0
- package/dist/components/basic/Typography/index.d.ts +3 -0
- package/dist/components/basic/Video/Video.d.ts +7 -0
- package/dist/components/basic/Video/Video.styles.d.ts +212 -0
- package/dist/components/basic/Video/Video.types.d.ts +447 -0
- package/dist/components/basic/Video/index.d.ts +10 -0
- package/dist/components/basic/index.d.ts +217 -0
- package/dist/components/common/ErrorBoundary.d.ts +19 -0
- package/dist/components/common/LazyComponent.d.ts +78 -0
- package/dist/components/common/ResponsiveContainer.d.ts +23 -0
- package/dist/components/common/ResponsiveGrid.d.ts +44 -0
- package/dist/components/common/SecurityProvider.d.ts +15 -0
- package/dist/components/common/ThemeProvider.d.ts +17 -0
- package/dist/components/common/VirtualList.d.ts +89 -0
- package/dist/components/common/index.d.ts +17 -0
- package/dist/components/display/Avatar/Avatar.d.ts +3 -0
- package/dist/components/display/Avatar/Avatar.styles.d.ts +2 -0
- package/dist/components/display/Avatar/Avatar.types.d.ts +37 -0
- package/dist/components/display/Avatar/index.d.ts +3 -0
- package/dist/components/display/Badge/Badge.d.ts +3 -0
- package/dist/components/display/Badge/Badge.types.d.ts +27 -0
- package/dist/components/display/Badge/index.d.ts +2 -0
- package/dist/components/display/Calendar/Calendar.d.ts +5 -0
- package/dist/components/display/Calendar/Calendar.styles.d.ts +2 -0
- package/dist/components/display/Calendar/Calendar.types.d.ts +87 -0
- package/dist/components/display/Calendar/index.d.ts +3 -0
- package/dist/components/display/Card/Card.d.ts +3 -0
- package/dist/components/display/Card/Card.styles.d.ts +1 -0
- package/dist/components/display/Card/Card.types.d.ts +52 -0
- package/dist/components/display/Card/index.d.ts +3 -0
- package/dist/components/display/Carousel/Carousel.d.ts +5 -0
- package/dist/components/display/Carousel/Carousel.styles.d.ts +2 -0
- package/dist/components/display/Carousel/Carousel.types.d.ts +55 -0
- package/dist/components/display/Carousel/index.d.ts +3 -0
- package/dist/components/display/List/List.d.ts +4 -0
- package/dist/components/display/List/List.styles.d.ts +1 -0
- package/dist/components/display/List/List.types.d.ts +64 -0
- package/dist/components/display/List/index.d.ts +3 -0
- package/dist/components/display/Rate/Rate.d.ts +6 -0
- package/dist/components/display/Rate/Rate.styles.d.ts +100 -0
- package/dist/components/display/Rate/Rate.types.d.ts +105 -0
- package/dist/components/display/Rate/index.d.ts +17 -0
- package/dist/components/display/Table/Table.d.ts +7 -0
- package/dist/components/display/Table/Table.styles.d.ts +84 -0
- package/dist/components/display/Table/Table.types.d.ts +251 -0
- package/dist/components/display/Table/index.d.ts +4 -0
- package/dist/components/display/Tag/Tag.d.ts +5 -0
- package/dist/components/display/Tag/Tag.styles.d.ts +2 -0
- package/dist/components/display/Tag/Tag.types.d.ts +47 -0
- package/dist/components/display/Tag/index.d.ts +3 -0
- package/dist/components/display/Timeline/Timeline.d.ts +16 -0
- package/dist/components/display/Timeline/Timeline.styles.d.ts +2 -0
- package/dist/components/display/Timeline/Timeline.types.d.ts +53 -0
- package/dist/components/display/Timeline/index.d.ts +3 -0
- package/dist/components/display/index.d.ts +67 -0
- package/dist/components/feedback/Loading/Loading.d.ts +4 -0
- package/dist/components/feedback/Loading/Loading.styles.d.ts +2 -0
- package/dist/components/feedback/Loading/Loading.types.d.ts +29 -0
- package/dist/components/feedback/Loading/index.d.ts +4 -0
- package/dist/components/feedback/Message/Message.d.ts +4 -0
- package/dist/components/feedback/Message/Message.styles.d.ts +34 -0
- package/dist/components/feedback/Message/Message.types.d.ts +33 -0
- package/dist/components/feedback/Message/index.d.ts +4 -0
- package/dist/components/feedback/Modal/Modal.d.ts +8 -0
- package/dist/components/feedback/Modal/Modal.styles.d.ts +18 -0
- package/dist/components/feedback/Modal/Modal.types.d.ts +143 -0
- package/dist/components/feedback/Modal/index.d.ts +3 -0
- package/dist/components/feedback/Notification/Notification.d.ts +4 -0
- package/dist/components/feedback/Notification/Notification.styles.d.ts +88 -0
- package/dist/components/feedback/Notification/Notification.types.d.ts +279 -0
- package/dist/components/feedback/Notification/NotificationManager.d.ts +4 -0
- package/dist/components/feedback/Notification/index.d.ts +25 -0
- package/dist/components/feedback/Progress/Progress.d.ts +4 -0
- package/dist/components/feedback/Progress/Progress.styles.d.ts +261 -0
- package/dist/components/feedback/Progress/Progress.test.simple.d.ts +2 -0
- package/dist/components/feedback/Progress/Progress.types.d.ts +147 -0
- package/dist/components/feedback/Progress/index.d.ts +3 -0
- package/dist/components/feedback/Progress/utils/animation.d.ts +55 -0
- package/dist/components/feedback/Progress/utils/index.d.ts +2 -0
- package/dist/components/feedback/Progress/utils/progress-calculator.d.ts +75 -0
- package/dist/components/feedback/Result/Result.d.ts +7 -0
- package/dist/components/feedback/Result/Result.styles.d.ts +2 -0
- package/dist/components/feedback/Result/Result.types.d.ts +66 -0
- package/dist/components/feedback/Result/index.d.ts +3 -0
- package/dist/components/feedback/Toast/Toast.d.ts +7 -0
- package/dist/components/feedback/Toast/Toast.styles.d.ts +14 -0
- package/dist/components/feedback/Toast/Toast.types.d.ts +81 -0
- package/dist/components/feedback/Toast/index.d.ts +3 -0
- package/dist/components/feedback/Tooltip/Tooltip.d.ts +4 -0
- package/dist/components/feedback/Tooltip/Tooltip.examples.d.ts +6 -0
- package/dist/components/feedback/Tooltip/Tooltip.styles.d.ts +78 -0
- package/dist/components/feedback/Tooltip/Tooltip.types.d.ts +130 -0
- package/dist/components/feedback/Tooltip/index.d.ts +3 -0
- package/dist/components/feedback/index.d.ts +71 -0
- package/dist/components/form/Cascader/Cascader.d.ts +7 -0
- package/dist/components/form/Cascader/Cascader.styles.d.ts +107 -0
- package/dist/components/form/Cascader/Cascader.types.d.ts +418 -0
- package/dist/components/form/Cascader/hooks/index.d.ts +3 -0
- package/dist/components/form/Cascader/hooks/useCascaderFieldNames.d.ts +12 -0
- package/dist/components/form/Cascader/hooks/useCascaderOptions.d.ts +15 -0
- package/dist/components/form/Cascader/hooks/useCascaderState.d.ts +23 -0
- package/dist/components/form/Cascader/index.d.ts +6 -0
- package/dist/components/form/Cascader/utils/formatDisplayValue.d.ts +9 -0
- package/dist/components/form/Cascader/utils/index.d.ts +1 -0
- package/dist/components/form/Checkbox/Checkbox.d.ts +6 -0
- package/dist/components/form/Checkbox/Checkbox.styles.d.ts +111 -0
- package/dist/components/form/Checkbox/Checkbox.types.d.ts +473 -0
- package/dist/components/form/Checkbox/CheckboxGroup.d.ts +6 -0
- package/dist/components/form/Checkbox/index.d.ts +8 -0
- package/dist/components/form/DatePicker/DatePicker.d.ts +6 -0
- package/dist/components/form/DatePicker/DatePicker.styles.d.ts +99 -0
- package/dist/components/form/DatePicker/DatePicker.types.d.ts +236 -0
- package/dist/components/form/DatePicker/index.d.ts +3 -0
- package/dist/components/form/Form/Form.d.ts +8 -0
- package/dist/components/form/Form/Form.styles.d.ts +84 -0
- package/dist/components/form/Form/Form.types.d.ts +416 -0
- package/dist/components/form/Form/index.d.ts +9 -0
- package/dist/components/form/Form/useFormLogic.d.ts +22 -0
- package/dist/components/form/Input/Input.d.ts +6 -0
- package/dist/components/form/Input/Input.styles.d.ts +61 -0
- package/dist/components/form/Input/Input.types.d.ts +294 -0
- package/dist/components/form/Input/index.d.ts +8 -0
- package/dist/components/form/Input/useInputLogic.d.ts +35 -0
- package/dist/components/form/InputNumber/InputNumber.d.ts +6 -0
- package/dist/components/form/InputNumber/InputNumber.styles.d.ts +120 -0
- package/dist/components/form/InputNumber/InputNumber.types.d.ts +303 -0
- package/dist/components/form/InputNumber/components/InputNumberClearButton.d.ts +10 -0
- package/dist/components/form/InputNumber/components/InputNumberControls.d.ts +11 -0
- package/dist/components/form/InputNumber/components/index.d.ts +2 -0
- package/dist/components/form/InputNumber/hooks/index.d.ts +4 -0
- package/dist/components/form/InputNumber/hooks/useInputNumberState.d.ts +38 -0
- package/dist/components/form/InputNumber/hooks/useInputNumberValidation.d.ts +12 -0
- package/dist/components/form/InputNumber/index.d.ts +5 -0
- package/dist/components/form/Radio/Radio.d.ts +6 -0
- package/dist/components/form/Radio/Radio.styles.d.ts +80 -0
- package/dist/components/form/Radio/Radio.types.d.ts +415 -0
- package/dist/components/form/Radio/index.d.ts +8 -0
- package/dist/components/form/Select/Select.d.ts +6 -0
- package/dist/components/form/Select/Select.styles.d.ts +71 -0
- package/dist/components/form/Select/Select.types.d.ts +418 -0
- package/dist/components/form/Select/index.d.ts +8 -0
- package/dist/components/form/Slider/Slider.d.ts +7 -0
- package/dist/components/form/Slider/Slider.styles.d.ts +2 -0
- package/dist/components/form/Slider/Slider.types.d.ts +85 -0
- package/dist/components/form/Slider/index.d.ts +3 -0
- package/dist/components/form/Switch/Switch.d.ts +10 -0
- package/dist/components/form/Switch/Switch.styles.d.ts +154 -0
- package/dist/components/form/Switch/Switch.types.d.ts +351 -0
- package/dist/components/form/Switch/index.d.ts +7 -0
- package/dist/components/form/Textarea/Textarea.d.ts +6 -0
- package/dist/components/form/Textarea/Textarea.styles.d.ts +66 -0
- package/dist/components/form/Textarea/Textarea.types.d.ts +348 -0
- package/dist/components/form/Textarea/index.d.ts +7 -0
- package/dist/components/form/TimePicker/TimePicker.d.ts +6 -0
- package/dist/components/form/TimePicker/TimePicker.styles.d.ts +104 -0
- package/dist/components/form/TimePicker/TimePicker.types.d.ts +385 -0
- package/dist/components/form/TimePicker/index.d.ts +4 -0
- package/dist/components/form/Transfer/Transfer.d.ts +7 -0
- package/dist/components/form/Transfer/Transfer.styles.d.ts +106 -0
- package/dist/components/form/Transfer/Transfer.types.d.ts +384 -0
- package/dist/components/form/Transfer/components/TransferItem.d.ts +23 -0
- package/dist/components/form/Transfer/components/TransferList.d.ts +55 -0
- package/dist/components/form/Transfer/components/TransferOperations.d.ts +21 -0
- package/dist/components/form/Transfer/components/TransferPagination.d.ts +19 -0
- package/dist/components/form/Transfer/components/TransferSearch.d.ts +21 -0
- package/dist/components/form/Transfer/components/index.d.ts +6 -0
- package/dist/components/form/Transfer/hooks/index.d.ts +3 -0
- package/dist/components/form/Transfer/hooks/useTransferData.d.ts +41 -0
- package/dist/components/form/Transfer/hooks/useTransferState.d.ts +21 -0
- package/dist/components/form/Transfer/index.d.ts +9 -0
- package/dist/components/form/Upload/Upload.d.ts +7 -0
- package/dist/components/form/Upload/Upload.styles.d.ts +2 -0
- package/dist/components/form/Upload/Upload.types.d.ts +143 -0
- package/dist/components/form/Upload/index.d.ts +3 -0
- package/dist/components/form/index.d.ts +126 -0
- package/dist/components/index.d.ts +122 -0
- package/dist/components/layout/Affix/Affix.d.ts +4 -0
- package/dist/components/layout/Affix/Affix.styles.d.ts +1669 -0
- package/dist/components/layout/Affix/Affix.types.d.ts +25 -0
- package/dist/components/layout/Affix/index.d.ts +3 -0
- package/dist/components/layout/Col/Col.d.ts +6 -0
- package/dist/components/layout/Col/Col.styles.d.ts +52 -0
- package/dist/components/layout/Col/Col.types.d.ts +54 -0
- package/dist/components/layout/Col/index.d.ts +3 -0
- package/dist/components/layout/Container/Container.d.ts +6 -0
- package/dist/components/layout/Container/Container.styles.d.ts +41 -0
- package/dist/components/layout/Container/Container.types.d.ts +59 -0
- package/dist/components/layout/Container/index.d.ts +3 -0
- package/dist/components/layout/Grid/Grid.d.ts +6 -0
- package/dist/components/layout/Grid/Grid.styles.d.ts +60 -0
- package/dist/components/layout/Grid/Grid.types.d.ts +68 -0
- package/dist/components/layout/Grid/index.d.ts +3 -0
- package/dist/components/layout/Layout/Content.d.ts +4 -0
- package/dist/components/layout/Layout/Footer.d.ts +4 -0
- package/dist/components/layout/Layout/Header.d.ts +4 -0
- package/dist/components/layout/Layout/Layout.d.ts +4 -0
- package/dist/components/layout/Layout/Layout.styles.d.ts +3366 -0
- package/dist/components/layout/Layout/Layout.types.d.ts +48 -0
- package/dist/components/layout/Layout/Sider.d.ts +4 -0
- package/dist/components/layout/Layout/index.d.ts +8 -0
- package/dist/components/layout/Row/Row.d.ts +6 -0
- package/dist/components/layout/Row/Row.styles.d.ts +55 -0
- package/dist/components/layout/Row/Row.types.d.ts +51 -0
- package/dist/components/layout/Row/index.d.ts +3 -0
- package/dist/components/layout/Space/Space.d.ts +6 -0
- package/dist/components/layout/Space/Space.styles.d.ts +69 -0
- package/dist/components/layout/Space/Space.types.d.ts +84 -0
- package/dist/components/layout/Space/index.d.ts +3 -0
- package/dist/components/layout/index.d.ts +39 -0
- package/dist/components/navigation/Menu/Menu.constants.d.ts +59 -0
- package/dist/components/navigation/Menu/Menu.d.ts +10 -0
- package/dist/components/navigation/Menu/Menu.stories.d.ts +157 -0
- package/dist/components/navigation/Menu/Menu.styles.d.ts +143 -0
- package/dist/components/navigation/Menu/Menu.types.d.ts +210 -0
- package/dist/components/navigation/Menu/Menu.utils.d.ts +54 -0
- package/dist/components/navigation/Menu/MenuItem.d.ts +32 -0
- package/dist/components/navigation/Menu/SubMenu.d.ts +41 -0
- package/dist/components/navigation/Menu/index.d.ts +54 -0
- package/dist/components/navigation/NavBar/NavBar.d.ts +7 -0
- package/dist/components/navigation/NavBar/NavBar.styles.d.ts +114 -0
- package/dist/components/navigation/NavBar/NavBar.types.d.ts +50 -0
- package/dist/components/navigation/NavBar/index.d.ts +3 -0
- package/dist/components/navigation/Pagination/Pagination.d.ts +6 -0
- package/dist/components/navigation/Pagination/Pagination.styles.d.ts +55 -0
- package/dist/components/navigation/Pagination/Pagination.types.d.ts +77 -0
- package/dist/components/navigation/Pagination/index.d.ts +15 -0
- package/dist/components/navigation/Steps/Step.d.ts +4 -0
- package/dist/components/navigation/Steps/Steps.d.ts +4 -0
- package/dist/components/navigation/Steps/Steps.styles.d.ts +6716 -0
- package/dist/components/navigation/Steps/Steps.types.d.ts +41 -0
- package/dist/components/navigation/Steps/index.d.ts +3 -0
- package/dist/components/navigation/Tabs/Tabs.d.ts +6 -0
- package/dist/components/navigation/Tabs/Tabs.styles.d.ts +60 -0
- package/dist/components/navigation/Tabs/Tabs.types.d.ts +107 -0
- package/dist/components/navigation/Tabs/index.d.ts +3 -0
- package/dist/components/navigation/index.d.ts +35 -0
- package/dist/constants/index.d.ts +624 -0
- package/dist/hooks/index.d.ts +28 -0
- package/dist/hooks/types.d.ts +7 -0
- package/dist/hooks/useAsync.d.ts +17 -0
- package/dist/hooks/useClickOutside.d.ts +19 -0
- package/dist/hooks/useCounter.d.ts +36 -0
- package/dist/hooks/useDebounce.d.ts +31 -0
- package/dist/hooks/useDeepCompareEffect.d.ts +22 -0
- package/dist/hooks/useEventHandling.d.ts +81 -0
- package/dist/hooks/useEventListener.d.ts +19 -0
- package/dist/hooks/useLifecycle.d.ts +66 -0
- package/dist/hooks/useMediaQuery.d.ts +22 -0
- package/dist/hooks/useMutation.d.ts +47 -0
- package/dist/hooks/usePerformance.d.ts +73 -0
- package/dist/hooks/usePerformanceMonitor.d.ts +66 -0
- package/dist/hooks/usePlatform.d.ts +20 -0
- package/dist/hooks/usePrevious.d.ts +14 -0
- package/dist/hooks/useRequest.d.ts +32 -0
- package/dist/hooks/useStateManagement.d.ts +62 -0
- package/dist/hooks/useStorage.d.ts +27 -0
- package/dist/hooks/useStyle.d.ts +127 -0
- package/dist/hooks/useTheme.d.ts +58 -0
- package/dist/hooks/useToggle.d.ts +28 -0
- package/dist/hooks/useVirtualScroll.d.ts +42 -0
- package/dist/index.d.ts +271 -0
- package/dist/js/{index-DffLRSro.js → index-CDFsvu80.js} +15369 -10741
- package/dist/js/index-CDFsvu80.js.map +1 -0
- package/dist/js/index-DFdcksbe.js.map +1 -1
- package/dist/js/index-DXRIkWX1.js.map +1 -1
- package/dist/js/{index-6NJ3A1Dn.js → index-JffnTUrv.js} +15430 -10801
- package/dist/js/index-JffnTUrv.js.map +1 -0
- package/dist/platform/index.d.ts +172 -0
- package/dist/providers/AppProvider.d.ts +34 -0
- package/dist/providers/index.d.ts +1 -0
- package/dist/theme/ThemeProvider.d.ts +34 -0
- package/dist/theme/ThemeProvider.types.d.ts +21 -0
- package/dist/theme/animations.d.ts +96 -0
- package/dist/theme/defaults.d.ts +6 -0
- package/dist/theme/design-system.d.ts +400 -0
- package/dist/theme/design-tokens.d.ts +459 -0
- package/dist/theme/index.d.ts +187 -0
- package/dist/theme/responsive.d.ts +63 -0
- package/dist/theme/styles.d.ts +65 -0
- package/dist/theme/tokens/colors.d.ts +72 -0
- package/dist/theme/tokens/effects.d.ts +122 -0
- package/dist/theme/tokens/index.d.ts +94 -0
- package/dist/theme/tokens/spacing.d.ts +65 -0
- package/dist/theme/tokens/typography.d.ts +73 -0
- package/dist/theme/types.d.ts +153 -0
- package/dist/theme/useThemeUtils.d.ts +21 -0
- package/dist/theme/utils.d.ts +255 -0
- package/dist/theme/variables.d.ts +170 -0
- package/dist/types/accessibility.d.ts +46 -0
- package/dist/types/button.d.ts +285 -0
- package/dist/types/component-props.d.ts +109 -0
- package/dist/types/index.d.ts +343 -0
- package/dist/types/standardized-components.d.ts +263 -0
- package/dist/types/utils.d.ts +190 -0
- package/dist/utils/abort-controller.d.ts +19 -0
- package/dist/utils/cache.d.ts +28 -0
- package/dist/utils/createNamespace.d.ts +9 -0
- package/dist/utils/environment.d.ts +26 -0
- package/dist/utils/error-handler.d.ts +37 -0
- package/dist/utils/errorLogger.d.ts +72 -0
- package/dist/utils/formatUtils.d.ts +93 -0
- package/dist/utils/http/error-codes.d.ts +131 -0
- package/dist/utils/http/http-client.d.ts +53 -0
- package/dist/utils/http/request-cache.d.ts +65 -0
- package/dist/utils/http/request.d.ts +280 -0
- package/dist/utils/http/taro-adapter.d.ts +4 -0
- package/dist/utils/http/types.d.ts +351 -0
- package/dist/utils/http/web-adapter.d.ts +4 -0
- package/dist/utils/index.d.ts +46 -0
- package/dist/utils/inputValidator.d.ts +74 -0
- package/dist/utils/performance/performance.d.ts +167 -0
- package/dist/utils/responsiveUtils.d.ts +148 -0
- package/dist/utils/rtl-support.d.ts +78 -0
- package/dist/utils/security/api-security.d.ts +82 -0
- package/dist/utils/security/xss-protection.d.ts +20 -0
- package/dist/utils/securityHeaders.d.ts +74 -0
- package/dist/utils/typeHelpers.d.ts +1 -0
- package/dist/utils/types/dataProcessing.d.ts +111 -0
- package/dist/utils/types/typeHelpers.d.ts +50 -0
- package/dist/utils/xssProtection.d.ts +90 -0
- package/package.json +14 -10
- package/src/components/basic/Button/Button.tsx +53 -13
- package/src/components/basic/Button/Button.types.ts +45 -9
- package/src/components/basic/Divider/Divider.tsx +60 -29
- package/src/components/basic/Icon/Icon.data.ts +474 -0
- package/src/components/basic/Icon/Icon.test.tsx +2 -2
- package/src/components/basic/Icon/Icon.tsx +48 -35
- package/src/components/basic/Icon/IconManager.ts +229 -0
- package/src/components/basic/Text/Text.styles.ts +3 -3
- package/src/components/basic/Text/Text.types.ts +14 -4
- package/src/components/basic/Typography/Typography.styles.ts +10 -9
- package/src/components/basic/Typography/Typography.tsx +15 -13
- package/src/components/basic/Typography/Typography.types.ts +41 -41
- package/src/components/basic/Typography/index.tsx +1 -1
- package/src/components/basic/Video/Video.styles.ts +777 -0
- package/src/components/basic/Video/Video.test.tsx +490 -0
- package/src/components/basic/Video/Video.tsx +1468 -0
- package/src/components/basic/Video/Video.types.ts +500 -0
- package/src/components/basic/Video/index.tsx +26 -0
- package/src/components/basic/index.tsx +13 -15
- package/src/components/common/ErrorBoundary.tsx +1 -1
- package/src/components/common/LazyComponent.tsx +9 -8
- package/src/components/common/SecurityProvider.tsx +2 -14
- package/src/components/common/ThemeProvider.tsx +43 -56
- package/src/components/common/VirtualList.tsx +187 -205
- package/src/components/common/index.tsx +25 -0
- package/src/components/display/Avatar/Avatar.styles.ts +1 -1
- package/src/components/display/Avatar/Avatar.tsx +6 -19
- package/src/components/display/Avatar/Avatar.types.ts +1 -1
- package/src/components/display/Avatar/index.ts +1 -1
- package/src/components/display/Badge/Badge.tsx +3 -16
- package/src/components/display/Badge/Badge.types.ts +1 -1
- package/src/components/display/Badge/index.ts +1 -1
- package/src/components/display/Calendar/Calendar.styles.ts +36 -36
- package/src/components/display/Calendar/Calendar.test.tsx +27 -15
- package/src/components/display/Calendar/Calendar.tsx +56 -35
- package/src/components/display/Calendar/Calendar.types.ts +1 -1
- package/src/components/display/Calendar/index.ts +1 -1
- package/src/components/display/Card/Card.styles.ts +2 -2
- package/src/components/display/Card/Card.test.tsx +6 -4
- package/src/components/display/Card/Card.tsx +1 -1
- package/src/components/display/Card/Card.types.ts +4 -4
- package/src/components/display/Card/index.ts +1 -1
- package/src/components/display/Carousel/Carousel.styles.ts +31 -31
- package/src/components/display/Carousel/Carousel.tsx +34 -39
- package/src/components/display/Carousel/Carousel.types.ts +1 -1
- package/src/components/display/Carousel/index.ts +1 -1
- package/src/components/display/List/List.styles.ts +3 -3
- package/src/components/display/List/List.tsx +0 -1
- package/src/components/display/List/index.ts +1 -1
- package/src/components/display/Rate/Rate.styles.ts +5 -17
- package/src/components/display/Rate/Rate.tsx +6 -14
- package/src/components/display/Rate/Rate.types.ts +4 -3
- package/src/components/display/Rate/index.ts +3 -11
- package/src/components/display/Table/Table.test.tsx +2 -0
- package/src/components/display/Table/Table.tsx +3 -7
- package/src/components/display/Table/Table.types.ts +3 -2
- package/src/components/display/Tag/Tag.styles.ts +31 -31
- package/src/components/display/Tag/Tag.tsx +9 -26
- package/src/components/display/Tag/Tag.types.ts +1 -1
- package/src/components/display/Tag/index.ts +1 -1
- package/src/components/display/Timeline/Timeline.styles.ts +32 -32
- package/src/components/display/Timeline/Timeline.tsx +23 -42
- package/src/components/display/Timeline/Timeline.types.ts +1 -1
- package/src/components/display/Timeline/index.ts +1 -1
- package/src/components/display/index.tsx +33 -29
- package/src/components/feedback/Loading/Loading.tsx +6 -1
- package/src/components/feedback/Loading/index.ts +2 -5
- package/src/components/feedback/Message/Message.styles.ts +3 -3
- package/src/components/feedback/Message/index.ts +2 -5
- package/src/components/feedback/Modal/Modal.styles.ts +1 -1
- package/src/components/feedback/Modal/Modal.tsx +9 -31
- package/src/components/feedback/Modal/Modal.types.ts +12 -2
- package/src/components/feedback/Notification/Notification.styles.ts +49 -39
- package/src/components/feedback/Notification/Notification.test.tsx +1 -1
- package/src/components/feedback/Notification/Notification.tsx +97 -120
- package/src/components/feedback/Notification/Notification.types.ts +11 -8
- package/src/components/feedback/Notification/NotificationManager.tsx +135 -106
- package/src/components/feedback/Notification/index.ts +10 -3
- package/src/components/feedback/Notification/index.tsx +16 -26
- package/src/components/feedback/Progress/Progress.styles.ts +23 -14
- package/src/components/feedback/Progress/Progress.tsx +93 -113
- package/src/components/feedback/Progress/Progress.types.ts +1 -1
- package/src/components/feedback/Progress/index.ts +1 -1
- package/src/components/feedback/Progress/utils/animation.ts +12 -23
- package/src/components/feedback/Progress/utils/index.ts +2 -2
- package/src/components/feedback/Progress/utils/progress-calculator.ts +14 -32
- package/src/components/feedback/Result/Result.styles.ts +29 -29
- package/src/components/feedback/Result/Result.tsx +8 -20
- package/src/components/feedback/Result/Result.types.ts +7 -7
- package/src/components/feedback/Result/index.tsx +1 -1
- package/src/components/feedback/Toast/Toast.styles.ts +1 -1
- package/src/components/feedback/Toast/Toast.tsx +25 -13
- package/src/components/feedback/Tooltip/Tooltip.examples.tsx +21 -44
- package/src/components/feedback/Tooltip/Tooltip.styles.ts +16 -22
- package/src/components/feedback/Tooltip/Tooltip.test.tsx +1 -1
- package/src/components/feedback/Tooltip/Tooltip.tsx +65 -46
- package/src/components/feedback/Tooltip/Tooltip.types.ts +14 -20
- package/src/components/feedback/Tooltip/index.ts +1 -1
- package/src/components/feedback/Tooltip/index.tsx +12 -24
- package/src/components/feedback/index.tsx +54 -42
- package/src/components/form/Cascader/Cascader.styles.ts +2 -2
- package/src/components/form/Cascader/Cascader.tsx +84 -88
- package/src/components/form/Cascader/Cascader.types.ts +49 -50
- package/src/components/form/Cascader/hooks/useCascaderFieldNames.ts +11 -8
- package/src/components/form/Cascader/hooks/useCascaderOptions.ts +73 -55
- package/src/components/form/Cascader/hooks/useCascaderState.ts +31 -25
- package/src/components/form/Cascader/index.ts +1 -1
- package/src/components/form/Cascader/utils/formatDisplayValue.ts +4 -4
- package/src/components/form/Checkbox/Checkbox.styles.ts +83 -84
- package/src/components/form/Checkbox/Checkbox.tsx +2 -9
- package/src/components/form/Checkbox/CheckboxGroup.tsx +7 -7
- package/src/components/form/DatePicker/DatePicker.test.tsx +1 -1
- package/src/components/form/DatePicker/DatePicker.tsx +91 -75
- package/src/components/form/DatePicker/DatePicker.types.ts +4 -1
- package/src/components/form/Form/Form.tsx +66 -504
- package/src/components/form/Form/Form.types.ts +16 -1
- package/src/components/form/Form/useFormLogic.ts +497 -0
- package/src/components/form/Input/Input.styles.ts +8 -1
- package/src/components/form/Input/Input.tsx +55 -291
- package/src/components/form/Input/Input.types.ts +13 -1
- package/src/components/form/Input/useInputLogic.test.ts +82 -0
- package/src/components/form/Input/useInputLogic.ts +260 -0
- package/src/components/form/InputNumber/InputNumber.styles.ts +76 -25
- package/src/components/form/InputNumber/InputNumber.tsx +53 -21
- package/src/components/form/InputNumber/InputNumber.types.ts +21 -3
- package/src/components/form/InputNumber/components/InputNumberClearButton.tsx +3 -11
- package/src/components/form/InputNumber/components/InputNumberControls.tsx +3 -12
- package/src/components/form/InputNumber/hooks/index.ts +1 -1
- package/src/components/form/InputNumber/hooks/useInputNumberState.ts +7 -9
- package/src/components/form/InputNumber/hooks/useInputNumberValidation.ts +18 -17
- package/src/components/form/InputNumber/index.ts +7 -7
- package/src/components/form/Radio/Radio.styles.ts +1 -8
- package/src/components/form/Radio/Radio.tsx +3 -9
- package/src/components/form/Radio/Radio.types.ts +5 -1
- package/src/components/form/Select/Select.styles.ts +5 -1
- package/src/components/form/Select/Select.tsx +15 -15
- package/src/components/form/Select/Select.types.ts +2 -1
- package/src/components/form/Slider/Slider.styles.ts +13 -13
- package/src/components/form/Slider/Slider.tsx +19 -33
- package/src/components/form/Slider/Slider.types.ts +14 -12
- package/src/components/form/Slider/index.tsx +2 -9
- package/src/components/form/Switch/Switch.styles.ts +1 -7
- package/src/components/form/Switch/Switch.tsx +7 -13
- package/src/components/form/Textarea/Textarea.styles.ts +4 -4
- package/src/components/form/Textarea/Textarea.tsx +7 -1
- package/src/components/form/Textarea/Textarea.types.ts +4 -1
- package/src/components/form/TimePicker/TimePicker.styles.ts +8 -12
- package/src/components/form/TimePicker/TimePicker.tsx +122 -100
- package/src/components/form/TimePicker/TimePicker.types.ts +2 -2
- package/src/components/form/TimePicker/index.ts +1 -1
- package/src/components/form/Transfer/Transfer.styles.ts +3 -15
- package/src/components/form/Transfer/Transfer.tsx +146 -134
- package/src/components/form/Transfer/Transfer.types.ts +34 -26
- package/src/components/form/Transfer/components/TransferItem.tsx +55 -62
- package/src/components/form/Transfer/components/TransferList.tsx +212 -199
- package/src/components/form/Transfer/components/TransferOperations.tsx +52 -55
- package/src/components/form/Transfer/components/TransferPagination.tsx +115 -111
- package/src/components/form/Transfer/components/TransferSearch.tsx +52 -55
- package/src/components/form/Transfer/hooks/useTransferData.ts +91 -81
- package/src/components/form/Transfer/hooks/useTransferState.ts +22 -16
- package/src/components/form/Transfer/index.ts +2 -8
- package/src/components/form/Upload/Upload.styles.ts +21 -21
- package/src/components/form/Upload/Upload.tsx +189 -142
- package/src/components/form/Upload/Upload.types.ts +31 -31
- package/src/components/form/Upload/index.tsx +1 -1
- package/src/components/form/index.tsx +60 -29
- package/src/components/index.tsx +0 -1
- package/src/components/layout/Affix/Affix.styles.ts +16 -11
- package/src/components/layout/Affix/Affix.tsx +67 -75
- package/src/components/layout/Affix/Affix.types.ts +18 -18
- package/src/components/layout/Affix/index.tsx +1 -1
- package/src/components/layout/Col/Col.styles.ts +17 -17
- package/src/components/layout/Col/Col.test.tsx +7 -5
- package/src/components/layout/Col/Col.tsx +3 -21
- package/src/components/layout/Col/Col.types.ts +1 -1
- package/src/components/layout/Container/Container.styles.ts +3 -1
- package/src/components/layout/Container/Container.tsx +2 -11
- package/src/components/layout/Grid/Grid.tsx +3 -53
- package/src/components/layout/Layout/Content.tsx +24 -32
- package/src/components/layout/Layout/Footer.tsx +24 -32
- package/src/components/layout/Layout/Header.tsx +24 -32
- package/src/components/layout/Layout/Layout.styles.ts +17 -17
- package/src/components/layout/Layout/Layout.tsx +14 -25
- package/src/components/layout/Layout/Layout.types.ts +29 -29
- package/src/components/layout/Layout/Sider.tsx +44 -56
- package/src/components/layout/Layout/index.tsx +16 -2
- package/src/components/layout/Row/Row.tsx +15 -43
- package/src/components/layout/Space/Space.tsx +3 -11
- package/src/components/layout/Space/Space.types.ts +1 -1
- package/src/components/layout/index.tsx +29 -19
- package/src/components/navigation/Menu/Menu.constants.ts +69 -0
- package/src/components/navigation/Menu/Menu.stories.tsx +107 -0
- package/src/components/navigation/Menu/Menu.styles.ts +25 -37
- package/src/components/navigation/Menu/Menu.tsx +8 -11
- package/src/components/navigation/Menu/Menu.types.ts +2 -2
- package/src/components/navigation/Menu/Menu.utils.ts +17 -17
- package/src/components/navigation/Menu/MenuItem.tsx +9 -11
- package/src/components/navigation/Menu/SubMenu.tsx +8 -6
- package/src/components/navigation/Menu/index.tsx +4 -69
- package/src/components/navigation/NavBar/NavBar.styles.ts +1 -1
- package/src/components/navigation/NavBar/NavBar.tsx +7 -10
- package/src/components/navigation/NavBar/NavBar.types.ts +3 -3
- package/src/components/navigation/NavBar/index.tsx +1 -1
- package/src/components/navigation/Pagination/Pagination.test.tsx +2 -3
- package/src/components/navigation/Pagination/Pagination.tsx +3 -3
- package/src/components/navigation/Pagination/Pagination.types.ts +3 -2
- package/src/components/navigation/Pagination/index.ts +9 -3
- package/src/components/navigation/Steps/Step.tsx +24 -44
- package/src/components/navigation/Steps/Steps.styles.ts +28 -13
- package/src/components/navigation/Steps/Steps.test.tsx +2 -0
- package/src/components/navigation/Steps/Steps.tsx +88 -89
- package/src/components/navigation/Steps/Steps.types.ts +30 -30
- package/src/components/navigation/Steps/index.tsx +1 -1
- package/src/components/navigation/Tabs/Tabs.test.tsx +3 -2
- package/src/components/navigation/Tabs/Tabs.types.ts +4 -3
- package/src/components/navigation/index.tsx +21 -16
- package/src/constants/index.ts +1 -1
- package/src/hooks/index.ts +52 -102
- package/src/hooks/types.ts +4 -5
- package/src/hooks/useAsync.ts +46 -47
- package/src/hooks/useClickOutside.ts +52 -0
- package/src/hooks/useCounter.ts +87 -0
- package/src/hooks/useDebounce.ts +150 -0
- package/src/hooks/useDeepCompareEffect.ts +88 -0
- package/src/hooks/useEventListener.ts +77 -0
- package/src/hooks/useMediaQuery.ts +75 -0
- package/src/hooks/useMutation.ts +233 -0
- package/src/hooks/usePerformance.ts +1 -64
- package/src/hooks/usePlatform.ts +3 -1
- package/src/hooks/usePrevious.ts +25 -0
- package/src/hooks/useRequest.ts +12 -7
- package/src/hooks/useStateManagement.ts +1 -1
- package/src/hooks/useStorage.ts +169 -0
- package/src/hooks/useStyle.ts +8 -2
- package/src/hooks/useToggle.ts +54 -0
- package/src/index.ts +34 -9
- package/src/theme/ThemeProvider.tsx +3 -7
- package/src/theme/ThemeProvider.types.ts +1 -1
- package/src/theme/defaults.ts +1 -1
- package/src/theme/design-system.ts +2 -2
- package/src/theme/design-tokens.ts +85 -99
- package/src/theme/generated/dark-theme.scss +1 -1
- package/src/theme/generated/tokens.scss +82 -18
- package/src/theme/index.ts +8 -29
- package/src/theme/responsive.tsx +36 -34
- package/src/theme/styles.ts +1 -1
- package/src/theme/useThemeUtils.ts +43 -43
- package/src/theme/utils.ts +32 -32
- package/src/theme/variables.ts +70 -51
- package/src/types/accessibility.ts +36 -37
- package/src/types/button.ts +25 -27
- package/src/types/component-props.ts +6 -1
- package/src/types/glob.d.ts +4 -0
- package/src/types/index.ts +2 -2
- package/src/types/standardized-components.ts +9 -3
- package/src/types/utils.ts +13 -23
- package/src/utils/__tests__/responsiveUtils.test.ts +5 -4
- package/src/utils/abort-controller.ts +48 -0
- package/src/utils/cache.ts +2 -6
- package/src/utils/createNamespace.ts +4 -4
- package/src/utils/environment.ts +26 -6
- package/src/utils/error-handler.ts +2 -2
- package/src/utils/errorLogger.ts +16 -20
- package/src/utils/formatUtils.ts +38 -70
- package/src/utils/http/error-codes.ts +314 -0
- package/src/utils/http/http-client.test.ts +63 -0
- package/src/utils/{network → http}/http-client.ts +45 -35
- package/src/utils/http/request-cache.ts +127 -0
- package/src/utils/http/request.ts +954 -0
- package/src/utils/http/taro-adapter.test.ts +74 -0
- package/src/utils/http/taro-adapter.ts +24 -0
- package/src/utils/http/types.ts +414 -0
- package/src/utils/http/web-adapter.ts +33 -0
- package/src/utils/index.ts +5 -8
- package/src/utils/inputValidator.ts +17 -14
- package/src/utils/performance/performance.ts +60 -71
- package/src/utils/responsiveUtils.ts +7 -16
- package/src/utils/rtl-support.ts +29 -19
- package/src/utils/security/api-security.ts +47 -39
- package/src/utils/securityHeaders.ts +61 -67
- package/src/utils/typeHelpers.ts +10 -10
- package/src/utils/types/dataProcessing.ts +93 -92
- package/src/utils/types/typeHelpers.ts +31 -21
- package/src/utils/xssProtection.ts +96 -48
- package/dist/js/index-6NJ3A1Dn.js.map +0 -1
- package/dist/js/index-DffLRSro.js.map +0 -1
- package/src/components/form/Input/Input.enhanced.tsx +0 -732
- package/src/components/navigation/Menu/__tests__/Menu.test.tsx +0 -687
- package/src/components/navigation/Tree/Tree.styles.ts +0 -553
- package/src/components/navigation/Tree/Tree.test.basic.tsx +0 -7
- package/src/components/navigation/Tree/Tree.test.functional.tsx +0 -496
- package/src/components/navigation/Tree/Tree.test.import.check.tsx +0 -6
- package/src/components/navigation/Tree/Tree.test.import.tsx +0 -6
- package/src/components/navigation/Tree/Tree.test.minimal.tsx +0 -5
- package/src/components/navigation/Tree/Tree.test.simple.tsx +0 -30
- package/src/components/navigation/Tree/Tree.test.tsx +0 -908
- package/src/components/navigation/Tree/Tree.test.working.tsx +0 -673
- package/src/components/navigation/Tree/Tree.tsx +0 -600
- package/src/components/navigation/Tree/Tree.types.ts +0 -909
- package/src/components/navigation/Tree/Tree.utils.ts +0 -452
- package/src/components/navigation/Tree/index.ts +0 -33
- package/src/components/navigation/Tree/index.tsx +0 -23
- package/src/utils/network/http-client.test.ts +0 -18
|
@@ -0,0 +1,74 @@
|
|
|
1
|
+
import { describe, it, expect, vi, beforeEach } from 'vitest';
|
|
2
|
+
import Taro from '@tarojs/taro';
|
|
3
|
+
import { TaroAdapter } from './taro-adapter';
|
|
4
|
+
|
|
5
|
+
vi.mock('@tarojs/taro', () => ({
|
|
6
|
+
default: {
|
|
7
|
+
request: vi.fn(),
|
|
8
|
+
},
|
|
9
|
+
}));
|
|
10
|
+
|
|
11
|
+
describe('TaroAdapter', () => {
|
|
12
|
+
let adapter: TaroAdapter;
|
|
13
|
+
|
|
14
|
+
beforeEach(() => {
|
|
15
|
+
adapter = new TaroAdapter();
|
|
16
|
+
vi.clearAllMocks();
|
|
17
|
+
});
|
|
18
|
+
|
|
19
|
+
it('should make a GET request successfully', async () => {
|
|
20
|
+
const mockResponse = {
|
|
21
|
+
data: { id: 1, name: 'Test' },
|
|
22
|
+
statusCode: 200,
|
|
23
|
+
header: { 'content-type': 'application/json' },
|
|
24
|
+
errMsg: 'request:ok',
|
|
25
|
+
};
|
|
26
|
+
|
|
27
|
+
(Taro.request as any).mockResolvedValue(mockResponse);
|
|
28
|
+
|
|
29
|
+
const response = await adapter.request({
|
|
30
|
+
url: 'https://api.example.com/users',
|
|
31
|
+
method: 'GET',
|
|
32
|
+
});
|
|
33
|
+
|
|
34
|
+
expect(Taro.request).toHaveBeenCalledWith({
|
|
35
|
+
url: 'https://api.example.com/users',
|
|
36
|
+
method: 'GET',
|
|
37
|
+
header: undefined,
|
|
38
|
+
data: {},
|
|
39
|
+
timeout: 10000,
|
|
40
|
+
});
|
|
41
|
+
|
|
42
|
+
expect(response).toEqual({
|
|
43
|
+
data: mockResponse.data,
|
|
44
|
+
statusCode: 200,
|
|
45
|
+
header: mockResponse.header,
|
|
46
|
+
errMsg: 'request:ok',
|
|
47
|
+
});
|
|
48
|
+
});
|
|
49
|
+
|
|
50
|
+
it('should handle request errors', async () => {
|
|
51
|
+
const mockError = new Error('Network error');
|
|
52
|
+
(Taro.request as any).mockRejectedValue(mockError);
|
|
53
|
+
|
|
54
|
+
await expect(adapter.request({
|
|
55
|
+
url: 'https://api.example.com/error',
|
|
56
|
+
method: 'GET',
|
|
57
|
+
})).rejects.toThrow('Network error');
|
|
58
|
+
});
|
|
59
|
+
|
|
60
|
+
it('should merge params into data', async () => {
|
|
61
|
+
(Taro.request as any).mockResolvedValue({ statusCode: 200, data: {} });
|
|
62
|
+
|
|
63
|
+
await adapter.request({
|
|
64
|
+
url: 'https://api.example.com/search',
|
|
65
|
+
method: 'GET',
|
|
66
|
+
params: { q: 'test' },
|
|
67
|
+
data: { limit: 10 },
|
|
68
|
+
});
|
|
69
|
+
|
|
70
|
+
expect(Taro.request).toHaveBeenCalledWith(expect.objectContaining({
|
|
71
|
+
data: { q: 'test', limit: 10 },
|
|
72
|
+
}));
|
|
73
|
+
});
|
|
74
|
+
});
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import Taro from '@tarojs/taro';
|
|
2
|
+
import { IRequestAdapter, RequestConfig, ResponseData } from './types';
|
|
3
|
+
|
|
4
|
+
export class TaroAdapter implements IRequestAdapter {
|
|
5
|
+
async request<T = any>(config: RequestConfig): Promise<ResponseData<T>> {
|
|
6
|
+
const response = await Taro.request({
|
|
7
|
+
url: config.url,
|
|
8
|
+
method: config.method,
|
|
9
|
+
header: config.headers,
|
|
10
|
+
data: {
|
|
11
|
+
...config.data,
|
|
12
|
+
...config.params,
|
|
13
|
+
},
|
|
14
|
+
timeout: config.timeout || 10000,
|
|
15
|
+
});
|
|
16
|
+
|
|
17
|
+
return {
|
|
18
|
+
data: response.data as T,
|
|
19
|
+
statusCode: response.statusCode,
|
|
20
|
+
header: response.header || {},
|
|
21
|
+
errMsg: response.errMsg,
|
|
22
|
+
};
|
|
23
|
+
}
|
|
24
|
+
}
|
|
@@ -0,0 +1,414 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Enhanced Request Types
|
|
3
|
+
* Extended type definitions for the unified request client
|
|
4
|
+
*/
|
|
5
|
+
|
|
6
|
+
/** HTTP Methods */
|
|
7
|
+
export type HttpMethod = 'GET' | 'POST' | 'PUT' | 'DELETE' | 'PATCH' | 'HEAD' | 'OPTIONS';
|
|
8
|
+
|
|
9
|
+
/** Platform types */
|
|
10
|
+
export type Platform = 'web' | 'weapp' | 'alipay' | 'swan' | 'tt' | 'qq' | 'jd' | 'h5' | 'rn';
|
|
11
|
+
|
|
12
|
+
/** Request configuration */
|
|
13
|
+
export interface RequestConfig {
|
|
14
|
+
/** Request URL */
|
|
15
|
+
url: string;
|
|
16
|
+
/** HTTP method */
|
|
17
|
+
method?: HttpMethod;
|
|
18
|
+
/** Request headers */
|
|
19
|
+
headers?: Record<string, string>;
|
|
20
|
+
/** Request body data */
|
|
21
|
+
data?: any;
|
|
22
|
+
/** URL query parameters */
|
|
23
|
+
params?: Record<string, any>;
|
|
24
|
+
/** Request timeout in milliseconds */
|
|
25
|
+
timeout?: number;
|
|
26
|
+
/** Response type */
|
|
27
|
+
responseType?: 'json' | 'text' | 'arraybuffer' | 'blob';
|
|
28
|
+
/** Enable credentials (cookies) */
|
|
29
|
+
withCredentials?: boolean;
|
|
30
|
+
/** Custom request metadata */
|
|
31
|
+
meta?: Record<string, any>;
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
/** Response data structure */
|
|
35
|
+
export interface ResponseData<T = any> {
|
|
36
|
+
/** Response data */
|
|
37
|
+
data: T;
|
|
38
|
+
/** HTTP status code */
|
|
39
|
+
statusCode: number;
|
|
40
|
+
/** Response headers */
|
|
41
|
+
header: Record<string, string>;
|
|
42
|
+
/** Error message (if any) */
|
|
43
|
+
errMsg?: string;
|
|
44
|
+
/** Response cookies */
|
|
45
|
+
cookies?: string[];
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
/** Interceptor priority levels */
|
|
49
|
+
export type InterceptorPriority = 'low' | 'medium' | 'high' | number;
|
|
50
|
+
|
|
51
|
+
/** Request interceptor function with enhanced features */
|
|
52
|
+
export interface RequestInterceptor {
|
|
53
|
+
/** Called before request is sent */
|
|
54
|
+
onRequest?: (config: RequestConfig) => RequestConfig | Promise<RequestConfig>;
|
|
55
|
+
/** Called if request configuration fails */
|
|
56
|
+
onRequestError?: (error: Error) => Error | Promise<Error>;
|
|
57
|
+
/** Interceptor priority */
|
|
58
|
+
priority?: InterceptorPriority;
|
|
59
|
+
/** Interceptor group name */
|
|
60
|
+
group?: string;
|
|
61
|
+
}
|
|
62
|
+
|
|
63
|
+
/** Response interceptor function with enhanced features */
|
|
64
|
+
export interface ResponseInterceptor {
|
|
65
|
+
/** Called on successful response */
|
|
66
|
+
onResponse?: <T>(response: ResponseData<T>) => ResponseData<T> | Promise<ResponseData<T>>;
|
|
67
|
+
/** Called on response error */
|
|
68
|
+
onResponseError?: (error: Error) => Error | Promise<Error>;
|
|
69
|
+
/** Interceptor priority */
|
|
70
|
+
priority?: InterceptorPriority;
|
|
71
|
+
/** Interceptor group name */
|
|
72
|
+
group?: string;
|
|
73
|
+
}
|
|
74
|
+
|
|
75
|
+
/** Interceptor registration result */
|
|
76
|
+
export interface InterceptorRegistration {
|
|
77
|
+
/** ID of the registered interceptor */
|
|
78
|
+
id: string;
|
|
79
|
+
/** Function to remove the interceptor */
|
|
80
|
+
eject: () => void;
|
|
81
|
+
}
|
|
82
|
+
|
|
83
|
+
/** Global interceptors manager */
|
|
84
|
+
export interface GlobalInterceptorsManager {
|
|
85
|
+
/** Add a global request interceptor */
|
|
86
|
+
useRequestInterceptor: (interceptor: RequestInterceptor) => InterceptorRegistration;
|
|
87
|
+
/** Add a global response interceptor */
|
|
88
|
+
useResponseInterceptor: (interceptor: ResponseInterceptor) => InterceptorRegistration;
|
|
89
|
+
/** Remove all global interceptors */
|
|
90
|
+
clearAll: () => void;
|
|
91
|
+
/** Remove all interceptors by group */
|
|
92
|
+
clearByGroup: (group: string) => void;
|
|
93
|
+
/** Get all global request interceptors */
|
|
94
|
+
getRequestInterceptors: () => Array<{ id: string } & RequestInterceptor>;
|
|
95
|
+
/** Get all global response interceptors */
|
|
96
|
+
getResponseInterceptors: () => Array<{ id: string } & ResponseInterceptor>;
|
|
97
|
+
}
|
|
98
|
+
|
|
99
|
+
/** Retry configuration */
|
|
100
|
+
export interface RetryConfig {
|
|
101
|
+
/** Maximum number of retries */
|
|
102
|
+
retries?: number;
|
|
103
|
+
/** Delay between retries in milliseconds */
|
|
104
|
+
retryDelay?: number;
|
|
105
|
+
/** Function to determine if request should be retried */
|
|
106
|
+
shouldRetry?: (error: Error, attempt: number) => boolean;
|
|
107
|
+
/** Retry delay strategy */
|
|
108
|
+
retryDelayStrategy?: 'fixed' | 'exponential' | 'linear';
|
|
109
|
+
/** Maximum retry delay */
|
|
110
|
+
maxRetryDelay?: number;
|
|
111
|
+
}
|
|
112
|
+
|
|
113
|
+
/** Cache configuration */
|
|
114
|
+
export interface CacheConfig {
|
|
115
|
+
/** Enable caching */
|
|
116
|
+
enabled?: boolean;
|
|
117
|
+
/** Cache TTL in milliseconds */
|
|
118
|
+
ttl?: number;
|
|
119
|
+
/** Custom cache key generator */
|
|
120
|
+
keyGenerator?: (config: RequestConfig) => string;
|
|
121
|
+
/** Force refresh (bypass cache) */
|
|
122
|
+
forceRefresh?: boolean;
|
|
123
|
+
}
|
|
124
|
+
|
|
125
|
+
/** Loading state configuration */
|
|
126
|
+
export interface LoadingConfig {
|
|
127
|
+
/** Show global loading indicator */
|
|
128
|
+
showLoading?: boolean;
|
|
129
|
+
/** Custom loading text */
|
|
130
|
+
loadingText?: string;
|
|
131
|
+
/** Loading delay (ms) before showing indicator */
|
|
132
|
+
loadingDelay?: number;
|
|
133
|
+
}
|
|
134
|
+
|
|
135
|
+
/** Request options (extends config with additional features) */
|
|
136
|
+
export interface RequestOptions extends RequestConfig {
|
|
137
|
+
/** Base URL to prepend */
|
|
138
|
+
baseURL?: string;
|
|
139
|
+
/** Retry configuration */
|
|
140
|
+
retry?: RetryConfig;
|
|
141
|
+
/** Cache configuration */
|
|
142
|
+
cache?: CacheConfig;
|
|
143
|
+
/** Loading state configuration */
|
|
144
|
+
loading?: LoadingConfig;
|
|
145
|
+
/** Cancel token for request cancellation */
|
|
146
|
+
cancelToken?: AbortSignal;
|
|
147
|
+
/** Request hooks */
|
|
148
|
+
hooks?: {
|
|
149
|
+
/** Before request sent */
|
|
150
|
+
beforeRequest?: (config: RequestConfig) => void;
|
|
151
|
+
/** After response received */
|
|
152
|
+
afterResponse?: <T>(response: ResponseData<T>) => void;
|
|
153
|
+
/** On request error */
|
|
154
|
+
onError?: (error: Error) => void;
|
|
155
|
+
};
|
|
156
|
+
}
|
|
157
|
+
|
|
158
|
+
/** Platform adapter interface */
|
|
159
|
+
export interface IRequestAdapter {
|
|
160
|
+
/** Execute HTTP request */
|
|
161
|
+
request<T = any>(config: RequestConfig): Promise<ResponseData<T>>;
|
|
162
|
+
/** Upload file */
|
|
163
|
+
upload?<T = any>(config: UploadConfig): Promise<ResponseData<T>>;
|
|
164
|
+
/** Download file */
|
|
165
|
+
download?<T = any>(config: DownloadConfig): Promise<ResponseData<T>>;
|
|
166
|
+
}
|
|
167
|
+
|
|
168
|
+
/** Upload configuration */
|
|
169
|
+
export interface UploadConfig extends Omit<RequestConfig, 'data'> {
|
|
170
|
+
/** File path or file object */
|
|
171
|
+
filePath: string | File;
|
|
172
|
+
/** Form field name for file */
|
|
173
|
+
name?: string;
|
|
174
|
+
/** Additional form data */
|
|
175
|
+
formData?: Record<string, any>;
|
|
176
|
+
/** Upload progress callback */
|
|
177
|
+
onProgress?: (progress: UploadProgress) => void;
|
|
178
|
+
}
|
|
179
|
+
|
|
180
|
+
/** Upload progress */
|
|
181
|
+
export interface UploadProgress {
|
|
182
|
+
/** Upload progress percentage (0-100) */
|
|
183
|
+
progress: number;
|
|
184
|
+
/** Total bytes to upload */
|
|
185
|
+
totalBytesSent: number;
|
|
186
|
+
/** Bytes sent so far */
|
|
187
|
+
totalBytesExpectedToSend: number;
|
|
188
|
+
}
|
|
189
|
+
|
|
190
|
+
/** Download configuration */
|
|
191
|
+
export interface DownloadConfig extends Omit<RequestConfig, 'data' | 'responseType'> {
|
|
192
|
+
/** Download destination path */
|
|
193
|
+
filePath?: string;
|
|
194
|
+
/** Download progress callback */
|
|
195
|
+
onProgress?: (progress: DownloadProgress) => void;
|
|
196
|
+
}
|
|
197
|
+
|
|
198
|
+
/** Download progress */
|
|
199
|
+
export interface DownloadProgress {
|
|
200
|
+
/** Download progress percentage (0-100) */
|
|
201
|
+
progress: number;
|
|
202
|
+
/** Total bytes downloaded */
|
|
203
|
+
totalBytesWritten: number;
|
|
204
|
+
/** Expected total bytes */
|
|
205
|
+
totalBytesExpectedToWrite: number;
|
|
206
|
+
}
|
|
207
|
+
|
|
208
|
+
/** HTTP client error */
|
|
209
|
+
export class HttpError extends Error {
|
|
210
|
+
public requestId?: string;
|
|
211
|
+
public timestamp: number;
|
|
212
|
+
public retryAttempts?: number;
|
|
213
|
+
public platform?: Platform;
|
|
214
|
+
|
|
215
|
+
constructor(
|
|
216
|
+
message: string,
|
|
217
|
+
public statusCode?: number,
|
|
218
|
+
public response?: ResponseData,
|
|
219
|
+
public config?: RequestConfig,
|
|
220
|
+
options?: { retryAttempts?: number; platform?: Platform; requestId?: string },
|
|
221
|
+
) {
|
|
222
|
+
super(message);
|
|
223
|
+
this.name = 'HttpError';
|
|
224
|
+
this.timestamp = Date.now();
|
|
225
|
+
this.retryAttempts = options?.retryAttempts;
|
|
226
|
+
this.platform = options?.platform;
|
|
227
|
+
this.requestId = options?.requestId;
|
|
228
|
+
}
|
|
229
|
+
|
|
230
|
+
toJSON() {
|
|
231
|
+
return {
|
|
232
|
+
name: this.name,
|
|
233
|
+
message: this.message,
|
|
234
|
+
statusCode: this.statusCode,
|
|
235
|
+
requestId: this.requestId,
|
|
236
|
+
timestamp: this.timestamp,
|
|
237
|
+
retryAttempts: this.retryAttempts,
|
|
238
|
+
platform: this.platform,
|
|
239
|
+
url: this.config?.url,
|
|
240
|
+
method: this.config?.method,
|
|
241
|
+
response: this.response,
|
|
242
|
+
};
|
|
243
|
+
}
|
|
244
|
+
}
|
|
245
|
+
|
|
246
|
+
/** Network error (no response received) */
|
|
247
|
+
export class NetworkError extends Error {
|
|
248
|
+
public requestId?: string;
|
|
249
|
+
public timestamp: number;
|
|
250
|
+
public retryAttempts?: number;
|
|
251
|
+
public platform?: Platform;
|
|
252
|
+
|
|
253
|
+
constructor(
|
|
254
|
+
message: string,
|
|
255
|
+
public config?: RequestConfig,
|
|
256
|
+
options?: { retryAttempts?: number; platform?: Platform; requestId?: string },
|
|
257
|
+
) {
|
|
258
|
+
super(message);
|
|
259
|
+
this.name = 'NetworkError';
|
|
260
|
+
this.timestamp = Date.now();
|
|
261
|
+
this.retryAttempts = options?.retryAttempts;
|
|
262
|
+
this.platform = options?.platform;
|
|
263
|
+
this.requestId = options?.requestId;
|
|
264
|
+
}
|
|
265
|
+
|
|
266
|
+
toJSON() {
|
|
267
|
+
return {
|
|
268
|
+
name: this.name,
|
|
269
|
+
message: this.message,
|
|
270
|
+
requestId: this.requestId,
|
|
271
|
+
timestamp: this.timestamp,
|
|
272
|
+
retryAttempts: this.retryAttempts,
|
|
273
|
+
platform: this.platform,
|
|
274
|
+
url: this.config?.url,
|
|
275
|
+
method: this.config?.method,
|
|
276
|
+
};
|
|
277
|
+
}
|
|
278
|
+
}
|
|
279
|
+
|
|
280
|
+
/** Timeout error */
|
|
281
|
+
export class TimeoutError extends Error {
|
|
282
|
+
public requestId?: string;
|
|
283
|
+
public timestamp: number;
|
|
284
|
+
public retryAttempts?: number;
|
|
285
|
+
public platform?: Platform;
|
|
286
|
+
|
|
287
|
+
constructor(
|
|
288
|
+
message: string,
|
|
289
|
+
public timeout?: number,
|
|
290
|
+
public config?: RequestConfig,
|
|
291
|
+
options?: { retryAttempts?: number; platform?: Platform; requestId?: string },
|
|
292
|
+
) {
|
|
293
|
+
super(message);
|
|
294
|
+
this.name = 'TimeoutError';
|
|
295
|
+
this.timestamp = Date.now();
|
|
296
|
+
this.retryAttempts = options?.retryAttempts;
|
|
297
|
+
this.platform = options?.platform;
|
|
298
|
+
this.requestId = options?.requestId;
|
|
299
|
+
}
|
|
300
|
+
|
|
301
|
+
toJSON() {
|
|
302
|
+
return {
|
|
303
|
+
name: this.name,
|
|
304
|
+
message: this.message,
|
|
305
|
+
timeout: this.timeout,
|
|
306
|
+
requestId: this.requestId,
|
|
307
|
+
timestamp: this.timestamp,
|
|
308
|
+
retryAttempts: this.retryAttempts,
|
|
309
|
+
platform: this.platform,
|
|
310
|
+
url: this.config?.url,
|
|
311
|
+
method: this.config?.method,
|
|
312
|
+
};
|
|
313
|
+
}
|
|
314
|
+
}
|
|
315
|
+
|
|
316
|
+
/** Cancel error */
|
|
317
|
+
export class CancelError extends Error {
|
|
318
|
+
public requestId?: string;
|
|
319
|
+
public timestamp: number;
|
|
320
|
+
public platform?: Platform;
|
|
321
|
+
|
|
322
|
+
constructor(
|
|
323
|
+
message: string = 'Request cancelled',
|
|
324
|
+
public config?: RequestConfig,
|
|
325
|
+
options?: { platform?: Platform; requestId?: string },
|
|
326
|
+
) {
|
|
327
|
+
super(message);
|
|
328
|
+
this.name = 'CancelError';
|
|
329
|
+
this.timestamp = Date.now();
|
|
330
|
+
this.platform = options?.platform;
|
|
331
|
+
this.requestId = options?.requestId;
|
|
332
|
+
}
|
|
333
|
+
|
|
334
|
+
toJSON() {
|
|
335
|
+
return {
|
|
336
|
+
name: this.name,
|
|
337
|
+
message: this.message,
|
|
338
|
+
requestId: this.requestId,
|
|
339
|
+
timestamp: this.timestamp,
|
|
340
|
+
platform: this.platform,
|
|
341
|
+
url: this.config?.url,
|
|
342
|
+
method: this.config?.method,
|
|
343
|
+
};
|
|
344
|
+
}
|
|
345
|
+
}
|
|
346
|
+
|
|
347
|
+
/** Request state (for hooks) */
|
|
348
|
+
export interface RequestState<T> {
|
|
349
|
+
/** Response data */
|
|
350
|
+
data: T | null;
|
|
351
|
+
/** Error object */
|
|
352
|
+
error: Error | null;
|
|
353
|
+
/** Loading state */
|
|
354
|
+
loading: boolean;
|
|
355
|
+
/** Request has been called at least once */
|
|
356
|
+
called: boolean;
|
|
357
|
+
}
|
|
358
|
+
|
|
359
|
+
/** Mutation state (for hooks) */
|
|
360
|
+
export interface MutationState<T, V = any> {
|
|
361
|
+
/** Response data */
|
|
362
|
+
data: T | null;
|
|
363
|
+
/** Error object */
|
|
364
|
+
error: Error | null;
|
|
365
|
+
/** Loading state */
|
|
366
|
+
loading: boolean;
|
|
367
|
+
/** Mutation variables */
|
|
368
|
+
variables: V | null;
|
|
369
|
+
}
|
|
370
|
+
|
|
371
|
+
/** Request hook options */
|
|
372
|
+
export interface UseRequestOptions<T> extends Omit<RequestOptions, 'url' | 'method' | 'data' | 'params'> {
|
|
373
|
+
/** Manual mode - don't execute on mount */
|
|
374
|
+
manual?: boolean;
|
|
375
|
+
/** Default data value */
|
|
376
|
+
initialData?: T;
|
|
377
|
+
/** Dependencies array for auto-refetch */
|
|
378
|
+
deps?: any[];
|
|
379
|
+
/** Debounce delay in milliseconds */
|
|
380
|
+
debounceDelay?: number;
|
|
381
|
+
/** Polling interval in milliseconds */
|
|
382
|
+
pollingInterval?: number;
|
|
383
|
+
/** Ready condition - only execute when true */
|
|
384
|
+
ready?: boolean;
|
|
385
|
+
/** Refresh dependencies - refetch when these change */
|
|
386
|
+
refreshDeps?: any[];
|
|
387
|
+
/** Format response data */
|
|
388
|
+
formatResult?: (data: any) => T;
|
|
389
|
+
/** Error handler */
|
|
390
|
+
onError?: (error: Error) => void;
|
|
391
|
+
/** Success handler */
|
|
392
|
+
onSuccess?: (data: T) => void;
|
|
393
|
+
/** Completion handler (success or error) */
|
|
394
|
+
onCompleted?: (data: T | null, error: Error | null) => void;
|
|
395
|
+
}
|
|
396
|
+
|
|
397
|
+
/** Mutation hook options */
|
|
398
|
+
export interface UseMutationOptions<T, V = any> extends Omit<RequestOptions, 'url' | 'method' | 'data' | 'params'> {
|
|
399
|
+
/** Optimistic update function */
|
|
400
|
+
optimisticData?: (variables: V) => T;
|
|
401
|
+
/** Rollback on error */
|
|
402
|
+
rollbackOnError?: boolean;
|
|
403
|
+
/** Error handler */
|
|
404
|
+
onError?: (error: Error, variables: V) => void;
|
|
405
|
+
/** Success handler */
|
|
406
|
+
onSuccess?: (data: T, variables: V) => void;
|
|
407
|
+
/** Before mutation */
|
|
408
|
+
onMutate?: (variables: V) => void | Promise<void>;
|
|
409
|
+
/** After mutation completes */
|
|
410
|
+
onCompleted?: (data: T | null, error: Error | null, variables: V) => void;
|
|
411
|
+
}
|
|
412
|
+
|
|
413
|
+
/** Query key type */
|
|
414
|
+
export type QueryKey = string | readonly unknown[];
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
import { IRequestAdapter, RequestConfig, ResponseData } from './types';
|
|
2
|
+
|
|
3
|
+
export class WebAdapter implements IRequestAdapter {
|
|
4
|
+
async request<T = any>(config: RequestConfig): Promise<ResponseData<T>> {
|
|
5
|
+
const controller = new AbortController();
|
|
6
|
+
const timeoutId = setTimeout(() => controller.abort(), config.timeout || 10000);
|
|
7
|
+
|
|
8
|
+
try {
|
|
9
|
+
const response = await fetch(config.url, {
|
|
10
|
+
method: config.method,
|
|
11
|
+
headers: config.headers,
|
|
12
|
+
body: config.method !== 'GET' ? JSON.stringify(config.data) : undefined,
|
|
13
|
+
signal: controller.signal,
|
|
14
|
+
});
|
|
15
|
+
|
|
16
|
+
const data = await response.json();
|
|
17
|
+
|
|
18
|
+
// Convert Headers object to Record<string, string>
|
|
19
|
+
const headers: Record<string, string> = {};
|
|
20
|
+
response.headers.forEach((value, key) => {
|
|
21
|
+
headers[key] = value;
|
|
22
|
+
});
|
|
23
|
+
|
|
24
|
+
return {
|
|
25
|
+
data,
|
|
26
|
+
statusCode: response.status,
|
|
27
|
+
header: headers,
|
|
28
|
+
};
|
|
29
|
+
} finally {
|
|
30
|
+
clearTimeout(timeoutId);
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
}
|
package/src/utils/index.ts
CHANGED
|
@@ -8,13 +8,10 @@
|
|
|
8
8
|
// 导入安全工具函数
|
|
9
9
|
import * as xssProtection from './security/xss-protection';
|
|
10
10
|
import * as apiSecurity from './security/api-security';
|
|
11
|
-
import { httpClient as defaultHttpClient } from './
|
|
11
|
+
import { httpClient as defaultHttpClient } from './http/http-client';
|
|
12
12
|
|
|
13
13
|
// 导入类型工具函数
|
|
14
|
-
import {
|
|
15
|
-
deepEqual,
|
|
16
|
-
} from './typeHelpers';
|
|
17
|
-
|
|
14
|
+
import { deepEqual } from './typeHelpers';
|
|
18
15
|
|
|
19
16
|
// ==================== 创建命名空间和工具类 ====================
|
|
20
17
|
|
|
@@ -43,7 +40,7 @@ export class PlatformDetector {
|
|
|
43
40
|
}
|
|
44
41
|
|
|
45
42
|
static isMobile(): boolean {
|
|
46
|
-
return this.isMiniProgram() || this.isH5() && window.innerWidth < 768;
|
|
43
|
+
return this.isMiniProgram() || (this.isH5() && window.innerWidth < 768);
|
|
47
44
|
}
|
|
48
45
|
|
|
49
46
|
static getPlatformInfo(): { platform: string; isMiniProgram: boolean; isH5: boolean; isRN: boolean; env: string } {
|
|
@@ -63,7 +60,7 @@ export class PlatformDetector {
|
|
|
63
60
|
isMiniProgram: this.isMiniProgram(),
|
|
64
61
|
isH5: this.isH5(),
|
|
65
62
|
isRN: this.isRN(),
|
|
66
|
-
env: process.env['NODE_ENV'] || 'development'
|
|
63
|
+
env: process.env['NODE_ENV'] || 'development',
|
|
67
64
|
};
|
|
68
65
|
|
|
69
66
|
this.cache.set(platform, info);
|
|
@@ -92,7 +89,7 @@ export const utils = {
|
|
|
92
89
|
...xssProtection,
|
|
93
90
|
api: apiSecurity,
|
|
94
91
|
},
|
|
95
|
-
|
|
92
|
+
http: {
|
|
96
93
|
httpClient: defaultHttpClient,
|
|
97
94
|
},
|
|
98
95
|
|
|
@@ -67,7 +67,7 @@ class InputValidator {
|
|
|
67
67
|
return {
|
|
68
68
|
isValid: errors.length === 0,
|
|
69
69
|
errors,
|
|
70
|
-
sanitized
|
|
70
|
+
sanitized,
|
|
71
71
|
};
|
|
72
72
|
}
|
|
73
73
|
|
|
@@ -81,7 +81,7 @@ class InputValidator {
|
|
|
81
81
|
return this.validateString(email, {
|
|
82
82
|
required: true,
|
|
83
83
|
pattern: emailPattern,
|
|
84
|
-
sanitize: true
|
|
84
|
+
sanitize: true,
|
|
85
85
|
});
|
|
86
86
|
}
|
|
87
87
|
|
|
@@ -115,7 +115,7 @@ class InputValidator {
|
|
|
115
115
|
return this.validateString(phone, {
|
|
116
116
|
required: true,
|
|
117
117
|
pattern: phonePattern,
|
|
118
|
-
sanitize: true
|
|
118
|
+
sanitize: true,
|
|
119
119
|
});
|
|
120
120
|
}
|
|
121
121
|
|
|
@@ -136,19 +136,19 @@ class InputValidator {
|
|
|
136
136
|
if (!allowedProtocols.includes(urlObj.protocol)) {
|
|
137
137
|
return {
|
|
138
138
|
isValid: false,
|
|
139
|
-
errors: ['只支持 http 和 https 协议']
|
|
139
|
+
errors: ['只支持 http 和 https 协议'],
|
|
140
140
|
};
|
|
141
141
|
}
|
|
142
142
|
|
|
143
143
|
return {
|
|
144
144
|
isValid: true,
|
|
145
145
|
errors: [],
|
|
146
|
-
sanitized: url
|
|
146
|
+
sanitized: url,
|
|
147
147
|
};
|
|
148
148
|
} catch (e) {
|
|
149
149
|
return {
|
|
150
150
|
isValid: false,
|
|
151
|
-
errors: ['无效的URL地址']
|
|
151
|
+
errors: ['无效的URL地址'],
|
|
152
152
|
};
|
|
153
153
|
}
|
|
154
154
|
}
|
|
@@ -179,7 +179,7 @@ class InputValidator {
|
|
|
179
179
|
|
|
180
180
|
return {
|
|
181
181
|
isValid: errors.length === 0,
|
|
182
|
-
errors
|
|
182
|
+
errors,
|
|
183
183
|
};
|
|
184
184
|
}
|
|
185
185
|
|
|
@@ -219,7 +219,7 @@ class InputValidator {
|
|
|
219
219
|
if (typeof value === 'string') {
|
|
220
220
|
const result = this.validateString(value, rule || {});
|
|
221
221
|
if (!result.isValid) {
|
|
222
|
-
errors.push(...result.errors.map(err => `${key}: ${err}`));
|
|
222
|
+
errors.push(...result.errors.map((err) => `${key}: ${err}`));
|
|
223
223
|
}
|
|
224
224
|
if (result.sanitized !== undefined) {
|
|
225
225
|
sanitized[key] = result.sanitized;
|
|
@@ -230,7 +230,7 @@ class InputValidator {
|
|
|
230
230
|
const strValue = String(value);
|
|
231
231
|
const result = this.validateNumber(strValue, rule?.minLength, rule?.maxLength);
|
|
232
232
|
if (!result.isValid) {
|
|
233
|
-
errors.push(...result.errors.map(err => `${key}: ${err}`));
|
|
233
|
+
errors.push(...result.errors.map((err) => `${key}: ${err}`));
|
|
234
234
|
}
|
|
235
235
|
sanitized[key] = value;
|
|
236
236
|
} else {
|
|
@@ -242,7 +242,7 @@ class InputValidator {
|
|
|
242
242
|
return {
|
|
243
243
|
isValid: errors.length === 0,
|
|
244
244
|
errors,
|
|
245
|
-
sanitized: Object.keys(sanitized).length > 0 ? sanitized : undefined
|
|
245
|
+
sanitized: Object.keys(sanitized).length > 0 ? sanitized : undefined,
|
|
246
246
|
};
|
|
247
247
|
}
|
|
248
248
|
}
|
|
@@ -253,9 +253,12 @@ const inputValidator = new InputValidator();
|
|
|
253
253
|
// 导出便捷方法
|
|
254
254
|
export const validateString = (value: string, rules: ValidationRule) => inputValidator.validateString(value, rules);
|
|
255
255
|
export const validateEmail = (email: string) => inputValidator.validateEmail(email);
|
|
256
|
-
export const validatePhone = (phone: string, countryCode: 'CN' | 'US' | 'GB' | 'JP' | 'KR' = 'CN') =>
|
|
256
|
+
export const validatePhone = (phone: string, countryCode: 'CN' | 'US' | 'GB' | 'JP' | 'KR' = 'CN') =>
|
|
257
|
+
inputValidator.validatePhone(phone, countryCode);
|
|
257
258
|
export const validateURL = (url: string) => inputValidator.validateURL(url);
|
|
258
|
-
export const validateNumber = (value: string, min?: number, max?: number) =>
|
|
259
|
-
|
|
259
|
+
export const validateNumber = (value: string, min?: number, max?: number) =>
|
|
260
|
+
inputValidator.validateNumber(value, min, max);
|
|
261
|
+
export const validateObject = (obj: Record<string, any>, rules: Record<string, ValidationRule>) =>
|
|
262
|
+
inputValidator.validateObject(obj, rules);
|
|
260
263
|
|
|
261
|
-
export default inputValidator;
|
|
264
|
+
export default inputValidator;
|