@sentry/wizard 3.42.1 → 4.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (338) hide show
  1. package/.node-cache/node-v22.14.0-darwin-arm64 +0 -0
  2. package/.node-cache/node-v22.14.0-darwin-x64 +0 -0
  3. package/.node-cache/node-v22.14.0-linux-arm64 +0 -0
  4. package/.node-cache/node-v22.14.0-linux-x64 +0 -0
  5. package/.node-cache/node-v22.14.0-win-x64.exe +0 -0
  6. package/CHANGELOG.md +26 -0
  7. package/COPYING +3575 -0
  8. package/bin.ts +85 -80
  9. package/dist/bin.js +44 -35
  10. package/dist/bin.js.map +1 -1
  11. package/dist/e2e-tests/jest.config.js +1 -1
  12. package/dist/e2e-tests/jest.config.js.map +1 -1
  13. package/dist/e2e-tests/tests/flutter.test.js +62 -147
  14. package/dist/e2e-tests/tests/flutter.test.js.map +1 -1
  15. package/dist/e2e-tests/tests/nextjs.test.js +77 -175
  16. package/dist/e2e-tests/tests/nextjs.test.js.map +1 -1
  17. package/dist/e2e-tests/tests/nuxt-3.test.js +61 -162
  18. package/dist/e2e-tests/tests/nuxt-3.test.js.map +1 -1
  19. package/dist/e2e-tests/tests/nuxt-4.test.js +62 -163
  20. package/dist/e2e-tests/tests/nuxt-4.test.js.map +1 -1
  21. package/dist/e2e-tests/tests/remix.test.js +147 -189
  22. package/dist/e2e-tests/tests/remix.test.js.map +1 -1
  23. package/dist/e2e-tests/tests/sveltekit.test.js +133 -187
  24. package/dist/e2e-tests/tests/sveltekit.test.js.map +1 -1
  25. package/dist/e2e-tests/utils/index.d.ts +1 -1
  26. package/dist/e2e-tests/utils/index.js +113 -195
  27. package/dist/e2e-tests/utils/index.js.map +1 -1
  28. package/dist/lib/Constants.js +5 -5
  29. package/dist/lib/Constants.js.map +1 -1
  30. package/dist/lib/Helper/BottomBar.d.ts +1 -1
  31. package/dist/lib/Helper/BottomBar.js +14 -15
  32. package/dist/lib/Helper/BottomBar.js.map +1 -1
  33. package/dist/lib/Helper/Env.js +5 -2
  34. package/dist/lib/Helper/Env.js.map +1 -1
  35. package/dist/lib/Helper/File.js +14 -27
  36. package/dist/lib/Helper/File.js.map +1 -1
  37. package/dist/lib/Helper/Git.js +24 -59
  38. package/dist/lib/Helper/Git.js.map +1 -1
  39. package/dist/lib/Helper/Logging.js +2 -2
  40. package/dist/lib/Helper/Logging.js.map +1 -1
  41. package/dist/lib/Helper/MergeConfig.js +4 -4
  42. package/dist/lib/Helper/MergeConfig.js.map +1 -1
  43. package/dist/lib/Helper/Package.d.ts +4 -1
  44. package/dist/lib/Helper/Package.js +12 -38
  45. package/dist/lib/Helper/Package.js.map +1 -1
  46. package/dist/lib/Helper/SentryCli.js +77 -149
  47. package/dist/lib/Helper/SentryCli.js.map +1 -1
  48. package/dist/lib/Helper/Wizard.js +29 -124
  49. package/dist/lib/Helper/Wizard.js.map +1 -1
  50. package/dist/lib/Helper/__tests__/File.js +4 -4
  51. package/dist/lib/Helper/__tests__/File.js.map +1 -1
  52. package/dist/lib/Helper/__tests__/MergeConfig.js +24 -24
  53. package/dist/lib/Helper/__tests__/MergeConfig.js.map +1 -1
  54. package/dist/lib/Helper/__tests__/SentryCli.js +33 -23
  55. package/dist/lib/Helper/__tests__/SentryCli.js.map +1 -1
  56. package/dist/lib/Setup.js +23 -85
  57. package/dist/lib/Setup.js.map +1 -1
  58. package/dist/lib/Steps/BaseStep.js +8 -8
  59. package/dist/lib/Steps/BaseStep.js.map +1 -1
  60. package/dist/lib/Steps/ChooseIntegration.js +80 -125
  61. package/dist/lib/Steps/ChooseIntegration.js.map +1 -1
  62. package/dist/lib/Steps/ConfigureProject.js +6 -66
  63. package/dist/lib/Steps/ConfigureProject.js.map +1 -1
  64. package/dist/lib/Steps/Initial.js +16 -104
  65. package/dist/lib/Steps/Initial.js.map +1 -1
  66. package/dist/lib/Steps/Integrations/BaseIntegration.js +24 -118
  67. package/dist/lib/Steps/Integrations/BaseIntegration.js.map +1 -1
  68. package/dist/lib/Steps/Integrations/Cordova.js +95 -183
  69. package/dist/lib/Steps/Integrations/Cordova.js.map +1 -1
  70. package/dist/lib/Steps/Integrations/Electron.js +87 -145
  71. package/dist/lib/Steps/Integrations/Electron.js.map +1 -1
  72. package/dist/lib/Steps/Integrations/MobileProject.js +40 -148
  73. package/dist/lib/Steps/Integrations/MobileProject.js.map +1 -1
  74. package/dist/lib/Steps/OpenSentry.js +63 -126
  75. package/dist/lib/Steps/OpenSentry.js.map +1 -1
  76. package/dist/lib/Steps/PromptForParameters.js +110 -206
  77. package/dist/lib/Steps/PromptForParameters.js.map +1 -1
  78. package/dist/lib/Steps/Result.js +19 -79
  79. package/dist/lib/Steps/Result.js.map +1 -1
  80. package/dist/lib/Steps/SentryProjectSelector.js +57 -148
  81. package/dist/lib/Steps/SentryProjectSelector.js.map +1 -1
  82. package/dist/lib/Steps/ShouldConfigure.js +6 -66
  83. package/dist/lib/Steps/ShouldConfigure.js.map +1 -1
  84. package/dist/lib/Steps/WaitForSentry.js +43 -120
  85. package/dist/lib/Steps/WaitForSentry.js.map +1 -1
  86. package/dist/lib/Steps/Welcome.js +17 -76
  87. package/dist/lib/Steps/Welcome.js.map +1 -1
  88. package/dist/lib/__tests__/Env.js +3 -3
  89. package/dist/lib/__tests__/Env.js.map +1 -1
  90. package/dist/src/android/android-wizard.js +100 -176
  91. package/dist/src/android/android-wizard.js.map +1 -1
  92. package/dist/src/android/code-tools.js +24 -33
  93. package/dist/src/android/code-tools.js.map +1 -1
  94. package/dist/src/android/gradle.js +106 -165
  95. package/dist/src/android/gradle.js.map +1 -1
  96. package/dist/src/android/manifest.js +26 -27
  97. package/dist/src/android/manifest.js.map +1 -1
  98. package/dist/src/android/templates.js +76 -23
  99. package/dist/src/android/templates.js.map +1 -1
  100. package/dist/src/apple/apple-wizard.js +129 -225
  101. package/dist/src/apple/apple-wizard.js.map +1 -1
  102. package/dist/src/apple/cocoapod.js +47 -109
  103. package/dist/src/apple/cocoapod.js.map +1 -1
  104. package/dist/src/apple/code-tools.js +32 -35
  105. package/dist/src/apple/code-tools.js.map +1 -1
  106. package/dist/src/apple/fastlane.js +51 -97
  107. package/dist/src/apple/fastlane.js.map +1 -1
  108. package/dist/src/apple/templates.js +41 -5
  109. package/dist/src/apple/templates.js.map +1 -1
  110. package/dist/src/apple/xcode-manager.d.ts +2 -2
  111. package/dist/src/apple/xcode-manager.js +93 -108
  112. package/dist/src/apple/xcode-manager.js.map +1 -1
  113. package/dist/src/flutter/code-tools.js +79 -127
  114. package/dist/src/flutter/code-tools.js.map +1 -1
  115. package/dist/src/flutter/flutter-wizard.js +75 -136
  116. package/dist/src/flutter/flutter-wizard.js.map +1 -1
  117. package/dist/src/flutter/templates.js +48 -12
  118. package/dist/src/flutter/templates.js.map +1 -1
  119. package/dist/src/nextjs/nextjs-wizard.js +527 -805
  120. package/dist/src/nextjs/nextjs-wizard.js.map +1 -1
  121. package/dist/src/nextjs/templates.js +380 -40
  122. package/dist/src/nextjs/templates.js.map +1 -1
  123. package/dist/src/nextjs/utils.js +5 -5
  124. package/dist/src/nextjs/utils.js.map +1 -1
  125. package/dist/src/nuxt/nuxt-wizard.js +91 -188
  126. package/dist/src/nuxt/nuxt-wizard.js.map +1 -1
  127. package/dist/src/nuxt/sdk-example.js +68 -137
  128. package/dist/src/nuxt/sdk-example.js.map +1 -1
  129. package/dist/src/nuxt/sdk-setup.d.ts +4 -4
  130. package/dist/src/nuxt/sdk-setup.js +180 -336
  131. package/dist/src/nuxt/sdk-setup.js.map +1 -1
  132. package/dist/src/nuxt/templates.js +195 -18
  133. package/dist/src/nuxt/templates.js.map +1 -1
  134. package/dist/src/nuxt/utils.js +29 -76
  135. package/dist/src/nuxt/utils.js.map +1 -1
  136. package/dist/src/react-native/expo-env-file.js +41 -94
  137. package/dist/src/react-native/expo-env-file.js.map +1 -1
  138. package/dist/src/react-native/expo-metro.d.ts +1 -1
  139. package/dist/src/react-native/expo-metro.js +75 -130
  140. package/dist/src/react-native/expo-metro.js.map +1 -1
  141. package/dist/src/react-native/expo.js +61 -114
  142. package/dist/src/react-native/expo.js.map +1 -1
  143. package/dist/src/react-native/git.js +23 -56
  144. package/dist/src/react-native/git.js.map +1 -1
  145. package/dist/src/react-native/glob.js +3 -3
  146. package/dist/src/react-native/glob.js.map +1 -1
  147. package/dist/src/react-native/gradle.js +4 -4
  148. package/dist/src/react-native/gradle.js.map +1 -1
  149. package/dist/src/react-native/javascript.js +51 -95
  150. package/dist/src/react-native/javascript.js.map +1 -1
  151. package/dist/src/react-native/metro.js +176 -296
  152. package/dist/src/react-native/metro.js.map +1 -1
  153. package/dist/src/react-native/react-native-wizard.js +267 -418
  154. package/dist/src/react-native/react-native-wizard.js.map +1 -1
  155. package/dist/src/react-native/uninstall.js +37 -80
  156. package/dist/src/react-native/uninstall.js.map +1 -1
  157. package/dist/src/react-native/xcode.js +57 -55
  158. package/dist/src/react-native/xcode.js.map +1 -1
  159. package/dist/src/remix/codemods/express-server.js +27 -82
  160. package/dist/src/remix/codemods/express-server.js.map +1 -1
  161. package/dist/src/remix/codemods/handle-error.js +28 -31
  162. package/dist/src/remix/codemods/handle-error.js.map +1 -1
  163. package/dist/src/remix/codemods/root-common.js +11 -11
  164. package/dist/src/remix/codemods/root-common.js.map +1 -1
  165. package/dist/src/remix/codemods/root-v1.js +17 -67
  166. package/dist/src/remix/codemods/root-v1.js.map +1 -1
  167. package/dist/src/remix/codemods/root-v2.js +89 -140
  168. package/dist/src/remix/codemods/root-v2.js.map +1 -1
  169. package/dist/src/remix/remix-wizard.js +181 -343
  170. package/dist/src/remix/remix-wizard.js.map +1 -1
  171. package/dist/src/remix/sdk-example.js +84 -66
  172. package/dist/src/remix/sdk-example.js.map +1 -1
  173. package/dist/src/remix/sdk-setup.js +161 -293
  174. package/dist/src/remix/sdk-setup.js.map +1 -1
  175. package/dist/src/remix/templates.js +10 -2
  176. package/dist/src/remix/templates.js.map +1 -1
  177. package/dist/src/remix/utils.js +13 -14
  178. package/dist/src/remix/utils.js.map +1 -1
  179. package/dist/src/run.js +106 -178
  180. package/dist/src/run.js.map +1 -1
  181. package/dist/src/sourcemaps/sourcemaps-wizard.js +248 -372
  182. package/dist/src/sourcemaps/sourcemaps-wizard.js.map +1 -1
  183. package/dist/src/sourcemaps/tools/angular.js +32 -66
  184. package/dist/src/sourcemaps/tools/angular.js.map +1 -1
  185. package/dist/src/sourcemaps/tools/create-react-app.js +14 -59
  186. package/dist/src/sourcemaps/tools/create-react-app.js.map +1 -1
  187. package/dist/src/sourcemaps/tools/esbuild.js +34 -77
  188. package/dist/src/sourcemaps/tools/esbuild.js.map +1 -1
  189. package/dist/src/sourcemaps/tools/nextjs.d.ts +2 -2
  190. package/dist/src/sourcemaps/tools/nextjs.js +75 -102
  191. package/dist/src/sourcemaps/tools/nextjs.js.map +1 -1
  192. package/dist/src/sourcemaps/tools/remix.js +53 -93
  193. package/dist/src/sourcemaps/tools/remix.js.map +1 -1
  194. package/dist/src/sourcemaps/tools/rollup.js +35 -76
  195. package/dist/src/sourcemaps/tools/rollup.js.map +1 -1
  196. package/dist/src/sourcemaps/tools/sentry-cli.js +157 -289
  197. package/dist/src/sourcemaps/tools/sentry-cli.js.map +1 -1
  198. package/dist/src/sourcemaps/tools/tsc.js +68 -134
  199. package/dist/src/sourcemaps/tools/tsc.js.map +1 -1
  200. package/dist/src/sourcemaps/tools/vite.js +111 -196
  201. package/dist/src/sourcemaps/tools/vite.js.map +1 -1
  202. package/dist/src/sourcemaps/tools/webpack.d.ts +1 -1
  203. package/dist/src/sourcemaps/tools/webpack.js +158 -260
  204. package/dist/src/sourcemaps/tools/webpack.js.map +1 -1
  205. package/dist/src/sourcemaps/utils/detect-tool.js +9 -54
  206. package/dist/src/sourcemaps/utils/detect-tool.js.map +1 -1
  207. package/dist/src/sourcemaps/utils/other-wizards.js +77 -144
  208. package/dist/src/sourcemaps/utils/other-wizards.js.map +1 -1
  209. package/dist/src/sourcemaps/utils/sdk-version.js +112 -191
  210. package/dist/src/sourcemaps/utils/sdk-version.js.map +1 -1
  211. package/dist/src/sveltekit/sdk-example.js +20 -70
  212. package/dist/src/sveltekit/sdk-example.js.map +1 -1
  213. package/dist/src/sveltekit/sdk-setup.js +250 -411
  214. package/dist/src/sveltekit/sdk-setup.js.map +1 -1
  215. package/dist/src/sveltekit/sveltekit-wizard.js +107 -191
  216. package/dist/src/sveltekit/sveltekit-wizard.js.map +1 -1
  217. package/dist/src/sveltekit/templates.js +147 -13
  218. package/dist/src/sveltekit/templates.js.map +1 -1
  219. package/dist/src/sveltekit/utils.js +3 -3
  220. package/dist/src/sveltekit/utils.js.map +1 -1
  221. package/dist/src/telemetry.d.ts +2 -2
  222. package/dist/src/telemetry.js +58 -108
  223. package/dist/src/telemetry.js.map +1 -1
  224. package/dist/src/utils/ast-utils.js +39 -54
  225. package/dist/src/utils/ast-utils.js.map +1 -1
  226. package/dist/src/utils/bash.js +28 -75
  227. package/dist/src/utils/bash.js.map +1 -1
  228. package/dist/src/utils/clack-utils.d.ts +3 -7
  229. package/dist/src/utils/clack-utils.js +688 -1083
  230. package/dist/src/utils/clack-utils.js.map +1 -1
  231. package/dist/src/utils/debug.js +6 -10
  232. package/dist/src/utils/debug.js.map +1 -1
  233. package/dist/src/utils/package-json.js +5 -6
  234. package/dist/src/utils/package-json.js.map +1 -1
  235. package/dist/src/utils/package-manager.js +65 -139
  236. package/dist/src/utils/package-manager.js.map +1 -1
  237. package/dist/src/utils/release-registry.js +12 -59
  238. package/dist/src/utils/release-registry.js.map +1 -1
  239. package/dist/src/utils/semver.js +3 -4
  240. package/dist/src/utils/semver.js.map +1 -1
  241. package/dist/src/utils/sentrycli-utils.js +4 -4
  242. package/dist/src/utils/sentrycli-utils.js.map +1 -1
  243. package/dist/src/utils/url.js +5 -6
  244. package/dist/src/utils/url.js.map +1 -1
  245. package/dist/test/android/code-tools.test.js +18 -18
  246. package/dist/test/android/code-tools.test.js.map +1 -1
  247. package/dist/test/apple/cocoapod.test.js +154 -299
  248. package/dist/test/apple/cocoapod.test.js.map +1 -1
  249. package/dist/test/apple/code-tools.test.js +375 -263
  250. package/dist/test/apple/code-tools.test.js.map +1 -1
  251. package/dist/test/apple/fastfile.test.js +319 -271
  252. package/dist/test/apple/fastfile.test.js.map +1 -1
  253. package/dist/test/apple/templates.test.js +114 -30
  254. package/dist/test/apple/templates.test.js.map +1 -1
  255. package/dist/test/apple/xcode-manager.test.js +230 -234
  256. package/dist/test/apple/xcode-manager.test.js.map +1 -1
  257. package/dist/test/flutter/code-tools.test.js +119 -48
  258. package/dist/test/flutter/code-tools.test.js.map +1 -1
  259. package/dist/test/flutter/templates.test.js +63 -20
  260. package/dist/test/flutter/templates.test.js.map +1 -1
  261. package/dist/test/nextjs/templates.test.js +332 -43
  262. package/dist/test/nextjs/templates.test.js.map +1 -1
  263. package/dist/test/nuxt/templates.test.js +161 -33
  264. package/dist/test/nuxt/templates.test.js.map +1 -1
  265. package/dist/test/react-native/expo-metro.test.js +61 -15
  266. package/dist/test/react-native/expo-metro.test.js.map +1 -1
  267. package/dist/test/react-native/expo.test.js +37 -17
  268. package/dist/test/react-native/expo.test.js.map +1 -1
  269. package/dist/test/react-native/gradle.test.js +260 -28
  270. package/dist/test/react-native/gradle.test.js.map +1 -1
  271. package/dist/test/react-native/javascript.test.js +85 -19
  272. package/dist/test/react-native/javascript.test.js.map +1 -1
  273. package/dist/test/react-native/metro.test.js +261 -187
  274. package/dist/test/react-native/metro.test.js.map +1 -1
  275. package/dist/test/react-native/xcode.test.js +243 -62
  276. package/dist/test/react-native/xcode.test.js.map +1 -1
  277. package/dist/test/remix/client-entry.test.js +81 -21
  278. package/dist/test/remix/client-entry.test.js.map +1 -1
  279. package/dist/test/remix/server-instrumentation.test.js +21 -8
  280. package/dist/test/remix/server-instrumentation.test.js.map +1 -1
  281. package/dist/test/sourcemaps/tools/sentry-cli.test.js +20 -72
  282. package/dist/test/sourcemaps/tools/sentry-cli.test.js.map +1 -1
  283. package/dist/test/sourcemaps/tools/tsc.test.js +142 -68
  284. package/dist/test/sourcemaps/tools/tsc.test.js.map +1 -1
  285. package/dist/test/sourcemaps/tools/vite.test.js +106 -75
  286. package/dist/test/sourcemaps/tools/vite.test.js.map +1 -1
  287. package/dist/test/sourcemaps/tools/webpack.test.js +226 -102
  288. package/dist/test/sourcemaps/tools/webpack.test.js.map +1 -1
  289. package/dist/test/sveltekit/templates.test.js +117 -18
  290. package/dist/test/sveltekit/templates.test.js.map +1 -1
  291. package/dist/test/utils/ast-utils.test.js +99 -58
  292. package/dist/test/utils/ast-utils.test.js.map +1 -1
  293. package/dist/test/utils/clack-utils.test.js +142 -247
  294. package/dist/test/utils/clack-utils.test.js.map +1 -1
  295. package/e2e-tests/package.json +1 -1
  296. package/e2e-tests/tests/flutter.test.ts +20 -20
  297. package/e2e-tests/tests/nextjs.test.ts +2 -2
  298. package/e2e-tests/tests/nuxt-3.test.ts +4 -4
  299. package/e2e-tests/tests/nuxt-4.test.ts +3 -3
  300. package/e2e-tests/tests/remix.test.ts +3 -3
  301. package/e2e-tests/tests/sveltekit.test.ts +3 -3
  302. package/e2e-tests/utils/index.ts +33 -15
  303. package/lib/Helper/BottomBar.ts +1 -1
  304. package/lib/Helper/Env.ts +1 -1
  305. package/lib/Helper/Package.ts +12 -10
  306. package/lib/Helper/SentryCli.ts +18 -27
  307. package/lib/Helper/Wizard.ts +1 -2
  308. package/lib/Setup.ts +4 -5
  309. package/lib/Steps/ChooseIntegration.ts +40 -8
  310. package/lib/Steps/Initial.ts +17 -26
  311. package/lib/Steps/Integrations/BaseIntegration.ts +2 -8
  312. package/lib/Steps/Integrations/Cordova.ts +9 -15
  313. package/lib/Steps/Integrations/Electron.ts +23 -20
  314. package/lib/Steps/Integrations/MobileProject.ts +18 -15
  315. package/lib/Steps/OpenSentry.ts +12 -7
  316. package/lib/Steps/PromptForParameters.ts +12 -19
  317. package/lib/Steps/SentryProjectSelector.ts +30 -29
  318. package/lib/Steps/WaitForSentry.ts +29 -23
  319. package/package.json +12 -8
  320. package/src/apple/xcode-manager.ts +10 -10
  321. package/src/nextjs/templates.ts +2 -3
  322. package/src/nuxt/sdk-setup.ts +21 -18
  323. package/src/react-native/expo-metro.ts +2 -2
  324. package/src/react-native/react-native-wizard.ts +1 -2
  325. package/src/react-native/uninstall.ts +1 -2
  326. package/src/react-native/xcode.ts +1 -1
  327. package/src/run.ts +12 -5
  328. package/src/sourcemaps/tools/nextjs.ts +2 -2
  329. package/src/sourcemaps/tools/webpack.ts +3 -3
  330. package/src/telemetry.ts +27 -7
  331. package/src/utils/clack-utils.ts +50 -47
  332. package/test/apple/cocoapod.test.ts +4 -0
  333. package/test/apple/fastfile.test.ts +12 -7
  334. package/test/apple/xcode-manager.test.ts +13 -11
  335. package/test/utils/clack-utils.test.ts +40 -50
  336. package/types/read-env.d.ts +3 -0
  337. package/types/xcode.d.ts +1 -0
  338. package/dist/package.json +0 -128
@@ -1 +1 @@
1
- {"version":3,"file":"xcode-manager.js","sourceRoot":"","sources":["../../../src/apple/xcode-manager.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,8BAA8B;AAC9B,+DAA+D;AAC/D,4DAA4D;AAC5D,sDAAsD;AACtD,yEAAyE;AACzE,2DAAmC;AACnC,qCAAyB;AACzB,yCAA6B;AAE7B,qDAAyC;AAEzC,+BASe;AAOf,SAAS,mCAAmC,CAC1C,IAAa,EACb,UAAkB;;IAElB,IAAM,SAAS,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC;IAC5C,IAAI,CAAC,SAAS,CAAC,eAAe,EAAE;QAC9B,SAAS,CAAC,eAAe,GAAG,EAAE,CAAC;KAChC;IACD,IAAM,SAAS,GAAW,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,eAAe,CAAC,CAAC,MAAM,CACrE,UAAC,GAAG;;QACF,IAAM,KAAK,GAAG,MAAA,SAAS,CAAC,eAAe,0CAAG,GAAG,CAAC,CAAC;QAC/C,OAAO,CACL,CAAC,GAAG,CAAC,QAAQ,CAAC,UAAU,CAAC;YACzB,OAAO,KAAK,KAAK,QAAQ;YACzB,CAAA,KAAK,aAAL,KAAK,uBAAL,KAAK,CAAE,IAAI,MAAK,UAAU,CAC3B,CAAC;IACJ,CAAC,CACF,CAAC,CAAC,CAAC,CAAC;IACL,IAAM,MAAM,GAAG,SAAS,CAAC,eAAe,CAAC,SAAS,CAErC,CAAC;IAEd,IAAI,CAAC,SAAS,CAAC,oBAAoB,EAAE;QACnC,SAAS,CAAC,oBAAoB,GAAG,EAAE,CAAC;KACrC;IACD,IAAI,CAAC,SAAS,CAAC,mBAAmB,EAAE;QAClC,SAAS,CAAC,mBAAmB,GAAG,EAAE,CAAC;KACpC;IACD,IAAM,wBAAwB,GAAG,MAAA,MAAM,aAAN,MAAM,uBAAN,MAAM,CAAE,sBAAsB,mCAAI,EAAE,CAAC;IACtE,IAAM,iBAAiB,GAAG,MAAA,SAAS,CAAC,mBAAmB,0CACrD,wBAAwB,CACU,CAAC;IACrC,IAAM,yBAAyB,GAC7B,MAAA,iBAAiB,aAAjB,iBAAiB,uBAAjB,iBAAiB,CAAE,mBAAmB,mCAAI,EAAE,CAAC;IAC/C,KAAgC,UAAyB,EAAzB,uDAAyB,EAAzB,uCAAyB,EAAzB,IAAyB,EAAE;QAAtD,IAAM,iBAAiB,kCAAA;QAC1B,IAAM,MAAM,GACV,MAAA,SAAS,CAAC,oBAAoB,CAAC,iBAAiB,CAAC,KAAK,CAAC,mCAAI,EAAE,CAAC;QAChE,IAAI,OAAO,MAAM,KAAK,QAAQ,EAAE;YAC9B,kBAAkB;YAClB,SAAS;SACV;QAED,IAAM,aAAa,GAAG,MAAA,MAAM,CAAC,aAAa,mCAAI,EAAE,CAAC;QACjD,aAAa,CAAC,wBAAwB,GAAG,mBAAmB,CAAC;QAC7D,aAAa,CAAC,6BAA6B,GAAG,MAAM,CAAC;QAErD,MAAM,CAAC,aAAa,GAAG,aAAa,CAAC;QACrC,SAAS,CAAC,oBAAoB,CAAC,iBAAiB,CAAC,KAAK,CAAC,GAAG,MAAM,CAAC;KAClE;AACH,CAAC;AAED,SAAS,YAAY,CAAC,IAAa,EAAE,UAAkB;;IACrD,IAAM,SAAS,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC;IAE5C,IAAM,mBAAmB,GAAG,IAAI,CAAC,YAAY,EAAE,CAAC;IAChD,IAAM,aAAa,GAAG,IAAI,CAAC,YAAY,EAAE,CAAC;IAE1C,wDAAwD;IACxD,IAAI,SAAS,CAAC,uBAAuB,EAAE;QACrC,KAAK,IAAM,GAAG,IAAI,SAAS,CAAC,uBAAuB,IAAI,EAAE,EAAE;YACzD,IAAM,mBAAmB,GAAG,SAAS,CAAC,uBAAuB,CAAC,GAAG,CAAC,CAAC;YACnE,IAAI,GAAG,CAAC,QAAQ,CAAC,UAAU,CAAC,IAAI,OAAO,mBAAmB,KAAK,QAAQ,EAAE;gBACvE,kBAAkB;gBAClB,SAAS;aACV;YACD,KAAwB,UAA+B,EAA/B,WAAA,mBAAmB,CAAC,KAAK,mCAAI,EAAE,EAA/B,cAA+B,EAA/B,IAA+B,EAAE;gBAApD,IAAM,SAAS,SAAA;gBAClB,0EAA0E;gBAC1E,iDAAiD;gBACjD,IAAI,SAAS,CAAC,OAAO,KAAK,sBAAsB,EAAE;oBAChD,OAAO;iBACR;aACF;SACF;KACF;IAED,IAAI,CAAC,SAAS,CAAC,YAAY,EAAE;QAC3B,SAAS,CAAC,YAAY,GAAG,EAAE,CAAC;KAC7B;IACD,SAAS,CAAC,YAAY,CAAC,mBAAmB,CAAC,GAAG;QAC5C,GAAG,EAAE,cAAc;QACnB,UAAU,EAAE,aAAa;QACzB,kBAAkB,EAAE,QAAQ;KAC7B,CAAC;IACF,SAAS,CAAC,YAAY,CAAC,UAAG,mBAAmB,aAAU,CAAC;QACtD,sBAAsB,CAAC;IAEzB,IAAI,CAAC,SAAS,CAAC,uBAAuB,EAAE;QACtC,SAAS,CAAC,uBAAuB,GAAG,EAAE,CAAC;KACxC;IACD,KAAK,IAAM,GAAG,IAAI,SAAS,CAAC,uBAAuB,EAAE;QACnD,IAAM,KAAK,GAAG,SAAS,CAAC,uBAAuB,CAAC,GAAG,CAAC,CAAC;QACrD,IAAI,GAAG,CAAC,QAAQ,CAAC,UAAU,CAAC,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE;YACzD,kBAAkB;YAClB,SAAS;SACV;QAED,IAAM,UAAU,GAAG,MAAA,KAAK,CAAC,KAAK,mCAAI,EAAE,CAAC;QACrC,UAAU,CAAC,IAAI,CAAC;YACd,KAAK,EAAE,mBAAmB;YAC1B,OAAO,EAAE,sBAAsB;SAChC,CAAC,CAAC;QACH,KAAK,CAAC,KAAK,GAAG,UAAU,CAAC;QAEzB,SAAS,CAAC,uBAAuB,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC;KAChD;IAED,IAAI,CAAC,SAAS,CAAC,eAAe,EAAE;QAC9B,SAAS,CAAC,eAAe,GAAG,EAAE,CAAC;KAChC;IACD,IAAM,SAAS,GAAG,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,eAAe,IAAI,EAAE,CAAC,CAAC,MAAM,CACnE,UAAC,GAAG;;QACF,IAAM,KAAK,GAAG,MAAA,SAAS,CAAC,eAAe,0CAAG,GAAG,CAAC,CAAC;QAC/C,OAAO,CACL,CAAC,GAAG,CAAC,QAAQ,CAAC,UAAU,CAAC;YACzB,OAAO,KAAK,KAAK,QAAQ;YACzB,CAAA,KAAK,aAAL,KAAK,uBAAL,KAAK,CAAE,IAAI,MAAK,UAAU,CAC3B,CAAC;IACJ,CAAC,CACF,CAAC,CAAC,CAAC,CAAC;IACL,IAAM,MAAM,GAAG,SAAS,CAAC,eAAe,CAAC,SAAS,CAAoB,CAAC;IAEvE,IAAI,CAAC,MAAM,CAAC,0BAA0B,EAAE;QACtC,MAAM,CAAC,0BAA0B,GAAG,EAAE,CAAC;KACxC;IACD,MAAM,CAAC,0BAA0B,CAAC,IAAI,CAAC;QACrC,KAAK,EAAE,aAAa;QACpB,OAAO,EAAE,QAAQ;KAClB,CAAC,CAAC;IAEH,IAAM,sBAAsB,GAAG,IAAI,CAAC,YAAY,EAAE,CAAC;IACnD,IAAM,SAAS,GAAG,IAAI,CAAC,eAAe,EAAE,CAAC,YAAY,CAAC;IACtD,IAAI,CAAC,SAAS,CAAC,iBAAiB,EAAE;QAChC,SAAS,CAAC,iBAAiB,GAAG,EAAE,CAAC;KAClC;IACD,SAAS,CAAC,iBAAiB,CAAC,IAAI,CAAC;QAC/B,KAAK,EAAE,sBAAsB;QAC7B,OAAO,EAAE,8CAA8C;KACxD,CAAC,CAAC;IAEH,IAAI,CAAC,SAAS,CAAC,6BAA6B,EAAE;QAC5C,SAAS,CAAC,6BAA6B,GAAG,EAAE,CAAC;KAC9C;IAED,SAAS,CAAC,6BAA6B,CAAC,sBAAsB,CAAC,GAAG;QAChE,GAAG,EAAE,+BAA+B;QACpC,aAAa,EAAE,8CAA8C;QAC7D,WAAW,EAAE;YACX,IAAI,EAAE,sBAAsB;YAC5B,cAAc,EAAE,OAAO;SACxB;KACF,CAAC;IACF,SAAS,CAAC,6BAA6B,CAAC,UAAG,sBAAsB,aAAU,CAAC;QAC1E,8CAA8C,CAAC;IAEjD,IAAI,CAAC,SAAS,CAAC,+BAA+B,EAAE;QAC9C,SAAS,CAAC,+BAA+B,GAAG,EAAE,CAAC;KAChD;IACD,SAAS,CAAC,+BAA+B,CAAC,aAAa,CAAC,GAAG;QACzD,GAAG,EAAE,iCAAiC;QACtC,OAAO,EAAE,sBAAsB;QAC/B,eAAe,EAAE,8CAA8C;QAC/D,WAAW,EAAE,QAAQ;KACtB,CAAC;IACF,SAAS,CAAC,+BAA+B,CAAC,UAAG,aAAa,aAAU,CAAC;QACnE,QAAQ,CAAC;IAEX,iBAAK,CAAC,GAAG,CAAC,IAAI,CAAC,6CAA6C,CAAC,CAAC;AAChE,CAAC;AAED,SAAS,sBAAsB,CAC7B,YAAqB,EACrB,aAAgC,EAChC,UAAkB,EAClB,YAAqB;;IAErB,IAAM,SAAS,GAAG,YAAY,CAAC,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC;IACpD,IAAI,CAAC,SAAS,CAAC,eAAe,EAAE;QAC9B,SAAS,CAAC,eAAe,GAAG,EAAE,CAAC;KAChC;IACD,IAAM,SAAS,GAAG,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,eAAe,CAAC,CAAC,MAAM,CAAC,UAAC,GAAG;;QAClE,IAAM,KAAK,GAAG,MAAA,SAAS,CAAC,eAAe,0CAAG,GAAG,CAAC,CAAC;QAC/C,OAAO,CACL,CAAC,GAAG,CAAC,QAAQ,CAAC,UAAU,CAAC;YACzB,OAAO,KAAK,KAAK,QAAQ;YACzB,CAAA,KAAK,aAAL,KAAK,uBAAL,KAAK,CAAE,IAAI,MAAK,UAAU,CAC3B,CAAC;IACJ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IAEN,IAAI,CAAC,SAAS,CAAC,wBAAwB,EAAE;QACvC,SAAS,CAAC,wBAAwB,GAAG,EAAE,CAAC;KACzC;IACD,KAAK,IAAM,GAAG,IAAI,SAAS,CAAC,wBAAwB,EAAE;QACpD,IAAM,KAAK,GAAG,MAAA,SAAS,CAAC,wBAAwB,CAAC,GAAG,CAAC,mCAAI,EAAE,CAAC;QAC5D,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE;YAC7B,kBAAkB;YAClB,SAAS;SACV;QAED,0CAA0C;QAC1C,IAAI,MAAA,KAAK,CAAC,WAAW,0CAAE,QAAQ,CAAC,YAAY,CAAC,EAAE;YACtC,MAAA,SAAS,CAAC,wBAAwB,+CAAG,GAAG,CAAC,CAAC;YAC1C,MAAA,SAAS,CAAC,wBAAwB,+CAAG,UAAG,GAAG,aAAU,CAAC,CAAC;YAC9D,MAAM;SACP;QACD,SAAS,CAAC,wBAAwB,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC;KACjD;IAED,IAAM,mBAAmB,GAAG,EAAE,CAAC,UAAU,CAAC,8BAA8B,CAAC,CAAC;IAC1E,YAAY,CAAC,aAAa,CACxB,EAAE,EACF,0BAA0B,EAC1B,gCAAgC,EAChC,SAAS,EACT;QACE,kBAAkB,EAAE,EAAE;QACtB,mBAAmB,EAAE,EAAE;QACvB,UAAU,EAAE,CAAC,SAAS,CAAC,eAAe,CAAC;QACvC,SAAS,EAAE,SAAS;QACpB,WAAW,EAAE,SAAS,CAAC,oBAAoB,CACzC,aAAa,CAAC,YAAY,CAAC,IAAI,EAC/B,aAAa,CAAC,IAAI,EAClB,YAAY,EACZ,mBAAmB,CACpB;KACF,CACF,CAAC;IACF,iBAAK,CAAC,GAAG,CAAC,IAAI,CAAC,0CAAkC,UAAU,mBAAe,CAAC,CAAC;AAC9E,CAAC;AAED;IAME;;;;OAIG;IACH,sBAAmB,WAAmB;QACpC,IAAI,CAAC,WAAW,GAAG,WAAW,CAAC;QAC/B,IAAI,CAAC,OAAO,GAAG,IAAA,eAAkB,EAAC,WAAW,CAAC,CAAC;QAC/C,IAAI,CAAC,OAAO,CAAC,SAAS,EAAE,CAAC;QACzB,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC;IACnD,CAAC;IAEM,oCAAa,GAApB;;QACE,IAAM,OAAO,GAAG,MAAA,IAAI,CAAC,OAAO,CAAC,eAAe,mCAAI,EAAE,CAAC;QACnD,OAAO,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC;aACxB,MAAM,CAAC,UAAC,GAAG;YACV,IAAM,KAAK,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC;YAC3B,OAAO,CACL,CAAC,GAAG,CAAC,QAAQ,CAAC,UAAU,CAAC;gBACzB,OAAO,KAAK,KAAK,QAAQ;gBACzB,KAAK,CAAC,WAAW,CAAC,UAAU,CAAC,qCAAqC,CAAC,CACpE,CAAC;QACJ,CAAC,CAAC;aACD,GAAG,CAAC,UAAC,GAAG;YACP,OAAQ,OAAO,CAAC,GAAG,CAAqB,CAAC,IAAI,CAAC;QAChD,CAAC,CAAC,CAAC;IACP,CAAC;IAEM,yCAAkB,GAAzB,UACE,aAAgC,EAChC,MAAc,EACd,eAAwB,EACxB,YAAmB;QAAnB,6BAAA,EAAA,mBAAmB;QAEnB,sBAAsB,CAAC,IAAI,CAAC,OAAO,EAAE,aAAa,EAAE,MAAM,EAAE,YAAY,CAAC,CAAC;QAC1E,IAAI,YAAY,EAAE;YAChB,mCAAmC,CAAC,IAAI,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;SAC3D;QACD,IAAI,eAAe,EAAE;YACnB,YAAY,CAAC,IAAI,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;SACpC;QACD,IAAM,UAAU,GAAG,IAAI,CAAC,OAAO,CAAC,SAAS,EAAE,CAAC;QAC5C,EAAE,CAAC,aAAa,CAAC,IAAI,CAAC,WAAW,EAAE,UAAU,CAAC,CAAC;IACjD,CAAC;IAEM,qCAAc,GAArB,UAAsB,MAAc;QAApC,iBAqDC;;QApDC,IAAM,KAAK,GAAG,IAAI,CAAC,YAAY,EAAE,CAAC;QAClC,IAAM,cAAc,GAA2B,EAAE,CAAC;QAClD,KAAK,CAAC,OAAO,CAAC,UAAC,IAAI;YACjB,cAAc,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,IAAI,CAAC;QACvC,CAAC,CAAC,CAAC;QAEH,IAAM,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,eAAe,IAAI,EAAE,CAAC;QACnD,IAAM,YAAY,GAAG,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,MAAM,CAAC,UAAC,GAAG;YACnD,IAAM,KAAK,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC;YAC3B,OAAO,CACL,CAAC,GAAG,CAAC,QAAQ,CAAC,UAAU,CAAC;gBACzB,OAAO,KAAK,KAAK,QAAQ;gBACzB,KAAK,CAAC,IAAI,KAAK,MAAM,CACtB,CAAC;QACJ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QAEN,IAAI,YAAY,KAAK,SAAS,EAAE;YAC9B,OAAO,SAAS,CAAC;SAClB;QAED,IAAM,aAAa,GAAG,MACpB,OAAO,CAAC,YAAY,CACrB,CAAC,WAAW,0CAAE,MAAM,CAAC,UAAC,KAAK;;YAC1B,OAAO,CAAA,MAAA,KAAI,CAAC,OAAO,CAAC,oBAAoB,0CAAG,KAAK,CAAC,KAAK,CAAC,MAAK,SAAS,CAAC;QACxE,CAAC,EAAE,CAAC,CAAC,CAAC;QAEN,IAAI,aAAa,KAAK,SAAS,EAAE;YAC/B,OAAO,SAAS,CAAC;SAClB;QAED,IAAM,UAAU,GAAG,MAAA,IAAI,CAAC,OAAO,CAAC,oBAAoB,0CAClD,aAAa,CAAC,KAAK,CACI,CAAC;QAC1B,IAAM,eAAe,GAAG,MAAA,UAAU,aAAV,UAAU,uBAAV,UAAU,CAAE,KAAK,mCAAI,EAAE,CAAC;QAEhD,IAAM,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC;QAE7D,OAAO,eAAe;aACnB,GAAG,CAAC,UAAC,IAAI;;YACR,IAAM,OAAO,GAAG,MACd,MAAA,KAAI,CAAC,OAAO,CAAC,YAAY,0CAAG,IAAI,CAAC,KAAK,CACvC,0CAAE,OAAO,CAAC;YACX,IAAI,CAAC,OAAO,EAAE;gBACZ,OAAO,EAAE,CAAC;aACX;YACD,IAAM,SAAS,GAAG,cAAc,CAAC,OAAO,CAAC,CAAC;YAC1C,IAAI,CAAC,SAAS,EAAE;gBACd,OAAO,EAAE,CAAC;aACX;YACD,OAAO,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,SAAS,CAAC,CAAC;QACvC,CAAC,CAAC;aACD,MAAM,CAAC,UAAC,CAAS,IAAK,OAAA,CAAC,CAAC,MAAM,GAAG,CAAC,EAAZ,CAAY,CAAC,CAAC;IACzC,CAAC;IAED,mCAAY,GAAZ;;QACE,IAAI,IAAI,CAAC,KAAK,KAAK,SAAS,EAAE;YAC5B,IAAM,IAAI,GAAG,IAAI,CAAC,OAAO,CAAC,eAAe,EAAE,CAAC;YAC5C,IAAM,YAAY,GAAG,IAAI,CAAC,YAAY,CAAC,SAAS,CAAC;YACjD,IAAM,SAAS,GAAG,MAAA,IAAI,CAAC,OAAO,CAAC,QAAQ,0CAAG,YAAY,CAAC,CAAC;YACxD,IAAI,CAAC,SAAS,IAAI,OAAO,SAAS,KAAK,QAAQ,EAAE;gBAC/C,OAAO,EAAE,CAAC;aACX;YACD,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,UAAU,CAAC,SAAS,CAAC,CAAC;SACzC;QACD,OAAO,IAAI,CAAC,KAAK,CAAC;IACpB,CAAC;IAED,iCAAU,GAAV,UAAW,KAAe,EAAE,IAAS;;QAAT,qBAAA,EAAA,SAAS;QACnC,IAAM,MAAM,GAAkB,EAAE,CAAC;QACjC,KAAoB,UAAoB,EAApB,WAAA,KAAK,CAAC,QAAQ,mCAAI,EAAE,EAApB,cAAoB,EAApB,IAAoB,EAAE;YAArC,IAAM,KAAK,SAAA;YACd,IAAM,aAAa,GAAG,MAAA,IAAI,CAAC,OAAO,CAAC,gBAAgB,0CAAG,KAAK,CAAC,KAAK,CAAC,CAAC;YACnE,IAAM,cAAc,GAAG,MAAA,IAAI,CAAC,OAAO,CAAC,QAAQ,0CAAG,KAAK,CAAC,KAAK,CAAC,CAAC;YAC5D,IAAI,aAAa,EAAE;gBACjB,IAAI,OAAO,aAAa,KAAK,QAAQ,EAAE;oBACrC,SAAS;iBACV;gBACD,MAAM,CAAC,IAAI,CAAC;oBACV,GAAG,EAAE,KAAK,CAAC,KAAK;oBAChB,IAAI,EAAE,UAAG,IAAI,SAAG,aAAa,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,EAAE,CAAC,CAAE;iBACvD,CAAC,CAAC;aACJ;iBAAM,IAAI,cAAc,EAAE;gBACzB,IAAI,OAAO,cAAc,KAAK,QAAQ,EAAE;oBACtC,SAAS;iBACV;gBACD,IAAM,aAAa,GAAG,IAAI,CAAC,UAAU,CACnC,cAAc,EACd,cAAc,CAAC,IAAI;oBACjB,CAAC,CAAC,UAAG,IAAI,SAAG,cAAc,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,EAAE,CAAC,MAAG;oBACpD,CAAC,CAAC,IAAI,CACT,CAAC;gBACF,MAAM,CAAC,IAAI,OAAX,MAAM,EAAS,aAAa,EAAE;aAC/B;SACF;QACD,OAAO,MAAM,CAAC;IAChB,CAAC;IACH,mBAAC;AAAD,CAAC,AAnJD,IAmJC;AAnJY,oCAAY","sourcesContent":["/* eslint-disable max-lines */\n/* eslint-disable @typescript-eslint/no-unsafe-member-access */\n/* eslint-disable @typescript-eslint/no-unsafe-assignment */\n/* eslint-disable @typescript-eslint/no-unsafe-call */\n// @ts-ignore - clack is ESM and TS complains about that. It works though\nimport clack from '@clack/prompts';\nimport * as fs from 'fs';\nimport * as path from 'path';\nimport { SentryProjectData } from '../utils/types';\nimport * as templates from './templates';\n\nimport {\n project as createXcodeProject,\n PBXBuildFile,\n PBXGroup,\n PBXNativeTarget,\n PBXObjects,\n PBXSourcesBuildPhase,\n Project,\n XCConfigurationList,\n} from 'xcode';\n\ninterface ProjectFile {\n key: string;\n path: string;\n}\n\nfunction setDebugInformationFormatAndSandbox(\n proj: Project,\n targetName: string,\n): void {\n const xcObjects = proj.hash.project.objects;\n if (!xcObjects.PBXNativeTarget) {\n xcObjects.PBXNativeTarget = {};\n }\n const targetKey: string = Object.keys(xcObjects.PBXNativeTarget).filter(\n (key) => {\n const value = xcObjects.PBXNativeTarget?.[key];\n return (\n !key.endsWith('_comment') &&\n typeof value !== 'string' &&\n value?.name === targetName\n );\n },\n )[0];\n const target = xcObjects.PBXNativeTarget[targetKey] as\n | PBXNativeTarget\n | undefined;\n\n if (!xcObjects.XCBuildConfiguration) {\n xcObjects.XCBuildConfiguration = {};\n }\n if (!xcObjects.XCConfigurationList) {\n xcObjects.XCConfigurationList = {};\n }\n const buildConfigurationListId = target?.buildConfigurationList ?? '';\n const configurationList = xcObjects.XCConfigurationList?.[\n buildConfigurationListId\n ] as XCConfigurationList | undefined;\n const buildListConfigurationIds =\n configurationList?.buildConfigurations ?? [];\n for (const buildListConfigId of buildListConfigurationIds) {\n const config =\n xcObjects.XCBuildConfiguration[buildListConfigId.value] ?? {};\n if (typeof config === 'string') {\n // Ignore comments\n continue;\n }\n\n const buildSettings = config.buildSettings ?? {};\n buildSettings.DEBUG_INFORMATION_FORMAT = '\"dwarf-with-dsym\"';\n buildSettings.ENABLE_USER_SCRIPT_SANDBOXING = '\"NO\"';\n\n config.buildSettings = buildSettings;\n xcObjects.XCBuildConfiguration[buildListConfigId.value] = config;\n }\n}\n\nfunction addSentrySPM(proj: Project, targetName: string): void {\n const xcObjects = proj.hash.project.objects;\n\n const sentryFrameworkUUID = proj.generateUuid();\n const sentrySPMUUID = proj.generateUuid();\n\n // Check whether xcObjects already have sentry framework\n if (xcObjects.PBXFrameworksBuildPhase) {\n for (const key in xcObjects.PBXFrameworksBuildPhase || {}) {\n const frameworkBuildPhase = xcObjects.PBXFrameworksBuildPhase[key];\n if (key.endsWith('_comment') || typeof frameworkBuildPhase === 'string') {\n // Ignore comments\n continue;\n }\n for (const framework of frameworkBuildPhase.files ?? []) {\n // We identify the Sentry framework by the comment \"Sentry in Frameworks\",\n // which is set by this manager in previous runs.\n if (framework.comment === 'Sentry in Frameworks') {\n return;\n }\n }\n }\n }\n\n if (!xcObjects.PBXBuildFile) {\n xcObjects.PBXBuildFile = {};\n }\n xcObjects.PBXBuildFile[sentryFrameworkUUID] = {\n isa: 'PBXBuildFile',\n productRef: sentrySPMUUID,\n productRef_comment: 'Sentry',\n };\n xcObjects.PBXBuildFile[`${sentryFrameworkUUID}_comment`] =\n 'Sentry in Frameworks';\n\n if (!xcObjects.PBXFrameworksBuildPhase) {\n xcObjects.PBXFrameworksBuildPhase = {};\n }\n for (const key in xcObjects.PBXFrameworksBuildPhase) {\n const value = xcObjects.PBXFrameworksBuildPhase[key];\n if (key.endsWith('_comment') || typeof value === 'string') {\n // Ignore comments\n continue;\n }\n\n const frameworks = value.files ?? [];\n frameworks.push({\n value: sentryFrameworkUUID,\n comment: 'Sentry in Frameworks',\n });\n value.files = frameworks;\n\n xcObjects.PBXFrameworksBuildPhase[key] = value;\n }\n\n if (!xcObjects.PBXNativeTarget) {\n xcObjects.PBXNativeTarget = {};\n }\n const targetKey = Object.keys(xcObjects.PBXNativeTarget || {}).filter(\n (key) => {\n const value = xcObjects.PBXNativeTarget?.[key];\n return (\n !key.endsWith('_comment') &&\n typeof value !== 'string' &&\n value?.name === targetName\n );\n },\n )[0];\n const target = xcObjects.PBXNativeTarget[targetKey] as PBXNativeTarget;\n\n if (!target.packageProductDependencies) {\n target.packageProductDependencies = [];\n }\n target.packageProductDependencies.push({\n value: sentrySPMUUID,\n comment: 'Sentry',\n });\n\n const sentrySwiftPackageUUID = proj.generateUuid();\n const xcProject = proj.getFirstProject().firstProject;\n if (!xcProject.packageReferences) {\n xcProject.packageReferences = [];\n }\n xcProject.packageReferences.push({\n value: sentrySwiftPackageUUID,\n comment: 'XCRemoteSwiftPackageReference \"sentry-cocoa\"',\n });\n\n if (!xcObjects.XCRemoteSwiftPackageReference) {\n xcObjects.XCRemoteSwiftPackageReference = {};\n }\n\n xcObjects.XCRemoteSwiftPackageReference[sentrySwiftPackageUUID] = {\n isa: 'XCRemoteSwiftPackageReference',\n repositoryURL: '\"https://github.com/getsentry/sentry-cocoa/\"',\n requirement: {\n kind: 'upToNextMajorVersion',\n minimumVersion: '8.0.0',\n },\n };\n xcObjects.XCRemoteSwiftPackageReference[`${sentrySwiftPackageUUID}_comment`] =\n 'XCRemoteSwiftPackageReference \"sentry-cocoa\"';\n\n if (!xcObjects.XCSwiftPackageProductDependency) {\n xcObjects.XCSwiftPackageProductDependency = {};\n }\n xcObjects.XCSwiftPackageProductDependency[sentrySPMUUID] = {\n isa: 'XCSwiftPackageProductDependency',\n package: sentrySwiftPackageUUID,\n package_comment: 'XCRemoteSwiftPackageReference \"sentry-cocoa\"',\n productName: 'Sentry',\n };\n xcObjects.XCSwiftPackageProductDependency[`${sentrySPMUUID}_comment`] =\n 'Sentry';\n\n clack.log.step('Added Sentry SPM dependency to your project');\n}\n\nfunction addUploadSymbolsScript(\n xcodeProject: Project,\n sentryProject: SentryProjectData,\n targetName: string,\n uploadSource: boolean,\n): void {\n const xcObjects = xcodeProject.hash.project.objects;\n if (!xcObjects.PBXNativeTarget) {\n xcObjects.PBXNativeTarget = {};\n }\n const targetKey = Object.keys(xcObjects.PBXNativeTarget).filter((key) => {\n const value = xcObjects.PBXNativeTarget?.[key];\n return (\n !key.endsWith('_comment') &&\n typeof value !== 'string' &&\n value?.name === targetName\n );\n })[0];\n\n if (!xcObjects.PBXShellScriptBuildPhase) {\n xcObjects.PBXShellScriptBuildPhase = {};\n }\n for (const key in xcObjects.PBXShellScriptBuildPhase) {\n const value = xcObjects.PBXShellScriptBuildPhase[key] ?? {};\n if (typeof value === 'string') {\n // Ignore comments\n continue;\n }\n\n // Sentry script already exists, update it\n if (value.shellScript?.includes('sentry-cli')) {\n delete xcObjects.PBXShellScriptBuildPhase?.[key];\n delete xcObjects.PBXShellScriptBuildPhase?.[`${key}_comment`];\n break;\n }\n xcObjects.PBXShellScriptBuildPhase[key] = value;\n }\n\n const isHomebrewInstalled = fs.existsSync('/opt/homebrew/bin/sentry-cli');\n xcodeProject.addBuildPhase(\n [],\n 'PBXShellScriptBuildPhase',\n 'Upload Debug Symbols to Sentry',\n targetKey,\n {\n inputFileListPaths: [],\n outputFileListPaths: [],\n inputPaths: [templates.scriptInputPath],\n shellPath: '/bin/sh',\n shellScript: templates.getRunScriptTemplate(\n sentryProject.organization.slug,\n sentryProject.slug,\n uploadSource,\n isHomebrewInstalled,\n ),\n },\n );\n clack.log.step(`Added Sentry upload script to \"${targetName}\" build phase`);\n}\n\nexport class XcodeProject {\n projectPath: string;\n project: Project;\n objects: PBXObjects;\n files: ProjectFile[] | undefined;\n\n /**\n * Creates a new XcodeProject instance, a wrapper around the Xcode project file `<PROJECT>.xcodeproj/project.pbxproj`.\n *\n * @param projectPath - The path to the Xcode project file\n */\n public constructor(projectPath: string) {\n this.projectPath = projectPath;\n this.project = createXcodeProject(projectPath);\n this.project.parseSync();\n this.objects = this.project.hash.project.objects;\n }\n\n public getAllTargets(): string[] {\n const targets = this.objects.PBXNativeTarget ?? {};\n return Object.keys(targets)\n .filter((key) => {\n const value = targets[key];\n return (\n !key.endsWith('_comment') &&\n typeof value !== 'string' &&\n value.productType.startsWith('\"com.apple.product-type.application')\n );\n })\n .map((key) => {\n return (targets[key] as PBXNativeTarget).name;\n });\n }\n\n public updateXcodeProject(\n sentryProject: SentryProjectData,\n target: string,\n addSPMReference: boolean,\n uploadSource = true,\n ): void {\n addUploadSymbolsScript(this.project, sentryProject, target, uploadSource);\n if (uploadSource) {\n setDebugInformationFormatAndSandbox(this.project, target);\n }\n if (addSPMReference) {\n addSentrySPM(this.project, target);\n }\n const newContent = this.project.writeSync();\n fs.writeFileSync(this.projectPath, newContent);\n }\n\n public filesForTarget(target: string): string[] | undefined {\n const files = this.projectFiles();\n const fileDictionary: Record<string, string> = {};\n files.forEach((file) => {\n fileDictionary[file.key] = file.path;\n });\n\n const targets = this.objects.PBXNativeTarget || {};\n const nativeTarget = Object.keys(targets).filter((key) => {\n const value = targets[key];\n return (\n !key.endsWith('_comment') &&\n typeof value !== 'string' &&\n value.name === target\n );\n })[0];\n\n if (nativeTarget === undefined) {\n return undefined;\n }\n\n const buildPhaseKey = (\n targets[nativeTarget] as PBXNativeTarget\n ).buildPhases?.filter((phase) => {\n return this.objects.PBXSourcesBuildPhase?.[phase.value] !== undefined;\n })[0];\n\n if (buildPhaseKey === undefined) {\n return undefined;\n }\n\n const buildPhase = this.objects.PBXSourcesBuildPhase?.[\n buildPhaseKey.value\n ] as PBXSourcesBuildPhase;\n const buildPhaseFiles = buildPhase?.files ?? [];\n\n const baseDir = path.dirname(path.dirname(this.projectPath));\n\n return buildPhaseFiles\n .map((file) => {\n const fileRef = (\n this.objects.PBXBuildFile?.[file.value] as PBXBuildFile\n )?.fileRef;\n if (!fileRef) {\n return '';\n }\n const buildFile = fileDictionary[fileRef];\n if (!buildFile) {\n return '';\n }\n return path.join(baseDir, buildFile);\n })\n .filter((f: string) => f.length > 0);\n }\n\n projectFiles(): ProjectFile[] {\n if (this.files === undefined) {\n const proj = this.project.getFirstProject();\n const mainGroupKey = proj.firstProject.mainGroup;\n const mainGroup = this.objects.PBXGroup?.[mainGroupKey];\n if (!mainGroup || typeof mainGroup === 'string') {\n return [];\n }\n this.files = this.buildGroup(mainGroup);\n }\n return this.files;\n }\n\n buildGroup(group: PBXGroup, path = ''): ProjectFile[] {\n const result: ProjectFile[] = [];\n for (const child of group.children ?? []) {\n const fileReference = this.objects.PBXFileReference?.[child.value];\n const groupReference = this.objects.PBXGroup?.[child.value];\n if (fileReference) {\n if (typeof fileReference === 'string') {\n continue;\n }\n result.push({\n key: child.value,\n path: `${path}${fileReference.path.replace(/\"/g, '')}`,\n });\n } else if (groupReference) {\n if (typeof groupReference === 'string') {\n continue;\n }\n const groupChildren = this.buildGroup(\n groupReference,\n groupReference.path\n ? `${path}${groupReference.path.replace(/\"/g, '')}/`\n : path,\n );\n result.push(...groupChildren);\n }\n }\n return result;\n }\n}\n"]}
1
+ {"version":3,"file":"xcode-manager.js","sourceRoot":"","sources":["../../../src/apple/xcode-manager.ts"],"names":[],"mappings":"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","sourcesContent":["/* eslint-disable max-lines */\n/* eslint-disable @typescript-eslint/no-unsafe-member-access */\n/* eslint-disable @typescript-eslint/no-unsafe-assignment */\n/* eslint-disable @typescript-eslint/no-unsafe-call */\n// @ts-ignore - clack is ESM and TS complains about that. It works though\nimport clack from '@clack/prompts';\nimport * as fs from 'node:fs';\nimport * as path from 'node:path';\nimport type { SentryProjectData } from '../utils/types';\nimport * as templates from './templates';\n\nimport {\n project as createXcodeProject,\n type PBXBuildFile,\n type PBXGroup,\n type PBXNativeTarget,\n type PBXObjects,\n type PBXSourcesBuildPhase,\n type Project,\n type XCConfigurationList,\n} from 'xcode';\n\ninterface ProjectFile {\n key: string;\n path: string;\n}\n\nfunction setDebugInformationFormatAndSandbox(\n proj: Project,\n targetName: string,\n): void {\n const xcObjects = proj.hash.project.objects;\n if (!xcObjects.PBXNativeTarget) {\n xcObjects.PBXNativeTarget = {};\n }\n const targetKey: string = Object.keys(xcObjects.PBXNativeTarget).filter(\n (key) => {\n const value = xcObjects.PBXNativeTarget?.[key];\n return (\n !key.endsWith('_comment') &&\n typeof value !== 'string' &&\n value?.name === targetName\n );\n },\n )[0];\n const target = xcObjects.PBXNativeTarget[targetKey] as\n | PBXNativeTarget\n | undefined;\n\n if (!xcObjects.XCBuildConfiguration) {\n xcObjects.XCBuildConfiguration = {};\n }\n if (!xcObjects.XCConfigurationList) {\n xcObjects.XCConfigurationList = {};\n }\n const buildConfigurationListId = target?.buildConfigurationList ?? '';\n const configurationList = xcObjects.XCConfigurationList?.[\n buildConfigurationListId\n ] as XCConfigurationList | undefined;\n const buildListConfigurationIds =\n configurationList?.buildConfigurations ?? [];\n for (const buildListConfigId of buildListConfigurationIds) {\n const config =\n xcObjects.XCBuildConfiguration[buildListConfigId.value] ?? {};\n if (typeof config === 'string') {\n // Ignore comments\n continue;\n }\n\n const buildSettings = config.buildSettings ?? {};\n buildSettings.DEBUG_INFORMATION_FORMAT = '\"dwarf-with-dsym\"';\n buildSettings.ENABLE_USER_SCRIPT_SANDBOXING = '\"NO\"';\n\n config.buildSettings = buildSettings;\n xcObjects.XCBuildConfiguration[buildListConfigId.value] = config;\n }\n}\n\nfunction addSentrySPM(proj: Project, targetName: string): void {\n const xcObjects = proj.hash.project.objects;\n\n const sentryFrameworkUUID = proj.generateUuid();\n const sentrySPMUUID = proj.generateUuid();\n\n // Check whether xcObjects already have sentry framework\n if (xcObjects.PBXFrameworksBuildPhase) {\n for (const key in xcObjects.PBXFrameworksBuildPhase || {}) {\n const frameworkBuildPhase = xcObjects.PBXFrameworksBuildPhase[key];\n if (key.endsWith('_comment') || typeof frameworkBuildPhase === 'string') {\n // Ignore comments\n continue;\n }\n for (const framework of frameworkBuildPhase.files ?? []) {\n // We identify the Sentry framework by the comment \"Sentry in Frameworks\",\n // which is set by this manager in previous runs.\n if (framework.comment === 'Sentry in Frameworks') {\n return;\n }\n }\n }\n }\n\n if (!xcObjects.PBXBuildFile) {\n xcObjects.PBXBuildFile = {};\n }\n xcObjects.PBXBuildFile[sentryFrameworkUUID] = {\n isa: 'PBXBuildFile',\n productRef: sentrySPMUUID,\n productRef_comment: 'Sentry',\n };\n xcObjects.PBXBuildFile[`${sentryFrameworkUUID}_comment`] =\n 'Sentry in Frameworks';\n\n if (!xcObjects.PBXFrameworksBuildPhase) {\n xcObjects.PBXFrameworksBuildPhase = {};\n }\n for (const key in xcObjects.PBXFrameworksBuildPhase) {\n const value = xcObjects.PBXFrameworksBuildPhase[key];\n if (key.endsWith('_comment') || typeof value === 'string') {\n // Ignore comments\n continue;\n }\n\n const frameworks = value.files ?? [];\n frameworks.push({\n value: sentryFrameworkUUID,\n comment: 'Sentry in Frameworks',\n });\n value.files = frameworks;\n\n xcObjects.PBXFrameworksBuildPhase[key] = value;\n }\n\n if (!xcObjects.PBXNativeTarget) {\n xcObjects.PBXNativeTarget = {};\n }\n const targetKey = Object.keys(xcObjects.PBXNativeTarget || {}).filter(\n (key) => {\n const value = xcObjects.PBXNativeTarget?.[key];\n return (\n !key.endsWith('_comment') &&\n typeof value !== 'string' &&\n value?.name === targetName\n );\n },\n )[0];\n const target = xcObjects.PBXNativeTarget[targetKey] as PBXNativeTarget;\n\n if (!target.packageProductDependencies) {\n target.packageProductDependencies = [];\n }\n target.packageProductDependencies.push({\n value: sentrySPMUUID,\n comment: 'Sentry',\n });\n\n const sentrySwiftPackageUUID = proj.generateUuid();\n const xcProject = proj.getFirstProject().firstProject;\n if (!xcProject.packageReferences) {\n xcProject.packageReferences = [];\n }\n xcProject.packageReferences.push({\n value: sentrySwiftPackageUUID,\n comment: 'XCRemoteSwiftPackageReference \"sentry-cocoa\"',\n });\n\n if (!xcObjects.XCRemoteSwiftPackageReference) {\n xcObjects.XCRemoteSwiftPackageReference = {};\n }\n\n xcObjects.XCRemoteSwiftPackageReference[sentrySwiftPackageUUID] = {\n isa: 'XCRemoteSwiftPackageReference',\n repositoryURL: '\"https://github.com/getsentry/sentry-cocoa/\"',\n requirement: {\n kind: 'upToNextMajorVersion',\n minimumVersion: '8.0.0',\n },\n };\n xcObjects.XCRemoteSwiftPackageReference[`${sentrySwiftPackageUUID}_comment`] =\n 'XCRemoteSwiftPackageReference \"sentry-cocoa\"';\n\n if (!xcObjects.XCSwiftPackageProductDependency) {\n xcObjects.XCSwiftPackageProductDependency = {};\n }\n xcObjects.XCSwiftPackageProductDependency[sentrySPMUUID] = {\n isa: 'XCSwiftPackageProductDependency',\n package: sentrySwiftPackageUUID,\n package_comment: 'XCRemoteSwiftPackageReference \"sentry-cocoa\"',\n productName: 'Sentry',\n };\n xcObjects.XCSwiftPackageProductDependency[`${sentrySPMUUID}_comment`] =\n 'Sentry';\n\n clack.log.step('Added Sentry SPM dependency to your project');\n}\n\nfunction addUploadSymbolsScript(\n xcodeProject: Project,\n sentryProject: SentryProjectData,\n targetName: string,\n uploadSource: boolean,\n): void {\n const xcObjects = xcodeProject.hash.project.objects;\n if (!xcObjects.PBXNativeTarget) {\n xcObjects.PBXNativeTarget = {};\n }\n const targetKey = Object.keys(xcObjects.PBXNativeTarget).filter((key) => {\n const value = xcObjects.PBXNativeTarget?.[key];\n return (\n !key.endsWith('_comment') &&\n typeof value !== 'string' &&\n value?.name === targetName\n );\n })[0];\n\n if (!xcObjects.PBXShellScriptBuildPhase) {\n xcObjects.PBXShellScriptBuildPhase = {};\n }\n for (const key in xcObjects.PBXShellScriptBuildPhase) {\n const value = xcObjects.PBXShellScriptBuildPhase[key] ?? {};\n if (typeof value === 'string') {\n // Ignore comments\n continue;\n }\n\n // Sentry script already exists, update it\n if (value.shellScript?.includes('sentry-cli')) {\n delete xcObjects.PBXShellScriptBuildPhase?.[key];\n delete xcObjects.PBXShellScriptBuildPhase?.[`${key}_comment`];\n break;\n }\n xcObjects.PBXShellScriptBuildPhase[key] = value;\n }\n\n const isHomebrewInstalled = fs.existsSync('/opt/homebrew/bin/sentry-cli');\n xcodeProject.addBuildPhase(\n [],\n 'PBXShellScriptBuildPhase',\n 'Upload Debug Symbols to Sentry',\n targetKey,\n {\n inputFileListPaths: [],\n outputFileListPaths: [],\n inputPaths: [templates.scriptInputPath],\n shellPath: '/bin/sh',\n shellScript: templates.getRunScriptTemplate(\n sentryProject.organization.slug,\n sentryProject.slug,\n uploadSource,\n isHomebrewInstalled,\n ),\n },\n );\n clack.log.step(`Added Sentry upload script to \"${targetName}\" build phase`);\n}\n\nexport class XcodeProject {\n projectPath: string;\n project: Project;\n objects: PBXObjects;\n files: ProjectFile[] | undefined;\n\n /**\n * Creates a new XcodeProject instance, a wrapper around the Xcode project file `<PROJECT>.xcodeproj/project.pbxproj`.\n *\n * @param projectPath - The path to the Xcode project file\n */\n public constructor(projectPath: string) {\n this.projectPath = projectPath;\n this.project = createXcodeProject(projectPath);\n this.project.parseSync();\n this.objects = this.project.hash.project.objects;\n }\n\n public getAllTargets(): string[] {\n const targets = this.objects.PBXNativeTarget ?? {};\n return Object.keys(targets)\n .filter((key) => {\n const value = targets[key];\n return (\n !key.endsWith('_comment') &&\n typeof value !== 'string' &&\n value.productType.startsWith('\"com.apple.product-type.application')\n );\n })\n .map((key) => {\n return (targets[key] as PBXNativeTarget).name;\n });\n }\n\n public updateXcodeProject(\n sentryProject: SentryProjectData,\n target: string,\n addSPMReference: boolean,\n uploadSource = true,\n ): void {\n addUploadSymbolsScript(this.project, sentryProject, target, uploadSource);\n if (uploadSource) {\n setDebugInformationFormatAndSandbox(this.project, target);\n }\n if (addSPMReference) {\n addSentrySPM(this.project, target);\n }\n const newContent = this.project.writeSync();\n fs.writeFileSync(this.projectPath, newContent);\n }\n\n public filesForTarget(target: string): string[] | undefined {\n const files = this.projectFiles();\n const fileDictionary: Record<string, string> = {};\n files.forEach((file) => {\n fileDictionary[file.key] = file.path;\n });\n\n const targets = this.objects.PBXNativeTarget || {};\n const nativeTarget = Object.keys(targets).filter((key) => {\n const value = targets[key];\n return (\n !key.endsWith('_comment') &&\n typeof value !== 'string' &&\n value.name === target\n );\n })[0];\n\n if (nativeTarget === undefined) {\n return undefined;\n }\n\n const buildPhaseKey = (\n targets[nativeTarget] as PBXNativeTarget\n ).buildPhases?.filter((phase) => {\n return this.objects.PBXSourcesBuildPhase?.[phase.value] !== undefined;\n })[0];\n\n if (buildPhaseKey === undefined) {\n return undefined;\n }\n\n const buildPhase = this.objects.PBXSourcesBuildPhase?.[\n buildPhaseKey.value\n ] as PBXSourcesBuildPhase;\n const buildPhaseFiles = buildPhase?.files ?? [];\n\n const baseDir = path.dirname(path.dirname(this.projectPath));\n\n return buildPhaseFiles\n .map((file) => {\n const fileRef = (\n this.objects.PBXBuildFile?.[file.value] as PBXBuildFile\n )?.fileRef;\n if (!fileRef) {\n return '';\n }\n const buildFile = fileDictionary[fileRef];\n if (!buildFile) {\n return '';\n }\n return path.join(baseDir, buildFile);\n })\n .filter((f: string) => f.length > 0);\n }\n\n projectFiles(): ProjectFile[] {\n if (this.files === undefined) {\n const proj = this.project.getFirstProject();\n const mainGroupKey = proj.firstProject.mainGroup;\n const mainGroup = this.objects.PBXGroup?.[mainGroupKey];\n if (!mainGroup || typeof mainGroup === 'string') {\n return [];\n }\n this.files = this.buildGroup(mainGroup);\n }\n return this.files;\n }\n\n buildGroup(group: PBXGroup, path = ''): ProjectFile[] {\n const result: ProjectFile[] = [];\n for (const child of group.children ?? []) {\n const fileReference = this.objects.PBXFileReference?.[child.value];\n const groupReference = this.objects.PBXGroup?.[child.value];\n if (fileReference) {\n if (typeof fileReference === 'string') {\n continue;\n }\n result.push({\n key: child.value,\n path: `${path}${fileReference.path.replace(/\"/g, '')}`,\n });\n } else if (groupReference) {\n if (typeof groupReference === 'string') {\n continue;\n }\n const groupChildren = this.buildGroup(\n groupReference,\n groupReference.path\n ? `${path}${groupReference.path.replace(/\"/g, '')}/`\n : path,\n );\n result.push(...groupChildren);\n }\n }\n return result;\n }\n}\n"]}
@@ -22,55 +22,19 @@ var __importStar = (this && this.__importStar) || function (mod) {
22
22
  __setModuleDefault(result, mod);
23
23
  return result;
24
24
  };
25
- var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
26
- function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
27
- return new (P || (P = Promise))(function (resolve, reject) {
28
- function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
29
- function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
30
- function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
31
- step((generator = generator.apply(thisArg, _arguments || [])).next());
32
- });
33
- };
34
- var __generator = (this && this.__generator) || function (thisArg, body) {
35
- var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;
36
- return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
37
- function verb(n) { return function (v) { return step([n, v]); }; }
38
- function step(op) {
39
- if (f) throw new TypeError("Generator is already executing.");
40
- while (g && (g = 0, op[0] && (_ = 0)), _) try {
41
- if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;
42
- if (y = 0, t) op = [op[0] & 2, t.value];
43
- switch (op[0]) {
44
- case 0: case 1: t = op; break;
45
- case 4: _.label++; return { value: op[1], done: false };
46
- case 5: _.label++; y = op[1]; op = [0]; continue;
47
- case 7: op = _.ops.pop(); _.trys.pop(); continue;
48
- default:
49
- if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }
50
- if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }
51
- if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }
52
- if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }
53
- if (t[2]) _.ops.pop();
54
- _.trys.pop(); continue;
55
- }
56
- op = body.call(thisArg, _);
57
- } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }
58
- if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
59
- }
60
- };
61
25
  var __importDefault = (this && this.__importDefault) || function (mod) {
62
26
  return (mod && mod.__esModule) ? mod : { "default": mod };
63
27
  };
64
28
  Object.defineProperty(exports, "__esModule", { value: true });
65
29
  exports.getDevDependenciesLocation = exports.getDependenciesLocation = exports.getLastImportLineLocation = exports.patchMainContent = exports.patchMain = exports.addProperties = exports.patchPubspec = exports.findFile = void 0;
66
- var fs = __importStar(require("fs"));
67
- var path = __importStar(require("path"));
68
- var Sentry = __importStar(require("@sentry/node"));
30
+ const fs = __importStar(require("fs"));
31
+ const path = __importStar(require("path"));
32
+ const Sentry = __importStar(require("@sentry/node"));
69
33
  // @ts-ignore - clack is ESM and TS complains about that. It works though
70
- var clack = __importStar(require("@clack/prompts"));
71
- var chalk_1 = __importDefault(require("chalk"));
72
- var templates_1 = require("./templates");
73
- var clack_utils_1 = require("../utils/clack-utils");
34
+ const clack = __importStar(require("@clack/prompts"));
35
+ const chalk_1 = __importDefault(require("chalk"));
36
+ const templates_1 = require("./templates");
37
+ const clack_utils_1 = require("../utils/clack-utils");
74
38
  /**
75
39
  * Recursively finds a file per name in subfolders.
76
40
  * @param dir - The directory to start searching.
@@ -78,13 +42,12 @@ var clack_utils_1 = require("../utils/clack-utils");
78
42
  * @returns The path to the main.dart file or null if not found.
79
43
  */
80
44
  function findFile(dir, name) {
81
- var files = fs.readdirSync(dir);
82
- for (var _i = 0, files_1 = files; _i < files_1.length; _i++) {
83
- var file = files_1[_i];
84
- var fullPath = path.join(dir, file);
85
- var stats = fs.statSync(fullPath);
45
+ const files = fs.readdirSync(dir);
46
+ for (const file of files) {
47
+ const fullPath = path.join(dir, file);
48
+ const stats = fs.statSync(fullPath);
86
49
  if (stats.isDirectory()) {
87
- var result = findFile(fullPath, name);
50
+ const result = findFile(fullPath, name);
88
51
  if (result) {
89
52
  return result;
90
53
  }
@@ -101,42 +64,42 @@ function patchPubspec(pubspecFile, sentryDartFlutterVersion, sentryDartPluginVer
101
64
  if (!pubspecFile) {
102
65
  throw new Error('pubspec.yaml is not provided or invalid.');
103
66
  }
104
- var pubspecContent = fs.readFileSync(pubspecFile, 'utf8');
67
+ let pubspecContent = fs.readFileSync(pubspecFile, 'utf8');
105
68
  if (!pubspecContent.includes('sentry_flutter:')) {
106
- var dependenciesIndex = getDependenciesLocation(pubspecContent);
69
+ const dependenciesIndex = getDependenciesLocation(pubspecContent);
107
70
  pubspecContent =
108
71
  pubspecContent.slice(0, dependenciesIndex) +
109
- " sentry_flutter: ".concat(sentryDartFlutterVersion, "\n") +
72
+ ` sentry_flutter: ${sentryDartFlutterVersion}\n` +
110
73
  pubspecContent.slice(dependenciesIndex);
111
- clack.log.success(chalk_1.default.greenBright("".concat(chalk_1.default.bold('sentry_flutter'), " added to pubspec.yaml")));
74
+ clack.log.success(chalk_1.default.greenBright(`${chalk_1.default.bold('sentry_flutter')} added to pubspec.yaml`));
112
75
  }
113
76
  else {
114
- clack.log.success(chalk_1.default.greenBright("".concat(chalk_1.default.bold('sentry_flutter'), " is already included in pubspec.yaml")));
77
+ clack.log.success(chalk_1.default.greenBright(`${chalk_1.default.bold('sentry_flutter')} is already included in pubspec.yaml`));
115
78
  }
116
79
  if (!pubspecContent.includes('sentry_dart_plugin:')) {
117
- var devDependenciesIndex = getDevDependenciesLocation(pubspecContent);
80
+ const devDependenciesIndex = getDevDependenciesLocation(pubspecContent);
118
81
  pubspecContent =
119
82
  pubspecContent.slice(0, devDependenciesIndex) +
120
- " sentry_dart_plugin: ".concat(sentryDartPluginVersion, "\n") +
83
+ ` sentry_dart_plugin: ${sentryDartPluginVersion}\n` +
121
84
  pubspecContent.slice(devDependenciesIndex);
122
- clack.log.success(chalk_1.default.greenBright("".concat(chalk_1.default.bold('sentry_dart_plugin'), " added to pubspec.yaml")));
85
+ clack.log.success(chalk_1.default.greenBright(`${chalk_1.default.bold('sentry_dart_plugin')} added to pubspec.yaml`));
123
86
  }
124
87
  else {
125
- clack.log.success(chalk_1.default.greenBright("".concat(chalk_1.default.bold('sentry_dart_plugin'), " is already included in pubspec.yaml")));
88
+ clack.log.success(chalk_1.default.greenBright(`${chalk_1.default.bold('sentry_dart_plugin')} is already included in pubspec.yaml`));
126
89
  }
127
90
  if (!pubspecContent.includes('sentry:')) {
128
91
  pubspecContent += '\n';
129
92
  pubspecContent += (0, templates_1.pubspecOptions)(project, org);
130
- clack.log.success(chalk_1.default.greenBright("".concat(chalk_1.default.bold('sentry plugin configuration'), " added to pubspec.yaml")));
93
+ clack.log.success(chalk_1.default.greenBright(`${chalk_1.default.bold('sentry plugin configuration')} added to pubspec.yaml`));
131
94
  }
132
95
  else {
133
- clack.log.success(chalk_1.default.greenBright("".concat(chalk_1.default.bold('sentry plugin configuration'), " is already included in pubspec.yaml")));
96
+ clack.log.success(chalk_1.default.greenBright(`${chalk_1.default.bold('sentry plugin configuration')} is already included in pubspec.yaml`));
134
97
  }
135
98
  fs.writeFileSync(pubspecFile, pubspecContent, 'utf8');
136
99
  return true;
137
100
  }
138
101
  catch (error) {
139
- clack.log.warn("Failed to read/write ".concat(chalk_1.default.cyan('pubspec.yaml'), " file."));
102
+ clack.log.warn(`Failed to read/write ${chalk_1.default.cyan('pubspec.yaml')} file.`);
140
103
  Sentry.captureException(error);
141
104
  return false;
142
105
  }
@@ -147,113 +110,102 @@ function addProperties(pubspecFile, authToken) {
147
110
  if (!pubspecFile) {
148
111
  throw new Error('pubspec.yaml is not provided or invalid.');
149
112
  }
150
- var pubspecDir = path.dirname(pubspecFile);
151
- var sentryPropertiesFileName = 'sentry.properties';
152
- var sentryPropertiesFile = path.join(pubspecDir, sentryPropertiesFileName);
153
- var sentryPropertiesContent = (0, templates_1.sentryProperties)(authToken);
113
+ const pubspecDir = path.dirname(pubspecFile);
114
+ const sentryPropertiesFileName = 'sentry.properties';
115
+ const sentryPropertiesFile = path.join(pubspecDir, sentryPropertiesFileName);
116
+ const sentryPropertiesContent = (0, templates_1.sentryProperties)(authToken);
154
117
  fs.writeFileSync(sentryPropertiesFile, sentryPropertiesContent, 'utf8');
155
- var gitignoreFile = path.join(pubspecDir, '.gitignore');
118
+ const gitignoreFile = path.join(pubspecDir, '.gitignore');
156
119
  if (fs.existsSync(gitignoreFile)) {
157
- fs.appendFileSync(gitignoreFile, "\n".concat(sentryPropertiesFileName, "\n"));
120
+ fs.appendFileSync(gitignoreFile, `\n${sentryPropertiesFileName}\n`);
158
121
  }
159
122
  else {
160
- fs.writeFileSync(gitignoreFile, "".concat(sentryPropertiesFileName, "\n"), 'utf8');
123
+ fs.writeFileSync(gitignoreFile, `${sentryPropertiesFileName}\n`, 'utf8');
161
124
  }
162
125
  return true;
163
126
  }
164
127
  catch (error) {
165
- clack.log.warn("Failed to read/write ".concat(chalk_1.default.cyan('pubspec.yaml'), " file."));
128
+ clack.log.warn(`Failed to read/write ${chalk_1.default.cyan('pubspec.yaml')} file.`);
166
129
  Sentry.captureException(error);
167
130
  return false;
168
131
  }
169
132
  }
170
133
  exports.addProperties = addProperties;
171
- function patchMain(mainFile, dsn, canEnableProfiling) {
172
- var _a, _b;
173
- return __awaiter(this, void 0, void 0, function () {
174
- var mainContent, features, selectedFeatures, normalizedSelectedFeatures, error_1;
175
- return __generator(this, function (_c) {
176
- switch (_c.label) {
177
- case 0:
178
- _c.trys.push([0, 2, , 3]);
179
- if (!mainFile) {
180
- throw new Error('pubspec.yaml is not provided or invalid.');
181
- }
182
- mainContent = fs.readFileSync(mainFile, 'utf8');
183
- if (/import\s+['"]package[:]sentry_flutter\/sentry_flutter\.dart['"];?/i.test(mainContent)) {
184
- // sentry is already configured
185
- clack.log.success(chalk_1.default.greenBright("".concat(chalk_1.default.bold('main.dart'), " already has Sentry configured.")));
186
- return [2 /*return*/, true];
187
- }
188
- features = [
189
- {
190
- id: 'tracing',
191
- prompt: "Do you want to enable ".concat(chalk_1.default.bold('Tracing'), " to track the performance of your application?"),
192
- enabledHint: 'recommended',
193
- },
194
- ];
195
- if (canEnableProfiling) {
196
- features.push({
197
- id: 'profiling',
198
- prompt: "Do you want to enable ".concat(chalk_1.default.bold('Profiling'), " to analyze CPU usage and optimize performance-critical code on iOS & macOS?"),
199
- enabledHint: 'recommended, tracing must be enabled',
200
- });
201
- }
202
- return [4 /*yield*/, (0, clack_utils_1.featureSelectionPrompt)(features)];
203
- case 1:
204
- selectedFeatures = _c.sent();
205
- normalizedSelectedFeatures = {
206
- tracing: (_a = selectedFeatures.tracing) !== null && _a !== void 0 ? _a : false,
207
- profiling: (_b = selectedFeatures.profiling) !== null && _b !== void 0 ? _b : false,
208
- };
209
- mainContent = patchMainContent(dsn, mainContent, normalizedSelectedFeatures);
210
- fs.writeFileSync(mainFile, mainContent, 'utf8');
211
- clack.log.success(chalk_1.default.greenBright("Patched ".concat(chalk_1.default.bold('main.dart'), " with the Sentry setup and test error snippet.")));
212
- return [2 /*return*/, true];
213
- case 2:
214
- error_1 = _c.sent();
215
- clack.log.warn("Failed to read/write ".concat(chalk_1.default.cyan('main.dart'), " file."));
216
- Sentry.captureException(error_1);
217
- return [2 /*return*/, false];
218
- case 3: return [2 /*return*/];
219
- }
220
- });
221
- });
134
+ async function patchMain(mainFile, dsn, canEnableProfiling) {
135
+ try {
136
+ if (!mainFile) {
137
+ throw new Error('pubspec.yaml is not provided or invalid.');
138
+ }
139
+ let mainContent = fs.readFileSync(mainFile, 'utf8');
140
+ if (/import\s+['"]package[:]sentry_flutter\/sentry_flutter\.dart['"];?/i.test(mainContent)) {
141
+ // sentry is already configured
142
+ clack.log.success(chalk_1.default.greenBright(`${chalk_1.default.bold('main.dart')} already has Sentry configured.`));
143
+ return true;
144
+ }
145
+ const features = [
146
+ {
147
+ id: 'tracing',
148
+ prompt: `Do you want to enable ${chalk_1.default.bold('Tracing')} to track the performance of your application?`,
149
+ enabledHint: 'recommended',
150
+ },
151
+ ];
152
+ if (canEnableProfiling) {
153
+ features.push({
154
+ id: 'profiling',
155
+ prompt: `Do you want to enable ${chalk_1.default.bold('Profiling')} to analyze CPU usage and optimize performance-critical code on iOS & macOS?`,
156
+ enabledHint: 'recommended, tracing must be enabled',
157
+ });
158
+ }
159
+ const selectedFeatures = await (0, clack_utils_1.featureSelectionPrompt)(features);
160
+ const normalizedSelectedFeatures = {
161
+ tracing: selectedFeatures.tracing ?? false,
162
+ profiling: selectedFeatures.profiling ?? false,
163
+ };
164
+ mainContent = patchMainContent(dsn, mainContent, normalizedSelectedFeatures);
165
+ fs.writeFileSync(mainFile, mainContent, 'utf8');
166
+ clack.log.success(chalk_1.default.greenBright(`Patched ${chalk_1.default.bold('main.dart')} with the Sentry setup and test error snippet.`));
167
+ return true;
168
+ }
169
+ catch (error) {
170
+ clack.log.warn(`Failed to read/write ${chalk_1.default.cyan('main.dart')} file.`);
171
+ Sentry.captureException(error);
172
+ return false;
173
+ }
222
174
  }
223
175
  exports.patchMain = patchMain;
224
176
  function patchMainContent(dsn, mainContent, selectedFeatures) {
225
- var importIndex = getLastImportLineLocation(mainContent);
177
+ const importIndex = getLastImportLineLocation(mainContent);
226
178
  mainContent =
227
179
  mainContent.slice(0, importIndex) +
228
180
  templates_1.sentryImport +
229
181
  mainContent.slice(importIndex);
230
182
  // Find and replace `runApp(...)`
231
183
  mainContent = mainContent.replace(/runApp\(([\s\S]*?)\);/g, // Match the `runApp(...)` invocation
232
- function (_, runAppArgs) { return (0, templates_1.initSnippet)(dsn, selectedFeatures, runAppArgs); });
184
+ (_, runAppArgs) => (0, templates_1.initSnippet)(dsn, selectedFeatures, runAppArgs));
233
185
  // Make the `main` function async if it's not already
234
186
  mainContent = mainContent.replace(/void\s+main\(\)\s*\{/g, 'Future<void> main() async {');
235
187
  return mainContent;
236
188
  }
237
189
  exports.patchMainContent = patchMainContent;
238
190
  function getLastImportLineLocation(sourceCode) {
239
- var importRegex = /import\s+['"].*['"].*;/gim;
191
+ const importRegex = /import\s+['"].*['"].*;/gim;
240
192
  return getLastReqExpLocation(sourceCode, importRegex);
241
193
  }
242
194
  exports.getLastImportLineLocation = getLastImportLineLocation;
243
195
  function getDependenciesLocation(sourceCode) {
244
- var dependencyRegex = /^dependencies:\s*$/gim;
196
+ const dependencyRegex = /^dependencies:\s*$/gim;
245
197
  return getLastReqExpLocation(sourceCode, dependencyRegex);
246
198
  }
247
199
  exports.getDependenciesLocation = getDependenciesLocation;
248
200
  function getDevDependenciesLocation(sourceCode) {
249
- var dependencyRegex = /^dev_dependencies:\s*$/gim;
201
+ const dependencyRegex = /^dev_dependencies:\s*$/gim;
250
202
  return getLastReqExpLocation(sourceCode, dependencyRegex);
251
203
  }
252
204
  exports.getDevDependenciesLocation = getDevDependenciesLocation;
253
205
  // Helper
254
206
  function getLastReqExpLocation(sourceCode, regExp) {
255
- var match = regExp.exec(sourceCode);
256
- var importIndex = 0;
207
+ let match = regExp.exec(sourceCode);
208
+ let importIndex = 0;
257
209
  while (match) {
258
210
  importIndex = match.index + match[0].length + 1;
259
211
  match = regExp.exec(sourceCode);
@@ -1 +1 @@
1
- {"version":3,"file":"code-tools.js","sourceRoot":"","sources":["../../../src/flutter/code-tools.ts"],"names":[],"mappings":"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","sourcesContent":["import * as fs from 'fs';\nimport * as path from 'path';\nimport * as Sentry from '@sentry/node';\n// @ts-ignore - clack is ESM and TS complains about that. It works though\nimport * as clack from '@clack/prompts';\nimport chalk from 'chalk';\nimport {\n sentryImport,\n pubspecOptions,\n sentryProperties,\n initSnippet,\n} from './templates';\nimport { featureSelectionPrompt } from '../utils/clack-utils';\n\n/**\n * Recursively finds a file per name in subfolders.\n * @param dir - The directory to start searching.\n * @param name - The name of the file including path extension.\n * @returns The path to the main.dart file or null if not found.\n */\nexport function findFile(dir: string, name: string): string | null {\n const files: string[] = fs.readdirSync(dir);\n\n for (const file of files) {\n const fullPath: string = path.join(dir, file);\n const stats: fs.Stats = fs.statSync(fullPath);\n\n if (stats.isDirectory()) {\n const result: string | null = findFile(fullPath, name);\n if (result) {\n return result;\n }\n } else if (file === name) {\n return fullPath;\n }\n }\n\n return null;\n}\n\nexport function patchPubspec(\n pubspecFile: string | null,\n sentryDartFlutterVersion: string,\n sentryDartPluginVersion: string,\n project: string,\n org: string,\n): boolean {\n try {\n if (!pubspecFile) {\n throw new Error('pubspec.yaml is not provided or invalid.');\n }\n\n let pubspecContent = fs.readFileSync(pubspecFile, 'utf8');\n\n if (!pubspecContent.includes('sentry_flutter:')) {\n const dependenciesIndex = getDependenciesLocation(pubspecContent);\n\n pubspecContent =\n pubspecContent.slice(0, dependenciesIndex) +\n ` sentry_flutter: ${sentryDartFlutterVersion}\\n` +\n pubspecContent.slice(dependenciesIndex);\n\n clack.log.success(\n chalk.greenBright(\n `${chalk.bold('sentry_flutter')} added to pubspec.yaml`,\n ),\n );\n } else {\n clack.log.success(\n chalk.greenBright(\n `${chalk.bold('sentry_flutter')} is already included in pubspec.yaml`,\n ),\n );\n }\n\n if (!pubspecContent.includes('sentry_dart_plugin:')) {\n const devDependenciesIndex = getDevDependenciesLocation(pubspecContent);\n pubspecContent =\n pubspecContent.slice(0, devDependenciesIndex) +\n ` sentry_dart_plugin: ${sentryDartPluginVersion}\\n` +\n pubspecContent.slice(devDependenciesIndex);\n\n clack.log.success(\n chalk.greenBright(\n `${chalk.bold('sentry_dart_plugin')} added to pubspec.yaml`,\n ),\n );\n } else {\n clack.log.success(\n chalk.greenBright(\n `${chalk.bold(\n 'sentry_dart_plugin',\n )} is already included in pubspec.yaml`,\n ),\n );\n }\n\n if (!pubspecContent.includes('sentry:')) {\n pubspecContent += '\\n';\n pubspecContent += pubspecOptions(project, org);\n\n clack.log.success(\n chalk.greenBright(\n `${chalk.bold('sentry plugin configuration')} added to pubspec.yaml`,\n ),\n );\n } else {\n clack.log.success(\n chalk.greenBright(\n `${chalk.bold(\n 'sentry plugin configuration',\n )} is already included in pubspec.yaml`,\n ),\n );\n }\n\n fs.writeFileSync(pubspecFile, pubspecContent, 'utf8');\n\n return true;\n } catch (error) {\n clack.log.warn(`Failed to read/write ${chalk.cyan('pubspec.yaml')} file.`);\n Sentry.captureException(error);\n return false;\n }\n}\n\nexport function addProperties(pubspecFile: string | null, authToken: string) {\n try {\n if (!pubspecFile) {\n throw new Error('pubspec.yaml is not provided or invalid.');\n }\n\n const pubspecDir = path.dirname(pubspecFile);\n const sentryPropertiesFileName = 'sentry.properties';\n const sentryPropertiesFile = path.join(\n pubspecDir,\n sentryPropertiesFileName,\n );\n const sentryPropertiesContent = sentryProperties(authToken);\n\n fs.writeFileSync(sentryPropertiesFile, sentryPropertiesContent, 'utf8');\n\n const gitignoreFile = path.join(pubspecDir, '.gitignore');\n if (fs.existsSync(gitignoreFile)) {\n fs.appendFileSync(gitignoreFile, `\\n${sentryPropertiesFileName}\\n`);\n } else {\n fs.writeFileSync(gitignoreFile, `${sentryPropertiesFileName}\\n`, 'utf8');\n }\n return true;\n } catch (error) {\n clack.log.warn(`Failed to read/write ${chalk.cyan('pubspec.yaml')} file.`);\n Sentry.captureException(error);\n return false;\n }\n}\n\nexport async function patchMain(\n mainFile: string | null,\n dsn: string,\n canEnableProfiling: boolean,\n): Promise<boolean> {\n try {\n if (!mainFile) {\n throw new Error('pubspec.yaml is not provided or invalid.');\n }\n\n let mainContent = fs.readFileSync(mainFile, 'utf8');\n if (\n /import\\s+['\"]package[:]sentry_flutter\\/sentry_flutter\\.dart['\"];?/i.test(\n mainContent,\n )\n ) {\n // sentry is already configured\n clack.log.success(\n chalk.greenBright(\n `${chalk.bold('main.dart')} already has Sentry configured.`,\n ),\n );\n return true;\n }\n\n const features = [\n {\n id: 'tracing',\n prompt: `Do you want to enable ${chalk.bold(\n 'Tracing',\n )} to track the performance of your application?`,\n enabledHint: 'recommended',\n },\n ];\n if (canEnableProfiling) {\n features.push({\n id: 'profiling',\n prompt: `Do you want to enable ${chalk.bold(\n 'Profiling',\n )} to analyze CPU usage and optimize performance-critical code on iOS & macOS?`,\n enabledHint: 'recommended, tracing must be enabled',\n });\n }\n\n const selectedFeatures = await featureSelectionPrompt(features);\n const normalizedSelectedFeatures = {\n tracing: selectedFeatures.tracing ?? false,\n profiling: selectedFeatures.profiling ?? false,\n };\n mainContent = patchMainContent(\n dsn,\n mainContent,\n normalizedSelectedFeatures,\n );\n\n fs.writeFileSync(mainFile, mainContent, 'utf8');\n\n clack.log.success(\n chalk.greenBright(\n `Patched ${chalk.bold(\n 'main.dart',\n )} with the Sentry setup and test error snippet.`,\n ),\n );\n\n return true;\n } catch (error) {\n clack.log.warn(`Failed to read/write ${chalk.cyan('main.dart')} file.`);\n Sentry.captureException(error);\n return false;\n }\n}\n\nexport function patchMainContent(\n dsn: string,\n mainContent: string,\n selectedFeatures: {\n tracing: boolean;\n profiling: boolean;\n },\n): string {\n const importIndex = getLastImportLineLocation(mainContent);\n mainContent =\n mainContent.slice(0, importIndex) +\n sentryImport +\n mainContent.slice(importIndex);\n\n // Find and replace `runApp(...)`\n mainContent = mainContent.replace(\n /runApp\\(([\\s\\S]*?)\\);/g, // Match the `runApp(...)` invocation\n (_, runAppArgs) => initSnippet(dsn, selectedFeatures, runAppArgs as string),\n );\n\n // Make the `main` function async if it's not already\n mainContent = mainContent.replace(\n /void\\s+main\\(\\)\\s*\\{/g,\n 'Future<void> main() async {',\n );\n\n return mainContent;\n}\n\nexport function getLastImportLineLocation(sourceCode: string): number {\n const importRegex = /import\\s+['\"].*['\"].*;/gim;\n return getLastReqExpLocation(sourceCode, importRegex);\n}\n\nexport function getDependenciesLocation(sourceCode: string): number {\n const dependencyRegex = /^dependencies:\\s*$/gim;\n return getLastReqExpLocation(sourceCode, dependencyRegex);\n}\n\nexport function getDevDependenciesLocation(sourceCode: string): number {\n const dependencyRegex = /^dev_dependencies:\\s*$/gim;\n return getLastReqExpLocation(sourceCode, dependencyRegex);\n}\n\n// Helper\n\nfunction getLastReqExpLocation(sourceCode: string, regExp: RegExp): number {\n let match = regExp.exec(sourceCode);\n let importIndex = 0;\n while (match) {\n importIndex = match.index + match[0].length + 1;\n match = regExp.exec(sourceCode);\n }\n return importIndex;\n}\n"]}
1
+ {"version":3,"file":"code-tools.js","sourceRoot":"","sources":["../../../src/flutter/code-tools.ts"],"names":[],"mappings":"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","sourcesContent":["import * as fs from 'fs';\nimport * as path from 'path';\nimport * as Sentry from '@sentry/node';\n// @ts-ignore - clack is ESM and TS complains about that. It works though\nimport * as clack from '@clack/prompts';\nimport chalk from 'chalk';\nimport {\n sentryImport,\n pubspecOptions,\n sentryProperties,\n initSnippet,\n} from './templates';\nimport { featureSelectionPrompt } from '../utils/clack-utils';\n\n/**\n * Recursively finds a file per name in subfolders.\n * @param dir - The directory to start searching.\n * @param name - The name of the file including path extension.\n * @returns The path to the main.dart file or null if not found.\n */\nexport function findFile(dir: string, name: string): string | null {\n const files: string[] = fs.readdirSync(dir);\n\n for (const file of files) {\n const fullPath: string = path.join(dir, file);\n const stats: fs.Stats = fs.statSync(fullPath);\n\n if (stats.isDirectory()) {\n const result: string | null = findFile(fullPath, name);\n if (result) {\n return result;\n }\n } else if (file === name) {\n return fullPath;\n }\n }\n\n return null;\n}\n\nexport function patchPubspec(\n pubspecFile: string | null,\n sentryDartFlutterVersion: string,\n sentryDartPluginVersion: string,\n project: string,\n org: string,\n): boolean {\n try {\n if (!pubspecFile) {\n throw new Error('pubspec.yaml is not provided or invalid.');\n }\n\n let pubspecContent = fs.readFileSync(pubspecFile, 'utf8');\n\n if (!pubspecContent.includes('sentry_flutter:')) {\n const dependenciesIndex = getDependenciesLocation(pubspecContent);\n\n pubspecContent =\n pubspecContent.slice(0, dependenciesIndex) +\n ` sentry_flutter: ${sentryDartFlutterVersion}\\n` +\n pubspecContent.slice(dependenciesIndex);\n\n clack.log.success(\n chalk.greenBright(\n `${chalk.bold('sentry_flutter')} added to pubspec.yaml`,\n ),\n );\n } else {\n clack.log.success(\n chalk.greenBright(\n `${chalk.bold('sentry_flutter')} is already included in pubspec.yaml`,\n ),\n );\n }\n\n if (!pubspecContent.includes('sentry_dart_plugin:')) {\n const devDependenciesIndex = getDevDependenciesLocation(pubspecContent);\n pubspecContent =\n pubspecContent.slice(0, devDependenciesIndex) +\n ` sentry_dart_plugin: ${sentryDartPluginVersion}\\n` +\n pubspecContent.slice(devDependenciesIndex);\n\n clack.log.success(\n chalk.greenBright(\n `${chalk.bold('sentry_dart_plugin')} added to pubspec.yaml`,\n ),\n );\n } else {\n clack.log.success(\n chalk.greenBright(\n `${chalk.bold(\n 'sentry_dart_plugin',\n )} is already included in pubspec.yaml`,\n ),\n );\n }\n\n if (!pubspecContent.includes('sentry:')) {\n pubspecContent += '\\n';\n pubspecContent += pubspecOptions(project, org);\n\n clack.log.success(\n chalk.greenBright(\n `${chalk.bold('sentry plugin configuration')} added to pubspec.yaml`,\n ),\n );\n } else {\n clack.log.success(\n chalk.greenBright(\n `${chalk.bold(\n 'sentry plugin configuration',\n )} is already included in pubspec.yaml`,\n ),\n );\n }\n\n fs.writeFileSync(pubspecFile, pubspecContent, 'utf8');\n\n return true;\n } catch (error) {\n clack.log.warn(`Failed to read/write ${chalk.cyan('pubspec.yaml')} file.`);\n Sentry.captureException(error);\n return false;\n }\n}\n\nexport function addProperties(pubspecFile: string | null, authToken: string) {\n try {\n if (!pubspecFile) {\n throw new Error('pubspec.yaml is not provided or invalid.');\n }\n\n const pubspecDir = path.dirname(pubspecFile);\n const sentryPropertiesFileName = 'sentry.properties';\n const sentryPropertiesFile = path.join(\n pubspecDir,\n sentryPropertiesFileName,\n );\n const sentryPropertiesContent = sentryProperties(authToken);\n\n fs.writeFileSync(sentryPropertiesFile, sentryPropertiesContent, 'utf8');\n\n const gitignoreFile = path.join(pubspecDir, '.gitignore');\n if (fs.existsSync(gitignoreFile)) {\n fs.appendFileSync(gitignoreFile, `\\n${sentryPropertiesFileName}\\n`);\n } else {\n fs.writeFileSync(gitignoreFile, `${sentryPropertiesFileName}\\n`, 'utf8');\n }\n return true;\n } catch (error) {\n clack.log.warn(`Failed to read/write ${chalk.cyan('pubspec.yaml')} file.`);\n Sentry.captureException(error);\n return false;\n }\n}\n\nexport async function patchMain(\n mainFile: string | null,\n dsn: string,\n canEnableProfiling: boolean,\n): Promise<boolean> {\n try {\n if (!mainFile) {\n throw new Error('pubspec.yaml is not provided or invalid.');\n }\n\n let mainContent = fs.readFileSync(mainFile, 'utf8');\n if (\n /import\\s+['\"]package[:]sentry_flutter\\/sentry_flutter\\.dart['\"];?/i.test(\n mainContent,\n )\n ) {\n // sentry is already configured\n clack.log.success(\n chalk.greenBright(\n `${chalk.bold('main.dart')} already has Sentry configured.`,\n ),\n );\n return true;\n }\n\n const features = [\n {\n id: 'tracing',\n prompt: `Do you want to enable ${chalk.bold(\n 'Tracing',\n )} to track the performance of your application?`,\n enabledHint: 'recommended',\n },\n ];\n if (canEnableProfiling) {\n features.push({\n id: 'profiling',\n prompt: `Do you want to enable ${chalk.bold(\n 'Profiling',\n )} to analyze CPU usage and optimize performance-critical code on iOS & macOS?`,\n enabledHint: 'recommended, tracing must be enabled',\n });\n }\n\n const selectedFeatures = await featureSelectionPrompt(features);\n const normalizedSelectedFeatures = {\n tracing: selectedFeatures.tracing ?? false,\n profiling: selectedFeatures.profiling ?? false,\n };\n mainContent = patchMainContent(\n dsn,\n mainContent,\n normalizedSelectedFeatures,\n );\n\n fs.writeFileSync(mainFile, mainContent, 'utf8');\n\n clack.log.success(\n chalk.greenBright(\n `Patched ${chalk.bold(\n 'main.dart',\n )} with the Sentry setup and test error snippet.`,\n ),\n );\n\n return true;\n } catch (error) {\n clack.log.warn(`Failed to read/write ${chalk.cyan('main.dart')} file.`);\n Sentry.captureException(error);\n return false;\n }\n}\n\nexport function patchMainContent(\n dsn: string,\n mainContent: string,\n selectedFeatures: {\n tracing: boolean;\n profiling: boolean;\n },\n): string {\n const importIndex = getLastImportLineLocation(mainContent);\n mainContent =\n mainContent.slice(0, importIndex) +\n sentryImport +\n mainContent.slice(importIndex);\n\n // Find and replace `runApp(...)`\n mainContent = mainContent.replace(\n /runApp\\(([\\s\\S]*?)\\);/g, // Match the `runApp(...)` invocation\n (_, runAppArgs) => initSnippet(dsn, selectedFeatures, runAppArgs as string),\n );\n\n // Make the `main` function async if it's not already\n mainContent = mainContent.replace(\n /void\\s+main\\(\\)\\s*\\{/g,\n 'Future<void> main() async {',\n );\n\n return mainContent;\n}\n\nexport function getLastImportLineLocation(sourceCode: string): number {\n const importRegex = /import\\s+['\"].*['\"].*;/gim;\n return getLastReqExpLocation(sourceCode, importRegex);\n}\n\nexport function getDependenciesLocation(sourceCode: string): number {\n const dependencyRegex = /^dependencies:\\s*$/gim;\n return getLastReqExpLocation(sourceCode, dependencyRegex);\n}\n\nexport function getDevDependenciesLocation(sourceCode: string): number {\n const dependencyRegex = /^dev_dependencies:\\s*$/gim;\n return getLastReqExpLocation(sourceCode, dependencyRegex);\n}\n\n// Helper\n\nfunction getLastReqExpLocation(sourceCode: string, regExp: RegExp): number {\n let match = regExp.exec(sourceCode);\n let importIndex = 0;\n while (match) {\n importIndex = match.index + match[0].length + 1;\n match = regExp.exec(sourceCode);\n }\n return importIndex;\n}\n"]}