@sentry/wizard 3.38.0 → 3.40.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 (166) hide show
  1. package/CHANGELOG.md +10 -1
  2. package/README.md +3 -3
  3. package/dist/e2e-tests/tests/flutter.test.d.ts +1 -0
  4. package/dist/e2e-tests/tests/flutter.test.js +190 -0
  5. package/dist/e2e-tests/tests/flutter.test.js.map +1 -0
  6. package/dist/e2e-tests/tests/nextjs.test.js +1 -1
  7. package/dist/e2e-tests/tests/nextjs.test.js.map +1 -1
  8. package/dist/e2e-tests/tests/nuxt-3.test.js +1 -1
  9. package/dist/e2e-tests/tests/nuxt-3.test.js.map +1 -1
  10. package/dist/e2e-tests/tests/nuxt-4.test.js +1 -1
  11. package/dist/e2e-tests/tests/nuxt-4.test.js.map +1 -1
  12. package/dist/e2e-tests/tests/remix.test.js +1 -2
  13. package/dist/e2e-tests/tests/remix.test.js.map +1 -1
  14. package/dist/e2e-tests/tests/sveltekit.test.js +17 -5
  15. package/dist/e2e-tests/tests/sveltekit.test.js.map +1 -1
  16. package/dist/e2e-tests/utils/index.d.ts +22 -1
  17. package/dist/e2e-tests/utils/index.js +58 -3
  18. package/dist/e2e-tests/utils/index.js.map +1 -1
  19. package/dist/lib/Constants.d.ts +1 -0
  20. package/dist/lib/Constants.js +5 -0
  21. package/dist/lib/Constants.js.map +1 -1
  22. package/dist/package.json +1 -1
  23. package/dist/src/apple/apple-wizard.js +1 -1
  24. package/dist/src/apple/apple-wizard.js.map +1 -1
  25. package/dist/src/apple/xcode-manager.d.ts +4 -4
  26. package/dist/src/apple/xcode-manager.js.map +1 -1
  27. package/dist/src/flutter/code-tools.d.ts +17 -0
  28. package/dist/src/flutter/code-tools.js +263 -0
  29. package/dist/src/flutter/code-tools.js.map +1 -0
  30. package/dist/src/flutter/flutter-wizard.d.ts +2 -0
  31. package/dist/src/flutter/flutter-wizard.js +171 -0
  32. package/dist/src/flutter/flutter-wizard.js.map +1 -0
  33. package/dist/src/flutter/templates.d.ts +9 -0
  34. package/dist/src/flutter/templates.js +40 -0
  35. package/dist/src/flutter/templates.js.map +1 -0
  36. package/dist/src/nextjs/nextjs-wizard.js +3 -1
  37. package/dist/src/nextjs/nextjs-wizard.js.map +1 -1
  38. package/dist/src/run.d.ts +1 -1
  39. package/dist/src/run.js +39 -32
  40. package/dist/src/run.js.map +1 -1
  41. package/dist/src/sourcemaps/sourcemaps-wizard.js +2 -3
  42. package/dist/src/sourcemaps/sourcemaps-wizard.js.map +1 -1
  43. package/dist/src/telemetry.d.ts +2 -1
  44. package/dist/src/telemetry.js +1 -1
  45. package/dist/src/telemetry.js.map +1 -1
  46. package/dist/src/utils/clack-utils.d.ts +1 -1
  47. package/dist/src/utils/clack-utils.js +3 -3
  48. package/dist/src/utils/clack-utils.js.map +1 -1
  49. package/dist/src/utils/package-manager.d.ts +0 -1
  50. package/dist/src/utils/package-manager.js +9 -10
  51. package/dist/src/utils/package-manager.js.map +1 -1
  52. package/dist/test/flutter/code-tools.test.d.ts +1 -0
  53. package/dist/test/flutter/code-tools.test.js +84 -0
  54. package/dist/test/flutter/code-tools.test.js.map +1 -0
  55. package/dist/test/flutter/templates.test.d.ts +1 -0
  56. package/dist/test/flutter/templates.test.js +41 -0
  57. package/dist/test/flutter/templates.test.js.map +1 -0
  58. package/e2e-tests/README.md +5 -1
  59. package/e2e-tests/test-applications/flutter-test-app/.metadata +45 -0
  60. package/e2e-tests/test-applications/flutter-test-app/README.md +16 -0
  61. package/e2e-tests/test-applications/flutter-test-app/analysis_options.yaml +28 -0
  62. package/e2e-tests/test-applications/flutter-test-app/android/app/build.gradle +44 -0
  63. package/e2e-tests/test-applications/flutter-test-app/android/app/src/debug/AndroidManifest.xml +7 -0
  64. package/e2e-tests/test-applications/flutter-test-app/android/app/src/main/AndroidManifest.xml +45 -0
  65. package/e2e-tests/test-applications/flutter-test-app/android/app/src/main/kotlin/com/example/flutter_magic/MainActivity.kt +5 -0
  66. package/e2e-tests/test-applications/flutter-test-app/android/app/src/main/res/drawable/launch_background.xml +12 -0
  67. package/e2e-tests/test-applications/flutter-test-app/android/app/src/main/res/drawable-v21/launch_background.xml +12 -0
  68. package/e2e-tests/test-applications/flutter-test-app/android/app/src/main/res/mipmap-hdpi/ic_launcher.png +0 -0
  69. package/e2e-tests/test-applications/flutter-test-app/android/app/src/main/res/mipmap-mdpi/ic_launcher.png +0 -0
  70. package/e2e-tests/test-applications/flutter-test-app/android/app/src/main/res/mipmap-xhdpi/ic_launcher.png +0 -0
  71. package/e2e-tests/test-applications/flutter-test-app/android/app/src/main/res/mipmap-xxhdpi/ic_launcher.png +0 -0
  72. package/e2e-tests/test-applications/flutter-test-app/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png +0 -0
  73. package/e2e-tests/test-applications/flutter-test-app/android/app/src/main/res/values/styles.xml +18 -0
  74. package/e2e-tests/test-applications/flutter-test-app/android/app/src/main/res/values-night/styles.xml +18 -0
  75. package/e2e-tests/test-applications/flutter-test-app/android/app/src/profile/AndroidManifest.xml +7 -0
  76. package/e2e-tests/test-applications/flutter-test-app/android/build.gradle +18 -0
  77. package/e2e-tests/test-applications/flutter-test-app/android/gradle/wrapper/gradle-wrapper.properties +5 -0
  78. package/e2e-tests/test-applications/flutter-test-app/android/gradle.properties +3 -0
  79. package/e2e-tests/test-applications/flutter-test-app/android/settings.gradle +25 -0
  80. package/e2e-tests/test-applications/flutter-test-app/lib/main.dart +125 -0
  81. package/e2e-tests/test-applications/flutter-test-app/linux/CMakeLists.txt +145 -0
  82. package/e2e-tests/test-applications/flutter-test-app/linux/flutter/CMakeLists.txt +88 -0
  83. package/e2e-tests/test-applications/flutter-test-app/linux/flutter/generated_plugin_registrant.cc +11 -0
  84. package/e2e-tests/test-applications/flutter-test-app/linux/flutter/generated_plugin_registrant.h +15 -0
  85. package/e2e-tests/test-applications/flutter-test-app/linux/flutter/generated_plugins.cmake +23 -0
  86. package/e2e-tests/test-applications/flutter-test-app/linux/main.cc +6 -0
  87. package/e2e-tests/test-applications/flutter-test-app/linux/my_application.cc +124 -0
  88. package/e2e-tests/test-applications/flutter-test-app/linux/my_application.h +18 -0
  89. package/e2e-tests/test-applications/flutter-test-app/macos/Flutter/Flutter-Debug.xcconfig +2 -0
  90. package/e2e-tests/test-applications/flutter-test-app/macos/Flutter/Flutter-Release.xcconfig +2 -0
  91. package/e2e-tests/test-applications/flutter-test-app/macos/Flutter/GeneratedPluginRegistrant.swift +10 -0
  92. package/e2e-tests/test-applications/flutter-test-app/macos/Podfile +43 -0
  93. package/e2e-tests/test-applications/flutter-test-app/macos/Runner/AppDelegate.swift +9 -0
  94. package/e2e-tests/test-applications/flutter-test-app/macos/Runner/Assets.xcassets/AppIcon.appiconset/Contents.json +68 -0
  95. package/e2e-tests/test-applications/flutter-test-app/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_1024.png +0 -0
  96. package/e2e-tests/test-applications/flutter-test-app/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_128.png +0 -0
  97. package/e2e-tests/test-applications/flutter-test-app/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_16.png +0 -0
  98. package/e2e-tests/test-applications/flutter-test-app/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_256.png +0 -0
  99. package/e2e-tests/test-applications/flutter-test-app/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_32.png +0 -0
  100. package/e2e-tests/test-applications/flutter-test-app/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_512.png +0 -0
  101. package/e2e-tests/test-applications/flutter-test-app/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_64.png +0 -0
  102. package/e2e-tests/test-applications/flutter-test-app/macos/Runner/Base.lproj/MainMenu.xib +343 -0
  103. package/e2e-tests/test-applications/flutter-test-app/macos/Runner/Configs/AppInfo.xcconfig +14 -0
  104. package/e2e-tests/test-applications/flutter-test-app/macos/Runner/Configs/Debug.xcconfig +2 -0
  105. package/e2e-tests/test-applications/flutter-test-app/macos/Runner/Configs/Release.xcconfig +2 -0
  106. package/e2e-tests/test-applications/flutter-test-app/macos/Runner/Configs/Warnings.xcconfig +13 -0
  107. package/e2e-tests/test-applications/flutter-test-app/macos/Runner/DebugProfile.entitlements +12 -0
  108. package/e2e-tests/test-applications/flutter-test-app/macos/Runner/Info.plist +32 -0
  109. package/e2e-tests/test-applications/flutter-test-app/macos/Runner/MainFlutterWindow.swift +15 -0
  110. package/e2e-tests/test-applications/flutter-test-app/macos/Runner/Release.entitlements +8 -0
  111. package/e2e-tests/test-applications/flutter-test-app/macos/Runner.xcodeproj/project.pbxproj +705 -0
  112. package/e2e-tests/test-applications/flutter-test-app/macos/Runner.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist +8 -0
  113. package/e2e-tests/test-applications/flutter-test-app/macos/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme +98 -0
  114. package/e2e-tests/test-applications/flutter-test-app/macos/Runner.xcworkspace/contents.xcworkspacedata +7 -0
  115. package/e2e-tests/test-applications/flutter-test-app/macos/Runner.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist +8 -0
  116. package/e2e-tests/test-applications/flutter-test-app/macos/RunnerTests/RunnerTests.swift +12 -0
  117. package/e2e-tests/test-applications/flutter-test-app/pubspec.lock +213 -0
  118. package/e2e-tests/test-applications/flutter-test-app/pubspec.yaml +89 -0
  119. package/e2e-tests/test-applications/flutter-test-app/test/widget_test.dart +30 -0
  120. package/e2e-tests/test-applications/flutter-test-app/web/favicon.png +0 -0
  121. package/e2e-tests/test-applications/flutter-test-app/web/icons/Icon-192.png +0 -0
  122. package/e2e-tests/test-applications/flutter-test-app/web/icons/Icon-512.png +0 -0
  123. package/e2e-tests/test-applications/flutter-test-app/web/icons/Icon-maskable-192.png +0 -0
  124. package/e2e-tests/test-applications/flutter-test-app/web/icons/Icon-maskable-512.png +0 -0
  125. package/e2e-tests/test-applications/flutter-test-app/web/index.html +38 -0
  126. package/e2e-tests/test-applications/flutter-test-app/web/manifest.json +35 -0
  127. package/e2e-tests/test-applications/flutter-test-app/windows/CMakeLists.txt +108 -0
  128. package/e2e-tests/test-applications/flutter-test-app/windows/flutter/CMakeLists.txt +109 -0
  129. package/e2e-tests/test-applications/flutter-test-app/windows/flutter/generated_plugin_registrant.cc +11 -0
  130. package/e2e-tests/test-applications/flutter-test-app/windows/flutter/generated_plugin_registrant.h +15 -0
  131. package/e2e-tests/test-applications/flutter-test-app/windows/flutter/generated_plugins.cmake +23 -0
  132. package/e2e-tests/test-applications/flutter-test-app/windows/runner/CMakeLists.txt +40 -0
  133. package/e2e-tests/test-applications/flutter-test-app/windows/runner/Runner.rc +121 -0
  134. package/e2e-tests/test-applications/flutter-test-app/windows/runner/flutter_window.cpp +71 -0
  135. package/e2e-tests/test-applications/flutter-test-app/windows/runner/flutter_window.h +33 -0
  136. package/e2e-tests/test-applications/flutter-test-app/windows/runner/main.cpp +43 -0
  137. package/e2e-tests/test-applications/flutter-test-app/windows/runner/resource.h +16 -0
  138. package/e2e-tests/test-applications/flutter-test-app/windows/runner/resources/app_icon.ico +0 -0
  139. package/e2e-tests/test-applications/flutter-test-app/windows/runner/runner.exe.manifest +14 -0
  140. package/e2e-tests/test-applications/flutter-test-app/windows/runner/utils.cpp +65 -0
  141. package/e2e-tests/test-applications/flutter-test-app/windows/runner/utils.h +19 -0
  142. package/e2e-tests/test-applications/flutter-test-app/windows/runner/win32_window.cpp +288 -0
  143. package/e2e-tests/test-applications/flutter-test-app/windows/runner/win32_window.h +102 -0
  144. package/e2e-tests/test-applications/nextjs-test-app/package.json +1 -1
  145. package/e2e-tests/tests/flutter.test.ts +127 -0
  146. package/e2e-tests/tests/nextjs.test.ts +1 -1
  147. package/e2e-tests/tests/nuxt-3.test.ts +1 -1
  148. package/e2e-tests/tests/nuxt-4.test.ts +1 -1
  149. package/e2e-tests/tests/remix.test.ts +30 -19
  150. package/e2e-tests/tests/sveltekit.test.ts +79 -50
  151. package/e2e-tests/utils/index.ts +62 -2
  152. package/lib/Constants.ts +5 -0
  153. package/package.json +1 -1
  154. package/src/apple/apple-wizard.ts +1 -1
  155. package/src/apple/xcode-manager.ts +5 -5
  156. package/src/flutter/code-tools.ts +284 -0
  157. package/src/flutter/flutter-wizard.ts +164 -0
  158. package/src/flutter/templates.ts +90 -0
  159. package/src/nextjs/nextjs-wizard.ts +4 -1
  160. package/src/run.ts +7 -0
  161. package/src/sourcemaps/sourcemaps-wizard.ts +3 -7
  162. package/src/telemetry.ts +6 -2
  163. package/src/utils/clack-utils.ts +8 -5
  164. package/src/utils/package-manager.ts +8 -11
  165. package/test/flutter/code-tools.test.ts +212 -0
  166. package/test/flutter/templates.test.ts +100 -0
@@ -1 +1 @@
1
- {"version":3,"file":"nextjs-wizard.js","sourceRoot":"","sources":["../../../src/nextjs/nextjs-wizard.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,8BAA8B;AAC9B,yEAAyE;AACzE,2DAAmC;AACnC,gDAA0B;AAC1B,qCAAyB;AACzB,4EAA4E;AAC5E,qCAA+D;AAC/D,yCAA6B;AAE7B,mDAAuC;AAEvC,oDAiB8B;AAE9B,yCAiBqB;AACrB,0CAAwD;AACxD,sDAA+E;AAC/E,iCAAiD;AACjD,qEAA8D;AAE9D,SAAgB,eAAe,CAAC,OAAsB;IACpD,OAAO,IAAA,yBAAa,EAClB;QACE,OAAO,EAAE,OAAO,CAAC,gBAAgB;QACjC,WAAW,EAAE,QAAQ;QACrB,aAAa,EAAE,OAAO;KACvB,EACD,cAAM,OAAA,4BAA4B,CAAC,OAAO,CAAC,EAArC,CAAqC,CAC5C,CAAC;AACJ,CAAC;AATD,0CASC;AAED,SAAsB,4BAA4B,CAChD,OAAsB;;;;;;;;oBAEtB,IAAA,0BAAY,EAAC;wBACX,UAAU,EAAE,uBAAuB;wBACnC,SAAS,EAAE,OAAO,CAAC,SAAS;wBAC5B,gBAAgB,EAAE,OAAO,CAAC,gBAAgB;qBAC3C,CAAC,CAAC;oBAEG,kBAAkB,GAAG,IAAA,+BAAiB,GAAE,CAAC;oBAE/C,qBAAM,IAAA,+CAAiC,GAAE,EAAA;;oBAAzC,SAAyC,CAAC;oBAEtB,qBAAM,IAAA,+BAAiB,GAAE,EAAA;;oBAAvC,WAAW,GAAG,SAAyB;oBAE7C,qBAAM,IAAA,sCAAwB,EAAC,WAAW,EAAE,MAAM,EAAE,SAAS,CAAC,EAAA;;oBAA9D,SAA8D,CAAC;oBAEzD,WAAW,GAAG,IAAA,gCAAiB,EAAC,MAAM,EAAE,WAAW,CAAC,CAAC;oBAC3D,MAAM,CAAC,MAAM,CAAC,gBAAgB,EAAE,IAAA,8BAAsB,EAAC,WAAW,CAAC,CAAC,CAAC;oBAGnE,qBAAM,IAAA,oCAAsB,EAAC,OAAO,EAAE,mBAAmB,CAAC,EAAA;;oBADtD,KACJ,SAA0D,EADpD,eAAe,qBAAA,EAAE,SAAS,eAAA,EAAE,UAAU,gBAAA,EAAE,SAAS,eAAA;oBAGnD,mBAAmB,GAAG,IAAA,kCAAmB,EAC7C,gBAAgB,EAChB,WAAW,CACZ,CAAC;oBACF,MAAM,CAAC,MAAM,CAAC,uBAAuB,EAAE,mBAAmB,CAAC,CAAC;oBAG1D,qBAAM,IAAA,4BAAc,EAAC;4BACnB,WAAW,EAAE,mBAAmB;4BAChC,uBAAuB,EAAE,gBAAgB;4BACzC,gBAAgB,EAAE,CAAC,CAAC,CAAA,MAAA,WAAW,aAAX,WAAW,uBAAX,WAAW,CAAE,YAAY,0CAAG,gBAAgB,CAAC,CAAA;yBAClE,CAAC,EAAA;;oBALoB,6BAA6B,GACnD,CAAA,SAIE,CAAA,eALiD;oBAOrD,qBAAM,IAAA,qBAAS,EAAC,eAAe,EAAE;;;;4CACX,qBAAM,uBAAuB,EAAE,EAAA;;wCAA7C,WAAW,GAAG,SAA+B;wCAEjD,qBAAM,uCAAuC,EAAE,EAAA;;wCAD3C,wBAAwB,GAC5B,SAA+C;wCAEjD,qBAAM,wBAAwB,CAAC,eAAe,EAAE,UAAU,EAAE,SAAS,EAAE;gDACrE,WAAW,aAAA;gDACX,wBAAwB,0BAAA;6CACzB,CAAC,EAAA;;wCAHF,SAGE,CAAC;;;;6BACJ,CAAC,EAAA;;oBATF,SASE,CAAC;oBAEH,qBAAM,IAAA,qBAAS,EAAC,6BAA6B,EAAE;;;;;wCACvC,MAAM,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,KAAK,CAAC,CAAC;wCACzC,iBAAiB,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,OAAO,CAAC,CAAC;wCACtD,oBAAoB,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;wCAElD,aAAa,GACjB,EAAE,CAAC,UAAU,CAAC,iBAAiB,CAAC;4CAChC,EAAE,CAAC,SAAS,CAAC,iBAAiB,CAAC,CAAC,WAAW,EAAE;4CAC3C,CAAC,CAAC,CAAC,OAAO,CAAC;4CACX,CAAC,CAAC,EAAE,CAAC,UAAU,CAAC,oBAAoB,CAAC;gDACnC,EAAE,CAAC,SAAS,CAAC,oBAAoB,CAAC,CAAC,WAAW,EAAE;gDAClD,CAAC,CAAC,CAAC,KAAK,EAAE,OAAO,CAAC;gDAClB,CAAC,CAAC,SAAS,CAAC;wCAEhB,IAAI,CAAC,aAAa,EAAE;4CAClB,sBAAO;yCACR;wCAEK,uBAAuB,GAAG,EAAE,CAAC,UAAU,CAC3C,IAAI,CAAC,IAAI,OAAT,IAAI,+BAAM,OAAO,CAAC,GAAG,EAAE,GAAK,aAAa,WAAE,YAAY,WACxD;4CACC,CAAC,CAAC,YAAY;4CACd,CAAC,CAAC,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,OAAT,IAAI,+BAAM,OAAO,CAAC,GAAG,EAAE,GAAK,aAAa,WAAE,WAAW,WAAE;gDACxE,CAAC,CAAC,WAAW;gDACb,CAAC,CAAC,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,OAAT,IAAI,+BAAM,OAAO,CAAC,GAAG,EAAE,GAAK,aAAa,WAAE,YAAY,WAAE;oDACzE,CAAC,CAAC,YAAY;oDACd,CAAC,CAAC,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,OAAT,IAAI,+BAAM,OAAO,CAAC,GAAG,EAAE,GAAK,aAAa,WAAE,WAAW,WAAE;wDACxE,CAAC,CAAC,WAAW;wDACb,CAAC,CAAC,SAAS,CAAC;6CAEV,CAAC,uBAAuB,EAAxB,wBAAwB;wCAC1B,qBAAM,EAAE,CAAC,QAAQ,CAAC,SAAS,CACzB,IAAI,CAAC,IAAI,OAAT,IAAI,+BAAM,OAAO,CAAC,GAAG,EAAE,GAAK,aAAa,WAAE,YAAY,YACvD,IAAA,+CAAmC,GAAE,EACrC,EAAE,QAAQ,EAAE,MAAM,EAAE,IAAI,EAAE,GAAG,EAAE,CAChC,EAAA;;wCAJD,SAIC,CAAC;wCAEF,iBAAK,CAAC,GAAG,CAAC,OAAO,CACf,kBAAW,eAAK,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,OAAT,IAAI,kCAAS,aAAa,WAAE,YAAY,WAAE,MAAG,CACpE,CAAC;;;6CAEF,EAAE;6CACC,YAAY,CACX,IAAI,CAAC,IAAI,OAAT,IAAI,+BAAM,OAAO,CAAC,GAAG,EAAE,GAAK,aAAa,WAAE,uBAAuB,YAClE,MAAM,CACP;6CACA,QAAQ,CAAC,iBAAiB,CAAC,EAL9B,wBAK8B;wCAE9B,iBAAK,CAAC,GAAG,CAAC,IAAI,CACZ,+GAAwG,eAAK,CAAC,IAAI,CAChH,iBAAiB,CAClB,mDAAyC,eAAK,CAAC,IAAI,CAClD,IAAI,CAAC,IAAI,OAAT,IAAI,kCAAS,aAAa,WAAE,uBAAuB,WACpD,MAAG,CACL,CAAC;wCAEF,sCAAsC;wCACtC,OAAO,CAAC,GAAG,CAAC,IAAA,oDAAwC,GAAE,CAAC,CAAC;wCAEjC,qBAAM,IAAA,8BAAgB,EAC3C,iBAAK,CAAC,OAAO,CAAC;gDACZ,OAAO,EAAE,8BAAuB,eAAK,CAAC,IAAI,CACxC,IAAI,CAAC,IAAI,OAAT,IAAI,kCAAS,aAAa,WAAE,uBAAuB,WACpD,8BAA2B;gDAC5B,MAAM,EAAE,KAAK;gDACb,QAAQ,EAAE,wBAAwB;6CACnC,CAAC,CACH,EAAA;;wCARK,cAAc,GAAG,SAQtB;6CAEG,CAAC,cAAc,EAAf,wBAAe;wCACjB,qBAAM,IAAA,mBAAK,GAAE,EAAA;;wCAAb,SAAa,CAAC;;;;wCAGhB,iBAAK,CAAC,GAAG,CAAC,IAAI,CACZ,6HAAsH,eAAK,CAAC,IAAI,CAC9H,IAAI,CAAC,IAAI,OAAT,IAAI,kCAAS,aAAa,WAAE,uBAAuB,WACpD,MAAG,CACL,CAAC;wCAEF,sCAAsC;wCACtC,OAAO,CAAC,GAAG,CACT,IAAA,kDAAsC,EACpC,uBAAuB,KAAK,WAAW;4CACrC,uBAAuB,KAAK,YAAY,CAC3C,CACF,CAAC;wCAEqB,qBAAM,IAAA,8BAAgB,EAC3C,iBAAK,CAAC,OAAO,CAAC;gDACZ,OAAO,EAAE,uCAAgC,eAAK,CAAC,IAAI,CACjD,IAAI,CAAC,IAAI,OAAT,IAAI,kCAAS,aAAa,WAAE,uBAAuB,WACpD,8BAA2B;gDAC5B,MAAM,EAAE,KAAK;gDACb,QAAQ,EAAE,wBAAwB;6CACnC,CAAC,CACH,EAAA;;wCARK,cAAc,GAAG,SAQtB;6CAEG,CAAC,cAAc,EAAf,wBAAe;wCACjB,qBAAM,IAAA,mBAAK,GAAE,EAAA;;wCAAb,SAAa,CAAC;;;;;6BAGnB,CAAC,EAAA;;oBArGF,SAqGE,CAAC;oBAEH,qBAAM,IAAA,qBAAS,EAAC,0BAA0B,EAAE;;;;;wCACpC,eAAe,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,KAAK,CAAC,CAAC;wCAClD,kBAAkB,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,KAAK,EAAE,KAAK,CAAC,CAAC;wCAE5D,cAAc,GAClB,EAAE,CAAC,UAAU,CAAC,eAAe,CAAC;4CAC9B,EAAE,CAAC,SAAS,CAAC,eAAe,CAAC,CAAC,WAAW,EAAE;4CACzC,CAAC,CAAC,CAAC,KAAK,CAAC;4CACT,CAAC,CAAC,EAAE,CAAC,UAAU,CAAC,kBAAkB,CAAC;gDACjC,EAAE,CAAC,SAAS,CAAC,kBAAkB,CAAC,CAAC,WAAW,EAAE;gDAChD,CAAC,CAAC,CAAC,KAAK,EAAE,KAAK,CAAC;gDAChB,CAAC,CAAC,SAAS,CAAC;wCAEhB,IAAI,CAAC,cAAc,EAAE;4CACnB,sBAAO;yCACR;wCAEK,mBAAmB,GAAG,EAAE,CAAC,UAAU,CACvC,IAAI,CAAC,IAAI,OAAT,IAAI,+BAAM,OAAO,CAAC,GAAG,EAAE,GAAK,cAAc,WAAE,kBAAkB,WAC/D;4CACC,CAAC,CAAC,kBAAkB;4CACpB,CAAC,CAAC,EAAE,CAAC,UAAU,CACX,IAAI,CAAC,IAAI,OAAT,IAAI,+BAAM,OAAO,CAAC,GAAG,EAAE,GAAK,cAAc,WAAE,iBAAiB,WAC9D;gDACH,CAAC,CAAC,iBAAiB;gDACnB,CAAC,CAAC,EAAE,CAAC,UAAU,CACX,IAAI,CAAC,IAAI,OAAT,IAAI,+BAAM,OAAO,CAAC,GAAG,EAAE,GAAK,cAAc,WAAE,kBAAkB,WAC/D;oDACH,CAAC,CAAC,kBAAkB;oDACpB,CAAC,CAAC,EAAE,CAAC,UAAU,CACX,IAAI,CAAC,IAAI,OAAT,IAAI,+BAAM,OAAO,CAAC,GAAG,EAAE,GAAK,cAAc,WAAE,iBAAiB,WAC9D;wDACH,CAAC,CAAC,iBAAiB;wDACnB,CAAC,CAAC,SAAS,CAAC;6CAEV,CAAC,mBAAmB,EAApB,wBAAoB;wCAChB,sBAAsB,GAAG,uBAC7B,kBAAkB,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,CAClC,CAAC;wCAEH,qBAAM,EAAE,CAAC,QAAQ,CAAC,SAAS,CACzB,IAAI,CAAC,IAAI,OAAT,IAAI,+BAAM,OAAO,CAAC,GAAG,EAAE,GAAK,cAAc,WAAE,sBAAsB,YAClE,IAAA,2CAA+B,EAAC,kBAAkB,CAAC,EACnD,EAAE,QAAQ,EAAE,MAAM,EAAE,IAAI,EAAE,GAAG,EAAE,CAChC,EAAA;;wCAJD,SAIC,CAAC;wCAEF,iBAAK,CAAC,GAAG,CAAC,OAAO,CACf,kBAAW,eAAK,CAAC,IAAI,CACnB,IAAI,CAAC,IAAI,OAAT,IAAI,kCAAS,cAAc,WAAE,sBAAsB,WACpD,MAAG,CACL,CAAC;;;wCAEF,iBAAK,CAAC,GAAG,CAAC,IAAI,CACZ,oJAA6I,eAAK,CAAC,IAAI,CACrJ,IAAI,CAAC,IAAI,OAAT,IAAI,kCAAS,cAAc,WAAE,mBAAmB,WACjD,QAAK,CACP,CAAC;wCAEF,sCAAsC;wCACtC,OAAO,CAAC,GAAG,CACT,IAAA,0CAA8B,EAC5B,mBAAmB,KAAK,iBAAiB;4CACvC,mBAAmB,KAAK,kBAAkB,CAC7C,CACF,CAAC;wCAEqB,qBAAM,IAAA,8BAAgB,EAC3C,iBAAK,CAAC,OAAO,CAAC;gDACZ,OAAO,EAAE,uCAAgC,eAAK,CAAC,IAAI,CACjD,IAAI,CAAC,IAAI,OAAT,IAAI,kCAAS,cAAc,WAAE,mBAAmB,WACjD,8BAA2B;gDAC5B,MAAM,EAAE,KAAK;gDACb,QAAQ,EAAE,wBAAwB;6CACnC,CAAC,CACH,EAAA;;wCARK,cAAc,GAAG,SAQtB;6CAEG,CAAC,cAAc,EAAf,wBAAe;wCACjB,qBAAM,IAAA,mBAAK,GAAE,EAAA;;wCAAb,SAAa,CAAC;;;;;6BAGnB,CAAC,EAAA;;oBAhFF,SAgFE,CAAC;oBAE6B,qBAAM,IAAA,wCAA0B,GAAE,EAAA;;oBAA5D,uBAAuB,GAAG,SAAkC;yBAC9D,uBAAuB,EAAvB,yBAAuB;oBACzB,qBAAM,IAAA,qBAAS,EAAC,qBAAqB,EAAE;4BACrC,sBAAA,iBAAiB,CAAC,UAAU,EAAE,eAAe,EAAE,SAAS,CAAC,EAAA;iCAAA,CAC1D,EAAA;;oBAFD,SAEC,CAAC;;yBAGJ,qBAAM,IAAA,4CAA8B,EAAC,SAAS,CAAC,EAAA;;oBAA/C,SAA+C,CAAC;oBAEjB,qBAAM,6BAA6B,EAAE,EAAA;;oBAA9D,sBAAsB,GAAG,SAAqC;yBAChE,CAAA,sBAAsB,IAAI,sBAAsB,KAAK,IAAI,CAAA,EAAzD,yBAAyD;oBAC3D,qBAAM,IAAA,8BAAgB,EACpB,iBAAK,CAAC,MAAM,CAAC;4BACX,OAAO,EAAE,wOAAiO,eAAK,CAAC,IAAI,CAClP,gKAAkK,CACnK,CAAE;4BACH,OAAO,EAAE;gCACP;oCACE,KAAK,EAAE,eAAe;oCACtB,IAAI,EAAE,aAAa;oCACnB,KAAK,EAAE,IAAI;iCACZ;6BACF;4BACD,YAAY,EAAE,IAAI;yBACnB,CAAC,CACH,EAAA;;oBAdD,SAcC,CAAC;;;oBAGE,kBAAkB,GAAG,EAAE,CAAC,UAAU,CACtC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,aAAa,CAAC,CACxC,CAAC;yBAEE,kBAAkB,EAAlB,yBAAkB;oBACpB,iBAAK,CAAC,GAAG,CAAC,IAAI,CACZ,8KAA8K,CAC/K,CAAC;;yBAEF,qBAAM,IAAA,qBAAS,EAAC,cAAc,EAAE,cAAM,OAAA,IAAA,+BAAW,EAAC,QAAQ,EAAE,SAAS,CAAC,EAAhC,CAAgC,CAAC,EAAA;;oBAAvE,SAAuE,CAAC;;;0BAIxE,6BAA6B,aAA7B,6BAA6B;oBAA7B,KAAA,6BAA6B,CAAA;;yBAAK,qBAAM,IAAA,+BAAiB,GAAE,EAAA;;oBAA1B,KAAA,CAAC,SAAyB,CAAC,CAAA;;;oBADxD,sBAAsB,KACkC;oBAC9D,qBAAM,IAAA,oCAAsB,GAAE,EAAA;;oBAA9B,SAA8B,CAAC;oBAE/B,iBAAK,CAAC,KAAK,CAAC,YACZ,eAAK,CAAC,KAAK,CAAC,gDAAgD,CAAC,cAC3D,uBAAuB;wBACrB,CAAC,CAAC,qFAA8E,eAAK,CAAC,IAAI,CACtF,UAAG,sBAAsB,CAAC,gBAAgB,SAAM,CACjD,4BAAkB,eAAK,CAAC,IAAI,CAAC,wBAAwB,CAAC,CAAE;wBAC3D,CAAC,CAAC,EAAE,SAEN,uBAAuB,IAAI,sBAAsB;wBAC/C,CAAC,CAAC,6IAA+I;wBACjJ,CAAC,CAAC,EAAE,iBAGR,eAAK,CAAC,GAAG,CACT,sGAAsG,CACvG,CAAE,CAAC,CAAC;;;;;CACJ;AApSD,oEAoSC;AAOD,SAAe,wBAAwB,CACrC,eAAkC,EAClC,UAAmB,EACnB,SAAiB,EACjB,gBAAkC;;;;;;wBAET,qBAAM,IAAA,oCAAsB,EAAC;wBACpD;4BACE,EAAE,EAAE,aAAa;4BACjB,MAAM,EAAE,gCAAyB,eAAK,CAAC,IAAI,CACzC,SAAS,CACV,mDAAgD;4BACjD,WAAW,EAAE,aAAa;yBAC3B;wBACD;4BACE,EAAE,EAAE,QAAQ;4BACZ,MAAM,EAAE,gCAAyB,eAAK,CAAC,IAAI,CACzC,uBAAuB,CACxB,uEAAoE;4BACrE,WAAW,EAAE,wCAAwC;yBACtD;qBACO,CAAC,EAAA;;oBAfL,gBAAgB,GAAG,SAed;oBAEL,kBAAkB,GAAG,IAAA,+BAAiB,GAAE,CAAC;oBAEzC,cAAc,GAAG,CAAC,QAAQ,EAAE,QAAQ,EAAE,MAAM,CAAU,CAAC;wCAElD,aAAa;;;wCACtB,qBAAM,IAAA,qBAAS,EAAC,wBAAiB,aAAa,YAAS,EAAE;;;;;oDACjD,QAAQ,GAAG,iBAAU,aAAa,eAAY,CAAC;oDAC/C,QAAQ,GAAG,iBAAU,aAAa,eAAY,CAAC;oDAE/C,cAAc,GAAG,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,QAAQ,CAAC,CAAC,CAAC;oDACnE,cAAc,GAAG,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,QAAQ,CAAC,CAAC,CAAC;oDAErE,eAAe,GAAG,IAAI,CAAC;yDAEvB,CAAA,cAAc,IAAI,cAAc,CAAA,EAAhC,wBAAgC;oDAC5B,eAAe,GAAG,EAAE,CAAC;oDAE3B,IAAI,cAAc,EAAE;wDAClB,eAAe,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;qDAChC;oDAED,IAAI,cAAc,EAAE;wDAClB,eAAe,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;qDAChC;oDAEgC,qBAAM,IAAA,8BAAgB,EACrD,iBAAK,CAAC,OAAO,CAAC;4DACZ,OAAO,EAAE,gCAAyB,aAAa,sBAAY,eAAe,CAAC,IAAI,CAC7E,IAAI,CACL,0BAAgB,eAAe,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,MAAG;yDAC/D,CAAC,CACH,EAAA;;oDANK,wBAAwB,GAAG,SAMhC;oDACD,MAAM,CAAC,MAAM,CACX,oBAAa,aAAa,YAAS,EACnC,wBAAwB,CACzB,CAAC;oDAEF,eAAe,GAAG,wBAAwB,CAAC;oDAE3C,IAAI,wBAAwB,EAAE;wDAC5B,IAAI,cAAc,EAAE;4DAClB,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,QAAQ,CAAC,CAAC,CAAC;4DAClD,iBAAK,CAAC,GAAG,CAAC,IAAI,CAAC,2BAAoB,eAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,MAAG,CAAC,CAAC;yDAC7D;wDACD,IAAI,cAAc,EAAE;4DAClB,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,QAAQ,CAAC,CAAC,CAAC;4DAClD,iBAAK,CAAC,GAAG,CAAC,IAAI,CAAC,2BAAoB,eAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,MAAG,CAAC,CAAC;yDAC7D;qDACF;;;yDAGC,eAAe,EAAf,wBAAe;oDACjB,qBAAM,EAAE,CAAC,QAAQ,CAAC,SAAS,CACzB,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,kBAAkB,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC,EAClE,IAAA,mCAAuB,EACrB,eAAe,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,MAAM,EAClC,aAAa,EACb,gBAAgB,CACjB,EACD,EAAE,QAAQ,EAAE,MAAM,EAAE,IAAI,EAAE,GAAG,EAAE,CAChC,EAAA;;oDARD,SAQC,CAAC;oDACF,iBAAK,CAAC,GAAG,CAAC,OAAO,CACf,wBAAiB,eAAK,CAAC,IAAI,CACzB,kBAAkB,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,QAAQ,CACzC,MAAG,CACL,CAAC;oDACF,MAAM,CAAC,MAAM,CAAC,kBAAW,aAAa,YAAS,EAAE,IAAI,CAAC,CAAC;;;;;yCAE1D,CAAC,EAAA;;oCA/DF,SA+DE,CAAC;;;;;0BAhEqC,EAAd,iCAAc;;;yBAAd,CAAA,4BAAc,CAAA;oBAA/B,aAAa;kDAAb,aAAa;;;;;oBAAI,IAAc,CAAA;;wBAmE1C,qBAAM,IAAA,qBAAS,EAAC,4BAA4B,EAAE;;;;;oCACtC,mBAAmB,GAAG,wBAAwB,CAAC,KAAK,CAAC,CAAC;oCACtD,qBAAqB,GAAG,wBAAwB,CAAC,OAAO,CAAC,CAAC;oCAC1D,eAAe,GAAG,wBAAwB,CAAC,KAAK,CAAC,CAAC;oCAIlD,uBAAuB,GAAG,EAAE,CAAC,UAAU,CAC3C,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,oBAAoB,CAAC,CAC/C,CAAC;oCACI,uBAAuB,GAAG,EAAE,CAAC,UAAU,CAC3C,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,oBAAoB,CAAC,CAC/C,CAAC;oCACI,0BAA0B,GAAG,EAAE,CAAC,UAAU,CAC9C,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,KAAK,EAAE,oBAAoB,CAAC,CACtD,CAAC;oCACI,0BAA0B,GAAG,EAAE,CAAC,UAAU,CAC9C,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,KAAK,EAAE,oBAAoB,CAAC,CACtD,CAAC;oCAEF,kFAAkF;oCAClF,6EAA6E;oCAC7E,+EAA+E;oCAC/E,oHAAoH;oCACpH,mEAAmE;oCACnE,kHAAkH;oCAClH,4GAA4G;oCAC5G,IAAI,qBAAqB,IAAI,mBAAmB,EAAE;wCAChD,IAAI,uBAAuB,IAAI,uBAAuB,EAAE;4CACtD,2BAA2B,GAAG,MAAM,CAAC;yCACtC;6CAAM;4CACL,2BAA2B,GAAG,gBAAgB,CAAC;yCAChD;qCACF;yCAAM;wCACL,IAAI,0BAA0B,IAAI,0BAA0B,EAAE;4CAC5D,2BAA2B,GAAG,KAAK,CAAC;yCACrC;6CAAM;4CACL,2BAA2B,GAAG,gBAAgB,CAAC;yCAChD;qCACF;oCAEK,0BAA0B,GAAG,0BACjC,kBAAkB,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAChC,CAAC;yCAEC,CAAA,2BAA2B,KAAK,gBAAgB,CAAA,EAAhD,wBAAgD;oCAC9C,8BAA8B,SAAgB,CAAC;oCACnD,IAAI,qBAAqB,IAAI,mBAAmB,EAAE;wCAChD,8BAA8B,GAAG,MAAM,CAAC;qCACzC;yCAAM,IAAI,eAAe,EAAE;wCAC1B,8BAA8B,GAAG,KAAK,CAAC;qCACxC;yCAAM;wCACL,8BAA8B,GAAG,MAAM,CAAC;qCACzC;oCAEK,0BAA0B,GAC9B,8BAA8B,KAAK,MAAM;wCACvC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,0BAA0B,CAAC;wCACtD,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,KAAK,EAAE,0BAA0B,CAAC,CAAC;oCAEtC,qBAAM,IAAA,iCAAmB,EACnD,0BAA0B,EAC1B,IAAA,yCAA6B,EAAC,8BAA8B,CAAC,CAC9D,EAAA;;oCAHK,mBAAmB,GAAG,SAG3B;yCAEG,CAAC,mBAAmB,EAApB,wBAAoB;oCACtB,qBAAM,IAAA,uCAAyB,EAC7B,0BAA0B,EAC1B,IAAA,kDAAsC,EACpC,8BAA8B,CAC/B,CACF,EAAA;;oCALD,SAKC,CAAC;;;wCAGJ,qBAAM,IAAA,uCAAyB,EAC7B,0BAA0B,IAAI,uBAAuB;wCACnD,CAAC,CAAC,oBAAoB;wCACtB,CAAC,CAAC,0BAA0B,IAAI,uBAAuB;4CACvD,CAAC,CAAC,oBAAoB;4CACtB,CAAC,CAAC,0BAA0B,EAC9B,IAAA,kDAAsC,EAAC,2BAA2B,CAAC,CACpE,EAAA;;oCAPD,SAOC,CAAC;;;;;yBAEL,CAAC,EAAA;;oBAnFF,SAmFE,CAAC;oBAEH,qBAAM,IAAA,qBAAS,EAAC,mBAAmB,EAAE;;;;;wCAC7B,+BAA+B,GAAG,IAAA,8CAAkC,EAAC;4CACzE,OAAO,EAAE,eAAe,CAAC,YAAY,CAAC,IAAI;4CAC1C,WAAW,EAAE,eAAe,CAAC,IAAI;4CACjC,UAAU,YAAA;4CACV,SAAS,WAAA;4CACT,WAAW,EAAE,gBAAgB,CAAC,WAAW;4CACzC,wBAAwB,EAAE,gBAAgB,CAAC,wBAAwB;yCACpE,CAAC,CAAC;wCAEG,0BAA0B,GAAG;4CACjC,EAAE,EAAE,gBAAgB;4CACpB,GAAG,EAAE,iBAAiB;4CACtB,GAAG,EAAE,iBAAiB;4CACtB,EAAE,EAAE,gBAAgB;4CACpB,GAAG,EAAE,iBAAiB;4CACtB,GAAG,EAAE,iBAAiB;yCACvB,CAAC;wCAEI,mBAAmB,GAAG,MAAM,CAAC,OAAO,CAAC,0BAA0B,CAAC,CAAC,IAAI,CACzE,UAAC,EAAY;gDAAT,QAAQ,QAAA;4CAAM,OAAA,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,QAAQ,CAAC,CAAC;wCAAjD,CAAiD,CACpE,CAAC;6CAEE,CAAC,mBAAmB,EAApB,wBAAoB;wCACtB,MAAM,CAAC,MAAM,CAAC,sBAAsB,EAAE,QAAQ,CAAC,CAAC;wCAG5C,YAAY,GAAG,KAAK,CAAC;;;;wCAEC,qBAAM,EAAE,CAAC,QAAQ,CAAC,QAAQ,CAChD,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,cAAc,CAAC,EACxC,MAAM,CACP,EAAA;;wCAHK,eAAe,GAAG,SAGvB;wCAEK,WAAW,GAAG,IAAI,CAAC,KAAK,CAAC,eAAe,CAAC,CAAC;wCAChD,sEAAsE;wCACtE,IAAI,WAAW,CAAC,IAAI,KAAK,QAAQ,EAAE;4CACjC,YAAY,GAAG,IAAI,CAAC;yCACrB;;;;;;wCAMG,cAAc,GAAG,YAAY;4CACjC,CAAC,CAAC,0BAA0B,CAAC,GAAG;4CAChC,CAAC,CAAC,0BAA0B,CAAC,EAAE,CAAC;wCAC5B,aAAa,GAAG,YAAY;4CAChC,CAAC,CAAC,IAAA,sCAA0B,EAAC,+BAA+B,CAAC;4CAC7D,CAAC,CAAC,IAAA,sCAA0B,EAAC,+BAA+B,CAAC,CAAC;wCAEhE,qBAAM,EAAE,CAAC,QAAQ,CAAC,SAAS,CACzB,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,cAAc,CAAC,EACxC,aAAa,EACb,EAAE,QAAQ,EAAE,MAAM,EAAE,IAAI,EAAE,GAAG,EAAE,CAChC,EAAA;;wCAJD,SAIC,CAAC;wCAEF,iBAAK,CAAC,GAAG,CAAC,OAAO,CACf,kBAAW,eAAK,CAAC,IAAI,CAAC,cAAc,CAAC,gCAA6B,CACnE,CAAC;wCAEF,sBAAO;;wCAGF,uBAAuB,GAC5B,mBAAmB,GADS,EAAE,2BAA2B,GACzD,mBAAmB,GADsC,CACrC;6CAElB,CAAA,uBAAuB,KAAK,IAAI,IAAI,uBAAuB,KAAK,KAAK,CAAA,EAArE,yBAAqE;wCACvE,MAAM,CAAC,MAAM,CAAC,sBAAsB,EAAE,QAAQ,CAAC,CAAC;wCAE1C,oBAAoB,GAAG,EAAE,CAAC,YAAY,CAC1C,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,2BAA2B,CAAC,EACrD,MAAM,CACP,CAAC;wCAEI,mBAAmB,GACvB,oBAAoB,CAAC,QAAQ,CAAC,gBAAgB,CAAC;4CAC/C,oBAAoB,CAAC,QAAQ,CAAC,kBAAkB,CAAC,CAAC;wCAEhD,YAAY,GAAG,IAAI,CAAC;6CAEpB,mBAAmB,EAAnB,wBAAmB;wCACA,qBAAM,IAAA,8BAAgB,EACzC,iBAAK,CAAC,OAAO,CAAC;gDACZ,OAAO,EAAE,UAAG,eAAK,CAAC,IAAI,CACpB,2BAA2B,CAC5B,qFAAkF;6CACpF,CAAC,CACH,EAAA;;wCANK,YAAY,GAAG,SAMpB;wCAED,YAAY,GAAG,YAAY,CAAC;;;6CAG1B,YAAY,EAAZ,yBAAY;wCACd,qBAAM,EAAE,CAAC,QAAQ,CAAC,UAAU,CAC1B,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,2BAA2B,CAAC,EACrD,IAAA,sCAA0B,EAAC,+BAA+B,CAAC,EAC3D,MAAM,CACP,EAAA;;wCAJD,SAIC,CAAC;wCAEF,iBAAK,CAAC,GAAG,CAAC,OAAO,CACf,wCAAiC,eAAK,CAAC,IAAI,CACzC,2BAA2B,CAC5B,eAAK,eAAK,CAAC,GAAG,CAAC,6CAA6C,CAAC,CAAE,CACjE,CAAC;;;wCAGJ,MAAM,CAAC,MAAM,CAAC,wBAAwB,EAAE,SAAS,CAAC,CAAC;;;6CAInD,CAAA,uBAAuB,KAAK,KAAK;4CACjC,uBAAuB,KAAK,KAAK;4CACjC,uBAAuB,KAAK,KAAK;4CACjC,uBAAuB,KAAK,IAAI,CAAA,EAHhC,yBAGgC;wCAE1B,oBAAoB,GAAG,EAAE,CAAC,YAAY,CAC1C,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,2BAA2B,CAAC,EACrD,MAAM,CACP,CAAC;wCAEI,mBAAmB,GACvB,oBAAoB,CAAC,QAAQ,CAAC,gBAAgB,CAAC;4CAC/C,oBAAoB,CAAC,QAAQ,CAAC,kBAAkB,CAAC,CAAC;wCAEhD,YAAY,GAAG,IAAI,CAAC;6CAEpB,mBAAmB,EAAnB,yBAAmB;wCACA,qBAAM,IAAA,8BAAgB,EACzC,iBAAK,CAAC,OAAO,CAAC;gDACZ,OAAO,EAAE,UAAG,eAAK,CAAC,IAAI,CACpB,2BAA2B,CAC5B,qFAAkF;6CACpF,CAAC,CACH,EAAA;;wCANK,YAAY,GAAG,SAMpB;wCAED,YAAY,GAAG,YAAY,CAAC;;;;6CAIxB,YAAY,EAAZ,yBAAY;wCACR,GAAG,GAAG,IAAA,sBAAW,EAAC,oBAAoB,CAAC,CAAC;wCAC9C,GAAG,CAAC,OAAO,CAAC,IAAI,CAAC;4CACf,IAAI,EAAE,gBAAgB;4CACtB,QAAQ,EAAE,kBAAkB;4CAC5B,KAAK,EAAE,kBAAkB;yCAC1B,CAAC,CAAC;wCAEG,gBAAgB,GAAG,IAAA,uBAAY,EAAC,GAAG,CAAC,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC;wCACrE,mEAAmE;wCACnE,GAAG,CAAC,OAAO,CAAC,OAAO,GAAG,mBAAQ,CAAC,GAAG,CAAC,mCACrC,gBAAgB,sBAChB,+BAA+B,QACrC,CAAC,CAAC;wCACY,OAAO,GAAG,GAAG,CAAC,QAAQ,EAAE,CAAC,IAAI,CAAC;wCAEpC,qBAAM,EAAE,CAAC,QAAQ,CAAC,SAAS,CACzB,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,2BAA2B,CAAC,EACrD,OAAO,EACP;gDACE,QAAQ,EAAE,MAAM;gDAChB,IAAI,EAAE,GAAG;6CACV,CACF,EAAA;;wCAPD,SAOC,CAAC;wCACF,iBAAK,CAAC,GAAG,CAAC,OAAO,CACf,wCAAiC,eAAK,CAAC,IAAI,CACzC,2BAA2B,CAC5B,eAAK,eAAK,CAAC,GAAG,CAAC,6CAA6C,CAAC,CAAE,CACjE,CAAC;wCAEF,MAAM,CAAC,MAAM,CAAC,wBAAwB,EAAE,SAAS,CAAC,CAAC;;;;;wCAGrD,MAAM,CAAC,MAAM,CAAC,wBAAwB,EAAE,MAAM,CAAC,CAAC;wCAChD,iBAAK,CAAC,GAAG,CAAC,IAAI,CACZ,eAAK,CAAC,MAAM,CACV,0CAAmC,eAAK,CAAC,IAAI,CAC3C,2BAA2B,CAC5B,MAAG,CACL,CACF,CAAC;wCACF,iBAAK,CAAC,GAAG,CAAC,IAAI,CACZ,qDAA8C,eAAK,CAAC,IAAI,CACtD,2BAA2B,CAC5B,eAAK,eAAK,CAAC,GAAG,CAAC,yCAAyC,CAAC,OAAI,CAC/D,CAAC;wCAEF,sCAAsC;wCACtC,OAAO,CAAC,GAAG,CACT,IAAA,8CAAkC,EAAC,+BAA+B,CAAC,CACpE,CAAC;wCAEqB,qBAAM,IAAA,8BAAgB,EAC3C,iBAAK,CAAC,OAAO,CAAC;gDACZ,OAAO,EAAE,sDAA+C,eAAK,CAAC,IAAI,CAChE,2BAA2B,CAC5B,MAAG;gDACJ,MAAM,EAAE,KAAK;gDACb,QAAQ,EAAE,wBAAwB;6CACnC,CAAC,CACH,EAAA;;wCARK,cAAc,GAAG,SAQtB;6CAEG,CAAC,cAAc,EAAf,yBAAe;wCACjB,qBAAM,IAAA,mBAAK,GAAE,EAAA;;wCAAb,SAAa,CAAC;;;;;;6BAIrB,CAAC,EAAA;;oBA/MF,SA+ME,CAAC;;;;;CACJ;AAED,SAAS,wBAAwB,CAAC,aAAgC;IAChE,IAAM,OAAO,GAAG,KAAK,CAAC,OAAO,CAAC,aAAa,CAAC;QAC1C,CAAC,CAAC,IAAI,CAAC,IAAI,OAAT,IAAI,iBAAM,OAAO,CAAC,GAAG,EAAE,GAAK,aAAa,UAC3C,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,aAAa,CAAC,CAAC;IAE5C,OAAO,EAAE,CAAC,UAAU,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC,WAAW,EAAE,CAAC;AACvE,CAAC;AAED,SAAe,iBAAiB,CAC9B,UAAmB,EACnB,eAAkC,EAClC,SAAiB;;;;;;oBAEX,eAAe,GAAG,wBAAwB,CAAC,KAAK,CAAC,CAAC;oBAClD,mBAAmB,GAAG,wBAAwB,CAAC,KAAK,CAAC,CAAC;oBACtD,qBAAqB,GAAG,wBAAwB,CAAC,OAAO,CAAC,CAAC;oBAC1D,kBAAkB,GAAG,wBAAwB,CAAC,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC,CAAC;oBAC9D,oBAAoB,GAAG,wBAAwB,CAAC,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC,CAAC;oBAExE,MAAM,CAAC,MAAM,CAAC,gBAAgB,EAAE,mBAAmB,IAAI,kBAAkB,CAAC,CAAC;oBAErE,kBAAkB,GAAG,IAAA,+BAAiB,GAAE,CAAC;oBAMzC,iBAAiB,GAAG,mBAAmB;wBAC3C,CAAC,CAAC,CAAC,KAAK,CAAC;wBACT,CAAC,CAAC,kBAAkB;4BACpB,CAAC,CAAC,CAAC,KAAK,EAAE,KAAK,CAAC;4BAChB,CAAC,CAAC,SAAS,CAAC;oBAEV,mBAAmB,GAAG,qBAAqB;wBAC7C,CAAC,CAAC,CAAC,OAAO,CAAC;wBACX,CAAC,CAAC,oBAAoB;4BACtB,CAAC,CAAC,CAAC,KAAK,EAAE,OAAO,CAAC;4BAClB,CAAC,CAAC,SAAS,CAAC;oBAEd,oFAAoF;oBACpF,IAAI,CAAC,iBAAiB,IAAI,CAAC,mBAAmB,EAAE;wBACxC,sBAAsB,GAAG,eAAe;4BAC5C,CAAC,CAAC,CAAC,KAAK,EAAE,OAAO,CAAC;4BAClB,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC;wBACd,EAAE,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,OAAT,IAAI,iBAAM,OAAO,CAAC,GAAG,EAAE,GAAK,sBAAsB,WAAG;4BAChE,SAAS,EAAE,IAAI;yBAChB,CAAC,CAAC;wBAEH,mBAAmB,GAAG,sBAAsB,CAAC;qBAC9C;yBAEG,iBAAiB,EAAjB,wBAAiB;oBACb,mBAAmB,GAAG,IAAA,wCAA4B,EAAC;wBACvD,UAAU,YAAA;wBACV,OAAO,EAAE,eAAe,CAAC,YAAY,CAAC,IAAI;wBAC1C,SAAS,EAAE,eAAe,CAAC,EAAE;wBAC7B,SAAS,WAAA;wBACT,SAAS,EAAE,IAAI;qBAChB,CAAC,CAAC;oBAEH,EAAE,CAAC,SAAS,CACV,IAAI,CAAC,IAAI,OAAT,IAAI,+BAAM,OAAO,CAAC,GAAG,EAAE,GAAK,iBAAiB,WAAE,qBAAqB,YACpE;wBACE,SAAS,EAAE,IAAI;qBAChB,CACF,CAAC;oBAEI,eAAe,GAAG,eAAQ,kBAAkB,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,CAAE,CAAC;oBAErE,qBAAM,EAAE,CAAC,QAAQ,CAAC,SAAS,CACzB,IAAI,CAAC,IAAI,OAAT,IAAI,+BACF,OAAO,CAAC,GAAG,EAAE,GACV,iBAAiB,WACpB,qBAAqB;4BACrB,eAAe,YAEjB,mBAAmB,EACnB,EAAE,QAAQ,EAAE,MAAM,EAAE,IAAI,EAAE,GAAG,EAAE,CAChC,EAAA;;oBATD,SASC,CAAC;oBAEF,iBAAK,CAAC,GAAG,CAAC,OAAO,CACf,kBAAW,eAAK,CAAC,IAAI,CACnB,IAAI,CAAC,IAAI,OAAT,IAAI,kCAAS,iBAAiB,WAAE,qBAAqB,EAAE,eAAe,WACvE,MAAG,CACL,CAAC;oBAEF,EAAE,CAAC,SAAS,CACV,IAAI,CAAC,IAAI,OAAT,IAAI,+BACF,OAAO,CAAC,GAAG,EAAE,GACV,iBAAiB,WACpB,KAAK;wBACL,oBAAoB,YAEtB;wBACE,SAAS,EAAE,IAAI;qBAChB,CACF,CAAC;oBAEI,gBAAgB,GAAG,gBAAS,kBAAkB,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAE,CAAC;oBAErE,qBAAM,EAAE,CAAC,QAAQ,CAAC,SAAS,CACzB,IAAI,CAAC,IAAI,OAAT,IAAI,+BACF,OAAO,CAAC,GAAG,EAAE,GACV,iBAAiB,WACpB,KAAK;4BACL,oBAAoB;4BACpB,gBAAgB,YAElB,IAAA,0CAA8B,GAAE,EAChC,EAAE,QAAQ,EAAE,MAAM,EAAE,IAAI,EAAE,GAAG,EAAE,CAChC,EAAA;;oBAVD,SAUC,CAAC;oBAEF,iBAAK,CAAC,GAAG,CAAC,OAAO,CACf,kBAAW,eAAK,CAAC,IAAI,CACnB,IAAI,CAAC,IAAI,OAAT,IAAI,kCACC,iBAAiB,WACpB,KAAK;wBACL,oBAAoB;wBACpB,gBAAgB,WAEnB,MAAG,CACL,CAAC;;;yBACO,mBAAmB,EAAnB,wBAAmB;oBACtB,mBAAmB,GAAG,IAAA,wCAA4B,EAAC;wBACvD,UAAU,YAAA;wBACV,OAAO,EAAE,eAAe,CAAC,YAAY,CAAC,IAAI;wBAC1C,SAAS,EAAE,eAAe,CAAC,EAAE;wBAC7B,SAAS,WAAA;wBACT,SAAS,EAAE,KAAK;qBACjB,CAAC,CAAC;oBAEH,qBAAM,EAAE,CAAC,QAAQ,CAAC,SAAS,CACzB,IAAI,CAAC,IAAI,OAAT,IAAI,+BACF,OAAO,CAAC,GAAG,EAAE,GACV,mBAAmB,WACtB,yBAAyB,YAE3B,mBAAmB,EACnB,EAAE,QAAQ,EAAE,MAAM,EAAE,IAAI,EAAE,GAAG,EAAE,CAChC,EAAA;;oBARD,SAQC,CAAC;oBAEF,iBAAK,CAAC,GAAG,CAAC,OAAO,CACf,kBAAW,eAAK,CAAC,IAAI,CACnB,IAAI,CAAC,IAAI,OAAT,IAAI,kCAAS,mBAAmB,WAAE,wBAAwB,WAC3D,MAAG,CACL,CAAC;oBAEF,EAAE,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,OAAT,IAAI,+BAAM,OAAO,CAAC,GAAG,EAAE,GAAK,mBAAmB,WAAE,KAAK,YAAG;wBACpE,SAAS,EAAE,IAAI;qBAChB,CAAC,CAAC;oBAEH,qBAAM,EAAE,CAAC,QAAQ,CAAC,SAAS,CACzB,IAAI,CAAC,IAAI,OAAT,IAAI,+BACF,OAAO,CAAC,GAAG,EAAE,GACV,mBAAmB,WACtB,KAAK;4BACL,uBAAuB,YAEzB,IAAA,4CAAgC,GAAE,EAClC,EAAE,QAAQ,EAAE,MAAM,EAAE,IAAI,EAAE,GAAG,EAAE,CAChC,EAAA;;oBATD,SASC,CAAC;oBAEF,iBAAK,CAAC,GAAG,CAAC,OAAO,CACf,kBAAW,eAAK,CAAC,IAAI,CACnB,IAAI,CAAC,IAAI,OAAT,IAAI,kCAAS,mBAAmB,WAAE,KAAK,EAAE,uBAAuB,WACjE,MAAG,CACL,CAAC;;;;;;CAEL;AAED;;;;GAIG;AACH,SAAe,uBAAuB;;;;;wBAC7B,qBAAM,IAAA,qBAAS,EAAC,wBAAwB,EAAE;;;;wCAClB,qBAAM,IAAA,8BAAgB,EACjD,iBAAK,CAAC,MAAM,CAAC;wCACX,OAAO,EACL,uGAAuG;wCACzG,OAAO,EAAE;4CACP;gDACE,KAAK,EAAE,KAAK;gDACZ,KAAK,EAAE,IAAI;gDACX,IAAI,EAAE,gDAAgD;6CACvD;4CACD;gDACE,KAAK,EAAE,IAAI;gDACX,KAAK,EAAE,KAAK;gDACZ,IAAI,EAAE,uFAAuF;6CAC9F;yCACF;wCACD,YAAY,EAAE,IAAI;qCACnB,CAAC,CACH,EAAA;;oCAlBK,oBAAoB,GAAG,SAkB5B;oCAED,IAAI,CAAC,oBAAoB,EAAE;wCACzB,iBAAK,CAAC,GAAG,CAAC,IAAI,CACZ,0EAA0E,CAC3E,CAAC;qCACH;oCAED,sBAAO,oBAAoB,EAAC;;;yBAC7B,CAAC,EAAA;wBA5BF,sBAAO,SA4BL,EAAC;;;;CACJ;AAED,SAAe,uCAAuC;;;;;wBAC7C,qBAAM,IAAA,qBAAS,EAAC,uCAAuC,EAAE;;;;wCACjB,qBAAM,IAAA,8BAAgB,EACjE,iBAAK,CAAC,MAAM,CAAC;wCACX,OAAO,EACL,0GAA0G;wCAC5G,OAAO,EAAE;4CACP;gDACE,KAAK,EAAE,KAAK;gDACZ,KAAK,EAAE,IAAI;gDACX,IAAI,EAAE,yDAAyD;6CAChE;4CACD;gDACE,KAAK,EAAE,IAAI;gDACX,KAAK,EAAE,KAAK;gDACZ,IAAI,EAAE,8CAA8C;6CACrD;yCACF;wCACD,YAAY,EAAE,IAAI;qCACnB,CAAC,CACH,EAAA;;oCAlBK,oCAAoC,GAAG,SAkB5C;oCAED,sBAAO,oCAAoC,EAAC;;;yBAC7C,CAAC,EAAA;wBAtBF,sBAAO,SAsBL,EAAC;;;;CACJ;AAED;;GAEG;AACH,SAAe,6BAA6B;;;;;;;oBAGnB,qBAAM,EAAE,CAAC,QAAQ,CAAC,QAAQ,CAC7C,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,cAAc,CAAC,EACxC,MAAM,CACP,EAAA;;oBAHD,kBAAkB,GAAG,SAGpB,CAAC;;;;oBAEF,sBAAO,IAAI,EAAC;wBAGd,sBAAO,kBAAkB,CAAC,QAAQ,CAAC,SAAS,CAAC,EAAC;;;;CAC/C","sourcesContent":["/* eslint-disable max-lines */\n// @ts-ignore - clack is ESM and TS complains about that. It works though\nimport clack from '@clack/prompts';\nimport chalk from 'chalk';\nimport * as fs from 'fs';\n// @ts-ignore - magicast is ESM and TS complains about that. It works though\nimport { builders, generateCode, parseModule } from 'magicast';\nimport * as path from 'path';\n\nimport * as Sentry from '@sentry/node';\n\nimport {\n abort,\n abortIfCancelled,\n addDotEnvSentryBuildPluginFile,\n askShouldCreateExamplePage,\n confirmContinueIfNoOrDirtyGitRepo,\n createNewConfigFile,\n ensurePackageIsInstalled,\n featureSelectionPrompt,\n getOrAskForProjectData,\n getPackageDotJson,\n getPackageManager,\n installPackage,\n isUsingTypeScript,\n printWelcome,\n runPrettierIfInstalled,\n showCopyPasteInstructions,\n} from '../utils/clack-utils';\nimport type { SentryProjectData, WizardOptions } from '../utils/types';\nimport {\n getFullUnderscoreErrorCopyPasteSnippet,\n getGlobalErrorCopyPasteSnippet,\n getInstrumentationHookContent,\n getInstrumentationHookCopyPasteSnippet,\n getNextjsConfigCjsAppendix,\n getNextjsConfigCjsTemplate,\n getNextjsConfigEsmCopyPasteSnippet,\n getSentryConfigContents,\n getSentryDefaultGlobalErrorPage,\n getSentryDefaultUnderscoreErrorPage,\n getSentryExamplePagesDirApiRoute,\n getSentryExampleAppDirApiRoute,\n getSentryExamplePageContents,\n getSimpleUnderscoreErrorCopyPasteSnippet,\n getWithSentryConfigOptionsTemplate,\n getNextjsConfigMjsTemplate,\n} from './templates';\nimport { traceStep, withTelemetry } from '../telemetry';\nimport { getPackageVersion, hasPackageInstalled } from '../utils/package-json';\nimport { getNextJsVersionBucket } from './utils';\nimport { configureCI } from '../sourcemaps/sourcemaps-wizard';\n\nexport function runNextjsWizard(options: WizardOptions) {\n return withTelemetry(\n {\n enabled: options.telemetryEnabled,\n integration: 'nextjs',\n wizardOptions: options,\n },\n () => runNextjsWizardWithTelemetry(options),\n );\n}\n\nexport async function runNextjsWizardWithTelemetry(\n options: WizardOptions,\n): Promise<void> {\n printWelcome({\n wizardName: 'Sentry Next.js Wizard',\n promoCode: options.promoCode,\n telemetryEnabled: options.telemetryEnabled,\n });\n\n const typeScriptDetected = isUsingTypeScript();\n\n await confirmContinueIfNoOrDirtyGitRepo();\n\n const packageJson = await getPackageDotJson();\n\n await ensurePackageIsInstalled(packageJson, 'next', 'Next.js');\n\n const nextVersion = getPackageVersion('next', packageJson);\n Sentry.setTag('nextjs-version', getNextJsVersionBucket(nextVersion));\n\n const { selectedProject, authToken, selfHosted, sentryUrl } =\n await getOrAskForProjectData(options, 'javascript-nextjs');\n\n const sdkAlreadyInstalled = hasPackageInstalled(\n '@sentry/nextjs',\n packageJson,\n );\n Sentry.setTag('sdk-already-installed', sdkAlreadyInstalled);\n\n const { packageManager: packageManagerFromInstallStep } =\n await installPackage({\n packageName: '@sentry/nextjs@^8',\n packageNameDisplayLabel: '@sentry/nextjs',\n alreadyInstalled: !!packageJson?.dependencies?.['@sentry/nextjs'],\n });\n\n await traceStep('configure-sdk', async () => {\n const tunnelRoute = await askShouldSetTunnelRoute();\n const reactComponentAnnotation =\n await askShouldEnableReactComponentAnnotation();\n\n await createOrMergeNextJsFiles(selectedProject, selfHosted, sentryUrl, {\n tunnelRoute,\n reactComponentAnnotation,\n });\n });\n\n await traceStep('create-underscoreerror-page', async () => {\n const srcDir = path.join(process.cwd(), 'src');\n const maybePagesDirPath = path.join(process.cwd(), 'pages');\n const maybeSrcPagesDirPath = path.join(srcDir, 'pages');\n\n const pagesLocation =\n fs.existsSync(maybePagesDirPath) &&\n fs.lstatSync(maybePagesDirPath).isDirectory()\n ? ['pages']\n : fs.existsSync(maybeSrcPagesDirPath) &&\n fs.lstatSync(maybeSrcPagesDirPath).isDirectory()\n ? ['src', 'pages']\n : undefined;\n\n if (!pagesLocation) {\n return;\n }\n\n const underscoreErrorPageFile = fs.existsSync(\n path.join(process.cwd(), ...pagesLocation, '_error.tsx'),\n )\n ? '_error.tsx'\n : fs.existsSync(path.join(process.cwd(), ...pagesLocation, '_error.ts'))\n ? '_error.ts'\n : fs.existsSync(path.join(process.cwd(), ...pagesLocation, '_error.jsx'))\n ? '_error.jsx'\n : fs.existsSync(path.join(process.cwd(), ...pagesLocation, '_error.js'))\n ? '_error.js'\n : undefined;\n\n if (!underscoreErrorPageFile) {\n await fs.promises.writeFile(\n path.join(process.cwd(), ...pagesLocation, '_error.jsx'),\n getSentryDefaultUnderscoreErrorPage(),\n { encoding: 'utf8', flag: 'w' },\n );\n\n clack.log.success(\n `Created ${chalk.cyan(path.join(...pagesLocation, '_error.jsx'))}.`,\n );\n } else if (\n fs\n .readFileSync(\n path.join(process.cwd(), ...pagesLocation, underscoreErrorPageFile),\n 'utf8',\n )\n .includes('getInitialProps')\n ) {\n clack.log.info(\n `It seems like you already have a custom error page.\\n\\nPlease put the following function call in the ${chalk.bold(\n 'getInitialProps',\n )}\\nmethod of your custom error page at ${chalk.bold(\n path.join(...pagesLocation, underscoreErrorPageFile),\n )}:`,\n );\n\n // eslint-disable-next-line no-console\n console.log(getSimpleUnderscoreErrorCopyPasteSnippet());\n\n const shouldContinue = await abortIfCancelled(\n clack.confirm({\n message: `Did you modify your ${chalk.cyan(\n path.join(...pagesLocation, underscoreErrorPageFile),\n )} file as described above?`,\n active: 'Yes',\n inactive: 'No, get me out of here',\n }),\n );\n\n if (!shouldContinue) {\n await abort();\n }\n } else {\n clack.log.info(\n `It seems like you already have a custom error page.\\n\\nPlease add the following code to your custom error page\\nat ${chalk.cyan(\n path.join(...pagesLocation, underscoreErrorPageFile),\n )}:`,\n );\n\n // eslint-disable-next-line no-console\n console.log(\n getFullUnderscoreErrorCopyPasteSnippet(\n underscoreErrorPageFile === '_error.ts' ||\n underscoreErrorPageFile === '_error.tsx',\n ),\n );\n\n const shouldContinue = await abortIfCancelled(\n clack.confirm({\n message: `Did you add the code to your ${chalk.cyan(\n path.join(...pagesLocation, underscoreErrorPageFile),\n )} file as described above?`,\n active: 'Yes',\n inactive: 'No, get me out of here',\n }),\n );\n\n if (!shouldContinue) {\n await abort();\n }\n }\n });\n\n await traceStep('create-global-error-page', async () => {\n const maybeAppDirPath = path.join(process.cwd(), 'app');\n const maybeSrcAppDirPath = path.join(process.cwd(), 'src', 'app');\n\n const appDirLocation =\n fs.existsSync(maybeAppDirPath) &&\n fs.lstatSync(maybeAppDirPath).isDirectory()\n ? ['app']\n : fs.existsSync(maybeSrcAppDirPath) &&\n fs.lstatSync(maybeSrcAppDirPath).isDirectory()\n ? ['src', 'app']\n : undefined;\n\n if (!appDirLocation) {\n return;\n }\n\n const globalErrorPageFile = fs.existsSync(\n path.join(process.cwd(), ...appDirLocation, 'global-error.tsx'),\n )\n ? 'global-error.tsx'\n : fs.existsSync(\n path.join(process.cwd(), ...appDirLocation, 'global-error.ts'),\n )\n ? 'global-error.ts'\n : fs.existsSync(\n path.join(process.cwd(), ...appDirLocation, 'global-error.jsx'),\n )\n ? 'global-error.jsx'\n : fs.existsSync(\n path.join(process.cwd(), ...appDirLocation, 'global-error.js'),\n )\n ? 'global-error.js'\n : undefined;\n\n if (!globalErrorPageFile) {\n const newGlobalErrorFileName = `global-error.${\n typeScriptDetected ? 'tsx' : 'jsx'\n }`;\n\n await fs.promises.writeFile(\n path.join(process.cwd(), ...appDirLocation, newGlobalErrorFileName),\n getSentryDefaultGlobalErrorPage(typeScriptDetected),\n { encoding: 'utf8', flag: 'w' },\n );\n\n clack.log.success(\n `Created ${chalk.cyan(\n path.join(...appDirLocation, newGlobalErrorFileName),\n )}.`,\n );\n } else {\n clack.log.info(\n `It seems like you already have a custom error page for your app directory.\\n\\nPlease add the following code to your custom error page\\nat ${chalk.cyan(\n path.join(...appDirLocation, globalErrorPageFile),\n )}:\\n`,\n );\n\n // eslint-disable-next-line no-console\n console.log(\n getGlobalErrorCopyPasteSnippet(\n globalErrorPageFile === 'global-error.ts' ||\n globalErrorPageFile === 'global-error.tsx',\n ),\n );\n\n const shouldContinue = await abortIfCancelled(\n clack.confirm({\n message: `Did you add the code to your ${chalk.cyan(\n path.join(...appDirLocation, globalErrorPageFile),\n )} file as described above?`,\n active: 'Yes',\n inactive: 'No, get me out of here',\n }),\n );\n\n if (!shouldContinue) {\n await abort();\n }\n }\n });\n\n const shouldCreateExamplePage = await askShouldCreateExamplePage();\n if (shouldCreateExamplePage) {\n await traceStep('create-example-page', async () =>\n createExamplePage(selfHosted, selectedProject, sentryUrl),\n );\n }\n\n await addDotEnvSentryBuildPluginFile(authToken);\n\n const isLikelyUsingTurbopack = await checkIfLikelyIsUsingTurbopack();\n if (isLikelyUsingTurbopack || isLikelyUsingTurbopack === null) {\n await abortIfCancelled(\n clack.select({\n message: `Warning: The Sentry SDK doesn't yet fully support Turbopack in dev mode. The SDK will not be loaded in the browser, and serverside instrumentation will be inaccurate or incomplete. Production builds will still fully work. ${chalk.bold(\n `To continue this setup, if you are using Turbopack, temporarily remove \\`--turbo\\` from your dev command until you have verified the SDK is working as expected.`,\n )}`,\n options: [\n {\n label: 'I understand.',\n hint: 'press enter',\n value: true,\n },\n ],\n initialValue: true,\n }),\n );\n }\n\n const mightBeUsingVercel = fs.existsSync(\n path.join(process.cwd(), 'vercel.json'),\n );\n\n if (mightBeUsingVercel) {\n clack.log.info(\n \"▲ It seems like you're using Vercel. We recommend using the Sentry Vercel integration to set up an auth token for Vercel deployments: https://vercel.com/integrations/sentry\",\n );\n } else {\n await traceStep('configure-ci', () => configureCI('nextjs', authToken));\n }\n\n const packageManagerForOutro =\n packageManagerFromInstallStep ?? (await getPackageManager());\n await runPrettierIfInstalled();\n\n clack.outro(`\n${chalk.green('Successfully installed the Sentry Next.js SDK!')} ${\n shouldCreateExamplePage\n ? `\\n\\nYou can validate your setup by (re)starting your dev environment (e.g. ${chalk.cyan(\n `${packageManagerForOutro.runScriptCommand} dev`,\n )}) and visiting ${chalk.cyan('\"/sentry-example-page\"')}`\n : ''\n }${\n shouldCreateExamplePage && isLikelyUsingTurbopack\n ? `\\nDon't forget to remove \\`--turbo\\` from your dev command until you have verified the SDK is working. You can safely add it back afterwards.`\n : ''\n }\n\n${chalk.dim(\n 'If you encounter any issues, let us know here: https://github.com/getsentry/sentry-javascript/issues',\n)}`);\n}\n\ntype SDKConfigOptions = {\n tunnelRoute: boolean;\n reactComponentAnnotation: boolean;\n};\n\nasync function createOrMergeNextJsFiles(\n selectedProject: SentryProjectData,\n selfHosted: boolean,\n sentryUrl: string,\n sdkConfigOptions: SDKConfigOptions,\n) {\n const selectedFeatures = await featureSelectionPrompt([\n {\n id: 'performance',\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 id: 'replay',\n prompt: `Do you want to enable ${chalk.bold(\n 'Sentry Session Replay',\n )} to get a video-like reproduction of errors during a user session?`,\n enabledHint: 'recommended, but increases bundle size',\n },\n ] as const);\n\n const typeScriptDetected = isUsingTypeScript();\n\n const configVariants = ['server', 'client', 'edge'] as const;\n\n for (const configVariant of configVariants) {\n await traceStep(`create-sentry-${configVariant}-config`, async () => {\n const jsConfig = `sentry.${configVariant}.config.js`;\n const tsConfig = `sentry.${configVariant}.config.ts`;\n\n const jsConfigExists = fs.existsSync(path.join(process.cwd(), jsConfig));\n const tsConfigExists = fs.existsSync(path.join(process.cwd(), tsConfig));\n\n let shouldWriteFile = true;\n\n if (jsConfigExists || tsConfigExists) {\n const existingConfigs = [];\n\n if (jsConfigExists) {\n existingConfigs.push(jsConfig);\n }\n\n if (tsConfigExists) {\n existingConfigs.push(tsConfig);\n }\n\n const overwriteExistingConfigs = await abortIfCancelled(\n clack.confirm({\n message: `Found existing Sentry ${configVariant} config (${existingConfigs.join(\n ', ',\n )}). Overwrite ${existingConfigs.length > 1 ? 'them' : 'it'}?`,\n }),\n );\n Sentry.setTag(\n `overwrite-${configVariant}-config`,\n overwriteExistingConfigs,\n );\n\n shouldWriteFile = overwriteExistingConfigs;\n\n if (overwriteExistingConfigs) {\n if (jsConfigExists) {\n fs.unlinkSync(path.join(process.cwd(), jsConfig));\n clack.log.warn(`Removed existing ${chalk.cyan(jsConfig)}.`);\n }\n if (tsConfigExists) {\n fs.unlinkSync(path.join(process.cwd(), tsConfig));\n clack.log.warn(`Removed existing ${chalk.cyan(tsConfig)}.`);\n }\n }\n }\n\n if (shouldWriteFile) {\n await fs.promises.writeFile(\n path.join(process.cwd(), typeScriptDetected ? tsConfig : jsConfig),\n getSentryConfigContents(\n selectedProject.keys[0].dsn.public,\n configVariant,\n selectedFeatures,\n ),\n { encoding: 'utf8', flag: 'w' },\n );\n clack.log.success(\n `Created fresh ${chalk.cyan(\n typeScriptDetected ? tsConfig : jsConfig,\n )}.`,\n );\n Sentry.setTag(`created-${configVariant}-config`, true);\n }\n });\n }\n\n await traceStep('setup-instrumentation-hook', async () => {\n const hasRootAppDirectory = hasDirectoryPathFromRoot('app');\n const hasRootPagesDirectory = hasDirectoryPathFromRoot('pages');\n const hasSrcDirectory = hasDirectoryPathFromRoot('src');\n\n let instrumentationHookLocation: 'src' | 'root' | 'does-not-exist';\n\n const instrumentationTsExists = fs.existsSync(\n path.join(process.cwd(), 'instrumentation.ts'),\n );\n const instrumentationJsExists = fs.existsSync(\n path.join(process.cwd(), 'instrumentation.js'),\n );\n const srcInstrumentationTsExists = fs.existsSync(\n path.join(process.cwd(), 'src', 'instrumentation.ts'),\n );\n const srcInstrumentationJsExists = fs.existsSync(\n path.join(process.cwd(), 'src', 'instrumentation.js'),\n );\n\n // https://nextjs.org/docs/app/building-your-application/configuring/src-directory\n // https://nextjs.org/docs/app/api-reference/file-conventions/instrumentation\n // The logic for where Next.js picks up the instrumentation file is as follows:\n // - If there is either an `app` folder or a `pages` folder in the root directory of your Next.js app, Next.js looks\n // for an `instrumentation.ts` file in the root of the Next.js app.\n // - Otherwise, if there is neither an `app` folder or a `pages` folder in the rood directory of your Next.js app,\n // AND if there is an `src` folder, Next.js will look for the `instrumentation.ts` file in the `src` folder.\n if (hasRootPagesDirectory || hasRootAppDirectory) {\n if (instrumentationJsExists || instrumentationTsExists) {\n instrumentationHookLocation = 'root';\n } else {\n instrumentationHookLocation = 'does-not-exist';\n }\n } else {\n if (srcInstrumentationTsExists || srcInstrumentationJsExists) {\n instrumentationHookLocation = 'src';\n } else {\n instrumentationHookLocation = 'does-not-exist';\n }\n }\n\n const newInstrumentationFileName = `instrumentation.${\n typeScriptDetected ? 'ts' : 'js'\n }`;\n\n if (instrumentationHookLocation === 'does-not-exist') {\n let newInstrumentationHookLocation: 'root' | 'src';\n if (hasRootPagesDirectory || hasRootAppDirectory) {\n newInstrumentationHookLocation = 'root';\n } else if (hasSrcDirectory) {\n newInstrumentationHookLocation = 'src';\n } else {\n newInstrumentationHookLocation = 'root';\n }\n\n const newInstrumentationHookPath =\n newInstrumentationHookLocation === 'root'\n ? path.join(process.cwd(), newInstrumentationFileName)\n : path.join(process.cwd(), 'src', newInstrumentationFileName);\n\n const successfullyCreated = await createNewConfigFile(\n newInstrumentationHookPath,\n getInstrumentationHookContent(newInstrumentationHookLocation),\n );\n\n if (!successfullyCreated) {\n await showCopyPasteInstructions(\n newInstrumentationFileName,\n getInstrumentationHookCopyPasteSnippet(\n newInstrumentationHookLocation,\n ),\n );\n }\n } else {\n await showCopyPasteInstructions(\n srcInstrumentationTsExists || instrumentationTsExists\n ? 'instrumentation.ts'\n : srcInstrumentationJsExists || instrumentationJsExists\n ? 'instrumentation.js'\n : newInstrumentationFileName,\n getInstrumentationHookCopyPasteSnippet(instrumentationHookLocation),\n );\n }\n });\n\n await traceStep('setup-next-config', async () => {\n const withSentryConfigOptionsTemplate = getWithSentryConfigOptionsTemplate({\n orgSlug: selectedProject.organization.slug,\n projectSlug: selectedProject.slug,\n selfHosted,\n sentryUrl,\n tunnelRoute: sdkConfigOptions.tunnelRoute,\n reactComponentAnnotation: sdkConfigOptions.reactComponentAnnotation,\n });\n\n const nextConfigPossibleFilesMap = {\n js: 'next.config.js',\n mjs: 'next.config.mjs',\n cjs: 'next.config.cjs',\n ts: 'next.config.ts',\n mts: 'next.config.mts',\n cts: 'next.config.cts',\n };\n\n const foundNextConfigFile = Object.entries(nextConfigPossibleFilesMap).find(\n ([, fileName]) => fs.existsSync(path.join(process.cwd(), fileName)),\n );\n\n if (!foundNextConfigFile) {\n Sentry.setTag('next-config-strategy', 'create');\n\n // Try to figure out whether the user prefers ESM\n let isTypeModule = false;\n try {\n const packageJsonText = await fs.promises.readFile(\n path.join(process.cwd(), 'package.json'),\n 'utf8',\n );\n // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment\n const packageJson = JSON.parse(packageJsonText);\n // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access\n if (packageJson.type === 'module') {\n isTypeModule = true;\n }\n } catch {\n // noop\n }\n\n // We are creating `next.config.(m)js` files by default as they are supported by the most Next.js versions\n const configFilename = isTypeModule\n ? nextConfigPossibleFilesMap.mjs\n : nextConfigPossibleFilesMap.js;\n const configContent = isTypeModule\n ? getNextjsConfigMjsTemplate(withSentryConfigOptionsTemplate)\n : getNextjsConfigCjsTemplate(withSentryConfigOptionsTemplate);\n\n await fs.promises.writeFile(\n path.join(process.cwd(), configFilename),\n configContent,\n { encoding: 'utf8', flag: 'w' },\n );\n\n clack.log.success(\n `Created ${chalk.cyan(configFilename)} with Sentry configuration.`,\n );\n\n return;\n }\n\n const [foundNextConfigFileType, foundNextConfigFileFilename] =\n foundNextConfigFile;\n\n if (foundNextConfigFileType === 'js' || foundNextConfigFileType === 'cjs') {\n Sentry.setTag('next-config-strategy', 'modify');\n\n const nextConfigCjsContent = fs.readFileSync(\n path.join(process.cwd(), foundNextConfigFileFilename),\n 'utf8',\n );\n\n const probablyIncludesSdk =\n nextConfigCjsContent.includes('@sentry/nextjs') &&\n nextConfigCjsContent.includes('withSentryConfig');\n\n let shouldInject = true;\n\n if (probablyIncludesSdk) {\n const injectAnyhow = await abortIfCancelled(\n clack.confirm({\n message: `${chalk.cyan(\n foundNextConfigFileFilename,\n )} already contains Sentry SDK configuration. Should the wizard modify it anyways?`,\n }),\n );\n\n shouldInject = injectAnyhow;\n }\n\n if (shouldInject) {\n await fs.promises.appendFile(\n path.join(process.cwd(), foundNextConfigFileFilename),\n getNextjsConfigCjsAppendix(withSentryConfigOptionsTemplate),\n 'utf8',\n );\n\n clack.log.success(\n `Added Sentry configuration to ${chalk.cyan(\n foundNextConfigFileFilename,\n )}. ${chalk.dim('(you probably want to clean this up a bit!)')}`,\n );\n }\n\n Sentry.setTag('next-config-mod-result', 'success');\n }\n\n if (\n foundNextConfigFileType === 'mjs' ||\n foundNextConfigFileType === 'mts' ||\n foundNextConfigFileType === 'cts' ||\n foundNextConfigFileType === 'ts'\n ) {\n const nextConfigMjsContent = fs.readFileSync(\n path.join(process.cwd(), foundNextConfigFileFilename),\n 'utf8',\n );\n\n const probablyIncludesSdk =\n nextConfigMjsContent.includes('@sentry/nextjs') &&\n nextConfigMjsContent.includes('withSentryConfig');\n\n let shouldInject = true;\n\n if (probablyIncludesSdk) {\n const injectAnyhow = await abortIfCancelled(\n clack.confirm({\n message: `${chalk.cyan(\n foundNextConfigFileFilename,\n )} already contains Sentry SDK configuration. Should the wizard modify it anyways?`,\n }),\n );\n\n shouldInject = injectAnyhow;\n }\n\n try {\n if (shouldInject) {\n const mod = parseModule(nextConfigMjsContent);\n mod.imports.$add({\n from: '@sentry/nextjs',\n imported: 'withSentryConfig',\n local: 'withSentryConfig',\n });\n // eslint-disable-next-line @typescript-eslint/no-unsafe-argument, @typescript-eslint/no-unsafe-member-access\n const expressionToWrap = generateCode(mod.exports.default.$ast).code;\n // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment\n mod.exports.default = builders.raw(`withSentryConfig(\n ${expressionToWrap},\n ${withSentryConfigOptionsTemplate}\n)`);\n const newCode = mod.generate().code;\n\n await fs.promises.writeFile(\n path.join(process.cwd(), foundNextConfigFileFilename),\n newCode,\n {\n encoding: 'utf8',\n flag: 'w',\n },\n );\n clack.log.success(\n `Added Sentry configuration to ${chalk.cyan(\n foundNextConfigFileFilename,\n )}. ${chalk.dim('(you probably want to clean this up a bit!)')}`,\n );\n\n Sentry.setTag('next-config-mod-result', 'success');\n }\n } catch {\n Sentry.setTag('next-config-mod-result', 'fail');\n clack.log.warn(\n chalk.yellow(\n `Something went wrong writing to ${chalk.cyan(\n foundNextConfigFileFilename,\n )}.`,\n ),\n );\n clack.log.info(\n `Please put the following code snippet into ${chalk.cyan(\n foundNextConfigFileFilename,\n )}: ${chalk.dim('You probably have to clean it up a bit.')}\\n`,\n );\n\n // eslint-disable-next-line no-console\n console.log(\n getNextjsConfigEsmCopyPasteSnippet(withSentryConfigOptionsTemplate),\n );\n\n const shouldContinue = await abortIfCancelled(\n clack.confirm({\n message: `Are you done putting the snippet above into ${chalk.cyan(\n foundNextConfigFileFilename,\n )}?`,\n active: 'Yes',\n inactive: 'No, get me out of here',\n }),\n );\n\n if (!shouldContinue) {\n await abort();\n }\n }\n }\n });\n}\n\nfunction hasDirectoryPathFromRoot(dirnameOrDirs: string | string[]): boolean {\n const dirPath = Array.isArray(dirnameOrDirs)\n ? path.join(process.cwd(), ...dirnameOrDirs)\n : path.join(process.cwd(), dirnameOrDirs);\n\n return fs.existsSync(dirPath) && fs.lstatSync(dirPath).isDirectory();\n}\n\nasync function createExamplePage(\n selfHosted: boolean,\n selectedProject: SentryProjectData,\n sentryUrl: string,\n): Promise<void> {\n const hasSrcDirectory = hasDirectoryPathFromRoot('src');\n const hasRootAppDirectory = hasDirectoryPathFromRoot('app');\n const hasRootPagesDirectory = hasDirectoryPathFromRoot('pages');\n const hasSrcAppDirectory = hasDirectoryPathFromRoot(['src', 'app']);\n const hasSrcPagesDirectory = hasDirectoryPathFromRoot(['src', 'pages']);\n\n Sentry.setTag('nextjs-app-dir', hasRootAppDirectory || hasSrcAppDirectory);\n\n const typeScriptDetected = isUsingTypeScript();\n\n // If `pages` or an `app` directory exists in the root, we'll put the example page there.\n // `app` directory takes priority over `pages` directory when they coexist, so we prioritize that.\n // https://nextjs.org/docs/app/building-your-application/routing#the-app-router\n\n const appFolderLocation = hasRootAppDirectory\n ? ['app']\n : hasSrcAppDirectory\n ? ['src', 'app']\n : undefined;\n\n let pagesFolderLocation = hasRootPagesDirectory\n ? ['pages']\n : hasSrcPagesDirectory\n ? ['src', 'pages']\n : undefined;\n\n // If the user has neither pages nor app directory we create a pages folder for them\n if (!appFolderLocation && !pagesFolderLocation) {\n const newPagesFolderLocation = hasSrcDirectory\n ? ['src', 'pages']\n : ['pages'];\n fs.mkdirSync(path.join(process.cwd(), ...newPagesFolderLocation), {\n recursive: true,\n });\n\n pagesFolderLocation = newPagesFolderLocation;\n }\n\n if (appFolderLocation) {\n const examplePageContents = getSentryExamplePageContents({\n selfHosted,\n orgSlug: selectedProject.organization.slug,\n projectId: selectedProject.id,\n sentryUrl,\n useClient: true,\n });\n\n fs.mkdirSync(\n path.join(process.cwd(), ...appFolderLocation, 'sentry-example-page'),\n {\n recursive: true,\n },\n );\n\n const newPageFileName = `page.${typeScriptDetected ? 'tsx' : 'jsx'}`;\n\n await fs.promises.writeFile(\n path.join(\n process.cwd(),\n ...appFolderLocation,\n 'sentry-example-page',\n newPageFileName,\n ),\n examplePageContents,\n { encoding: 'utf8', flag: 'w' },\n );\n\n clack.log.success(\n `Created ${chalk.cyan(\n path.join(...appFolderLocation, 'sentry-example-page', newPageFileName),\n )}.`,\n );\n\n fs.mkdirSync(\n path.join(\n process.cwd(),\n ...appFolderLocation,\n 'api',\n 'sentry-example-api',\n ),\n {\n recursive: true,\n },\n );\n\n const newRouteFileName = `route.${typeScriptDetected ? 'ts' : 'js'}`;\n\n await fs.promises.writeFile(\n path.join(\n process.cwd(),\n ...appFolderLocation,\n 'api',\n 'sentry-example-api',\n newRouteFileName,\n ),\n getSentryExampleAppDirApiRoute(),\n { encoding: 'utf8', flag: 'w' },\n );\n\n clack.log.success(\n `Created ${chalk.cyan(\n path.join(\n ...appFolderLocation,\n 'api',\n 'sentry-example-api',\n newRouteFileName,\n ),\n )}.`,\n );\n } else if (pagesFolderLocation) {\n const examplePageContents = getSentryExamplePageContents({\n selfHosted,\n orgSlug: selectedProject.organization.slug,\n projectId: selectedProject.id,\n sentryUrl,\n useClient: false,\n });\n\n await fs.promises.writeFile(\n path.join(\n process.cwd(),\n ...pagesFolderLocation,\n 'sentry-example-page.jsx',\n ),\n examplePageContents,\n { encoding: 'utf8', flag: 'w' },\n );\n\n clack.log.success(\n `Created ${chalk.cyan(\n path.join(...pagesFolderLocation, 'sentry-example-page.js'),\n )}.`,\n );\n\n fs.mkdirSync(path.join(process.cwd(), ...pagesFolderLocation, 'api'), {\n recursive: true,\n });\n\n await fs.promises.writeFile(\n path.join(\n process.cwd(),\n ...pagesFolderLocation,\n 'api',\n 'sentry-example-api.js',\n ),\n getSentryExamplePagesDirApiRoute(),\n { encoding: 'utf8', flag: 'w' },\n );\n\n clack.log.success(\n `Created ${chalk.cyan(\n path.join(...pagesFolderLocation, 'api', 'sentry-example-api.js'),\n )}.`,\n );\n }\n}\n\n/**\n * Ask users if they want to set the tunnelRoute option.\n * We can't set this by default because it potentially increases hosting bills.\n * It's valuable enough to for users to justify asking the additional question.\n */\nasync function askShouldSetTunnelRoute() {\n return await traceStep('ask-tunnelRoute-option', async () => {\n const shouldSetTunnelRoute = await abortIfCancelled(\n clack.select({\n message:\n 'Do you want to route Sentry requests in the browser through your Next.js server to avoid ad blockers?',\n options: [\n {\n label: 'Yes',\n value: true,\n hint: 'Can increase your server load and hosting bill',\n },\n {\n label: 'No',\n value: false,\n hint: 'Browser errors and events might be blocked by ad blockers before being sent to Sentry',\n },\n ],\n initialValue: true,\n }),\n );\n\n if (!shouldSetTunnelRoute) {\n clack.log.info(\n \"Sounds good! We'll leave the option commented for later, just in case :)\",\n );\n }\n\n return shouldSetTunnelRoute;\n });\n}\n\nasync function askShouldEnableReactComponentAnnotation() {\n return await traceStep('ask-react-component-annotation-option', async () => {\n const shouldEnableReactComponentAnnotation = await abortIfCancelled(\n clack.select({\n message:\n 'Do you want to enable React component annotations to make breadcrumbs and session replays more readable?',\n options: [\n {\n label: 'Yes',\n value: true,\n hint: 'Annotates React component names - increases bundle size',\n },\n {\n label: 'No',\n value: false,\n hint: 'Continue without React component annotations',\n },\n ],\n initialValue: true,\n }),\n );\n\n return shouldEnableReactComponentAnnotation;\n });\n}\n\n/**\n * Returns true or false depending on whether we think the user is using Turbopack. May return null in case we aren't sure.\n */\nasync function checkIfLikelyIsUsingTurbopack(): Promise<boolean | null> {\n let packageJsonContent: string;\n try {\n packageJsonContent = await fs.promises.readFile(\n path.join(process.cwd(), 'package.json'),\n 'utf8',\n );\n } catch {\n return null;\n }\n\n return packageJsonContent.includes('--turbo');\n}\n"]}
1
+ {"version":3,"file":"nextjs-wizard.js","sourceRoot":"","sources":["../../../src/nextjs/nextjs-wizard.ts"],"names":[],"mappings":"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","sourcesContent":["/* eslint-disable max-lines */\n// @ts-ignore - clack is ESM and TS complains about that. It works though\nimport clack from '@clack/prompts';\nimport chalk from 'chalk';\nimport * as fs from 'fs';\n// @ts-ignore - magicast is ESM and TS complains about that. It works though\nimport { builders, generateCode, parseModule } from 'magicast';\nimport * as path from 'path';\n\nimport * as Sentry from '@sentry/node';\n\nimport {\n abort,\n abortIfCancelled,\n addDotEnvSentryBuildPluginFile,\n askShouldCreateExamplePage,\n confirmContinueIfNoOrDirtyGitRepo,\n createNewConfigFile,\n ensurePackageIsInstalled,\n featureSelectionPrompt,\n getOrAskForProjectData,\n getPackageDotJson,\n getPackageManager,\n installPackage,\n isUsingTypeScript,\n printWelcome,\n runPrettierIfInstalled,\n showCopyPasteInstructions,\n} from '../utils/clack-utils';\nimport type { SentryProjectData, WizardOptions } from '../utils/types';\nimport {\n getFullUnderscoreErrorCopyPasteSnippet,\n getGlobalErrorCopyPasteSnippet,\n getInstrumentationHookContent,\n getInstrumentationHookCopyPasteSnippet,\n getNextjsConfigCjsAppendix,\n getNextjsConfigCjsTemplate,\n getNextjsConfigEsmCopyPasteSnippet,\n getSentryConfigContents,\n getSentryDefaultGlobalErrorPage,\n getSentryDefaultUnderscoreErrorPage,\n getSentryExamplePagesDirApiRoute,\n getSentryExampleAppDirApiRoute,\n getSentryExamplePageContents,\n getSimpleUnderscoreErrorCopyPasteSnippet,\n getWithSentryConfigOptionsTemplate,\n getNextjsConfigMjsTemplate,\n} from './templates';\nimport { traceStep, withTelemetry } from '../telemetry';\nimport { getPackageVersion, hasPackageInstalled } from '../utils/package-json';\nimport { getNextJsVersionBucket } from './utils';\nimport { configureCI } from '../sourcemaps/sourcemaps-wizard';\n\nexport function runNextjsWizard(options: WizardOptions) {\n return withTelemetry(\n {\n enabled: options.telemetryEnabled,\n integration: 'nextjs',\n wizardOptions: options,\n },\n () => runNextjsWizardWithTelemetry(options),\n );\n}\n\nexport async function runNextjsWizardWithTelemetry(\n options: WizardOptions,\n): Promise<void> {\n printWelcome({\n wizardName: 'Sentry Next.js Wizard',\n promoCode: options.promoCode,\n telemetryEnabled: options.telemetryEnabled,\n });\n\n const typeScriptDetected = isUsingTypeScript();\n\n await confirmContinueIfNoOrDirtyGitRepo();\n\n const packageJson = await getPackageDotJson();\n\n await ensurePackageIsInstalled(packageJson, 'next', 'Next.js');\n\n const nextVersion = getPackageVersion('next', packageJson);\n Sentry.setTag('nextjs-version', getNextJsVersionBucket(nextVersion));\n\n const { selectedProject, authToken, selfHosted, sentryUrl } =\n await getOrAskForProjectData(options, 'javascript-nextjs');\n\n const sdkAlreadyInstalled = hasPackageInstalled(\n '@sentry/nextjs',\n packageJson,\n );\n Sentry.setTag('sdk-already-installed', sdkAlreadyInstalled);\n\n const { packageManager: packageManagerFromInstallStep } =\n await installPackage({\n packageName: '@sentry/nextjs@^8',\n packageNameDisplayLabel: '@sentry/nextjs',\n alreadyInstalled: !!packageJson?.dependencies?.['@sentry/nextjs'],\n });\n\n await traceStep('configure-sdk', async () => {\n const tunnelRoute = await askShouldSetTunnelRoute();\n const reactComponentAnnotation =\n await askShouldEnableReactComponentAnnotation();\n\n await createOrMergeNextJsFiles(selectedProject, selfHosted, sentryUrl, {\n tunnelRoute,\n reactComponentAnnotation,\n });\n });\n\n await traceStep('create-underscoreerror-page', async () => {\n const srcDir = path.join(process.cwd(), 'src');\n const maybePagesDirPath = path.join(process.cwd(), 'pages');\n const maybeSrcPagesDirPath = path.join(srcDir, 'pages');\n\n const pagesLocation =\n fs.existsSync(maybePagesDirPath) &&\n fs.lstatSync(maybePagesDirPath).isDirectory()\n ? ['pages']\n : fs.existsSync(maybeSrcPagesDirPath) &&\n fs.lstatSync(maybeSrcPagesDirPath).isDirectory()\n ? ['src', 'pages']\n : undefined;\n\n if (!pagesLocation) {\n return;\n }\n\n const underscoreErrorPageFile = fs.existsSync(\n path.join(process.cwd(), ...pagesLocation, '_error.tsx'),\n )\n ? '_error.tsx'\n : fs.existsSync(path.join(process.cwd(), ...pagesLocation, '_error.ts'))\n ? '_error.ts'\n : fs.existsSync(path.join(process.cwd(), ...pagesLocation, '_error.jsx'))\n ? '_error.jsx'\n : fs.existsSync(path.join(process.cwd(), ...pagesLocation, '_error.js'))\n ? '_error.js'\n : undefined;\n\n if (!underscoreErrorPageFile) {\n await fs.promises.writeFile(\n path.join(process.cwd(), ...pagesLocation, '_error.jsx'),\n getSentryDefaultUnderscoreErrorPage(),\n { encoding: 'utf8', flag: 'w' },\n );\n\n clack.log.success(\n `Created ${chalk.cyan(path.join(...pagesLocation, '_error.jsx'))}.`,\n );\n } else if (\n fs\n .readFileSync(\n path.join(process.cwd(), ...pagesLocation, underscoreErrorPageFile),\n 'utf8',\n )\n .includes('getInitialProps')\n ) {\n clack.log.info(\n `It seems like you already have a custom error page.\\n\\nPlease put the following function call in the ${chalk.bold(\n 'getInitialProps',\n )}\\nmethod of your custom error page at ${chalk.bold(\n path.join(...pagesLocation, underscoreErrorPageFile),\n )}:`,\n );\n\n // eslint-disable-next-line no-console\n console.log(getSimpleUnderscoreErrorCopyPasteSnippet());\n\n const shouldContinue = await abortIfCancelled(\n clack.confirm({\n message: `Did you modify your ${chalk.cyan(\n path.join(...pagesLocation, underscoreErrorPageFile),\n )} file as described above?`,\n active: 'Yes',\n inactive: 'No, get me out of here',\n }),\n );\n\n if (!shouldContinue) {\n await abort();\n }\n } else {\n clack.log.info(\n `It seems like you already have a custom error page.\\n\\nPlease add the following code to your custom error page\\nat ${chalk.cyan(\n path.join(...pagesLocation, underscoreErrorPageFile),\n )}:`,\n );\n\n // eslint-disable-next-line no-console\n console.log(\n getFullUnderscoreErrorCopyPasteSnippet(\n underscoreErrorPageFile === '_error.ts' ||\n underscoreErrorPageFile === '_error.tsx',\n ),\n );\n\n const shouldContinue = await abortIfCancelled(\n clack.confirm({\n message: `Did you add the code to your ${chalk.cyan(\n path.join(...pagesLocation, underscoreErrorPageFile),\n )} file as described above?`,\n active: 'Yes',\n inactive: 'No, get me out of here',\n }),\n );\n\n if (!shouldContinue) {\n await abort();\n }\n }\n });\n\n await traceStep('create-global-error-page', async () => {\n const maybeAppDirPath = path.join(process.cwd(), 'app');\n const maybeSrcAppDirPath = path.join(process.cwd(), 'src', 'app');\n\n const appDirLocation =\n fs.existsSync(maybeAppDirPath) &&\n fs.lstatSync(maybeAppDirPath).isDirectory()\n ? ['app']\n : fs.existsSync(maybeSrcAppDirPath) &&\n fs.lstatSync(maybeSrcAppDirPath).isDirectory()\n ? ['src', 'app']\n : undefined;\n\n if (!appDirLocation) {\n return;\n }\n\n const globalErrorPageFile = fs.existsSync(\n path.join(process.cwd(), ...appDirLocation, 'global-error.tsx'),\n )\n ? 'global-error.tsx'\n : fs.existsSync(\n path.join(process.cwd(), ...appDirLocation, 'global-error.ts'),\n )\n ? 'global-error.ts'\n : fs.existsSync(\n path.join(process.cwd(), ...appDirLocation, 'global-error.jsx'),\n )\n ? 'global-error.jsx'\n : fs.existsSync(\n path.join(process.cwd(), ...appDirLocation, 'global-error.js'),\n )\n ? 'global-error.js'\n : undefined;\n\n if (!globalErrorPageFile) {\n const newGlobalErrorFileName = `global-error.${\n typeScriptDetected ? 'tsx' : 'jsx'\n }`;\n\n await fs.promises.writeFile(\n path.join(process.cwd(), ...appDirLocation, newGlobalErrorFileName),\n getSentryDefaultGlobalErrorPage(typeScriptDetected),\n { encoding: 'utf8', flag: 'w' },\n );\n\n clack.log.success(\n `Created ${chalk.cyan(\n path.join(...appDirLocation, newGlobalErrorFileName),\n )}.`,\n );\n } else {\n clack.log.info(\n `It seems like you already have a custom error page for your app directory.\\n\\nPlease add the following code to your custom error page\\nat ${chalk.cyan(\n path.join(...appDirLocation, globalErrorPageFile),\n )}:\\n`,\n );\n\n // eslint-disable-next-line no-console\n console.log(\n getGlobalErrorCopyPasteSnippet(\n globalErrorPageFile === 'global-error.ts' ||\n globalErrorPageFile === 'global-error.tsx',\n ),\n );\n\n const shouldContinue = await abortIfCancelled(\n clack.confirm({\n message: `Did you add the code to your ${chalk.cyan(\n path.join(...appDirLocation, globalErrorPageFile),\n )} file as described above?`,\n active: 'Yes',\n inactive: 'No, get me out of here',\n }),\n );\n\n if (!shouldContinue) {\n await abort();\n }\n }\n });\n\n const shouldCreateExamplePage = await askShouldCreateExamplePage();\n if (shouldCreateExamplePage) {\n await traceStep('create-example-page', async () =>\n createExamplePage(selfHosted, selectedProject, sentryUrl),\n );\n }\n\n await addDotEnvSentryBuildPluginFile(authToken);\n\n const isLikelyUsingTurbopack = await checkIfLikelyIsUsingTurbopack();\n if (isLikelyUsingTurbopack || isLikelyUsingTurbopack === null) {\n await abortIfCancelled(\n clack.select({\n message: `Warning: The Sentry SDK doesn't yet fully support Turbopack in dev mode. The SDK will not be loaded in the browser, and serverside instrumentation will be inaccurate or incomplete. Production builds will still fully work. ${chalk.bold(\n `To continue this setup, if you are using Turbopack, temporarily remove \\`--turbo\\` from your dev command until you have verified the SDK is working as expected.`,\n )}`,\n options: [\n {\n label: 'I understand.',\n hint: 'press enter',\n value: true,\n },\n ],\n initialValue: true,\n }),\n );\n }\n\n const mightBeUsingVercel = fs.existsSync(\n path.join(process.cwd(), 'vercel.json'),\n );\n\n if (mightBeUsingVercel) {\n clack.log.info(\n \"▲ It seems like you're using Vercel. We recommend using the Sentry Vercel integration to set up an auth token for Vercel deployments: https://vercel.com/integrations/sentry\",\n );\n } else {\n await traceStep('configure-ci', () => configureCI('nextjs', authToken));\n }\n\n const packageManagerForOutro =\n packageManagerFromInstallStep ?? (await getPackageManager());\n await runPrettierIfInstalled();\n\n clack.outro(`\n${chalk.green('Successfully installed the Sentry Next.js SDK!')} ${\n shouldCreateExamplePage\n ? `\\n\\nYou can validate your setup by (re)starting your dev environment (e.g. ${chalk.cyan(\n `${packageManagerForOutro.runScriptCommand} dev`,\n )}) and visiting ${chalk.cyan('\"/sentry-example-page\"')}`\n : ''\n }${\n shouldCreateExamplePage && isLikelyUsingTurbopack\n ? `\\nDon't forget to remove \\`--turbo\\` from your dev command until you have verified the SDK is working. You can safely add it back afterwards.`\n : ''\n }\n\n${chalk.dim(\n 'If you encounter any issues, let us know here: https://github.com/getsentry/sentry-javascript/issues',\n)}`);\n}\n\ntype SDKConfigOptions = {\n tunnelRoute: boolean;\n reactComponentAnnotation: boolean;\n};\n\nasync function createOrMergeNextJsFiles(\n selectedProject: SentryProjectData,\n selfHosted: boolean,\n sentryUrl: string,\n sdkConfigOptions: SDKConfigOptions,\n) {\n const selectedFeatures = await featureSelectionPrompt([\n {\n id: 'performance',\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 id: 'replay',\n prompt: `Do you want to enable ${chalk.bold(\n 'Sentry Session Replay',\n )} to get a video-like reproduction of errors during a user session?`,\n enabledHint: 'recommended, but increases bundle size',\n },\n ] as const);\n\n const typeScriptDetected = isUsingTypeScript();\n\n const configVariants = ['server', 'client', 'edge'] as const;\n\n for (const configVariant of configVariants) {\n await traceStep(`create-sentry-${configVariant}-config`, async () => {\n const jsConfig = `sentry.${configVariant}.config.js`;\n const tsConfig = `sentry.${configVariant}.config.ts`;\n\n const jsConfigExists = fs.existsSync(path.join(process.cwd(), jsConfig));\n const tsConfigExists = fs.existsSync(path.join(process.cwd(), tsConfig));\n\n let shouldWriteFile = true;\n\n if (jsConfigExists || tsConfigExists) {\n const existingConfigs = [];\n\n if (jsConfigExists) {\n existingConfigs.push(jsConfig);\n }\n\n if (tsConfigExists) {\n existingConfigs.push(tsConfig);\n }\n\n const overwriteExistingConfigs = await abortIfCancelled(\n clack.confirm({\n message: `Found existing Sentry ${configVariant} config (${existingConfigs.join(\n ', ',\n )}). Overwrite ${existingConfigs.length > 1 ? 'them' : 'it'}?`,\n }),\n );\n Sentry.setTag(\n `overwrite-${configVariant}-config`,\n overwriteExistingConfigs,\n );\n\n shouldWriteFile = overwriteExistingConfigs;\n\n if (overwriteExistingConfigs) {\n if (jsConfigExists) {\n fs.unlinkSync(path.join(process.cwd(), jsConfig));\n clack.log.warn(`Removed existing ${chalk.cyan(jsConfig)}.`);\n }\n if (tsConfigExists) {\n fs.unlinkSync(path.join(process.cwd(), tsConfig));\n clack.log.warn(`Removed existing ${chalk.cyan(tsConfig)}.`);\n }\n }\n }\n\n if (shouldWriteFile) {\n await fs.promises.writeFile(\n path.join(process.cwd(), typeScriptDetected ? tsConfig : jsConfig),\n getSentryConfigContents(\n selectedProject.keys[0].dsn.public,\n configVariant,\n selectedFeatures,\n ),\n { encoding: 'utf8', flag: 'w' },\n );\n clack.log.success(\n `Created fresh ${chalk.cyan(\n typeScriptDetected ? tsConfig : jsConfig,\n )}.`,\n );\n Sentry.setTag(`created-${configVariant}-config`, true);\n }\n });\n }\n\n await traceStep('setup-instrumentation-hook', async () => {\n const hasRootAppDirectory = hasDirectoryPathFromRoot('app');\n const hasRootPagesDirectory = hasDirectoryPathFromRoot('pages');\n const hasSrcDirectory = hasDirectoryPathFromRoot('src');\n\n let instrumentationHookLocation: 'src' | 'root' | 'does-not-exist';\n\n const instrumentationTsExists = fs.existsSync(\n path.join(process.cwd(), 'instrumentation.ts'),\n );\n const instrumentationJsExists = fs.existsSync(\n path.join(process.cwd(), 'instrumentation.js'),\n );\n const srcInstrumentationTsExists = fs.existsSync(\n path.join(process.cwd(), 'src', 'instrumentation.ts'),\n );\n const srcInstrumentationJsExists = fs.existsSync(\n path.join(process.cwd(), 'src', 'instrumentation.js'),\n );\n\n // https://nextjs.org/docs/app/building-your-application/configuring/src-directory\n // https://nextjs.org/docs/app/api-reference/file-conventions/instrumentation\n // The logic for where Next.js picks up the instrumentation file is as follows:\n // - If there is either an `app` folder or a `pages` folder in the root directory of your Next.js app, Next.js looks\n // for an `instrumentation.ts` file in the root of the Next.js app.\n // - Otherwise, if there is neither an `app` folder or a `pages` folder in the rood directory of your Next.js app,\n // AND if there is an `src` folder, Next.js will look for the `instrumentation.ts` file in the `src` folder.\n if (hasRootPagesDirectory || hasRootAppDirectory) {\n if (instrumentationJsExists || instrumentationTsExists) {\n instrumentationHookLocation = 'root';\n } else {\n instrumentationHookLocation = 'does-not-exist';\n }\n } else {\n if (srcInstrumentationTsExists || srcInstrumentationJsExists) {\n instrumentationHookLocation = 'src';\n } else {\n instrumentationHookLocation = 'does-not-exist';\n }\n }\n\n const newInstrumentationFileName = `instrumentation.${\n typeScriptDetected ? 'ts' : 'js'\n }`;\n\n if (instrumentationHookLocation === 'does-not-exist') {\n let newInstrumentationHookLocation: 'root' | 'src';\n if (hasRootPagesDirectory || hasRootAppDirectory) {\n newInstrumentationHookLocation = 'root';\n } else if (hasSrcDirectory) {\n newInstrumentationHookLocation = 'src';\n } else {\n newInstrumentationHookLocation = 'root';\n }\n\n const newInstrumentationHookPath =\n newInstrumentationHookLocation === 'root'\n ? path.join(process.cwd(), newInstrumentationFileName)\n : path.join(process.cwd(), 'src', newInstrumentationFileName);\n\n const successfullyCreated = await createNewConfigFile(\n newInstrumentationHookPath,\n getInstrumentationHookContent(newInstrumentationHookLocation),\n );\n\n if (!successfullyCreated) {\n await showCopyPasteInstructions(\n newInstrumentationFileName,\n getInstrumentationHookCopyPasteSnippet(\n newInstrumentationHookLocation,\n ),\n );\n }\n } else {\n await showCopyPasteInstructions(\n srcInstrumentationTsExists || instrumentationTsExists\n ? 'instrumentation.ts'\n : srcInstrumentationJsExists || instrumentationJsExists\n ? 'instrumentation.js'\n : newInstrumentationFileName,\n getInstrumentationHookCopyPasteSnippet(instrumentationHookLocation),\n );\n }\n });\n\n await traceStep('setup-next-config', async () => {\n const withSentryConfigOptionsTemplate = getWithSentryConfigOptionsTemplate({\n orgSlug: selectedProject.organization.slug,\n projectSlug: selectedProject.slug,\n selfHosted,\n sentryUrl,\n tunnelRoute: sdkConfigOptions.tunnelRoute,\n reactComponentAnnotation: sdkConfigOptions.reactComponentAnnotation,\n });\n\n const nextConfigPossibleFilesMap = {\n js: 'next.config.js',\n mjs: 'next.config.mjs',\n cjs: 'next.config.cjs',\n ts: 'next.config.ts',\n mts: 'next.config.mts',\n cts: 'next.config.cts',\n };\n\n const foundNextConfigFile = Object.entries(nextConfigPossibleFilesMap).find(\n ([, fileName]) => fs.existsSync(path.join(process.cwd(), fileName)),\n );\n\n if (!foundNextConfigFile) {\n Sentry.setTag('next-config-strategy', 'create');\n\n // Try to figure out whether the user prefers ESM\n let isTypeModule = false;\n try {\n const packageJsonText = await fs.promises.readFile(\n path.join(process.cwd(), 'package.json'),\n 'utf8',\n );\n // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment\n const packageJson = JSON.parse(packageJsonText);\n // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access\n if (packageJson.type === 'module') {\n isTypeModule = true;\n }\n } catch {\n // noop\n }\n\n // We are creating `next.config.(m)js` files by default as they are supported by the most Next.js versions\n const configFilename = isTypeModule\n ? nextConfigPossibleFilesMap.mjs\n : nextConfigPossibleFilesMap.js;\n const configContent = isTypeModule\n ? getNextjsConfigMjsTemplate(withSentryConfigOptionsTemplate)\n : getNextjsConfigCjsTemplate(withSentryConfigOptionsTemplate);\n\n await fs.promises.writeFile(\n path.join(process.cwd(), configFilename),\n configContent,\n { encoding: 'utf8', flag: 'w' },\n );\n\n clack.log.success(\n `Created ${chalk.cyan(configFilename)} with Sentry configuration.`,\n );\n\n return;\n }\n\n const [foundNextConfigFileType, foundNextConfigFileFilename] =\n foundNextConfigFile;\n\n if (foundNextConfigFileType === 'js' || foundNextConfigFileType === 'cjs') {\n Sentry.setTag('next-config-strategy', 'modify');\n\n const nextConfigCjsContent = fs.readFileSync(\n path.join(process.cwd(), foundNextConfigFileFilename),\n 'utf8',\n );\n\n const probablyIncludesSdk =\n nextConfigCjsContent.includes('@sentry/nextjs') &&\n nextConfigCjsContent.includes('withSentryConfig');\n\n let shouldInject = true;\n\n if (probablyIncludesSdk) {\n const injectAnyhow = await abortIfCancelled(\n clack.confirm({\n message: `${chalk.cyan(\n foundNextConfigFileFilename,\n )} already contains Sentry SDK configuration. Should the wizard modify it anyways?`,\n }),\n );\n\n shouldInject = injectAnyhow;\n }\n\n if (shouldInject) {\n await fs.promises.appendFile(\n path.join(process.cwd(), foundNextConfigFileFilename),\n getNextjsConfigCjsAppendix(withSentryConfigOptionsTemplate),\n 'utf8',\n );\n\n clack.log.success(\n `Added Sentry configuration to ${chalk.cyan(\n foundNextConfigFileFilename,\n )}. ${chalk.dim('(you probably want to clean this up a bit!)')}`,\n );\n }\n\n Sentry.setTag('next-config-mod-result', 'success');\n }\n\n if (\n foundNextConfigFileType === 'mjs' ||\n foundNextConfigFileType === 'mts' ||\n foundNextConfigFileType === 'cts' ||\n foundNextConfigFileType === 'ts'\n ) {\n const nextConfigMjsContent = fs.readFileSync(\n path.join(process.cwd(), foundNextConfigFileFilename),\n 'utf8',\n );\n\n const probablyIncludesSdk =\n nextConfigMjsContent.includes('@sentry/nextjs') &&\n nextConfigMjsContent.includes('withSentryConfig');\n\n let shouldInject = true;\n\n if (probablyIncludesSdk) {\n const injectAnyhow = await abortIfCancelled(\n clack.confirm({\n message: `${chalk.cyan(\n foundNextConfigFileFilename,\n )} already contains Sentry SDK configuration. Should the wizard modify it anyways?`,\n }),\n );\n\n shouldInject = injectAnyhow;\n }\n\n try {\n if (shouldInject) {\n const mod = parseModule(nextConfigMjsContent);\n mod.imports.$add({\n from: '@sentry/nextjs',\n imported: 'withSentryConfig',\n local: 'withSentryConfig',\n });\n // eslint-disable-next-line @typescript-eslint/no-unsafe-argument, @typescript-eslint/no-unsafe-member-access\n const expressionToWrap = generateCode(mod.exports.default.$ast).code;\n // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment\n mod.exports.default = builders.raw(`withSentryConfig(\n ${expressionToWrap},\n ${withSentryConfigOptionsTemplate}\n)`);\n const newCode = mod.generate().code;\n\n await fs.promises.writeFile(\n path.join(process.cwd(), foundNextConfigFileFilename),\n newCode,\n {\n encoding: 'utf8',\n flag: 'w',\n },\n );\n clack.log.success(\n `Added Sentry configuration to ${chalk.cyan(\n foundNextConfigFileFilename,\n )}. ${chalk.dim('(you probably want to clean this up a bit!)')}`,\n );\n\n Sentry.setTag('next-config-mod-result', 'success');\n }\n } catch {\n Sentry.setTag('next-config-mod-result', 'fail');\n clack.log.warn(\n chalk.yellow(\n `Something went wrong writing to ${chalk.cyan(\n foundNextConfigFileFilename,\n )}.`,\n ),\n );\n clack.log.info(\n `Please put the following code snippet into ${chalk.cyan(\n foundNextConfigFileFilename,\n )}: ${chalk.dim('You probably have to clean it up a bit.')}\\n`,\n );\n\n // eslint-disable-next-line no-console\n console.log(\n getNextjsConfigEsmCopyPasteSnippet(withSentryConfigOptionsTemplate),\n );\n\n const shouldContinue = await abortIfCancelled(\n clack.confirm({\n message: `Are you done putting the snippet above into ${chalk.cyan(\n foundNextConfigFileFilename,\n )}?`,\n active: 'Yes',\n inactive: 'No, get me out of here',\n }),\n );\n\n if (!shouldContinue) {\n await abort();\n }\n }\n }\n });\n}\n\nfunction hasDirectoryPathFromRoot(dirnameOrDirs: string | string[]): boolean {\n const dirPath = Array.isArray(dirnameOrDirs)\n ? path.join(process.cwd(), ...dirnameOrDirs)\n : path.join(process.cwd(), dirnameOrDirs);\n\n return fs.existsSync(dirPath) && fs.lstatSync(dirPath).isDirectory();\n}\n\nasync function createExamplePage(\n selfHosted: boolean,\n selectedProject: SentryProjectData,\n sentryUrl: string,\n): Promise<void> {\n const hasSrcDirectory = hasDirectoryPathFromRoot('src');\n const hasRootAppDirectory = hasDirectoryPathFromRoot('app');\n const hasRootPagesDirectory = hasDirectoryPathFromRoot('pages');\n const hasSrcAppDirectory = hasDirectoryPathFromRoot(['src', 'app']);\n const hasSrcPagesDirectory = hasDirectoryPathFromRoot(['src', 'pages']);\n\n Sentry.setTag('nextjs-app-dir', hasRootAppDirectory || hasSrcAppDirectory);\n\n const typeScriptDetected = isUsingTypeScript();\n\n // If `pages` or an `app` directory exists in the root, we'll put the example page there.\n // `app` directory takes priority over `pages` directory when they coexist, so we prioritize that.\n // https://nextjs.org/docs/app/building-your-application/routing#the-app-router\n\n const appFolderLocation = hasRootAppDirectory\n ? ['app']\n : hasSrcAppDirectory\n ? ['src', 'app']\n : undefined;\n\n let pagesFolderLocation = hasRootPagesDirectory\n ? ['pages']\n : hasSrcPagesDirectory\n ? ['src', 'pages']\n : undefined;\n\n // If the user has neither pages nor app directory we create a pages folder for them\n if (!appFolderLocation && !pagesFolderLocation) {\n const newPagesFolderLocation = hasSrcDirectory\n ? ['src', 'pages']\n : ['pages'];\n fs.mkdirSync(path.join(process.cwd(), ...newPagesFolderLocation), {\n recursive: true,\n });\n\n pagesFolderLocation = newPagesFolderLocation;\n }\n\n if (appFolderLocation) {\n const examplePageContents = getSentryExamplePageContents({\n selfHosted,\n orgSlug: selectedProject.organization.slug,\n projectId: selectedProject.id,\n sentryUrl,\n useClient: true,\n });\n\n fs.mkdirSync(\n path.join(process.cwd(), ...appFolderLocation, 'sentry-example-page'),\n {\n recursive: true,\n },\n );\n\n const newPageFileName = `page.${typeScriptDetected ? 'tsx' : 'jsx'}`;\n\n await fs.promises.writeFile(\n path.join(\n process.cwd(),\n ...appFolderLocation,\n 'sentry-example-page',\n newPageFileName,\n ),\n examplePageContents,\n { encoding: 'utf8', flag: 'w' },\n );\n\n clack.log.success(\n `Created ${chalk.cyan(\n path.join(...appFolderLocation, 'sentry-example-page', newPageFileName),\n )}.`,\n );\n\n fs.mkdirSync(\n path.join(\n process.cwd(),\n ...appFolderLocation,\n 'api',\n 'sentry-example-api',\n ),\n {\n recursive: true,\n },\n );\n\n const newRouteFileName = `route.${typeScriptDetected ? 'ts' : 'js'}`;\n\n await fs.promises.writeFile(\n path.join(\n process.cwd(),\n ...appFolderLocation,\n 'api',\n 'sentry-example-api',\n newRouteFileName,\n ),\n getSentryExampleAppDirApiRoute(),\n { encoding: 'utf8', flag: 'w' },\n );\n\n clack.log.success(\n `Created ${chalk.cyan(\n path.join(\n ...appFolderLocation,\n 'api',\n 'sentry-example-api',\n newRouteFileName,\n ),\n )}.`,\n );\n } else if (pagesFolderLocation) {\n const examplePageContents = getSentryExamplePageContents({\n selfHosted,\n orgSlug: selectedProject.organization.slug,\n projectId: selectedProject.id,\n sentryUrl,\n useClient: false,\n });\n\n await fs.promises.writeFile(\n path.join(\n process.cwd(),\n ...pagesFolderLocation,\n 'sentry-example-page.jsx',\n ),\n examplePageContents,\n { encoding: 'utf8', flag: 'w' },\n );\n\n clack.log.success(\n `Created ${chalk.cyan(\n path.join(...pagesFolderLocation, 'sentry-example-page.js'),\n )}.`,\n );\n\n fs.mkdirSync(path.join(process.cwd(), ...pagesFolderLocation, 'api'), {\n recursive: true,\n });\n\n await fs.promises.writeFile(\n path.join(\n process.cwd(),\n ...pagesFolderLocation,\n 'api',\n 'sentry-example-api.js',\n ),\n getSentryExamplePagesDirApiRoute(),\n { encoding: 'utf8', flag: 'w' },\n );\n\n clack.log.success(\n `Created ${chalk.cyan(\n path.join(...pagesFolderLocation, 'api', 'sentry-example-api.js'),\n )}.`,\n );\n }\n}\n\n/**\n * Ask users if they want to set the tunnelRoute option.\n * We can't set this by default because it potentially increases hosting bills.\n * It's valuable enough to for users to justify asking the additional question.\n */\nasync function askShouldSetTunnelRoute() {\n return await traceStep('ask-tunnelRoute-option', async (span) => {\n const shouldSetTunnelRoute = await abortIfCancelled(\n clack.select({\n message:\n 'Do you want to route Sentry requests in the browser through your Next.js server to avoid ad blockers?',\n options: [\n {\n label: 'Yes',\n value: true,\n hint: 'Can increase your server load and hosting bill',\n },\n {\n label: 'No',\n value: false,\n hint: 'Browser errors and events might be blocked by ad blockers before being sent to Sentry',\n },\n ],\n initialValue: true,\n }),\n );\n\n if (!shouldSetTunnelRoute) {\n clack.log.info(\n \"Sounds good! We'll leave the option commented for later, just in case :)\",\n );\n }\n\n span?.setAttribute('tunnelRoute', shouldSetTunnelRoute);\n Sentry.setTag('tunnelRoute', shouldSetTunnelRoute);\n\n return shouldSetTunnelRoute;\n });\n}\n\nasync function askShouldEnableReactComponentAnnotation() {\n return await traceStep('ask-react-component-annotation-option', async () => {\n const shouldEnableReactComponentAnnotation = await abortIfCancelled(\n clack.select({\n message:\n 'Do you want to enable React component annotations to make breadcrumbs and session replays more readable?',\n options: [\n {\n label: 'Yes',\n value: true,\n hint: 'Annotates React component names - increases bundle size',\n },\n {\n label: 'No',\n value: false,\n hint: 'Continue without React component annotations',\n },\n ],\n initialValue: true,\n }),\n );\n\n return shouldEnableReactComponentAnnotation;\n });\n}\n\n/**\n * Returns true or false depending on whether we think the user is using Turbopack. May return null in case we aren't sure.\n */\nasync function checkIfLikelyIsUsingTurbopack(): Promise<boolean | null> {\n let packageJsonContent: string;\n try {\n packageJsonContent = await fs.promises.readFile(\n path.join(process.cwd(), 'package.json'),\n 'utf8',\n );\n } catch {\n return null;\n }\n\n return packageJsonContent.includes('--turbo');\n}\n"]}
package/dist/src/run.d.ts CHANGED
@@ -1,5 +1,5 @@
1
1
  import type { Platform } from '../lib/Constants';
2
- type WizardIntegration = 'reactNative' | 'ios' | 'android' | 'cordova' | 'electron' | 'nextjs' | 'nuxt' | 'remix' | 'sveltekit' | 'sourcemaps';
2
+ type WizardIntegration = 'reactNative' | 'flutter' | 'ios' | 'android' | 'cordova' | 'electron' | 'nextjs' | 'nuxt' | 'remix' | 'sveltekit' | 'sourcemaps';
3
3
  type Args = {
4
4
  integration?: WizardIntegration;
5
5
  uninstall: boolean;
package/dist/src/run.js CHANGED
@@ -76,6 +76,7 @@ var clack = __importStar(require("@clack/prompts"));
76
76
  var clack_utils_1 = require("./utils/clack-utils");
77
77
  var react_native_wizard_1 = require("./react-native/react-native-wizard");
78
78
  var Setup_1 = require("../lib/Setup");
79
+ var flutter_wizard_1 = require("./flutter/flutter-wizard");
79
80
  var android_wizard_1 = require("./android/android-wizard");
80
81
  var apple_wizard_1 = require("./apple/apple-wizard");
81
82
  var nextjs_wizard_1 = require("./nextjs/nextjs-wizard");
@@ -123,6 +124,7 @@ function run(argv) {
123
124
  message: 'What do you want to set up?',
124
125
  options: [
125
126
  { value: 'reactNative', label: 'React Native' },
127
+ { value: 'flutter', label: 'Flutter' },
126
128
  { value: 'ios', label: 'iOS' },
127
129
  { value: 'android', label: 'Android' },
128
130
  { value: 'cordova', label: 'Cordova' },
@@ -155,61 +157,66 @@ function run(argv) {
155
157
  _a = integration;
156
158
  switch (_a) {
157
159
  case 'reactNative': return [3 /*break*/, 3];
158
- case 'ios': return [3 /*break*/, 5];
159
- case 'android': return [3 /*break*/, 7];
160
- case 'nextjs': return [3 /*break*/, 9];
161
- case 'nuxt': return [3 /*break*/, 11];
162
- case 'remix': return [3 /*break*/, 13];
163
- case 'sveltekit': return [3 /*break*/, 15];
164
- case 'sourcemaps': return [3 /*break*/, 17];
165
- case 'cordova': return [3 /*break*/, 19];
166
- case 'electron': return [3 /*break*/, 20];
160
+ case 'flutter': return [3 /*break*/, 5];
161
+ case 'ios': return [3 /*break*/, 7];
162
+ case 'android': return [3 /*break*/, 9];
163
+ case 'nextjs': return [3 /*break*/, 11];
164
+ case 'nuxt': return [3 /*break*/, 13];
165
+ case 'remix': return [3 /*break*/, 15];
166
+ case 'sveltekit': return [3 /*break*/, 17];
167
+ case 'sourcemaps': return [3 /*break*/, 19];
168
+ case 'cordova': return [3 /*break*/, 21];
169
+ case 'electron': return [3 /*break*/, 22];
167
170
  }
168
- return [3 /*break*/, 21];
171
+ return [3 /*break*/, 23];
169
172
  case 3: return [4 /*yield*/, (0, react_native_wizard_1.runReactNativeWizard)(__assign(__assign({}, wizardOptions), { uninstall: finalArgs.uninstall }))];
170
173
  case 4:
171
174
  _b.sent();
172
- return [3 /*break*/, 22];
173
- case 5: return [4 /*yield*/, (0, apple_wizard_1.runAppleWizard)(wizardOptions)];
175
+ return [3 /*break*/, 24];
176
+ case 5: return [4 /*yield*/, (0, flutter_wizard_1.runFlutterWizard)(wizardOptions)];
174
177
  case 6:
175
178
  _b.sent();
176
- return [3 /*break*/, 22];
177
- case 7: return [4 /*yield*/, (0, android_wizard_1.runAndroidWizard)(wizardOptions)];
179
+ return [3 /*break*/, 24];
180
+ case 7: return [4 /*yield*/, (0, apple_wizard_1.runAppleWizard)(wizardOptions)];
178
181
  case 8:
179
182
  _b.sent();
180
- return [3 /*break*/, 22];
181
- case 9: return [4 /*yield*/, (0, nextjs_wizard_1.runNextjsWizard)(wizardOptions)];
183
+ return [3 /*break*/, 24];
184
+ case 9: return [4 /*yield*/, (0, android_wizard_1.runAndroidWizard)(wizardOptions)];
182
185
  case 10:
183
186
  _b.sent();
184
- return [3 /*break*/, 22];
185
- case 11: return [4 /*yield*/, (0, nuxt_wizard_1.runNuxtWizard)(wizardOptions)];
187
+ return [3 /*break*/, 24];
188
+ case 11: return [4 /*yield*/, (0, nextjs_wizard_1.runNextjsWizard)(wizardOptions)];
186
189
  case 12:
187
190
  _b.sent();
188
- return [3 /*break*/, 22];
189
- case 13: return [4 /*yield*/, (0, remix_wizard_1.runRemixWizard)(wizardOptions)];
191
+ return [3 /*break*/, 24];
192
+ case 13: return [4 /*yield*/, (0, nuxt_wizard_1.runNuxtWizard)(wizardOptions)];
190
193
  case 14:
191
194
  _b.sent();
192
- return [3 /*break*/, 22];
193
- case 15: return [4 /*yield*/, (0, sveltekit_wizard_1.runSvelteKitWizard)(wizardOptions)];
195
+ return [3 /*break*/, 24];
196
+ case 15: return [4 /*yield*/, (0, remix_wizard_1.runRemixWizard)(wizardOptions)];
194
197
  case 16:
195
198
  _b.sent();
196
- return [3 /*break*/, 22];
197
- case 17: return [4 /*yield*/, (0, sourcemaps_wizard_1.runSourcemapsWizard)(wizardOptions)];
199
+ return [3 /*break*/, 24];
200
+ case 17: return [4 /*yield*/, (0, sveltekit_wizard_1.runSvelteKitWizard)(wizardOptions)];
198
201
  case 18:
199
202
  _b.sent();
200
- return [3 /*break*/, 22];
201
- case 19:
203
+ return [3 /*break*/, 24];
204
+ case 19: return [4 /*yield*/, (0, sourcemaps_wizard_1.runSourcemapsWizard)(wizardOptions)];
205
+ case 20:
206
+ _b.sent();
207
+ return [3 /*break*/, 24];
208
+ case 21:
202
209
  argv.integration = 'cordova';
203
210
  void (0, Setup_1.run)(argv);
204
- return [3 /*break*/, 22];
205
- case 20:
211
+ return [3 /*break*/, 24];
212
+ case 22:
206
213
  argv.integration = 'electron';
207
214
  void (0, Setup_1.run)(argv);
208
- return [3 /*break*/, 22];
209
- case 21:
215
+ return [3 /*break*/, 24];
216
+ case 23:
210
217
  clack.log.error('No setup wizard selected!');
211
- _b.label = 22;
212
- case 22: return [2 /*return*/];
218
+ _b.label = 24;
219
+ case 24: return [2 /*return*/];
213
220
  }
214
221
  });
215
222
  });
@@ -1 +1 @@
1
- {"version":3,"file":"run.js","sourceRoot":"","sources":["../../src/run.ts"],"names":[],"mappings":"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","sourcesContent":["// @ts-ignore - clack is ESM and TS complains about that. It works though\nimport * as clack from '@clack/prompts';\nimport { abortIfCancelled } from './utils/clack-utils';\nimport { runReactNativeWizard } from './react-native/react-native-wizard';\n\nimport { run as legacyRun } from '../lib/Setup';\nimport type { PreselectedProject, WizardOptions } from './utils/types';\nimport { runAndroidWizard } from './android/android-wizard';\nimport { runAppleWizard } from './apple/apple-wizard';\nimport { runNextjsWizard } from './nextjs/nextjs-wizard';\nimport { runNuxtWizard } from './nuxt/nuxt-wizard';\nimport { runRemixWizard } from './remix/remix-wizard';\nimport { runSvelteKitWizard } from './sveltekit/sveltekit-wizard';\nimport { runSourcemapsWizard } from './sourcemaps/sourcemaps-wizard';\nimport { readEnvironment } from '../lib/Helper/Env';\nimport type { Platform } from '../lib/Constants';\nimport type { PackageDotJson } from './utils/package-json';\n\ntype WizardIntegration =\n | 'reactNative'\n | 'ios'\n | 'android'\n | 'cordova'\n | 'electron'\n | 'nextjs'\n | 'nuxt'\n | 'remix'\n | 'sveltekit'\n | 'sourcemaps';\n\ntype Args = {\n integration?: WizardIntegration;\n\n uninstall: boolean;\n signup: boolean;\n skipConnect: boolean;\n debug: boolean;\n quiet: boolean;\n disableTelemetry: boolean;\n promoCode?: string;\n preSelectedProject?: {\n authToken: string;\n selfHosted: boolean;\n dsn: string;\n projectId: string;\n projectSlug: string;\n projectName: string;\n orgId: string;\n orgName: string;\n orgSlug: string;\n };\n url?: string;\n platform?: Platform[];\n org?: string;\n project?: string;\n saas?: boolean;\n};\n\nfunction preSelectedProjectArgsToObject(\n args: Args,\n): PreselectedProject | undefined {\n if (!args.preSelectedProject) {\n return undefined;\n }\n\n return {\n authToken: args.preSelectedProject.authToken,\n selfHosted: args.preSelectedProject.selfHosted,\n project: {\n id: args.preSelectedProject.projectId,\n keys: [\n {\n dsn: {\n public: args.preSelectedProject.dsn,\n },\n },\n ],\n organization: {\n id: args.preSelectedProject.orgId,\n name: args.preSelectedProject.orgName,\n slug: args.preSelectedProject.orgSlug,\n },\n slug: args.preSelectedProject.projectSlug,\n },\n };\n}\n\nexport async function run(argv: Args) {\n const finalArgs = {\n ...argv,\n ...readEnvironment(),\n };\n\n let integration = finalArgs.integration;\n if (!integration) {\n clack.intro(`Sentry Wizard ${tryGetWizardVersion()}`);\n\n integration = await abortIfCancelled(\n clack.select({\n message: 'What do you want to set up?',\n options: [\n { value: 'reactNative', label: 'React Native' },\n { value: 'ios', label: 'iOS' },\n { value: 'android', label: 'Android' },\n { value: 'cordova', label: 'Cordova' },\n { value: 'electron', label: 'Electron' },\n { value: 'nextjs', label: 'Next.js' },\n { value: 'nuxt', label: 'Nuxt' },\n { value: 'remix', label: 'Remix' },\n { value: 'sveltekit', label: 'SvelteKit' },\n { value: 'sourcemaps', label: 'Configure Source Maps Upload' },\n ],\n }),\n );\n\n if (!integration) {\n clack.log.error('No integration selected. Exiting.');\n return;\n }\n\n clack.outro(`Starting ${integration} setup`);\n }\n\n const wizardOptions: WizardOptions = {\n telemetryEnabled: !finalArgs.disableTelemetry,\n promoCode: finalArgs.promoCode,\n url: finalArgs.url,\n orgSlug: finalArgs.org,\n projectSlug: finalArgs.project,\n saas: finalArgs.saas,\n preSelectedProject: preSelectedProjectArgsToObject(finalArgs),\n };\n\n switch (integration) {\n case 'reactNative':\n await runReactNativeWizard({\n ...wizardOptions,\n uninstall: finalArgs.uninstall,\n });\n break;\n\n case 'ios':\n await runAppleWizard(wizardOptions);\n break;\n\n case 'android':\n await runAndroidWizard(wizardOptions);\n break;\n\n case 'nextjs':\n await runNextjsWizard(wizardOptions);\n break;\n\n case 'nuxt':\n await runNuxtWizard(wizardOptions);\n break;\n\n case 'remix':\n await runRemixWizard(wizardOptions);\n break;\n\n case 'sveltekit':\n await runSvelteKitWizard(wizardOptions);\n break;\n\n case 'sourcemaps':\n await runSourcemapsWizard(wizardOptions);\n break;\n\n case 'cordova':\n argv.integration = 'cordova';\n void legacyRun(argv);\n break;\n\n case 'electron':\n argv.integration = 'electron';\n void legacyRun(argv);\n break;\n\n default:\n clack.log.error('No setup wizard selected!');\n }\n}\n\n/**\n * TODO: replace with rollup replace whenever we switch to rollup\n */\nfunction tryGetWizardVersion(): string {\n try {\n const wizardPkgJson = require('../package.json') as PackageDotJson;\n return wizardPkgJson.version ?? '';\n } catch {\n return '';\n }\n}\n"]}
1
+ {"version":3,"file":"run.js","sourceRoot":"","sources":["../../src/run.ts"],"names":[],"mappings":"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","sourcesContent":["// @ts-ignore - clack is ESM and TS complains about that. It works though\nimport * as clack from '@clack/prompts';\nimport { abortIfCancelled } from './utils/clack-utils';\nimport { runReactNativeWizard } from './react-native/react-native-wizard';\n\nimport { run as legacyRun } from '../lib/Setup';\nimport type { PreselectedProject, WizardOptions } from './utils/types';\nimport { runFlutterWizard } from './flutter/flutter-wizard';\nimport { runAndroidWizard } from './android/android-wizard';\nimport { runAppleWizard } from './apple/apple-wizard';\nimport { runNextjsWizard } from './nextjs/nextjs-wizard';\nimport { runNuxtWizard } from './nuxt/nuxt-wizard';\nimport { runRemixWizard } from './remix/remix-wizard';\nimport { runSvelteKitWizard } from './sveltekit/sveltekit-wizard';\nimport { runSourcemapsWizard } from './sourcemaps/sourcemaps-wizard';\nimport { readEnvironment } from '../lib/Helper/Env';\nimport type { Platform } from '../lib/Constants';\nimport type { PackageDotJson } from './utils/package-json';\n\ntype WizardIntegration =\n | 'reactNative'\n | 'flutter'\n | 'ios'\n | 'android'\n | 'cordova'\n | 'electron'\n | 'nextjs'\n | 'nuxt'\n | 'remix'\n | 'sveltekit'\n | 'sourcemaps';\n\ntype Args = {\n integration?: WizardIntegration;\n\n uninstall: boolean;\n signup: boolean;\n skipConnect: boolean;\n debug: boolean;\n quiet: boolean;\n disableTelemetry: boolean;\n promoCode?: string;\n preSelectedProject?: {\n authToken: string;\n selfHosted: boolean;\n dsn: string;\n projectId: string;\n projectSlug: string;\n projectName: string;\n orgId: string;\n orgName: string;\n orgSlug: string;\n };\n url?: string;\n platform?: Platform[];\n org?: string;\n project?: string;\n saas?: boolean;\n};\n\nfunction preSelectedProjectArgsToObject(\n args: Args,\n): PreselectedProject | undefined {\n if (!args.preSelectedProject) {\n return undefined;\n }\n\n return {\n authToken: args.preSelectedProject.authToken,\n selfHosted: args.preSelectedProject.selfHosted,\n project: {\n id: args.preSelectedProject.projectId,\n keys: [\n {\n dsn: {\n public: args.preSelectedProject.dsn,\n },\n },\n ],\n organization: {\n id: args.preSelectedProject.orgId,\n name: args.preSelectedProject.orgName,\n slug: args.preSelectedProject.orgSlug,\n },\n slug: args.preSelectedProject.projectSlug,\n },\n };\n}\n\nexport async function run(argv: Args) {\n const finalArgs = {\n ...argv,\n ...readEnvironment(),\n };\n\n let integration = finalArgs.integration;\n if (!integration) {\n clack.intro(`Sentry Wizard ${tryGetWizardVersion()}`);\n\n integration = await abortIfCancelled(\n clack.select({\n message: 'What do you want to set up?',\n options: [\n { value: 'reactNative', label: 'React Native' },\n { value: 'flutter', label: 'Flutter' },\n { value: 'ios', label: 'iOS' },\n { value: 'android', label: 'Android' },\n { value: 'cordova', label: 'Cordova' },\n { value: 'electron', label: 'Electron' },\n { value: 'nextjs', label: 'Next.js' },\n { value: 'nuxt', label: 'Nuxt' },\n { value: 'remix', label: 'Remix' },\n { value: 'sveltekit', label: 'SvelteKit' },\n { value: 'sourcemaps', label: 'Configure Source Maps Upload' },\n ],\n }),\n );\n\n if (!integration) {\n clack.log.error('No integration selected. Exiting.');\n return;\n }\n\n clack.outro(`Starting ${integration} setup`);\n }\n\n const wizardOptions: WizardOptions = {\n telemetryEnabled: !finalArgs.disableTelemetry,\n promoCode: finalArgs.promoCode,\n url: finalArgs.url,\n orgSlug: finalArgs.org,\n projectSlug: finalArgs.project,\n saas: finalArgs.saas,\n preSelectedProject: preSelectedProjectArgsToObject(finalArgs),\n };\n\n switch (integration) {\n case 'reactNative':\n await runReactNativeWizard({\n ...wizardOptions,\n uninstall: finalArgs.uninstall,\n });\n break;\n\n case 'flutter':\n await runFlutterWizard(wizardOptions);\n break;\n\n case 'ios':\n await runAppleWizard(wizardOptions);\n break;\n\n case 'android':\n await runAndroidWizard(wizardOptions);\n break;\n\n case 'nextjs':\n await runNextjsWizard(wizardOptions);\n break;\n\n case 'nuxt':\n await runNuxtWizard(wizardOptions);\n break;\n\n case 'remix':\n await runRemixWizard(wizardOptions);\n break;\n\n case 'sveltekit':\n await runSvelteKitWizard(wizardOptions);\n break;\n\n case 'sourcemaps':\n await runSourcemapsWizard(wizardOptions);\n break;\n\n case 'cordova':\n argv.integration = 'cordova';\n void legacyRun(argv);\n break;\n\n case 'electron':\n argv.integration = 'electron';\n void legacyRun(argv);\n break;\n\n default:\n clack.log.error('No setup wizard selected!');\n }\n}\n\n/**\n * TODO: replace with rollup replace whenever we switch to rollup\n */\nfunction tryGetWizardVersion(): string {\n try {\n const wizardPkgJson = require('../package.json') as PackageDotJson;\n return wizardPkgJson.version ?? '';\n } catch {\n return '';\n }\n}\n"]}
@@ -320,7 +320,7 @@ function startToolSetupFlow(selctedTool, options, wizardOptions) {
320
320
  }
321
321
  function configureCI(selectedTool, authToken) {
322
322
  return __awaiter(this, void 0, void 0, function () {
323
- var isUsingCI, isCliBasedFlowTool, usesSentryCliRc, authTokenFile;
323
+ var isUsingCI, isCliBasedFlowTool, authTokenFile;
324
324
  return __generator(this, function (_a) {
325
325
  switch (_a.label) {
326
326
  case 0: return [4 /*yield*/, (0, clack_utils_1.abortIfCancelled)(prompts_1.default.select({
@@ -348,8 +348,7 @@ function configureCI(selectedTool, authToken) {
348
348
  'angular',
349
349
  'create-react-app',
350
350
  ].includes(selectedTool);
351
- usesSentryCliRc = selectedTool === 'nextjs';
352
- authTokenFile = isCliBasedFlowTool || usesSentryCliRc
351
+ authTokenFile = isCliBasedFlowTool
353
352
  ? clack_utils_1.SENTRY_CLI_RC_FILE
354
353
  : clack_utils_1.SENTRY_DOT_ENV_FILE;
355
354
  if (!isUsingCI) {
@@ -1 +1 @@
1
- {"version":3,"file":"sourcemaps-wizard.js","sourceRoot":"","sources":["../../../src/sourcemaps/sourcemaps-wizard.ts"],"names":[],"mappings":"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","sourcesContent":["// @ts-ignore - clack is ESM and TS complains about that. It works though\nimport clack from '@clack/prompts';\nimport chalk from 'chalk';\nimport * as Sentry from '@sentry/node';\n\nimport {\n abort,\n abortIfCancelled,\n confirmContinueIfNoOrDirtyGitRepo,\n SENTRY_DOT_ENV_FILE,\n printWelcome,\n SENTRY_CLI_RC_FILE,\n getOrAskForProjectData,\n} from '../utils/clack-utils';\nimport { isUnicodeSupported } from '../utils/vendor/is-unicorn-supported';\nimport type { SourceMapUploadToolConfigurationOptions } from './tools/types';\nimport { configureVitePlugin } from './tools/vite';\nimport { setupNpmScriptInCI, configureSentryCLI } from './tools/sentry-cli';\nimport { configureWebPackPlugin } from './tools/webpack';\nimport { configureTscSourcemapGenerationFlow } from './tools/tsc';\nimport { configureRollupPlugin } from './tools/rollup';\nimport { configureEsbuildPlugin } from './tools/esbuild';\nimport type { WizardOptions } from '../utils/types';\nimport { configureCRASourcemapGenerationFlow } from './tools/create-react-app';\nimport { ensureMinimumSdkVersionIsInstalled } from './utils/sdk-version';\nimport { traceStep, withTelemetry } from '../telemetry';\nimport { checkIfMoreSuitableWizardExistsAndAskForRedirect } from './utils/other-wizards';\nimport { configureAngularSourcemapGenerationFlow } from './tools/angular';\nimport type { SupportedTools } from './utils/detect-tool';\nimport { detectUsedTool } from './utils/detect-tool';\nimport { configureNextJsSourceMapsUpload } from './tools/nextjs';\nimport { configureRemixSourceMapsUpload } from './tools/remix';\nimport { detectPackageManger } from '../utils/package-manager';\nimport { getIssueStreamUrl } from '../utils/url';\n\nexport async function runSourcemapsWizard(\n options: WizardOptions,\n): Promise<void> {\n return withTelemetry(\n {\n enabled: options.telemetryEnabled,\n integration: 'sourcemaps',\n wizardOptions: options,\n },\n () => runSourcemapsWizardWithTelemetry(options),\n );\n}\n\nasync function runSourcemapsWizardWithTelemetry(\n options: WizardOptions,\n): Promise<void> {\n printWelcome({\n wizardName: 'Sentry Source Maps Upload Configuration Wizard',\n message: `This wizard will help you upload source maps to Sentry as part of your build.\nThank you for using Sentry :)${\n options.telemetryEnabled\n ? `\n\n(This setup wizard sends telemetry data and crash reports to Sentry.\nYou can turn this off by running the wizard with the '--disable-telemetry' flag.)`\n : ''\n }`,\n promoCode: options.promoCode,\n });\n\n const moreSuitableWizard = await traceStep(\n 'check-framework-wizard',\n checkIfMoreSuitableWizardExistsAndAskForRedirect,\n );\n if (moreSuitableWizard) {\n await traceStep('run-framework-wizard', () => moreSuitableWizard(options));\n return;\n }\n\n await confirmContinueIfNoOrDirtyGitRepo();\n\n await traceStep('check-sdk-version', ensureMinimumSdkVersionIsInstalled);\n\n const { selfHosted, selectedProject, sentryUrl, authToken } =\n await getOrAskForProjectData(options);\n\n const wizardOptionsWithPreSelectedProject = {\n ...options,\n preSelectedProject: {\n project: selectedProject,\n authToken,\n selfHosted,\n },\n };\n\n const selectedTool = await traceStep('select-tool', askForUsedBundlerTool);\n\n Sentry.setTag('selected-tool', selectedTool);\n\n if (selectedTool === 'no-tool') {\n clack.log.info(\n \"No Problem! But in this case, there's nothing to configure :)\",\n );\n await abort('Exiting, have a great day!', 0);\n return;\n }\n\n await traceStep('tool-setup', () =>\n startToolSetupFlow(\n selectedTool,\n {\n orgSlug: selectedProject.organization.slug,\n projectSlug: selectedProject.slug,\n selfHosted,\n url: sentryUrl,\n authToken,\n },\n wizardOptionsWithPreSelectedProject,\n ),\n );\n\n await traceStep('ci-setup', () => configureCI(selectedTool, authToken));\n\n traceStep('outro', () =>\n printOutro(\n sentryUrl,\n selectedProject.organization.slug,\n selectedProject.id,\n ),\n );\n}\n\nasync function askForUsedBundlerTool(): Promise<SupportedTools> {\n const selectedTool = await abortIfCancelled(\n clack.select({\n message: 'Which framework, bundler or build tool are you using?',\n options: [\n {\n label: 'Angular',\n value: 'angular',\n hint: 'Select this option if you are using Angular.',\n },\n {\n label: 'Create React App',\n value: 'create-react-app',\n hint: 'Select this option if you set up your app with Create React App.',\n },\n {\n label: 'Next.js',\n value: 'nextjs',\n hint: 'Select this option if you want to set up source maps in a Next.js project.',\n },\n {\n label: 'Remix',\n value: 'remix',\n hint: 'Select this option if you want to set up source maps in a Remix project.',\n },\n {\n label: 'Webpack',\n value: 'webpack',\n hint: 'Select this if you are using Webpack and you have access to your Webpack config.',\n },\n {\n label: 'Vite',\n value: 'vite',\n hint: 'Select this if you are using Vite and you have access to your Vite config.',\n },\n {\n label: 'esbuild',\n value: 'esbuild',\n hint: 'Select this if you are using esbuild and you have access to your esbuild config.',\n },\n {\n label: 'Rollup',\n value: 'rollup',\n hint: 'Select this if you are using Rollup and you have access to your Rollup config.',\n },\n {\n label: 'tsc',\n value: 'tsc',\n hint: 'Configure source maps when using tsc as build tool',\n },\n {\n label: 'I use another tool',\n value: 'sentry-cli',\n hint: 'This will configure source maps upload for you using sentry-cli',\n },\n {\n label: \"I don't minify, transpile or bundle my code\",\n value: 'no-tool',\n hint: 'This will exit the wizard',\n },\n ],\n initialValue: await detectUsedTool(),\n }),\n );\n\n return selectedTool;\n}\n\nasync function startToolSetupFlow(\n selctedTool: SupportedTools,\n options: SourceMapUploadToolConfigurationOptions,\n wizardOptions: WizardOptions,\n): Promise<void> {\n switch (selctedTool) {\n case 'webpack':\n await configureWebPackPlugin(options);\n break;\n case 'vite':\n await configureVitePlugin(options);\n break;\n case 'esbuild':\n await configureEsbuildPlugin(options);\n break;\n case 'rollup':\n await configureRollupPlugin(options);\n break;\n case 'tsc':\n await configureSentryCLI(options, configureTscSourcemapGenerationFlow);\n break;\n case 'create-react-app':\n await configureSentryCLI(options, configureCRASourcemapGenerationFlow);\n break;\n case 'angular':\n await configureSentryCLI(\n options,\n configureAngularSourcemapGenerationFlow,\n );\n break;\n case 'nextjs':\n await configureNextJsSourceMapsUpload(options, wizardOptions);\n break;\n case 'remix':\n await configureRemixSourceMapsUpload(options, wizardOptions);\n break;\n default:\n await configureSentryCLI(options);\n break;\n }\n}\n\nexport async function configureCI(\n selectedTool: SupportedTools,\n authToken: string,\n): Promise<void> {\n const isUsingCI = await abortIfCancelled(\n clack.select({\n message: `Are you using a CI/CD tool to build and deploy your application?`,\n options: [\n {\n label: 'Yes',\n hint: 'I use a tool like GitHub Actions, GitLab, CircleCI, TravisCI, Jenkins, Vercel, ...',\n value: true,\n },\n {\n label: 'No',\n hint: 'I build and deploy my application manually',\n value: false,\n },\n ],\n initialValue: true,\n }),\n );\n\n Sentry.setTag('using-ci', isUsingCI);\n\n const isCliBasedFlowTool = [\n 'sentry-cli',\n 'tsc',\n 'angular',\n 'create-react-app',\n ].includes(selectedTool);\n\n // some non-cli-based flows also use the .sentryclirc file\n const usesSentryCliRc = selectedTool === 'nextjs';\n\n const authTokenFile =\n isCliBasedFlowTool || usesSentryCliRc\n ? SENTRY_CLI_RC_FILE\n : SENTRY_DOT_ENV_FILE;\n\n if (!isUsingCI) {\n clack.log.info(\n `No Problem! Just make sure that the Sentry auth token from ${chalk.cyan(\n authTokenFile,\n )} is available whenever you build and deploy your app.`,\n );\n return;\n }\n\n if (isCliBasedFlowTool) {\n await traceStep('ci-npm-script-setup', setupNpmScriptInCI);\n }\n\n await traceStep('ci-auth-token-setup', () => setupAuthTokenInCI(authToken));\n}\n\nasync function setupAuthTokenInCI(authToken: string) {\n clack.log.step(\n 'Add the Sentry authentication token as an environment variable to your CI setup:',\n );\n\n // Intentially logging directly to console here so that the code can be copied/pasted directly\n // eslint-disable-next-line no-console\n console.log(\n chalk.greenBright(`\nSENTRY_AUTH_TOKEN=${authToken}\n`),\n );\n\n clack.log.warn(\n chalk.yellow('DO NOT commit this auth token to your repository!'),\n );\n\n const addedEnvVarToCI = await abortIfCancelled(\n clack.select({\n message: 'Did you configure CI as shown above?',\n options: [\n { label: 'Yes, continue!', value: true },\n {\n label: \"I'll do it later...\",\n value: false,\n hint: chalk.yellow(\n 'You need to set the auth token to upload source maps in CI',\n ),\n },\n ],\n initialValue: true,\n }),\n );\n\n Sentry.setTag('added-env-var-to-ci', addedEnvVarToCI);\n\n if (!addedEnvVarToCI) {\n clack.log.info(\"Don't forget! :)\");\n }\n}\n\nfunction printOutro(url: string, orgSlug: string, projectId: string) {\n const packageManager = detectPackageManger();\n const buildCommand = packageManager?.buildCommand ?? 'npm run build';\n\n const issueStreamUrl = getIssueStreamUrl({ url, orgSlug, projectId });\n\n const arrow = isUnicodeSupported() ? '→' : '->';\n\n clack.outro(`${chalk.green(\"That's it - everything is set up!\")}\n\n ${chalk.cyan(`Test and validate your setup locally with the following Steps:\n\n 1. Build your application in ${chalk.bold('production mode')}.\n ${chalk.gray(`${arrow} For example, run ${chalk.bold(buildCommand)}.`)}\n ${chalk.gray(\n `${arrow} You should see source map upload logs in your console.`,\n )}\n 2. Run your application and throw a test error.\n ${chalk.gray(`${arrow} The error should appear in Sentry:`)}\n ${chalk.gray(`${arrow} ${issueStreamUrl}`)}\n 3. Open the error in Sentry and verify that it's source-mapped.\n ${chalk.gray(\n `${arrow} The stack trace should show your original source code.`,\n )}\n `)}\n ${chalk.dim(\n `If you encounter any issues, please refer to the Troubleshooting Guide:\n https://docs.sentry.io/platforms/javascript/sourcemaps/troubleshooting_js\n\n If the guide doesn't help or you encounter a bug, please let us know:\n https://github.com/getsentry/sentry-javascript/issues`,\n )}\n`);\n}\n"]}
1
+ {"version":3,"file":"sourcemaps-wizard.js","sourceRoot":"","sources":["../../../src/sourcemaps/sourcemaps-wizard.ts"],"names":[],"mappings":"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","sourcesContent":["// @ts-ignore - clack is ESM and TS complains about that. It works though\nimport clack from '@clack/prompts';\nimport chalk from 'chalk';\nimport * as Sentry from '@sentry/node';\n\nimport {\n abort,\n abortIfCancelled,\n confirmContinueIfNoOrDirtyGitRepo,\n SENTRY_DOT_ENV_FILE,\n printWelcome,\n SENTRY_CLI_RC_FILE,\n getOrAskForProjectData,\n} from '../utils/clack-utils';\nimport { isUnicodeSupported } from '../utils/vendor/is-unicorn-supported';\nimport type { SourceMapUploadToolConfigurationOptions } from './tools/types';\nimport { configureVitePlugin } from './tools/vite';\nimport { setupNpmScriptInCI, configureSentryCLI } from './tools/sentry-cli';\nimport { configureWebPackPlugin } from './tools/webpack';\nimport { configureTscSourcemapGenerationFlow } from './tools/tsc';\nimport { configureRollupPlugin } from './tools/rollup';\nimport { configureEsbuildPlugin } from './tools/esbuild';\nimport type { WizardOptions } from '../utils/types';\nimport { configureCRASourcemapGenerationFlow } from './tools/create-react-app';\nimport { ensureMinimumSdkVersionIsInstalled } from './utils/sdk-version';\nimport { traceStep, withTelemetry } from '../telemetry';\nimport { checkIfMoreSuitableWizardExistsAndAskForRedirect } from './utils/other-wizards';\nimport { configureAngularSourcemapGenerationFlow } from './tools/angular';\nimport type { SupportedTools } from './utils/detect-tool';\nimport { detectUsedTool } from './utils/detect-tool';\nimport { configureNextJsSourceMapsUpload } from './tools/nextjs';\nimport { configureRemixSourceMapsUpload } from './tools/remix';\nimport { detectPackageManger } from '../utils/package-manager';\nimport { getIssueStreamUrl } from '../utils/url';\n\nexport async function runSourcemapsWizard(\n options: WizardOptions,\n): Promise<void> {\n return withTelemetry(\n {\n enabled: options.telemetryEnabled,\n integration: 'sourcemaps',\n wizardOptions: options,\n },\n () => runSourcemapsWizardWithTelemetry(options),\n );\n}\n\nasync function runSourcemapsWizardWithTelemetry(\n options: WizardOptions,\n): Promise<void> {\n printWelcome({\n wizardName: 'Sentry Source Maps Upload Configuration Wizard',\n message: `This wizard will help you upload source maps to Sentry as part of your build.\nThank you for using Sentry :)${\n options.telemetryEnabled\n ? `\n\n(This setup wizard sends telemetry data and crash reports to Sentry.\nYou can turn this off by running the wizard with the '--disable-telemetry' flag.)`\n : ''\n }`,\n promoCode: options.promoCode,\n });\n\n const moreSuitableWizard = await traceStep(\n 'check-framework-wizard',\n checkIfMoreSuitableWizardExistsAndAskForRedirect,\n );\n if (moreSuitableWizard) {\n await traceStep('run-framework-wizard', () => moreSuitableWizard(options));\n return;\n }\n\n await confirmContinueIfNoOrDirtyGitRepo();\n\n await traceStep('check-sdk-version', ensureMinimumSdkVersionIsInstalled);\n\n const { selfHosted, selectedProject, sentryUrl, authToken } =\n await getOrAskForProjectData(options);\n\n const wizardOptionsWithPreSelectedProject = {\n ...options,\n preSelectedProject: {\n project: selectedProject,\n authToken,\n selfHosted,\n },\n };\n\n const selectedTool = await traceStep('select-tool', askForUsedBundlerTool);\n\n Sentry.setTag('selected-tool', selectedTool);\n\n if (selectedTool === 'no-tool') {\n clack.log.info(\n \"No Problem! But in this case, there's nothing to configure :)\",\n );\n await abort('Exiting, have a great day!', 0);\n return;\n }\n\n await traceStep('tool-setup', () =>\n startToolSetupFlow(\n selectedTool,\n {\n orgSlug: selectedProject.organization.slug,\n projectSlug: selectedProject.slug,\n selfHosted,\n url: sentryUrl,\n authToken,\n },\n wizardOptionsWithPreSelectedProject,\n ),\n );\n\n await traceStep('ci-setup', () => configureCI(selectedTool, authToken));\n\n traceStep('outro', () =>\n printOutro(\n sentryUrl,\n selectedProject.organization.slug,\n selectedProject.id,\n ),\n );\n}\n\nasync function askForUsedBundlerTool(): Promise<SupportedTools> {\n const selectedTool = await abortIfCancelled(\n clack.select({\n message: 'Which framework, bundler or build tool are you using?',\n options: [\n {\n label: 'Angular',\n value: 'angular',\n hint: 'Select this option if you are using Angular.',\n },\n {\n label: 'Create React App',\n value: 'create-react-app',\n hint: 'Select this option if you set up your app with Create React App.',\n },\n {\n label: 'Next.js',\n value: 'nextjs',\n hint: 'Select this option if you want to set up source maps in a Next.js project.',\n },\n {\n label: 'Remix',\n value: 'remix',\n hint: 'Select this option if you want to set up source maps in a Remix project.',\n },\n {\n label: 'Webpack',\n value: 'webpack',\n hint: 'Select this if you are using Webpack and you have access to your Webpack config.',\n },\n {\n label: 'Vite',\n value: 'vite',\n hint: 'Select this if you are using Vite and you have access to your Vite config.',\n },\n {\n label: 'esbuild',\n value: 'esbuild',\n hint: 'Select this if you are using esbuild and you have access to your esbuild config.',\n },\n {\n label: 'Rollup',\n value: 'rollup',\n hint: 'Select this if you are using Rollup and you have access to your Rollup config.',\n },\n {\n label: 'tsc',\n value: 'tsc',\n hint: 'Configure source maps when using tsc as build tool',\n },\n {\n label: 'I use another tool',\n value: 'sentry-cli',\n hint: 'This will configure source maps upload for you using sentry-cli',\n },\n {\n label: \"I don't minify, transpile or bundle my code\",\n value: 'no-tool',\n hint: 'This will exit the wizard',\n },\n ],\n initialValue: await detectUsedTool(),\n }),\n );\n\n return selectedTool;\n}\n\nasync function startToolSetupFlow(\n selctedTool: SupportedTools,\n options: SourceMapUploadToolConfigurationOptions,\n wizardOptions: WizardOptions,\n): Promise<void> {\n switch (selctedTool) {\n case 'webpack':\n await configureWebPackPlugin(options);\n break;\n case 'vite':\n await configureVitePlugin(options);\n break;\n case 'esbuild':\n await configureEsbuildPlugin(options);\n break;\n case 'rollup':\n await configureRollupPlugin(options);\n break;\n case 'tsc':\n await configureSentryCLI(options, configureTscSourcemapGenerationFlow);\n break;\n case 'create-react-app':\n await configureSentryCLI(options, configureCRASourcemapGenerationFlow);\n break;\n case 'angular':\n await configureSentryCLI(\n options,\n configureAngularSourcemapGenerationFlow,\n );\n break;\n case 'nextjs':\n await configureNextJsSourceMapsUpload(options, wizardOptions);\n break;\n case 'remix':\n await configureRemixSourceMapsUpload(options, wizardOptions);\n break;\n default:\n await configureSentryCLI(options);\n break;\n }\n}\n\nexport async function configureCI(\n selectedTool: SupportedTools,\n authToken: string,\n): Promise<void> {\n const isUsingCI = await abortIfCancelled(\n clack.select({\n message: `Are you using a CI/CD tool to build and deploy your application?`,\n options: [\n {\n label: 'Yes',\n hint: 'I use a tool like GitHub Actions, GitLab, CircleCI, TravisCI, Jenkins, Vercel, ...',\n value: true,\n },\n {\n label: 'No',\n hint: 'I build and deploy my application manually',\n value: false,\n },\n ],\n initialValue: true,\n }),\n );\n\n Sentry.setTag('using-ci', isUsingCI);\n\n const isCliBasedFlowTool = [\n 'sentry-cli',\n 'tsc',\n 'angular',\n 'create-react-app',\n ].includes(selectedTool);\n\n const authTokenFile = isCliBasedFlowTool\n ? SENTRY_CLI_RC_FILE\n : SENTRY_DOT_ENV_FILE;\n\n if (!isUsingCI) {\n clack.log.info(\n `No Problem! Just make sure that the Sentry auth token from ${chalk.cyan(\n authTokenFile,\n )} is available whenever you build and deploy your app.`,\n );\n return;\n }\n\n if (isCliBasedFlowTool) {\n await traceStep('ci-npm-script-setup', setupNpmScriptInCI);\n }\n\n await traceStep('ci-auth-token-setup', () => setupAuthTokenInCI(authToken));\n}\n\nasync function setupAuthTokenInCI(authToken: string) {\n clack.log.step(\n 'Add the Sentry authentication token as an environment variable to your CI setup:',\n );\n\n // Intentially logging directly to console here so that the code can be copied/pasted directly\n // eslint-disable-next-line no-console\n console.log(\n chalk.greenBright(`\nSENTRY_AUTH_TOKEN=${authToken}\n`),\n );\n\n clack.log.warn(\n chalk.yellow('DO NOT commit this auth token to your repository!'),\n );\n\n const addedEnvVarToCI = await abortIfCancelled(\n clack.select({\n message: 'Did you configure CI as shown above?',\n options: [\n { label: 'Yes, continue!', value: true },\n {\n label: \"I'll do it later...\",\n value: false,\n hint: chalk.yellow(\n 'You need to set the auth token to upload source maps in CI',\n ),\n },\n ],\n initialValue: true,\n }),\n );\n\n Sentry.setTag('added-env-var-to-ci', addedEnvVarToCI);\n\n if (!addedEnvVarToCI) {\n clack.log.info(\"Don't forget! :)\");\n }\n}\n\nfunction printOutro(url: string, orgSlug: string, projectId: string) {\n const packageManager = detectPackageManger();\n const buildCommand = packageManager?.buildCommand ?? 'npm run build';\n\n const issueStreamUrl = getIssueStreamUrl({ url, orgSlug, projectId });\n\n const arrow = isUnicodeSupported() ? '→' : '->';\n\n clack.outro(`${chalk.green(\"That's it - everything is set up!\")}\n\n ${chalk.cyan(`Test and validate your setup locally with the following Steps:\n\n 1. Build your application in ${chalk.bold('production mode')}.\n ${chalk.gray(`${arrow} For example, run ${chalk.bold(buildCommand)}.`)}\n ${chalk.gray(\n `${arrow} You should see source map upload logs in your console.`,\n )}\n 2. Run your application and throw a test error.\n ${chalk.gray(`${arrow} The error should appear in Sentry:`)}\n ${chalk.gray(`${arrow} ${issueStreamUrl}`)}\n 3. Open the error in Sentry and verify that it's source-mapped.\n ${chalk.gray(\n `${arrow} The stack trace should show your original source code.`,\n )}\n `)}\n ${chalk.dim(\n `If you encounter any issues, please refer to the Troubleshooting Guide:\n https://docs.sentry.io/platforms/javascript/sourcemaps/troubleshooting_js\n\n If the guide doesn't help or you encounter a bug, please let us know:\n https://github.com/getsentry/sentry-javascript/issues`,\n )}\n`);\n}\n"]}
@@ -1,8 +1,9 @@
1
+ import { Span } from '@sentry/node';
1
2
  import { WizardOptions } from './utils/types';
2
3
  export declare function withTelemetry<F>(options: {
3
4
  enabled: boolean;
4
5
  integration: string;
5
6
  wizardOptions: WizardOptions;
6
7
  }, callback: () => F | Promise<F>): Promise<F>;
7
- export declare function traceStep<T>(step: string, callback: () => T): T;
8
+ export declare function traceStep<T>(step: string, callback: (span: Span | undefined) => T): T;
8
9
  export declare function updateProgress(step: string): void;
@@ -137,7 +137,7 @@ function createSentryInstance(enabled, integration) {
137
137
  }
138
138
  function traceStep(step, callback) {
139
139
  updateProgress(step);
140
- return (0, node_1.startSpan)({ name: step, op: 'wizard.step' }, function () { return callback(); });
140
+ return (0, node_1.startSpan)({ name: step, op: 'wizard.step' }, function (span) { return callback(span); });
141
141
  }
142
142
  exports.traceStep = traceStep;
143
143
  function updateProgress(step) {