@sentry/wizard 2.7.0 → 3.1.0-beta.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 (131) hide show
  1. package/CHANGELOG.md +16 -3
  2. package/bin.ts +9 -2
  3. package/dist/NextJs/configs/next.config.template.js +1 -1
  4. package/dist/bin.js +16 -4
  5. package/dist/bin.js.map +1 -1
  6. package/dist/index.js +7 -2
  7. package/dist/index.js.map +1 -1
  8. package/dist/lib/Constants.js +1 -1
  9. package/dist/lib/Constants.js.map +1 -1
  10. package/dist/lib/Helper/BottomBar.js +2 -2
  11. package/dist/lib/Helper/BottomBar.js.map +1 -1
  12. package/dist/lib/Helper/File.js +10 -12
  13. package/dist/lib/Helper/File.js.map +1 -1
  14. package/dist/lib/Helper/Logging.js +1 -1
  15. package/dist/lib/Helper/Logging.js.map +1 -1
  16. package/dist/lib/Helper/MergeConfig.js +1 -0
  17. package/dist/lib/Helper/MergeConfig.js.map +1 -1
  18. package/dist/lib/Helper/Package.js +10 -10
  19. package/dist/lib/Helper/Package.js.map +1 -1
  20. package/dist/lib/Helper/PackageManager.js +6 -9
  21. package/dist/lib/Helper/PackageManager.js.map +1 -1
  22. package/dist/lib/Helper/SentryCli.d.ts +3 -3
  23. package/dist/lib/Helper/SentryCli.js +3 -3
  24. package/dist/lib/Helper/SentryCli.js.map +1 -1
  25. package/dist/lib/Helper/Wizard.d.ts +4 -4
  26. package/dist/lib/Helper/Wizard.js +11 -11
  27. package/dist/lib/Helper/Wizard.js.map +1 -1
  28. package/dist/lib/Helper/__tests__/File.js +5 -5
  29. package/dist/lib/Helper/__tests__/File.js.map +1 -1
  30. package/dist/lib/Helper/__tests__/MergeConfig.js +9 -9
  31. package/dist/lib/Helper/__tests__/MergeConfig.js.map +1 -1
  32. package/dist/lib/Helper/__tests__/SentryCli.js.map +1 -1
  33. package/dist/lib/Setup.js +11 -9
  34. package/dist/lib/Setup.js.map +1 -1
  35. package/dist/lib/Steps/BaseStep.d.ts +2 -2
  36. package/dist/lib/Steps/BaseStep.js +3 -3
  37. package/dist/lib/Steps/BaseStep.js.map +1 -1
  38. package/dist/lib/Steps/ChooseIntegration.d.ts +1 -1
  39. package/dist/lib/Steps/ChooseIntegration.js +7 -5
  40. package/dist/lib/Steps/ChooseIntegration.js.map +1 -1
  41. package/dist/lib/Steps/ConfigureProject.d.ts +1 -1
  42. package/dist/lib/Steps/ConfigureProject.js +5 -3
  43. package/dist/lib/Steps/ConfigureProject.js.map +1 -1
  44. package/dist/lib/Steps/Initial.d.ts +1 -1
  45. package/dist/lib/Steps/Initial.js +7 -4
  46. package/dist/lib/Steps/Initial.js.map +1 -1
  47. package/dist/lib/Steps/Integrations/BaseIntegration.d.ts +2 -2
  48. package/dist/lib/Steps/Integrations/BaseIntegration.js +7 -4
  49. package/dist/lib/Steps/Integrations/BaseIntegration.js.map +1 -1
  50. package/dist/lib/Steps/Integrations/Cordova.d.ts +2 -2
  51. package/dist/lib/Steps/Integrations/Cordova.js +13 -10
  52. package/dist/lib/Steps/Integrations/Cordova.js.map +1 -1
  53. package/dist/lib/Steps/Integrations/Electron.d.ts +2 -2
  54. package/dist/lib/Steps/Integrations/Electron.js +25 -21
  55. package/dist/lib/Steps/Integrations/Electron.js.map +1 -1
  56. package/dist/lib/Steps/Integrations/MobileProject.d.ts +1 -1
  57. package/dist/lib/Steps/Integrations/MobileProject.js +8 -5
  58. package/dist/lib/Steps/Integrations/MobileProject.js.map +1 -1
  59. package/dist/lib/Steps/Integrations/NextJs.d.ts +2 -2
  60. package/dist/lib/Steps/Integrations/NextJs.js +57 -52
  61. package/dist/lib/Steps/Integrations/NextJs.js.map +1 -1
  62. package/dist/lib/Steps/Integrations/ReactNative.d.ts +2 -2
  63. package/dist/lib/Steps/Integrations/ReactNative.js +54 -52
  64. package/dist/lib/Steps/Integrations/ReactNative.js.map +1 -1
  65. package/dist/lib/Steps/Integrations/__tests__/ReactNative.js +1 -1
  66. package/dist/lib/Steps/Integrations/__tests__/ReactNative.js.map +1 -1
  67. package/dist/lib/Steps/OpenSentry.d.ts +1 -1
  68. package/dist/lib/Steps/OpenSentry.js +19 -17
  69. package/dist/lib/Steps/OpenSentry.js.map +1 -1
  70. package/dist/lib/Steps/PromptForParameters.d.ts +1 -1
  71. package/dist/lib/Steps/PromptForParameters.js +21 -19
  72. package/dist/lib/Steps/PromptForParameters.js.map +1 -1
  73. package/dist/lib/Steps/Result.d.ts +1 -1
  74. package/dist/lib/Steps/Result.js +8 -5
  75. package/dist/lib/Steps/Result.js.map +1 -1
  76. package/dist/lib/Steps/SentryProjectSelector.d.ts +1 -1
  77. package/dist/lib/Steps/SentryProjectSelector.js +6 -4
  78. package/dist/lib/Steps/SentryProjectSelector.js.map +1 -1
  79. package/dist/lib/Steps/ShouldConfigure.d.ts +1 -1
  80. package/dist/lib/Steps/ShouldConfigure.js +5 -3
  81. package/dist/lib/Steps/ShouldConfigure.js.map +1 -1
  82. package/dist/lib/Steps/WaitForSentry.d.ts +1 -1
  83. package/dist/lib/Steps/WaitForSentry.js +47 -50
  84. package/dist/lib/Steps/WaitForSentry.js.map +1 -1
  85. package/dist/lib/Steps/Welcome.d.ts +1 -1
  86. package/dist/lib/Steps/Welcome.js +8 -6
  87. package/dist/lib/Steps/Welcome.js.map +1 -1
  88. package/dist/lib/Steps/index.js +1 -0
  89. package/dist/lib/Steps/index.js.map +1 -1
  90. package/dist/lib/__tests__/Env.js +1 -1
  91. package/dist/lib/__tests__/Env.js.map +1 -1
  92. package/dist/lib/__tests__/Setup.js +1 -1
  93. package/dist/lib/__tests__/Setup.js.map +1 -1
  94. package/dist/src/clack-utils.d.ts +40 -0
  95. package/dist/src/clack-utils.js +329 -0
  96. package/dist/src/clack-utils.js.map +1 -0
  97. package/dist/src/nextjs-wizard.d.ts +5 -0
  98. package/dist/src/nextjs-wizard.js +346 -0
  99. package/dist/src/nextjs-wizard.js.map +1 -0
  100. package/lib/Helper/File.ts +2 -8
  101. package/lib/Helper/MergeConfig.ts +1 -0
  102. package/lib/Helper/SentryCli.ts +3 -3
  103. package/lib/Helper/Wizard.ts +6 -5
  104. package/lib/Helper/__tests__/File.ts +5 -5
  105. package/lib/Helper/__tests__/SentryCli.ts +3 -2
  106. package/lib/Helper/test-fixtures/next.config.1-merged.js +1 -1
  107. package/lib/Helper/test-fixtures/next.config.3-merged.js +1 -1
  108. package/lib/Helper/test-fixtures/next.config.4-merged.js +1 -1
  109. package/lib/Steps/BaseStep.ts +4 -4
  110. package/lib/Steps/ChooseIntegration.ts +2 -1
  111. package/lib/Steps/ConfigureProject.ts +1 -1
  112. package/lib/Steps/Initial.ts +2 -1
  113. package/lib/Steps/Integrations/BaseIntegration.ts +5 -3
  114. package/lib/Steps/Integrations/Cordova.ts +7 -6
  115. package/lib/Steps/Integrations/Electron.ts +10 -7
  116. package/lib/Steps/Integrations/MobileProject.ts +3 -1
  117. package/lib/Steps/Integrations/NextJs.ts +8 -6
  118. package/lib/Steps/Integrations/ReactNative.ts +47 -26
  119. package/lib/Steps/Integrations/__tests__/ReactNative.ts +3 -2
  120. package/lib/Steps/OpenSentry.ts +1 -1
  121. package/lib/Steps/PromptForParameters.ts +3 -2
  122. package/lib/Steps/Result.ts +2 -1
  123. package/lib/Steps/SentryProjectSelector.ts +3 -2
  124. package/lib/Steps/ShouldConfigure.ts +1 -1
  125. package/lib/Steps/WaitForSentry.ts +4 -4
  126. package/lib/Steps/Welcome.ts +3 -2
  127. package/lib/__tests__/Setup.ts +1 -1
  128. package/package.json +17 -14
  129. package/scripts/NextJs/configs/next.config.template.js +1 -1
  130. package/src/clack-utils.ts +346 -0
  131. package/src/nextjs-wizard.ts +619 -0
@@ -3,10 +3,12 @@ var __extends = (this && this.__extends) || (function () {
3
3
  var extendStatics = function (d, b) {
4
4
  extendStatics = Object.setPrototypeOf ||
5
5
  ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||
6
- function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };
6
+ function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };
7
7
  return extendStatics(d, b);
8
8
  };
9
9
  return function (d, b) {
10
+ if (typeof b !== "function" && b !== null)
11
+ throw new TypeError("Class extends value " + String(b) + " is not a constructor or null");
10
12
  extendStatics(d, b);
11
13
  function __() { this.constructor = d; }
12
14
  d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
@@ -27,7 +29,7 @@ var __generator = (this && this.__generator) || function (thisArg, body) {
27
29
  function verb(n) { return function (v) { return step([n, v]); }; }
28
30
  function step(op) {
29
31
  if (f) throw new TypeError("Generator is already executing.");
30
- while (_) try {
32
+ while (g && (g = 0, op[0] && (_ = 0)), _) try {
31
33
  if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;
32
34
  if (y = 0, t) op = [op[0] & 2, t.value];
33
35
  switch (op[0]) {
@@ -69,7 +71,7 @@ exports.COMPATIBLE_SDK_VERSION = '>= 5.0.0';
69
71
  exports.SENTRY_REACT_NATIVE_PACKAGE = '@sentry/react-native';
70
72
  exports.REACT_NATIVE_PACKAGE = 'react-native';
71
73
  exports.DOCS_MANUAL_STEPS = 'https://docs.sentry.io/platforms/react-native/manual-setup/manual-setup/';
72
- var ReactNative = /** @class */ (function (_super) {
74
+ var ReactNative = exports.ReactNative = /** @class */ (function (_super) {
73
75
  __extends(ReactNative, _super);
74
76
  function ReactNative(_argv) {
75
77
  var _this = _super.call(this, _argv) || this;
@@ -92,24 +94,24 @@ var ReactNative = /** @class */ (function (_super) {
92
94
  if (!(_a.sent())) {
93
95
  return [2 /*return*/, {}];
94
96
  }
95
- Logging_1.nl();
97
+ (0, Logging_1.nl)();
96
98
  userAnswers = { continue: true };
97
- packageManager = PackageManager_1.getPackageMangerChoice();
98
- hasCompatibleReactNativeVersion = Package_1.checkPackageVersion(this._readAppPackage(), exports.REACT_NATIVE_PACKAGE, exports.COMPATIBLE_REACT_NATIVE_VERSIONS, true);
99
+ packageManager = (0, PackageManager_1.getPackageMangerChoice)();
100
+ hasCompatibleReactNativeVersion = (0, Package_1.checkPackageVersion)(this._readAppPackage(), exports.REACT_NATIVE_PACKAGE, exports.COMPATIBLE_REACT_NATIVE_VERSIONS, true);
99
101
  if (!(!hasCompatibleReactNativeVersion && !this._argv.quiet)) return [3 /*break*/, 3];
100
- return [4 /*yield*/, inquirer_1.prompt({
101
- message: "Your version of React Native is not compatible with Sentry's React Native SDK. Do you want to continue?",
102
+ return [4 /*yield*/, (0, inquirer_1.prompt)({
103
+ message: 'Your version of React Native is not compatible with Sentry\'s React Native SDK. Do you want to continue?',
102
104
  name: 'continue',
103
105
  default: false,
104
106
  type: 'confirm',
105
107
  })];
106
108
  case 2:
107
109
  userAnswers = _a.sent();
108
- Logging_1.nl();
110
+ (0, Logging_1.nl)();
109
111
  _a.label = 3;
110
112
  case 3:
111
113
  if (!userAnswers.continue) {
112
- throw new Error("Please upgrade to a version that is compatible with " + exports.COMPATIBLE_REACT_NATIVE_VERSIONS + ". Or use " + exports.DOCS_MANUAL_STEPS);
114
+ throw new Error("Please upgrade to a version that is compatible with ".concat(exports.COMPATIBLE_REACT_NATIVE_VERSIONS, ". Or use ").concat(exports.DOCS_MANUAL_STEPS));
113
115
  }
114
116
  if (!packageManager) return [3 /*break*/, 5];
115
117
  return [4 /*yield*/, packageManager.installPackage(exports.SENTRY_REACT_NATIVE_PACKAGE)];
@@ -117,21 +119,21 @@ var ReactNative = /** @class */ (function (_super) {
117
119
  _a.sent();
118
120
  _a.label = 5;
119
121
  case 5:
120
- hasCompatibleSentryReactNativeVersion = Package_1.checkPackageVersion(this._readAppPackage(), exports.SENTRY_REACT_NATIVE_PACKAGE, exports.COMPATIBLE_SDK_VERSION, true);
122
+ hasCompatibleSentryReactNativeVersion = (0, Package_1.checkPackageVersion)(this._readAppPackage(), exports.SENTRY_REACT_NATIVE_PACKAGE, exports.COMPATIBLE_SDK_VERSION, true);
121
123
  if (!(!hasCompatibleSentryReactNativeVersion && !this._argv.quiet)) return [3 /*break*/, 7];
122
- return [4 /*yield*/, inquirer_1.prompt({
123
- message: "Your version of " + exports.SENTRY_REACT_NATIVE_PACKAGE + " is not compatible with this wizard. Do you want to continue?",
124
+ return [4 /*yield*/, (0, inquirer_1.prompt)({
125
+ message: "Your version of ".concat(exports.SENTRY_REACT_NATIVE_PACKAGE, " is not compatible with this wizard. Do you want to continue?"),
124
126
  name: 'continue',
125
127
  default: false,
126
128
  type: 'confirm',
127
129
  })];
128
130
  case 6:
129
131
  userAnswers = _a.sent();
130
- Logging_1.nl();
132
+ (0, Logging_1.nl)();
131
133
  _a.label = 7;
132
134
  case 7:
133
135
  if (!userAnswers.continue) {
134
- throw new Error("Please upgrade to a version that is compatible with " + exports.COMPATIBLE_SDK_VERSION + ".");
136
+ throw new Error("Please upgrade to a version that is compatible with ".concat(exports.COMPATIBLE_SDK_VERSION, "."));
135
137
  }
136
138
  sentryCliProperties = this._sentryCli.convertAnswersToProperties(answers);
137
139
  promises = this.getPlatforms(answers).map(function (platform) { return __awaiter(_this, void 0, void 0, function () {
@@ -141,19 +143,19 @@ var ReactNative = /** @class */ (function (_super) {
141
143
  case 0:
142
144
  _a.trys.push([0, 8, , 9]);
143
145
  if (!(platform === 'ios')) return [3 /*break*/, 3];
144
- return [4 /*yield*/, File_1.patchMatchingFile('ios/*.xcodeproj/project.pbxproj', this._patchXcodeProj.bind(this))];
146
+ return [4 /*yield*/, (0, File_1.patchMatchingFile)('ios/*.xcodeproj/project.pbxproj', this._patchXcodeProj.bind(this))];
145
147
  case 1:
146
148
  _a.sent();
147
- Logging_1.green("\u2713 Patched build script in Xcode project.");
149
+ (0, Logging_1.green)('✓ Patched build script in Xcode project.');
148
150
  return [4 /*yield*/, this._podInstall()];
149
151
  case 2:
150
152
  _a.sent();
151
- Logging_1.green("\u2713 Pods installed.");
153
+ (0, Logging_1.green)('✓ Pods installed.');
152
154
  return [3 /*break*/, 5];
153
- case 3: return [4 /*yield*/, File_1.patchMatchingFile('**/app/build.gradle', this._patchBuildGradle.bind(this))];
155
+ case 3: return [4 /*yield*/, (0, File_1.patchMatchingFile)('**/app/build.gradle', this._patchBuildGradle.bind(this))];
154
156
  case 4:
155
157
  _a.sent();
156
- Logging_1.green("\u2713 Patched build.gradle file.");
158
+ (0, Logging_1.green)('✓ Patched build.gradle file.');
157
159
  _a.label = 5;
158
160
  case 5: return [4 /*yield*/, this._patchJsSentryInit(platform, answers)];
159
161
  case 6:
@@ -161,11 +163,11 @@ var ReactNative = /** @class */ (function (_super) {
161
163
  return [4 /*yield*/, this._addSentryProperties(platform, sentryCliProperties)];
162
164
  case 7:
163
165
  _a.sent();
164
- Logging_1.green("\u2713 Added sentry.properties file to " + platform);
166
+ (0, Logging_1.green)("\u2713 Added sentry.properties file to ".concat(platform));
165
167
  return [3 /*break*/, 9];
166
168
  case 8:
167
169
  e_1 = _a.sent();
168
- Logging_1.red(e_1);
170
+ (0, Logging_1.red)(e_1);
169
171
  return [3 /*break*/, 9];
170
172
  case 9: return [2 /*return*/];
171
173
  }
@@ -183,10 +185,10 @@ var ReactNative = /** @class */ (function (_super) {
183
185
  return __awaiter(this, void 0, void 0, function () {
184
186
  return __generator(this, function (_a) {
185
187
  switch (_a.label) {
186
- case 0: return [4 /*yield*/, File_1.patchMatchingFile('**/*.xcodeproj/project.pbxproj', this._unpatchXcodeProj.bind(this))];
188
+ case 0: return [4 /*yield*/, (0, File_1.patchMatchingFile)('**/*.xcodeproj/project.pbxproj', this._unpatchXcodeProj.bind(this))];
187
189
  case 1:
188
190
  _a.sent();
189
- return [4 /*yield*/, File_1.patchMatchingFile('**/app/build.gradle', this._unpatchBuildGradle.bind(this))];
191
+ return [4 /*yield*/, (0, File_1.patchMatchingFile)('**/app/build.gradle', this._unpatchBuildGradle.bind(this))];
190
192
  case 2:
191
193
  _a.sent();
192
194
  return [2 /*return*/, {}];
@@ -194,30 +196,31 @@ var ReactNative = /** @class */ (function (_super) {
194
196
  });
195
197
  });
196
198
  };
199
+ // eslint-disable-next-line @typescript-eslint/require-await
197
200
  ReactNative.prototype._shouldConfigurePlatform = function (platform) {
198
201
  return __awaiter(this, void 0, void 0, function () {
199
202
  var result, regex;
200
203
  return __generator(this, function (_a) {
201
204
  result = false;
202
- if (!File_1.exists(platform + "/sentry.properties")) {
205
+ if (!(0, File_1.exists)("".concat(platform, "/sentry.properties"))) {
203
206
  result = true;
204
- this.debug(platform + "/sentry.properties not exists");
207
+ this.debug("".concat(platform, "/sentry.properties not exists"));
205
208
  }
206
- if (!File_1.matchesContent('**/*.xcodeproj/project.pbxproj', /sentry-cli/gi)) {
209
+ if (!(0, File_1.matchesContent)('**/*.xcodeproj/project.pbxproj', /sentry-cli/gi)) {
207
210
  result = true;
208
211
  this.debug('**/*.xcodeproj/project.pbxproj not matched');
209
212
  }
210
- if (!File_1.matchesContent('**/app/build.gradle', /sentry\.gradle/gi)) {
213
+ if (!(0, File_1.matchesContent)('**/app/build.gradle', /sentry\.gradle/gi)) {
211
214
  result = true;
212
215
  this.debug('**/app/build.gradle not matched');
213
216
  }
214
217
  regex = /Sentry/gi;
215
- if (File_1.exists("index." + platform + ".js") &&
216
- !File_1.matchesContent("index." + platform + ".js", regex)) {
218
+ if ((0, File_1.exists)("index.".concat(platform, ".js")) &&
219
+ !(0, File_1.matchesContent)("index.".concat(platform, ".js"), regex)) {
217
220
  result = true;
218
- this.debug("index." + platform + ".js not matched");
221
+ this.debug("index.".concat(platform, ".js not matched"));
219
222
  }
220
- if (File_1.exists('App.js') && !File_1.matchesContent('App.js', regex)) {
223
+ if ((0, File_1.exists)('App.js') && !(0, File_1.matchesContent)('App.js', regex)) {
221
224
  result = true;
222
225
  this.debug('index.js or App.js not matched');
223
226
  }
@@ -244,7 +247,7 @@ var ReactNative = /** @class */ (function (_super) {
244
247
  return __awaiter(this, void 0, void 0, function () {
245
248
  return __generator(this, function (_a) {
246
249
  switch (_a.label) {
247
- case 0: return [4 /*yield*/, util_1.promisify(child_process_1.exec)('npx --yes pod-install --non-interactive --quiet')];
250
+ case 0: return [4 /*yield*/, (0, util_1.promisify)(child_process_1.exec)('npx --yes pod-install --non-interactive --quiet')];
248
251
  case 1:
249
252
  _a.sent();
250
253
  return [2 /*return*/];
@@ -260,19 +263,19 @@ var ReactNative = /** @class */ (function (_super) {
260
263
  case 0:
261
264
  prefixGlob = '{.,./src}';
262
265
  suffixGlob = '@(j|t|cj|mj)s?(x)';
263
- platformGlob = "index." + platform + "." + suffixGlob;
264
- universalGlob = "App." + suffixGlob;
265
- jsFileGlob = prefixGlob + "/+(" + platformGlob + "|" + universalGlob + ")";
266
- jsFileToPatch = File_1.matchFiles(jsFileGlob);
266
+ platformGlob = "index.".concat(platform, ".").concat(suffixGlob);
267
+ universalGlob = "App.".concat(suffixGlob);
268
+ jsFileGlob = "".concat(prefixGlob, "/+(").concat(platformGlob, "|").concat(universalGlob, ")");
269
+ jsFileToPatch = (0, File_1.matchFiles)(jsFileGlob);
267
270
  if (!(jsFileToPatch.length !== 0)) return [3 /*break*/, 2];
268
- return [4 /*yield*/, File_1.patchMatchingFile(jsFileGlob, this._patchJs.bind(this), answers, platform)];
271
+ return [4 /*yield*/, (0, File_1.patchMatchingFile)(jsFileGlob, this._patchJs.bind(this), answers, platform)];
269
272
  case 1:
270
273
  _a.sent();
271
- Logging_1.green("\u2713 Patched " + jsFileToPatch.join(', ') + " file(s).");
274
+ (0, Logging_1.green)("\u2713 Patched ".concat(jsFileToPatch.join(', '), " file(s)."));
272
275
  return [3 /*break*/, 3];
273
276
  case 2:
274
- Logging_1.red("\u2717 Could not find " + platformGlob + " nor " + universalGlob + " files.");
275
- Logging_1.red('✗ Please, visit https://docs.sentry.io/platforms/react-native');
277
+ (0, Logging_1.red)("\u2717 Could not find ".concat(platformGlob, " nor ").concat(universalGlob, " files."));
278
+ (0, Logging_1.red)('✗ Please, visit https://docs.sentry.io/platforms/react-native');
276
279
  _a.label = 3;
277
280
  case 3: return [2 /*return*/];
278
281
  }
@@ -285,7 +288,7 @@ var ReactNative = /** @class */ (function (_super) {
285
288
  // This will create the ios/android folder before trying to write
286
289
  // sentry.properties in it which would fail otherwise
287
290
  if (!fs.existsSync(platform)) {
288
- Logging_1.dim(platform + " folder did not exist, creating it.");
291
+ (0, Logging_1.dim)("".concat(platform, " folder did not exist, creating it."));
289
292
  fs.mkdirSync(platform);
290
293
  }
291
294
  var fn = path.join(platform, 'sentry.properties');
@@ -323,9 +326,9 @@ var ReactNative = /** @class */ (function (_super) {
323
326
  // eslint-disable-next-line prefer-template
324
327
  return match +
325
328
  "\n\nimport * as Sentry from '@sentry/react-native';\n\n" +
326
- "Sentry.init({ \n" +
327
- (" dsn: '" + dsn + "', \n") +
328
- "});\n";
329
+ 'Sentry.init({ \n' +
330
+ " dsn: '".concat(dsn, "', \n") +
331
+ '});\n';
329
332
  }));
330
333
  };
331
334
  // ANDROID -----------------------------------------
@@ -351,12 +354,12 @@ var ReactNative = /** @class */ (function (_super) {
351
354
  }
352
355
  var code = JSON.parse(script.shellScript);
353
356
  code =
354
- // eslint-disable-next-line prefer-template
357
+ // eslint-disable-next-line prefer-template, @typescript-eslint/restrict-plus-operands
355
358
  'export SENTRY_PROPERTIES=sentry.properties\n' +
356
359
  'export EXTRA_PACKAGER_ARGS="--sourcemap-output $DERIVED_FILE_DIR/main.jsbundle.map"\n' +
357
360
  code.replace('$REACT_NATIVE_XCODE', function () {
358
361
  // eslint-disable-next-line no-useless-escape
359
- return '\\\"../node_modules/@sentry/cli/bin/sentry-cli react-native xcode $REACT_NATIVE_XCODE\\\"';
362
+ return '\\"../node_modules/@sentry/cli/bin/sentry-cli react-native xcode $REACT_NATIVE_XCODE\\"';
360
363
  }) +
361
364
  '\n/bin/sh ../node_modules/@sentry/react-native/scripts/collect-modules.sh\n';
362
365
  script.shellScript = JSON.stringify(code);
@@ -399,13 +402,13 @@ var ReactNative = /** @class */ (function (_super) {
399
402
  _this._patchExistingXcodeBuildScripts(buildScripts);
400
403
  }
401
404
  catch (e) {
402
- Logging_1.red(e);
405
+ (0, Logging_1.red)(e);
403
406
  }
404
407
  try {
405
408
  _this._addNewXcodeBuildPhaseForSymbols(buildScripts, proj);
406
409
  }
407
410
  catch (e) {
408
- Logging_1.red(e);
411
+ (0, Logging_1.red)(e);
409
412
  }
410
413
  // we always modify the xcode file in memory but we only want to save it
411
414
  // in case the user wants configuration for ios. This is why we check
@@ -413,7 +416,7 @@ var ReactNative = /** @class */ (function (_super) {
413
416
  // continue prompt.
414
417
  var newContents = proj.writeSync();
415
418
  if (newContents === contents) {
416
- resolve();
419
+ resolve(undefined);
417
420
  }
418
421
  else {
419
422
  resolve(newContents);
@@ -460,7 +463,7 @@ var ReactNative = /** @class */ (function (_super) {
460
463
  // eslint-disable-next-line @typescript-eslint/no-dynamic-delete
461
464
  delete scripts[key];
462
465
  // eslint-disable-next-line @typescript-eslint/no-dynamic-delete
463
- delete scripts[key + "_comment"];
466
+ delete scripts["".concat(key, "_comment")];
464
467
  var phases = nativeTargets[firstTarget].buildPhases;
465
468
  if (phases) {
466
469
  for (var i = 0; i < phases.length; i++) {
@@ -494,5 +497,4 @@ var ReactNative = /** @class */ (function (_super) {
494
497
  ReactNative._buildGradleAndroidSectionBeginning = /^android {/m;
495
498
  return ReactNative;
496
499
  }(MobileProject_1.MobileProject));
497
- exports.ReactNative = ReactNative;
498
500
  //# sourceMappingURL=ReactNative.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"ReactNative.js","sourceRoot":"","sources":["../../../../lib/Steps/Integrations/ReactNative.ts"],"names":[],"mappings":"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","sourcesContent":["/* eslint-disable max-lines */\nimport { exec } from 'child_process';\nimport * as fs from 'fs';\nimport { Answers, prompt } from 'inquirer';\nimport * as _ from 'lodash';\nimport * as path from 'path';\nimport { promisify } from 'util';\n\nimport { Args } from '../../Constants';\nimport { exists, matchesContent, matchFiles, patchMatchingFile } from '../../Helper/File';\nimport { dim, green, nl, red } from '../../Helper/Logging';\nimport { checkPackageVersion } from '../../Helper/Package';\nimport { getPackageMangerChoice } from '../../Helper/PackageManager';\nimport { SentryCli } from '../../Helper/SentryCli';\nimport { MobileProject } from './MobileProject';\n\nconst xcode = require('xcode');\n\nexport const COMPATIBLE_REACT_NATIVE_VERSIONS = '>=0.69.0';\nexport const COMPATIBLE_SDK_VERSION = '>= 5.0.0';\n\nexport const SENTRY_REACT_NATIVE_PACKAGE = '@sentry/react-native';\nexport const REACT_NATIVE_PACKAGE = 'react-native';\n\nexport const DOCS_MANUAL_STEPS = 'https://docs.sentry.io/platforms/react-native/manual-setup/manual-setup/' \n\nexport class ReactNative extends MobileProject {\n\n /**\n * All React Native versions have app/build.gradle with android section.\n */\n private static _buildGradleAndroidSectionBeginning: RegExp = /^android {/m;\n\n protected _answers: Answers;\n protected _sentryCli: SentryCli;\n\n constructor(protected _argv: Args) {\n super(_argv);\n this._sentryCli = new SentryCli(this._argv);\n }\n\n public async emit(answers: Answers): Promise<Answers> {\n if (this._argv.uninstall) {\n return this.uninstall(answers);\n }\n if (!(await this.shouldEmit(answers))) {\n return {};\n }\n nl();\n\n let userAnswers: Answers = { continue: true };\n const packageManager = getPackageMangerChoice();\n\n const hasCompatibleReactNativeVersion = checkPackageVersion(\n this._readAppPackage(),\n REACT_NATIVE_PACKAGE,\n COMPATIBLE_REACT_NATIVE_VERSIONS,\n true,\n );\n if (!hasCompatibleReactNativeVersion && !this._argv.quiet) {\n userAnswers = await prompt({\n message: `Your version of React Native is not compatible with Sentry's React Native SDK. Do you want to continue?`,\n name: 'continue',\n default: false,\n type: 'confirm',\n });\n nl();\n }\n if (!userAnswers.continue) {\n throw new Error(`Please upgrade to a version that is compatible with ${COMPATIBLE_REACT_NATIVE_VERSIONS}. Or use ${DOCS_MANUAL_STEPS}`);\n }\n\n if (packageManager) {\n await packageManager.installPackage(SENTRY_REACT_NATIVE_PACKAGE);\n }\n const hasCompatibleSentryReactNativeVersion = checkPackageVersion(\n this._readAppPackage(),\n SENTRY_REACT_NATIVE_PACKAGE,\n COMPATIBLE_SDK_VERSION,\n true,\n );\n if (!hasCompatibleSentryReactNativeVersion && !this._argv.quiet) {\n userAnswers = await prompt({\n message: `Your version of ${SENTRY_REACT_NATIVE_PACKAGE} is not compatible with this wizard. Do you want to continue?`,\n name: 'continue',\n default: false,\n type: 'confirm',\n });\n nl();\n }\n if (!userAnswers.continue) {\n throw new Error(`Please upgrade to a version that is compatible with ${COMPATIBLE_SDK_VERSION}.`);\n }\n\n const sentryCliProperties = this._sentryCli.convertAnswersToProperties(\n answers,\n );\n\n const promises = this.getPlatforms(answers).map(\n async (platform: string) => {\n try {\n if (platform === 'ios') {\n await patchMatchingFile(\n 'ios/*.xcodeproj/project.pbxproj',\n this._patchXcodeProj.bind(this),\n );\n green(`✓ Patched build script in Xcode project.`);\n await this._podInstall();\n green(`✓ Pods installed.`);\n } else {\n await patchMatchingFile(\n '**/app/build.gradle',\n this._patchBuildGradle.bind(this),\n );\n green(`✓ Patched build.gradle file.`);\n }\n await this._patchJsSentryInit(platform, answers);\n await this._addSentryProperties(platform, sentryCliProperties);\n green(`✓ Added sentry.properties file to ${platform}`);\n } catch (e) {\n red(e);\n }\n },\n );\n\n await Promise.all(promises);\n\n return answers;\n }\n\n public async uninstall(_answers: Answers): Promise<Answers> {\n await patchMatchingFile(\n '**/*.xcodeproj/project.pbxproj',\n this._unpatchXcodeProj.bind(this),\n );\n await patchMatchingFile(\n '**/app/build.gradle',\n this._unpatchBuildGradle.bind(this),\n );\n return {};\n }\n\n protected async _shouldConfigurePlatform(platform: string): Promise<boolean> {\n let result = false;\n\n if (!exists(`${platform}/sentry.properties`)) {\n result = true;\n this.debug(`${platform}/sentry.properties not exists`);\n }\n\n if (!matchesContent('**/*.xcodeproj/project.pbxproj', /sentry-cli/gi)) {\n result = true;\n this.debug('**/*.xcodeproj/project.pbxproj not matched');\n }\n\n if (!matchesContent('**/app/build.gradle', /sentry\\.gradle/gi)) {\n result = true;\n this.debug('**/app/build.gradle not matched');\n }\n\n const regex = /Sentry/gi;\n if (\n exists(`index.${platform}.js`) &&\n !matchesContent(`index.${platform}.js`, regex)\n ) {\n result = true;\n this.debug(`index.${platform}.js not matched`);\n }\n if (exists('App.js') && !matchesContent('App.js', regex)) {\n result = true;\n this.debug('index.js or App.js not matched');\n }\n\n if (this._argv.uninstall) {\n // if we uninstall we need to invert the result so we remove already patched\n // but leave untouched platforms as they are\n return !result;\n }\n\n return result;\n }\n\n private _readAppPackage(): Record<string, unknown> {\n let appPackage: Record<string, unknown> = {};\n\n try {\n appPackage = JSON.parse(fs.readFileSync(path.join(process.cwd(), 'package.json'), 'utf8'));\n } catch {\n // We don't need to have this\n }\n\n return appPackage;\n }\n\n private async _podInstall(): Promise<void> {\n await promisify(exec)('npx --yes pod-install --non-interactive --quiet');\n }\n\n private async _patchJsSentryInit(\n platform: string,\n answers: Answers,\n ): Promise<void> {\n const prefixGlob = '{.,./src}';\n const suffixGlob = '@(j|t|cj|mj)s?(x)';\n const platformGlob = `index.${platform}.${suffixGlob}`;\n // rm 0.49 introduced an App.js for both platforms\n const universalGlob = `App.${suffixGlob}`;\n const jsFileGlob = `${prefixGlob}/+(${platformGlob}|${universalGlob})`;\n\n const jsFileToPatch = matchFiles(jsFileGlob);\n if (jsFileToPatch.length !== 0) {\n await patchMatchingFile(\n jsFileGlob,\n this._patchJs.bind(this),\n answers,\n platform,\n );\n green(`✓ Patched ${jsFileToPatch.join(', ')} file(s).`);\n } else {\n red(`✗ Could not find ${platformGlob} nor ${universalGlob} files.`);\n red('✗ Please, visit https://docs.sentry.io/platforms/react-native');\n }\n }\n\n private _addSentryProperties(\n platform: string,\n properties: any,\n ): Promise<void> {\n let rv = Promise.resolve();\n\n // This will create the ios/android folder before trying to write\n // sentry.properties in it which would fail otherwise\n if (!fs.existsSync(platform)) {\n dim(`${platform} folder did not exist, creating it.`);\n fs.mkdirSync(platform);\n }\n const fn = path.join(platform, 'sentry.properties');\n\n if (platform === 'android' && properties['cli/executable']) {\n // We don't need to write the sentry-cli path in the properties file\n // since our gradle plugins already pick it up on the correct spot\n delete properties['cli/executable'];\n }\n rv = rv.then(() =>\n fs.writeFileSync(fn, this._sentryCli.dumpProperties(properties)),\n );\n\n return rv;\n }\n\n private _patchJs(\n contents: string,\n _filename: string,\n answers: Answers,\n platform?: string,\n ): Promise<string | null> {\n // since the init call could live in other places too, we really only\n // want to do this if we managed to patch any of the other files as well.\n if (contents.match(/Sentry.config\\(/)) {\n return Promise.resolve(null);\n }\n\n // if we match @sentry\\/react-native somewhere, we already patched the file\n // and no longer need to\n if (contents.match('@sentry/react-native')) {\n return Promise.resolve(contents);\n }\n\n let dsn = '__DSN__';\n this.getPlatforms(answers).forEach((selectedPlatform: string) => {\n if (platform && selectedPlatform === platform) {\n dsn = _.get(answers, 'config.dsn.public', null);\n } else if (platform === undefined) {\n dsn = _.get(answers, 'config.dsn.public', null);\n }\n });\n\n return Promise.resolve(\n contents.replace(\n /^([^]*)(import\\s+[^;]*?;$)/m,\n match =>\n // eslint-disable-next-line prefer-template\n match +\n \"\\n\\nimport * as Sentry from '@sentry/react-native';\\n\\n\" +\n `Sentry.init({ \\n` +\n ` dsn: '${dsn}', \\n` +\n `});\\n`,\n ),\n );\n }\n\n // ANDROID -----------------------------------------\n\n private _patchBuildGradle(contents: string): Promise<string | null> {\n const applyFrom =\n 'apply from: \"../../node_modules/@sentry/react-native/sentry.gradle\"';\n if (contents.indexOf(applyFrom) >= 0) {\n return Promise.resolve(null);\n }\n\n return Promise.resolve(\n contents.replace(\n ReactNative._buildGradleAndroidSectionBeginning,\n // eslint-disable-next-line prefer-template\n match => applyFrom + '\\n' + match,\n ),\n );\n }\n\n private _unpatchBuildGradle(contents: string): Promise<string> {\n return Promise.resolve(\n contents.replace(\n /^\\s*apply from: [\"']..\\/..\\/node_modules\\/@sentry\\/react-native\\/sentry.gradle[\"'];?\\s*?\\r?\\n/m,\n '',\n ),\n );\n }\n\n // IOS -----------------------------------------\n\n private _patchExistingXcodeBuildScripts(buildScripts: any): void {\n for (const script of buildScripts) {\n if (\n !script.shellScript.match(\n /\\/scripts\\/react-native-xcode\\.sh/i,\n ) ||\n script.shellScript.match(/sentry-cli\\s+react-native\\s+xcode/i)\n ) {\n continue;\n }\n let code = JSON.parse(script.shellScript);\n code =\n // eslint-disable-next-line prefer-template\n 'export SENTRY_PROPERTIES=sentry.properties\\n' +\n 'export EXTRA_PACKAGER_ARGS=\"--sourcemap-output $DERIVED_FILE_DIR/main.jsbundle.map\"\\n' +\n code.replace(\n '$REACT_NATIVE_XCODE',\n () =>\n // eslint-disable-next-line no-useless-escape\n '\\\\\\\"../node_modules/@sentry/cli/bin/sentry-cli react-native xcode $REACT_NATIVE_XCODE\\\\\\\"',\n ) +\n '\\n/bin/sh ../node_modules/@sentry/react-native/scripts/collect-modules.sh\\n';\n script.shellScript = JSON.stringify(code);\n }\n }\n\n private _addNewXcodeBuildPhaseForSymbols(buildScripts: any, proj: any): void {\n for (const script of buildScripts) {\n if (script.shellScript.match(/sentry-cli\\s+(upload-dsym|debug-files upload)/)) {\n return;\n }\n }\n\n proj.addBuildPhase(\n [],\n 'PBXShellScriptBuildPhase',\n 'Upload Debug Symbols to Sentry',\n null,\n {\n shellPath: '/bin/sh',\n shellScript:`\nexport SENTRY_PROPERTIES=sentry.properties\n[[ $SENTRY_INCLUDE_NATIVE_SOURCES == \"true\" ]] && INCLUDE_SOURCES_FLAG=\"--include-sources\" || INCLUDE_SOURCES_FLAG=\"\"\n../node_modules/@sentry/cli/bin/sentry-cli debug-files upload \"$INCLUDE_SOURCES_FLAG\" \"$DWARF_DSYM_FOLDER_PATH\"\n`,\n },\n );\n }\n\n private _patchXcodeProj(contents: string, filename: string): Promise<string> {\n const proj = xcode.project(filename);\n return new Promise((resolve, reject) => {\n proj.parse((err: any) => {\n if (err) {\n reject(err);\n return;\n }\n\n const buildScripts = [];\n for (const key in proj.hash.project.objects.PBXShellScriptBuildPhase ||\n {}) {\n if (\n // eslint-disable-next-line no-prototype-builtins\n proj.hash.project.objects.PBXShellScriptBuildPhase.hasOwnProperty(\n key,\n )\n ) {\n const val = proj.hash.project.objects.PBXShellScriptBuildPhase[key];\n if (val.isa) {\n buildScripts.push(val);\n }\n }\n }\n\n try {\n this._patchExistingXcodeBuildScripts(buildScripts);\n } catch (e) {\n red(e);\n }\n try {\n this._addNewXcodeBuildPhaseForSymbols(buildScripts, proj);\n } catch (e) {\n red(e);\n }\n\n // we always modify the xcode file in memory but we only want to save it\n // in case the user wants configuration for ios. This is why we check\n // here first if changes are made before we might prompt the platform\n // continue prompt.\n const newContents = proj.writeSync();\n if (newContents === contents) {\n resolve();\n } else {\n resolve(newContents);\n }\n });\n });\n }\n\n private _unpatchXcodeBuildScripts(proj: any): void {\n const scripts = proj.hash.project.objects.PBXShellScriptBuildPhase || {};\n const firstTarget = proj.getFirstTarget().uuid;\n const nativeTargets = proj.hash.project.objects.PBXNativeTarget;\n\n // scripts to patch partially. Run this first so that we don't\n // accidentally delete some scripts later entirely that we only want to\n // rewrite.\n for (const key of Object.keys(scripts)) {\n const script = scripts[key];\n\n // ignore comments\n if (typeof script === 'string') {\n continue;\n }\n\n // ignore scripts that do not invoke the react-native-xcode command.\n if (!script.shellScript.match(/sentry-cli\\s+react-native\\s+xcode/i)) {\n continue;\n }\n\n script.shellScript = JSON.stringify(\n JSON.parse(script.shellScript)\n // remove sentry properties export\n .replace(/^export SENTRY_PROPERTIES=sentry.properties\\r?\\n/m, '')\n .replace(/^\\/bin\\/sh ..\\/node_modules\\/@sentry\\/react-native\\/scripts\\/collect-modules.sh\\r?\\n/m, '')\n // unwrap react-native-xcode.sh command. In case someone replaced it\n // entirely with the sentry-cli command we need to put the original\n // version back in.\n .replace(\n /\\.\\.\\/node_modules\\/@sentry\\/cli\\/bin\\/sentry-cli\\s+react-native\\s+xcode\\s+\\$REACT_NATIVE_XCODE/i,\n '$REACT_NATIVE_XCODE',\n ),\n );\n }\n\n // scripts to kill entirely.\n for (const key of Object.keys(scripts)) {\n const script = scripts[key];\n\n // ignore comments and keys that got deleted\n if (typeof script === 'string' || script === undefined) {\n continue;\n }\n\n if (\n script.shellScript.match(\n /@sentry\\/cli\\/bin\\/sentry-cli\\s+(upload-dsym|debug-files upload)\\b/,\n )\n ) {\n // eslint-disable-next-line @typescript-eslint/no-dynamic-delete\n delete scripts[key];\n // eslint-disable-next-line @typescript-eslint/no-dynamic-delete\n delete scripts[`${key}_comment`];\n const phases = nativeTargets[firstTarget].buildPhases;\n if (phases) {\n for (let i = 0; i < phases.length; i++) {\n if (phases[i].value === key) {\n phases.splice(i, 1);\n break;\n }\n }\n }\n continue;\n }\n }\n }\n\n private _unpatchXcodeProj(\n _contents: string,\n filename: string,\n ): Promise<string> {\n const proj = xcode.project(filename);\n return new Promise((resolve, reject) => {\n proj.parse((err: any) => {\n if (err) {\n reject(err);\n return;\n }\n\n this._unpatchXcodeBuildScripts(proj);\n resolve(proj.writeSync());\n });\n });\n }\n}\n"]}
1
+ {"version":3,"file":"ReactNative.js","sourceRoot":"","sources":["../../../../lib/Steps/Integrations/ReactNative.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,8BAA8B;AAC9B,+CAAqC;AACrC,uBAAyB;AAEzB,qCAAkC;AAClC,0BAA4B;AAC5B,2BAA6B;AAC7B,6BAAiC;AAGjC,0CAK2B;AAC3B,gDAA2D;AAC3D,gDAA2D;AAC3D,8DAAqE;AACrE,oDAAmD;AACnD,iDAAgD;AAEhD,IAAM,KAAK,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;AAElB,QAAA,gCAAgC,GAAG,UAAU,CAAC;AAC9C,QAAA,sBAAsB,GAAG,UAAU,CAAC;AAEpC,QAAA,2BAA2B,GAAG,sBAAsB,CAAC;AACrD,QAAA,oBAAoB,GAAG,cAAc,CAAC;AAEtC,QAAA,iBAAiB,GAC5B,0EAA0E,CAAC;AAE7E;IAAiC,+BAAa;IAS5C,qBAA6B,KAAW;QAAxC,YACE,kBAAM,KAAK,CAAC,SAEb;QAH4B,WAAK,GAAL,KAAK,CAAM;QAEtC,KAAI,CAAC,UAAU,GAAG,IAAI,qBAAS,CAAC,KAAI,CAAC,KAAK,CAAC,CAAC;;IAC9C,CAAC;IAEY,0BAAI,GAAjB,UAAkB,OAAgB;;;;;;;wBAChC,IAAI,IAAI,CAAC,KAAK,CAAC,SAAS,EAAE;4BACxB,sBAAO,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,EAAC;yBAChC;wBACK,qBAAM,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,EAAA;;wBAApC,IAAI,CAAC,CAAC,SAA8B,CAAC,EAAE;4BACrC,sBAAO,EAAE,EAAC;yBACX;wBACD,IAAA,YAAE,GAAE,CAAC;wBAED,WAAW,GAAY,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;wBACxC,cAAc,GAAG,IAAA,uCAAsB,GAAE,CAAC;wBAE1C,+BAA+B,GAAG,IAAA,6BAAmB,EACzD,IAAI,CAAC,eAAe,EAAE,EACtB,4BAAoB,EACpB,wCAAgC,EAChC,IAAI,CACL,CAAC;6BACE,CAAA,CAAC,+BAA+B,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAA,EAArD,wBAAqD;wBACzC,qBAAM,IAAA,iBAAM,EAAC;gCACzB,OAAO,EAAE,0GAA0G;gCACnH,IAAI,EAAE,UAAU;gCAChB,OAAO,EAAE,KAAK;gCACd,IAAI,EAAE,SAAS;6BAChB,CAAC,EAAA;;wBALF,WAAW,GAAG,SAKZ,CAAC;wBACH,IAAA,YAAE,GAAE,CAAC;;;wBAEP,IAAI,CAAC,WAAW,CAAC,QAAQ,EAAE;4BACzB,MAAM,IAAI,KAAK,CACb,8DAAuD,wCAAgC,sBAAY,yBAAiB,CAAE,CACvH,CAAC;yBACH;6BAEG,cAAc,EAAd,wBAAc;wBAChB,qBAAM,cAAc,CAAC,cAAc,CAAC,mCAA2B,CAAC,EAAA;;wBAAhE,SAAgE,CAAC;;;wBAE7D,qCAAqC,GAAG,IAAA,6BAAmB,EAC/D,IAAI,CAAC,eAAe,EAAE,EACtB,mCAA2B,EAC3B,8BAAsB,EACtB,IAAI,CACL,CAAC;6BACE,CAAA,CAAC,qCAAqC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAA,EAA3D,wBAA2D;wBAC/C,qBAAM,IAAA,iBAAM,EAAC;gCACzB,OAAO,EAAE,0BAAmB,mCAA2B,kEAA+D;gCACtH,IAAI,EAAE,UAAU;gCAChB,OAAO,EAAE,KAAK;gCACd,IAAI,EAAE,SAAS;6BAChB,CAAC,EAAA;;wBALF,WAAW,GAAG,SAKZ,CAAC;wBACH,IAAA,YAAE,GAAE,CAAC;;;wBAEP,IAAI,CAAC,WAAW,CAAC,QAAQ,EAAE;4BACzB,MAAM,IAAI,KAAK,CACb,8DAAuD,8BAAsB,MAAG,CACjF,CAAC;yBACH;wBAEK,mBAAmB,GAAG,IAAI,CAAC,UAAU,CAAC,0BAA0B,CACpE,OAAO,CACR,CAAC;wBAEI,QAAQ,GAAG,IAAI,CAAC,YAAY,CAAC,OAAO,CAAC,CAAC,GAAG,CAC7C,UAAO,QAAgB;;;;;;6CAEf,CAAA,QAAQ,KAAK,KAAK,CAAA,EAAlB,wBAAkB;wCACpB,qBAAM,IAAA,wBAAiB,EACrB,iCAAiC,EACjC,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,IAAI,CAAC,CAChC,EAAA;;wCAHD,SAGC,CAAC;wCACF,IAAA,eAAK,EAAC,0CAA0C,CAAC,CAAC;wCAClD,qBAAM,IAAI,CAAC,WAAW,EAAE,EAAA;;wCAAxB,SAAwB,CAAC;wCACzB,IAAA,eAAK,EAAC,mBAAmB,CAAC,CAAC;;4CAE3B,qBAAM,IAAA,wBAAiB,EACrB,qBAAqB,EACrB,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,IAAI,CAAC,CAClC,EAAA;;wCAHD,SAGC,CAAC;wCACF,IAAA,eAAK,EAAC,8BAA8B,CAAC,CAAC;;4CAExC,qBAAM,IAAI,CAAC,kBAAkB,CAAC,QAAQ,EAAE,OAAO,CAAC,EAAA;;wCAAhD,SAAgD,CAAC;wCACjD,qBAAM,IAAI,CAAC,oBAAoB,CAAC,QAAQ,EAAE,mBAAmB,CAAC,EAAA;;wCAA9D,SAA8D,CAAC;wCAC/D,IAAA,eAAK,EAAC,iDAAqC,QAAQ,CAAE,CAAC,CAAC;;;;wCAEvD,IAAA,aAAG,EAAC,GAAC,CAAC,CAAC;;;;;6BAEV,CACF,CAAC;wBAEF,qBAAM,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAA;;wBAA3B,SAA2B,CAAC;wBAE5B,sBAAO,OAAO,EAAC;;;;KAChB;IAEY,+BAAS,GAAtB,UAAuB,QAAiB;;;;4BACtC,qBAAM,IAAA,wBAAiB,EACrB,gCAAgC,EAChC,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,IAAI,CAAC,CAClC,EAAA;;wBAHD,SAGC,CAAC;wBACF,qBAAM,IAAA,wBAAiB,EACrB,qBAAqB,EACrB,IAAI,CAAC,mBAAmB,CAAC,IAAI,CAAC,IAAI,CAAC,CACpC,EAAA;;wBAHD,SAGC,CAAC;wBACF,sBAAO,EAAE,EAAC;;;;KACX;IAED,4DAA4D;IAC5C,8CAAwB,GAAxC,UAAyC,QAAgB;;;;gBACnD,MAAM,GAAG,KAAK,CAAC;gBAEnB,IAAI,CAAC,IAAA,aAAM,EAAC,UAAG,QAAQ,uBAAoB,CAAC,EAAE;oBAC5C,MAAM,GAAG,IAAI,CAAC;oBACd,IAAI,CAAC,KAAK,CAAC,UAAG,QAAQ,kCAA+B,CAAC,CAAC;iBACxD;gBAED,IAAI,CAAC,IAAA,qBAAc,EAAC,gCAAgC,EAAE,cAAc,CAAC,EAAE;oBACrE,MAAM,GAAG,IAAI,CAAC;oBACd,IAAI,CAAC,KAAK,CAAC,4CAA4C,CAAC,CAAC;iBAC1D;gBAED,IAAI,CAAC,IAAA,qBAAc,EAAC,qBAAqB,EAAE,kBAAkB,CAAC,EAAE;oBAC9D,MAAM,GAAG,IAAI,CAAC;oBACd,IAAI,CAAC,KAAK,CAAC,iCAAiC,CAAC,CAAC;iBAC/C;gBAEK,KAAK,GAAG,UAAU,CAAC;gBACzB,IACE,IAAA,aAAM,EAAC,gBAAS,QAAQ,QAAK,CAAC;oBAC9B,CAAC,IAAA,qBAAc,EAAC,gBAAS,QAAQ,QAAK,EAAE,KAAK,CAAC,EAC9C;oBACA,MAAM,GAAG,IAAI,CAAC;oBACd,IAAI,CAAC,KAAK,CAAC,gBAAS,QAAQ,oBAAiB,CAAC,CAAC;iBAChD;gBACD,IAAI,IAAA,aAAM,EAAC,QAAQ,CAAC,IAAI,CAAC,IAAA,qBAAc,EAAC,QAAQ,EAAE,KAAK,CAAC,EAAE;oBACxD,MAAM,GAAG,IAAI,CAAC;oBACd,IAAI,CAAC,KAAK,CAAC,gCAAgC,CAAC,CAAC;iBAC9C;gBAED,IAAI,IAAI,CAAC,KAAK,CAAC,SAAS,EAAE;oBACxB,4EAA4E;oBAC5E,4CAA4C;oBAC5C,sBAAO,CAAC,MAAM,EAAC;iBAChB;gBAED,sBAAO,MAAM,EAAC;;;KACf;IAEO,qCAAe,GAAvB;QACE,IAAI,UAAU,GAA4B,EAAE,CAAC;QAE7C,IAAI;YACF,UAAU,GAAG,IAAI,CAAC,KAAK,CACrB,EAAE,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,cAAc,CAAC,EAAE,MAAM,CAAC,CAClE,CAAC;SACH;QAAC,WAAM;YACN,6BAA6B;SAC9B;QAED,OAAO,UAAU,CAAC;IACpB,CAAC;IAEa,iCAAW,GAAzB;;;;4BACE,qBAAM,IAAA,gBAAS,EAAC,oBAAI,CAAC,CAAC,iDAAiD,CAAC,EAAA;;wBAAxE,SAAwE,CAAC;;;;;KAC1E;IAEa,wCAAkB,GAAhC,UACE,QAAgB,EAChB,OAAgB;;;;;;wBAEV,UAAU,GAAG,WAAW,CAAC;wBACzB,UAAU,GAAG,mBAAmB,CAAC;wBACjC,YAAY,GAAG,gBAAS,QAAQ,cAAI,UAAU,CAAE,CAAC;wBAEjD,aAAa,GAAG,cAAO,UAAU,CAAE,CAAC;wBACpC,UAAU,GAAG,UAAG,UAAU,gBAAM,YAAY,cAAI,aAAa,MAAG,CAAC;wBAEjE,aAAa,GAAG,IAAA,iBAAU,EAAC,UAAU,CAAC,CAAC;6BACzC,CAAA,aAAa,CAAC,MAAM,KAAK,CAAC,CAAA,EAA1B,wBAA0B;wBAC5B,qBAAM,IAAA,wBAAiB,EACrB,UAAU,EACV,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,EACxB,OAAO,EACP,QAAQ,CACT,EAAA;;wBALD,SAKC,CAAC;wBACF,IAAA,eAAK,EAAC,yBAAa,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,cAAW,CAAC,CAAC;;;wBAExD,IAAA,aAAG,EAAC,gCAAoB,YAAY,kBAAQ,aAAa,YAAS,CAAC,CAAC;wBACpE,IAAA,aAAG,EAAC,+DAA+D,CAAC,CAAC;;;;;;KAExE;IAEO,0CAAoB,GAA5B,UACE,QAAgB,EAChB,UAAe;QAFjB,iBAwBC;QApBC,IAAI,EAAE,GAAG,OAAO,CAAC,OAAO,EAAE,CAAC;QAE3B,iEAAiE;QACjE,qDAAqD;QACrD,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,QAAQ,CAAC,EAAE;YAC5B,IAAA,aAAG,EAAC,UAAG,QAAQ,wCAAqC,CAAC,CAAC;YACtD,EAAE,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC;SACxB;QACD,IAAM,EAAE,GAAG,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,mBAAmB,CAAC,CAAC;QAEpD,IAAI,QAAQ,KAAK,SAAS,IAAI,UAAU,CAAC,gBAAgB,CAAC,EAAE;YAC1D,oEAAoE;YACpE,kEAAkE;YAClE,OAAO,UAAU,CAAC,gBAAgB,CAAC,CAAC;SACrC;QACD,EAAE,GAAG,EAAE,CAAC,IAAI,CAAC;YACX,OAAA,EAAE,CAAC,aAAa,CAAC,EAAE,EAAE,KAAI,CAAC,UAAU,CAAC,cAAc,CAAC,UAAU,CAAC,CAAC;QAAhE,CAAgE,CACjE,CAAC;QAEF,OAAO,EAAE,CAAC;IACZ,CAAC;IAEO,8BAAQ,GAAhB,UACE,QAAgB,EAChB,SAAiB,EACjB,OAAgB,EAChB,QAAiB;QAEjB,qEAAqE;QACrE,yEAAyE;QACzE,IAAI,QAAQ,CAAC,KAAK,CAAC,iBAAiB,CAAC,EAAE;YACrC,OAAO,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;SAC9B;QAED,2EAA2E;QAC3E,wBAAwB;QACxB,IAAI,QAAQ,CAAC,KAAK,CAAC,sBAAsB,CAAC,EAAE;YAC1C,OAAO,OAAO,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;SAClC;QAED,IAAI,GAAG,GAAG,SAAS,CAAC;QACpB,IAAI,CAAC,YAAY,CAAC,OAAO,CAAC,CAAC,OAAO,CAAC,UAAC,gBAAwB;YAC1D,IAAI,QAAQ,IAAI,gBAAgB,KAAK,QAAQ,EAAE;gBAC7C,GAAG,GAAG,CAAC,CAAC,GAAG,CAAC,OAAO,EAAE,mBAAmB,EAAE,IAAI,CAAC,CAAC;aACjD;iBAAM,IAAI,QAAQ,KAAK,SAAS,EAAE;gBACjC,GAAG,GAAG,CAAC,CAAC,GAAG,CAAC,OAAO,EAAE,mBAAmB,EAAE,IAAI,CAAC,CAAC;aACjD;QACH,CAAC,CAAC,CAAC;QAEH,OAAO,OAAO,CAAC,OAAO,CACpB,QAAQ,CAAC,OAAO,CACd,6BAA6B,EAC7B,UAAA,KAAK;YACH,2CAA2C;YAC3C,OAAA,KAAK;gBACL,yDAAyD;gBACzD,kBAAkB;gBAClB,kBAAW,GAAG,UAAO;gBACrB,OAAO;QAJP,CAIO,CACV,CACF,CAAC;IACJ,CAAC;IAED,oDAAoD;IAE5C,uCAAiB,GAAzB,UAA0B,QAAgB;QACxC,IAAM,SAAS,GACb,qEAAqE,CAAC;QACxE,IAAI,QAAQ,CAAC,OAAO,CAAC,SAAS,CAAC,IAAI,CAAC,EAAE;YACpC,OAAO,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;SAC9B;QAED,OAAO,OAAO,CAAC,OAAO,CACpB,QAAQ,CAAC,OAAO,CACd,WAAW,CAAC,mCAAmC;QAC/C,2CAA2C;QAC3C,UAAA,KAAK,IAAI,OAAA,SAAS,GAAG,IAAI,GAAG,KAAK,EAAxB,CAAwB,CAClC,CACF,CAAC;IACJ,CAAC;IAEO,yCAAmB,GAA3B,UAA4B,QAAgB;QAC1C,OAAO,OAAO,CAAC,OAAO,CACpB,QAAQ,CAAC,OAAO,CACd,gGAAgG,EAChG,EAAE,CACH,CACF,CAAC;IACJ,CAAC;IAED,gDAAgD;IAExC,qDAA+B,GAAvC,UAAwC,YAAiB;QACvD,KAAqB,UAAY,EAAZ,6BAAY,EAAZ,0BAAY,EAAZ,IAAY,EAAE;YAA9B,IAAM,MAAM,qBAAA;YACf,IACE,CAAC,MAAM,CAAC,WAAW,CAAC,KAAK,CAAC,oCAAoC,CAAC;gBAC/D,MAAM,CAAC,WAAW,CAAC,KAAK,CAAC,oCAAoC,CAAC,EAC9D;gBACA,SAAS;aACV;YACD,IAAI,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC;YAC1C,IAAI;gBACF,sFAAsF;gBACtF,8CAA8C;oBAC9C,uFAAuF;oBACvF,IAAI,CAAC,OAAO,CACV,qBAAqB,EACrB;wBACE,6CAA6C;wBAC7C,OAAA,yFAAyF;oBAAzF,CAAyF,CAC5F;oBACD,6EAA6E,CAAC;YAChF,MAAM,CAAC,WAAW,GAAG,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;SAC3C;IACH,CAAC;IAEO,sDAAgC,GAAxC,UAAyC,YAAiB,EAAE,IAAS;QACnE,KAAqB,UAAY,EAAZ,6BAAY,EAAZ,0BAAY,EAAZ,IAAY,EAAE;YAA9B,IAAM,MAAM,qBAAA;YACf,IACE,MAAM,CAAC,WAAW,CAAC,KAAK,CACtB,+CAA+C,CAChD,EACD;gBACA,OAAO;aACR;SACF;QAED,IAAI,CAAC,aAAa,CAChB,EAAE,EACF,0BAA0B,EAC1B,gCAAgC,EAChC,IAAI,EACJ;YACE,SAAS,EAAE,SAAS;YACpB,WAAW,EAAE,kSAIpB;SACM,CACF,CAAC;IACJ,CAAC;IAEO,qCAAe,GAAvB,UACE,QAAgB,EAChB,QAAgB;QAFlB,iBAmDC;QA/CC,IAAM,IAAI,GAAG,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;QACrC,OAAO,IAAI,OAAO,CAAC,UAAC,OAAO,EAAE,MAAM;YACjC,IAAI,CAAC,KAAK,CAAC,UAAC,GAAQ;gBAClB,IAAI,GAAG,EAAE;oBACP,MAAM,CAAC,GAAG,CAAC,CAAC;oBACZ,OAAO;iBACR;gBAED,IAAM,YAAY,GAAG,EAAE,CAAC;gBACxB,KAAK,IAAM,GAAG,IAAI,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,wBAAwB;oBAClE,EAAE,EAAE;oBACJ;oBACE,iDAAiD;oBACjD,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,wBAAwB,CAAC,cAAc,CAC/D,GAAG,CACJ,EACD;wBACA,IAAM,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,wBAAwB,CAAC,GAAG,CAAC,CAAC;wBACpE,IAAI,GAAG,CAAC,GAAG,EAAE;4BACX,YAAY,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;yBACxB;qBACF;iBACF;gBAED,IAAI;oBACF,KAAI,CAAC,+BAA+B,CAAC,YAAY,CAAC,CAAC;iBACpD;gBAAC,OAAO,CAAC,EAAE;oBACV,IAAA,aAAG,EAAC,CAAC,CAAC,CAAC;iBACR;gBACD,IAAI;oBACF,KAAI,CAAC,gCAAgC,CAAC,YAAY,EAAE,IAAI,CAAC,CAAC;iBAC3D;gBAAC,OAAO,CAAC,EAAE;oBACV,IAAA,aAAG,EAAC,CAAC,CAAC,CAAC;iBACR;gBAED,wEAAwE;gBACxE,sEAAsE;gBACtE,qEAAqE;gBACrE,mBAAmB;gBACnB,IAAM,WAAW,GAAG,IAAI,CAAC,SAAS,EAAE,CAAC;gBACrC,IAAI,WAAW,KAAK,QAAQ,EAAE;oBAC5B,OAAO,CAAC,SAAS,CAAC,CAAC;iBACpB;qBAAM;oBACL,OAAO,CAAC,WAAW,CAAC,CAAC;iBACtB;YACH,CAAC,CAAC,CAAC;QACL,CAAC,CAAC,CAAC;IACL,CAAC;IAEO,+CAAyB,GAAjC,UAAkC,IAAS;QACzC,IAAM,OAAO,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,wBAAwB,IAAI,EAAE,CAAC;QACzE,IAAM,WAAW,GAAG,IAAI,CAAC,cAAc,EAAE,CAAC,IAAI,CAAC;QAC/C,IAAM,aAAa,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,eAAe,CAAC;QAEhE,+DAA+D;QAC/D,uEAAuE;QACvE,WAAW;QACX,KAAkB,UAAoB,EAApB,KAAA,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,EAApB,cAAoB,EAApB,IAAoB,EAAE;YAAnC,IAAM,GAAG,SAAA;YACZ,IAAM,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC;YAE5B,kBAAkB;YAClB,IAAI,OAAO,MAAM,KAAK,QAAQ,EAAE;gBAC9B,SAAS;aACV;YAED,oEAAoE;YACpE,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC,KAAK,CAAC,oCAAoC,CAAC,EAAE;gBACnE,SAAS;aACV;YAED,MAAM,CAAC,WAAW,GAAG,IAAI,CAAC,SAAS,CACjC,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,WAAW,CAAC;gBAC5B,kCAAkC;iBACjC,OAAO,CAAC,mDAAmD,EAAE,EAAE,CAAC;iBAChE,OAAO,CACN,uFAAuF,EACvF,EAAE,CACH;gBACD,qEAAqE;gBACrE,mEAAmE;gBACnE,mBAAmB;iBAClB,OAAO,CACN,kGAAkG,EAClG,qBAAqB,CACtB,CACJ,CAAC;SACH;QAED,4BAA4B;QAC5B,KAAkB,UAAoB,EAApB,KAAA,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,EAApB,cAAoB,EAApB,IAAoB,EAAE;YAAnC,IAAM,GAAG,SAAA;YACZ,IAAM,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC;YAE5B,4CAA4C;YAC5C,IAAI,OAAO,MAAM,KAAK,QAAQ,IAAI,MAAM,KAAK,SAAS,EAAE;gBACtD,SAAS;aACV;YAED,IACE,MAAM,CAAC,WAAW,CAAC,KAAK,CACtB,oEAAoE,CACrE,EACD;gBACA,gEAAgE;gBAChE,OAAO,OAAO,CAAC,GAAG,CAAC,CAAC;gBACpB,gEAAgE;gBAChE,OAAO,OAAO,CAAC,UAAG,GAAG,aAAU,CAAC,CAAC;gBACjC,IAAM,MAAM,GAAG,aAAa,CAAC,WAAW,CAAC,CAAC,WAAW,CAAC;gBACtD,IAAI,MAAM,EAAE;oBACV,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;wBACtC,IAAI,MAAM,CAAC,CAAC,CAAC,CAAC,KAAK,KAAK,GAAG,EAAE;4BAC3B,MAAM,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;4BACpB,MAAM;yBACP;qBACF;iBACF;gBACD,SAAS;aACV;SACF;IACH,CAAC;IAEO,uCAAiB,GAAzB,UACE,SAAiB,EACjB,QAAgB;QAFlB,iBAgBC;QAZC,IAAM,IAAI,GAAG,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;QACrC,OAAO,IAAI,OAAO,CAAC,UAAC,OAAO,EAAE,MAAM;YACjC,IAAI,CAAC,KAAK,CAAC,UAAC,GAAQ;gBAClB,IAAI,GAAG,EAAE;oBACP,MAAM,CAAC,GAAG,CAAC,CAAC;oBACZ,OAAO;iBACR;gBAED,KAAI,CAAC,yBAAyB,CAAC,IAAI,CAAC,CAAC;gBACrC,OAAO,CAAC,IAAI,CAAC,SAAS,EAAE,CAAC,CAAC;YAC5B,CAAC,CAAC,CAAC;QACL,CAAC,CAAC,CAAC;IACL,CAAC;IA1eD;;OAEG;IACY,+CAAmC,GAAG,aAAa,CAAC;IAwerE,kBAAC;CAAA,AA5eD,CAAiC,6BAAa,GA4e7C","sourcesContent":["/* eslint-disable max-lines */\nimport { exec } from 'child_process';\nimport * as fs from 'fs';\nimport type { Answers} from 'inquirer';\nimport { prompt } from 'inquirer';\nimport * as _ from 'lodash';\nimport * as path from 'path';\nimport { promisify } from 'util';\n\nimport type { Args } from '../../Constants';\nimport {\n exists,\n matchesContent,\n matchFiles,\n patchMatchingFile,\n} from '../../Helper/File';\nimport { dim, green, nl, red } from '../../Helper/Logging';\nimport { checkPackageVersion } from '../../Helper/Package';\nimport { getPackageMangerChoice } from '../../Helper/PackageManager';\nimport { SentryCli } from '../../Helper/SentryCli';\nimport { MobileProject } from './MobileProject';\n\nconst xcode = require('xcode');\n\nexport const COMPATIBLE_REACT_NATIVE_VERSIONS = '>=0.69.0';\nexport const COMPATIBLE_SDK_VERSION = '>= 5.0.0';\n\nexport const SENTRY_REACT_NATIVE_PACKAGE = '@sentry/react-native';\nexport const REACT_NATIVE_PACKAGE = 'react-native';\n\nexport const DOCS_MANUAL_STEPS =\n 'https://docs.sentry.io/platforms/react-native/manual-setup/manual-setup/';\n\nexport class ReactNative extends MobileProject {\n /**\n * All React Native versions have app/build.gradle with android section.\n */\n private static _buildGradleAndroidSectionBeginning = /^android {/m;\n\n protected _answers: Answers;\n protected _sentryCli: SentryCli;\n\n public constructor(protected _argv: Args) {\n super(_argv);\n this._sentryCli = new SentryCli(this._argv);\n }\n\n public async emit(answers: Answers): Promise<Answers> {\n if (this._argv.uninstall) {\n return this.uninstall(answers);\n }\n if (!(await this.shouldEmit(answers))) {\n return {};\n }\n nl();\n\n let userAnswers: Answers = { continue: true };\n const packageManager = getPackageMangerChoice();\n\n const hasCompatibleReactNativeVersion = checkPackageVersion(\n this._readAppPackage(),\n REACT_NATIVE_PACKAGE,\n COMPATIBLE_REACT_NATIVE_VERSIONS,\n true,\n );\n if (!hasCompatibleReactNativeVersion && !this._argv.quiet) {\n userAnswers = await prompt({\n message: 'Your version of React Native is not compatible with Sentry\\'s React Native SDK. Do you want to continue?',\n name: 'continue',\n default: false,\n type: 'confirm',\n });\n nl();\n }\n if (!userAnswers.continue) {\n throw new Error(\n `Please upgrade to a version that is compatible with ${COMPATIBLE_REACT_NATIVE_VERSIONS}. Or use ${DOCS_MANUAL_STEPS}`,\n );\n }\n\n if (packageManager) {\n await packageManager.installPackage(SENTRY_REACT_NATIVE_PACKAGE);\n }\n const hasCompatibleSentryReactNativeVersion = checkPackageVersion(\n this._readAppPackage(),\n SENTRY_REACT_NATIVE_PACKAGE,\n COMPATIBLE_SDK_VERSION,\n true,\n );\n if (!hasCompatibleSentryReactNativeVersion && !this._argv.quiet) {\n userAnswers = await prompt({\n message: `Your version of ${SENTRY_REACT_NATIVE_PACKAGE} is not compatible with this wizard. Do you want to continue?`,\n name: 'continue',\n default: false,\n type: 'confirm',\n });\n nl();\n }\n if (!userAnswers.continue) {\n throw new Error(\n `Please upgrade to a version that is compatible with ${COMPATIBLE_SDK_VERSION}.`,\n );\n }\n\n const sentryCliProperties = this._sentryCli.convertAnswersToProperties(\n answers,\n );\n\n const promises = this.getPlatforms(answers).map(\n async (platform: string) => {\n try {\n if (platform === 'ios') {\n await patchMatchingFile(\n 'ios/*.xcodeproj/project.pbxproj',\n this._patchXcodeProj.bind(this),\n );\n green('✓ Patched build script in Xcode project.');\n await this._podInstall();\n green('✓ Pods installed.');\n } else {\n await patchMatchingFile(\n '**/app/build.gradle',\n this._patchBuildGradle.bind(this),\n );\n green('✓ Patched build.gradle file.');\n }\n await this._patchJsSentryInit(platform, answers);\n await this._addSentryProperties(platform, sentryCliProperties);\n green(`✓ Added sentry.properties file to ${platform}`);\n } catch (e) {\n red(e);\n }\n },\n );\n\n await Promise.all(promises);\n\n return answers;\n }\n\n public async uninstall(_answers: Answers): Promise<Answers> {\n await patchMatchingFile(\n '**/*.xcodeproj/project.pbxproj',\n this._unpatchXcodeProj.bind(this),\n );\n await patchMatchingFile(\n '**/app/build.gradle',\n this._unpatchBuildGradle.bind(this),\n );\n return {};\n }\n\n // eslint-disable-next-line @typescript-eslint/require-await\n protected async _shouldConfigurePlatform(platform: string): Promise<boolean> {\n let result = false;\n\n if (!exists(`${platform}/sentry.properties`)) {\n result = true;\n this.debug(`${platform}/sentry.properties not exists`);\n }\n\n if (!matchesContent('**/*.xcodeproj/project.pbxproj', /sentry-cli/gi)) {\n result = true;\n this.debug('**/*.xcodeproj/project.pbxproj not matched');\n }\n\n if (!matchesContent('**/app/build.gradle', /sentry\\.gradle/gi)) {\n result = true;\n this.debug('**/app/build.gradle not matched');\n }\n\n const regex = /Sentry/gi;\n if (\n exists(`index.${platform}.js`) &&\n !matchesContent(`index.${platform}.js`, regex)\n ) {\n result = true;\n this.debug(`index.${platform}.js not matched`);\n }\n if (exists('App.js') && !matchesContent('App.js', regex)) {\n result = true;\n this.debug('index.js or App.js not matched');\n }\n\n if (this._argv.uninstall) {\n // if we uninstall we need to invert the result so we remove already patched\n // but leave untouched platforms as they are\n return !result;\n }\n\n return result;\n }\n\n private _readAppPackage(): Record<string, unknown> {\n let appPackage: Record<string, unknown> = {};\n\n try {\n appPackage = JSON.parse(\n fs.readFileSync(path.join(process.cwd(), 'package.json'), 'utf8'),\n );\n } catch {\n // We don't need to have this\n }\n\n return appPackage;\n }\n\n private async _podInstall(): Promise<void> {\n await promisify(exec)('npx --yes pod-install --non-interactive --quiet');\n }\n\n private async _patchJsSentryInit(\n platform: string,\n answers: Answers,\n ): Promise<void> {\n const prefixGlob = '{.,./src}';\n const suffixGlob = '@(j|t|cj|mj)s?(x)';\n const platformGlob = `index.${platform}.${suffixGlob}`;\n // rm 0.49 introduced an App.js for both platforms\n const universalGlob = `App.${suffixGlob}`;\n const jsFileGlob = `${prefixGlob}/+(${platformGlob}|${universalGlob})`;\n\n const jsFileToPatch = matchFiles(jsFileGlob);\n if (jsFileToPatch.length !== 0) {\n await patchMatchingFile(\n jsFileGlob,\n this._patchJs.bind(this),\n answers,\n platform,\n );\n green(`✓ Patched ${jsFileToPatch.join(', ')} file(s).`);\n } else {\n red(`✗ Could not find ${platformGlob} nor ${universalGlob} files.`);\n red('✗ Please, visit https://docs.sentry.io/platforms/react-native');\n }\n }\n\n private _addSentryProperties(\n platform: string,\n properties: any,\n ): Promise<void> {\n let rv = Promise.resolve();\n\n // This will create the ios/android folder before trying to write\n // sentry.properties in it which would fail otherwise\n if (!fs.existsSync(platform)) {\n dim(`${platform} folder did not exist, creating it.`);\n fs.mkdirSync(platform);\n }\n const fn = path.join(platform, 'sentry.properties');\n\n if (platform === 'android' && properties['cli/executable']) {\n // We don't need to write the sentry-cli path in the properties file\n // since our gradle plugins already pick it up on the correct spot\n delete properties['cli/executable'];\n }\n rv = rv.then(() =>\n fs.writeFileSync(fn, this._sentryCli.dumpProperties(properties)),\n );\n\n return rv;\n }\n\n private _patchJs(\n contents: string,\n _filename: string,\n answers: Answers,\n platform?: string,\n ): Promise<string | null> {\n // since the init call could live in other places too, we really only\n // want to do this if we managed to patch any of the other files as well.\n if (contents.match(/Sentry.config\\(/)) {\n return Promise.resolve(null);\n }\n\n // if we match @sentry\\/react-native somewhere, we already patched the file\n // and no longer need to\n if (contents.match('@sentry/react-native')) {\n return Promise.resolve(contents);\n }\n\n let dsn = '__DSN__';\n this.getPlatforms(answers).forEach((selectedPlatform: string) => {\n if (platform && selectedPlatform === platform) {\n dsn = _.get(answers, 'config.dsn.public', null);\n } else if (platform === undefined) {\n dsn = _.get(answers, 'config.dsn.public', null);\n }\n });\n\n return Promise.resolve(\n contents.replace(\n /^([^]*)(import\\s+[^;]*?;$)/m,\n match =>\n // eslint-disable-next-line prefer-template\n match +\n \"\\n\\nimport * as Sentry from '@sentry/react-native';\\n\\n\" +\n 'Sentry.init({ \\n' +\n ` dsn: '${dsn}', \\n` +\n '});\\n',\n ),\n );\n }\n\n // ANDROID -----------------------------------------\n\n private _patchBuildGradle(contents: string): Promise<string | null> {\n const applyFrom =\n 'apply from: \"../../node_modules/@sentry/react-native/sentry.gradle\"';\n if (contents.indexOf(applyFrom) >= 0) {\n return Promise.resolve(null);\n }\n\n return Promise.resolve(\n contents.replace(\n ReactNative._buildGradleAndroidSectionBeginning,\n // eslint-disable-next-line prefer-template\n match => applyFrom + '\\n' + match,\n ),\n );\n }\n\n private _unpatchBuildGradle(contents: string): Promise<string> {\n return Promise.resolve(\n contents.replace(\n /^\\s*apply from: [\"']..\\/..\\/node_modules\\/@sentry\\/react-native\\/sentry.gradle[\"'];?\\s*?\\r?\\n/m,\n '',\n ),\n );\n }\n\n // IOS -----------------------------------------\n\n private _patchExistingXcodeBuildScripts(buildScripts: any): void {\n for (const script of buildScripts) {\n if (\n !script.shellScript.match(/\\/scripts\\/react-native-xcode\\.sh/i) ||\n script.shellScript.match(/sentry-cli\\s+react-native\\s+xcode/i)\n ) {\n continue;\n }\n let code = JSON.parse(script.shellScript);\n code =\n // eslint-disable-next-line prefer-template, @typescript-eslint/restrict-plus-operands\n 'export SENTRY_PROPERTIES=sentry.properties\\n' +\n 'export EXTRA_PACKAGER_ARGS=\"--sourcemap-output $DERIVED_FILE_DIR/main.jsbundle.map\"\\n' +\n code.replace(\n '$REACT_NATIVE_XCODE',\n () =>\n // eslint-disable-next-line no-useless-escape\n '\\\\\"../node_modules/@sentry/cli/bin/sentry-cli react-native xcode $REACT_NATIVE_XCODE\\\\\"',\n ) +\n '\\n/bin/sh ../node_modules/@sentry/react-native/scripts/collect-modules.sh\\n';\n script.shellScript = JSON.stringify(code);\n }\n }\n\n private _addNewXcodeBuildPhaseForSymbols(buildScripts: any, proj: any): void {\n for (const script of buildScripts) {\n if (\n script.shellScript.match(\n /sentry-cli\\s+(upload-dsym|debug-files upload)/,\n )\n ) {\n return;\n }\n }\n\n proj.addBuildPhase(\n [],\n 'PBXShellScriptBuildPhase',\n 'Upload Debug Symbols to Sentry',\n null,\n {\n shellPath: '/bin/sh',\n shellScript: `\nexport SENTRY_PROPERTIES=sentry.properties\n[[ $SENTRY_INCLUDE_NATIVE_SOURCES == \"true\" ]] && INCLUDE_SOURCES_FLAG=\"--include-sources\" || INCLUDE_SOURCES_FLAG=\"\"\n../node_modules/@sentry/cli/bin/sentry-cli debug-files upload \"$INCLUDE_SOURCES_FLAG\" \"$DWARF_DSYM_FOLDER_PATH\"\n`,\n },\n );\n }\n\n private _patchXcodeProj(\n contents: string,\n filename: string,\n ): Promise<string | undefined> {\n const proj = xcode.project(filename);\n return new Promise((resolve, reject) => {\n proj.parse((err: any) => {\n if (err) {\n reject(err);\n return;\n }\n\n const buildScripts = [];\n for (const key in proj.hash.project.objects.PBXShellScriptBuildPhase ||\n {}) {\n if (\n // eslint-disable-next-line no-prototype-builtins\n proj.hash.project.objects.PBXShellScriptBuildPhase.hasOwnProperty(\n key,\n )\n ) {\n const val = proj.hash.project.objects.PBXShellScriptBuildPhase[key];\n if (val.isa) {\n buildScripts.push(val);\n }\n }\n }\n\n try {\n this._patchExistingXcodeBuildScripts(buildScripts);\n } catch (e) {\n red(e);\n }\n try {\n this._addNewXcodeBuildPhaseForSymbols(buildScripts, proj);\n } catch (e) {\n red(e);\n }\n\n // we always modify the xcode file in memory but we only want to save it\n // in case the user wants configuration for ios. This is why we check\n // here first if changes are made before we might prompt the platform\n // continue prompt.\n const newContents = proj.writeSync();\n if (newContents === contents) {\n resolve(undefined);\n } else {\n resolve(newContents);\n }\n });\n });\n }\n\n private _unpatchXcodeBuildScripts(proj: any): void {\n const scripts = proj.hash.project.objects.PBXShellScriptBuildPhase || {};\n const firstTarget = proj.getFirstTarget().uuid;\n const nativeTargets = proj.hash.project.objects.PBXNativeTarget;\n\n // scripts to patch partially. Run this first so that we don't\n // accidentally delete some scripts later entirely that we only want to\n // rewrite.\n for (const key of Object.keys(scripts)) {\n const script = scripts[key];\n\n // ignore comments\n if (typeof script === 'string') {\n continue;\n }\n\n // ignore scripts that do not invoke the react-native-xcode command.\n if (!script.shellScript.match(/sentry-cli\\s+react-native\\s+xcode/i)) {\n continue;\n }\n\n script.shellScript = JSON.stringify(\n JSON.parse(script.shellScript)\n // remove sentry properties export\n .replace(/^export SENTRY_PROPERTIES=sentry.properties\\r?\\n/m, '')\n .replace(\n /^\\/bin\\/sh ..\\/node_modules\\/@sentry\\/react-native\\/scripts\\/collect-modules.sh\\r?\\n/m,\n '',\n )\n // unwrap react-native-xcode.sh command. In case someone replaced it\n // entirely with the sentry-cli command we need to put the original\n // version back in.\n .replace(\n /\\.\\.\\/node_modules\\/@sentry\\/cli\\/bin\\/sentry-cli\\s+react-native\\s+xcode\\s+\\$REACT_NATIVE_XCODE/i,\n '$REACT_NATIVE_XCODE',\n ),\n );\n }\n\n // scripts to kill entirely.\n for (const key of Object.keys(scripts)) {\n const script = scripts[key];\n\n // ignore comments and keys that got deleted\n if (typeof script === 'string' || script === undefined) {\n continue;\n }\n\n if (\n script.shellScript.match(\n /@sentry\\/cli\\/bin\\/sentry-cli\\s+(upload-dsym|debug-files upload)\\b/,\n )\n ) {\n // eslint-disable-next-line @typescript-eslint/no-dynamic-delete\n delete scripts[key];\n // eslint-disable-next-line @typescript-eslint/no-dynamic-delete\n delete scripts[`${key}_comment`];\n const phases = nativeTargets[firstTarget].buildPhases;\n if (phases) {\n for (let i = 0; i < phases.length; i++) {\n if (phases[i].value === key) {\n phases.splice(i, 1);\n break;\n }\n }\n }\n continue;\n }\n }\n }\n\n private _unpatchXcodeProj(\n _contents: string,\n filename: string,\n ): Promise<string> {\n const proj = xcode.project(filename);\n return new Promise((resolve, reject) => {\n proj.parse((err: any) => {\n if (err) {\n reject(err);\n return;\n }\n\n this._unpatchXcodeBuildScripts(proj);\n resolve(proj.writeSync());\n });\n });\n }\n}\n"]}
@@ -14,7 +14,7 @@ var __generator = (this && this.__generator) || function (thisArg, body) {
14
14
  function verb(n) { return function (v) { return step([n, v]); }; }
15
15
  function step(op) {
16
16
  if (f) throw new TypeError("Generator is already executing.");
17
- while (_) try {
17
+ while (g && (g = 0, op[0] && (_ = 0)), _) try {
18
18
  if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;
19
19
  if (y = 0, t) op = [op[0] & 2, t.value];
20
20
  switch (op[0]) {
@@ -1 +1 @@
1
- {"version":3,"file":"ReactNative.js","sourceRoot":"","sources":["../../../../../lib/Steps/Integrations/__tests__/ReactNative.ts"],"names":[],"mappings":"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","sourcesContent":["jest.mock('../../../Helper/Logging.ts'); // We mock logging to not pollute the output\njest.mock('child_process');\nimport * as child_process from 'child_process';\nimport * as fs from 'fs';\nimport { Answers } from 'inquirer';\nimport * as path from 'path';\nimport * as process from 'process';\nimport * as rimraf from 'rimraf';\n\nimport { Args, Integration, Platform } from '../../../Constants';\nimport { ReactNative } from '../ReactNative';\n\nconst testDir = 'rn-test';\nconst iosIndexJs = 'index.ios.js';\nconst appTsx = 'src/App.tsx';\nconst appBuildGradle = 'android/app/build.gradle';\nconst yarnLock = 'yarn.lock';\n\nconst dummyJsContent = 'import React from \"react\";\\n';\nconst dummyAppBuildGradleContent = 'apply plugin: \"com.facebook.react\"\\n\\nandroid {\\n}\\n';\n\nconst testArgs = {\n debug: false,\n integration: Integration.reactNative,\n platform: [Platform.ios],\n quiet: true,\n skipConnect: true,\n uninstall: false,\n url: 'https://not.used',\n};\n\nconst mockIosAnswers: Answers = {\n shouldConfigurePlatforms: { 'ios': true },\n config: {\n dsn: {\n public: 'dns.public.com',\n },\n },\n};\n\nconst mockAndroidAnswers: Answers = {\n shouldConfigurePlatforms: { 'android': true },\n config: {\n dsn: {\n public: 'dns.public.com',\n },\n },\n};\n\nconst originalExec = child_process.exec;\n\nconst restoreExec = (): void => {\n (child_process as any).exec = originalExec;\n}\n\nconst mockExec = (): void => {\n (child_process.exec as unknown as jest.Mock)\n .mockImplementation((_command, callback) => callback(null, { stdout: '' }));\n}\n\ndescribe('ReactNative', () => {\n\n const defaultCwd = process.cwd();\n\n beforeEach(() => {\n rimraf.sync(testDir);\n fs.mkdirSync(testDir);\n process.chdir(testDir);\n fs.writeFileSync(iosIndexJs, dummyJsContent);\n fs.mkdirSync(path.dirname(appTsx), { recursive: true });\n fs.writeFileSync(appTsx, dummyJsContent);\n fs.mkdirSync(path.dirname(appBuildGradle), { recursive: true });\n fs.writeFileSync(appBuildGradle, dummyAppBuildGradleContent);\n fs.writeFileSync(yarnLock, '');\n mockExec();\n });\n\n afterEach(() => {\n restoreExec();\n process.chdir(defaultCwd);\n rimraf.sync(testDir);\n });\n\n test('patches js files', async () => {\n const project = new ReactNative(testArgs as Args);\n await project.emit(mockIosAnswers);\n\n const patchedIosIndexJs = fs.readFileSync(iosIndexJs, 'utf8');\n const patchedAppTsx = fs.readFileSync(appTsx, 'utf8');\n const expectedPatch = 'import React from \"react\";\\n\\n' +\n 'import * as Sentry from \\'@sentry/react-native\\';\\n\\n' +\n 'Sentry.init({ \\n' +\n ' dsn: \\'dns.public.com\\', \\n' +\n '});\\n\\n';\n expect(patchedIosIndexJs).toEqual(expectedPatch);\n expect(patchedAppTsx).toEqual(expectedPatch);\n });\n\n test('patches android app build gradle file', async () => {\n const project = new ReactNative(testArgs as Args);\n\n await project.emit(mockAndroidAnswers);\n\n const patchedAppBuildGradle = fs.readFileSync(appBuildGradle, 'utf8');\n const expectedPatch = 'apply plugin: \"com.facebook.react\"\\n\\n' +\n 'apply from: \"../../node_modules/@sentry/react-native/sentry.gradle\"\\n' +\n 'android {\\n}\\n';\n expect(patchedAppBuildGradle).toEqual(expectedPatch);\n });\n\n test('does install sentry sdk', async () => {\n const project = new ReactNative(testArgs as Args);\n\n await project.emit(mockIosAnswers);\n\n expect(child_process.exec).toHaveBeenCalledWith('yarn add @sentry/react-native', expect.anything());\n });\n\n test('executes pod install', async () => {\n const project = new ReactNative(testArgs as Args);\n\n await project.emit(mockIosAnswers);\n\n expect(child_process.exec).toHaveBeenCalledWith('npx --yes pod-install --non-interactive --quiet', expect.anything());\n });\n});\n"]}
1
+ {"version":3,"file":"ReactNative.js","sourceRoot":"","sources":["../../../../../lib/Steps/Integrations/__tests__/ReactNative.ts"],"names":[],"mappings":"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","sourcesContent":["jest.mock('../../../Helper/Logging.ts'); // We mock logging to not pollute the output\njest.mock('child_process');\nimport * as child_process from 'child_process';\nimport * as fs from 'fs';\nimport type { Answers } from 'inquirer';\nimport * as path from 'path';\nimport * as process from 'process';\nimport * as rimraf from 'rimraf';\n\nimport type { Args} from '../../../Constants';\nimport { Integration, Platform } from '../../../Constants';\nimport { ReactNative } from '../ReactNative';\n\nconst testDir = 'rn-test';\nconst iosIndexJs = 'index.ios.js';\nconst appTsx = 'src/App.tsx';\nconst appBuildGradle = 'android/app/build.gradle';\nconst yarnLock = 'yarn.lock';\n\nconst dummyJsContent = 'import React from \"react\";\\n';\nconst dummyAppBuildGradleContent = 'apply plugin: \"com.facebook.react\"\\n\\nandroid {\\n}\\n';\n\nconst testArgs = {\n debug: false,\n integration: Integration.reactNative,\n platform: [Platform.ios],\n quiet: true,\n skipConnect: true,\n uninstall: false,\n url: 'https://not.used',\n};\n\nconst mockIosAnswers: Answers = {\n shouldConfigurePlatforms: { 'ios': true },\n config: {\n dsn: {\n public: 'dns.public.com',\n },\n },\n};\n\nconst mockAndroidAnswers: Answers = {\n shouldConfigurePlatforms: { 'android': true },\n config: {\n dsn: {\n public: 'dns.public.com',\n },\n },\n};\n\nconst originalExec = child_process.exec;\n\nconst restoreExec = (): void => {\n (child_process as any).exec = originalExec;\n}\n\nconst mockExec = (): void => {\n (child_process.exec as unknown as jest.Mock)\n .mockImplementation((_command, callback) => callback(null, { stdout: '' }));\n}\n\ndescribe('ReactNative', () => {\n\n const defaultCwd = process.cwd();\n\n beforeEach(() => {\n rimraf.sync(testDir);\n fs.mkdirSync(testDir);\n process.chdir(testDir);\n fs.writeFileSync(iosIndexJs, dummyJsContent);\n fs.mkdirSync(path.dirname(appTsx), { recursive: true });\n fs.writeFileSync(appTsx, dummyJsContent);\n fs.mkdirSync(path.dirname(appBuildGradle), { recursive: true });\n fs.writeFileSync(appBuildGradle, dummyAppBuildGradleContent);\n fs.writeFileSync(yarnLock, '');\n mockExec();\n });\n\n afterEach(() => {\n restoreExec();\n process.chdir(defaultCwd);\n rimraf.sync(testDir);\n });\n\n test('patches js files', async () => {\n const project = new ReactNative(testArgs as Args);\n await project.emit(mockIosAnswers);\n\n const patchedIosIndexJs = fs.readFileSync(iosIndexJs, 'utf8');\n const patchedAppTsx = fs.readFileSync(appTsx, 'utf8');\n const expectedPatch = 'import React from \"react\";\\n\\n' +\n 'import * as Sentry from \\'@sentry/react-native\\';\\n\\n' +\n 'Sentry.init({ \\n' +\n ' dsn: \\'dns.public.com\\', \\n' +\n '});\\n\\n';\n expect(patchedIosIndexJs).toEqual(expectedPatch);\n expect(patchedAppTsx).toEqual(expectedPatch);\n });\n\n test('patches android app build gradle file', async () => {\n const project = new ReactNative(testArgs as Args);\n\n await project.emit(mockAndroidAnswers);\n\n const patchedAppBuildGradle = fs.readFileSync(appBuildGradle, 'utf8');\n const expectedPatch = 'apply plugin: \"com.facebook.react\"\\n\\n' +\n 'apply from: \"../../node_modules/@sentry/react-native/sentry.gradle\"\\n' +\n 'android {\\n}\\n';\n expect(patchedAppBuildGradle).toEqual(expectedPatch);\n });\n\n test('does install sentry sdk', async () => {\n const project = new ReactNative(testArgs as Args);\n\n await project.emit(mockIosAnswers);\n\n expect(child_process.exec).toHaveBeenCalledWith('yarn add @sentry/react-native', expect.anything());\n });\n\n test('executes pod install', async () => {\n const project = new ReactNative(testArgs as Args);\n\n await project.emit(mockIosAnswers);\n\n expect(child_process.exec).toHaveBeenCalledWith('npx --yes pod-install --non-interactive --quiet', expect.anything());\n });\n});\n"]}
@@ -1,4 +1,4 @@
1
- import { Answers } from 'inquirer';
1
+ import type { Answers } from 'inquirer';
2
2
  import { BaseStep } from './BaseStep';
3
3
  export declare class OpenSentry extends BaseStep {
4
4
  emit(answers: Answers): Promise<Answers>;
@@ -3,10 +3,12 @@ var __extends = (this && this.__extends) || (function () {
3
3
  var extendStatics = function (d, b) {
4
4
  extendStatics = Object.setPrototypeOf ||
5
5
  ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||
6
- function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };
6
+ function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };
7
7
  return extendStatics(d, b);
8
8
  };
9
9
  return function (d, b) {
10
+ if (typeof b !== "function" && b !== null)
11
+ throw new TypeError("Class extends value " + String(b) + " is not a constructor or null");
10
12
  extendStatics(d, b);
11
13
  function __() { this.constructor = d; }
12
14
  d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
@@ -27,7 +29,7 @@ var __generator = (this && this.__generator) || function (thisArg, body) {
27
29
  function verb(n) { return function (v) { return step([n, v]); }; }
28
30
  function step(op) {
29
31
  if (f) throw new TypeError("Generator is already executing.");
30
- while (_) try {
32
+ while (g && (g = 0, op[0] && (_ = 0)), _) try {
31
33
  if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;
32
34
  if (y = 0, t) op = [op[0] & 2, t.value];
33
35
  switch (op[0]) {
@@ -68,32 +70,32 @@ var OpenSentry = /** @class */ (function (_super) {
68
70
  var baseUrl, data, urlObj, urlToOpen, e_1;
69
71
  return __generator(this, function (_a) {
70
72
  switch (_a.label) {
71
- case 0: return [4 /*yield*/, Wizard_1.getCurrentIntegration(answers).shouldEmit(answers)];
73
+ case 0: return [4 /*yield*/, (0, Wizard_1.getCurrentIntegration)(answers).shouldEmit(answers)];
72
74
  case 1:
73
75
  if (!(_a.sent())) {
74
- Logging_1.dim('Skipping connection to Sentry due files already patched');
76
+ (0, Logging_1.dim)('Skipping connection to Sentry due files already patched');
75
77
  return [2 /*return*/, {}];
76
78
  }
77
79
  if (this._argv.skipConnect) {
78
- Logging_1.dim('Skipping connection to Sentry');
80
+ (0, Logging_1.dim)('Skipping connection to Sentry');
79
81
  return [2 /*return*/, {}];
80
82
  }
81
83
  baseUrl = this._argv.url;
82
84
  BottomBar_1.BottomBar.show('Loading wizard...');
83
- this.debug("Loading wizard for " + baseUrl);
85
+ this.debug("Loading wizard for ".concat(baseUrl));
84
86
  _a.label = 2;
85
87
  case 2:
86
88
  _a.trys.push([2, 4, , 5]);
87
- return [4 /*yield*/, r2.get(baseUrl + "api/0/wizard/").json];
89
+ return [4 /*yield*/, r2.get("".concat(baseUrl, "api/0/wizard/")).json];
88
90
  case 3:
89
91
  data = _a.sent();
90
92
  BottomBar_1.BottomBar.hide();
91
- urlObj = new url_1.URL(baseUrl + "account/settings/wizard/" + data.hash + "/");
93
+ urlObj = new url_1.URL("".concat(baseUrl, "account/settings/wizard/").concat(data.hash, "/"));
92
94
  if (this._argv.signup) {
93
95
  urlObj.searchParams.set('signup', '1');
94
96
  // integration maps to platform in the wizard
95
97
  if (this._argv.integration) {
96
- urlObj.searchParams.set('project_platform', Constants_1.mapIntegrationToPlatform(this._argv.integration));
98
+ urlObj.searchParams.set('project_platform', (0, Constants_1.mapIntegrationToPlatform)(this._argv.integration));
97
99
  }
98
100
  if (this._argv.promoCode) {
99
101
  urlObj.searchParams.set('code', this._argv.promoCode);
@@ -101,19 +103,19 @@ var OpenSentry = /** @class */ (function (_super) {
101
103
  }
102
104
  urlToOpen = urlObj.toString();
103
105
  opn(urlToOpen);
104
- Logging_1.nl();
105
- Logging_1.l('Please open');
106
- Logging_1.green(urlToOpen);
107
- Logging_1.l("in your browser (if it's not open already)");
108
- Logging_1.nl();
106
+ (0, Logging_1.nl)();
107
+ (0, Logging_1.l)('Please open');
108
+ (0, Logging_1.green)(urlToOpen);
109
+ (0, Logging_1.l)("in your browser (if it's not open already)");
110
+ (0, Logging_1.nl)();
109
111
  return [2 /*return*/, { hash: data.hash }];
110
112
  case 4:
111
113
  e_1 = _a.sent();
112
114
  this._argv.skipConnect = true;
113
115
  BottomBar_1.BottomBar.hide();
114
- Logging_1.nl();
115
- Logging_1.red("Wizard couldn't connect to " + baseUrl + "\nmake sure the url is correct");
116
- Logging_1.l('But no worries, we fall back to asking you stuff instead, so here we go:');
116
+ (0, Logging_1.nl)();
117
+ (0, Logging_1.red)("Wizard couldn't connect to ".concat(baseUrl, "\nmake sure the url is correct"));
118
+ (0, Logging_1.l)('But no worries, we fall back to asking you stuff instead, so here we go:');
117
119
  return [2 /*return*/, {}];
118
120
  case 5: return [2 /*return*/];
119
121
  }