@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.
Files changed (369) hide show
  1. package/compose/build.gradle.kts +1 -1
  2. package/compose/compose.podspec +1 -1
  3. package/compose/src/commonMain/kotlin/vn/momo/kits/components/Avatar.kt +157 -0
  4. package/compose/src/commonMain/kotlin/vn/momo/kits/components/Carousel.kt +123 -0
  5. package/compose/src/commonMain/kotlin/vn/momo/kits/components/Collapse.kt +224 -0
  6. package/compose/src/commonMain/kotlin/vn/momo/kits/components/Loader.kt +108 -0
  7. package/compose/src/commonMain/kotlin/vn/momo/kits/components/ProgressInfo.kt +350 -0
  8. package/compose/src/commonMain/kotlin/vn/momo/kits/components/Rating.kt +87 -0
  9. package/compose/src/commonMain/kotlin/vn/momo/kits/components/Slider.kt +360 -0
  10. package/compose/src/commonMain/kotlin/vn/momo/kits/components/Stepper.kt +256 -0
  11. package/compose/src/commonMain/kotlin/vn/momo/kits/components/Steps.kt +494 -0
  12. package/compose/src/commonMain/kotlin/vn/momo/kits/components/SuggestAction.kt +131 -0
  13. package/compose/src/commonMain/kotlin/vn/momo/kits/components/Swipe.kt +215 -0
  14. package/compose/src/commonMain/kotlin/vn/momo/kits/components/TabView.kt +449 -0
  15. package/compose/src/commonMain/kotlin/vn/momo/kits/components/Tooltip.kt +21 -7
  16. package/compose/src/commonMain/kotlin/vn/momo/kits/components/Uploader.kt +192 -0
  17. package/gradle.properties +1 -1
  18. package/ios/Input/Input.swift +4 -0
  19. package/local.properties +2 -2
  20. package/package.json +1 -1
  21. package/src/doctor/README.md +73 -0
  22. package/src/doctor/package-lock.json +885 -0
  23. package/src/doctor/package.json +44 -0
  24. package/src/doctor/publish.sh +27 -0
  25. package/src/doctor/src/Users.json +112 -0
  26. package/src/doctor/src/Whitelist.json +6 -0
  27. package/src/doctor/src/commands/check.ts +81 -0
  28. package/src/doctor/src/commands/doctor.ts +193 -0
  29. package/src/doctor/src/index.ts +35 -0
  30. package/src/doctor/src/logger.ts +84 -0
  31. package/src/doctor/src/task/native.ts +21 -0
  32. package/src/doctor/src/task/utils.ts +20 -0
  33. package/src/doctor/src/utils/checkCoreDependencies.ts +138 -0
  34. package/src/doctor/src/utils/checkDeletedPackage.ts +53 -0
  35. package/src/doctor/src/utils/checkDeprecatedPackages.ts +168 -0
  36. package/src/doctor/src/utils/checkDeprecatedVersion.ts +60 -0
  37. package/src/doctor/src/utils/checkShareDependencies.ts +251 -0
  38. package/src/doctor/src/utils/checkWrongVersionCommunityPackage.ts +64 -0
  39. package/src/doctor/src/utils/getErrorMessage.ts +84 -0
  40. package/src/doctor/src/utils/scanComponentUsage.ts +206 -0
  41. package/src/doctor/src/utils/scanFoundationImports.ts +169 -0
  42. package/src/doctor/src/utils/scanMaxApiUsage.ts +86 -0
  43. package/src/doctor/src/utils/scanNativeModulesUsage.ts +78 -0
  44. package/src/doctor/src/utils/sendMessage.ts +28 -0
  45. package/src/doctor/tsconfig.json +14 -0
  46. package/src/doctor/yarn.lock +492 -0
  47. package/src/foundations/Application/BottomSheet.tsx +358 -0
  48. package/src/foundations/Application/BottomTab/BottomTabBar.tsx +320 -0
  49. package/src/foundations/Application/BottomTab/CustomBottomTabItem.tsx +155 -0
  50. package/src/foundations/Application/BottomTab/TabBarIcon.tsx +113 -0
  51. package/src/foundations/Application/BottomTab/index.tsx +449 -0
  52. package/src/foundations/Application/Components/BackgroundImageView.tsx +126 -0
  53. package/src/foundations/Application/Components/HeaderAnimated.tsx +69 -0
  54. package/src/foundations/Application/Components/HeaderBackground.tsx +83 -0
  55. package/src/foundations/Application/Components/HeaderExtendHeader.tsx +225 -0
  56. package/src/foundations/Application/Components/HeaderLeft.tsx +93 -0
  57. package/src/foundations/Application/Components/HeaderRight.tsx +444 -0
  58. package/src/foundations/Application/Components/HeaderTitle.tsx +596 -0
  59. package/src/foundations/Application/Components/NavigationButton.tsx +76 -0
  60. package/src/foundations/Application/Components/SearchHeader.tsx +127 -0
  61. package/src/foundations/Application/Localize.ts +44 -0
  62. package/src/foundations/Application/ModalScreen.tsx +148 -0
  63. package/src/foundations/Application/Navigation.ts +63 -0
  64. package/src/foundations/Application/NavigationContainer.tsx +245 -0
  65. package/src/foundations/Application/Navigator.ts +171 -0
  66. package/src/foundations/Application/ScaleSizeProvider.tsx +16 -0
  67. package/src/foundations/Application/StackScreen.tsx +420 -0
  68. package/src/foundations/Application/TooltipPortal.tsx +127 -0
  69. package/src/foundations/Application/WidgetContainer.tsx +162 -0
  70. package/src/foundations/Application/index.ts +34 -0
  71. package/src/foundations/Application/types.ts +350 -0
  72. package/src/foundations/Application/utils.tsx +239 -0
  73. package/src/foundations/Assets/DotAnimation.json +256 -0
  74. package/src/foundations/Assets/SpinnerAnimation.json +1027 -0
  75. package/src/foundations/Assets/icon.json +4052 -0
  76. package/src/foundations/Assets/icon_bank.json +506 -0
  77. package/src/foundations/Assets/language.json +208 -0
  78. package/src/foundations/Assets/lottie_circle_loader.json +1 -0
  79. package/src/foundations/Assets/pinAnimation.json +1 -0
  80. package/src/foundations/Assets/unpinAnimation.json +1 -0
  81. package/src/foundations/Badge/Badge.tsx +104 -0
  82. package/src/foundations/Badge/BadgeDot.tsx +35 -0
  83. package/src/foundations/Badge/BadgeDotAnimation.tsx +95 -0
  84. package/src/foundations/Badge/BadgeRibbon.tsx +112 -0
  85. package/src/foundations/Badge/Shape.tsx +29 -0
  86. package/src/foundations/Badge/index.tsx +8 -0
  87. package/src/foundations/Badge/styles.ts +125 -0
  88. package/src/foundations/Badge/types.ts +68 -0
  89. package/src/foundations/Button/index.tsx +371 -0
  90. package/src/foundations/Button/styles.ts +65 -0
  91. package/src/foundations/CheckBox/index.tsx +104 -0
  92. package/src/foundations/CheckBox/styles.ts +17 -0
  93. package/src/foundations/CheckBox/types.ts +37 -0
  94. package/src/foundations/Consts/colors+spacing+radius.ts +232 -0
  95. package/src/foundations/Consts/index.ts +4 -0
  96. package/src/foundations/Consts/styles.ts +52 -0
  97. package/src/foundations/Consts/theme.ts +121 -0
  98. package/src/foundations/Context/index.ts +27 -0
  99. package/src/foundations/Divider/DashDivider.tsx +46 -0
  100. package/src/foundations/Divider/index.tsx +45 -0
  101. package/src/foundations/FoundationList/index.tsx +12 -0
  102. package/src/foundations/FoundationList/types.ts +7 -0
  103. package/src/foundations/Icon/index.tsx +57 -0
  104. package/src/foundations/Icon/types.ts +32 -0
  105. package/src/foundations/IconButton/index.tsx +144 -0
  106. package/src/foundations/IconButton/styles.ts +20 -0
  107. package/src/foundations/Image/index.tsx +115 -0
  108. package/src/foundations/Image/styles.ts +7 -0
  109. package/src/foundations/Image/types.ts +7 -0
  110. package/src/foundations/Input/Input.tsx +280 -0
  111. package/src/foundations/Input/InputDropDown.tsx +161 -0
  112. package/src/foundations/Input/InputMoney.tsx +325 -0
  113. package/src/foundations/Input/InputOTP.tsx +299 -0
  114. package/src/foundations/Input/InputPhoneNumber.tsx +287 -0
  115. package/src/foundations/Input/InputSearch.tsx +351 -0
  116. package/src/foundations/Input/InputTextArea.tsx +218 -0
  117. package/src/foundations/Input/SystemTextInput.tsx +44 -0
  118. package/src/foundations/Input/TextTyping.tsx +115 -0
  119. package/src/foundations/Input/common.tsx +243 -0
  120. package/src/foundations/Input/index.tsx +373 -0
  121. package/src/foundations/Input/styles.ts +226 -0
  122. package/src/foundations/Input/utils.ts +97 -0
  123. package/src/foundations/Layout/Card.tsx +108 -0
  124. package/src/foundations/Layout/FloatingButton.tsx +179 -0
  125. package/src/foundations/Layout/GridSystem.tsx +137 -0
  126. package/src/foundations/Layout/Item.tsx +59 -0
  127. package/src/foundations/Layout/ItemList.tsx +66 -0
  128. package/src/foundations/Layout/ItemSectionList.tsx +40 -0
  129. package/src/foundations/Layout/Screen.tsx +644 -0
  130. package/src/foundations/Layout/Section.tsx +103 -0
  131. package/src/foundations/Layout/TrackingScope.tsx +18 -0
  132. package/src/foundations/Layout/index.ts +34 -0
  133. package/src/foundations/Layout/styles.ts +95 -0
  134. package/src/foundations/Layout/types.ts +40 -0
  135. package/src/foundations/Layout/utils.ts +47 -0
  136. package/src/foundations/Loader/DotLoader.tsx +37 -0
  137. package/src/foundations/Loader/Loader.tsx +13 -0
  138. package/src/foundations/Loader/ProgressBar.tsx +45 -0
  139. package/src/foundations/Loader/Spinner.tsx +29 -0
  140. package/src/foundations/Loader/index.tsx +6 -0
  141. package/src/foundations/Loader/styles.ts +10 -0
  142. package/src/foundations/Loader/types.ts +35 -0
  143. package/src/foundations/Loader/utils.ts +25 -0
  144. package/src/foundations/Pagination/Dot.tsx +19 -0
  145. package/src/foundations/Pagination/PaginationDot.tsx +44 -0
  146. package/src/foundations/Pagination/PaginationNumber.tsx +31 -0
  147. package/src/foundations/Pagination/PaginationScroll.tsx +99 -0
  148. package/src/foundations/Pagination/PaginationWhiteDot.tsx +43 -0
  149. package/src/foundations/Pagination/index.tsx +25 -0
  150. package/src/foundations/Pagination/styles.ts +51 -0
  151. package/src/foundations/Pagination/types.ts +40 -0
  152. package/src/foundations/Popup/PopupNotify.tsx +276 -0
  153. package/src/foundations/Popup/PopupPromotion.tsx +118 -0
  154. package/src/foundations/Popup/index.tsx +4 -0
  155. package/src/foundations/Popup/types.ts +96 -0
  156. package/src/foundations/Radio/index.tsx +108 -0
  157. package/src/foundations/Radio/styles.ts +15 -0
  158. package/src/foundations/Radio/types.ts +31 -0
  159. package/src/foundations/Skeleton/index.tsx +118 -0
  160. package/src/foundations/Skeleton/styles.ts +5 -0
  161. package/src/foundations/Skeleton/types.ts +6 -0
  162. package/src/foundations/Switch/index.tsx +68 -0
  163. package/src/foundations/Switch/styles.ts +25 -0
  164. package/src/foundations/Switch/types.ts +19 -0
  165. package/src/foundations/Tag/index.tsx +128 -0
  166. package/src/foundations/Tag/types.ts +41 -0
  167. package/src/foundations/Text/index.tsx +241 -0
  168. package/src/foundations/Text/styles.ts +78 -0
  169. package/src/foundations/Text/types.ts +53 -0
  170. package/src/foundations/Text/utils.ts +63 -0
  171. package/src/foundations/Title/index.tsx +285 -0
  172. package/src/foundations/Title/styles.ts +55 -0
  173. package/src/foundations/Title/types.ts +21 -0
  174. package/src/foundations/index.ts +50 -0
  175. package/src/foundations/package.json +35 -0
  176. package/src/foundations/publish.sh +17 -0
  177. package/src/libs/AutoComplete/index.tsx +88 -0
  178. package/src/libs/AutoComplete/package.json +16 -0
  179. package/src/libs/AutoComplete/publish.sh +16 -0
  180. package/src/libs/AutoComplete/styles.ts +15 -0
  181. package/src/libs/AutoComplete/types.ts +60 -0
  182. package/src/libs/Avatar/index.tsx +146 -0
  183. package/src/libs/Avatar/package.json +16 -0
  184. package/src/libs/Avatar/publish.sh +20 -0
  185. package/src/libs/Avatar/styles.ts +18 -0
  186. package/src/libs/Avatar/types.ts +57 -0
  187. package/src/libs/Badge/Badge.tsx +70 -0
  188. package/src/libs/Badge/BadgeDot.tsx +11 -0
  189. package/src/libs/Badge/BadgeRibbon.tsx +122 -0
  190. package/src/libs/Badge/Shape.tsx +29 -0
  191. package/src/libs/Badge/index.tsx +7 -0
  192. package/src/libs/Badge/package.json +16 -0
  193. package/src/libs/Badge/publish.sh +18 -0
  194. package/src/libs/Badge/styles.ts +55 -0
  195. package/src/libs/Badge/types.ts +63 -0
  196. package/src/libs/Calendar/CalendarPro.tsx +307 -0
  197. package/src/libs/Calendar/Day.tsx +150 -0
  198. package/src/libs/Calendar/HeaderControl.tsx +55 -0
  199. package/src/libs/Calendar/LunarDateConverter.ts +228 -0
  200. package/src/libs/Calendar/LunarService.ts +206 -0
  201. package/src/libs/Calendar/Month.tsx +118 -0
  202. package/src/libs/Calendar/MonthList.tsx +226 -0
  203. package/src/libs/Calendar/TabHeader.tsx +91 -0
  204. package/src/libs/Calendar/Util.ts +288 -0
  205. package/src/libs/Calendar/holidayData.ts +118 -0
  206. package/src/libs/Calendar/index.tsx +383 -0
  207. package/src/libs/Calendar/package.json +18 -0
  208. package/src/libs/Calendar/publish.sh +18 -0
  209. package/src/libs/Calendar/styles.ts +122 -0
  210. package/src/libs/Calendar/types.ts +212 -0
  211. package/src/libs/Carousel/animation.ts +62 -0
  212. package/src/libs/Carousel/index.tsx +517 -0
  213. package/src/libs/Carousel/package.json +18 -0
  214. package/src/libs/Carousel/publish.sh +16 -0
  215. package/src/libs/Carousel/types.ts +71 -0
  216. package/src/libs/Chip/index.tsx +164 -0
  217. package/src/libs/Chip/package.json +16 -0
  218. package/src/libs/Chip/publish.sh +16 -0
  219. package/src/libs/Chip/styles.ts +20 -0
  220. package/src/libs/Chip/types.ts +72 -0
  221. package/src/libs/Collapse/index.tsx +305 -0
  222. package/src/libs/Collapse/package.json +16 -0
  223. package/src/libs/Collapse/publish.sh +18 -0
  224. package/src/libs/Collapse/styles.ts +37 -0
  225. package/src/libs/Collapse/types.ts +84 -0
  226. package/src/libs/DateTimePicker/WheelPicker.tsx +163 -0
  227. package/src/libs/DateTimePicker/WheelPickerItem.tsx +58 -0
  228. package/src/libs/DateTimePicker/index.tsx +188 -0
  229. package/src/libs/DateTimePicker/package.json +16 -0
  230. package/src/libs/DateTimePicker/publish.sh +17 -0
  231. package/src/libs/DateTimePicker/styles.ts +31 -0
  232. package/src/libs/DateTimePicker/types.ts +102 -0
  233. package/src/libs/DateTimePicker/utils.ts +114 -0
  234. package/src/libs/Information/index.tsx +129 -0
  235. package/src/libs/Information/package.json +16 -0
  236. package/src/libs/Information/publish.sh +18 -0
  237. package/src/libs/Information/styles.ts +34 -0
  238. package/src/libs/Information/types.ts +79 -0
  239. package/src/libs/Logo/index.tsx +39 -0
  240. package/src/libs/Logo/package.json +17 -0
  241. package/src/libs/Logo/publish.sh +16 -0
  242. package/src/libs/Logo/styles.ts +25 -0
  243. package/src/libs/Logo/types.ts +13 -0
  244. package/src/libs/ProgressInfo/ProgressInfoHorizontal.tsx +128 -0
  245. package/src/libs/ProgressInfo/ProgressInfoIcon.tsx +88 -0
  246. package/src/libs/ProgressInfo/ProgressInfoVertical.tsx +85 -0
  247. package/src/libs/ProgressInfo/index.tsx +22 -0
  248. package/src/libs/ProgressInfo/package.json +16 -0
  249. package/src/libs/ProgressInfo/publish.sh +16 -0
  250. package/src/libs/ProgressInfo/styles.ts +46 -0
  251. package/src/libs/ProgressInfo/types.ts +60 -0
  252. package/src/libs/ProgressInfo/yarn.lock +8 -0
  253. package/src/libs/Rating/index.tsx +74 -0
  254. package/src/libs/Rating/package.json +16 -0
  255. package/src/libs/Rating/publish.sh +18 -0
  256. package/src/libs/Rating/type.ts +25 -0
  257. package/src/libs/Slider/Label.tsx +33 -0
  258. package/src/libs/Slider/helpers.ts +35 -0
  259. package/src/libs/Slider/hooks.tsx +218 -0
  260. package/src/libs/Slider/index.tsx +453 -0
  261. package/src/libs/Slider/package.json +16 -0
  262. package/src/libs/Slider/publish.sh +18 -0
  263. package/src/libs/Slider/styles.ts +36 -0
  264. package/src/libs/Stepper/NumberView.tsx +64 -0
  265. package/src/libs/Stepper/StepperButton.tsx +37 -0
  266. package/src/libs/Stepper/index.tsx +139 -0
  267. package/src/libs/Stepper/package.json +16 -0
  268. package/src/libs/Stepper/publish.sh +17 -0
  269. package/src/libs/Stepper/styles.ts +44 -0
  270. package/src/libs/Stepper/types.ts +154 -0
  271. package/src/libs/Steps/StepIcon.tsx +86 -0
  272. package/src/libs/Steps/StepsHorizontal.tsx +189 -0
  273. package/src/libs/Steps/StepsVertical.tsx +133 -0
  274. package/src/libs/Steps/index.tsx +20 -0
  275. package/src/libs/Steps/package.json +16 -0
  276. package/src/libs/Steps/publish.sh +16 -0
  277. package/src/libs/Steps/styles.ts +46 -0
  278. package/src/libs/Steps/types.ts +159 -0
  279. package/src/libs/Steps/utils.ts +175 -0
  280. package/src/libs/SuggestAction/SuggestActionView.tsx +124 -0
  281. package/src/libs/SuggestAction/index.tsx +3 -0
  282. package/src/libs/SuggestAction/package.json +16 -0
  283. package/src/libs/SuggestAction/publish.sh +16 -0
  284. package/src/libs/SuggestAction/styles.ts +30 -0
  285. package/src/libs/SuggestAction/types.ts +36 -0
  286. package/src/libs/Swipe/SwipeView.tsx +151 -0
  287. package/src/libs/Swipe/index.tsx +5 -0
  288. package/src/libs/Swipe/package.json +16 -0
  289. package/src/libs/Swipe/publish.sh +16 -0
  290. package/src/libs/Swipe/styles.ts +16 -0
  291. package/src/libs/Swipe/types.ts +109 -0
  292. package/src/libs/TabView/assets/Path.tsx +29 -0
  293. package/src/libs/TabView/index.tsx +184 -0
  294. package/src/libs/TabView/package.json +16 -0
  295. package/src/libs/TabView/publish.sh +16 -0
  296. package/src/libs/TabView/styles.ts +96 -0
  297. package/src/libs/TabView/tabBar/CardTabBar.tsx +137 -0
  298. package/src/libs/TabView/tabBar/SrollableTabBar.tsx +218 -0
  299. package/src/libs/TabView/tabBar/TabBar.tsx +67 -0
  300. package/src/libs/TabView/tabItem/CardTabItem.tsx +118 -0
  301. package/src/libs/TabView/tabItem/TabItem.tsx +180 -0
  302. package/src/libs/TabView/types.ts +166 -0
  303. package/src/libs/Template/HeaderSliderBanner/index.tsx +86 -0
  304. package/src/libs/Template/HeaderSliderBanner/types.ts +16 -0
  305. package/src/libs/Template/TrustBanner/CustomAvatar.tsx +39 -0
  306. package/src/libs/Template/TrustBanner/index.tsx +161 -0
  307. package/src/libs/Template/TrustBanner/styles.ts +48 -0
  308. package/src/libs/Template/TrustBanner/types.ts +50 -0
  309. package/src/libs/Template/index.tsx +4 -0
  310. package/src/libs/Template/package.json +18 -0
  311. package/src/libs/Template/publish.sh +17 -0
  312. package/src/libs/Title/index.tsx +284 -0
  313. package/src/libs/Title/package.json +17 -0
  314. package/src/libs/Title/publish.sh +16 -0
  315. package/src/libs/Title/styles.ts +54 -0
  316. package/src/libs/Title/types.ts +21 -0
  317. package/src/libs/Tooltip/TooltipButtons.tsx +54 -0
  318. package/src/libs/Tooltip/index.tsx +608 -0
  319. package/src/libs/Tooltip/package.json +16 -0
  320. package/src/libs/Tooltip/publish.sh +18 -0
  321. package/src/libs/Tooltip/styles.ts +70 -0
  322. package/src/libs/Tooltip/types.ts +61 -0
  323. package/src/libs/Uploader/index.tsx +87 -0
  324. package/src/libs/Uploader/package.json +17 -0
  325. package/src/libs/Uploader/publish.sh +18 -0
  326. package/src/libs/Uploader/styles.ts +30 -0
  327. package/src/libs/Uploader/types.ts +69 -0
  328. package/src/native/MoMoNative.podspec +18 -0
  329. package/src/native/calculator/android/build.gradle +61 -0
  330. package/src/native/calculator/android/gradle/wrapper/gradle-wrapper.jar +0 -0
  331. package/src/native/calculator/android/gradle/wrapper/gradle-wrapper.properties +6 -0
  332. package/src/native/calculator/android/gradlew +172 -0
  333. package/src/native/calculator/android/gradlew.bat +84 -0
  334. package/src/native/calculator/android/src/main/AndroidManifest.xml +5 -0
  335. package/src/native/calculator/android/src/main/java/com/calculator/KeyboardViewModule.java +22 -0
  336. package/src/native/calculator/android/src/main/java/com/calculator/KeyboardViewPackage.java +35 -0
  337. package/src/native/calculator/android/src/main/java/com/calculator/modules/CalculatorKeyboardModule.java +157 -0
  338. package/src/native/calculator/android/src/main/java/com/calculator/views/calculatorkeyboard/CalculatorEditText.java +36 -0
  339. package/src/native/calculator/android/src/main/java/com/calculator/views/calculatorkeyboard/FixedRelativeLayout.java +45 -0
  340. package/src/native/calculator/android/src/main/java/com/calculator/views/calculatorkeyboard/MomoTextInputCalculatorManager.java +173 -0
  341. package/src/native/calculator/android/src/main/java/com/calculator/views/customkeyboard/RNCustomKeyboardModule.java +417 -0
  342. package/src/native/calculator/ios/Helper/MomoHelper.swift +16 -0
  343. package/src/native/calculator/ios/KeyboardView-Bridging-Header.h +60 -0
  344. package/src/native/calculator/ios/KeyboardView.h +19 -0
  345. package/src/native/calculator/ios/KeyboardView.m +56 -0
  346. package/src/native/calculator/ios/MomoTextInputCalculator.swift +144 -0
  347. package/src/native/calculator/ios/RNCustomKeyboard/RNCustomKeyboard.h +6 -0
  348. package/src/native/calculator/ios/RNCustomKeyboard/RNCustomKeyboard.m +143 -0
  349. package/src/native/package.json +14 -0
  350. package/src/native/publish.sh +29 -0
  351. package/src/native/resource/android/build.gradle +57 -0
  352. package/src/native/resource/android/gradle/wrapper/gradle-wrapper.jar +0 -0
  353. package/src/native/resource/android/gradle/wrapper/gradle-wrapper.properties +6 -0
  354. package/src/native/resource/android/src/main/AndroidManifest.xml +6 -0
  355. package/src/native/resource/android/src/main/java/com/resource/RNResourceModule.java +90 -0
  356. package/src/native/resource/android/src/main/java/com/resource/RNResourcePackage.java +22 -0
  357. package/src/native/resource/ios/RNResouce.m +71 -0
  358. package/src/native/resource/ios/RNResource.h +5 -0
  359. package/example/ios/Example.xcodeproj/xcuserdata/sophia.xcuserdatad/xcschemes/xcschememanagement.plist +0 -14
  360. package/example/ios/Example.xcworkspace/xcuserdata/sophia.xcuserdatad/UserInterfaceState.xcuserstate +0 -0
  361. package/example/ios/Example.xcworkspace/xcuserdata/sophia.xcuserdatad/xcdebugger/Breakpoints_v2.xcbkptlist +0 -6
  362. package/example/ios/Pods/Pods.xcodeproj/xcuserdata/sophia.xcuserdatad/xcschemes/MoMoUIKits.xcscheme +0 -58
  363. package/example/ios/Pods/Pods.xcodeproj/xcuserdata/sophia.xcuserdatad/xcschemes/Pods-Example.xcscheme +0 -58
  364. package/example/ios/Pods/Pods.xcodeproj/xcuserdata/sophia.xcuserdatad/xcschemes/SDWebImage.xcscheme +0 -58
  365. package/example/ios/Pods/Pods.xcodeproj/xcuserdata/sophia.xcuserdatad/xcschemes/SDWebImageSwiftUI.xcscheme +0 -58
  366. package/example/ios/Pods/Pods.xcodeproj/xcuserdata/sophia.xcuserdatad/xcschemes/SkeletonUI.xcscheme +0 -58
  367. package/example/ios/Pods/Pods.xcodeproj/xcuserdata/sophia.xcuserdatad/xcschemes/lottie-ios-LottiePrivacyInfo.xcscheme +0 -58
  368. package/example/ios/Pods/Pods.xcodeproj/xcuserdata/sophia.xcuserdatad/xcschemes/lottie-ios.xcscheme +0 -58
  369. 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;