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
|
@@ -3,7 +3,6 @@
|
|
|
3
3
|
* 提供请求拦截、签名机制和敏感数据脱敏功能
|
|
4
4
|
*/
|
|
5
5
|
|
|
6
|
-
|
|
7
6
|
// 安全配置
|
|
8
7
|
const API_SECURITY_CONFIG = {
|
|
9
8
|
// 签名密钥
|
|
@@ -35,7 +34,7 @@ const API_SECURITY_CONFIG = {
|
|
|
35
34
|
'private_key',
|
|
36
35
|
'authorization',
|
|
37
36
|
'cookie',
|
|
38
|
-
'session'
|
|
37
|
+
'session',
|
|
39
38
|
],
|
|
40
39
|
// 需要签名的请求方法
|
|
41
40
|
SIGNATURE_METHODS: ['POST', 'PUT', 'DELETE', 'PATCH'],
|
|
@@ -49,8 +48,8 @@ const API_SECURITY_CONFIG = {
|
|
|
49
48
|
'x-signature',
|
|
50
49
|
'x-device-id',
|
|
51
50
|
'x-platform',
|
|
52
|
-
'x-version'
|
|
53
|
-
]
|
|
51
|
+
'x-version',
|
|
52
|
+
],
|
|
54
53
|
};
|
|
55
54
|
|
|
56
55
|
// 脱敏配置
|
|
@@ -59,9 +58,10 @@ const MASK_CONFIG = {
|
|
|
59
58
|
email: (email: string) => {
|
|
60
59
|
if (!email || !email.includes('@')) return email;
|
|
61
60
|
const [localPart = '', domain = ''] = email.split('@');
|
|
62
|
-
const maskedLocal =
|
|
63
|
-
|
|
64
|
-
|
|
61
|
+
const maskedLocal =
|
|
62
|
+
localPart.length > 3
|
|
63
|
+
? localPart.slice(0, 2) + '*'.repeat(localPart.length - 2)
|
|
64
|
+
: (localPart[0] ?? '') + '*'.repeat(Math.max(localPart.length - 1, 0));
|
|
65
65
|
return maskedLocal + (domain ? '@' + domain : '');
|
|
66
66
|
},
|
|
67
67
|
|
|
@@ -87,7 +87,7 @@ const MASK_CONFIG = {
|
|
|
87
87
|
default: (str: string, visibleStart = 2, visibleEnd = 2) => {
|
|
88
88
|
if (!str || str.length <= visibleStart + visibleEnd) return str;
|
|
89
89
|
return str.slice(0, visibleStart) + '*'.repeat(str.length - visibleStart - visibleEnd) + str.slice(-visibleEnd);
|
|
90
|
-
}
|
|
90
|
+
},
|
|
91
91
|
};
|
|
92
92
|
|
|
93
93
|
/**
|
|
@@ -101,7 +101,7 @@ export const generateSignature = (method: string, url: string, data: any, timest
|
|
|
101
101
|
let hash = 0;
|
|
102
102
|
for (let i = 0; i < signString.length; i++) {
|
|
103
103
|
const char = signString.charCodeAt(i);
|
|
104
|
-
hash = (
|
|
104
|
+
hash = (hash << 5) - hash + char;
|
|
105
105
|
hash = hash & hash; // 转换为32位整数
|
|
106
106
|
}
|
|
107
107
|
|
|
@@ -111,7 +111,13 @@ export const generateSignature = (method: string, url: string, data: any, timest
|
|
|
111
111
|
/**
|
|
112
112
|
* 验证请求签名
|
|
113
113
|
*/
|
|
114
|
-
export const verifySignature = (
|
|
114
|
+
export const verifySignature = (
|
|
115
|
+
method: string,
|
|
116
|
+
url: string,
|
|
117
|
+
data: any,
|
|
118
|
+
timestamp: number,
|
|
119
|
+
signature: string,
|
|
120
|
+
): boolean => {
|
|
115
121
|
const expectedSignature = generateSignature(method, url, data, timestamp);
|
|
116
122
|
return expectedSignature === signature;
|
|
117
123
|
};
|
|
@@ -121,7 +127,7 @@ export const verifySignature = (method: string, url: string, data: any, timestam
|
|
|
121
127
|
*/
|
|
122
128
|
export const isRequestExpired = (timestamp: number, maxAge: number = 300000): boolean => {
|
|
123
129
|
const now = Date.now();
|
|
124
|
-
return
|
|
130
|
+
return now - timestamp > maxAge; // 默认5分钟过期
|
|
125
131
|
};
|
|
126
132
|
|
|
127
133
|
/**
|
|
@@ -135,15 +141,13 @@ export const maskSensitiveData = (data: any, customMaskFields?: string[]): any =
|
|
|
135
141
|
const sensitiveFields = [...API_SECURITY_CONFIG.SENSITIVE_FIELDS, ...(customMaskFields || [])];
|
|
136
142
|
|
|
137
143
|
if (Array.isArray(data)) {
|
|
138
|
-
return data.map(item => maskSensitiveData(item, customMaskFields));
|
|
144
|
+
return data.map((item) => maskSensitiveData(item, customMaskFields));
|
|
139
145
|
}
|
|
140
146
|
|
|
141
147
|
const masked: any = {};
|
|
142
148
|
|
|
143
149
|
for (const [key, value] of Object.entries(data)) {
|
|
144
|
-
const isSensitive = sensitiveFields.some(field =>
|
|
145
|
-
key.toLowerCase().includes(field.toLowerCase())
|
|
146
|
-
);
|
|
150
|
+
const isSensitive = sensitiveFields.some((field) => key.toLowerCase().includes(field.toLowerCase()));
|
|
147
151
|
|
|
148
152
|
if (isSensitive) {
|
|
149
153
|
// 根据字段类型选择合适的脱敏方式
|
|
@@ -178,7 +182,7 @@ export const buildSecureHeaders = (method: string, url: string, data?: any): Rec
|
|
|
178
182
|
'X-Timestamp': timestamp.toString(),
|
|
179
183
|
'X-Device-ID': getDeviceId(),
|
|
180
184
|
'X-Platform': getPlatform(),
|
|
181
|
-
'X-Version': process.env['npm_package_version'] || '1.0.0'
|
|
185
|
+
'X-Version': process.env['npm_package_version'] || '1.0.0',
|
|
182
186
|
};
|
|
183
187
|
|
|
184
188
|
// 对特定请求方法添加签名
|
|
@@ -213,12 +217,13 @@ export const validateHeaders = (headers: Record<string, string>): { valid: boole
|
|
|
213
217
|
}
|
|
214
218
|
|
|
215
219
|
// 检查是否包含不允许的头部
|
|
216
|
-
const headerKeys = Object.keys(headers).map(key => key.toLowerCase());
|
|
217
|
-
const disallowedHeaders = headerKeys.filter(
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
|
|
220
|
+
const headerKeys = Object.keys(headers).map((key) => key.toLowerCase());
|
|
221
|
+
const disallowedHeaders = headerKeys.filter(
|
|
222
|
+
(key) =>
|
|
223
|
+
!API_SECURITY_CONFIG.ALLOWED_HEADERS.includes(key) &&
|
|
224
|
+
!key.startsWith('x-') &&
|
|
225
|
+
!key.startsWith('content-') &&
|
|
226
|
+
key !== 'authorization',
|
|
222
227
|
);
|
|
223
228
|
|
|
224
229
|
if (disallowedHeaders.length > 0) {
|
|
@@ -227,7 +232,7 @@ export const validateHeaders = (headers: Record<string, string>): { valid: boole
|
|
|
227
232
|
|
|
228
233
|
return {
|
|
229
234
|
valid: errors.length === 0,
|
|
230
|
-
errors
|
|
235
|
+
errors,
|
|
231
236
|
};
|
|
232
237
|
};
|
|
233
238
|
|
|
@@ -269,7 +274,7 @@ export const createApiInterceptor = () => {
|
|
|
269
274
|
},
|
|
270
275
|
execute: (config: any) => {
|
|
271
276
|
return requestInterceptors.reduce((acc, interceptor) => interceptor(acc), config);
|
|
272
|
-
}
|
|
277
|
+
},
|
|
273
278
|
},
|
|
274
279
|
response: {
|
|
275
280
|
use: (interceptor: (response: any) => any) => {
|
|
@@ -277,8 +282,8 @@ export const createApiInterceptor = () => {
|
|
|
277
282
|
},
|
|
278
283
|
execute: (response: any) => {
|
|
279
284
|
return responseInterceptors.reduce((acc, interceptor) => interceptor(acc), response);
|
|
280
|
-
}
|
|
281
|
-
}
|
|
285
|
+
},
|
|
286
|
+
},
|
|
282
287
|
};
|
|
283
288
|
};
|
|
284
289
|
|
|
@@ -322,10 +327,12 @@ export const isSecureUrl = (url: string): boolean => {
|
|
|
322
327
|
|
|
323
328
|
// 只允许HTTPS和相对路径
|
|
324
329
|
if (parsedUrl.protocol === 'https:') return true;
|
|
325
|
-
if (
|
|
326
|
-
|
|
327
|
-
|
|
328
|
-
|
|
330
|
+
if (
|
|
331
|
+
parsedUrl.protocol === 'http:' &&
|
|
332
|
+
(parsedUrl.hostname === 'localhost' ||
|
|
333
|
+
parsedUrl.hostname.startsWith('127.0.0.1') ||
|
|
334
|
+
parsedUrl.hostname.startsWith('192.168.'))
|
|
335
|
+
) {
|
|
329
336
|
return true;
|
|
330
337
|
}
|
|
331
338
|
|
|
@@ -342,7 +349,7 @@ export const isSecureUrl = (url: string): boolean => {
|
|
|
342
349
|
export const secureRetry = async <T>(
|
|
343
350
|
fn: () => Promise<T>,
|
|
344
351
|
maxRetries: number = API_SECURITY_CONFIG.MAX_RETRIES,
|
|
345
|
-
delay: number = 1000
|
|
352
|
+
delay: number = 1000,
|
|
346
353
|
): Promise<T> => {
|
|
347
354
|
let lastError: Error;
|
|
348
355
|
|
|
@@ -353,18 +360,19 @@ export const secureRetry = async <T>(
|
|
|
353
360
|
lastError = error as Error;
|
|
354
361
|
|
|
355
362
|
// 如果是认证错误或权限错误,不重试
|
|
356
|
-
if (
|
|
357
|
-
error
|
|
358
|
-
error.message.includes('
|
|
359
|
-
|
|
360
|
-
|
|
361
|
-
|
|
363
|
+
if (
|
|
364
|
+
error instanceof Error &&
|
|
365
|
+
(error.message.includes('401') ||
|
|
366
|
+
error.message.includes('403') ||
|
|
367
|
+
error.message.includes('Unauthorized') ||
|
|
368
|
+
error.message.includes('Forbidden'))
|
|
369
|
+
) {
|
|
362
370
|
throw error;
|
|
363
371
|
}
|
|
364
372
|
|
|
365
373
|
if (i < maxRetries) {
|
|
366
374
|
// 指数退避
|
|
367
|
-
await new Promise(resolve => setTimeout(resolve, delay * Math.pow(2, i)));
|
|
375
|
+
await new Promise((resolve) => setTimeout(resolve, delay * Math.pow(2, i)));
|
|
368
376
|
}
|
|
369
377
|
}
|
|
370
378
|
}
|
|
@@ -382,5 +390,5 @@ export default {
|
|
|
382
390
|
createApiInterceptor,
|
|
383
391
|
isSecureUrl,
|
|
384
392
|
secureRetry,
|
|
385
|
-
MASK_CONFIG
|
|
393
|
+
MASK_CONFIG,
|
|
386
394
|
};
|
|
@@ -28,7 +28,7 @@ class SecurityHeaders {
|
|
|
28
28
|
xXSSProtection: '1; mode=block',
|
|
29
29
|
referrerPolicy: 'strict-origin-when-cross-origin',
|
|
30
30
|
permissionsPolicy: true,
|
|
31
|
-
expectCT: false
|
|
31
|
+
expectCT: false,
|
|
32
32
|
};
|
|
33
33
|
|
|
34
34
|
/**
|
|
@@ -43,9 +43,8 @@ class SecurityHeaders {
|
|
|
43
43
|
|
|
44
44
|
// Content Security Policy
|
|
45
45
|
if (finalConfig.contentSecurityPolicy) {
|
|
46
|
-
const csp =
|
|
47
|
-
? finalConfig.contentSecurityPolicy
|
|
48
|
-
: this.generateCSP();
|
|
46
|
+
const csp =
|
|
47
|
+
typeof finalConfig.contentSecurityPolicy === 'string' ? finalConfig.contentSecurityPolicy : this.generateCSP();
|
|
49
48
|
|
|
50
49
|
// 生成CSP nonce
|
|
51
50
|
cspNonce = this.generateNonce();
|
|
@@ -55,9 +54,10 @@ class SecurityHeaders {
|
|
|
55
54
|
|
|
56
55
|
// Strict Transport Security
|
|
57
56
|
if (finalConfig.strictTransportSecurity) {
|
|
58
|
-
const hsts =
|
|
59
|
-
|
|
60
|
-
|
|
57
|
+
const hsts =
|
|
58
|
+
typeof finalConfig.strictTransportSecurity === 'string'
|
|
59
|
+
? finalConfig.strictTransportSecurity
|
|
60
|
+
: 'max-age=31536000; includeSubDomains; preload';
|
|
61
61
|
headers['Strict-Transport-Security'] = hsts;
|
|
62
62
|
}
|
|
63
63
|
|
|
@@ -68,47 +68,42 @@ class SecurityHeaders {
|
|
|
68
68
|
|
|
69
69
|
// X-Frame-Options
|
|
70
70
|
if (finalConfig.xFrameOptions) {
|
|
71
|
-
const frameOptions = typeof finalConfig.xFrameOptions === 'string'
|
|
72
|
-
? finalConfig.xFrameOptions
|
|
73
|
-
: 'DENY';
|
|
71
|
+
const frameOptions = typeof finalConfig.xFrameOptions === 'string' ? finalConfig.xFrameOptions : 'DENY';
|
|
74
72
|
headers['X-Frame-Options'] = frameOptions;
|
|
75
73
|
}
|
|
76
74
|
|
|
77
75
|
// X-XSS-Protection
|
|
78
76
|
if (finalConfig.xXSSProtection) {
|
|
79
|
-
const xssProtection =
|
|
80
|
-
? finalConfig.xXSSProtection
|
|
81
|
-
: '1; mode=block';
|
|
77
|
+
const xssProtection =
|
|
78
|
+
typeof finalConfig.xXSSProtection === 'string' ? finalConfig.xXSSProtection : '1; mode=block';
|
|
82
79
|
headers['X-XSS-Protection'] = xssProtection;
|
|
83
80
|
}
|
|
84
81
|
|
|
85
82
|
// Referrer Policy
|
|
86
83
|
if (finalConfig.referrerPolicy) {
|
|
87
|
-
const referrerPolicy =
|
|
88
|
-
? finalConfig.referrerPolicy
|
|
89
|
-
: 'strict-origin-when-cross-origin';
|
|
84
|
+
const referrerPolicy =
|
|
85
|
+
typeof finalConfig.referrerPolicy === 'string' ? finalConfig.referrerPolicy : 'strict-origin-when-cross-origin';
|
|
90
86
|
headers['Referrer-Policy'] = referrerPolicy;
|
|
91
87
|
}
|
|
92
88
|
|
|
93
89
|
// Permissions Policy
|
|
94
90
|
if (finalConfig.permissionsPolicy) {
|
|
95
|
-
const permissionsPolicy =
|
|
96
|
-
|
|
97
|
-
|
|
91
|
+
const permissionsPolicy =
|
|
92
|
+
typeof finalConfig.permissionsPolicy === 'string'
|
|
93
|
+
? finalConfig.permissionsPolicy
|
|
94
|
+
: this.generatePermissionsPolicy();
|
|
98
95
|
headers['Permissions-Policy'] = permissionsPolicy;
|
|
99
96
|
}
|
|
100
97
|
|
|
101
98
|
// Expect-CT
|
|
102
99
|
if (finalConfig.expectCT) {
|
|
103
|
-
const expectCT = typeof finalConfig.expectCT === 'string'
|
|
104
|
-
? finalConfig.expectCT
|
|
105
|
-
: 'max-age=86400, enforce';
|
|
100
|
+
const expectCT = typeof finalConfig.expectCT === 'string' ? finalConfig.expectCT : 'max-age=86400, enforce';
|
|
106
101
|
headers['Expect-CT'] = expectCT;
|
|
107
102
|
}
|
|
108
103
|
|
|
109
104
|
return {
|
|
110
105
|
headers,
|
|
111
|
-
cspNonce
|
|
106
|
+
cspNonce,
|
|
112
107
|
};
|
|
113
108
|
}
|
|
114
109
|
|
|
@@ -131,7 +126,7 @@ class SecurityHeaders {
|
|
|
131
126
|
"form-action 'self'",
|
|
132
127
|
"frame-ancestors 'none'",
|
|
133
128
|
"require-trusted-types-for 'script'",
|
|
134
|
-
|
|
129
|
+
'report-uri /csp-report',
|
|
135
130
|
].join('; ');
|
|
136
131
|
}
|
|
137
132
|
|
|
@@ -142,39 +137,39 @@ class SecurityHeaders {
|
|
|
142
137
|
private generatePermissionsPolicy(): string {
|
|
143
138
|
// 基础权限策略,可根据实际需求调整
|
|
144
139
|
return [
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
140
|
+
'accelerometer=()',
|
|
141
|
+
'ambient-light-sensor=()',
|
|
142
|
+
'battery=()',
|
|
143
|
+
'bluetooth=()',
|
|
144
|
+
'camera=()',
|
|
145
|
+
'cross-origin-isolated=()',
|
|
146
|
+
'display-capture=()',
|
|
147
|
+
'document-domain=()',
|
|
148
|
+
'encrypted-media=()',
|
|
149
|
+
'execution-while-not-rendered=()',
|
|
150
|
+
'execution-while-out-of-viewport=()',
|
|
151
|
+
'focus-without-user-activation=()',
|
|
152
|
+
'fullscreen=()',
|
|
153
|
+
'geolocation=()',
|
|
154
|
+
'gyroscope=()',
|
|
155
|
+
'hid=()',
|
|
156
|
+
'identity-credentials-get=()',
|
|
157
|
+
'idle-detection=()',
|
|
158
|
+
'local-fonts=()',
|
|
159
|
+
'magnetometer=()',
|
|
160
|
+
'microphone=()',
|
|
161
|
+
'midi=()',
|
|
162
|
+
'otp-credentials=()',
|
|
163
|
+
'payment=()',
|
|
164
|
+
'picture-in-picture=()',
|
|
165
|
+
'publickey-credentials-get=()',
|
|
166
|
+
'screen-wake-lock=()',
|
|
167
|
+
'serial=()',
|
|
168
|
+
'storage-access=()',
|
|
169
|
+
'usb=()',
|
|
170
|
+
'web-share=()',
|
|
171
|
+
'window-management=()',
|
|
172
|
+
'xr-spatial-tracking=()',
|
|
178
173
|
].join(', ');
|
|
179
174
|
}
|
|
180
175
|
|
|
@@ -209,7 +204,7 @@ class SecurityHeaders {
|
|
|
209
204
|
*/
|
|
210
205
|
addSecurityHeadersToRequest(
|
|
211
206
|
originalHeaders: Record<string, string> = {},
|
|
212
|
-
config?: SecurityHeadersConfig
|
|
207
|
+
config?: SecurityHeadersConfig,
|
|
213
208
|
): Record<string, string> {
|
|
214
209
|
const { headers } = this.generateHeaders(config);
|
|
215
210
|
|
|
@@ -231,7 +226,7 @@ class SecurityHeaders {
|
|
|
231
226
|
|
|
232
227
|
return {
|
|
233
228
|
...originalHeaders,
|
|
234
|
-
...requestSecurityHeaders
|
|
229
|
+
...requestSecurityHeaders,
|
|
235
230
|
};
|
|
236
231
|
}
|
|
237
232
|
|
|
@@ -243,13 +238,13 @@ class SecurityHeaders {
|
|
|
243
238
|
*/
|
|
244
239
|
addSecurityHeadersToResponse(
|
|
245
240
|
originalHeaders: Record<string, string> = {},
|
|
246
|
-
config?: SecurityHeadersConfig
|
|
241
|
+
config?: SecurityHeadersConfig,
|
|
247
242
|
): Record<string, string> {
|
|
248
243
|
const { headers } = this.generateHeaders(config);
|
|
249
244
|
|
|
250
245
|
return {
|
|
251
246
|
...originalHeaders,
|
|
252
|
-
...headers
|
|
247
|
+
...headers,
|
|
253
248
|
};
|
|
254
249
|
}
|
|
255
250
|
|
|
@@ -269,7 +264,7 @@ class SecurityHeaders {
|
|
|
269
264
|
|
|
270
265
|
// 检查是否包含必要的指令
|
|
271
266
|
const requiredDirectives = ['default-src', 'script-src'];
|
|
272
|
-
const directives = csp.split(';').map(dir => dir.trim().split('=')[0]);
|
|
267
|
+
const directives = csp.split(';').map((dir) => dir.trim().split('=')[0]);
|
|
273
268
|
|
|
274
269
|
for (const directive of requiredDirectives) {
|
|
275
270
|
if (!directives.includes(directive)) {
|
|
@@ -283,7 +278,7 @@ class SecurityHeaders {
|
|
|
283
278
|
/default-src\s+\*\s*;/,
|
|
284
279
|
/'unsafe-inline'/,
|
|
285
280
|
/'unsafe-eval'/,
|
|
286
|
-
/data:\s*script
|
|
281
|
+
/data:\s*script/,
|
|
287
282
|
];
|
|
288
283
|
|
|
289
284
|
for (const pattern of unsafePatterns) {
|
|
@@ -294,7 +289,7 @@ class SecurityHeaders {
|
|
|
294
289
|
|
|
295
290
|
return {
|
|
296
291
|
isValid: errors.length === 0,
|
|
297
|
-
errors
|
|
292
|
+
errors,
|
|
298
293
|
};
|
|
299
294
|
}
|
|
300
295
|
}
|
|
@@ -303,12 +298,11 @@ class SecurityHeaders {
|
|
|
303
298
|
const securityHeaders = new SecurityHeaders();
|
|
304
299
|
|
|
305
300
|
// 导出便捷方法
|
|
306
|
-
export const generateSecurityHeaders = (config?: SecurityHeadersConfig) =>
|
|
307
|
-
securityHeaders.generateHeaders(config);
|
|
301
|
+
export const generateSecurityHeaders = (config?: SecurityHeadersConfig) => securityHeaders.generateHeaders(config);
|
|
308
302
|
export const addSecurityHeadersToRequest = (headers?: Record<string, string>, config?: SecurityHeadersConfig) =>
|
|
309
303
|
securityHeaders.addSecurityHeadersToRequest(headers, config);
|
|
310
304
|
export const addSecurityHeadersToResponse = (headers?: Record<string, string>, config?: SecurityHeadersConfig) =>
|
|
311
305
|
securityHeaders.addSecurityHeadersToResponse(headers, config);
|
|
312
306
|
export const validateCSP = (csp: string) => securityHeaders.validateCSP(csp);
|
|
313
307
|
|
|
314
|
-
export default securityHeaders;
|
|
308
|
+
export default securityHeaders;
|
package/src/utils/typeHelpers.ts
CHANGED
|
@@ -1,16 +1,16 @@
|
|
|
1
1
|
export function deepEqual(a: any, b: any): boolean {
|
|
2
|
-
if (a === b) return true
|
|
2
|
+
if (a === b) return true;
|
|
3
3
|
if (a && b && typeof a === 'object' && typeof b === 'object') {
|
|
4
4
|
if (Array.isArray(a) && Array.isArray(b)) {
|
|
5
|
-
if (a.length !== b.length) return false
|
|
6
|
-
for (let i = 0; i < a.length; i++) if (!deepEqual(a[i], b[i])) return false
|
|
7
|
-
return true
|
|
5
|
+
if (a.length !== b.length) return false;
|
|
6
|
+
for (let i = 0; i < a.length; i++) if (!deepEqual(a[i], b[i])) return false;
|
|
7
|
+
return true;
|
|
8
8
|
}
|
|
9
|
-
const aKeys = Object.keys(a)
|
|
10
|
-
const bKeys = Object.keys(b)
|
|
11
|
-
if (aKeys.length !== bKeys.length) return false
|
|
12
|
-
for (const k of aKeys) if (!deepEqual(a[k], b[k])) return false
|
|
13
|
-
return true
|
|
9
|
+
const aKeys = Object.keys(a);
|
|
10
|
+
const bKeys = Object.keys(b);
|
|
11
|
+
if (aKeys.length !== bKeys.length) return false;
|
|
12
|
+
for (const k of aKeys) if (!deepEqual(a[k], b[k])) return false;
|
|
13
|
+
return true;
|
|
14
14
|
}
|
|
15
|
-
return false
|
|
15
|
+
return false;
|
|
16
16
|
}
|