@sentry/wizard 3.40.0 → 3.41.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 (103) hide show
  1. package/CHANGELOG.md +8 -1
  2. package/README.md +19 -19
  3. package/bin.ts +5 -0
  4. package/codecov.yml +15 -0
  5. package/dist/bin.js +4 -0
  6. package/dist/bin.js.map +1 -1
  7. package/dist/e2e-tests/jest.config.d.ts +1 -0
  8. package/dist/e2e-tests/jest.config.js +1 -0
  9. package/dist/e2e-tests/jest.config.js.map +1 -1
  10. package/dist/package.json +3 -2
  11. package/dist/src/apple/apple-wizard.js +1 -2
  12. package/dist/src/apple/apple-wizard.js.map +1 -1
  13. package/dist/src/apple/code-tools.d.ts +10 -0
  14. package/dist/src/apple/code-tools.js +16 -12
  15. package/dist/src/apple/code-tools.js.map +1 -1
  16. package/dist/src/apple/fastlane.d.ts +23 -0
  17. package/dist/src/apple/fastlane.js +11 -7
  18. package/dist/src/apple/fastlane.js.map +1 -1
  19. package/dist/src/apple/templates.d.ts +1 -1
  20. package/dist/src/apple/templates.js +0 -2
  21. package/dist/src/apple/templates.js.map +1 -1
  22. package/dist/src/apple/xcode-manager.d.ts +10 -6
  23. package/dist/src/apple/xcode-manager.js +146 -61
  24. package/dist/src/apple/xcode-manager.js.map +1 -1
  25. package/dist/src/nextjs/nextjs-wizard.js +5 -3
  26. package/dist/src/nextjs/nextjs-wizard.js.map +1 -1
  27. package/dist/src/nuxt/nuxt-wizard.js +6 -4
  28. package/dist/src/nuxt/nuxt-wizard.js.map +1 -1
  29. package/dist/src/nuxt/sdk-setup.d.ts +1 -1
  30. package/dist/src/nuxt/sdk-setup.js +2 -1
  31. package/dist/src/nuxt/sdk-setup.js.map +1 -1
  32. package/dist/src/react-native/react-native-wizard.js +5 -3
  33. package/dist/src/react-native/react-native-wizard.js.map +1 -1
  34. package/dist/src/remix/remix-wizard.js +5 -3
  35. package/dist/src/remix/remix-wizard.js.map +1 -1
  36. package/dist/src/run.d.ts +1 -0
  37. package/dist/src/run.js +1 -0
  38. package/dist/src/run.js.map +1 -1
  39. package/dist/src/sveltekit/sveltekit-wizard.js +5 -3
  40. package/dist/src/sveltekit/sveltekit-wizard.js.map +1 -1
  41. package/dist/src/utils/clack-utils.d.ts +3 -1
  42. package/dist/src/utils/clack-utils.js +18 -12
  43. package/dist/src/utils/clack-utils.js.map +1 -1
  44. package/dist/src/utils/package-manager.d.ts +1 -0
  45. package/dist/src/utils/package-manager.js +5 -0
  46. package/dist/src/utils/package-manager.js.map +1 -1
  47. package/dist/src/utils/types.d.ts +9 -0
  48. package/dist/src/utils/types.js.map +1 -1
  49. package/dist/test/apple/cocoapod.test.d.ts +1 -0
  50. package/dist/test/apple/cocoapod.test.js +409 -0
  51. package/dist/test/apple/cocoapod.test.js.map +1 -0
  52. package/dist/test/apple/code-tools.test.d.ts +1 -0
  53. package/dist/test/apple/code-tools.test.js +673 -0
  54. package/dist/test/apple/code-tools.test.js.map +1 -0
  55. package/dist/test/apple/fastfile.test.d.ts +1 -0
  56. package/dist/test/apple/fastfile.test.js +431 -0
  57. package/dist/test/apple/fastfile.test.js.map +1 -0
  58. package/dist/test/apple/templates.test.d.ts +1 -0
  59. package/dist/test/apple/templates.test.js +73 -0
  60. package/dist/test/apple/templates.test.js.map +1 -0
  61. package/dist/test/apple/xcode-manager.test.d.ts +1 -0
  62. package/dist/test/apple/xcode-manager.test.js +834 -0
  63. package/dist/test/apple/xcode-manager.test.js.map +1 -0
  64. package/dist/test/utils/clack-utils.test.js +89 -0
  65. package/dist/test/utils/clack-utils.test.js.map +1 -1
  66. package/e2e-tests/jest.config.ts +1 -0
  67. package/e2e-tests/test-applications/apple/damaged-missing-configuration-list/Project.xcodeproj/project.pbxproj +52 -0
  68. package/e2e-tests/test-applications/apple/damaged-missing-configuration-list/Project.xcodeproj/xcshareddata/xcschemes/Project1.xcscheme +78 -0
  69. package/e2e-tests/test-applications/apple/no-targets/Project.xcodeproj/project.pbxproj +62 -0
  70. package/e2e-tests/test-applications/apple/no-targets/Project.xcodeproj/xcshareddata/xcschemes/Project1.xcscheme +78 -0
  71. package/e2e-tests/test-applications/apple/spm-swiftui-multi-targets/Project.xcodeproj/project.pbxproj +470 -0
  72. package/e2e-tests/test-applications/apple/spm-swiftui-multi-targets/Project.xcodeproj/xcshareddata/xcschemes/Project1.xcscheme +78 -0
  73. package/e2e-tests/test-applications/apple/spm-swiftui-multi-targets/Project1/ContentView.swift +7 -0
  74. package/e2e-tests/test-applications/apple/spm-swiftui-multi-targets/Project1/Project1App.swift +10 -0
  75. package/e2e-tests/test-applications/apple/spm-swiftui-multi-targets/Project2/ContentView.swift +7 -0
  76. package/e2e-tests/test-applications/apple/spm-swiftui-multi-targets/Project2/Project2App.swift +10 -0
  77. package/e2e-tests/test-applications/apple/spm-swiftui-single-target/Project.xcodeproj/project.pbxproj +382 -0
  78. package/e2e-tests/test-applications/apple/spm-swiftui-single-target/Project.xcodeproj/xcshareddata/xcschemes/Project.xcscheme +78 -0
  79. package/e2e-tests/test-applications/apple/spm-swiftui-single-target/Sources/ContentView.swift +7 -0
  80. package/e2e-tests/test-applications/apple/spm-swiftui-single-target/Sources/MainApp.swift +10 -0
  81. package/package.json +3 -2
  82. package/src/apple/apple-wizard.ts +1 -2
  83. package/src/apple/code-tools.ts +21 -6
  84. package/src/apple/fastlane.ts +18 -2
  85. package/src/apple/templates.ts +2 -2
  86. package/src/apple/xcode-manager.ts +181 -94
  87. package/src/nextjs/nextjs-wizard.ts +5 -2
  88. package/src/nuxt/nuxt-wizard.ts +6 -3
  89. package/src/nuxt/sdk-setup.ts +2 -0
  90. package/src/react-native/react-native-wizard.ts +5 -2
  91. package/src/remix/remix-wizard.ts +5 -2
  92. package/src/run.ts +2 -0
  93. package/src/sveltekit/sveltekit-wizard.ts +5 -2
  94. package/src/utils/clack-utils.ts +12 -2
  95. package/src/utils/package-manager.ts +6 -0
  96. package/src/utils/types.ts +10 -0
  97. package/test/apple/cocoapod.test.ts +306 -0
  98. package/test/apple/code-tools.test.ts +1042 -0
  99. package/test/apple/fastfile.test.ts +550 -0
  100. package/test/apple/templates.test.ts +191 -0
  101. package/test/apple/xcode-manager.test.ts +1066 -0
  102. package/test/utils/clack-utils.test.ts +92 -0
  103. package/types/xcode.d.ts +526 -0
@@ -1,20 +1,24 @@
1
1
  import { SentryProjectData } from '../utils/types';
2
+ import { PBXGroup, PBXObjects, Project } from 'xcode';
2
3
  interface ProjectFile {
3
4
  key: string;
4
5
  path: string;
5
6
  }
6
7
  export declare class XcodeProject {
7
8
  projectPath: string;
8
- project: any;
9
- objects: any;
9
+ project: Project;
10
+ objects: PBXObjects;
10
11
  files: ProjectFile[] | undefined;
12
+ /**
13
+ * Creates a new XcodeProject instance, a wrapper around the Xcode project file `<PROJECT>.xcodeproj/project.pbxproj`.
14
+ *
15
+ * @param projectPath - The path to the Xcode project file
16
+ */
11
17
  constructor(projectPath: string);
12
18
  getAllTargets(): string[];
13
- updateXcodeProject(sentryProject: SentryProjectData, target: string, apiKeys: {
14
- token: string;
15
- }, addSPMReference: boolean, uploadSource?: boolean): void;
19
+ updateXcodeProject(sentryProject: SentryProjectData, target: string, addSPMReference: boolean, uploadSource?: boolean): void;
16
20
  filesForTarget(target: string): string[] | undefined;
17
21
  projectFiles(): ProjectFile[];
18
- buildGroup(group: any, path?: string): ProjectFile[];
22
+ buildGroup(group: PBXGroup, path?: string): ProjectFile[];
19
23
  }
20
24
  export {};
@@ -34,59 +34,105 @@ exports.XcodeProject = void 0;
34
34
  // @ts-ignore - clack is ESM and TS complains about that. It works though
35
35
  var prompts_1 = __importDefault(require("@clack/prompts"));
36
36
  var fs = __importStar(require("fs"));
37
- var templates = __importStar(require("./templates"));
38
37
  var path = __importStar(require("path"));
39
- var xcode = require('xcode');
38
+ var templates = __importStar(require("./templates"));
39
+ var xcode_1 = require("xcode");
40
40
  function setDebugInformationFormatAndSandbox(proj, targetName) {
41
+ var _a, _b, _c, _d, _e;
41
42
  var xcObjects = proj.hash.project.objects;
42
- var targetKey = Object.keys(xcObjects.PBXNativeTarget || {}).filter(function (key) {
43
+ if (!xcObjects.PBXNativeTarget) {
44
+ xcObjects.PBXNativeTarget = {};
45
+ }
46
+ var targetKey = Object.keys(xcObjects.PBXNativeTarget).filter(function (key) {
47
+ var _a;
48
+ var value = (_a = xcObjects.PBXNativeTarget) === null || _a === void 0 ? void 0 : _a[key];
43
49
  return (!key.endsWith('_comment') &&
44
- xcObjects.PBXNativeTarget[key].name === targetName);
50
+ typeof value !== 'string' &&
51
+ (value === null || value === void 0 ? void 0 : value.name) === targetName);
45
52
  })[0];
46
53
  var target = xcObjects.PBXNativeTarget[targetKey];
47
- xcObjects.XCConfigurationList[target.buildConfigurationList].buildConfigurations.forEach(function (buildConfig) {
48
- var buildSettings = xcObjects.XCBuildConfiguration[buildConfig.value].buildSettings;
54
+ if (!xcObjects.XCBuildConfiguration) {
55
+ xcObjects.XCBuildConfiguration = {};
56
+ }
57
+ if (!xcObjects.XCConfigurationList) {
58
+ xcObjects.XCConfigurationList = {};
59
+ }
60
+ var buildConfigurationListId = (_a = target === null || target === void 0 ? void 0 : target.buildConfigurationList) !== null && _a !== void 0 ? _a : '';
61
+ var configurationList = (_b = xcObjects.XCConfigurationList) === null || _b === void 0 ? void 0 : _b[buildConfigurationListId];
62
+ var buildListConfigurationIds = (_c = configurationList === null || configurationList === void 0 ? void 0 : configurationList.buildConfigurations) !== null && _c !== void 0 ? _c : [];
63
+ for (var _i = 0, buildListConfigurationIds_1 = buildListConfigurationIds; _i < buildListConfigurationIds_1.length; _i++) {
64
+ var buildListConfigId = buildListConfigurationIds_1[_i];
65
+ var config = (_d = xcObjects.XCBuildConfiguration[buildListConfigId.value]) !== null && _d !== void 0 ? _d : {};
66
+ if (typeof config === 'string') {
67
+ // Ignore comments
68
+ continue;
69
+ }
70
+ var buildSettings = (_e = config.buildSettings) !== null && _e !== void 0 ? _e : {};
49
71
  buildSettings.DEBUG_INFORMATION_FORMAT = '"dwarf-with-dsym"';
50
72
  buildSettings.ENABLE_USER_SCRIPT_SANDBOXING = '"NO"';
51
- });
73
+ config.buildSettings = buildSettings;
74
+ xcObjects.XCBuildConfiguration[buildListConfigId.value] = config;
75
+ }
52
76
  }
53
77
  function addSentrySPM(proj, targetName) {
78
+ var _a, _b;
54
79
  var xcObjects = proj.hash.project.objects;
55
80
  var sentryFrameworkUUID = proj.generateUuid();
56
81
  var sentrySPMUUID = proj.generateUuid();
57
- //Check whether xcObjects already have sentry framework
82
+ // Check whether xcObjects already have sentry framework
58
83
  if (xcObjects.PBXFrameworksBuildPhase) {
59
84
  for (var key in xcObjects.PBXFrameworksBuildPhase || {}) {
60
- if (!key.endsWith('_comment')) {
61
- var frameworks = xcObjects.PBXFrameworksBuildPhase[key].files;
62
- for (var _i = 0, frameworks_1 = frameworks; _i < frameworks_1.length; _i++) {
63
- var framework = frameworks_1[_i];
64
- if (framework.comment === 'Sentry in Frameworks') {
65
- return;
66
- }
85
+ var frameworkBuildPhase = xcObjects.PBXFrameworksBuildPhase[key];
86
+ if (key.endsWith('_comment') || typeof frameworkBuildPhase === 'string') {
87
+ // Ignore comments
88
+ continue;
89
+ }
90
+ for (var _i = 0, _c = (_a = frameworkBuildPhase.files) !== null && _a !== void 0 ? _a : []; _i < _c.length; _i++) {
91
+ var framework = _c[_i];
92
+ // We identify the Sentry framework by the comment "Sentry in Frameworks",
93
+ // which is set by this manager in previous runs.
94
+ if (framework.comment === 'Sentry in Frameworks') {
95
+ return;
67
96
  }
68
97
  }
69
98
  }
70
99
  }
100
+ if (!xcObjects.PBXBuildFile) {
101
+ xcObjects.PBXBuildFile = {};
102
+ }
71
103
  xcObjects.PBXBuildFile[sentryFrameworkUUID] = {
72
104
  isa: 'PBXBuildFile',
73
105
  productRef: sentrySPMUUID,
74
106
  productRef_comment: 'Sentry',
75
107
  };
76
- xcObjects.PBXBuildFile[sentryFrameworkUUID + '_comment'] =
108
+ xcObjects.PBXBuildFile["".concat(sentryFrameworkUUID, "_comment")] =
77
109
  'Sentry in Frameworks';
78
- for (var key in xcObjects.PBXFrameworksBuildPhase || {}) {
79
- if (!key.endsWith('_comment')) {
80
- var frameworks = xcObjects.PBXFrameworksBuildPhase[key].files;
81
- frameworks.push({
82
- value: sentryFrameworkUUID,
83
- comment: 'Sentry in Frameworks',
84
- });
110
+ if (!xcObjects.PBXFrameworksBuildPhase) {
111
+ xcObjects.PBXFrameworksBuildPhase = {};
112
+ }
113
+ for (var key in xcObjects.PBXFrameworksBuildPhase) {
114
+ var value = xcObjects.PBXFrameworksBuildPhase[key];
115
+ if (key.endsWith('_comment') || typeof value === 'string') {
116
+ // Ignore comments
117
+ continue;
85
118
  }
119
+ var frameworks = (_b = value.files) !== null && _b !== void 0 ? _b : [];
120
+ frameworks.push({
121
+ value: sentryFrameworkUUID,
122
+ comment: 'Sentry in Frameworks',
123
+ });
124
+ value.files = frameworks;
125
+ xcObjects.PBXFrameworksBuildPhase[key] = value;
126
+ }
127
+ if (!xcObjects.PBXNativeTarget) {
128
+ xcObjects.PBXNativeTarget = {};
86
129
  }
87
130
  var targetKey = Object.keys(xcObjects.PBXNativeTarget || {}).filter(function (key) {
131
+ var _a;
132
+ var value = (_a = xcObjects.PBXNativeTarget) === null || _a === void 0 ? void 0 : _a[key];
88
133
  return (!key.endsWith('_comment') &&
89
- xcObjects.PBXNativeTarget[key].name === targetName);
134
+ typeof value !== 'string' &&
135
+ (value === null || value === void 0 ? void 0 : value.name) === targetName);
90
136
  })[0];
91
137
  var target = xcObjects.PBXNativeTarget[targetKey];
92
138
  if (!target.packageProductDependencies) {
@@ -116,7 +162,7 @@ function addSentrySPM(proj, targetName) {
116
162
  minimumVersion: '8.0.0',
117
163
  },
118
164
  };
119
- xcObjects.XCRemoteSwiftPackageReference[sentrySwiftPackageUUID + '_comment'] =
165
+ xcObjects.XCRemoteSwiftPackageReference["".concat(sentrySwiftPackageUUID, "_comment")] =
120
166
  'XCRemoteSwiftPackageReference "sentry-cocoa"';
121
167
  if (!xcObjects.XCSwiftPackageProductDependency) {
122
168
  xcObjects.XCSwiftPackageProductDependency = {};
@@ -127,27 +173,39 @@ function addSentrySPM(proj, targetName) {
127
173
  package_comment: 'XCRemoteSwiftPackageReference "sentry-cocoa"',
128
174
  productName: 'Sentry',
129
175
  };
130
- xcObjects.XCSwiftPackageProductDependency[sentrySPMUUID + '_comment'] =
176
+ xcObjects.XCSwiftPackageProductDependency["".concat(sentrySPMUUID, "_comment")] =
131
177
  'Sentry';
132
178
  prompts_1.default.log.step('Added Sentry SPM dependency to your project');
133
179
  }
134
180
  function addUploadSymbolsScript(xcodeProject, sentryProject, targetName, uploadSource) {
135
- if (uploadSource === void 0) { uploadSource = true; }
181
+ var _a, _b, _c, _d;
136
182
  var xcObjects = xcodeProject.hash.project.objects;
137
- var targetKey = Object.keys(xcObjects.PBXNativeTarget || {}).filter(function (key) {
183
+ if (!xcObjects.PBXNativeTarget) {
184
+ xcObjects.PBXNativeTarget = {};
185
+ }
186
+ var targetKey = Object.keys(xcObjects.PBXNativeTarget).filter(function (key) {
187
+ var _a;
188
+ var value = (_a = xcObjects.PBXNativeTarget) === null || _a === void 0 ? void 0 : _a[key];
138
189
  return (!key.endsWith('_comment') &&
139
- xcObjects.PBXNativeTarget[key].name === targetName);
190
+ typeof value !== 'string' &&
191
+ (value === null || value === void 0 ? void 0 : value.name) === targetName);
140
192
  })[0];
141
- for (var scriptKey in xcObjects.PBXShellScriptBuildPhase || {}) {
142
- if (!scriptKey.endsWith('_comment')) {
143
- var script = xcObjects.PBXShellScriptBuildPhase[scriptKey].shellScript;
144
- //Sentry script already exists, update it
145
- if (script.includes('sentry-cli')) {
146
- delete xcObjects.PBXShellScriptBuildPhase[scriptKey];
147
- delete xcObjects.PBXShellScriptBuildPhase[scriptKey + '_comment'];
148
- break;
149
- }
193
+ if (!xcObjects.PBXShellScriptBuildPhase) {
194
+ xcObjects.PBXShellScriptBuildPhase = {};
195
+ }
196
+ for (var key in xcObjects.PBXShellScriptBuildPhase) {
197
+ var value = (_a = xcObjects.PBXShellScriptBuildPhase[key]) !== null && _a !== void 0 ? _a : {};
198
+ if (typeof value === 'string') {
199
+ // Ignore comments
200
+ continue;
150
201
  }
202
+ // Sentry script already exists, update it
203
+ if ((_b = value.shellScript) === null || _b === void 0 ? void 0 : _b.includes('sentry-cli')) {
204
+ (_c = xcObjects.PBXShellScriptBuildPhase) === null || _c === void 0 ? true : delete _c[key];
205
+ (_d = xcObjects.PBXShellScriptBuildPhase) === null || _d === void 0 ? true : delete _d["".concat(key, "_comment")];
206
+ break;
207
+ }
208
+ xcObjects.PBXShellScriptBuildPhase[key] = value;
151
209
  }
152
210
  var isHomebrewInstalled = fs.existsSync('/opt/homebrew/bin/sentry-cli');
153
211
  xcodeProject.addBuildPhase([], 'PBXShellScriptBuildPhase', 'Upload Debug Symbols to Sentry', targetKey, {
@@ -160,24 +218,32 @@ function addUploadSymbolsScript(xcodeProject, sentryProject, targetName, uploadS
160
218
  prompts_1.default.log.step("Added Sentry upload script to \"".concat(targetName, "\" build phase"));
161
219
  }
162
220
  var XcodeProject = /** @class */ (function () {
221
+ /**
222
+ * Creates a new XcodeProject instance, a wrapper around the Xcode project file `<PROJECT>.xcodeproj/project.pbxproj`.
223
+ *
224
+ * @param projectPath - The path to the Xcode project file
225
+ */
163
226
  function XcodeProject(projectPath) {
164
227
  this.projectPath = projectPath;
165
- this.project = xcode.project(projectPath);
228
+ this.project = (0, xcode_1.project)(projectPath);
166
229
  this.project.parseSync();
167
230
  this.objects = this.project.hash.project.objects;
168
231
  }
169
232
  XcodeProject.prototype.getAllTargets = function () {
170
- var _this = this;
171
- return Object.keys(this.objects.PBXNativeTarget || {})
233
+ var _a;
234
+ var targets = (_a = this.objects.PBXNativeTarget) !== null && _a !== void 0 ? _a : {};
235
+ return Object.keys(targets)
172
236
  .filter(function (key) {
237
+ var value = targets[key];
173
238
  return (!key.endsWith('_comment') &&
174
- _this.objects.PBXNativeTarget[key].productType.startsWith('"com.apple.product-type.application'));
239
+ typeof value !== 'string' &&
240
+ value.productType.startsWith('"com.apple.product-type.application'));
175
241
  })
176
242
  .map(function (key) {
177
- return _this.objects.PBXNativeTarget[key].name;
243
+ return targets[key].name;
178
244
  });
179
245
  };
180
- XcodeProject.prototype.updateXcodeProject = function (sentryProject, target, apiKeys, addSPMReference, uploadSource) {
246
+ XcodeProject.prototype.updateXcodeProject = function (sentryProject, target, addSPMReference, uploadSource) {
181
247
  if (uploadSource === void 0) { uploadSource = true; }
182
248
  addUploadSymbolsScript(this.project, sentryProject, target, uploadSource);
183
249
  if (uploadSource) {
@@ -191,32 +257,40 @@ var XcodeProject = /** @class */ (function () {
191
257
  };
192
258
  XcodeProject.prototype.filesForTarget = function (target) {
193
259
  var _this = this;
260
+ var _a, _b, _c;
194
261
  var files = this.projectFiles();
195
262
  var fileDictionary = {};
196
263
  files.forEach(function (file) {
197
264
  fileDictionary[file.key] = file.path;
198
265
  });
199
- var nativeTarget = Object.keys(this.objects.PBXNativeTarget || {}).filter(function (key) {
266
+ var targets = this.objects.PBXNativeTarget || {};
267
+ var nativeTarget = Object.keys(targets).filter(function (key) {
268
+ var value = targets[key];
200
269
  return (!key.endsWith('_comment') &&
201
- _this.objects.PBXNativeTarget[key].name === target);
270
+ typeof value !== 'string' &&
271
+ value.name === target);
202
272
  })[0];
203
273
  if (nativeTarget === undefined) {
204
274
  return undefined;
205
275
  }
206
- var buildPhaseKey = this.objects.PBXNativeTarget[nativeTarget].buildPhases.filter(function (phase) {
207
- return _this.objects.PBXSourcesBuildPhase[phase.value] !== undefined;
276
+ var buildPhaseKey = (_a = targets[nativeTarget].buildPhases) === null || _a === void 0 ? void 0 : _a.filter(function (phase) {
277
+ var _a;
278
+ return ((_a = _this.objects.PBXSourcesBuildPhase) === null || _a === void 0 ? void 0 : _a[phase.value]) !== undefined;
208
279
  })[0];
209
280
  if (buildPhaseKey === undefined) {
210
281
  return undefined;
211
282
  }
212
- var buildPhases = this.objects.PBXSourcesBuildPhase[buildPhaseKey.value];
213
- if (buildPhases === undefined) {
214
- return undefined;
215
- }
283
+ var buildPhase = (_b = this.objects.PBXSourcesBuildPhase) === null || _b === void 0 ? void 0 : _b[buildPhaseKey.value];
284
+ var buildPhaseFiles = (_c = buildPhase === null || buildPhase === void 0 ? void 0 : buildPhase.files) !== null && _c !== void 0 ? _c : [];
216
285
  var baseDir = path.dirname(path.dirname(this.projectPath));
217
- return buildPhases.files
286
+ return buildPhaseFiles
218
287
  .map(function (file) {
219
- var buildFile = fileDictionary[_this.objects.PBXBuildFile[file.value].fileRef];
288
+ var _a, _b;
289
+ var fileRef = (_b = (_a = _this.objects.PBXBuildFile) === null || _a === void 0 ? void 0 : _a[file.value]) === null || _b === void 0 ? void 0 : _b.fileRef;
290
+ if (!fileRef) {
291
+ return '';
292
+ }
293
+ var buildFile = fileDictionary[fileRef];
220
294
  if (!buildFile) {
221
295
  return '';
222
296
  }
@@ -225,28 +299,39 @@ var XcodeProject = /** @class */ (function () {
225
299
  .filter(function (f) { return f.length > 0; });
226
300
  };
227
301
  XcodeProject.prototype.projectFiles = function () {
302
+ var _a;
228
303
  if (this.files === undefined) {
229
304
  var proj = this.project.getFirstProject();
230
305
  var mainGroupKey = proj.firstProject.mainGroup;
231
- var mainGroup = this.objects.PBXGroup[mainGroupKey];
306
+ var mainGroup = (_a = this.objects.PBXGroup) === null || _a === void 0 ? void 0 : _a[mainGroupKey];
307
+ if (!mainGroup || typeof mainGroup === 'string') {
308
+ return [];
309
+ }
232
310
  this.files = this.buildGroup(mainGroup);
233
311
  }
234
312
  return this.files;
235
313
  };
236
314
  XcodeProject.prototype.buildGroup = function (group, path) {
315
+ var _a, _b, _c;
237
316
  if (path === void 0) { path = ''; }
238
317
  var result = [];
239
- for (var _i = 0, _a = group.children; _i < _a.length; _i++) {
240
- var child = _a[_i];
241
- if (this.objects.PBXFileReference[child.value]) {
242
- var fileReference = this.objects.PBXFileReference[child.value];
318
+ for (var _i = 0, _d = (_a = group.children) !== null && _a !== void 0 ? _a : []; _i < _d.length; _i++) {
319
+ var child = _d[_i];
320
+ var fileReference = (_b = this.objects.PBXFileReference) === null || _b === void 0 ? void 0 : _b[child.value];
321
+ var groupReference = (_c = this.objects.PBXGroup) === null || _c === void 0 ? void 0 : _c[child.value];
322
+ if (fileReference) {
323
+ if (typeof fileReference === 'string') {
324
+ continue;
325
+ }
243
326
  result.push({
244
327
  key: child.value,
245
328
  path: "".concat(path).concat(fileReference.path.replace(/"/g, '')),
246
329
  });
247
330
  }
248
- else if (this.objects.PBXGroup[child.value]) {
249
- var groupReference = this.objects.PBXGroup[child.value];
331
+ else if (groupReference) {
332
+ if (typeof groupReference === 'string') {
333
+ continue;
334
+ }
250
335
  var groupChildren = this.buildGroup(groupReference, groupReference.path
251
336
  ? "".concat(path).concat(groupReference.path.replace(/"/g, ''), "/")
252
337
  : path);
@@ -1 +1 @@
1
- {"version":3,"file":"xcode-manager.js","sourceRoot":"","sources":["../../../src/apple/xcode-manager.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,8BAA8B;AAC9B,+DAA+D;AAC/D,4DAA4D;AAC5D,sDAAsD;AACtD,yEAAyE;AACzE,2DAAmC;AACnC,qCAAyB;AAEzB,qDAAyC;AACzC,yCAA6B;AAC7B,IAAM,KAAK,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;AAO/B,SAAS,mCAAmC,CAC1C,IAAS,EACT,UAAkB;IAElB,IAAM,SAAS,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC;IAC5C,IAAM,SAAS,GAAW,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,eAAe,IAAI,EAAE,CAAC,CAAC,MAAM,CAC3E,UAAC,GAAG;QACF,OAAO,CACL,CAAC,GAAG,CAAC,QAAQ,CAAC,UAAU,CAAC;YACzB,SAAS,CAAC,eAAe,CAAC,GAAG,CAAC,CAAC,IAAI,KAAK,UAAU,CACnD,CAAC;IACJ,CAAC,CACF,CAAC,CAAC,CAAC,CAAC;IACL,IAAM,MAAM,GAAG,SAAS,CAAC,eAAe,CAAC,SAAS,CAAC,CAAC;IAEpD,SAAS,CAAC,mBAAmB,CAC3B,MAAM,CAAC,sBAAsB,CAC9B,CAAC,mBAAmB,CAAC,OAAO,CAAC,UAAC,WAA8B;QAC3D,IAAM,aAAa,GACjB,SAAS,CAAC,oBAAoB,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC,aAAa,CAAC;QAClE,aAAa,CAAC,wBAAwB,GAAG,mBAAmB,CAAC;QAC7D,aAAa,CAAC,6BAA6B,GAAG,MAAM,CAAC;IACvD,CAAC,CAAC,CAAC;AACL,CAAC;AAED,SAAS,YAAY,CAAC,IAAS,EAAE,UAAkB;IACjD,IAAM,SAAS,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC;IAE5C,IAAM,mBAAmB,GAAG,IAAI,CAAC,YAAY,EAAY,CAAC;IAC1D,IAAM,aAAa,GAAG,IAAI,CAAC,YAAY,EAAY,CAAC;IAEpD,uDAAuD;IACvD,IAAI,SAAS,CAAC,uBAAuB,EAAE;QACrC,KAAK,IAAM,GAAG,IAAI,SAAS,CAAC,uBAAuB,IAAI,EAAE,EAAE;YACzD,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,UAAU,CAAC,EAAE;gBAC7B,IAAM,UAAU,GAAG,SAAS,CAAC,uBAAuB,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC;gBAChE,KAAwB,UAAU,EAAV,yBAAU,EAAV,wBAAU,EAAV,IAAU,EAAE;oBAA/B,IAAM,SAAS,mBAAA;oBAClB,IAAI,SAAS,CAAC,OAAO,KAAK,sBAAsB,EAAE;wBAChD,OAAO;qBACR;iBACF;aACF;SACF;KACF;IAED,SAAS,CAAC,YAAY,CAAC,mBAAmB,CAAC,GAAG;QAC5C,GAAG,EAAE,cAAc;QACnB,UAAU,EAAE,aAAa;QACzB,kBAAkB,EAAE,QAAQ;KAC7B,CAAC;IACF,SAAS,CAAC,YAAY,CAAC,mBAAmB,GAAG,UAAU,CAAC;QACtD,sBAAsB,CAAC;IAEzB,KAAK,IAAM,GAAG,IAAI,SAAS,CAAC,uBAAuB,IAAI,EAAE,EAAE;QACzD,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,UAAU,CAAC,EAAE;YAC7B,IAAM,UAAU,GAAG,SAAS,CAAC,uBAAuB,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC;YAChE,UAAU,CAAC,IAAI,CAAC;gBACd,KAAK,EAAE,mBAAmB;gBAC1B,OAAO,EAAE,sBAAsB;aAChC,CAAC,CAAC;SACJ;KACF;IAED,IAAM,SAAS,GAAW,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,eAAe,IAAI,EAAE,CAAC,CAAC,MAAM,CAC3E,UAAC,GAAG;QACF,OAAO,CACL,CAAC,GAAG,CAAC,QAAQ,CAAC,UAAU,CAAC;YACzB,SAAS,CAAC,eAAe,CAAC,GAAG,CAAC,CAAC,IAAI,KAAK,UAAU,CACnD,CAAC;IACJ,CAAC,CACF,CAAC,CAAC,CAAC,CAAC;IACL,IAAM,MAAM,GAAG,SAAS,CAAC,eAAe,CAAC,SAAS,CAAC,CAAC;IAEpD,IAAI,CAAC,MAAM,CAAC,0BAA0B,EAAE;QACtC,MAAM,CAAC,0BAA0B,GAAG,EAAE,CAAC;KACxC;IACD,MAAM,CAAC,0BAA0B,CAAC,IAAI,CAAC;QACrC,KAAK,EAAE,aAAa;QACpB,OAAO,EAAE,QAAQ;KAClB,CAAC,CAAC;IAEH,IAAM,sBAAsB,GAAG,IAAI,CAAC,YAAY,EAAY,CAAC;IAC7D,IAAM,SAAS,GAAG,IAAI,CAAC,eAAe,EAAE,CAAC,YAAY,CAAC;IACtD,IAAI,CAAC,SAAS,CAAC,iBAAiB,EAAE;QAChC,SAAS,CAAC,iBAAiB,GAAG,EAAE,CAAC;KAClC;IACD,SAAS,CAAC,iBAAiB,CAAC,IAAI,CAAC;QAC/B,KAAK,EAAE,sBAAsB;QAC7B,OAAO,EAAE,8CAA8C;KACxD,CAAC,CAAC;IAEH,IAAI,CAAC,SAAS,CAAC,6BAA6B,EAAE;QAC5C,SAAS,CAAC,6BAA6B,GAAG,EAAE,CAAC;KAC9C;IAED,SAAS,CAAC,6BAA6B,CAAC,sBAAsB,CAAC,GAAG;QAChE,GAAG,EAAE,+BAA+B;QACpC,aAAa,EAAE,8CAA8C;QAC7D,WAAW,EAAE;YACX,IAAI,EAAE,sBAAsB;YAC5B,cAAc,EAAE,OAAO;SACxB;KACF,CAAC;IACF,SAAS,CAAC,6BAA6B,CAAC,sBAAsB,GAAG,UAAU,CAAC;QAC1E,8CAA8C,CAAC;IAEjD,IAAI,CAAC,SAAS,CAAC,+BAA+B,EAAE;QAC9C,SAAS,CAAC,+BAA+B,GAAG,EAAE,CAAC;KAChD;IACD,SAAS,CAAC,+BAA+B,CAAC,aAAa,CAAC,GAAG;QACzD,GAAG,EAAE,iCAAiC;QACtC,OAAO,EAAE,sBAAsB;QAC/B,eAAe,EAAE,8CAA8C;QAC/D,WAAW,EAAE,QAAQ;KACtB,CAAC;IACF,SAAS,CAAC,+BAA+B,CAAC,aAAa,GAAG,UAAU,CAAC;QACnE,QAAQ,CAAC;IAEX,iBAAK,CAAC,GAAG,CAAC,IAAI,CAAC,6CAA6C,CAAC,CAAC;AAChE,CAAC;AAED,SAAS,sBAAsB,CAC7B,YAAiB,EACjB,aAAgC,EAChC,UAAkB,EAClB,YAAmB;IAAnB,6BAAA,EAAA,mBAAmB;IAEnB,IAAM,SAAS,GAAG,YAAY,CAAC,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC;IACpD,IAAM,SAAS,GAAW,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,eAAe,IAAI,EAAE,CAAC,CAAC,MAAM,CAC3E,UAAC,GAAG;QACF,OAAO,CACL,CAAC,GAAG,CAAC,QAAQ,CAAC,UAAU,CAAC;YACzB,SAAS,CAAC,eAAe,CAAC,GAAG,CAAC,CAAC,IAAI,KAAK,UAAU,CACnD,CAAC;IACJ,CAAC,CACF,CAAC,CAAC,CAAC,CAAC;IAEL,KAAK,IAAM,SAAS,IAAI,SAAS,CAAC,wBAAwB,IAAI,EAAE,EAAE;QAChE,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,UAAU,CAAC,EAAE;YACnC,IAAM,MAAM,GAAG,SAAS,CAAC,wBAAwB,CAAC,SAAS,CAAC,CAAC,WAAW,CAAC;YACzE,yCAAyC;YACzC,IAAI,MAAM,CAAC,QAAQ,CAAC,YAAY,CAAC,EAAE;gBACjC,OAAO,SAAS,CAAC,wBAAwB,CAAC,SAAS,CAAC,CAAC;gBACrD,OAAO,SAAS,CAAC,wBAAwB,CAAC,SAAS,GAAG,UAAU,CAAC,CAAC;gBAClE,MAAM;aACP;SACF;KACF;IAED,IAAM,mBAAmB,GAAG,EAAE,CAAC,UAAU,CAAC,8BAA8B,CAAC,CAAC;IAC1E,YAAY,CAAC,aAAa,CACxB,EAAE,EACF,0BAA0B,EAC1B,gCAAgC,EAChC,SAAS,EACT;QACE,kBAAkB,EAAE,EAAE;QACtB,mBAAmB,EAAE,EAAE;QACvB,UAAU,EAAE,CAAC,SAAS,CAAC,eAAe,CAAC;QACvC,SAAS,EAAE,SAAS;QACpB,WAAW,EAAE,SAAS,CAAC,oBAAoB,CACzC,aAAa,CAAC,YAAY,CAAC,IAAI,EAC/B,aAAa,CAAC,IAAI,EAClB,YAAY,EACZ,mBAAmB,CACpB;KACF,CACF,CAAC;IACF,iBAAK,CAAC,GAAG,CAAC,IAAI,CAAC,0CAAkC,UAAU,mBAAe,CAAC,CAAC;AAC9E,CAAC;AAED;IAME,sBAAmB,WAAmB;QACpC,IAAI,CAAC,WAAW,GAAG,WAAW,CAAC;QAC/B,IAAI,CAAC,OAAO,GAAG,KAAK,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC;QAC1C,IAAI,CAAC,OAAO,CAAC,SAAS,EAAE,CAAC;QACzB,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC;IACnD,CAAC;IAEM,oCAAa,GAApB;QAAA,iBAaC;QAZC,OAAO,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,eAAe,IAAI,EAAE,CAAC;aACnD,MAAM,CAAC,UAAC,GAAG;YACV,OAAO,CACL,CAAC,GAAG,CAAC,QAAQ,CAAC,UAAU,CAAC;gBACzB,KAAI,CAAC,OAAO,CAAC,eAAe,CAAC,GAAG,CAAC,CAAC,WAAW,CAAC,UAAU,CACtD,qCAAqC,CACtC,CACF,CAAC;QACJ,CAAC,CAAC;aACD,GAAG,CAAC,UAAC,GAAG;YACP,OAAO,KAAI,CAAC,OAAO,CAAC,eAAe,CAAC,GAAG,CAAC,CAAC,IAAc,CAAC;QAC1D,CAAC,CAAC,CAAC;IACP,CAAC;IAEM,yCAAkB,GAAzB,UACE,aAAgC,EAChC,MAAc,EACd,OAA0B,EAC1B,eAAwB,EACxB,YAAmB;QAAnB,6BAAA,EAAA,mBAAmB;QAEnB,sBAAsB,CAAC,IAAI,CAAC,OAAO,EAAE,aAAa,EAAE,MAAM,EAAE,YAAY,CAAC,CAAC;QAC1E,IAAI,YAAY,EAAE;YAChB,mCAAmC,CAAC,IAAI,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;SAC3D;QACD,IAAI,eAAe,EAAE;YACnB,YAAY,CAAC,IAAI,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;SACpC;QACD,IAAM,UAAU,GAAG,IAAI,CAAC,OAAO,CAAC,SAAS,EAAE,CAAC;QAC5C,EAAE,CAAC,aAAa,CAAC,IAAI,CAAC,WAAW,EAAE,UAAU,CAAC,CAAC;IACjD,CAAC;IAEM,qCAAc,GAArB,UAAsB,MAAc;QAApC,iBAgDC;QA/CC,IAAM,KAAK,GAAG,IAAI,CAAC,YAAY,EAAE,CAAC;QAClC,IAAM,cAAc,GAAQ,EAAE,CAAC;QAC/B,KAAK,CAAC,OAAO,CAAC,UAAC,IAAI;YACjB,cAAc,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,IAAI,CAAC;QACvC,CAAC,CAAC,CAAC;QAEH,IAAM,YAAY,GAAG,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,eAAe,IAAI,EAAE,CAAC,CAAC,MAAM,CACzE,UAAC,GAAG;YACF,OAAO,CACL,CAAC,GAAG,CAAC,QAAQ,CAAC,UAAU,CAAC;gBACzB,KAAI,CAAC,OAAO,CAAC,eAAe,CAAC,GAAG,CAAC,CAAC,IAAI,KAAK,MAAM,CAClD,CAAC;QACJ,CAAC,CACF,CAAC,CAAC,CAAC,CAAC;QAEL,IAAI,YAAY,KAAK,SAAS,EAAE;YAC9B,OAAO,SAAS,CAAC;SAClB;QAED,IAAM,aAAa,GAAG,IAAI,CAAC,OAAO,CAAC,eAAe,CAChD,YAAY,CACb,CAAC,WAAW,CAAC,MAAM,CAAC,UAAC,KAAU;YAC9B,OAAO,KAAI,CAAC,OAAO,CAAC,oBAAoB,CAAC,KAAK,CAAC,KAAK,CAAC,KAAK,SAAS,CAAC;QACtE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QAEN,IAAI,aAAa,KAAK,SAAS,EAAE;YAC/B,OAAO,SAAS,CAAC;SAClB;QAED,IAAM,WAAW,GAAG,IAAI,CAAC,OAAO,CAAC,oBAAoB,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;QAC3E,IAAI,WAAW,KAAK,SAAS,EAAE;YAC7B,OAAO,SAAS,CAAC;SAClB;QAED,IAAM,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC;QAE7D,OAAO,WAAW,CAAC,KAAK;aACrB,GAAG,CAAC,UAAC,IAAS;YACb,IAAM,SAAS,GAAG,cAAc,CAC9B,KAAI,CAAC,OAAO,CAAC,YAAY,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,OAAO,CACpC,CAAC;YACZ,IAAI,CAAC,SAAS,EAAE;gBACd,OAAO,EAAE,CAAC;aACX;YACD,OAAO,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,SAAS,CAAC,CAAC;QACvC,CAAC,CAAC;aACD,MAAM,CAAC,UAAC,CAAS,IAAK,OAAA,CAAC,CAAC,MAAM,GAAG,CAAC,EAAZ,CAAY,CAAa,CAAC;IACrD,CAAC;IAED,mCAAY,GAAZ;QACE,IAAI,IAAI,CAAC,KAAK,KAAK,SAAS,EAAE;YAC5B,IAAM,IAAI,GAAG,IAAI,CAAC,OAAO,CAAC,eAAe,EAAE,CAAC;YAC5C,IAAM,YAAY,GAAG,IAAI,CAAC,YAAY,CAAC,SAAS,CAAC;YACjD,IAAM,SAAS,GAAG,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAC,CAAC;YACtD,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,UAAU,CAAC,SAAS,CAAC,CAAC;SACzC;QACD,OAAO,IAAI,CAAC,KAAK,CAAC;IACpB,CAAC;IAED,iCAAU,GAAV,UAAW,KAAU,EAAE,IAAS;QAAT,qBAAA,EAAA,SAAS;QAC9B,IAAM,MAAM,GAAkB,EAAE,CAAC;QACjC,KAAoB,UAAc,EAAd,KAAA,KAAK,CAAC,QAAQ,EAAd,cAAc,EAAd,IAAc,EAAE;YAA/B,IAAM,KAAK,SAAA;YACd,IAAI,IAAI,CAAC,OAAO,CAAC,gBAAgB,CAAC,KAAK,CAAC,KAAK,CAAC,EAAE;gBAC9C,IAAM,aAAa,GAAG,IAAI,CAAC,OAAO,CAAC,gBAAgB,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;gBACjE,MAAM,CAAC,IAAI,CAAC;oBACV,GAAG,EAAE,KAAK,CAAC,KAAK;oBAChB,IAAI,EAAE,UAAG,IAAI,SAAG,aAAa,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,EAAE,CAAC,CAAE;iBACvD,CAAC,CAAC;aACJ;iBAAM,IAAI,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAC,KAAK,CAAC,EAAE;gBAC7C,IAAM,cAAc,GAAG,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;gBAC1D,IAAM,aAAa,GAAG,IAAI,CAAC,UAAU,CACnC,cAAc,EACd,cAAc,CAAC,IAAI;oBACjB,CAAC,CAAC,UAAG,IAAI,SAAG,cAAc,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,EAAE,CAAC,MAAG;oBACpD,CAAC,CAAC,IAAI,CACT,CAAC;gBACF,MAAM,CAAC,IAAI,OAAX,MAAM,EAAS,aAAa,EAAE;aAC/B;SACF;QACD,OAAO,MAAM,CAAC;IAChB,CAAC;IACH,mBAAC;AAAD,CAAC,AAhID,IAgIC;AAhIY,oCAAY","sourcesContent":["/* eslint-disable max-lines */\n/* eslint-disable @typescript-eslint/no-unsafe-member-access */\n/* eslint-disable @typescript-eslint/no-unsafe-assignment */\n/* eslint-disable @typescript-eslint/no-unsafe-call */\n// @ts-ignore - clack is ESM and TS complains about that. It works though\nimport clack from '@clack/prompts';\nimport * as fs from 'fs';\nimport { SentryProjectData } from '../utils/types';\nimport * as templates from './templates';\nimport * as path from 'path';\nconst xcode = require('xcode');\n\ninterface ProjectFile {\n key: string;\n path: string;\n}\n\nfunction setDebugInformationFormatAndSandbox(\n proj: any,\n targetName: string,\n): void {\n const xcObjects = proj.hash.project.objects;\n const targetKey: string = Object.keys(xcObjects.PBXNativeTarget || {}).filter(\n (key) => {\n return (\n !key.endsWith('_comment') &&\n xcObjects.PBXNativeTarget[key].name === targetName\n );\n },\n )[0];\n const target = xcObjects.PBXNativeTarget[targetKey];\n\n xcObjects.XCConfigurationList[\n target.buildConfigurationList\n ].buildConfigurations.forEach((buildConfig: { value: string }) => {\n const buildSettings =\n xcObjects.XCBuildConfiguration[buildConfig.value].buildSettings;\n buildSettings.DEBUG_INFORMATION_FORMAT = '\"dwarf-with-dsym\"';\n buildSettings.ENABLE_USER_SCRIPT_SANDBOXING = '\"NO\"';\n });\n}\n\nfunction addSentrySPM(proj: any, targetName: string): void {\n const xcObjects = proj.hash.project.objects;\n\n const sentryFrameworkUUID = proj.generateUuid() as string;\n const sentrySPMUUID = proj.generateUuid() as string;\n\n //Check whether xcObjects already have sentry framework\n if (xcObjects.PBXFrameworksBuildPhase) {\n for (const key in xcObjects.PBXFrameworksBuildPhase || {}) {\n if (!key.endsWith('_comment')) {\n const frameworks = xcObjects.PBXFrameworksBuildPhase[key].files;\n for (const framework of frameworks) {\n if (framework.comment === 'Sentry in Frameworks') {\n return;\n }\n }\n }\n }\n }\n\n xcObjects.PBXBuildFile[sentryFrameworkUUID] = {\n isa: 'PBXBuildFile',\n productRef: sentrySPMUUID,\n productRef_comment: 'Sentry',\n };\n xcObjects.PBXBuildFile[sentryFrameworkUUID + '_comment'] =\n 'Sentry in Frameworks';\n\n for (const key in xcObjects.PBXFrameworksBuildPhase || {}) {\n if (!key.endsWith('_comment')) {\n const frameworks = xcObjects.PBXFrameworksBuildPhase[key].files;\n frameworks.push({\n value: sentryFrameworkUUID,\n comment: 'Sentry in Frameworks',\n });\n }\n }\n\n const targetKey: string = Object.keys(xcObjects.PBXNativeTarget || {}).filter(\n (key) => {\n return (\n !key.endsWith('_comment') &&\n xcObjects.PBXNativeTarget[key].name === targetName\n );\n },\n )[0];\n const target = xcObjects.PBXNativeTarget[targetKey];\n\n if (!target.packageProductDependencies) {\n target.packageProductDependencies = [];\n }\n target.packageProductDependencies.push({\n value: sentrySPMUUID,\n comment: 'Sentry',\n });\n\n const sentrySwiftPackageUUID = proj.generateUuid() as string;\n const xcProject = proj.getFirstProject().firstProject;\n if (!xcProject.packageReferences) {\n xcProject.packageReferences = [];\n }\n xcProject.packageReferences.push({\n value: sentrySwiftPackageUUID,\n comment: 'XCRemoteSwiftPackageReference \"sentry-cocoa\"',\n });\n\n if (!xcObjects.XCRemoteSwiftPackageReference) {\n xcObjects.XCRemoteSwiftPackageReference = {};\n }\n\n xcObjects.XCRemoteSwiftPackageReference[sentrySwiftPackageUUID] = {\n isa: 'XCRemoteSwiftPackageReference',\n repositoryURL: '\"https://github.com/getsentry/sentry-cocoa/\"',\n requirement: {\n kind: 'upToNextMajorVersion',\n minimumVersion: '8.0.0',\n },\n };\n xcObjects.XCRemoteSwiftPackageReference[sentrySwiftPackageUUID + '_comment'] =\n 'XCRemoteSwiftPackageReference \"sentry-cocoa\"';\n\n if (!xcObjects.XCSwiftPackageProductDependency) {\n xcObjects.XCSwiftPackageProductDependency = {};\n }\n xcObjects.XCSwiftPackageProductDependency[sentrySPMUUID] = {\n isa: 'XCSwiftPackageProductDependency',\n package: sentrySwiftPackageUUID,\n package_comment: 'XCRemoteSwiftPackageReference \"sentry-cocoa\"',\n productName: 'Sentry',\n };\n xcObjects.XCSwiftPackageProductDependency[sentrySPMUUID + '_comment'] =\n 'Sentry';\n\n clack.log.step('Added Sentry SPM dependency to your project');\n}\n\nfunction addUploadSymbolsScript(\n xcodeProject: any,\n sentryProject: SentryProjectData,\n targetName: string,\n uploadSource = true,\n): void {\n const xcObjects = xcodeProject.hash.project.objects;\n const targetKey: string = Object.keys(xcObjects.PBXNativeTarget || {}).filter(\n (key) => {\n return (\n !key.endsWith('_comment') &&\n xcObjects.PBXNativeTarget[key].name === targetName\n );\n },\n )[0];\n\n for (const scriptKey in xcObjects.PBXShellScriptBuildPhase || {}) {\n if (!scriptKey.endsWith('_comment')) {\n const script = xcObjects.PBXShellScriptBuildPhase[scriptKey].shellScript;\n //Sentry script already exists, update it\n if (script.includes('sentry-cli')) {\n delete xcObjects.PBXShellScriptBuildPhase[scriptKey];\n delete xcObjects.PBXShellScriptBuildPhase[scriptKey + '_comment'];\n break;\n }\n }\n }\n\n const isHomebrewInstalled = fs.existsSync('/opt/homebrew/bin/sentry-cli');\n xcodeProject.addBuildPhase(\n [],\n 'PBXShellScriptBuildPhase',\n 'Upload Debug Symbols to Sentry',\n targetKey,\n {\n inputFileListPaths: [],\n outputFileListPaths: [],\n inputPaths: [templates.scriptInputPath],\n shellPath: '/bin/sh',\n shellScript: templates.getRunScriptTemplate(\n sentryProject.organization.slug,\n sentryProject.slug,\n uploadSource,\n isHomebrewInstalled,\n ),\n },\n );\n clack.log.step(`Added Sentry upload script to \"${targetName}\" build phase`);\n}\n\nexport class XcodeProject {\n projectPath: string;\n project: any;\n objects: any;\n files: ProjectFile[] | undefined;\n\n public constructor(projectPath: string) {\n this.projectPath = projectPath;\n this.project = xcode.project(projectPath);\n this.project.parseSync();\n this.objects = this.project.hash.project.objects;\n }\n\n public getAllTargets(): string[] {\n return Object.keys(this.objects.PBXNativeTarget || {})\n .filter((key) => {\n return (\n !key.endsWith('_comment') &&\n this.objects.PBXNativeTarget[key].productType.startsWith(\n '\"com.apple.product-type.application',\n )\n );\n })\n .map((key) => {\n return this.objects.PBXNativeTarget[key].name as string;\n });\n }\n\n public updateXcodeProject(\n sentryProject: SentryProjectData,\n target: string,\n apiKeys: { token: string },\n addSPMReference: boolean,\n uploadSource = true,\n ): void {\n addUploadSymbolsScript(this.project, sentryProject, target, uploadSource);\n if (uploadSource) {\n setDebugInformationFormatAndSandbox(this.project, target);\n }\n if (addSPMReference) {\n addSentrySPM(this.project, target);\n }\n const newContent = this.project.writeSync();\n fs.writeFileSync(this.projectPath, newContent);\n }\n\n public filesForTarget(target: string): string[] | undefined {\n const files = this.projectFiles();\n const fileDictionary: any = {};\n files.forEach((file) => {\n fileDictionary[file.key] = file.path;\n });\n\n const nativeTarget = Object.keys(this.objects.PBXNativeTarget || {}).filter(\n (key) => {\n return (\n !key.endsWith('_comment') &&\n this.objects.PBXNativeTarget[key].name === target\n );\n },\n )[0];\n\n if (nativeTarget === undefined) {\n return undefined;\n }\n\n const buildPhaseKey = this.objects.PBXNativeTarget[\n nativeTarget\n ].buildPhases.filter((phase: any) => {\n return this.objects.PBXSourcesBuildPhase[phase.value] !== undefined;\n })[0];\n\n if (buildPhaseKey === undefined) {\n return undefined;\n }\n\n const buildPhases = this.objects.PBXSourcesBuildPhase[buildPhaseKey.value];\n if (buildPhases === undefined) {\n return undefined;\n }\n\n const baseDir = path.dirname(path.dirname(this.projectPath));\n\n return buildPhases.files\n .map((file: any) => {\n const buildFile = fileDictionary[\n this.objects.PBXBuildFile[file.value].fileRef\n ] as string;\n if (!buildFile) {\n return '';\n }\n return path.join(baseDir, buildFile);\n })\n .filter((f: string) => f.length > 0) as string[];\n }\n\n projectFiles(): ProjectFile[] {\n if (this.files === undefined) {\n const proj = this.project.getFirstProject();\n const mainGroupKey = proj.firstProject.mainGroup;\n const mainGroup = this.objects.PBXGroup[mainGroupKey];\n this.files = this.buildGroup(mainGroup);\n }\n return this.files;\n }\n\n buildGroup(group: any, path = ''): ProjectFile[] {\n const result: ProjectFile[] = [];\n for (const child of group.children) {\n if (this.objects.PBXFileReference[child.value]) {\n const fileReference = this.objects.PBXFileReference[child.value];\n result.push({\n key: child.value,\n path: `${path}${fileReference.path.replace(/\"/g, '')}`,\n });\n } else if (this.objects.PBXGroup[child.value]) {\n const groupReference = this.objects.PBXGroup[child.value];\n const groupChildren = this.buildGroup(\n groupReference,\n groupReference.path\n ? `${path}${groupReference.path.replace(/\"/g, '')}/`\n : path,\n );\n result.push(...groupChildren);\n }\n }\n return result;\n }\n}\n"]}
1
+ {"version":3,"file":"xcode-manager.js","sourceRoot":"","sources":["../../../src/apple/xcode-manager.ts"],"names":[],"mappings":"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","sourcesContent":["/* eslint-disable max-lines */\n/* eslint-disable @typescript-eslint/no-unsafe-member-access */\n/* eslint-disable @typescript-eslint/no-unsafe-assignment */\n/* eslint-disable @typescript-eslint/no-unsafe-call */\n// @ts-ignore - clack is ESM and TS complains about that. It works though\nimport clack from '@clack/prompts';\nimport * as fs from 'fs';\nimport * as path from 'path';\nimport { SentryProjectData } from '../utils/types';\nimport * as templates from './templates';\n\nimport {\n project as createXcodeProject,\n PBXBuildFile,\n PBXGroup,\n PBXNativeTarget,\n PBXObjects,\n PBXSourcesBuildPhase,\n Project,\n XCConfigurationList,\n} from 'xcode';\n\ninterface ProjectFile {\n key: string;\n path: string;\n}\n\nfunction setDebugInformationFormatAndSandbox(\n proj: Project,\n targetName: string,\n): void {\n const xcObjects = proj.hash.project.objects;\n if (!xcObjects.PBXNativeTarget) {\n xcObjects.PBXNativeTarget = {};\n }\n const targetKey: string = Object.keys(xcObjects.PBXNativeTarget).filter(\n (key) => {\n const value = xcObjects.PBXNativeTarget?.[key];\n return (\n !key.endsWith('_comment') &&\n typeof value !== 'string' &&\n value?.name === targetName\n );\n },\n )[0];\n const target = xcObjects.PBXNativeTarget[targetKey] as\n | PBXNativeTarget\n | undefined;\n\n if (!xcObjects.XCBuildConfiguration) {\n xcObjects.XCBuildConfiguration = {};\n }\n if (!xcObjects.XCConfigurationList) {\n xcObjects.XCConfigurationList = {};\n }\n const buildConfigurationListId = target?.buildConfigurationList ?? '';\n const configurationList = xcObjects.XCConfigurationList?.[\n buildConfigurationListId\n ] as XCConfigurationList | undefined;\n const buildListConfigurationIds =\n configurationList?.buildConfigurations ?? [];\n for (const buildListConfigId of buildListConfigurationIds) {\n const config =\n xcObjects.XCBuildConfiguration[buildListConfigId.value] ?? {};\n if (typeof config === 'string') {\n // Ignore comments\n continue;\n }\n\n const buildSettings = config.buildSettings ?? {};\n buildSettings.DEBUG_INFORMATION_FORMAT = '\"dwarf-with-dsym\"';\n buildSettings.ENABLE_USER_SCRIPT_SANDBOXING = '\"NO\"';\n\n config.buildSettings = buildSettings;\n xcObjects.XCBuildConfiguration[buildListConfigId.value] = config;\n }\n}\n\nfunction addSentrySPM(proj: Project, targetName: string): void {\n const xcObjects = proj.hash.project.objects;\n\n const sentryFrameworkUUID = proj.generateUuid();\n const sentrySPMUUID = proj.generateUuid();\n\n // Check whether xcObjects already have sentry framework\n if (xcObjects.PBXFrameworksBuildPhase) {\n for (const key in xcObjects.PBXFrameworksBuildPhase || {}) {\n const frameworkBuildPhase = xcObjects.PBXFrameworksBuildPhase[key];\n if (key.endsWith('_comment') || typeof frameworkBuildPhase === 'string') {\n // Ignore comments\n continue;\n }\n for (const framework of frameworkBuildPhase.files ?? []) {\n // We identify the Sentry framework by the comment \"Sentry in Frameworks\",\n // which is set by this manager in previous runs.\n if (framework.comment === 'Sentry in Frameworks') {\n return;\n }\n }\n }\n }\n\n if (!xcObjects.PBXBuildFile) {\n xcObjects.PBXBuildFile = {};\n }\n xcObjects.PBXBuildFile[sentryFrameworkUUID] = {\n isa: 'PBXBuildFile',\n productRef: sentrySPMUUID,\n productRef_comment: 'Sentry',\n };\n xcObjects.PBXBuildFile[`${sentryFrameworkUUID}_comment`] =\n 'Sentry in Frameworks';\n\n if (!xcObjects.PBXFrameworksBuildPhase) {\n xcObjects.PBXFrameworksBuildPhase = {};\n }\n for (const key in xcObjects.PBXFrameworksBuildPhase) {\n const value = xcObjects.PBXFrameworksBuildPhase[key];\n if (key.endsWith('_comment') || typeof value === 'string') {\n // Ignore comments\n continue;\n }\n\n const frameworks = value.files ?? [];\n frameworks.push({\n value: sentryFrameworkUUID,\n comment: 'Sentry in Frameworks',\n });\n value.files = frameworks;\n\n xcObjects.PBXFrameworksBuildPhase[key] = value;\n }\n\n if (!xcObjects.PBXNativeTarget) {\n xcObjects.PBXNativeTarget = {};\n }\n const targetKey = Object.keys(xcObjects.PBXNativeTarget || {}).filter(\n (key) => {\n const value = xcObjects.PBXNativeTarget?.[key];\n return (\n !key.endsWith('_comment') &&\n typeof value !== 'string' &&\n value?.name === targetName\n );\n },\n )[0];\n const target = xcObjects.PBXNativeTarget[targetKey] as PBXNativeTarget;\n\n if (!target.packageProductDependencies) {\n target.packageProductDependencies = [];\n }\n target.packageProductDependencies.push({\n value: sentrySPMUUID,\n comment: 'Sentry',\n });\n\n const sentrySwiftPackageUUID = proj.generateUuid();\n const xcProject = proj.getFirstProject().firstProject;\n if (!xcProject.packageReferences) {\n xcProject.packageReferences = [];\n }\n xcProject.packageReferences.push({\n value: sentrySwiftPackageUUID,\n comment: 'XCRemoteSwiftPackageReference \"sentry-cocoa\"',\n });\n\n if (!xcObjects.XCRemoteSwiftPackageReference) {\n xcObjects.XCRemoteSwiftPackageReference = {};\n }\n\n xcObjects.XCRemoteSwiftPackageReference[sentrySwiftPackageUUID] = {\n isa: 'XCRemoteSwiftPackageReference',\n repositoryURL: '\"https://github.com/getsentry/sentry-cocoa/\"',\n requirement: {\n kind: 'upToNextMajorVersion',\n minimumVersion: '8.0.0',\n },\n };\n xcObjects.XCRemoteSwiftPackageReference[`${sentrySwiftPackageUUID}_comment`] =\n 'XCRemoteSwiftPackageReference \"sentry-cocoa\"';\n\n if (!xcObjects.XCSwiftPackageProductDependency) {\n xcObjects.XCSwiftPackageProductDependency = {};\n }\n xcObjects.XCSwiftPackageProductDependency[sentrySPMUUID] = {\n isa: 'XCSwiftPackageProductDependency',\n package: sentrySwiftPackageUUID,\n package_comment: 'XCRemoteSwiftPackageReference \"sentry-cocoa\"',\n productName: 'Sentry',\n };\n xcObjects.XCSwiftPackageProductDependency[`${sentrySPMUUID}_comment`] =\n 'Sentry';\n\n clack.log.step('Added Sentry SPM dependency to your project');\n}\n\nfunction addUploadSymbolsScript(\n xcodeProject: Project,\n sentryProject: SentryProjectData,\n targetName: string,\n uploadSource: boolean,\n): void {\n const xcObjects = xcodeProject.hash.project.objects;\n if (!xcObjects.PBXNativeTarget) {\n xcObjects.PBXNativeTarget = {};\n }\n const targetKey = Object.keys(xcObjects.PBXNativeTarget).filter((key) => {\n const value = xcObjects.PBXNativeTarget?.[key];\n return (\n !key.endsWith('_comment') &&\n typeof value !== 'string' &&\n value?.name === targetName\n );\n })[0];\n\n if (!xcObjects.PBXShellScriptBuildPhase) {\n xcObjects.PBXShellScriptBuildPhase = {};\n }\n for (const key in xcObjects.PBXShellScriptBuildPhase) {\n const value = xcObjects.PBXShellScriptBuildPhase[key] ?? {};\n if (typeof value === 'string') {\n // Ignore comments\n continue;\n }\n\n // Sentry script already exists, update it\n if (value.shellScript?.includes('sentry-cli')) {\n delete xcObjects.PBXShellScriptBuildPhase?.[key];\n delete xcObjects.PBXShellScriptBuildPhase?.[`${key}_comment`];\n break;\n }\n xcObjects.PBXShellScriptBuildPhase[key] = value;\n }\n\n const isHomebrewInstalled = fs.existsSync('/opt/homebrew/bin/sentry-cli');\n xcodeProject.addBuildPhase(\n [],\n 'PBXShellScriptBuildPhase',\n 'Upload Debug Symbols to Sentry',\n targetKey,\n {\n inputFileListPaths: [],\n outputFileListPaths: [],\n inputPaths: [templates.scriptInputPath],\n shellPath: '/bin/sh',\n shellScript: templates.getRunScriptTemplate(\n sentryProject.organization.slug,\n sentryProject.slug,\n uploadSource,\n isHomebrewInstalled,\n ),\n },\n );\n clack.log.step(`Added Sentry upload script to \"${targetName}\" build phase`);\n}\n\nexport class XcodeProject {\n projectPath: string;\n project: Project;\n objects: PBXObjects;\n files: ProjectFile[] | undefined;\n\n /**\n * Creates a new XcodeProject instance, a wrapper around the Xcode project file `<PROJECT>.xcodeproj/project.pbxproj`.\n *\n * @param projectPath - The path to the Xcode project file\n */\n public constructor(projectPath: string) {\n this.projectPath = projectPath;\n this.project = createXcodeProject(projectPath);\n this.project.parseSync();\n this.objects = this.project.hash.project.objects;\n }\n\n public getAllTargets(): string[] {\n const targets = this.objects.PBXNativeTarget ?? {};\n return Object.keys(targets)\n .filter((key) => {\n const value = targets[key];\n return (\n !key.endsWith('_comment') &&\n typeof value !== 'string' &&\n value.productType.startsWith('\"com.apple.product-type.application')\n );\n })\n .map((key) => {\n return (targets[key] as PBXNativeTarget).name;\n });\n }\n\n public updateXcodeProject(\n sentryProject: SentryProjectData,\n target: string,\n addSPMReference: boolean,\n uploadSource = true,\n ): void {\n addUploadSymbolsScript(this.project, sentryProject, target, uploadSource);\n if (uploadSource) {\n setDebugInformationFormatAndSandbox(this.project, target);\n }\n if (addSPMReference) {\n addSentrySPM(this.project, target);\n }\n const newContent = this.project.writeSync();\n fs.writeFileSync(this.projectPath, newContent);\n }\n\n public filesForTarget(target: string): string[] | undefined {\n const files = this.projectFiles();\n const fileDictionary: Record<string, string> = {};\n files.forEach((file) => {\n fileDictionary[file.key] = file.path;\n });\n\n const targets = this.objects.PBXNativeTarget || {};\n const nativeTarget = Object.keys(targets).filter((key) => {\n const value = targets[key];\n return (\n !key.endsWith('_comment') &&\n typeof value !== 'string' &&\n value.name === target\n );\n })[0];\n\n if (nativeTarget === undefined) {\n return undefined;\n }\n\n const buildPhaseKey = (\n targets[nativeTarget] as PBXNativeTarget\n ).buildPhases?.filter((phase) => {\n return this.objects.PBXSourcesBuildPhase?.[phase.value] !== undefined;\n })[0];\n\n if (buildPhaseKey === undefined) {\n return undefined;\n }\n\n const buildPhase = this.objects.PBXSourcesBuildPhase?.[\n buildPhaseKey.value\n ] as PBXSourcesBuildPhase;\n const buildPhaseFiles = buildPhase?.files ?? [];\n\n const baseDir = path.dirname(path.dirname(this.projectPath));\n\n return buildPhaseFiles\n .map((file) => {\n const fileRef = (\n this.objects.PBXBuildFile?.[file.value] as PBXBuildFile\n )?.fileRef;\n if (!fileRef) {\n return '';\n }\n const buildFile = fileDictionary[fileRef];\n if (!buildFile) {\n return '';\n }\n return path.join(baseDir, buildFile);\n })\n .filter((f: string) => f.length > 0);\n }\n\n projectFiles(): ProjectFile[] {\n if (this.files === undefined) {\n const proj = this.project.getFirstProject();\n const mainGroupKey = proj.firstProject.mainGroup;\n const mainGroup = this.objects.PBXGroup?.[mainGroupKey];\n if (!mainGroup || typeof mainGroup === 'string') {\n return [];\n }\n this.files = this.buildGroup(mainGroup);\n }\n return this.files;\n }\n\n buildGroup(group: PBXGroup, path = ''): ProjectFile[] {\n const result: ProjectFile[] = [];\n for (const child of group.children ?? []) {\n const fileReference = this.objects.PBXFileReference?.[child.value];\n const groupReference = this.objects.PBXGroup?.[child.value];\n if (fileReference) {\n if (typeof fileReference === 'string') {\n continue;\n }\n result.push({\n key: child.value,\n path: `${path}${fileReference.path.replace(/\"/g, '')}`,\n });\n } else if (groupReference) {\n if (typeof groupReference === 'string') {\n continue;\n }\n const groupChildren = this.buildGroup(\n groupReference,\n groupReference.path\n ? `${path}${groupReference.path.replace(/\"/g, '')}/`\n : path,\n );\n result.push(...groupChildren);\n }\n }\n return result;\n }\n}\n"]}
@@ -98,15 +98,16 @@ exports.runNextjsWizard = runNextjsWizard;
98
98
  function runNextjsWizardWithTelemetry(options) {
99
99
  var _a;
100
100
  return __awaiter(this, void 0, void 0, function () {
101
- var typeScriptDetected, packageJson, nextVersion, _b, selectedProject, authToken, selfHosted, sentryUrl, sdkAlreadyInstalled, packageManagerFromInstallStep, shouldCreateExamplePage, isLikelyUsingTurbopack, mightBeUsingVercel, packageManagerForOutro, _c;
101
+ var promoCode, telemetryEnabled, forceInstall, typeScriptDetected, packageJson, nextVersion, _b, selectedProject, authToken, selfHosted, sentryUrl, sdkAlreadyInstalled, packageManagerFromInstallStep, shouldCreateExamplePage, isLikelyUsingTurbopack, mightBeUsingVercel, packageManagerForOutro, _c;
102
102
  var _this = this;
103
103
  return __generator(this, function (_d) {
104
104
  switch (_d.label) {
105
105
  case 0:
106
+ promoCode = options.promoCode, telemetryEnabled = options.telemetryEnabled, forceInstall = options.forceInstall;
106
107
  (0, clack_utils_1.printWelcome)({
107
108
  wizardName: 'Sentry Next.js Wizard',
108
- promoCode: options.promoCode,
109
- telemetryEnabled: options.telemetryEnabled,
109
+ promoCode: promoCode,
110
+ telemetryEnabled: telemetryEnabled,
110
111
  });
111
112
  typeScriptDetected = (0, clack_utils_1.isUsingTypeScript)();
112
113
  return [4 /*yield*/, (0, clack_utils_1.confirmContinueIfNoOrDirtyGitRepo)()];
@@ -129,6 +130,7 @@ function runNextjsWizardWithTelemetry(options) {
129
130
  packageName: '@sentry/nextjs@^8',
130
131
  packageNameDisplayLabel: '@sentry/nextjs',
131
132
  alreadyInstalled: !!((_a = packageJson === null || packageJson === void 0 ? void 0 : packageJson.dependencies) === null || _a === void 0 ? void 0 : _a['@sentry/nextjs']),
133
+ forceInstall: forceInstall,
132
134
  })];
133
135
  case 5:
134
136
  packageManagerFromInstallStep = (_d.sent()).packageManager;