@momo-kits/native-kits 0.157.1-beta.9-debug ā 0.157.1-com.1-debug
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/compose/build.gradle.kts +1 -1
- package/compose/compose.podspec +1 -1
- package/compose/src/commonMain/kotlin/vn/momo/kits/components/Avatar.kt +157 -0
- package/compose/src/commonMain/kotlin/vn/momo/kits/components/Carousel.kt +123 -0
- package/compose/src/commonMain/kotlin/vn/momo/kits/components/Collapse.kt +224 -0
- package/compose/src/commonMain/kotlin/vn/momo/kits/components/Loader.kt +108 -0
- package/compose/src/commonMain/kotlin/vn/momo/kits/components/ProgressInfo.kt +350 -0
- package/compose/src/commonMain/kotlin/vn/momo/kits/components/Rating.kt +87 -0
- package/compose/src/commonMain/kotlin/vn/momo/kits/components/Slider.kt +360 -0
- package/compose/src/commonMain/kotlin/vn/momo/kits/components/Stepper.kt +256 -0
- package/compose/src/commonMain/kotlin/vn/momo/kits/components/Steps.kt +494 -0
- package/compose/src/commonMain/kotlin/vn/momo/kits/components/SuggestAction.kt +131 -0
- package/compose/src/commonMain/kotlin/vn/momo/kits/components/Swipe.kt +215 -0
- package/compose/src/commonMain/kotlin/vn/momo/kits/components/TabView.kt +449 -0
- package/compose/src/commonMain/kotlin/vn/momo/kits/components/Tooltip.kt +21 -7
- package/compose/src/commonMain/kotlin/vn/momo/kits/components/Uploader.kt +192 -0
- package/gradle.properties +1 -1
- package/ios/Input/Input.swift +4 -0
- package/local.properties +2 -2
- package/package.json +1 -1
- package/src/doctor/README.md +73 -0
- package/src/doctor/package-lock.json +885 -0
- package/src/doctor/package.json +44 -0
- package/src/doctor/publish.sh +27 -0
- package/src/doctor/src/Users.json +112 -0
- package/src/doctor/src/Whitelist.json +6 -0
- package/src/doctor/src/commands/check.ts +81 -0
- package/src/doctor/src/commands/doctor.ts +193 -0
- package/src/doctor/src/index.ts +35 -0
- package/src/doctor/src/logger.ts +84 -0
- package/src/doctor/src/task/native.ts +21 -0
- package/src/doctor/src/task/utils.ts +20 -0
- package/src/doctor/src/utils/checkCoreDependencies.ts +138 -0
- package/src/doctor/src/utils/checkDeletedPackage.ts +53 -0
- package/src/doctor/src/utils/checkDeprecatedPackages.ts +168 -0
- package/src/doctor/src/utils/checkDeprecatedVersion.ts +60 -0
- package/src/doctor/src/utils/checkShareDependencies.ts +251 -0
- package/src/doctor/src/utils/checkWrongVersionCommunityPackage.ts +64 -0
- package/src/doctor/src/utils/getErrorMessage.ts +84 -0
- package/src/doctor/src/utils/scanComponentUsage.ts +206 -0
- package/src/doctor/src/utils/scanFoundationImports.ts +169 -0
- package/src/doctor/src/utils/scanMaxApiUsage.ts +86 -0
- package/src/doctor/src/utils/scanNativeModulesUsage.ts +78 -0
- package/src/doctor/src/utils/sendMessage.ts +28 -0
- package/src/doctor/tsconfig.json +14 -0
- package/src/doctor/yarn.lock +492 -0
- package/src/foundations/Application/BottomSheet.tsx +358 -0
- package/src/foundations/Application/BottomTab/BottomTabBar.tsx +320 -0
- package/src/foundations/Application/BottomTab/CustomBottomTabItem.tsx +155 -0
- package/src/foundations/Application/BottomTab/TabBarIcon.tsx +113 -0
- package/src/foundations/Application/BottomTab/index.tsx +449 -0
- package/src/foundations/Application/Components/BackgroundImageView.tsx +126 -0
- package/src/foundations/Application/Components/HeaderAnimated.tsx +69 -0
- package/src/foundations/Application/Components/HeaderBackground.tsx +83 -0
- package/src/foundations/Application/Components/HeaderExtendHeader.tsx +225 -0
- package/src/foundations/Application/Components/HeaderLeft.tsx +93 -0
- package/src/foundations/Application/Components/HeaderRight.tsx +444 -0
- package/src/foundations/Application/Components/HeaderTitle.tsx +596 -0
- package/src/foundations/Application/Components/NavigationButton.tsx +76 -0
- package/src/foundations/Application/Components/SearchHeader.tsx +127 -0
- package/src/foundations/Application/Localize.ts +44 -0
- package/src/foundations/Application/ModalScreen.tsx +148 -0
- package/src/foundations/Application/Navigation.ts +63 -0
- package/src/foundations/Application/NavigationContainer.tsx +245 -0
- package/src/foundations/Application/Navigator.ts +171 -0
- package/src/foundations/Application/ScaleSizeProvider.tsx +16 -0
- package/src/foundations/Application/StackScreen.tsx +420 -0
- package/src/foundations/Application/TooltipPortal.tsx +127 -0
- package/src/foundations/Application/WidgetContainer.tsx +162 -0
- package/src/foundations/Application/index.ts +34 -0
- package/src/foundations/Application/types.ts +350 -0
- package/src/foundations/Application/utils.tsx +239 -0
- package/src/foundations/Assets/DotAnimation.json +256 -0
- package/src/foundations/Assets/SpinnerAnimation.json +1027 -0
- package/src/foundations/Assets/icon.json +4052 -0
- package/src/foundations/Assets/icon_bank.json +506 -0
- package/src/foundations/Assets/language.json +208 -0
- package/src/foundations/Assets/lottie_circle_loader.json +1 -0
- package/src/foundations/Assets/pinAnimation.json +1 -0
- package/src/foundations/Assets/unpinAnimation.json +1 -0
- package/src/foundations/Badge/Badge.tsx +104 -0
- package/src/foundations/Badge/BadgeDot.tsx +35 -0
- package/src/foundations/Badge/BadgeDotAnimation.tsx +95 -0
- package/src/foundations/Badge/BadgeRibbon.tsx +112 -0
- package/src/foundations/Badge/Shape.tsx +29 -0
- package/src/foundations/Badge/index.tsx +8 -0
- package/src/foundations/Badge/styles.ts +125 -0
- package/src/foundations/Badge/types.ts +68 -0
- package/src/foundations/Button/index.tsx +371 -0
- package/src/foundations/Button/styles.ts +65 -0
- package/src/foundations/CheckBox/index.tsx +104 -0
- package/src/foundations/CheckBox/styles.ts +17 -0
- package/src/foundations/CheckBox/types.ts +37 -0
- package/src/foundations/Consts/colors+spacing+radius.ts +232 -0
- package/src/foundations/Consts/index.ts +4 -0
- package/src/foundations/Consts/styles.ts +52 -0
- package/src/foundations/Consts/theme.ts +121 -0
- package/src/foundations/Context/index.ts +27 -0
- package/src/foundations/Divider/DashDivider.tsx +46 -0
- package/src/foundations/Divider/index.tsx +45 -0
- package/src/foundations/FoundationList/index.tsx +12 -0
- package/src/foundations/FoundationList/types.ts +7 -0
- package/src/foundations/Icon/index.tsx +57 -0
- package/src/foundations/Icon/types.ts +32 -0
- package/src/foundations/IconButton/index.tsx +144 -0
- package/src/foundations/IconButton/styles.ts +20 -0
- package/src/foundations/Image/index.tsx +115 -0
- package/src/foundations/Image/styles.ts +7 -0
- package/src/foundations/Image/types.ts +7 -0
- package/src/foundations/Input/Input.tsx +280 -0
- package/src/foundations/Input/InputDropDown.tsx +161 -0
- package/src/foundations/Input/InputMoney.tsx +325 -0
- package/src/foundations/Input/InputOTP.tsx +299 -0
- package/src/foundations/Input/InputPhoneNumber.tsx +287 -0
- package/src/foundations/Input/InputSearch.tsx +351 -0
- package/src/foundations/Input/InputTextArea.tsx +218 -0
- package/src/foundations/Input/SystemTextInput.tsx +44 -0
- package/src/foundations/Input/TextTyping.tsx +115 -0
- package/src/foundations/Input/common.tsx +243 -0
- package/src/foundations/Input/index.tsx +373 -0
- package/src/foundations/Input/styles.ts +226 -0
- package/src/foundations/Input/utils.ts +97 -0
- package/src/foundations/Layout/Card.tsx +108 -0
- package/src/foundations/Layout/FloatingButton.tsx +179 -0
- package/src/foundations/Layout/GridSystem.tsx +137 -0
- package/src/foundations/Layout/Item.tsx +59 -0
- package/src/foundations/Layout/ItemList.tsx +66 -0
- package/src/foundations/Layout/ItemSectionList.tsx +40 -0
- package/src/foundations/Layout/Screen.tsx +644 -0
- package/src/foundations/Layout/Section.tsx +103 -0
- package/src/foundations/Layout/TrackingScope.tsx +18 -0
- package/src/foundations/Layout/index.ts +34 -0
- package/src/foundations/Layout/styles.ts +95 -0
- package/src/foundations/Layout/types.ts +40 -0
- package/src/foundations/Layout/utils.ts +47 -0
- package/src/foundations/Loader/DotLoader.tsx +37 -0
- package/src/foundations/Loader/Loader.tsx +13 -0
- package/src/foundations/Loader/ProgressBar.tsx +45 -0
- package/src/foundations/Loader/Spinner.tsx +29 -0
- package/src/foundations/Loader/index.tsx +6 -0
- package/src/foundations/Loader/styles.ts +10 -0
- package/src/foundations/Loader/types.ts +35 -0
- package/src/foundations/Loader/utils.ts +25 -0
- package/src/foundations/Pagination/Dot.tsx +19 -0
- package/src/foundations/Pagination/PaginationDot.tsx +44 -0
- package/src/foundations/Pagination/PaginationNumber.tsx +31 -0
- package/src/foundations/Pagination/PaginationScroll.tsx +99 -0
- package/src/foundations/Pagination/PaginationWhiteDot.tsx +43 -0
- package/src/foundations/Pagination/index.tsx +25 -0
- package/src/foundations/Pagination/styles.ts +51 -0
- package/src/foundations/Pagination/types.ts +40 -0
- package/src/foundations/Popup/PopupNotify.tsx +276 -0
- package/src/foundations/Popup/PopupPromotion.tsx +118 -0
- package/src/foundations/Popup/index.tsx +4 -0
- package/src/foundations/Popup/types.ts +96 -0
- package/src/foundations/Radio/index.tsx +108 -0
- package/src/foundations/Radio/styles.ts +15 -0
- package/src/foundations/Radio/types.ts +31 -0
- package/src/foundations/Skeleton/index.tsx +118 -0
- package/src/foundations/Skeleton/styles.ts +5 -0
- package/src/foundations/Skeleton/types.ts +6 -0
- package/src/foundations/Switch/index.tsx +68 -0
- package/src/foundations/Switch/styles.ts +25 -0
- package/src/foundations/Switch/types.ts +19 -0
- package/src/foundations/Tag/index.tsx +128 -0
- package/src/foundations/Tag/types.ts +41 -0
- package/src/foundations/Text/index.tsx +241 -0
- package/src/foundations/Text/styles.ts +78 -0
- package/src/foundations/Text/types.ts +53 -0
- package/src/foundations/Text/utils.ts +63 -0
- package/src/foundations/Title/index.tsx +285 -0
- package/src/foundations/Title/styles.ts +55 -0
- package/src/foundations/Title/types.ts +21 -0
- package/src/foundations/index.ts +50 -0
- package/src/foundations/package.json +35 -0
- package/src/foundations/publish.sh +17 -0
- package/src/libs/AutoComplete/index.tsx +88 -0
- package/src/libs/AutoComplete/package.json +16 -0
- package/src/libs/AutoComplete/publish.sh +16 -0
- package/src/libs/AutoComplete/styles.ts +15 -0
- package/src/libs/AutoComplete/types.ts +60 -0
- package/src/libs/Avatar/index.tsx +146 -0
- package/src/libs/Avatar/package.json +16 -0
- package/src/libs/Avatar/publish.sh +20 -0
- package/src/libs/Avatar/styles.ts +18 -0
- package/src/libs/Avatar/types.ts +57 -0
- package/src/libs/Badge/Badge.tsx +70 -0
- package/src/libs/Badge/BadgeDot.tsx +11 -0
- package/src/libs/Badge/BadgeRibbon.tsx +122 -0
- package/src/libs/Badge/Shape.tsx +29 -0
- package/src/libs/Badge/index.tsx +7 -0
- package/src/libs/Badge/package.json +16 -0
- package/src/libs/Badge/publish.sh +18 -0
- package/src/libs/Badge/styles.ts +55 -0
- package/src/libs/Badge/types.ts +63 -0
- package/src/libs/Calendar/CalendarPro.tsx +307 -0
- package/src/libs/Calendar/Day.tsx +150 -0
- package/src/libs/Calendar/HeaderControl.tsx +55 -0
- package/src/libs/Calendar/LunarDateConverter.ts +228 -0
- package/src/libs/Calendar/LunarService.ts +206 -0
- package/src/libs/Calendar/Month.tsx +118 -0
- package/src/libs/Calendar/MonthList.tsx +226 -0
- package/src/libs/Calendar/TabHeader.tsx +91 -0
- package/src/libs/Calendar/Util.ts +288 -0
- package/src/libs/Calendar/holidayData.ts +118 -0
- package/src/libs/Calendar/index.tsx +383 -0
- package/src/libs/Calendar/package.json +18 -0
- package/src/libs/Calendar/publish.sh +18 -0
- package/src/libs/Calendar/styles.ts +122 -0
- package/src/libs/Calendar/types.ts +212 -0
- package/src/libs/Carousel/animation.ts +62 -0
- package/src/libs/Carousel/index.tsx +517 -0
- package/src/libs/Carousel/package.json +18 -0
- package/src/libs/Carousel/publish.sh +16 -0
- package/src/libs/Carousel/types.ts +71 -0
- package/src/libs/Chip/index.tsx +164 -0
- package/src/libs/Chip/package.json +16 -0
- package/src/libs/Chip/publish.sh +16 -0
- package/src/libs/Chip/styles.ts +20 -0
- package/src/libs/Chip/types.ts +72 -0
- package/src/libs/Collapse/index.tsx +305 -0
- package/src/libs/Collapse/package.json +16 -0
- package/src/libs/Collapse/publish.sh +18 -0
- package/src/libs/Collapse/styles.ts +37 -0
- package/src/libs/Collapse/types.ts +84 -0
- package/src/libs/DateTimePicker/WheelPicker.tsx +163 -0
- package/src/libs/DateTimePicker/WheelPickerItem.tsx +58 -0
- package/src/libs/DateTimePicker/index.tsx +188 -0
- package/src/libs/DateTimePicker/package.json +16 -0
- package/src/libs/DateTimePicker/publish.sh +17 -0
- package/src/libs/DateTimePicker/styles.ts +31 -0
- package/src/libs/DateTimePicker/types.ts +102 -0
- package/src/libs/DateTimePicker/utils.ts +114 -0
- package/src/libs/Information/index.tsx +129 -0
- package/src/libs/Information/package.json +16 -0
- package/src/libs/Information/publish.sh +18 -0
- package/src/libs/Information/styles.ts +34 -0
- package/src/libs/Information/types.ts +79 -0
- package/src/libs/Logo/index.tsx +39 -0
- package/src/libs/Logo/package.json +17 -0
- package/src/libs/Logo/publish.sh +16 -0
- package/src/libs/Logo/styles.ts +25 -0
- package/src/libs/Logo/types.ts +13 -0
- package/src/libs/ProgressInfo/ProgressInfoHorizontal.tsx +128 -0
- package/src/libs/ProgressInfo/ProgressInfoIcon.tsx +88 -0
- package/src/libs/ProgressInfo/ProgressInfoVertical.tsx +85 -0
- package/src/libs/ProgressInfo/index.tsx +22 -0
- package/src/libs/ProgressInfo/package.json +16 -0
- package/src/libs/ProgressInfo/publish.sh +16 -0
- package/src/libs/ProgressInfo/styles.ts +46 -0
- package/src/libs/ProgressInfo/types.ts +60 -0
- package/src/libs/ProgressInfo/yarn.lock +8 -0
- package/src/libs/Rating/index.tsx +74 -0
- package/src/libs/Rating/package.json +16 -0
- package/src/libs/Rating/publish.sh +18 -0
- package/src/libs/Rating/type.ts +25 -0
- package/src/libs/Slider/Label.tsx +33 -0
- package/src/libs/Slider/helpers.ts +35 -0
- package/src/libs/Slider/hooks.tsx +218 -0
- package/src/libs/Slider/index.tsx +453 -0
- package/src/libs/Slider/package.json +16 -0
- package/src/libs/Slider/publish.sh +18 -0
- package/src/libs/Slider/styles.ts +36 -0
- package/src/libs/Stepper/NumberView.tsx +64 -0
- package/src/libs/Stepper/StepperButton.tsx +37 -0
- package/src/libs/Stepper/index.tsx +139 -0
- package/src/libs/Stepper/package.json +16 -0
- package/src/libs/Stepper/publish.sh +17 -0
- package/src/libs/Stepper/styles.ts +44 -0
- package/src/libs/Stepper/types.ts +154 -0
- package/src/libs/Steps/StepIcon.tsx +86 -0
- package/src/libs/Steps/StepsHorizontal.tsx +189 -0
- package/src/libs/Steps/StepsVertical.tsx +133 -0
- package/src/libs/Steps/index.tsx +20 -0
- package/src/libs/Steps/package.json +16 -0
- package/src/libs/Steps/publish.sh +16 -0
- package/src/libs/Steps/styles.ts +46 -0
- package/src/libs/Steps/types.ts +159 -0
- package/src/libs/Steps/utils.ts +175 -0
- package/src/libs/SuggestAction/SuggestActionView.tsx +124 -0
- package/src/libs/SuggestAction/index.tsx +3 -0
- package/src/libs/SuggestAction/package.json +16 -0
- package/src/libs/SuggestAction/publish.sh +16 -0
- package/src/libs/SuggestAction/styles.ts +30 -0
- package/src/libs/SuggestAction/types.ts +36 -0
- package/src/libs/Swipe/SwipeView.tsx +151 -0
- package/src/libs/Swipe/index.tsx +5 -0
- package/src/libs/Swipe/package.json +16 -0
- package/src/libs/Swipe/publish.sh +16 -0
- package/src/libs/Swipe/styles.ts +16 -0
- package/src/libs/Swipe/types.ts +109 -0
- package/src/libs/TabView/assets/Path.tsx +29 -0
- package/src/libs/TabView/index.tsx +184 -0
- package/src/libs/TabView/package.json +16 -0
- package/src/libs/TabView/publish.sh +16 -0
- package/src/libs/TabView/styles.ts +96 -0
- package/src/libs/TabView/tabBar/CardTabBar.tsx +137 -0
- package/src/libs/TabView/tabBar/SrollableTabBar.tsx +218 -0
- package/src/libs/TabView/tabBar/TabBar.tsx +67 -0
- package/src/libs/TabView/tabItem/CardTabItem.tsx +118 -0
- package/src/libs/TabView/tabItem/TabItem.tsx +180 -0
- package/src/libs/TabView/types.ts +166 -0
- package/src/libs/Template/HeaderSliderBanner/index.tsx +86 -0
- package/src/libs/Template/HeaderSliderBanner/types.ts +16 -0
- package/src/libs/Template/TrustBanner/CustomAvatar.tsx +39 -0
- package/src/libs/Template/TrustBanner/index.tsx +161 -0
- package/src/libs/Template/TrustBanner/styles.ts +48 -0
- package/src/libs/Template/TrustBanner/types.ts +50 -0
- package/src/libs/Template/index.tsx +4 -0
- package/src/libs/Template/package.json +18 -0
- package/src/libs/Template/publish.sh +17 -0
- package/src/libs/Title/index.tsx +284 -0
- package/src/libs/Title/package.json +17 -0
- package/src/libs/Title/publish.sh +16 -0
- package/src/libs/Title/styles.ts +54 -0
- package/src/libs/Title/types.ts +21 -0
- package/src/libs/Tooltip/TooltipButtons.tsx +54 -0
- package/src/libs/Tooltip/index.tsx +608 -0
- package/src/libs/Tooltip/package.json +16 -0
- package/src/libs/Tooltip/publish.sh +18 -0
- package/src/libs/Tooltip/styles.ts +70 -0
- package/src/libs/Tooltip/types.ts +61 -0
- package/src/libs/Uploader/index.tsx +87 -0
- package/src/libs/Uploader/package.json +17 -0
- package/src/libs/Uploader/publish.sh +18 -0
- package/src/libs/Uploader/styles.ts +30 -0
- package/src/libs/Uploader/types.ts +69 -0
- package/src/native/MoMoNative.podspec +18 -0
- package/src/native/calculator/android/build.gradle +61 -0
- package/src/native/calculator/android/gradle/wrapper/gradle-wrapper.jar +0 -0
- package/src/native/calculator/android/gradle/wrapper/gradle-wrapper.properties +6 -0
- package/src/native/calculator/android/gradlew +172 -0
- package/src/native/calculator/android/gradlew.bat +84 -0
- package/src/native/calculator/android/src/main/AndroidManifest.xml +5 -0
- package/src/native/calculator/android/src/main/java/com/calculator/KeyboardViewModule.java +22 -0
- package/src/native/calculator/android/src/main/java/com/calculator/KeyboardViewPackage.java +35 -0
- package/src/native/calculator/android/src/main/java/com/calculator/modules/CalculatorKeyboardModule.java +157 -0
- package/src/native/calculator/android/src/main/java/com/calculator/views/calculatorkeyboard/CalculatorEditText.java +36 -0
- package/src/native/calculator/android/src/main/java/com/calculator/views/calculatorkeyboard/FixedRelativeLayout.java +45 -0
- package/src/native/calculator/android/src/main/java/com/calculator/views/calculatorkeyboard/MomoTextInputCalculatorManager.java +173 -0
- package/src/native/calculator/android/src/main/java/com/calculator/views/customkeyboard/RNCustomKeyboardModule.java +417 -0
- package/src/native/calculator/ios/Helper/MomoHelper.swift +16 -0
- package/src/native/calculator/ios/KeyboardView-Bridging-Header.h +60 -0
- package/src/native/calculator/ios/KeyboardView.h +19 -0
- package/src/native/calculator/ios/KeyboardView.m +56 -0
- package/src/native/calculator/ios/MomoTextInputCalculator.swift +144 -0
- package/src/native/calculator/ios/RNCustomKeyboard/RNCustomKeyboard.h +6 -0
- package/src/native/calculator/ios/RNCustomKeyboard/RNCustomKeyboard.m +143 -0
- package/src/native/package.json +14 -0
- package/src/native/publish.sh +29 -0
- package/src/native/resource/android/build.gradle +57 -0
- package/src/native/resource/android/gradle/wrapper/gradle-wrapper.jar +0 -0
- package/src/native/resource/android/gradle/wrapper/gradle-wrapper.properties +6 -0
- package/src/native/resource/android/src/main/AndroidManifest.xml +6 -0
- package/src/native/resource/android/src/main/java/com/resource/RNResourceModule.java +90 -0
- package/src/native/resource/android/src/main/java/com/resource/RNResourcePackage.java +22 -0
- package/src/native/resource/ios/RNResouce.m +71 -0
- package/src/native/resource/ios/RNResource.h +5 -0
- package/example/ios/Example.xcodeproj/xcuserdata/sophia.xcuserdatad/xcschemes/xcschememanagement.plist +0 -14
- package/example/ios/Example.xcworkspace/xcuserdata/sophia.xcuserdatad/UserInterfaceState.xcuserstate +0 -0
- package/example/ios/Example.xcworkspace/xcuserdata/sophia.xcuserdatad/xcdebugger/Breakpoints_v2.xcbkptlist +0 -6
- package/example/ios/Pods/Pods.xcodeproj/xcuserdata/sophia.xcuserdatad/xcschemes/MoMoUIKits.xcscheme +0 -58
- package/example/ios/Pods/Pods.xcodeproj/xcuserdata/sophia.xcuserdatad/xcschemes/Pods-Example.xcscheme +0 -58
- package/example/ios/Pods/Pods.xcodeproj/xcuserdata/sophia.xcuserdatad/xcschemes/SDWebImage.xcscheme +0 -58
- package/example/ios/Pods/Pods.xcodeproj/xcuserdata/sophia.xcuserdatad/xcschemes/SDWebImageSwiftUI.xcscheme +0 -58
- package/example/ios/Pods/Pods.xcodeproj/xcuserdata/sophia.xcuserdatad/xcschemes/SkeletonUI.xcscheme +0 -58
- package/example/ios/Pods/Pods.xcodeproj/xcuserdata/sophia.xcuserdatad/xcschemes/lottie-ios-LottiePrivacyInfo.xcscheme +0 -58
- package/example/ios/Pods/Pods.xcodeproj/xcuserdata/sophia.xcuserdatad/xcschemes/lottie-ios.xcscheme +0 -58
- package/example/ios/Pods/Pods.xcodeproj/xcuserdata/sophia.xcuserdatad/xcschemes/xcschememanagement.plist +0 -46
|
@@ -0,0 +1,138 @@
|
|
|
1
|
+
import fs from 'fs';
|
|
2
|
+
import path from 'path';
|
|
3
|
+
import {parse as parseYarnLock} from '@yarnpkg/lockfile';
|
|
4
|
+
import semver from 'semver';
|
|
5
|
+
import {logger} from '../logger';
|
|
6
|
+
|
|
7
|
+
function checkCoreDependencies() {
|
|
8
|
+
const cwd = process.cwd();
|
|
9
|
+
const lockPath = path.resolve(cwd, 'yarn.lock');
|
|
10
|
+
if (!fs.existsSync(lockPath)) {
|
|
11
|
+
logger.warn(
|
|
12
|
+
'No lockfile found (yarn.lock, pnpm-lock.yaml or package-lock.json)'
|
|
13
|
+
);
|
|
14
|
+
return false;
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
const raw = fs.readFileSync(lockPath, 'utf8');
|
|
18
|
+
const {object: tree} = parseYarnLock(raw);
|
|
19
|
+
|
|
20
|
+
const platformEntries = Object.entries(tree).filter(([key, _]) =>
|
|
21
|
+
key.startsWith('@momo-platform/momo-core@')
|
|
22
|
+
);
|
|
23
|
+
|
|
24
|
+
if (platformEntries.length === 0) {
|
|
25
|
+
logger.warn('KhĆ“ng phĆ”t hiį»n @momo-platform/momo-core trong lockfile');
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
const allowedCoreVersions = new Set();
|
|
29
|
+
for (const [_, meta] of platformEntries) {
|
|
30
|
+
const deps = meta.dependencies || {};
|
|
31
|
+
const spec = deps['@momo-kits/core'];
|
|
32
|
+
if (spec) {
|
|
33
|
+
for (const [coreKey, coreMeta] of Object.entries(tree)) {
|
|
34
|
+
if (coreKey.startsWith('@momo-kits/core@')) {
|
|
35
|
+
const v = coreMeta.version;
|
|
36
|
+
if (semver.satisfies(v, spec)) {
|
|
37
|
+
allowedCoreVersions.add(v);
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
const actualCoreVersions = new Set();
|
|
45
|
+
for (const [key, meta] of Object.entries(tree)) {
|
|
46
|
+
if (key.startsWith('@momo-kits/core@')) {
|
|
47
|
+
actualCoreVersions.add(meta.version);
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
const offending = [...actualCoreVersions].filter(
|
|
52
|
+
v => !allowedCoreVersions.has(v)
|
|
53
|
+
);
|
|
54
|
+
|
|
55
|
+
if (offending.length === 0) {
|
|
56
|
+
logger.success(
|
|
57
|
+
'Your project is not have @momo-kits/core in yarn.lock, good job!'
|
|
58
|
+
);
|
|
59
|
+
return true;
|
|
60
|
+
} else {
|
|
61
|
+
logger.error(
|
|
62
|
+
`Your project is using @momo-kits/core, please remove it from your project: ${offending.join(
|
|
63
|
+
', '
|
|
64
|
+
)}`
|
|
65
|
+
);
|
|
66
|
+
return false;
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
|
|
70
|
+
const importRegex =
|
|
71
|
+
/(?:import .* from ['"]@momo-kits\/core['"]|require\(['"]@momo-kits\/core['"]\))/;
|
|
72
|
+
const validExtensions = ['.js', '.jsx', '.ts', '.tsx'];
|
|
73
|
+
|
|
74
|
+
function scanCoreNodeModule(): boolean {
|
|
75
|
+
let hasViolation = false;
|
|
76
|
+
|
|
77
|
+
function scanFile(filePath: string) {
|
|
78
|
+
const content = fs.readFileSync(filePath, 'utf8');
|
|
79
|
+
const lines = content.split('\n');
|
|
80
|
+
|
|
81
|
+
lines.forEach((line, index) => {
|
|
82
|
+
const trimmedLine = line.trim();
|
|
83
|
+
|
|
84
|
+
const isCommentedLine =
|
|
85
|
+
trimmedLine.startsWith('//') ||
|
|
86
|
+
trimmedLine.startsWith('*') ||
|
|
87
|
+
trimmedLine.startsWith('/*') ||
|
|
88
|
+
(trimmedLine.includes('//') &&
|
|
89
|
+
trimmedLine.indexOf('//') < trimmedLine.indexOf('@momo-kits/core'));
|
|
90
|
+
|
|
91
|
+
if (
|
|
92
|
+
importRegex.test(trimmedLine) &&
|
|
93
|
+
!trimmedLine.includes('@momo-platform/momo-core') &&
|
|
94
|
+
!isCommentedLine
|
|
95
|
+
) {
|
|
96
|
+
console.log(`[VIOLATION] ${filePath}:${index + 1}: ${trimmedLine}`);
|
|
97
|
+
hasViolation = true;
|
|
98
|
+
}
|
|
99
|
+
});
|
|
100
|
+
}
|
|
101
|
+
|
|
102
|
+
function walk(dir: string) {
|
|
103
|
+
fs.readdirSync(dir).forEach(file => {
|
|
104
|
+
const fullPath = path.join(dir, file);
|
|
105
|
+
const stat = fs.statSync(fullPath);
|
|
106
|
+
|
|
107
|
+
if (stat.isDirectory()) {
|
|
108
|
+
const normalizedPath = fullPath.split(path.sep).join('/'); // cross-platform check
|
|
109
|
+
if (
|
|
110
|
+
normalizedPath.includes('node_modules/@momo-kits/calculator') ||
|
|
111
|
+
normalizedPath.includes('node_modules/@momo-kits/qrcode') ||
|
|
112
|
+
normalizedPath.includes('node_modules/@momo-platform/momo-core')
|
|
113
|
+
) {
|
|
114
|
+
return;
|
|
115
|
+
}
|
|
116
|
+
|
|
117
|
+
walk(fullPath);
|
|
118
|
+
} else if (validExtensions.includes(path.extname(file))) {
|
|
119
|
+
scanFile(fullPath);
|
|
120
|
+
}
|
|
121
|
+
});
|
|
122
|
+
}
|
|
123
|
+
|
|
124
|
+
walk('node_modules');
|
|
125
|
+
|
|
126
|
+
const paths = ['src', 'app', 'miniApp', 'miniApps'];
|
|
127
|
+
|
|
128
|
+
paths.forEach(path => {
|
|
129
|
+
if (fs.existsSync(path)) {
|
|
130
|
+
walk(path);
|
|
131
|
+
}
|
|
132
|
+
});
|
|
133
|
+
|
|
134
|
+
logger.success('Your project do not have @momo-kits/core, good job!');
|
|
135
|
+
return !hasViolation;
|
|
136
|
+
}
|
|
137
|
+
|
|
138
|
+
export {checkCoreDependencies, scanCoreNodeModule};
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
import fs from 'fs';
|
|
2
|
+
import path from 'path';
|
|
3
|
+
import {logger} from '../logger';
|
|
4
|
+
|
|
5
|
+
export const deletedPackage = [
|
|
6
|
+
'@momo-kits/core',
|
|
7
|
+
'@react-native-community/art',
|
|
8
|
+
'@react-native-community/push-notification-ios',
|
|
9
|
+
'@react-native-voice/voice',
|
|
10
|
+
'react-native-contacts',
|
|
11
|
+
'react-native-sensors',
|
|
12
|
+
'rn-fetch-blob',
|
|
13
|
+
'react-native-keychain',
|
|
14
|
+
'react-native-geolocation-service',
|
|
15
|
+
];
|
|
16
|
+
|
|
17
|
+
export function checkDeletedPackages() {
|
|
18
|
+
const cwd = process.cwd();
|
|
19
|
+
const pkgPath = path.resolve(cwd, 'package.json');
|
|
20
|
+
if (!fs.existsSync(pkgPath)) {
|
|
21
|
+
logger.warn('No package.json found');
|
|
22
|
+
return {healthy: true, found: []};
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
let pkg: any;
|
|
26
|
+
try {
|
|
27
|
+
const content = fs.readFileSync(pkgPath, 'utf8');
|
|
28
|
+
pkg = JSON.parse(content);
|
|
29
|
+
} catch (error) {
|
|
30
|
+
logger.error(`Failed to parse package.json: ${error}`);
|
|
31
|
+
return {healthy: false, found: []};
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
const allDeps = {
|
|
35
|
+
...pkg.dependencies,
|
|
36
|
+
...pkg.devDependencies,
|
|
37
|
+
...pkg.peerDependencies,
|
|
38
|
+
...pkg.optionalDependencies,
|
|
39
|
+
};
|
|
40
|
+
|
|
41
|
+
const found = deletedPackage.filter(name => allDeps && allDeps[name]);
|
|
42
|
+
|
|
43
|
+
if (found.length > 0) {
|
|
44
|
+
found.forEach(name => {
|
|
45
|
+
logger.error(
|
|
46
|
+
`${name} is delelted ā please remove it from your package.json.`
|
|
47
|
+
);
|
|
48
|
+
});
|
|
49
|
+
return {healthy: false, found};
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
return {healthy: true, found: []};
|
|
53
|
+
}
|
|
@@ -0,0 +1,168 @@
|
|
|
1
|
+
import fs from 'fs';
|
|
2
|
+
import path from 'path';
|
|
3
|
+
import {logger} from '../logger';
|
|
4
|
+
|
|
5
|
+
export const deprecatedPackagesList = [
|
|
6
|
+
'@momo-kits/scrollable-tab-view',
|
|
7
|
+
'@momo-kits/toast',
|
|
8
|
+
'@momo-kits/expand',
|
|
9
|
+
'@momo-kits/money',
|
|
10
|
+
'@momo-kits/separator',
|
|
11
|
+
'@momo-kits/suggest-email',
|
|
12
|
+
'@momo-kits/guide',
|
|
13
|
+
'@momo-kits/switch',
|
|
14
|
+
'@momo-kits/skeleton',
|
|
15
|
+
'@momo-kits/selection',
|
|
16
|
+
'@momo-kits/radio',
|
|
17
|
+
'@momo-kits/core',
|
|
18
|
+
'@momo-kits/check-box',
|
|
19
|
+
'@momo-kits/custom',
|
|
20
|
+
'@momo-kits/message',
|
|
21
|
+
'@momo-kits/alert-message',
|
|
22
|
+
'@momo-kits/data-picker',
|
|
23
|
+
'@momo-kits/transaction',
|
|
24
|
+
'@momo-kits/rating-star',
|
|
25
|
+
'@momo-kits/chart',
|
|
26
|
+
'@momo-kits/bank',
|
|
27
|
+
'@momo-kits/sticker',
|
|
28
|
+
'@momo-kits/effect',
|
|
29
|
+
'@momo-kits/voucher',
|
|
30
|
+
'@momo-kits/film',
|
|
31
|
+
'@momo-kits/zoomable-image',
|
|
32
|
+
'@momo-kits/shortcut',
|
|
33
|
+
'@momo-kits/draggbale-list',
|
|
34
|
+
'@momo-kits/tag',
|
|
35
|
+
'@momo-kits/scanner',
|
|
36
|
+
'@momo-kits/sof',
|
|
37
|
+
'@momo-kits/floating-button',
|
|
38
|
+
'@momo-kits/face-detect',
|
|
39
|
+
'@momo-kits/header',
|
|
40
|
+
'@momo-kits/circle-progress',
|
|
41
|
+
'@momo-kits/segmented-control',
|
|
42
|
+
'@momo-kits/recommend-sof',
|
|
43
|
+
'@momo-kits/camerax',
|
|
44
|
+
'@momo-kits/floating-action',
|
|
45
|
+
'@momo-kits/scrollable-tab-string',
|
|
46
|
+
'@momo-kits/ncc',
|
|
47
|
+
'@momo-kits/navigation',
|
|
48
|
+
'@momo-kits/scroll-indicator',
|
|
49
|
+
'@momo-kits/v2-core',
|
|
50
|
+
'@momo-kits/gameview',
|
|
51
|
+
'@momo-kits/hashtag',
|
|
52
|
+
'react-native-sensors',
|
|
53
|
+
'react-native-share',
|
|
54
|
+
'rn-fetch-blob',
|
|
55
|
+
'react-native-image-picker',
|
|
56
|
+
'react-native-image-resizer',
|
|
57
|
+
'react-native-fs',
|
|
58
|
+
'react-native-fast-image',
|
|
59
|
+
'react-native-document-picker',
|
|
60
|
+
'react-native-contacts',
|
|
61
|
+
'react-native-exception-handler',
|
|
62
|
+
'@react-native-community/netinfo',
|
|
63
|
+
];
|
|
64
|
+
|
|
65
|
+
export const deprecatedPackageReplacements: Record<string, string> = {
|
|
66
|
+
'@momo-kits/scrollable-tab-view': '@momo-kits/tab-view',
|
|
67
|
+
'@momo-kits/toast': 'MaxApi.showToast',
|
|
68
|
+
'@momo-kits/expand': '@momo-kits/collapse',
|
|
69
|
+
'@momo-kits/money': 'your own component',
|
|
70
|
+
'@momo-kits/separator': 'Divider in @momo-kits/foundation',
|
|
71
|
+
'@momo-kits/suggest-email': 'your own component',
|
|
72
|
+
'@momo-kits/guide': 'your own component',
|
|
73
|
+
'@momo-kits/switch': 'Switch in @momo-kits/foundation',
|
|
74
|
+
'@momo-kits/skeleton': 'Skeleton in @momo-kits/foundation',
|
|
75
|
+
'@momo-kits/selection': 'your own component',
|
|
76
|
+
'@momo-kits/radio': 'Radio in @momo-kits/foundation',
|
|
77
|
+
'@momo-kits/check-box': 'Checkbox in @momo-kits/foundation',
|
|
78
|
+
'@momo-kits/custom': 'your own component',
|
|
79
|
+
'@momo-kits/message': 'your own component',
|
|
80
|
+
'@momo-kits/alert-message': 'your own component',
|
|
81
|
+
'@momo-kits/data-picker': 'your own component',
|
|
82
|
+
'@momo-kits/transaction': 'your own component',
|
|
83
|
+
'@momo-kits/rating-star': '@momo-kits/rating',
|
|
84
|
+
'@momo-kits/chart': 'your own component',
|
|
85
|
+
'@momo-kits/bank': 'your own component',
|
|
86
|
+
'@momo-kits/sticker': 'your own component',
|
|
87
|
+
'@momo-kits/effect': 'your own component',
|
|
88
|
+
'@momo-kits/voucher': 'your own component',
|
|
89
|
+
'@momo-kits/film': 'your own component',
|
|
90
|
+
'@momo-kits/zoomable-image': 'your own component',
|
|
91
|
+
'@momo-kits/shortcut': 'your own component',
|
|
92
|
+
'@momo-kits/draggbale-list': 'your own component',
|
|
93
|
+
'@momo-kits/tag': 'Tag in @momo-kits/foundation',
|
|
94
|
+
'@momo-kits/scanner': 'your own component',
|
|
95
|
+
'@momo-kits/sof': 'your own component',
|
|
96
|
+
'@momo-kits/floating-button': 'your own component',
|
|
97
|
+
'@momo-kits/face-detect': 'your own component',
|
|
98
|
+
'@momo-kits/header': 'your own component',
|
|
99
|
+
'@momo-kits/circle-progress': 'your own component',
|
|
100
|
+
'@momo-kits/segmented-control': 'your own component',
|
|
101
|
+
'@momo-kits/recommend-sof': 'your own component',
|
|
102
|
+
'@momo-kits/camerax': 'your own component',
|
|
103
|
+
'@momo-kits/floating-action': 'your own component',
|
|
104
|
+
'@momo-kits/scrollable-tab-string': 'your own component',
|
|
105
|
+
'@momo-kits/ncc': 'your own component',
|
|
106
|
+
'@momo-kits/navigation': 'your own component',
|
|
107
|
+
'@momo-kits/scroll-indicator': 'your own component',
|
|
108
|
+
'@momo-kits/v2-core': 'your own component',
|
|
109
|
+
'@momo-kits/gameview': 'your own component',
|
|
110
|
+
'@momo-kits/hashtag': 'your own component',
|
|
111
|
+
'react-native-sensors': 'maxApi',
|
|
112
|
+
'react-native-share': 'maxApi',
|
|
113
|
+
'rn-fetch-blob': 'maxApi',
|
|
114
|
+
'react-native-image-picker': 'maxApi',
|
|
115
|
+
// 'react-native-image-resizer': 'maxApi',
|
|
116
|
+
'react-native-fs': 'maxApi',
|
|
117
|
+
'react-native-fast-image': 'Image in @momo-kits/foundation',
|
|
118
|
+
'react-native-document-picker': 'maxApi',
|
|
119
|
+
'react-native-contacts': 'maxApi',
|
|
120
|
+
'react-native-exception-handler': 'maxApi',
|
|
121
|
+
'@react-native-community/netinfo': 'maxApi',
|
|
122
|
+
};
|
|
123
|
+
|
|
124
|
+
// Add result type for deprecated package checks
|
|
125
|
+
export interface DeprecatedPackagesResult {
|
|
126
|
+
healthy: boolean;
|
|
127
|
+
found: string[];
|
|
128
|
+
}
|
|
129
|
+
|
|
130
|
+
export function checkDeprecatedPackages(): DeprecatedPackagesResult {
|
|
131
|
+
const cwd = process.cwd();
|
|
132
|
+
const pkgPath = path.resolve(cwd, 'package.json');
|
|
133
|
+
if (!fs.existsSync(pkgPath)) {
|
|
134
|
+
logger.warn('No package.json found');
|
|
135
|
+
return {healthy: true, found: []};
|
|
136
|
+
}
|
|
137
|
+
|
|
138
|
+
let pkg: any;
|
|
139
|
+
try {
|
|
140
|
+
const content = fs.readFileSync(pkgPath, 'utf8');
|
|
141
|
+
pkg = JSON.parse(content);
|
|
142
|
+
} catch (error) {
|
|
143
|
+
logger.error(`Failed to parse package.json: ${error}`);
|
|
144
|
+
return {healthy: false, found: []};
|
|
145
|
+
}
|
|
146
|
+
|
|
147
|
+
const allDeps = {
|
|
148
|
+
...pkg.dependencies,
|
|
149
|
+
...pkg.devDependencies,
|
|
150
|
+
...pkg.peerDependencies,
|
|
151
|
+
...pkg.optionalDependencies,
|
|
152
|
+
};
|
|
153
|
+
|
|
154
|
+
const found = deprecatedPackagesList.filter(name => allDeps && allDeps[name]);
|
|
155
|
+
|
|
156
|
+
if (found.length > 0) {
|
|
157
|
+
found.forEach(name => {
|
|
158
|
+
const replacement =
|
|
159
|
+
deprecatedPackageReplacements[name] || '<replacement>';
|
|
160
|
+
logger.error(
|
|
161
|
+
`${name} is deprecated ā please use ${replacement} instead.`
|
|
162
|
+
);
|
|
163
|
+
});
|
|
164
|
+
return {healthy: false, found};
|
|
165
|
+
}
|
|
166
|
+
|
|
167
|
+
return {healthy: true, found: []};
|
|
168
|
+
}
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
import fs from 'fs';
|
|
2
|
+
import path from 'path';
|
|
3
|
+
import semver from 'semver';
|
|
4
|
+
import { logger } from '../logger';
|
|
5
|
+
import { deprecatedPackagesList } from './checkDeprecatedPackages';
|
|
6
|
+
|
|
7
|
+
/**
|
|
8
|
+
* Scans package.json dependencies and flags any package with version 0.x.x where minor < 80 as deprecated.
|
|
9
|
+
* Returns true if no deprecated versions are found, false otherwise.
|
|
10
|
+
*/
|
|
11
|
+
export interface DeprecatedVersionResult {
|
|
12
|
+
healthy: boolean;
|
|
13
|
+
found: string[];
|
|
14
|
+
}
|
|
15
|
+
|
|
16
|
+
export function checkDeprecatedVersion(): DeprecatedVersionResult {
|
|
17
|
+
const cwd = process.cwd();
|
|
18
|
+
const pkgPath = path.resolve(cwd, 'package.json');
|
|
19
|
+
if (!fs.existsSync(pkgPath)) {
|
|
20
|
+
logger.warn('No package.json found');
|
|
21
|
+
return { healthy: true, found: [] };
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
let pkg: any;
|
|
25
|
+
try {
|
|
26
|
+
pkg = JSON.parse(fs.readFileSync(pkgPath, 'utf8'));
|
|
27
|
+
} catch (error) {
|
|
28
|
+
logger.error(`Failed to parse package.json: ${error}`);
|
|
29
|
+
return { healthy: false, found: [] };
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
const allDeps: Record<string, string> = {
|
|
33
|
+
...pkg.dependencies,
|
|
34
|
+
...pkg.devDependencies,
|
|
35
|
+
...pkg.peerDependencies,
|
|
36
|
+
...pkg.optionalDependencies,
|
|
37
|
+
};
|
|
38
|
+
|
|
39
|
+
const found: string[] = [];
|
|
40
|
+
|
|
41
|
+
// Only consider @momo-kits packages for version deprecation, skip statically deprecated
|
|
42
|
+
for (const [name, range] of Object.entries(allDeps)) {
|
|
43
|
+
if (!name.startsWith('@momo-kits/') || deprecatedPackagesList.includes(name)) {
|
|
44
|
+
continue;
|
|
45
|
+
}
|
|
46
|
+
const coerced = semver.coerce(range);
|
|
47
|
+
if (!coerced) continue;
|
|
48
|
+
if (coerced.major === 0 && coerced.minor < 77) {
|
|
49
|
+
logger.error(`@momo-kits dependency ${name}@${coerced.version} uses deprecated version (<0.77.x)`);
|
|
50
|
+
found.push(`${name}@${coerced.version}`);
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
|
|
54
|
+
if (found.length > 0) {
|
|
55
|
+
return { healthy: false, found };
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
logger.success('No @momo-kits dependencies using deprecated 0.x.x versions (<0.77.x)');
|
|
59
|
+
return { healthy: true, found: [] };
|
|
60
|
+
}
|
|
@@ -0,0 +1,251 @@
|
|
|
1
|
+
import fs from 'fs';
|
|
2
|
+
import path from 'path';
|
|
3
|
+
import {logger} from '../logger';
|
|
4
|
+
|
|
5
|
+
// Shared dependencies that should be declared in package.json if used
|
|
6
|
+
const sharedDependencies = [
|
|
7
|
+
'@momo-kits/foundation',
|
|
8
|
+
'@momo-kits/webview',
|
|
9
|
+
'@react-native-community/masked-view',
|
|
10
|
+
'@react-navigation/bottom-tabs',
|
|
11
|
+
'@react-navigation/core',
|
|
12
|
+
'@react-navigation/native',
|
|
13
|
+
'@react-navigation/routers',
|
|
14
|
+
'@react-navigation/stack',
|
|
15
|
+
'd3-shape',
|
|
16
|
+
'entities',
|
|
17
|
+
'htmlparser2-without-node-native',
|
|
18
|
+
'lodash',
|
|
19
|
+
'lottie-ios',
|
|
20
|
+
'lottie-react-native',
|
|
21
|
+
'moment',
|
|
22
|
+
'prop-types',
|
|
23
|
+
'react',
|
|
24
|
+
'react-native',
|
|
25
|
+
'react-native-camera-kit',
|
|
26
|
+
'react-native-fast-image',
|
|
27
|
+
'react-native-gesture-handler',
|
|
28
|
+
'react-native-image-pan-zoom',
|
|
29
|
+
'react-native-linear-gradient',
|
|
30
|
+
'react-native-maps',
|
|
31
|
+
'react-native-pager-view',
|
|
32
|
+
'react-native-progress',
|
|
33
|
+
'react-native-reanimated',
|
|
34
|
+
'react-native-safe-area-context',
|
|
35
|
+
'react-native-screens',
|
|
36
|
+
'metro-react-native-babel-preset',
|
|
37
|
+
];
|
|
38
|
+
|
|
39
|
+
// Directories to scan (following the same pattern as other utils)
|
|
40
|
+
const scanTargetDirs = ['src', 'miniapp', 'miniApp', 'app', 'miniApps'];
|
|
41
|
+
|
|
42
|
+
interface PackageJson {
|
|
43
|
+
dependencies?: Record<string, string>;
|
|
44
|
+
devDependencies?: Record<string, string>;
|
|
45
|
+
peerDependencies?: Record<string, string>;
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
export interface DependencyIssue {
|
|
49
|
+
package: string;
|
|
50
|
+
usedInFiles: string[];
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
export interface ShareDependenciesResult {
|
|
54
|
+
healthy: boolean;
|
|
55
|
+
issues: DependencyIssue[];
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
/**
|
|
59
|
+
* Scans project files for usage of shared dependencies and checks if they are declared in package.json
|
|
60
|
+
* @returns ShareDependenciesResult - contains healthy status and detailed issues
|
|
61
|
+
*/
|
|
62
|
+
export function checkShareDependencies(): ShareDependenciesResult {
|
|
63
|
+
const cwd = process.cwd();
|
|
64
|
+
const skipDirs = new Set([
|
|
65
|
+
'node_modules',
|
|
66
|
+
'dist',
|
|
67
|
+
'build',
|
|
68
|
+
'coverage',
|
|
69
|
+
'__tests__',
|
|
70
|
+
'__mocks__',
|
|
71
|
+
]);
|
|
72
|
+
const skipTestFileRegex = /\.(test|spec)\.(js|jsx|ts|tsx)$/;
|
|
73
|
+
|
|
74
|
+
// Find all package.json files and collect dependencies
|
|
75
|
+
const allDependencies = new Set<string>();
|
|
76
|
+
|
|
77
|
+
function scanPackageJsonFiles() {
|
|
78
|
+
const packageJsonFiles: string[] = [];
|
|
79
|
+
|
|
80
|
+
function findPackageJson(dirPath: string) {
|
|
81
|
+
let entries: fs.Dirent[];
|
|
82
|
+
try {
|
|
83
|
+
entries = fs.readdirSync(dirPath, {withFileTypes: true});
|
|
84
|
+
} catch {
|
|
85
|
+
return;
|
|
86
|
+
}
|
|
87
|
+
|
|
88
|
+
for (const entry of entries) {
|
|
89
|
+
const fullPath = path.join(dirPath, entry.name);
|
|
90
|
+
|
|
91
|
+
if (
|
|
92
|
+
entry.isDirectory() &&
|
|
93
|
+
(skipDirs.has(entry.name) || entry.name.startsWith('.'))
|
|
94
|
+
) {
|
|
95
|
+
continue;
|
|
96
|
+
}
|
|
97
|
+
|
|
98
|
+
if (entry.isDirectory()) {
|
|
99
|
+
findPackageJson(fullPath);
|
|
100
|
+
} else if (entry.name === 'package.json') {
|
|
101
|
+
packageJsonFiles.push(fullPath);
|
|
102
|
+
}
|
|
103
|
+
}
|
|
104
|
+
}
|
|
105
|
+
|
|
106
|
+
// Scan from current directory
|
|
107
|
+
findPackageJson(cwd);
|
|
108
|
+
|
|
109
|
+
// Read all package.json files and collect dependencies
|
|
110
|
+
for (const packageFile of packageJsonFiles) {
|
|
111
|
+
try {
|
|
112
|
+
const content: PackageJson = JSON.parse(
|
|
113
|
+
fs.readFileSync(packageFile, 'utf-8')
|
|
114
|
+
);
|
|
115
|
+
const allDeps = {
|
|
116
|
+
...content.dependencies,
|
|
117
|
+
...content.devDependencies,
|
|
118
|
+
...content.peerDependencies,
|
|
119
|
+
};
|
|
120
|
+
|
|
121
|
+
Object.keys(allDeps).forEach(dep => allDependencies.add(dep));
|
|
122
|
+
} catch (error) {
|
|
123
|
+
logger.warn(`Failed to read package.json: ${packageFile}`);
|
|
124
|
+
}
|
|
125
|
+
}
|
|
126
|
+
}
|
|
127
|
+
|
|
128
|
+
// Scan for dependency usage in source files
|
|
129
|
+
function scanSourceFiles(): Record<string, string[]> {
|
|
130
|
+
const usageResults: Record<string, string[]> = {};
|
|
131
|
+
|
|
132
|
+
// Initialize results for each shared dependency
|
|
133
|
+
sharedDependencies.forEach(dep => {
|
|
134
|
+
usageResults[dep] = [];
|
|
135
|
+
});
|
|
136
|
+
|
|
137
|
+
function scanDir(dirPath: string) {
|
|
138
|
+
let entries: fs.Dirent[];
|
|
139
|
+
try {
|
|
140
|
+
entries = fs.readdirSync(dirPath, {withFileTypes: true});
|
|
141
|
+
} catch {
|
|
142
|
+
return;
|
|
143
|
+
}
|
|
144
|
+
|
|
145
|
+
for (const entry of entries) {
|
|
146
|
+
const fullPath = path.join(dirPath, entry.name);
|
|
147
|
+
|
|
148
|
+
if (
|
|
149
|
+
entry.isDirectory() &&
|
|
150
|
+
(skipDirs.has(entry.name) || entry.name.startsWith('.'))
|
|
151
|
+
) {
|
|
152
|
+
continue;
|
|
153
|
+
}
|
|
154
|
+
|
|
155
|
+
if (entry.isDirectory()) {
|
|
156
|
+
scanDir(fullPath);
|
|
157
|
+
} else if (entry.isFile() && /\.(js|jsx|ts|tsx)$/.test(entry.name)) {
|
|
158
|
+
if (skipTestFileRegex.test(entry.name)) {
|
|
159
|
+
continue;
|
|
160
|
+
}
|
|
161
|
+
|
|
162
|
+
let content: string;
|
|
163
|
+
try {
|
|
164
|
+
content = fs.readFileSync(fullPath, 'utf8');
|
|
165
|
+
} catch {
|
|
166
|
+
continue;
|
|
167
|
+
}
|
|
168
|
+
|
|
169
|
+
// Check each shared dependency for usage in this file
|
|
170
|
+
for (const sharedDep of sharedDependencies) {
|
|
171
|
+
const escapedDep = sharedDep.replace(/[.*+?^${}()|[\]\\]/g, '\\$&');
|
|
172
|
+
const importPatterns = [
|
|
173
|
+
new RegExp(`from\\s+['"]${escapedDep}['"]`, 'g'),
|
|
174
|
+
new RegExp(`import\\s+.*\\s+from\\s+['"]${escapedDep}['"]`, 'g'),
|
|
175
|
+
new RegExp(`require\\s*\\(\\s*['"]${escapedDep}['"]\\s*\\)`, 'g'),
|
|
176
|
+
new RegExp(`import\\s*\\(\\s*['"]${escapedDep}['"]\\s*\\)`, 'g'),
|
|
177
|
+
];
|
|
178
|
+
|
|
179
|
+
const isUsed = importPatterns.some(pattern =>
|
|
180
|
+
pattern.test(content)
|
|
181
|
+
);
|
|
182
|
+
|
|
183
|
+
if (isUsed && !usageResults[sharedDep].includes(fullPath)) {
|
|
184
|
+
usageResults[sharedDep].push(fullPath);
|
|
185
|
+
}
|
|
186
|
+
}
|
|
187
|
+
}
|
|
188
|
+
}
|
|
189
|
+
}
|
|
190
|
+
|
|
191
|
+
// Find target directory and scan it
|
|
192
|
+
for (const dir of scanTargetDirs) {
|
|
193
|
+
const dirPath = path.resolve(cwd, dir);
|
|
194
|
+
if (fs.existsSync(dirPath) && fs.statSync(dirPath).isDirectory()) {
|
|
195
|
+
scanDir(dirPath);
|
|
196
|
+
break;
|
|
197
|
+
}
|
|
198
|
+
}
|
|
199
|
+
|
|
200
|
+
return usageResults;
|
|
201
|
+
}
|
|
202
|
+
|
|
203
|
+
// Main logic
|
|
204
|
+
scanPackageJsonFiles();
|
|
205
|
+
const usageResults = scanSourceFiles();
|
|
206
|
+
|
|
207
|
+
// Find issues
|
|
208
|
+
const issues: DependencyIssue[] = [];
|
|
209
|
+
|
|
210
|
+
for (const [dep, usedInFiles] of Object.entries(usageResults)) {
|
|
211
|
+
if (usedInFiles.length > 0 && !allDependencies.has(dep)) {
|
|
212
|
+
issues.push({
|
|
213
|
+
package: dep,
|
|
214
|
+
usedInFiles,
|
|
215
|
+
});
|
|
216
|
+
}
|
|
217
|
+
}
|
|
218
|
+
|
|
219
|
+
// Report results
|
|
220
|
+
if (issues.length > 0) {
|
|
221
|
+
logger.error('šØ Shared dependency issues found:');
|
|
222
|
+
for (const issue of issues) {
|
|
223
|
+
logger.error(`\nš¦ Package: ${issue.package}`);
|
|
224
|
+
logger.error(` Used in ${issue.usedInFiles.length} files:`);
|
|
225
|
+
issue.usedInFiles.slice(0, 5).forEach(file => {
|
|
226
|
+
logger.error(` - ${path.relative(cwd, file)}`);
|
|
227
|
+
});
|
|
228
|
+
if (issue.usedInFiles.length > 5) {
|
|
229
|
+
logger.error(` ... and ${issue.usedInFiles.length - 5} more files`);
|
|
230
|
+
}
|
|
231
|
+
logger.error(` ā Missing from package.json dependencies`);
|
|
232
|
+
}
|
|
233
|
+
return {
|
|
234
|
+
healthy: false,
|
|
235
|
+
issues
|
|
236
|
+
};
|
|
237
|
+
}
|
|
238
|
+
|
|
239
|
+
logger.success('ā
All shared dependencies are properly declared');
|
|
240
|
+
return {
|
|
241
|
+
healthy: true,
|
|
242
|
+
issues: []
|
|
243
|
+
};
|
|
244
|
+
}
|
|
245
|
+
|
|
246
|
+
// Backwards compatibility - returns boolean for simple usage
|
|
247
|
+
export function checkShareDependenciesSimple(): boolean {
|
|
248
|
+
return checkShareDependencies().healthy;
|
|
249
|
+
}
|
|
250
|
+
|
|
251
|
+
export default checkShareDependencies;
|