@amabeth/repeating-wheel-picker 1.1.0 → 1.2.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.
Files changed (258) hide show
  1. package/LICENSE +20 -20
  2. package/README.md +57 -57
  3. package/example/index.ts +8 -0
  4. package/example/node_modules/@expo/cli/static/template/+html.tsx +28 -0
  5. package/example/node_modules/@expo/cli/static/template/+native-intent.ts +9 -0
  6. package/example/node_modules/@expo/cli/static/template/[...rsc]+api.ts +16 -0
  7. package/example/node_modules/ansi-styles/index.d.ts +345 -0
  8. package/example/node_modules/chalk/index.d.ts +415 -0
  9. package/example/node_modules/commander/typings/index.d.ts +627 -0
  10. package/example/node_modules/expo/Expo.podspec +108 -0
  11. package/example/node_modules/expo/build/Expo.d.ts +8 -0
  12. package/example/node_modules/expo/build/Expo.fx.d.ts +4 -0
  13. package/example/node_modules/expo/build/Expo.fx.web.d.ts +3 -0
  14. package/example/node_modules/expo/build/devtools/DevToolsPluginClient.d.ts +72 -0
  15. package/example/node_modules/expo/build/devtools/DevToolsPluginClientFactory.d.ts +16 -0
  16. package/example/node_modules/expo/build/devtools/DevToolsPluginClientImplApp.d.ts +15 -0
  17. package/example/node_modules/expo/build/devtools/DevToolsPluginClientImplBrowser.d.ts +14 -0
  18. package/example/node_modules/expo/build/devtools/MessageFramePacker.d.ts +50 -0
  19. package/example/node_modules/expo/build/devtools/ProtocolVersion.d.ts +7 -0
  20. package/example/node_modules/expo/build/devtools/WebSocketBackingStore.d.ts +10 -0
  21. package/example/node_modules/expo/build/devtools/WebSocketWithReconnect.d.ts +81 -0
  22. package/example/node_modules/expo/build/devtools/devtools.types.d.ts +42 -0
  23. package/example/node_modules/expo/build/devtools/getConnectionInfo.d.ts +6 -0
  24. package/example/node_modules/expo/build/devtools/getConnectionInfo.native.d.ts +6 -0
  25. package/example/node_modules/expo/build/devtools/index.d.ts +12 -0
  26. package/example/node_modules/expo/build/devtools/logger.d.ts +6 -0
  27. package/example/node_modules/expo/build/dom/base.d.ts +5 -0
  28. package/example/node_modules/expo/build/dom/dom-entry.d.ts +3 -0
  29. package/example/node_modules/expo/build/dom/dom-hooks.d.ts +8 -0
  30. package/example/node_modules/expo/build/dom/dom.d.ts +5 -0
  31. package/example/node_modules/expo/build/dom/dom.types.d.ts +34 -0
  32. package/example/node_modules/expo/build/dom/dom.web.d.ts +3 -0
  33. package/example/node_modules/expo/build/dom/global-events.d.ts +4 -0
  34. package/example/node_modules/expo/build/dom/injection.d.ts +9 -0
  35. package/example/node_modules/expo/build/dom/internal.d.ts +3 -0
  36. package/example/node_modules/expo/build/dom/internal.web.d.ts +2 -0
  37. package/example/node_modules/expo/build/dom/marshal.d.ts +4 -0
  38. package/example/node_modules/expo/build/dom/webview/ExpoDOMWebView.d.ts +6 -0
  39. package/example/node_modules/expo/build/dom/webview/RNWebView.d.ts +7 -0
  40. package/example/node_modules/expo/build/dom/webview/useDebugZeroHeight.d.ts +12 -0
  41. package/example/node_modules/expo/build/dom/webview-wrapper.d.ts +16 -0
  42. package/example/node_modules/expo/build/environment/DevLoadingView.d.ts +3 -0
  43. package/example/node_modules/expo/build/environment/DevLoadingView.web.d.ts +3 -0
  44. package/example/node_modules/expo/build/environment/DevLoadingViewNativeModule.d.ts +9 -0
  45. package/example/node_modules/expo/build/environment/DevLoadingViewNativeModule.native.d.ts +3 -0
  46. package/example/node_modules/expo/build/environment/ExpoGo.d.ts +31 -0
  47. package/example/node_modules/expo/build/environment/ExpoGo.web.d.ts +3 -0
  48. package/example/node_modules/expo/build/environment/getInitialSafeArea.d.ts +7 -0
  49. package/example/node_modules/expo/build/environment/getInitialSafeArea.native.d.ts +11 -0
  50. package/example/node_modules/expo/build/errors/AppEntryNotFound.d.ts +2 -0
  51. package/example/node_modules/expo/build/errors/ExpoErrorManager.d.ts +8 -0
  52. package/example/node_modules/expo/build/errors/ExpoErrorManager.native.d.ts +4 -0
  53. package/example/node_modules/expo/build/hooks/useEvent.d.ts +59 -0
  54. package/example/node_modules/expo/build/launch/registerRootComponent.d.ts +30 -0
  55. package/example/node_modules/expo/build/launch/withDevTools.d.ts +3 -0
  56. package/example/node_modules/expo/build/launch/withDevTools.ios.d.ts +7 -0
  57. package/example/node_modules/expo/build/launch/withDevTools.web.d.ts +3 -0
  58. package/example/node_modules/expo/build/timer/polyfillNextTick.d.ts +6 -0
  59. package/example/node_modules/expo/build/utils/blobUtils.d.ts +9 -0
  60. package/example/node_modules/expo/build/utils/getBundleUrl.d.ts +2 -0
  61. package/example/node_modules/expo/build/utils/getBundleUrl.native.d.ts +2 -0
  62. package/example/node_modules/expo/build/utils/getBundleUrl.web.d.ts +2 -0
  63. package/example/node_modules/expo/build/winter/FormData.d.ts +49 -0
  64. package/example/node_modules/expo/build/winter/ImportMetaRegistry.d.ts +9 -0
  65. package/example/node_modules/expo/build/winter/TextDecoder.d.ts +20 -0
  66. package/example/node_modules/expo/build/winter/fetch/ExpoFetchModule.d.ts +2 -0
  67. package/example/node_modules/expo/build/winter/fetch/ExpoFetchModule.web.d.ts +10 -0
  68. package/example/node_modules/expo/build/winter/fetch/FetchErrors.d.ts +8 -0
  69. package/example/node_modules/expo/build/winter/fetch/FetchResponse.d.ts +31 -0
  70. package/example/node_modules/expo/build/winter/fetch/NativeRequest.d.ts +30 -0
  71. package/example/node_modules/expo/build/winter/fetch/RequestUtils.d.ts +21 -0
  72. package/example/node_modules/expo/build/winter/fetch/convertFormData.d.ts +19 -0
  73. package/example/node_modules/expo/build/winter/fetch/fetch.d.ts +4 -0
  74. package/example/node_modules/expo/build/winter/fetch/fetch.types.d.ts +16 -0
  75. package/example/node_modules/expo/build/winter/fetch/fetch.web.d.ts +2 -0
  76. package/example/node_modules/expo/build/winter/fetch/index.d.ts +3 -0
  77. package/example/node_modules/expo/build/winter/index.d.ts +2 -0
  78. package/example/node_modules/expo/build/winter/runtime.d.ts +2 -0
  79. package/example/node_modules/expo/build/winter/runtime.native.d.ts +2 -0
  80. package/example/node_modules/expo/build/winter/url.d.ts +23 -0
  81. package/example/node_modules/expo/config-plugins.d.ts +1 -0
  82. package/example/node_modules/expo/config.d.ts +1 -0
  83. package/example/node_modules/expo/devtools.d.ts +1 -0
  84. package/example/node_modules/expo/dom/global.d.ts +1 -0
  85. package/example/node_modules/expo/dom/index.d.ts +1 -0
  86. package/example/node_modules/expo/dom/internal.d.ts +1 -0
  87. package/example/node_modules/expo/fetch.d.ts +1 -0
  88. package/example/node_modules/expo/fingerprint.d.ts +1 -0
  89. package/example/node_modules/expo/metro-config.d.ts +1 -0
  90. package/example/node_modules/expo/react-native.config.js +50 -0
  91. package/example/node_modules/expo/src/Expo.fx.tsx +53 -0
  92. package/example/node_modules/expo/src/Expo.fx.web.tsx +21 -0
  93. package/example/node_modules/expo/src/Expo.ts +30 -0
  94. package/example/node_modules/expo/src/devtools/DevToolsPluginClient.ts +240 -0
  95. package/example/node_modules/expo/src/devtools/DevToolsPluginClientFactory.ts +73 -0
  96. package/example/node_modules/expo/src/devtools/DevToolsPluginClientImplApp.ts +56 -0
  97. package/example/node_modules/expo/src/devtools/DevToolsPluginClientImplBrowser.ts +38 -0
  98. package/example/node_modules/expo/src/devtools/MessageFramePacker.ts +235 -0
  99. package/example/node_modules/expo/src/devtools/ProtocolVersion.ts +6 -0
  100. package/example/node_modules/expo/src/devtools/WebSocketBackingStore.ts +10 -0
  101. package/example/node_modules/expo/src/devtools/WebSocketWithReconnect.ts +318 -0
  102. package/example/node_modules/expo/src/devtools/devtools.types.ts +50 -0
  103. package/example/node_modules/expo/src/devtools/getConnectionInfo.native.ts +18 -0
  104. package/example/node_modules/expo/src/devtools/getConnectionInfo.ts +16 -0
  105. package/example/node_modules/expo/src/devtools/index.ts +53 -0
  106. package/example/node_modules/expo/src/devtools/logger.ts +29 -0
  107. package/example/node_modules/expo/src/dom/base.ts +62 -0
  108. package/example/node_modules/expo/src/dom/dom-entry.tsx +128 -0
  109. package/example/node_modules/expo/src/dom/dom-hooks.ts +46 -0
  110. package/example/node_modules/expo/src/dom/dom.ts +8 -0
  111. package/example/node_modules/expo/src/dom/dom.types.ts +39 -0
  112. package/example/node_modules/expo/src/dom/dom.web.ts +6 -0
  113. package/example/node_modules/expo/src/dom/global-events.ts +16 -0
  114. package/example/node_modules/expo/src/dom/injection.ts +42 -0
  115. package/example/node_modules/expo/src/dom/internal.ts +5 -0
  116. package/example/node_modules/expo/src/dom/internal.web.ts +1 -0
  117. package/example/node_modules/expo/src/dom/marshal.tsx +116 -0
  118. package/example/node_modules/expo/src/dom/webview/ExpoDOMWebView.ts +10 -0
  119. package/example/node_modules/expo/src/dom/webview/RNWebView.ts +12 -0
  120. package/example/node_modules/expo/src/dom/webview/useDebugZeroHeight.ts +62 -0
  121. package/example/node_modules/expo/src/dom/webview-wrapper.tsx +253 -0
  122. package/example/node_modules/expo/src/environment/DevLoadingView.tsx +123 -0
  123. package/example/node_modules/expo/src/environment/DevLoadingView.web.tsx +135 -0
  124. package/example/node_modules/expo/src/environment/DevLoadingViewNativeModule.native.ts +3 -0
  125. package/example/node_modules/expo/src/environment/DevLoadingViewNativeModule.ts +7 -0
  126. package/example/node_modules/expo/src/environment/ExpoGo.ts +53 -0
  127. package/example/node_modules/expo/src/environment/ExpoGo.web.ts +7 -0
  128. package/example/node_modules/expo/src/environment/getInitialSafeArea.native.ts +16 -0
  129. package/example/node_modules/expo/src/environment/getInitialSafeArea.ts +8 -0
  130. package/example/node_modules/expo/src/errors/AppEntryNotFound.tsx +35 -0
  131. package/example/node_modules/expo/src/errors/ExpoErrorManager.native.ts +51 -0
  132. package/example/node_modules/expo/src/errors/ExpoErrorManager.ts +11 -0
  133. package/example/node_modules/expo/src/hooks/useEvent.ts +112 -0
  134. package/example/node_modules/expo/src/launch/registerRootComponent.tsx +64 -0
  135. package/example/node_modules/expo/src/launch/withDevTools.ios.tsx +47 -0
  136. package/example/node_modules/expo/src/launch/withDevTools.tsx +30 -0
  137. package/example/node_modules/expo/src/launch/withDevTools.web.tsx +23 -0
  138. package/example/node_modules/expo/src/timer/polyfillNextTick.ts +10 -0
  139. package/example/node_modules/expo/src/ts-declarations/console.d.ts +47 -0
  140. package/example/node_modules/expo/src/ts-declarations/global.d.ts +12 -0
  141. package/example/node_modules/expo/src/ts-declarations/react-native.d.ts +34 -0
  142. package/example/node_modules/expo/src/ts-declarations/whatwg-url-without-unicode.d.ts +186 -0
  143. package/example/node_modules/expo/src/utils/blobUtils.ts +23 -0
  144. package/example/node_modules/expo/src/utils/getBundleUrl.native.ts +17 -0
  145. package/example/node_modules/expo/src/utils/getBundleUrl.ts +5 -0
  146. package/example/node_modules/expo/src/utils/getBundleUrl.web.ts +21 -0
  147. package/example/node_modules/expo/src/winter/FormData.ts +222 -0
  148. package/example/node_modules/expo/src/winter/ImportMetaRegistry.ts +14 -0
  149. package/example/node_modules/expo/src/winter/TextDecoder.ts +429 -0
  150. package/example/node_modules/expo/src/winter/fetch/ExpoFetchModule.ts +3 -0
  151. package/example/node_modules/expo/src/winter/fetch/ExpoFetchModule.web.ts +7 -0
  152. package/example/node_modules/expo/src/winter/fetch/FetchErrors.ts +11 -0
  153. package/example/node_modules/expo/src/winter/fetch/FetchResponse.ts +146 -0
  154. package/example/node_modules/expo/src/winter/fetch/NativeRequest.ts +38 -0
  155. package/example/node_modules/expo/src/winter/fetch/RequestUtils.ts +124 -0
  156. package/example/node_modules/expo/src/winter/fetch/convertFormData.ts +92 -0
  157. package/example/node_modules/expo/src/winter/fetch/fetch.ts +59 -0
  158. package/example/node_modules/expo/src/winter/fetch/fetch.types.ts +17 -0
  159. package/example/node_modules/expo/src/winter/fetch/fetch.web.ts +1 -0
  160. package/example/node_modules/expo/src/winter/fetch/index.ts +2 -0
  161. package/example/node_modules/expo/src/winter/index.ts +1 -0
  162. package/example/node_modules/expo/src/winter/runtime.native.ts +41 -0
  163. package/example/node_modules/expo/src/winter/runtime.ts +5 -0
  164. package/example/node_modules/expo/src/winter/url.ts +116 -0
  165. package/example/node_modules/expo/types/global.d.ts +38 -0
  166. package/example/node_modules/expo/types/index.d.ts +3 -0
  167. package/example/node_modules/expo/types/metro-require.d.ts +52 -0
  168. package/example/node_modules/expo/types/react-native-web.d.ts +291 -0
  169. package/example/node_modules/expo-modules-autolinking/build/ExpoModuleConfig.d.ts +85 -0
  170. package/example/node_modules/expo-modules-autolinking/build/autolinking/findModules.d.ts +5 -0
  171. package/example/node_modules/expo-modules-autolinking/build/autolinking/generatePackageList.d.ts +11 -0
  172. package/example/node_modules/expo-modules-autolinking/build/autolinking/getConfiguration.d.ts +2 -0
  173. package/example/node_modules/expo-modules-autolinking/build/autolinking/index.d.ts +17 -0
  174. package/example/node_modules/expo-modules-autolinking/build/autolinking/mergeLinkingOptions.d.ts +21 -0
  175. package/example/node_modules/expo-modules-autolinking/build/autolinking/resolveModules.d.ts +9 -0
  176. package/example/node_modules/expo-modules-autolinking/build/autolinking/utils.d.ts +6 -0
  177. package/example/node_modules/expo-modules-autolinking/build/autolinking/verifySearchResults.d.ts +5 -0
  178. package/example/node_modules/expo-modules-autolinking/build/fileUtils.d.ts +18 -0
  179. package/example/node_modules/expo-modules-autolinking/build/index.d.ts +1 -0
  180. package/example/node_modules/expo-modules-autolinking/build/platforms/android.d.ts +38 -0
  181. package/example/node_modules/expo-modules-autolinking/build/platforms/apple.d.ts +15 -0
  182. package/example/node_modules/expo-modules-autolinking/build/platforms/devtools.d.ts +3 -0
  183. package/example/node_modules/expo-modules-autolinking/build/reactNativeConfig/androidResolver.d.ts +20 -0
  184. package/example/node_modules/expo-modules-autolinking/build/reactNativeConfig/config.d.ts +5 -0
  185. package/example/node_modules/expo-modules-autolinking/build/reactNativeConfig/index.d.ts +2 -0
  186. package/example/node_modules/expo-modules-autolinking/build/reactNativeConfig/iosResolver.d.ts +2 -0
  187. package/example/node_modules/expo-modules-autolinking/build/reactNativeConfig/reactNativeConfig.d.ts +13 -0
  188. package/example/node_modules/expo-modules-autolinking/build/reactNativeConfig/reactNativeConfig.types.d.ts +95 -0
  189. package/example/node_modules/expo-modules-autolinking/build/types.d.ts +319 -0
  190. package/example/node_modules/expo-modules-autolinking/e2e/TestUtils.ts +53 -0
  191. package/example/node_modules/expo-modules-autolinking/exports.d.ts +1 -0
  192. package/example/node_modules/expo-modules-autolinking/src/ExpoModuleConfig.ts +181 -0
  193. package/example/node_modules/expo-modules-autolinking/src/autolinking/findModules.ts +259 -0
  194. package/example/node_modules/expo-modules-autolinking/src/autolinking/generatePackageList.ts +46 -0
  195. package/example/node_modules/expo-modules-autolinking/src/autolinking/getConfiguration.ts +7 -0
  196. package/example/node_modules/expo-modules-autolinking/src/autolinking/index.ts +45 -0
  197. package/example/node_modules/expo-modules-autolinking/src/autolinking/mergeLinkingOptions.ts +127 -0
  198. package/example/node_modules/expo-modules-autolinking/src/autolinking/resolveModules.ts +46 -0
  199. package/example/node_modules/expo-modules-autolinking/src/autolinking/utils.ts +37 -0
  200. package/example/node_modules/expo-modules-autolinking/src/autolinking/verifySearchResults.ts +33 -0
  201. package/example/node_modules/expo-modules-autolinking/src/fileUtils.ts +64 -0
  202. package/example/node_modules/expo-modules-autolinking/src/index.ts +262 -0
  203. package/example/node_modules/expo-modules-autolinking/src/platforms/android.ts +303 -0
  204. package/example/node_modules/expo-modules-autolinking/src/platforms/apple.ts +292 -0
  205. package/example/node_modules/expo-modules-autolinking/src/platforms/devtools.ts +25 -0
  206. package/example/node_modules/expo-modules-autolinking/src/reactNativeConfig/androidResolver.ts +264 -0
  207. package/example/node_modules/expo-modules-autolinking/src/reactNativeConfig/config.ts +67 -0
  208. package/example/node_modules/expo-modules-autolinking/src/reactNativeConfig/index.ts +2 -0
  209. package/example/node_modules/expo-modules-autolinking/src/reactNativeConfig/iosResolver.ts +37 -0
  210. package/example/node_modules/expo-modules-autolinking/src/reactNativeConfig/reactNativeConfig.ts +245 -0
  211. package/example/node_modules/expo-modules-autolinking/src/reactNativeConfig/reactNativeConfig.types.ts +107 -0
  212. package/example/node_modules/expo-modules-autolinking/src/types.ts +384 -0
  213. package/example/node_modules/find-up/index.d.ts +138 -0
  214. package/example/node_modules/glob/dist/commonjs/glob.d.ts +388 -0
  215. package/example/node_modules/glob/dist/commonjs/has-magic.d.ts +14 -0
  216. package/example/node_modules/glob/dist/commonjs/ignore.d.ts +24 -0
  217. package/example/node_modules/glob/dist/commonjs/index.d.ts +97 -0
  218. package/example/node_modules/glob/dist/commonjs/pattern.d.ts +76 -0
  219. package/example/node_modules/glob/dist/commonjs/processor.d.ts +59 -0
  220. package/example/node_modules/glob/dist/commonjs/walker.d.ts +97 -0
  221. package/example/node_modules/glob/dist/esm/glob.d.ts +388 -0
  222. package/example/node_modules/glob/dist/esm/has-magic.d.ts +14 -0
  223. package/example/node_modules/glob/dist/esm/ignore.d.ts +24 -0
  224. package/example/node_modules/glob/dist/esm/index.d.ts +97 -0
  225. package/example/node_modules/glob/dist/esm/pattern.d.ts +76 -0
  226. package/example/node_modules/glob/dist/esm/processor.d.ts +59 -0
  227. package/example/node_modules/glob/dist/esm/walker.d.ts +97 -0
  228. package/example/node_modules/locate-path/index.d.ts +83 -0
  229. package/example/node_modules/log-symbols/node_modules/chalk/types/index.d.ts +97 -0
  230. package/example/node_modules/minimatch/dist/commonjs/assert-valid-pattern.d.ts +2 -0
  231. package/example/node_modules/minimatch/dist/commonjs/ast.d.ts +20 -0
  232. package/example/node_modules/minimatch/dist/commonjs/brace-expressions.d.ts +8 -0
  233. package/example/node_modules/minimatch/dist/commonjs/escape.d.ts +12 -0
  234. package/example/node_modules/minimatch/dist/commonjs/index.d.ts +94 -0
  235. package/example/node_modules/minimatch/dist/commonjs/unescape.d.ts +17 -0
  236. package/example/node_modules/minimatch/dist/esm/assert-valid-pattern.d.ts +2 -0
  237. package/example/node_modules/minimatch/dist/esm/ast.d.ts +20 -0
  238. package/example/node_modules/minimatch/dist/esm/brace-expressions.d.ts +8 -0
  239. package/example/node_modules/minimatch/dist/esm/escape.d.ts +12 -0
  240. package/example/node_modules/minimatch/dist/esm/index.d.ts +94 -0
  241. package/example/node_modules/minimatch/dist/esm/unescape.d.ts +17 -0
  242. package/example/node_modules/ora/index.d.ts +257 -0
  243. package/example/node_modules/ora/node_modules/chalk/types/index.d.ts +97 -0
  244. package/example/node_modules/ora/node_modules/strip-ansi/index.d.ts +15 -0
  245. package/example/node_modules/p-locate/index.d.ts +53 -0
  246. package/example/node_modules/path-exists/index.d.ts +28 -0
  247. package/example/package.json +29 -0
  248. package/example/src/constants/styles.ts +43 -0
  249. package/example/src/hooks/useComponentHeight.ts +13 -0
  250. package/example/src/scenes/app.tsx +33 -0
  251. package/example/src/scenes/booleanPicker.tsx +60 -0
  252. package/example/src/scenes/customTypePicker.tsx +83 -0
  253. package/example/src/scenes/numberPicker.tsx +75 -0
  254. package/example/src/scenes/stringPicker.tsx +64 -0
  255. package/lib/module/index.js +6 -6
  256. package/lib/module/index.js.map +1 -1
  257. package/package.json +168 -183
  258. package/src/index.tsx +0 -507
@@ -0,0 +1,245 @@
1
+ import fs from 'fs/promises';
2
+ import path from 'path';
3
+ import resolveFrom from 'resolve-from';
4
+
5
+ import { getIsolatedModulesPath } from '../autolinking/utils';
6
+ import { fileExistsAsync } from '../fileUtils';
7
+ import type { SupportedPlatform } from '../types';
8
+ import {
9
+ findGradleAndManifestAsync,
10
+ parsePackageNameAsync,
11
+ resolveDependencyConfigImplAndroidAsync,
12
+ } from './androidResolver';
13
+ import { loadConfigAsync } from './config';
14
+ import { resolveDependencyConfigImplIosAsync } from './iosResolver';
15
+ import type {
16
+ RNConfigCommandOptions,
17
+ RNConfigDependency,
18
+ RNConfigReactNativeAppProjectConfig,
19
+ RNConfigReactNativeLibraryConfig,
20
+ RNConfigReactNativeProjectConfig,
21
+ RNConfigResult,
22
+ } from './reactNativeConfig.types';
23
+ import { resolveGradlePropertyAsync } from '../platforms/android';
24
+
25
+ const EDGE_TO_EDGE_ENABLED_GRADLE_PROPERTY_KEY = 'expo.edgeToEdgeEnabled';
26
+
27
+ /**
28
+ * Create config for react-native core autolinking.
29
+ */
30
+ export async function createReactNativeConfigAsync({
31
+ platform,
32
+ projectRoot,
33
+ searchPaths,
34
+ transitiveLinkingDependencies,
35
+ }: RNConfigCommandOptions): Promise<RNConfigResult> {
36
+ const projectConfig = await loadConfigAsync<RNConfigReactNativeProjectConfig>(projectRoot);
37
+ const dependencyRoots = {
38
+ ...(await findDependencyRootsAsync(projectRoot, searchPaths)),
39
+ ...findProjectLocalDependencyRoots(projectConfig),
40
+ };
41
+
42
+ // For Expo SDK 53 onwards, `react-native-edge-to-edge` is a transitive dependency of every expo project. Unless the user
43
+ // has also included it as a project dependency, we have to autolink it manually (transitive non-expo module dependencies are not autolinked).
44
+ // There are two reasons why we don't want to autolink `edge-to-edge` when `edgeToEdge` property is set to `false`:
45
+ // 1. `react-native-is-edge-to-edge` tries to check if the `edge-to-edge` turbomodule is present to determine whether edge-to-edge is enabled.
46
+ // 2. `react-native-edge-to-edge` applies edge-to-edge in `onHostResume` and has no property to disable this behavior.
47
+ const shouldAutolinkEdgeToEdge =
48
+ platform === 'android' &&
49
+ !('react-native-edge-to-edge' in dependencyRoots) &&
50
+ ((await resolveGradleEdgeToEdgeEnabled(projectRoot)) ||
51
+ transitiveLinkingDependencies.includes('react-native-edge-to-edge'));
52
+
53
+ if (shouldAutolinkEdgeToEdge) {
54
+ const edgeToEdgeRoot = resolveEdgeToEdgeDependencyRoot(projectRoot);
55
+ if (edgeToEdgeRoot) {
56
+ dependencyRoots['react-native-edge-to-edge'] = edgeToEdgeRoot;
57
+ }
58
+ }
59
+
60
+ // NOTE(@kitten): If this isn't resolved to be the realpath and is a symlink,
61
+ // the Cocoapods resolution will detect path mismatches and generate nonsensical
62
+ // relative paths that won't resolve
63
+ let reactNativePath: string;
64
+ try {
65
+ reactNativePath = await fs.realpath(dependencyRoots['react-native']);
66
+ } catch {
67
+ reactNativePath = dependencyRoots['react-native'];
68
+ }
69
+
70
+ const dependencyConfigs = await Promise.all(
71
+ Object.entries(dependencyRoots).map(async ([name, packageRoot]) => {
72
+ const config = await resolveDependencyConfigAsync(platform, name, packageRoot, projectConfig);
73
+ return [name, config];
74
+ })
75
+ );
76
+ const dependencyResults = Object.fromEntries<RNConfigDependency>(
77
+ dependencyConfigs.filter(([, config]) => config != null) as Iterable<
78
+ [string, RNConfigDependency]
79
+ >
80
+ );
81
+ const projectData = await resolveAppProjectConfigAsync(projectRoot, platform);
82
+ return {
83
+ root: projectRoot,
84
+ reactNativePath,
85
+ dependencies: dependencyResults,
86
+ project: projectData,
87
+ };
88
+ }
89
+
90
+ /**
91
+ * Find all dependencies and their directories from the project.
92
+ */
93
+ export async function findDependencyRootsAsync(
94
+ projectRoot: string,
95
+ searchPaths: string[]
96
+ ): Promise<Record<string, string>> {
97
+ const packageJson = JSON.parse(await fs.readFile(path.join(projectRoot, 'package.json'), 'utf8'));
98
+ const dependencies = [
99
+ ...Object.keys(packageJson.dependencies ?? {}),
100
+ ...Object.keys(packageJson.devDependencies ?? {}),
101
+ ];
102
+
103
+ const results: Record<string, string> = {};
104
+ // `searchPathSet` can be mutated to discover all "isolated modules groups", when using isolated modules
105
+ const searchPathSet = new Set(searchPaths);
106
+
107
+ for (const name of dependencies) {
108
+ for (const searchPath of searchPathSet) {
109
+ const packageConfigPath = path.resolve(searchPath, name, 'package.json');
110
+ if (await fileExistsAsync(packageConfigPath)) {
111
+ const packageRoot = path.dirname(packageConfigPath);
112
+ results[name] = packageRoot;
113
+
114
+ const maybeIsolatedModulesPath = getIsolatedModulesPath(packageRoot, name);
115
+ if (maybeIsolatedModulesPath) {
116
+ searchPathSet.add(maybeIsolatedModulesPath);
117
+ }
118
+ break;
119
+ }
120
+ }
121
+ }
122
+
123
+ return results;
124
+ }
125
+
126
+ /**
127
+ * Find local dependencies that specified in the `react-native.config.js` file.
128
+ */
129
+ function findProjectLocalDependencyRoots(
130
+ projectConfig: RNConfigReactNativeProjectConfig | null
131
+ ): Record<string, string> {
132
+ if (!projectConfig?.dependencies) {
133
+ return {};
134
+ }
135
+ const results: Record<string, string> = {};
136
+ for (const [name, config] of Object.entries(projectConfig.dependencies)) {
137
+ if (typeof config.root === 'string') {
138
+ results[name] = config.root;
139
+ }
140
+ }
141
+ return results;
142
+ }
143
+
144
+ export async function resolveDependencyConfigAsync(
145
+ platform: SupportedPlatform,
146
+ name: string,
147
+ packageRoot: string,
148
+ projectConfig: RNConfigReactNativeProjectConfig | null
149
+ ): Promise<RNConfigDependency | null> {
150
+ const libraryConfig = await loadConfigAsync<RNConfigReactNativeLibraryConfig>(packageRoot);
151
+ const reactNativeConfig = {
152
+ ...libraryConfig?.dependency,
153
+ ...projectConfig?.dependencies?.[name],
154
+ };
155
+
156
+ if (Object.keys(libraryConfig?.platforms ?? {}).length > 0) {
157
+ // Package defines platforms would be a platform host package.
158
+ // The rnc-cli will skip this package.
159
+ return null;
160
+ }
161
+ if (name === 'react-native' || name === 'react-native-macos') {
162
+ // Starting from version 0.76, the `react-native` package only defines platforms
163
+ // when @react-native-community/cli-platform-android/ios is installed.
164
+ // Therefore, we need to manually filter it out.
165
+ return null;
166
+ }
167
+
168
+ let platformData = null;
169
+ if (platform === 'android') {
170
+ platformData = await resolveDependencyConfigImplAndroidAsync(
171
+ packageRoot,
172
+ reactNativeConfig.platforms?.android
173
+ );
174
+ } else if (platform === 'ios') {
175
+ platformData = await resolveDependencyConfigImplIosAsync(
176
+ packageRoot,
177
+ reactNativeConfig.platforms?.ios
178
+ );
179
+ }
180
+ if (!platformData) {
181
+ return null;
182
+ }
183
+ return {
184
+ root: packageRoot,
185
+ name,
186
+ platforms: {
187
+ [platform]: platformData,
188
+ },
189
+ };
190
+ }
191
+
192
+ export function resolveEdgeToEdgeDependencyRoot(projectRoot: string): string | null {
193
+ const expoPackageRoot = resolveFrom.silent(projectRoot, 'expo/package.json');
194
+ const edgeToEdgePath = resolveFrom.silent(
195
+ expoPackageRoot ?? projectRoot,
196
+ 'react-native-edge-to-edge/package.json'
197
+ );
198
+ if (edgeToEdgePath) {
199
+ return path.dirname(edgeToEdgePath);
200
+ }
201
+ return null;
202
+ }
203
+
204
+ export async function resolveAppProjectConfigAsync(
205
+ projectRoot: string,
206
+ platform: SupportedPlatform
207
+ ): Promise<RNConfigReactNativeAppProjectConfig> {
208
+ if (platform === 'android') {
209
+ const androidDir = path.join(projectRoot, 'android');
210
+ const { gradle, manifest } = await findGradleAndManifestAsync({ androidDir, isLibrary: false });
211
+ if (gradle == null || manifest == null) {
212
+ return {};
213
+ }
214
+ const packageName = await parsePackageNameAsync(androidDir, manifest, gradle);
215
+
216
+ return {
217
+ android: {
218
+ packageName: packageName ?? '',
219
+ sourceDir: path.join(projectRoot, 'android'),
220
+ },
221
+ };
222
+ }
223
+
224
+ if (platform === 'ios') {
225
+ return {
226
+ ios: {
227
+ sourceDir: path.join(projectRoot, 'ios'),
228
+ },
229
+ };
230
+ }
231
+
232
+ return {};
233
+ }
234
+
235
+ /**
236
+ * Resolve the `expo.edgeToEdgeEnabled` property from the `gradle.properties` file.
237
+ */
238
+ async function resolveGradleEdgeToEdgeEnabled(projectRoot: string): Promise<boolean> {
239
+ return (
240
+ (await resolveGradlePropertyAsync(
241
+ path.join(projectRoot, 'android'),
242
+ EDGE_TO_EDGE_ENABLED_GRADLE_PROPERTY_KEY
243
+ )) === 'true'
244
+ );
245
+ }
@@ -0,0 +1,107 @@
1
+ import type { SupportedPlatform } from '../types';
2
+
3
+ /**
4
+ * Options for 'react-native-config' command.
5
+ */
6
+ export interface RNConfigCommandOptions {
7
+ platform: SupportedPlatform;
8
+ projectRoot: string;
9
+ searchPaths: string[];
10
+ transitiveLinkingDependencies: string[];
11
+ }
12
+
13
+ /**
14
+ * Dependency configuration for Android platform.
15
+ */
16
+ export interface RNConfigDependencyAndroid {
17
+ sourceDir: string;
18
+ packageImportPath: string;
19
+ packageInstance: string;
20
+ dependencyConfiguration?: string;
21
+ buildTypes: string[];
22
+ libraryName?: string | null;
23
+ componentDescriptors?: string[] | null;
24
+ cmakeListsPath?: string | null;
25
+ cxxModuleCMakeListsModuleName?: string | null;
26
+ cxxModuleCMakeListsPath?: string | null;
27
+ cxxModuleHeaderName?: string | null;
28
+ }
29
+
30
+ /**
31
+ * Dependency configuration for iOS platform.
32
+ */
33
+ export interface RNConfigDependencyIos {
34
+ podspecPath: string;
35
+ version: string;
36
+ configurations: string[];
37
+ scriptPhases: any[];
38
+ }
39
+
40
+ /**
41
+ * Dependency configuration.
42
+ */
43
+ export interface RNConfigDependency {
44
+ root: string;
45
+ name: string;
46
+ platforms: {
47
+ android?: RNConfigDependencyAndroid;
48
+ ios?: RNConfigDependencyIos;
49
+ };
50
+ }
51
+
52
+ /**
53
+ * Result of 'react-native-config' command.
54
+ */
55
+ export interface RNConfigResult {
56
+ root: string;
57
+ reactNativePath: string;
58
+ dependencies: Record<string, RNConfigDependency>;
59
+ project: {
60
+ ios?: {
61
+ sourceDir: string;
62
+ };
63
+ };
64
+ }
65
+
66
+ export type RNConfigReactNativePlatformsConfigAndroid = any;
67
+ export type RNConfigReactNativePlatformsConfigIos = any;
68
+
69
+ interface RNConfigReactNativePlatformsConfig {
70
+ root?: string;
71
+ platforms?: {
72
+ android?: RNConfigReactNativePlatformsConfigAndroid;
73
+ ios?: RNConfigReactNativePlatformsConfigIos;
74
+ };
75
+ }
76
+
77
+ /**
78
+ * The `react-native.config.js` config from projectRoot.
79
+ */
80
+ export interface RNConfigReactNativeProjectConfig {
81
+ dependencies?: Record<string, RNConfigReactNativePlatformsConfig>;
82
+ }
83
+
84
+ /**
85
+ * The `react-native.config.js` config from library packageRoot.
86
+ */
87
+ export interface RNConfigReactNativeLibraryConfig {
88
+ dependency?: RNConfigReactNativePlatformsConfig;
89
+ platforms?: any;
90
+ }
91
+
92
+ export type RNConfigReactNativeConfig =
93
+ | RNConfigReactNativeProjectConfig
94
+ | RNConfigReactNativeLibraryConfig;
95
+
96
+ /**
97
+ * The `project` config represents the app project configuration.
98
+ */
99
+ export interface RNConfigReactNativeAppProjectConfig {
100
+ android?: {
101
+ sourceDir: string;
102
+ packageName: string;
103
+ };
104
+ ios?: {
105
+ sourceDir: string;
106
+ };
107
+ }