@sentry/wizard 3.9.2 → 3.11.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 (168) hide show
  1. package/CHANGELOG.md +58 -6
  2. package/dist/lib/Constants.d.ts +2 -0
  3. package/dist/lib/Constants.js +10 -0
  4. package/dist/lib/Constants.js.map +1 -1
  5. package/dist/lib/Steps/ChooseIntegration.js +15 -4
  6. package/dist/lib/Steps/ChooseIntegration.js.map +1 -1
  7. package/dist/lib/Steps/Integrations/Android.d.ts +9 -0
  8. package/dist/lib/Steps/Integrations/Android.js +86 -0
  9. package/dist/lib/Steps/Integrations/Android.js.map +1 -0
  10. package/dist/lib/Steps/Integrations/Cordova.js +5 -1
  11. package/dist/lib/Steps/Integrations/Cordova.js.map +1 -1
  12. package/dist/lib/Steps/Integrations/ReactNative.js +3 -3
  13. package/dist/lib/Steps/Integrations/ReactNative.js.map +1 -1
  14. package/dist/lib/Steps/Integrations/Remix.d.ts +12 -0
  15. package/dist/lib/Steps/Integrations/Remix.js +98 -0
  16. package/dist/lib/Steps/Integrations/Remix.js.map +1 -0
  17. package/dist/lib/Steps/PromptForParameters.js +36 -3
  18. package/dist/lib/Steps/PromptForParameters.js.map +1 -1
  19. package/dist/lib/Steps/SentryProjectSelector.js +1 -1
  20. package/dist/lib/Steps/SentryProjectSelector.js.map +1 -1
  21. package/dist/package.json +4 -3
  22. package/dist/src/android/android-wizard.d.ts +2 -0
  23. package/dist/src/android/android-wizard.js +217 -0
  24. package/dist/src/android/android-wizard.js.map +1 -0
  25. package/dist/src/android/code-tools.d.ts +39 -0
  26. package/dist/src/android/code-tools.js +161 -0
  27. package/dist/src/android/code-tools.js.map +1 -0
  28. package/dist/src/android/gradle.d.ts +62 -0
  29. package/dist/src/android/gradle.js +281 -0
  30. package/dist/src/android/gradle.js.map +1 -0
  31. package/dist/src/android/manifest.d.ts +57 -0
  32. package/dist/src/android/manifest.js +183 -0
  33. package/dist/src/android/manifest.js.map +1 -0
  34. package/dist/src/android/templates.d.ts +11 -0
  35. package/dist/src/android/templates.js +34 -0
  36. package/dist/src/android/templates.js.map +1 -0
  37. package/dist/src/apple/apple-wizard.js +123 -64
  38. package/dist/src/apple/apple-wizard.js.map +1 -1
  39. package/dist/src/apple/cocoapod.js +4 -3
  40. package/dist/src/apple/cocoapod.js.map +1 -1
  41. package/dist/src/apple/code-tools.d.ts +1 -1
  42. package/dist/src/apple/code-tools.js +43 -19
  43. package/dist/src/apple/code-tools.js.map +1 -1
  44. package/dist/src/apple/fastlane.d.ts +1 -1
  45. package/dist/src/apple/fastlane.js +12 -6
  46. package/dist/src/apple/fastlane.js.map +1 -1
  47. package/dist/src/apple/templates.d.ts +2 -2
  48. package/dist/src/apple/templates.js +4 -4
  49. package/dist/src/apple/templates.js.map +1 -1
  50. package/dist/src/apple/xcode-manager.d.ts +19 -3
  51. package/dist/src/apple/xcode-manager.js +126 -24
  52. package/dist/src/apple/xcode-manager.js.map +1 -1
  53. package/dist/src/nextjs/nextjs-wizard.js +49 -11
  54. package/dist/src/nextjs/nextjs-wizard.js.map +1 -1
  55. package/dist/src/nextjs/templates.d.ts +2 -0
  56. package/dist/src/nextjs/templates.js +6 -2
  57. package/dist/src/nextjs/templates.js.map +1 -1
  58. package/dist/src/remix/codemods/handle-error.d.ts +2 -0
  59. package/dist/src/remix/codemods/handle-error.js +70 -0
  60. package/dist/src/remix/codemods/handle-error.js.map +1 -0
  61. package/dist/src/remix/codemods/root-v1.d.ts +1 -0
  62. package/dist/src/remix/codemods/root-v1.js +133 -0
  63. package/dist/src/remix/codemods/root-v1.js.map +1 -0
  64. package/dist/src/remix/codemods/root-v2.d.ts +1 -0
  65. package/dist/src/remix/codemods/root-v2.js +134 -0
  66. package/dist/src/remix/codemods/root-v2.js.map +1 -0
  67. package/dist/src/remix/remix-wizard.d.ts +2 -0
  68. package/dist/src/remix/remix-wizard.js +196 -0
  69. package/dist/src/remix/remix-wizard.js.map +1 -0
  70. package/dist/src/remix/sdk-setup.d.ts +18 -0
  71. package/dist/src/remix/sdk-setup.js +293 -0
  72. package/dist/src/remix/sdk-setup.js.map +1 -0
  73. package/dist/src/remix/templates.d.ts +2 -0
  74. package/dist/src/remix/templates.js +6 -0
  75. package/dist/src/remix/templates.js.map +1 -0
  76. package/dist/src/remix/utils.d.ts +6 -0
  77. package/dist/src/remix/utils.js +55 -0
  78. package/dist/src/remix/utils.js.map +1 -0
  79. package/dist/src/sourcemaps/sourcemaps-wizard.js +49 -25
  80. package/dist/src/sourcemaps/sourcemaps-wizard.js.map +1 -1
  81. package/dist/src/sourcemaps/tools/nextjs.js +1 -1
  82. package/dist/src/sourcemaps/tools/nextjs.js.map +1 -1
  83. package/dist/src/sourcemaps/tools/remix.d.ts +3 -0
  84. package/dist/src/sourcemaps/tools/remix.js +125 -0
  85. package/dist/src/sourcemaps/tools/remix.js.map +1 -0
  86. package/dist/src/sourcemaps/tools/sentry-cli.js +19 -16
  87. package/dist/src/sourcemaps/tools/sentry-cli.js.map +1 -1
  88. package/dist/src/sourcemaps/tools/vite.d.ts +2 -1
  89. package/dist/src/sourcemaps/tools/vite.js +99 -12
  90. package/dist/src/sourcemaps/tools/vite.js.map +1 -1
  91. package/dist/src/sourcemaps/utils/detect-tool.d.ts +1 -1
  92. package/dist/src/sourcemaps/utils/detect-tool.js +1 -0
  93. package/dist/src/sourcemaps/utils/detect-tool.js.map +1 -1
  94. package/dist/src/sveltekit/sdk-setup.js +3 -3
  95. package/dist/src/sveltekit/sdk-setup.js.map +1 -1
  96. package/dist/src/sveltekit/sveltekit-wizard.js +34 -44
  97. package/dist/src/sveltekit/sveltekit-wizard.js.map +1 -1
  98. package/dist/src/telemetry.js +1 -0
  99. package/dist/src/telemetry.js.map +1 -1
  100. package/dist/src/utils/ast-utils.d.ts +2 -2
  101. package/dist/src/utils/ast-utils.js +7 -7
  102. package/dist/src/utils/ast-utils.js.map +1 -1
  103. package/dist/src/utils/clack-utils.d.ts +23 -28
  104. package/dist/src/utils/clack-utils.js +287 -244
  105. package/dist/src/utils/clack-utils.js.map +1 -1
  106. package/dist/src/utils/package-manager.d.ts +10 -0
  107. package/dist/{lib/Helper/PackageManager.js → src/utils/package-manager.js} +42 -74
  108. package/dist/src/utils/package-manager.js.map +1 -0
  109. package/dist/src/utils/release-registry.d.ts +1 -0
  110. package/dist/src/utils/release-registry.js +68 -0
  111. package/dist/src/utils/release-registry.js.map +1 -0
  112. package/dist/src/utils/sentrycli-utils.d.ts +4 -0
  113. package/dist/src/utils/sentrycli-utils.js +41 -0
  114. package/dist/src/utils/sentrycli-utils.js.map +1 -0
  115. package/dist/test/sourcemaps/tools/vite.test.d.ts +1 -0
  116. package/dist/test/sourcemaps/tools/vite.test.js +132 -0
  117. package/dist/test/sourcemaps/tools/vite.test.js.map +1 -0
  118. package/lib/Constants.ts +10 -0
  119. package/lib/Steps/ChooseIntegration.ts +14 -3
  120. package/lib/Steps/Integrations/Android.ts +23 -0
  121. package/lib/Steps/Integrations/Cordova.ts +5 -1
  122. package/lib/Steps/Integrations/ReactNative.ts +9 -3
  123. package/lib/Steps/Integrations/Remix.ts +32 -0
  124. package/lib/Steps/PromptForParameters.ts +48 -3
  125. package/lib/Steps/SentryProjectSelector.ts +3 -1
  126. package/package.json +4 -3
  127. package/src/android/android-wizard.ts +196 -0
  128. package/src/android/code-tools.ts +156 -0
  129. package/src/android/gradle.ts +245 -0
  130. package/src/android/manifest.ts +180 -0
  131. package/src/android/templates.ts +88 -0
  132. package/src/apple/apple-wizard.ts +113 -35
  133. package/src/apple/cocoapod.ts +6 -3
  134. package/src/apple/code-tools.ts +46 -18
  135. package/src/apple/fastlane.ts +6 -12
  136. package/src/apple/templates.ts +2 -8
  137. package/src/apple/xcode-manager.ts +167 -25
  138. package/src/nextjs/nextjs-wizard.ts +72 -8
  139. package/src/nextjs/templates.ts +16 -2
  140. package/src/remix/codemods/handle-error.ts +67 -0
  141. package/src/remix/codemods/root-v1.ts +91 -0
  142. package/src/remix/codemods/root-v2.ts +84 -0
  143. package/src/remix/remix-wizard.ts +132 -0
  144. package/src/remix/sdk-setup.ts +300 -0
  145. package/src/remix/templates.ts +15 -0
  146. package/src/remix/utils.ts +41 -0
  147. package/src/sourcemaps/sourcemaps-wizard.ts +28 -5
  148. package/src/sourcemaps/tools/nextjs.ts +2 -2
  149. package/src/sourcemaps/tools/remix.ts +90 -0
  150. package/src/sourcemaps/tools/sentry-cli.ts +8 -7
  151. package/src/sourcemaps/tools/vite.ts +136 -6
  152. package/src/sourcemaps/utils/detect-tool.ts +4 -1
  153. package/src/sveltekit/sdk-setup.ts +4 -4
  154. package/src/sveltekit/sveltekit-wizard.ts +5 -14
  155. package/src/telemetry.ts +2 -0
  156. package/src/utils/ast-utils.ts +7 -5
  157. package/src/utils/clack-utils.ts +366 -258
  158. package/src/utils/package-manager.ts +61 -0
  159. package/src/utils/release-registry.ts +19 -0
  160. package/src/utils/sentrycli-utils.ts +22 -0
  161. package/test/sourcemaps/tools/vite.test.ts +149 -0
  162. package/dist/lib/Helper/PackageManager.d.ts +0 -22
  163. package/dist/lib/Helper/PackageManager.js.map +0 -1
  164. package/dist/src/utils/vendor/clack-custom-select.d.ts +0 -21
  165. package/dist/src/utils/vendor/clack-custom-select.js +0 -137
  166. package/dist/src/utils/vendor/clack-custom-select.js.map +0 -1
  167. package/lib/Helper/PackageManager.ts +0 -59
  168. package/src/utils/vendor/clack-custom-select.ts +0 -160
@@ -0,0 +1 @@
1
+ {"version":3,"file":"utils.js","sourceRoot":"","sources":["../../../src/remix/utils.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAEA,yCAA6B;AAE7B,+EAA+E;AAC/E,2DAAmC;AACnC,gDAA0B;AAE1B,+BAA+B;AAC/B,SAAgB,gBAAgB,CAC9B,QAAgB,EAChB,WAAmB;IAEnB,IAAM,eAAe,GAAG,WAAW,CAAC,QAAQ,CAAC,eAAe,CAAC,CAAC;IAE9D,IAAI,eAAe,EAAE;QACnB,iBAAK,CAAC,GAAG,CAAC,IAAI,CACZ,eAAQ,eAAK,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,qFACP,eAAK,CAAC,IAAI,CAC5C,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,CACxB,MAAG,CACL,CAAC;KACH;IAED,OAAO,eAAe,CAAC;AACzB,CAAC;AAhBD,4CAgBC;AAED;;GAEG;AACH,SAAgB,yBAAyB,CACvC,mBAA4B;IAE5B,KAAK,IAAI,CAAC,GAAG,mBAAmB,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,EAAE;QAC7D,IAAI,mBAAmB,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,KAAK,mBAAmB,EAAE;YAC5D,OAAO,CAAC,GAAG,CAAC,CAAC;SACd;KACF;IAED,OAAO,CAAC,CAAC;AACX,CAAC;AAVD,8DAUC","sourcesContent":["import type { Program } from '@babel/types';\n\nimport * as path from 'path';\n\n// @ts-expect-error - clack is ESM and TS complains about that. It works though\nimport clack from '@clack/prompts';\nimport chalk from 'chalk';\n\n// Copied from sveltekit wizard\nexport function hasSentryContent(\n fileName: string,\n fileContent: string,\n): boolean {\n const includesContent = fileContent.includes('@sentry/remix');\n\n if (includesContent) {\n clack.log.warn(\n `File ${chalk.cyan(path.basename(fileName))} already contains Sentry code.\nSkipping adding Sentry functionality to ${chalk.cyan(\n path.basename(fileName),\n )}.`,\n );\n }\n\n return includesContent;\n}\n\n/**\n * We want to insert the init call on top of the file but after all import statements\n */\nexport function getInitCallInsertionIndex(\n originalHooksModAST: Program,\n): number {\n for (let x = originalHooksModAST.body.length - 1; x >= 0; x--) {\n if (originalHooksModAST.body[x].type === 'ImportDeclaration') {\n return x + 1;\n }\n }\n\n return 0;\n}\n"]}
@@ -94,6 +94,8 @@ var other_wizards_1 = require("./utils/other-wizards");
94
94
  var angular_1 = require("./tools/angular");
95
95
  var detect_tool_1 = require("./utils/detect-tool");
96
96
  var nextjs_1 = require("./tools/nextjs");
97
+ var remix_1 = require("./tools/remix");
98
+ var package_manager_1 = require("../utils/package-manager");
97
99
  function runSourcemapsWizard(options) {
98
100
  return __awaiter(this, void 0, void 0, function () {
99
101
  return __generator(this, function (_a) {
@@ -144,19 +146,25 @@ function runSourcemapsWizardWithTelemetry(options) {
144
146
  case 7:
145
147
  selectedTool = _b.sent();
146
148
  Sentry.setTag('selected-tool', selectedTool);
147
- return [4 /*yield*/, (0, telemetry_1.traceStep)('tool-setup', function () {
148
- return startToolSetupFlow(selectedTool, {
149
- orgSlug: selectedProject.organization.slug,
150
- projectSlug: selectedProject.slug,
151
- selfHosted: selfHosted,
152
- url: sentryUrl,
153
- authToken: authToken,
154
- }, wizardOptionsWithPreSelectedProject);
155
- })];
149
+ if (!(selectedTool === 'no-tool')) return [3 /*break*/, 9];
150
+ prompts_1.default.log.info("No Problem! But in this case, there's nothing to configure :)");
151
+ return [4 /*yield*/, (0, clack_utils_1.abort)('Exiting, have a great day!', 0)];
156
152
  case 8:
153
+ _b.sent();
154
+ return [2 /*return*/];
155
+ case 9: return [4 /*yield*/, (0, telemetry_1.traceStep)('tool-setup', function () {
156
+ return startToolSetupFlow(selectedTool, {
157
+ orgSlug: selectedProject.organization.slug,
158
+ projectSlug: selectedProject.slug,
159
+ selfHosted: selfHosted,
160
+ url: sentryUrl,
161
+ authToken: authToken,
162
+ }, wizardOptionsWithPreSelectedProject);
163
+ })];
164
+ case 10:
157
165
  _b.sent();
158
166
  return [4 /*yield*/, (0, telemetry_1.traceStep)('ci-setup', function () { return configureCI(selectedTool, authToken); })];
159
- case 9:
167
+ case 11:
160
168
  _b.sent();
161
169
  (0, telemetry_1.traceStep)('outro', function () {
162
170
  return printOutro(sentryUrl, selectedProject.organization.slug, selectedProject.id);
@@ -193,6 +201,11 @@ function askForUsedBundlerTool() {
193
201
  value: 'nextjs',
194
202
  hint: 'Select this option if you want to set up source maps in a NextJS project.',
195
203
  },
204
+ {
205
+ label: 'Remix',
206
+ value: 'remix',
207
+ hint: 'Select this option if you want to set up source maps in a Remix project.',
208
+ },
196
209
  {
197
210
  label: 'Webpack',
198
211
  value: 'webpack',
@@ -219,10 +232,15 @@ function askForUsedBundlerTool() {
219
232
  hint: 'Configure source maps when using tsc as build tool',
220
233
  },
221
234
  {
222
- label: 'None of the above',
235
+ label: 'I use another tool',
223
236
  value: 'sentry-cli',
224
237
  hint: 'This will configure source maps upload for you using sentry-cli',
225
238
  },
239
+ {
240
+ label: "I don't minify, transpile or bundle my code",
241
+ value: 'no-tool',
242
+ hint: 'This will exit the wizard',
243
+ },
226
244
  ]
227
245
  };
228
246
  return [4 /*yield*/, (0, detect_tool_1.detectUsedTool)()];
@@ -251,45 +269,50 @@ function startToolSetupFlow(selctedTool, options, wizardOptions) {
251
269
  case 'create-react-app': return [3 /*break*/, 11];
252
270
  case 'angular': return [3 /*break*/, 13];
253
271
  case 'nextjs': return [3 /*break*/, 15];
272
+ case 'remix': return [3 /*break*/, 17];
254
273
  }
255
- return [3 /*break*/, 17];
274
+ return [3 /*break*/, 19];
256
275
  case 1: return [4 /*yield*/, (0, webpack_1.configureWebPackPlugin)(options)];
257
276
  case 2:
258
277
  _b.sent();
259
- return [3 /*break*/, 19];
278
+ return [3 /*break*/, 21];
260
279
  case 3: return [4 /*yield*/, (0, vite_1.configureVitePlugin)(options)];
261
280
  case 4:
262
281
  _b.sent();
263
- return [3 /*break*/, 19];
282
+ return [3 /*break*/, 21];
264
283
  case 5: return [4 /*yield*/, (0, esbuild_1.configureEsbuildPlugin)(options)];
265
284
  case 6:
266
285
  _b.sent();
267
- return [3 /*break*/, 19];
286
+ return [3 /*break*/, 21];
268
287
  case 7: return [4 /*yield*/, (0, rollup_1.configureRollupPlugin)(options)];
269
288
  case 8:
270
289
  _b.sent();
271
- return [3 /*break*/, 19];
290
+ return [3 /*break*/, 21];
272
291
  case 9: return [4 /*yield*/, (0, sentry_cli_1.configureSentryCLI)(options, tsc_1.configureTscSourcemapGenerationFlow)];
273
292
  case 10:
274
293
  _b.sent();
275
- return [3 /*break*/, 19];
294
+ return [3 /*break*/, 21];
276
295
  case 11: return [4 /*yield*/, (0, sentry_cli_1.configureSentryCLI)(options, create_react_app_1.configureCRASourcemapGenerationFlow)];
277
296
  case 12:
278
297
  _b.sent();
279
- return [3 /*break*/, 19];
298
+ return [3 /*break*/, 21];
280
299
  case 13: return [4 /*yield*/, (0, sentry_cli_1.configureSentryCLI)(options, angular_1.configureAngularSourcemapGenerationFlow)];
281
300
  case 14:
282
301
  _b.sent();
283
- return [3 /*break*/, 19];
302
+ return [3 /*break*/, 21];
284
303
  case 15: return [4 /*yield*/, (0, nextjs_1.configureNextJsSourceMapsUpload)(options, wizardOptions)];
285
304
  case 16:
286
305
  _b.sent();
287
- return [3 /*break*/, 19];
288
- case 17: return [4 /*yield*/, (0, sentry_cli_1.configureSentryCLI)(options)];
306
+ return [3 /*break*/, 21];
307
+ case 17: return [4 /*yield*/, (0, remix_1.configureRemixSourceMapsUpload)(options, wizardOptions)];
289
308
  case 18:
290
309
  _b.sent();
291
- return [3 /*break*/, 19];
292
- case 19: return [2 /*return*/];
310
+ return [3 /*break*/, 21];
311
+ case 19: return [4 /*yield*/, (0, sentry_cli_1.configureSentryCLI)(options)];
312
+ case 20:
313
+ _b.sent();
314
+ return [3 /*break*/, 21];
315
+ case 21: return [2 /*return*/];
293
316
  }
294
317
  });
295
318
  });
@@ -380,8 +403,9 @@ function setupAuthTokenInCI(authToken) {
380
403
  });
381
404
  }
382
405
  function printOutro(url, orgSlug, projectId) {
383
- var pacMan = (0, clack_utils_1.detectPackageManager)() || 'npm';
384
- var buildCommand = "'".concat(pacMan).concat(pacMan === 'npm' ? ' run' : '', " build'");
406
+ var _a;
407
+ var packageManager = (0, package_manager_1.detectPackageManger)();
408
+ var buildCommand = (_a = packageManager === null || packageManager === void 0 ? void 0 : packageManager.buildCommand) !== null && _a !== void 0 ? _a : 'npm run build';
385
409
  var urlObject = new url_1.URL(url);
386
410
  urlObject.host = "".concat(orgSlug, ".").concat(urlObject.host);
387
411
  urlObject.pathname = '/issues/';
@@ -1 +1 @@
1
- {"version":3,"file":"sourcemaps-wizard.js","sourceRoot":"","sources":["../../../src/sourcemaps/sourcemaps-wizard.ts"],"names":[],"mappings":"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","sourcesContent":["// @ts-ignore - clack is ESM and TS complains about that. It works though\nimport clack from '@clack/prompts';\nimport chalk from 'chalk';\nimport * as Sentry from '@sentry/node';\n\nimport {\n abortIfCancelled,\n confirmContinueEvenThoughNoGitRepo,\n detectPackageManager,\n SENTRY_DOT_ENV_FILE,\n printWelcome,\n SENTRY_CLI_RC_FILE,\n getOrAskForProjectData,\n} from '../utils/clack-utils';\nimport { isUnicodeSupported } from '../utils/vendor/is-unicorn-supported';\nimport { SourceMapUploadToolConfigurationOptions } from './tools/types';\nimport { configureVitePlugin } from './tools/vite';\nimport { setupNpmScriptInCI, configureSentryCLI } from './tools/sentry-cli';\nimport { configureWebPackPlugin } from './tools/webpack';\nimport { configureTscSourcemapGenerationFlow } from './tools/tsc';\nimport { configureRollupPlugin } from './tools/rollup';\nimport { configureEsbuildPlugin } from './tools/esbuild';\nimport { WizardOptions } from '../utils/types';\nimport { configureCRASourcemapGenerationFlow } from './tools/create-react-app';\nimport { ensureMinimumSdkVersionIsInstalled } from './utils/sdk-version';\nimport { traceStep, withTelemetry } from '../telemetry';\nimport { URL } from 'url';\nimport { checkIfMoreSuitableWizardExistsAndAskForRedirect } from './utils/other-wizards';\nimport { configureAngularSourcemapGenerationFlow } from './tools/angular';\nimport { detectUsedTool, SupportedTools } from './utils/detect-tool';\nimport { configureNextJsSourceMapsUpload } from './tools/nextjs';\n\nexport async function runSourcemapsWizard(\n options: WizardOptions,\n): Promise<void> {\n return withTelemetry(\n {\n enabled: options.telemetryEnabled,\n integration: 'sourcemaps',\n },\n () => runSourcemapsWizardWithTelemetry(options),\n );\n}\n\nasync function runSourcemapsWizardWithTelemetry(\n options: WizardOptions,\n): Promise<void> {\n printWelcome({\n wizardName: 'Sentry Source Maps Upload Configuration Wizard',\n message: `This wizard will help you upload source maps to Sentry as part of your build.\nThank you for using Sentry :)${\n options.telemetryEnabled\n ? `\n\n(This setup wizard sends telemetry data and crash reports to Sentry.\nYou can turn this off by running the wizard with the '--disable-telemetry' flag.)`\n : ''\n }`,\n promoCode: options.promoCode,\n });\n\n const moreSuitableWizard = await traceStep(\n 'check-framework-wizard',\n checkIfMoreSuitableWizardExistsAndAskForRedirect,\n );\n if (moreSuitableWizard) {\n await traceStep('run-framework-wizard', () => moreSuitableWizard(options));\n return;\n }\n\n await traceStep('detect-git', confirmContinueEvenThoughNoGitRepo);\n\n await traceStep('check-sdk-version', ensureMinimumSdkVersionIsInstalled);\n\n const { selfHosted, selectedProject, sentryUrl, authToken } =\n await getOrAskForProjectData(options);\n\n const wizardOptionsWithPreSelectedProject = {\n ...options,\n preSelectedProject: {\n project: selectedProject,\n authToken,\n selfHosted,\n },\n };\n\n const selectedTool = await traceStep('select-tool', askForUsedBundlerTool);\n\n Sentry.setTag('selected-tool', selectedTool);\n\n await traceStep('tool-setup', () =>\n startToolSetupFlow(\n selectedTool,\n {\n orgSlug: selectedProject.organization.slug,\n projectSlug: selectedProject.slug,\n selfHosted,\n url: sentryUrl,\n authToken,\n },\n wizardOptionsWithPreSelectedProject,\n ),\n );\n\n await traceStep('ci-setup', () => configureCI(selectedTool, authToken));\n\n traceStep('outro', () =>\n printOutro(\n sentryUrl,\n selectedProject.organization.slug,\n selectedProject.id,\n ),\n );\n}\n\nasync function askForUsedBundlerTool(): Promise<SupportedTools> {\n const selectedTool: SupportedTools | symbol = await abortIfCancelled(\n clack.select({\n message: 'Which framework, bundler or build tool are you using?',\n options: [\n {\n label: 'Angular',\n value: 'angular',\n hint: 'Select this option if you are using Angular.',\n },\n {\n label: 'Create React App',\n value: 'create-react-app',\n hint: 'Select this option if you set up your app with Create React App.',\n },\n {\n label: 'Next.js',\n value: 'nextjs',\n hint: 'Select this option if you want to set up source maps in a NextJS project.',\n },\n {\n label: 'Webpack',\n value: 'webpack',\n hint: 'Select this if you are using Webpack and you have access to your Webpack config.',\n },\n {\n label: 'Vite',\n value: 'vite',\n hint: 'Select this if you are using Vite and you have access to your Vite config.',\n },\n {\n label: 'esbuild',\n value: 'esbuild',\n hint: 'Select this if you are using esbuild and you have access to your esbuild config.',\n },\n {\n label: 'Rollup',\n value: 'rollup',\n hint: 'Select this if you are using Rollup and you have access to your Rollup config.',\n },\n {\n label: 'tsc',\n value: 'tsc',\n hint: 'Configure source maps when using tsc as build tool',\n },\n {\n label: 'None of the above',\n value: 'sentry-cli',\n hint: 'This will configure source maps upload for you using sentry-cli',\n },\n ],\n initialValue: await detectUsedTool(),\n }),\n );\n\n return selectedTool;\n}\n\nasync function startToolSetupFlow(\n selctedTool: SupportedTools,\n options: SourceMapUploadToolConfigurationOptions,\n wizardOptions: WizardOptions,\n): Promise<void> {\n switch (selctedTool) {\n case 'webpack':\n await configureWebPackPlugin(options);\n break;\n case 'vite':\n await configureVitePlugin(options);\n break;\n case 'esbuild':\n await configureEsbuildPlugin(options);\n break;\n case 'rollup':\n await configureRollupPlugin(options);\n break;\n case 'tsc':\n await configureSentryCLI(options, configureTscSourcemapGenerationFlow);\n break;\n case 'create-react-app':\n await configureSentryCLI(options, configureCRASourcemapGenerationFlow);\n break;\n case 'angular':\n await configureSentryCLI(\n options,\n configureAngularSourcemapGenerationFlow,\n );\n break;\n case 'nextjs':\n await configureNextJsSourceMapsUpload(options, wizardOptions);\n break;\n default:\n await configureSentryCLI(options);\n break;\n }\n}\n\nasync function configureCI(\n selectedTool: SupportedTools,\n authToken: string,\n): Promise<void> {\n const isUsingCI = await abortIfCancelled(\n clack.select({\n message: `Are you using a CI/CD tool to build and deploy your application?`,\n options: [\n {\n label: 'Yes',\n hint: 'I use a tool like Github Actions, Gitlab, CircleCI, TravisCI, Jenkins, ...',\n value: true,\n },\n {\n label: 'No',\n hint: 'I build and deploy my application manually',\n value: false,\n },\n ],\n initialValue: true,\n }),\n );\n\n Sentry.setTag('using-ci', isUsingCI);\n\n const isCliBasedFlowTool = [\n 'sentry-cli',\n 'tsc',\n 'angular',\n 'create-react-app',\n ].includes(selectedTool);\n\n // some non-cli-based flows also use the .sentryclirc file\n const usesSentryCliRc = selectedTool === 'nextjs';\n\n const authTokenFile =\n isCliBasedFlowTool || usesSentryCliRc\n ? SENTRY_CLI_RC_FILE\n : SENTRY_DOT_ENV_FILE;\n\n if (!isUsingCI) {\n clack.log.info(\n `No Problem! Just make sure that the Sentry auth token from ${chalk.cyan(\n authTokenFile,\n )} is available whenever you build and deploy your app.`,\n );\n return;\n }\n\n if (isCliBasedFlowTool) {\n await traceStep('ci-npm-script-setup', setupNpmScriptInCI);\n }\n\n await traceStep('ci-auth-token-setup', () => setupAuthTokenInCI(authToken));\n}\n\nasync function setupAuthTokenInCI(authToken: string) {\n clack.log.step(\n 'Add the Sentry authentication token as an environment variable to your CI setup:',\n );\n\n // Intentially logging directly to console here so that the code can be copied/pasted directly\n // eslint-disable-next-line no-console\n console.log(\n chalk.greenBright(`\nSENTRY_AUTH_TOKEN=${authToken}\n`),\n );\n\n clack.log.warn(\n chalk.yellow('DO NOT commit this auth token to your repository!'),\n );\n\n const addedEnvVarToCI = await abortIfCancelled(\n clack.select({\n message: 'Did you configure CI as shown above?',\n options: [\n { label: 'Yes, continue!', value: true },\n {\n label: \"I'll do it later...\",\n value: false,\n hint: chalk.yellow(\n 'You need to set the auth token to upload source maps in CI',\n ),\n },\n ],\n initialValue: true,\n }),\n );\n\n Sentry.setTag('added-env-var-to-ci', addedEnvVarToCI);\n\n if (!addedEnvVarToCI) {\n clack.log.info(\"Don't forget! :)\");\n }\n}\n\nfunction printOutro(url: string, orgSlug: string, projectId: string) {\n const pacMan = detectPackageManager() || 'npm';\n const buildCommand = `'${pacMan}${pacMan === 'npm' ? ' run' : ''} build'`;\n\n const urlObject = new URL(url);\n urlObject.host = `${orgSlug}.${urlObject.host}`;\n urlObject.pathname = '/issues/';\n urlObject.searchParams.set('project', projectId);\n\n const issueStreamUrl = urlObject.toString();\n\n const arrow = isUnicodeSupported() ? '→' : '->';\n\n clack.outro(`${chalk.green(\"That's it - everything is set up!\")}\n\n ${chalk.cyan(`Test and validate your setup locally with the following Steps:\n\n 1. Build your application in ${chalk.bold('production mode')}.\n ${chalk.gray(`${arrow} For example, run ${chalk.bold(buildCommand)}.`)}\n ${chalk.gray(\n `${arrow} You should see source map upload logs in your console.`,\n )}\n 2. Run your application and throw a test error.\n ${chalk.gray(`${arrow} The error should appear in Sentry:`)}\n ${chalk.gray(`${arrow} ${issueStreamUrl}`)}\n 3. Open the error in Sentry and verify that it's source-mapped.\n ${chalk.gray(\n `${arrow} The stack trace should show your original source code.`,\n )}\n `)}\n ${chalk.dim(\n `If you encounter any issues, please refer to the Troubleshooting Guide:\n https://docs.sentry.io/platforms/javascript/sourcemaps/troubleshooting_js\n\n If the guide doesn't help or you encounter a bug, please let us know:\n https://github.com/getsentry/sentry-javascript/issues`,\n )}\n`);\n}\n"]}
1
+ {"version":3,"file":"sourcemaps-wizard.js","sourceRoot":"","sources":["../../../src/sourcemaps/sourcemaps-wizard.ts"],"names":[],"mappings":"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","sourcesContent":["// @ts-ignore - clack is ESM and TS complains about that. It works though\nimport clack from '@clack/prompts';\nimport chalk from 'chalk';\nimport * as Sentry from '@sentry/node';\n\nimport {\n abort,\n abortIfCancelled,\n confirmContinueEvenThoughNoGitRepo,\n SENTRY_DOT_ENV_FILE,\n printWelcome,\n SENTRY_CLI_RC_FILE,\n getOrAskForProjectData,\n} from '../utils/clack-utils';\nimport { isUnicodeSupported } from '../utils/vendor/is-unicorn-supported';\nimport { SourceMapUploadToolConfigurationOptions } from './tools/types';\nimport { configureVitePlugin } from './tools/vite';\nimport { setupNpmScriptInCI, configureSentryCLI } from './tools/sentry-cli';\nimport { configureWebPackPlugin } from './tools/webpack';\nimport { configureTscSourcemapGenerationFlow } from './tools/tsc';\nimport { configureRollupPlugin } from './tools/rollup';\nimport { configureEsbuildPlugin } from './tools/esbuild';\nimport { WizardOptions } from '../utils/types';\nimport { configureCRASourcemapGenerationFlow } from './tools/create-react-app';\nimport { ensureMinimumSdkVersionIsInstalled } from './utils/sdk-version';\nimport { traceStep, withTelemetry } from '../telemetry';\nimport { URL } from 'url';\nimport { checkIfMoreSuitableWizardExistsAndAskForRedirect } from './utils/other-wizards';\nimport { configureAngularSourcemapGenerationFlow } from './tools/angular';\nimport { detectUsedTool, SupportedTools } from './utils/detect-tool';\nimport { configureNextJsSourceMapsUpload } from './tools/nextjs';\nimport { configureRemixSourceMapsUpload } from './tools/remix';\nimport { detectPackageManger } from '../utils/package-manager';\n\nexport async function runSourcemapsWizard(\n options: WizardOptions,\n): Promise<void> {\n return withTelemetry(\n {\n enabled: options.telemetryEnabled,\n integration: 'sourcemaps',\n },\n () => runSourcemapsWizardWithTelemetry(options),\n );\n}\n\nasync function runSourcemapsWizardWithTelemetry(\n options: WizardOptions,\n): Promise<void> {\n printWelcome({\n wizardName: 'Sentry Source Maps Upload Configuration Wizard',\n message: `This wizard will help you upload source maps to Sentry as part of your build.\nThank you for using Sentry :)${\n options.telemetryEnabled\n ? `\n\n(This setup wizard sends telemetry data and crash reports to Sentry.\nYou can turn this off by running the wizard with the '--disable-telemetry' flag.)`\n : ''\n }`,\n promoCode: options.promoCode,\n });\n\n const moreSuitableWizard = await traceStep(\n 'check-framework-wizard',\n checkIfMoreSuitableWizardExistsAndAskForRedirect,\n );\n if (moreSuitableWizard) {\n await traceStep('run-framework-wizard', () => moreSuitableWizard(options));\n return;\n }\n\n await traceStep('detect-git', confirmContinueEvenThoughNoGitRepo);\n\n await traceStep('check-sdk-version', ensureMinimumSdkVersionIsInstalled);\n\n const { selfHosted, selectedProject, sentryUrl, authToken } =\n await getOrAskForProjectData(options);\n\n const wizardOptionsWithPreSelectedProject = {\n ...options,\n preSelectedProject: {\n project: selectedProject,\n authToken,\n selfHosted,\n },\n };\n\n const selectedTool = await traceStep('select-tool', askForUsedBundlerTool);\n\n Sentry.setTag('selected-tool', selectedTool);\n\n if (selectedTool === 'no-tool') {\n clack.log.info(\n \"No Problem! But in this case, there's nothing to configure :)\",\n );\n await abort('Exiting, have a great day!', 0);\n return;\n }\n\n await traceStep('tool-setup', () =>\n startToolSetupFlow(\n selectedTool,\n {\n orgSlug: selectedProject.organization.slug,\n projectSlug: selectedProject.slug,\n selfHosted,\n url: sentryUrl,\n authToken,\n },\n wizardOptionsWithPreSelectedProject,\n ),\n );\n\n await traceStep('ci-setup', () => configureCI(selectedTool, authToken));\n\n traceStep('outro', () =>\n printOutro(\n sentryUrl,\n selectedProject.organization.slug,\n selectedProject.id,\n ),\n );\n}\n\nasync function askForUsedBundlerTool(): Promise<SupportedTools> {\n const selectedTool = await abortIfCancelled(\n clack.select({\n message: 'Which framework, bundler or build tool are you using?',\n options: [\n {\n label: 'Angular',\n value: 'angular',\n hint: 'Select this option if you are using Angular.',\n },\n {\n label: 'Create React App',\n value: 'create-react-app',\n hint: 'Select this option if you set up your app with Create React App.',\n },\n {\n label: 'Next.js',\n value: 'nextjs',\n hint: 'Select this option if you want to set up source maps in a NextJS project.',\n },\n {\n label: 'Remix',\n value: 'remix',\n hint: 'Select this option if you want to set up source maps in a Remix project.',\n },\n {\n label: 'Webpack',\n value: 'webpack',\n hint: 'Select this if you are using Webpack and you have access to your Webpack config.',\n },\n {\n label: 'Vite',\n value: 'vite',\n hint: 'Select this if you are using Vite and you have access to your Vite config.',\n },\n {\n label: 'esbuild',\n value: 'esbuild',\n hint: 'Select this if you are using esbuild and you have access to your esbuild config.',\n },\n {\n label: 'Rollup',\n value: 'rollup',\n hint: 'Select this if you are using Rollup and you have access to your Rollup config.',\n },\n {\n label: 'tsc',\n value: 'tsc',\n hint: 'Configure source maps when using tsc as build tool',\n },\n {\n label: 'I use another tool',\n value: 'sentry-cli',\n hint: 'This will configure source maps upload for you using sentry-cli',\n },\n {\n label: \"I don't minify, transpile or bundle my code\",\n value: 'no-tool',\n hint: 'This will exit the wizard',\n },\n ],\n initialValue: await detectUsedTool(),\n }),\n );\n\n return selectedTool;\n}\n\nasync function startToolSetupFlow(\n selctedTool: SupportedTools,\n options: SourceMapUploadToolConfigurationOptions,\n wizardOptions: WizardOptions,\n): Promise<void> {\n switch (selctedTool) {\n case 'webpack':\n await configureWebPackPlugin(options);\n break;\n case 'vite':\n await configureVitePlugin(options);\n break;\n case 'esbuild':\n await configureEsbuildPlugin(options);\n break;\n case 'rollup':\n await configureRollupPlugin(options);\n break;\n case 'tsc':\n await configureSentryCLI(options, configureTscSourcemapGenerationFlow);\n break;\n case 'create-react-app':\n await configureSentryCLI(options, configureCRASourcemapGenerationFlow);\n break;\n case 'angular':\n await configureSentryCLI(\n options,\n configureAngularSourcemapGenerationFlow,\n );\n break;\n case 'nextjs':\n await configureNextJsSourceMapsUpload(options, wizardOptions);\n break;\n case 'remix':\n await configureRemixSourceMapsUpload(options, wizardOptions);\n break;\n default:\n await configureSentryCLI(options);\n break;\n }\n}\n\nasync function configureCI(\n selectedTool: SupportedTools,\n authToken: string,\n): Promise<void> {\n const isUsingCI = await abortIfCancelled(\n clack.select({\n message: `Are you using a CI/CD tool to build and deploy your application?`,\n options: [\n {\n label: 'Yes',\n hint: 'I use a tool like Github Actions, Gitlab, CircleCI, TravisCI, Jenkins, ...',\n value: true,\n },\n {\n label: 'No',\n hint: 'I build and deploy my application manually',\n value: false,\n },\n ],\n initialValue: true,\n }),\n );\n\n Sentry.setTag('using-ci', isUsingCI);\n\n const isCliBasedFlowTool = [\n 'sentry-cli',\n 'tsc',\n 'angular',\n 'create-react-app',\n ].includes(selectedTool);\n\n // some non-cli-based flows also use the .sentryclirc file\n const usesSentryCliRc = selectedTool === 'nextjs';\n\n const authTokenFile =\n isCliBasedFlowTool || usesSentryCliRc\n ? SENTRY_CLI_RC_FILE\n : SENTRY_DOT_ENV_FILE;\n\n if (!isUsingCI) {\n clack.log.info(\n `No Problem! Just make sure that the Sentry auth token from ${chalk.cyan(\n authTokenFile,\n )} is available whenever you build and deploy your app.`,\n );\n return;\n }\n\n if (isCliBasedFlowTool) {\n await traceStep('ci-npm-script-setup', setupNpmScriptInCI);\n }\n\n await traceStep('ci-auth-token-setup', () => setupAuthTokenInCI(authToken));\n}\n\nasync function setupAuthTokenInCI(authToken: string) {\n clack.log.step(\n 'Add the Sentry authentication token as an environment variable to your CI setup:',\n );\n\n // Intentially logging directly to console here so that the code can be copied/pasted directly\n // eslint-disable-next-line no-console\n console.log(\n chalk.greenBright(`\nSENTRY_AUTH_TOKEN=${authToken}\n`),\n );\n\n clack.log.warn(\n chalk.yellow('DO NOT commit this auth token to your repository!'),\n );\n\n const addedEnvVarToCI = await abortIfCancelled(\n clack.select({\n message: 'Did you configure CI as shown above?',\n options: [\n { label: 'Yes, continue!', value: true },\n {\n label: \"I'll do it later...\",\n value: false,\n hint: chalk.yellow(\n 'You need to set the auth token to upload source maps in CI',\n ),\n },\n ],\n initialValue: true,\n }),\n );\n\n Sentry.setTag('added-env-var-to-ci', addedEnvVarToCI);\n\n if (!addedEnvVarToCI) {\n clack.log.info(\"Don't forget! :)\");\n }\n}\n\nfunction printOutro(url: string, orgSlug: string, projectId: string) {\n const packageManager = detectPackageManger();\n const buildCommand = packageManager?.buildCommand ?? 'npm run build';\n\n const urlObject = new URL(url);\n urlObject.host = `${orgSlug}.${urlObject.host}`;\n urlObject.pathname = '/issues/';\n urlObject.searchParams.set('project', projectId);\n\n const issueStreamUrl = urlObject.toString();\n\n const arrow = isUnicodeSupported() ? '→' : '->';\n\n clack.outro(`${chalk.green(\"That's it - everything is set up!\")}\n\n ${chalk.cyan(`Test and validate your setup locally with the following Steps:\n\n 1. Build your application in ${chalk.bold('production mode')}.\n ${chalk.gray(`${arrow} For example, run ${chalk.bold(buildCommand)}.`)}\n ${chalk.gray(\n `${arrow} You should see source map upload logs in your console.`,\n )}\n 2. Run your application and throw a test error.\n ${chalk.gray(`${arrow} The error should appear in Sentry:`)}\n ${chalk.gray(`${arrow} ${issueStreamUrl}`)}\n 3. Open the error in Sentry and verify that it's source-mapped.\n ${chalk.gray(\n `${arrow} The stack trace should show your original source code.`,\n )}\n `)}\n ${chalk.dim(\n `If you encounter any issues, please refer to the Troubleshooting Guide:\n https://docs.sentry.io/platforms/javascript/sourcemaps/troubleshooting_js\n\n If the guide doesn't help or you encounter a bug, please let us know:\n https://github.com/getsentry/sentry-javascript/issues`,\n )}\n`);\n}\n"]}
@@ -119,7 +119,7 @@ var configureNextJsSourceMapsUpload = function (options, wizardOptions) { return
119
119
  case 4:
120
120
  _a.sent();
121
121
  return [4 /*yield*/, (0, telemetry_1.traceStep)('nextjs-manual-sentryclirc', function () {
122
- return (0, clack_utils_1.addSentryCliRc)(options.authToken);
122
+ return (0, clack_utils_1.addSentryCliConfig)(options.authToken);
123
123
  })];
124
124
  case 5:
125
125
  _a.sent();
@@ -1 +1 @@
1
- {"version":3,"file":"nextjs.js","sourceRoot":"","sources":["../../../../src/sourcemaps/tools/nextjs.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,yEAAyE;AACzE,oDAAwC;AACxC,gDAA0B;AAC1B,4DAA6D;AAC7D,6CAA4C;AAC5C,uDAA2E;AAK3E,mDAAuC;AAEvC,IAAM,cAAc,GAAG,UAAC,OAAgD;IACtE,OAAA,eAAK,CAAC,IAAI,CAAC,cACT,eAAK,CAAC,WAAW,CACjB,yDAAyD,CAC1D,uFAMC,eAAK,CAAC,WAAW,CAAC,2DACV,OAAO,CAAC,OAAO,iCACX,OAAO,CAAC,WAAW,gBAC/B,OAAO,CAAC,UAAU,CAAC,CAAC,CAAC,uBAAe,OAAO,CAAC,GAAG,QAAI,CAAC,CAAC,CAAC,EAAE,WAEvD,CAAC,qBAEF,eAAK,CAAC,WAAW,CAAC,qNAMjB,CAAC,qBAEF,eAAK,CAAC,WAAW,CAAC,+GAIjB,CAAC,SACL,CAAC;AA7BA,CA6BA,CAAC;AAEI,IAAM,+BAA+B,GAAG,UAC7C,OAAgD,EAChD,aAA4B;;;;;gBAE5B,KAAK,CAAC,GAAG;qBACN,IAAI,CAAC,uQAGyE,eAAK,CAAC,IAAI,CACzF,gBAAgB,CACjB,4BAAyB,CAAC,CAAC;gBAEI,qBAAM,IAAA,8BAAgB,EACpD,KAAK,CAAC,MAAM,CAAC;wBACX,OAAO,EAAE,uDAAuD;wBAChE,OAAO,EAAE;4BACP;gCACE,KAAK,EAAE,sBAAsB;gCAC7B,KAAK,EAAE,IAAI;gCACX,IAAI,EAAE,8CAA8C;6BACrD;4BACD;gCACE,KAAK,EAAE,0CAA0C;gCACjD,KAAK,EAAE,KAAK;6BACb;yBACF;qBACF,CAAC,CACH,EAAA;;gBAfK,cAAc,GAAY,SAe/B;gBAED,MAAM,CAAC,MAAM,CAAC,wBAAwB,EAAE,cAAc,CAAC,CAAC;qBAEpD,cAAc,EAAd,wBAAc;gBAChB,qBAAM,IAAA,qBAAS,EAAC,mBAAmB,EAAE,cAAM,OAAA,IAAA,+BAAe,EAAC,aAAa,CAAC,EAA9B,CAA8B,CAAC,EAAA;;gBAA1E,SAA0E,CAAC;gBAC3E,KAAK,CAAC,KAAK,CAAC,gDAAgD,CAAC,CAAC;gBAC9D,KAAK,CAAC,GAAG,CAAC,IAAI,CACZ,+DAA+D,CAChE,CAAC;;;gBAEF,KAAK,CAAC,GAAG,CAAC,IAAI,CACZ,yCAAkC,eAAK,CAAC,IAAI,CAAC,gBAAgB,CAAC,MAAG,CAClE,CAAC;gBAEF,iDAAiD;gBACjD,sCAAsC;gBACtC,OAAO,CAAC,GAAG,CAAC,cAAc,CAAC,OAAO,CAAC,CAAC,CAAC;gBAErC,qBAAM,IAAA,qBAAS,EAAC,4BAA4B,EAAE;wBAC5C,OAAA,IAAA,8BAAgB,EACd,KAAK,CAAC,MAAM,CAAC;4BACX,OAAO,EAAE,8BAA8B;4BACvC,OAAO,EAAE,CAAC,EAAE,KAAK,EAAE,gBAAgB,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC;4BACnD,YAAY,EAAE,IAAI;yBACnB,CAAC,CACH;oBAND,CAMC,CACF,EAAA;;gBARD,SAQC,CAAC;gBAEF,qBAAM,IAAA,qBAAS,EAAC,2BAA2B,EAAE;wBAC3C,OAAA,IAAA,4BAAc,EAAC,OAAO,CAAC,SAAS,CAAC;oBAAjC,CAAiC,CAClC,EAAA;;gBAFD,SAEC,CAAC;;;gBAGJ,KAAK,CAAC,GAAG;qBACN,IAAI,CAAC,6TAMiE,CAAC,CAAC;;;;KAC5E,CAAC;AArEW,QAAA,+BAA+B,mCAqE1C","sourcesContent":["// @ts-ignore - clack is ESM and TS complains about that. It works though\nimport * as clack from '@clack/prompts';\nimport chalk from 'chalk';\nimport { runNextjsWizard } from '../../nextjs/nextjs-wizard';\nimport { traceStep } from '../../telemetry';\nimport { abortIfCancelled, addSentryCliRc } from '../../utils/clack-utils';\nimport { WizardOptions } from '../../utils/types';\n\nimport { SourceMapUploadToolConfigurationOptions } from './types';\n\nimport * as Sentry from '@sentry/node';\n\nconst getCodeSnippet = (options: SourceMapUploadToolConfigurationOptions) =>\n chalk.grey(`\n ${chalk.greenBright(\n 'const { withSentryConfig } = require(\"@sentry/nextjs\");',\n )}\n\n const nextConfig = {\n // your existing next config\n };\n \n ${chalk.greenBright(`const sentryWebpackPluginOptions = {\n org: \"${options.orgSlug}\",\n project: \"${options.projectSlug}\",${\n options.selfHosted ? `\\n url: \"${options.url}\",` : ''\n }\n };`)}\n \n ${chalk.greenBright(`const sentryOptions = {\n // Upload additional client files (increases upload size)\n widenClientFileUpload: true,\n\n // Hides source maps from generated client bundles\n hideSourceMaps: true,\n };`)}\n \n ${chalk.greenBright(`module.exports = withSentryConfig(\n nextConfig,\n sentryWebpackPluginOptions,\n sentryOptions\n );`)} \n`);\n\nexport const configureNextJsSourceMapsUpload = async (\n options: SourceMapUploadToolConfigurationOptions,\n wizardOptions: WizardOptions,\n) => {\n clack.log\n .info(`Source Maps upload for Next.js is configured automatically by default if you run the Sentry Wizard for Next.JS.\nBut don't worry, we can redirect you to the wizard now!\n\nIn case you already tried the wizard, we can also show you how to configure your ${chalk.cyan(\n 'next.config.js',\n )} file manually instead.`);\n\n const shouldRedirect: boolean = await abortIfCancelled(\n clack.select({\n message: 'Do you want to run the Sentry Wizard for Next.JS now?',\n options: [\n {\n label: 'Yes, run the wizard!',\n value: true,\n hint: 'The wizard can also configure your SDK setup',\n },\n {\n label: 'No, show me how to configure it manually',\n value: false,\n },\n ],\n }),\n );\n\n Sentry.setTag('redirect-nextjs-wizard', shouldRedirect);\n\n if (shouldRedirect) {\n await traceStep('run-nextjs-wizard', () => runNextjsWizard(wizardOptions));\n clack.intro('Sentry Source Maps Upload Configuration Wizard');\n clack.log.info(\n \"Welcome back to the Source Maps wizard - we're almost done ;)\",\n );\n } else {\n clack.log.info(\n `Add the following code to your ${chalk.cyan('next.config.js')}:`,\n );\n\n // Intentionally logging directly to console here\n // eslint-disable-next-line no-console\n console.log(getCodeSnippet(options));\n\n await traceStep('nextjs-manual-nextconfigjs', () =>\n abortIfCancelled(\n clack.select({\n message: 'Did you copy the code above?',\n options: [{ label: 'Yes, continue!', value: true }],\n initialValue: true,\n }),\n ),\n );\n\n await traceStep('nextjs-manual-sentryclirc', () =>\n addSentryCliRc(options.authToken),\n );\n }\n\n clack.log\n .info(`In case you still run into problems, check out our docs to further debug your setup:\n\nUploading Source Maps:\nhttps://docs.sentry.io/platforms/javascript/guides/nextjs/manual-setup/#configure-source-maps\n \nTroubleshooting Source Maps:\nhttps://docs.sentry.io/platforms/javascript/guides/nextjs/troubleshooting/`);\n};\n"]}
1
+ {"version":3,"file":"nextjs.js","sourceRoot":"","sources":["../../../../src/sourcemaps/tools/nextjs.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,yEAAyE;AACzE,oDAAwC;AACxC,gDAA0B;AAC1B,4DAA6D;AAC7D,6CAA4C;AAC5C,uDAA+E;AAK/E,mDAAuC;AAEvC,IAAM,cAAc,GAAG,UAAC,OAAgD;IACtE,OAAA,eAAK,CAAC,IAAI,CAAC,cACT,eAAK,CAAC,WAAW,CACjB,yDAAyD,CAC1D,uFAMC,eAAK,CAAC,WAAW,CAAC,2DACV,OAAO,CAAC,OAAO,iCACX,OAAO,CAAC,WAAW,gBAC/B,OAAO,CAAC,UAAU,CAAC,CAAC,CAAC,uBAAe,OAAO,CAAC,GAAG,QAAI,CAAC,CAAC,CAAC,EAAE,WAEvD,CAAC,qBAEF,eAAK,CAAC,WAAW,CAAC,qNAMjB,CAAC,qBAEF,eAAK,CAAC,WAAW,CAAC,+GAIjB,CAAC,SACL,CAAC;AA7BA,CA6BA,CAAC;AAEI,IAAM,+BAA+B,GAAG,UAC7C,OAAgD,EAChD,aAA4B;;;;;gBAE5B,KAAK,CAAC,GAAG;qBACN,IAAI,CAAC,uQAGyE,eAAK,CAAC,IAAI,CACzF,gBAAgB,CACjB,4BAAyB,CAAC,CAAC;gBAEI,qBAAM,IAAA,8BAAgB,EACpD,KAAK,CAAC,MAAM,CAAC;wBACX,OAAO,EAAE,uDAAuD;wBAChE,OAAO,EAAE;4BACP;gCACE,KAAK,EAAE,sBAAsB;gCAC7B,KAAK,EAAE,IAAI;gCACX,IAAI,EAAE,8CAA8C;6BACrD;4BACD;gCACE,KAAK,EAAE,0CAA0C;gCACjD,KAAK,EAAE,KAAK;6BACb;yBACF;qBACF,CAAC,CACH,EAAA;;gBAfK,cAAc,GAAY,SAe/B;gBAED,MAAM,CAAC,MAAM,CAAC,wBAAwB,EAAE,cAAc,CAAC,CAAC;qBAEpD,cAAc,EAAd,wBAAc;gBAChB,qBAAM,IAAA,qBAAS,EAAC,mBAAmB,EAAE,cAAM,OAAA,IAAA,+BAAe,EAAC,aAAa,CAAC,EAA9B,CAA8B,CAAC,EAAA;;gBAA1E,SAA0E,CAAC;gBAC3E,KAAK,CAAC,KAAK,CAAC,gDAAgD,CAAC,CAAC;gBAC9D,KAAK,CAAC,GAAG,CAAC,IAAI,CACZ,+DAA+D,CAChE,CAAC;;;gBAEF,KAAK,CAAC,GAAG,CAAC,IAAI,CACZ,yCAAkC,eAAK,CAAC,IAAI,CAAC,gBAAgB,CAAC,MAAG,CAClE,CAAC;gBAEF,iDAAiD;gBACjD,sCAAsC;gBACtC,OAAO,CAAC,GAAG,CAAC,cAAc,CAAC,OAAO,CAAC,CAAC,CAAC;gBAErC,qBAAM,IAAA,qBAAS,EAAC,4BAA4B,EAAE;wBAC5C,OAAA,IAAA,8BAAgB,EACd,KAAK,CAAC,MAAM,CAAC;4BACX,OAAO,EAAE,8BAA8B;4BACvC,OAAO,EAAE,CAAC,EAAE,KAAK,EAAE,gBAAgB,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC;4BACnD,YAAY,EAAE,IAAI;yBACnB,CAAC,CACH;oBAND,CAMC,CACF,EAAA;;gBARD,SAQC,CAAC;gBAEF,qBAAM,IAAA,qBAAS,EAAC,2BAA2B,EAAE;wBAC3C,OAAA,IAAA,gCAAkB,EAAC,OAAO,CAAC,SAAS,CAAC;oBAArC,CAAqC,CACtC,EAAA;;gBAFD,SAEC,CAAC;;;gBAGJ,KAAK,CAAC,GAAG;qBACN,IAAI,CAAC,6TAMiE,CAAC,CAAC;;;;KAC5E,CAAC;AArEW,QAAA,+BAA+B,mCAqE1C","sourcesContent":["// @ts-ignore - clack is ESM and TS complains about that. It works though\nimport * as clack from '@clack/prompts';\nimport chalk from 'chalk';\nimport { runNextjsWizard } from '../../nextjs/nextjs-wizard';\nimport { traceStep } from '../../telemetry';\nimport { abortIfCancelled, addSentryCliConfig } from '../../utils/clack-utils';\nimport { WizardOptions } from '../../utils/types';\n\nimport { SourceMapUploadToolConfigurationOptions } from './types';\n\nimport * as Sentry from '@sentry/node';\n\nconst getCodeSnippet = (options: SourceMapUploadToolConfigurationOptions) =>\n chalk.grey(`\n ${chalk.greenBright(\n 'const { withSentryConfig } = require(\"@sentry/nextjs\");',\n )}\n\n const nextConfig = {\n // your existing next config\n };\n \n ${chalk.greenBright(`const sentryWebpackPluginOptions = {\n org: \"${options.orgSlug}\",\n project: \"${options.projectSlug}\",${\n options.selfHosted ? `\\n url: \"${options.url}\",` : ''\n }\n };`)}\n \n ${chalk.greenBright(`const sentryOptions = {\n // Upload additional client files (increases upload size)\n widenClientFileUpload: true,\n\n // Hides source maps from generated client bundles\n hideSourceMaps: true,\n };`)}\n \n ${chalk.greenBright(`module.exports = withSentryConfig(\n nextConfig,\n sentryWebpackPluginOptions,\n sentryOptions\n );`)} \n`);\n\nexport const configureNextJsSourceMapsUpload = async (\n options: SourceMapUploadToolConfigurationOptions,\n wizardOptions: WizardOptions,\n) => {\n clack.log\n .info(`Source Maps upload for Next.js is configured automatically by default if you run the Sentry Wizard for Next.JS.\nBut don't worry, we can redirect you to the wizard now!\n\nIn case you already tried the wizard, we can also show you how to configure your ${chalk.cyan(\n 'next.config.js',\n )} file manually instead.`);\n\n const shouldRedirect: boolean = await abortIfCancelled(\n clack.select({\n message: 'Do you want to run the Sentry Wizard for Next.JS now?',\n options: [\n {\n label: 'Yes, run the wizard!',\n value: true,\n hint: 'The wizard can also configure your SDK setup',\n },\n {\n label: 'No, show me how to configure it manually',\n value: false,\n },\n ],\n }),\n );\n\n Sentry.setTag('redirect-nextjs-wizard', shouldRedirect);\n\n if (shouldRedirect) {\n await traceStep('run-nextjs-wizard', () => runNextjsWizard(wizardOptions));\n clack.intro('Sentry Source Maps Upload Configuration Wizard');\n clack.log.info(\n \"Welcome back to the Source Maps wizard - we're almost done ;)\",\n );\n } else {\n clack.log.info(\n `Add the following code to your ${chalk.cyan('next.config.js')}:`,\n );\n\n // Intentionally logging directly to console here\n // eslint-disable-next-line no-console\n console.log(getCodeSnippet(options));\n\n await traceStep('nextjs-manual-nextconfigjs', () =>\n abortIfCancelled(\n clack.select({\n message: 'Did you copy the code above?',\n options: [{ label: 'Yes, continue!', value: true }],\n initialValue: true,\n }),\n ),\n );\n\n await traceStep('nextjs-manual-sentryclirc', () =>\n addSentryCliConfig(options.authToken),\n );\n }\n\n clack.log\n .info(`In case you still run into problems, check out our docs to further debug your setup:\n\nUploading Source Maps:\nhttps://docs.sentry.io/platforms/javascript/guides/nextjs/manual-setup/#configure-source-maps\n \nTroubleshooting Source Maps:\nhttps://docs.sentry.io/platforms/javascript/guides/nextjs/troubleshooting/`);\n};\n"]}
@@ -0,0 +1,3 @@
1
+ import { WizardOptions } from '../../utils/types';
2
+ import { SourceMapUploadToolConfigurationOptions } from './types';
3
+ export declare const configureRemixSourceMapsUpload: (options: SourceMapUploadToolConfigurationOptions, wizardOptions: WizardOptions) => Promise<void>;
@@ -0,0 +1,125 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || function (mod) {
19
+ if (mod && mod.__esModule) return mod;
20
+ var result = {};
21
+ if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
22
+ __setModuleDefault(result, mod);
23
+ return result;
24
+ };
25
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
26
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
27
+ return new (P || (P = Promise))(function (resolve, reject) {
28
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
29
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
30
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
31
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
32
+ });
33
+ };
34
+ var __generator = (this && this.__generator) || function (thisArg, body) {
35
+ var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;
36
+ return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
37
+ function verb(n) { return function (v) { return step([n, v]); }; }
38
+ function step(op) {
39
+ if (f) throw new TypeError("Generator is already executing.");
40
+ while (g && (g = 0, op[0] && (_ = 0)), _) try {
41
+ if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;
42
+ if (y = 0, t) op = [op[0] & 2, t.value];
43
+ switch (op[0]) {
44
+ case 0: case 1: t = op; break;
45
+ case 4: _.label++; return { value: op[1], done: false };
46
+ case 5: _.label++; y = op[1]; op = [0]; continue;
47
+ case 7: op = _.ops.pop(); _.trys.pop(); continue;
48
+ default:
49
+ if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }
50
+ if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }
51
+ if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }
52
+ if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }
53
+ if (t[2]) _.ops.pop();
54
+ _.trys.pop(); continue;
55
+ }
56
+ op = body.call(thisArg, _);
57
+ } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }
58
+ if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
59
+ }
60
+ };
61
+ var __importDefault = (this && this.__importDefault) || function (mod) {
62
+ return (mod && mod.__esModule) ? mod : { "default": mod };
63
+ };
64
+ Object.defineProperty(exports, "__esModule", { value: true });
65
+ exports.configureRemixSourceMapsUpload = void 0;
66
+ // @ts-ignore - clack is ESM and TS complains about that. It works though
67
+ var clack = __importStar(require("@clack/prompts"));
68
+ var chalk_1 = __importDefault(require("chalk"));
69
+ var remix_wizard_1 = require("../../remix/remix-wizard");
70
+ var telemetry_1 = require("../../telemetry");
71
+ var clack_utils_1 = require("../../utils/clack-utils");
72
+ var Sentry = __importStar(require("@sentry/node"));
73
+ var configureRemixSourceMapsUpload = function (options, wizardOptions) { return __awaiter(void 0, void 0, void 0, function () {
74
+ var shouldRedirect;
75
+ return __generator(this, function (_a) {
76
+ switch (_a.label) {
77
+ case 0:
78
+ clack.log
79
+ .info("Source Maps upload for Remix is configured automatically by default if you run the Sentry Wizard for Remix.\nBut don't worry, we can redirect you to the wizard now!\nIn case you already tried the wizard, we can also show you how to configure your ".concat(chalk_1.default.cyan('remix.config.js'), " file manually instead."));
80
+ return [4 /*yield*/, (0, clack_utils_1.abortIfCancelled)(clack.select({
81
+ message: 'Do you want to run the Sentry Wizard for Remix now?',
82
+ options: [
83
+ {
84
+ label: 'Yes, run the wizard!',
85
+ value: true,
86
+ hint: 'The wizard can also configure your SDK setup',
87
+ },
88
+ {
89
+ label: 'No, show me how to configure it manually',
90
+ value: false,
91
+ },
92
+ ],
93
+ }))];
94
+ case 1:
95
+ shouldRedirect = _a.sent();
96
+ Sentry.setTag('redirect-remix-wizard', shouldRedirect);
97
+ if (!shouldRedirect) return [3 /*break*/, 3];
98
+ return [4 /*yield*/, (0, telemetry_1.traceStep)('run-remix-wizard', function () { return (0, remix_wizard_1.runRemixWizard)(wizardOptions); })];
99
+ case 2:
100
+ _a.sent();
101
+ clack.intro('Sentry Source Maps Upload Configuration Wizard');
102
+ clack.log.info("Welcome back to the Source Maps wizard - we're almost done ;)");
103
+ return [3 /*break*/, 5];
104
+ case 3:
105
+ clack.log.step("Build your app with ".concat(chalk_1.default.cyan('remix build --sourcemap'), ", then upload your source maps using ").concat(chalk_1.default.cyan('sentry-upload-sourcemaps'), " cli tool."));
106
+ clack.log.step("You can add ".concat(chalk_1.default.cyan('sentry-upload-sourcemaps'), " to your build script in ").concat(chalk_1.default.cyan('package.json'), " like this:"));
107
+ // Intentially logging directly to console here so that the code can be copied/pasted directly
108
+ // eslint-disable-next-line no-console
109
+ console.log(codeSnippet);
110
+ clack.log.step("or run it manually after building your app.\n\nTo see all available options for ".concat(chalk_1.default.cyan('sentry-upload-sourcemaps'), ", run ").concat(chalk_1.default.cyan('sentry-upload-sourcemaps --help'), "\n"));
111
+ return [4 /*yield*/, (0, clack_utils_1.abortIfCancelled)(clack.select({
112
+ message: 'Did you finish configuring your build and prod scripts?',
113
+ options: [{ label: 'Yes, continue!', value: true }],
114
+ initialValue: true,
115
+ }))];
116
+ case 4:
117
+ _a.sent();
118
+ _a.label = 5;
119
+ case 5: return [2 /*return*/];
120
+ }
121
+ });
122
+ }); };
123
+ exports.configureRemixSourceMapsUpload = configureRemixSourceMapsUpload;
124
+ var codeSnippet = chalk_1.default.gray("\n\"scripts\": {\n ".concat(chalk_1.default.greenBright('"build": "remix build --sourcemap && sentry-upload-sourcemaps"'), ";\n}\n"));
125
+ //# sourceMappingURL=remix.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"remix.js","sourceRoot":"","sources":["../../../../src/sourcemaps/tools/remix.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,yEAAyE;AACzE,oDAAwC;AACxC,gDAA0B;AAC1B,yDAA0D;AAC1D,6CAA4C;AAC5C,uDAA2D;AAI3D,mDAAuC;AAEhC,IAAM,8BAA8B,GAAG,UAC5C,OAAgD,EAChD,aAA4B;;;;;gBAE5B,KAAK,CAAC,GAAG;qBACN,IAAI,CAAC,iQAEyE,eAAK,CAAC,IAAI,CACzF,iBAAiB,CAClB,4BAAyB,CAAC,CAAC;gBAEI,qBAAM,IAAA,8BAAgB,EACpD,KAAK,CAAC,MAAM,CAAC;wBACX,OAAO,EAAE,qDAAqD;wBAC9D,OAAO,EAAE;4BACP;gCACE,KAAK,EAAE,sBAAsB;gCAC7B,KAAK,EAAE,IAAI;gCACX,IAAI,EAAE,8CAA8C;6BACrD;4BACD;gCACE,KAAK,EAAE,0CAA0C;gCACjD,KAAK,EAAE,KAAK;6BACb;yBACF;qBACF,CAAC,CACH,EAAA;;gBAfK,cAAc,GAAY,SAe/B;gBAED,MAAM,CAAC,MAAM,CAAC,uBAAuB,EAAE,cAAc,CAAC,CAAC;qBAEnD,cAAc,EAAd,wBAAc;gBAChB,qBAAM,IAAA,qBAAS,EAAC,kBAAkB,EAAE,cAAM,OAAA,IAAA,6BAAc,EAAC,aAAa,CAAC,EAA7B,CAA6B,CAAC,EAAA;;gBAAxE,SAAwE,CAAC;gBACzE,KAAK,CAAC,KAAK,CAAC,gDAAgD,CAAC,CAAC;gBAC9D,KAAK,CAAC,GAAG,CAAC,IAAI,CACZ,+DAA+D,CAChE,CAAC;;;gBAEF,KAAK,CAAC,GAAG,CAAC,IAAI,CACZ,8BAAuB,eAAK,CAAC,IAAI,CAC/B,yBAAyB,CAC1B,kDAAwC,eAAK,CAAC,IAAI,CACjD,0BAA0B,CAC3B,eAAY,CACd,CAAC;gBAEF,KAAK,CAAC,GAAG,CAAC,IAAI,CACZ,sBAAe,eAAK,CAAC,IAAI,CACvB,0BAA0B,CAC3B,sCAA4B,eAAK,CAAC,IAAI,CAAC,cAAc,CAAC,gBAAa,CACrE,CAAC;gBAEF,8FAA8F;gBAC9F,sCAAsC;gBACtC,OAAO,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC;gBAEzB,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,0FAEgB,eAAK,CAAC,IAAI,CACvC,0BAA0B,CAC3B,mBAAS,eAAK,CAAC,IAAI,CAAC,iCAAiC,CAAC,OAC1D,CAAC,CAAC;gBAEC,qBAAM,IAAA,8BAAgB,EACpB,KAAK,CAAC,MAAM,CAAC;wBACX,OAAO,EAAE,yDAAyD;wBAClE,OAAO,EAAE,CAAC,EAAE,KAAK,EAAE,gBAAgB,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC;wBACnD,YAAY,EAAE,IAAI;qBACnB,CAAC,CACH,EAAA;;gBAND,SAMC,CAAC;;;;;KAEL,CAAC;AAtEW,QAAA,8BAA8B,kCAsEzC;AAEF,IAAM,WAAW,GAAG,eAAK,CAAC,IAAI,CAAC,8BAE3B,eAAK,CAAC,WAAW,CACjB,gEAAgE,CACjE,WAEF,CAAC,CAAC","sourcesContent":["// @ts-ignore - clack is ESM and TS complains about that. It works though\nimport * as clack from '@clack/prompts';\nimport chalk from 'chalk';\nimport { runRemixWizard } from '../../remix/remix-wizard';\nimport { traceStep } from '../../telemetry';\nimport { abortIfCancelled } from '../../utils/clack-utils';\nimport { WizardOptions } from '../../utils/types';\nimport { SourceMapUploadToolConfigurationOptions } from './types';\n\nimport * as Sentry from '@sentry/node';\n\nexport const configureRemixSourceMapsUpload = async (\n options: SourceMapUploadToolConfigurationOptions,\n wizardOptions: WizardOptions,\n) => {\n clack.log\n .info(`Source Maps upload for Remix is configured automatically by default if you run the Sentry Wizard for Remix.\nBut don't worry, we can redirect you to the wizard now!\nIn case you already tried the wizard, we can also show you how to configure your ${chalk.cyan(\n 'remix.config.js',\n )} file manually instead.`);\n\n const shouldRedirect: boolean = await abortIfCancelled(\n clack.select({\n message: 'Do you want to run the Sentry Wizard for Remix now?',\n options: [\n {\n label: 'Yes, run the wizard!',\n value: true,\n hint: 'The wizard can also configure your SDK setup',\n },\n {\n label: 'No, show me how to configure it manually',\n value: false,\n },\n ],\n }),\n );\n\n Sentry.setTag('redirect-remix-wizard', shouldRedirect);\n\n if (shouldRedirect) {\n await traceStep('run-remix-wizard', () => runRemixWizard(wizardOptions));\n clack.intro('Sentry Source Maps Upload Configuration Wizard');\n clack.log.info(\n \"Welcome back to the Source Maps wizard - we're almost done ;)\",\n );\n } else {\n clack.log.step(\n `Build your app with ${chalk.cyan(\n 'remix build --sourcemap',\n )}, then upload your source maps using ${chalk.cyan(\n 'sentry-upload-sourcemaps',\n )} cli tool.`,\n );\n\n clack.log.step(\n `You can add ${chalk.cyan(\n 'sentry-upload-sourcemaps',\n )} to your build script in ${chalk.cyan('package.json')} like this:`,\n );\n\n // Intentially logging directly to console here so that the code can be copied/pasted directly\n // eslint-disable-next-line no-console\n console.log(codeSnippet);\n\n clack.log.step(`or run it manually after building your app.\n\nTo see all available options for ${chalk.cyan(\n 'sentry-upload-sourcemaps',\n )}, run ${chalk.cyan('sentry-upload-sourcemaps --help')}\n`);\n\n await abortIfCancelled(\n clack.select({\n message: 'Did you finish configuring your build and prod scripts?',\n options: [{ label: 'Yes, continue!', value: true }],\n initialValue: true,\n }),\n );\n }\n};\n\nconst codeSnippet = chalk.gray(`\n\"scripts\": {\n ${chalk.greenBright(\n '\"build\": \"remix build --sourcemap && sentry-upload-sourcemaps\"',\n )};\n}\n`);\n"]}
@@ -72,6 +72,7 @@ var fs = __importStar(require("fs"));
72
72
  var clack_utils_1 = require("../../utils/clack-utils");
73
73
  var package_json_1 = require("../../utils/package-json");
74
74
  var telemetry_1 = require("../../telemetry");
75
+ var package_manager_1 = require("../../utils/package-manager");
75
76
  var SENTRY_NPM_SCRIPT_NAME = 'sentry:sourcemaps';
76
77
  var addedToBuildCommand = false;
77
78
  function configureSentryCLI(options, configureSourcemapGenerationFlow) {
@@ -157,7 +158,7 @@ function configureSentryCLI(options, configureSourcemapGenerationFlow) {
157
158
  case 15:
158
159
  prompts_1.default.log.info("No problem, just make sure to run this script ".concat(chalk_1.default.bold('after'), " building your application but ").concat(chalk_1.default.bold('before'), " deploying!"));
159
160
  _b.label = 16;
160
- case 16: return [4 /*yield*/, (0, clack_utils_1.addSentryCliRc)(options.authToken)];
161
+ case 16: return [4 /*yield*/, (0, clack_utils_1.addSentryCliConfig)(options.authToken)];
161
162
  case 17:
162
163
  _b.sent();
163
164
  return [2 /*return*/];
@@ -252,32 +253,34 @@ function askShouldAddToBuildCommand() {
252
253
  * @param packageDotJson The package.json which will be modified.
253
254
  */
254
255
  function addSentryCommandToBuildCommand(packageDotJson) {
256
+ var _a;
255
257
  return __awaiter(this, void 0, void 0, function () {
256
- var allNpmScripts, pacMan, buildCommand, isProdBuildCommand, _a;
257
- return __generator(this, function (_b) {
258
- switch (_b.label) {
258
+ var allNpmScripts, packageManager, packageManagerName, buildCommand, isProdBuildCommand, _b;
259
+ return __generator(this, function (_c) {
260
+ switch (_c.label) {
259
261
  case 0:
260
262
  // This usually shouldn't happen because earlier we added the
261
263
  // SENTRY_NPM_SCRIPT_NAME script but just to be sure
262
264
  packageDotJson.scripts = packageDotJson.scripts || {};
263
265
  allNpmScripts = Object.keys(packageDotJson.scripts).filter(function (s) { return s !== SENTRY_NPM_SCRIPT_NAME; });
264
- pacMan = (0, clack_utils_1.detectPackageManager)() || 'npm';
266
+ packageManager = (0, package_manager_1.detectPackageManger)();
267
+ packageManagerName = (_a = packageManager === null || packageManager === void 0 ? void 0 : packageManager.name) !== null && _a !== void 0 ? _a : 'npm';
265
268
  buildCommand = typeof packageDotJson.scripts.build === 'string'
266
269
  ? 'build'
267
270
  : allNpmScripts.find(function (s) { return s.toLocaleLowerCase().includes('build'); });
268
- _a = !!buildCommand;
269
- if (!_a) return [3 /*break*/, 2];
271
+ _b = !!buildCommand;
272
+ if (!_b) return [3 /*break*/, 2];
270
273
  return [4 /*yield*/, (0, clack_utils_1.abortIfCancelled)(prompts_1.default.confirm({
271
- message: "Is ".concat(chalk_1.default.cyan("".concat(pacMan, " run ").concat(buildCommand)), " your production build command?"),
274
+ message: "Is ".concat(chalk_1.default.cyan("".concat(packageManagerName, " run ").concat(buildCommand)), " your production build command?"),
272
275
  }))];
273
276
  case 1:
274
- _a = (_b.sent());
275
- _b.label = 2;
277
+ _b = (_c.sent());
278
+ _c.label = 2;
276
279
  case 2:
277
- isProdBuildCommand = _a;
280
+ isProdBuildCommand = _b;
278
281
  if (!(allNpmScripts.length && (!buildCommand || !isProdBuildCommand))) return [3 /*break*/, 4];
279
282
  return [4 /*yield*/, (0, clack_utils_1.abortIfCancelled)(prompts_1.default.select({
280
- message: "Which ".concat(pacMan, " command in your ").concat(chalk_1.default.cyan('package.json'), " builds your application for production?"),
283
+ message: "Which ".concat(packageManagerName, " command in your ").concat(chalk_1.default.cyan('package.json'), " builds your application for production?"),
281
284
  options: allNpmScripts
282
285
  .map(function (script) { return ({
283
286
  label: script,
@@ -286,8 +289,8 @@ function addSentryCommandToBuildCommand(packageDotJson) {
286
289
  .concat({ label: 'None of the above', value: 'none' }),
287
290
  }))];
288
291
  case 3:
289
- buildCommand = _b.sent();
290
- _b.label = 4;
292
+ buildCommand = _c.sent();
293
+ _c.label = 4;
291
294
  case 4:
292
295
  if (!buildCommand || buildCommand === 'none') {
293
296
  prompts_1.default.log.warn("We can only add the ".concat(chalk_1.default.cyan(SENTRY_NPM_SCRIPT_NAME), " script to another `script` in your ").concat(chalk_1.default.cyan('package.json'), ".\nPlease add it manually to your prod build command."));
@@ -295,10 +298,10 @@ function addSentryCommandToBuildCommand(packageDotJson) {
295
298
  }
296
299
  packageDotJson.scripts[buildCommand
297
300
  // eslint-disable-next-line @typescript-eslint/restrict-template-expressions
298
- ] = "".concat(packageDotJson.scripts[buildCommand], " && ").concat(pacMan, " run ").concat(SENTRY_NPM_SCRIPT_NAME);
301
+ ] = "".concat(packageDotJson.scripts[buildCommand], " && ").concat(packageManager, " run ").concat(SENTRY_NPM_SCRIPT_NAME);
299
302
  return [4 /*yield*/, fs.promises.writeFile(path.join(process.cwd(), 'package.json'), JSON.stringify(packageDotJson, null, 2))];
300
303
  case 5:
301
- _b.sent();
304
+ _c.sent();
302
305
  addedToBuildCommand = true;
303
306
  prompts_1.default.log.info("Added ".concat(chalk_1.default.cyan(SENTRY_NPM_SCRIPT_NAME), " script to your ").concat(chalk_1.default.cyan(buildCommand), " command."));
304
307
  return [2 /*return*/];
@@ -1 +1 @@
1
- {"version":3,"file":"sentry-cli.js","sourceRoot":"","sources":["../../../../src/sourcemaps/tools/sentry-cli.ts"],"names":[],"mappings":"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","sourcesContent":["// @ts-ignore - clack is ESM and TS complains about that. It works though\nimport clack from '@clack/prompts';\nimport chalk from 'chalk';\nimport * as Sentry from '@sentry/node';\nimport * as path from 'path';\nimport * as fs from 'fs';\nimport {\n abortIfCancelled,\n addSentryCliRc,\n detectPackageManager,\n getPackageDotJson,\n installPackage,\n} from '../../utils/clack-utils';\n\nimport { SourceMapUploadToolConfigurationOptions } from './types';\nimport { hasPackageInstalled, PackageDotJson } from '../../utils/package-json';\nimport { traceStep } from '../../telemetry';\n\nconst SENTRY_NPM_SCRIPT_NAME = 'sentry:sourcemaps';\n\nlet addedToBuildCommand = false;\n\nexport async function configureSentryCLI(\n options: SourceMapUploadToolConfigurationOptions,\n configureSourcemapGenerationFlow: () => Promise<void> = defaultConfigureSourcemapGenerationFlow,\n): Promise<void> {\n const packageDotJson = await getPackageDotJson();\n\n await installPackage({\n packageName: '@sentry/cli',\n alreadyInstalled: hasPackageInstalled('@sentry/cli', packageDotJson),\n });\n\n let validPath = false;\n let relativeArtifactPath;\n do {\n const rawArtifactPath = await abortIfCancelled(\n clack.text({\n message: 'Where are your build artifacts located?',\n placeholder: `.${path.sep}out`,\n validate(value) {\n if (!value) {\n return 'Please enter a path.';\n }\n },\n }),\n );\n\n if (path.isAbsolute(rawArtifactPath)) {\n relativeArtifactPath = path.relative(process.cwd(), rawArtifactPath);\n } else {\n relativeArtifactPath = rawArtifactPath;\n }\n\n try {\n await fs.promises.access(path.join(process.cwd(), relativeArtifactPath));\n validPath = true;\n } catch {\n validPath = await abortIfCancelled(\n clack.select({\n message: `We couldn't find artifacts at ${relativeArtifactPath}. Are you sure that this is the location that contains your build artifacts?`,\n options: [\n {\n label: 'No, let me verify.',\n value: false,\n },\n { label: 'Yes, I am sure!', value: true },\n ],\n initialValue: false,\n }),\n );\n }\n } while (!validPath);\n\n const relativePosixArtifactPath = relativeArtifactPath\n .split(path.sep)\n .join(path.posix.sep);\n\n await configureSourcemapGenerationFlow();\n\n await createAndAddNpmScript(\n packageDotJson,\n options,\n relativePosixArtifactPath,\n );\n\n if (await askShouldAddToBuildCommand()) {\n await traceStep('sentry-cli-add-to-build-cmd', () =>\n addSentryCommandToBuildCommand(packageDotJson),\n );\n } else {\n clack.log.info(\n `No problem, just make sure to run this script ${chalk.bold(\n 'after',\n )} building your application but ${chalk.bold('before')} deploying!`,\n );\n }\n\n await addSentryCliRc(options.authToken);\n}\n\nexport async function setupNpmScriptInCI(): Promise<void> {\n if (addedToBuildCommand) {\n // No need to tell users to add it manually to their CI\n // if the script is already added to the build command\n return;\n }\n\n const addedToCI = await abortIfCancelled(\n clack.select({\n message: `Add a step to your CI pipeline that runs the ${chalk.cyan(\n SENTRY_NPM_SCRIPT_NAME,\n )} script ${chalk.bold('right after')} building your application.`,\n options: [\n { label: 'I did, continue!', value: true },\n {\n label: \"I'll do it later...\",\n value: false,\n hint: chalk.yellow(\n `You need to run ${chalk.cyan(\n SENTRY_NPM_SCRIPT_NAME,\n )} after each build for source maps to work properly.`,\n ),\n },\n ],\n initialValue: true,\n }),\n );\n\n Sentry.setTag('added-ci-script', addedToCI);\n\n if (!addedToCI) {\n clack.log.info(\"Don't forget! :)\");\n }\n}\n\nasync function createAndAddNpmScript(\n packageDotJson: PackageDotJson,\n options: SourceMapUploadToolConfigurationOptions,\n relativePosixArtifactPath: string,\n): Promise<void> {\n const sentryCliNpmScript = `sentry-cli sourcemaps inject --org ${\n options.orgSlug\n } --project ${\n options.projectSlug\n } ${relativePosixArtifactPath} && sentry-cli${\n options.selfHosted ? ` --url ${options.url}` : ''\n } sourcemaps upload --org ${options.orgSlug} --project ${\n options.projectSlug\n } ${relativePosixArtifactPath}`;\n\n packageDotJson.scripts = packageDotJson.scripts || {};\n packageDotJson.scripts[SENTRY_NPM_SCRIPT_NAME] = sentryCliNpmScript;\n\n await fs.promises.writeFile(\n path.join(process.cwd(), 'package.json'),\n JSON.stringify(packageDotJson, null, 2),\n );\n\n clack.log.info(\n `Added a ${chalk.cyan(SENTRY_NPM_SCRIPT_NAME)} script to your ${chalk.cyan(\n 'package.json',\n )}.`,\n );\n}\n\nasync function askShouldAddToBuildCommand(): Promise<boolean> {\n const shouldAddToBuildCommand = await abortIfCancelled(\n clack.select({\n message: `Do you want to automatically run the ${chalk.cyan(\n SENTRY_NPM_SCRIPT_NAME,\n )} script after each production build?`,\n options: [\n {\n label: 'Yes',\n value: true,\n hint: 'This will modify your prod build command',\n },\n { label: 'No', value: false },\n ],\n initialValue: true,\n }),\n );\n\n Sentry.setTag('modify-build-command', shouldAddToBuildCommand);\n\n return shouldAddToBuildCommand;\n}\n\n/**\n * Add the sentry:sourcemaps command to the prod build command in the package.json\n * - Detect the user's build command\n * - Append the sentry:sourcemaps command to it\n *\n * @param packageDotJson The package.json which will be modified.\n */\nasync function addSentryCommandToBuildCommand(\n packageDotJson: PackageDotJson,\n): Promise<void> {\n // This usually shouldn't happen because earlier we added the\n // SENTRY_NPM_SCRIPT_NAME script but just to be sure\n packageDotJson.scripts = packageDotJson.scripts || {};\n\n const allNpmScripts = Object.keys(packageDotJson.scripts).filter(\n (s) => s !== SENTRY_NPM_SCRIPT_NAME,\n );\n\n const pacMan = detectPackageManager() || 'npm';\n\n // Heuristic to pre-select the build command:\n // Often, 'build' is the prod build command, so we favour it.\n // If it's not there, commands that include 'build' might be the prod build command.\n let buildCommand =\n typeof packageDotJson.scripts.build === 'string'\n ? 'build'\n : allNpmScripts.find((s) => s.toLocaleLowerCase().includes('build'));\n\n const isProdBuildCommand =\n !!buildCommand &&\n (await abortIfCancelled(\n clack.confirm({\n message: `Is ${chalk.cyan(\n `${pacMan} run ${buildCommand}`,\n )} your production build command?`,\n }),\n ));\n\n if (allNpmScripts.length && (!buildCommand || !isProdBuildCommand)) {\n buildCommand = await abortIfCancelled(\n clack.select({\n message: `Which ${pacMan} command in your ${chalk.cyan(\n 'package.json',\n )} builds your application for production?`,\n options: allNpmScripts\n .map((script) => ({\n label: script,\n value: script,\n }))\n .concat({ label: 'None of the above', value: 'none' }),\n }),\n );\n }\n\n if (!buildCommand || buildCommand === 'none') {\n clack.log.warn(\n `We can only add the ${chalk.cyan(\n SENTRY_NPM_SCRIPT_NAME,\n )} script to another \\`script\\` in your ${chalk.cyan('package.json')}.\nPlease add it manually to your prod build command.`,\n );\n return;\n }\n\n packageDotJson.scripts[\n buildCommand\n // eslint-disable-next-line @typescript-eslint/restrict-template-expressions\n ] = `${packageDotJson.scripts[buildCommand]} && ${pacMan} run ${SENTRY_NPM_SCRIPT_NAME}`;\n\n await fs.promises.writeFile(\n path.join(process.cwd(), 'package.json'),\n JSON.stringify(packageDotJson, null, 2),\n );\n\n addedToBuildCommand = true;\n\n clack.log.info(\n `Added ${chalk.cyan(SENTRY_NPM_SCRIPT_NAME)} script to your ${chalk.cyan(\n buildCommand,\n )} command.`,\n );\n}\n\nasync function defaultConfigureSourcemapGenerationFlow(): Promise<void> {\n await abortIfCancelled(\n clack.select({\n message: `Verify that your build tool is generating source maps. ${chalk.dim(\n '(Your build output folder should contain .js.map files after a build)',\n )}`,\n options: [{ label: 'I checked. Continue!', value: true }],\n initialValue: true,\n }),\n );\n}\n"]}
1
+ {"version":3,"file":"sentry-cli.js","sourceRoot":"","sources":["../../../../src/sourcemaps/tools/sentry-cli.ts"],"names":[],"mappings":"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","sourcesContent":["// @ts-ignore - clack is ESM and TS complains about that. It works though\nimport clack from '@clack/prompts';\nimport chalk from 'chalk';\nimport * as Sentry from '@sentry/node';\nimport * as path from 'path';\nimport * as fs from 'fs';\nimport {\n abortIfCancelled,\n addSentryCliConfig,\n getPackageDotJson,\n installPackage,\n} from '../../utils/clack-utils';\n\nimport { SourceMapUploadToolConfigurationOptions } from './types';\nimport { hasPackageInstalled, PackageDotJson } from '../../utils/package-json';\nimport { traceStep } from '../../telemetry';\nimport { detectPackageManger } from '../../utils/package-manager';\n\nconst SENTRY_NPM_SCRIPT_NAME = 'sentry:sourcemaps';\n\nlet addedToBuildCommand = false;\n\nexport async function configureSentryCLI(\n options: SourceMapUploadToolConfigurationOptions,\n configureSourcemapGenerationFlow: () => Promise<void> = defaultConfigureSourcemapGenerationFlow,\n): Promise<void> {\n const packageDotJson = await getPackageDotJson();\n\n await installPackage({\n packageName: '@sentry/cli',\n alreadyInstalled: hasPackageInstalled('@sentry/cli', packageDotJson),\n });\n\n let validPath = false;\n let relativeArtifactPath;\n do {\n const rawArtifactPath = await abortIfCancelled(\n clack.text({\n message: 'Where are your build artifacts located?',\n placeholder: `.${path.sep}out`,\n validate(value) {\n if (!value) {\n return 'Please enter a path.';\n }\n },\n }),\n );\n\n if (path.isAbsolute(rawArtifactPath)) {\n relativeArtifactPath = path.relative(process.cwd(), rawArtifactPath);\n } else {\n relativeArtifactPath = rawArtifactPath;\n }\n\n try {\n await fs.promises.access(path.join(process.cwd(), relativeArtifactPath));\n validPath = true;\n } catch {\n validPath = await abortIfCancelled(\n clack.select({\n message: `We couldn't find artifacts at ${relativeArtifactPath}. Are you sure that this is the location that contains your build artifacts?`,\n options: [\n {\n label: 'No, let me verify.',\n value: false,\n },\n { label: 'Yes, I am sure!', value: true },\n ],\n initialValue: false,\n }),\n );\n }\n } while (!validPath);\n\n const relativePosixArtifactPath = relativeArtifactPath\n .split(path.sep)\n .join(path.posix.sep);\n\n await configureSourcemapGenerationFlow();\n\n await createAndAddNpmScript(\n packageDotJson,\n options,\n relativePosixArtifactPath,\n );\n\n if (await askShouldAddToBuildCommand()) {\n await traceStep('sentry-cli-add-to-build-cmd', () =>\n addSentryCommandToBuildCommand(packageDotJson),\n );\n } else {\n clack.log.info(\n `No problem, just make sure to run this script ${chalk.bold(\n 'after',\n )} building your application but ${chalk.bold('before')} deploying!`,\n );\n }\n\n await addSentryCliConfig(options.authToken);\n}\n\nexport async function setupNpmScriptInCI(): Promise<void> {\n if (addedToBuildCommand) {\n // No need to tell users to add it manually to their CI\n // if the script is already added to the build command\n return;\n }\n\n const addedToCI = await abortIfCancelled(\n clack.select({\n message: `Add a step to your CI pipeline that runs the ${chalk.cyan(\n SENTRY_NPM_SCRIPT_NAME,\n )} script ${chalk.bold('right after')} building your application.`,\n options: [\n { label: 'I did, continue!', value: true },\n {\n label: \"I'll do it later...\",\n value: false,\n hint: chalk.yellow(\n `You need to run ${chalk.cyan(\n SENTRY_NPM_SCRIPT_NAME,\n )} after each build for source maps to work properly.`,\n ),\n },\n ],\n initialValue: true,\n }),\n );\n\n Sentry.setTag('added-ci-script', addedToCI);\n\n if (!addedToCI) {\n clack.log.info(\"Don't forget! :)\");\n }\n}\n\nasync function createAndAddNpmScript(\n packageDotJson: PackageDotJson,\n options: SourceMapUploadToolConfigurationOptions,\n relativePosixArtifactPath: string,\n): Promise<void> {\n const sentryCliNpmScript = `sentry-cli sourcemaps inject --org ${\n options.orgSlug\n } --project ${\n options.projectSlug\n } ${relativePosixArtifactPath} && sentry-cli${\n options.selfHosted ? ` --url ${options.url}` : ''\n } sourcemaps upload --org ${options.orgSlug} --project ${\n options.projectSlug\n } ${relativePosixArtifactPath}`;\n\n packageDotJson.scripts = packageDotJson.scripts || {};\n packageDotJson.scripts[SENTRY_NPM_SCRIPT_NAME] = sentryCliNpmScript;\n\n await fs.promises.writeFile(\n path.join(process.cwd(), 'package.json'),\n JSON.stringify(packageDotJson, null, 2),\n );\n\n clack.log.info(\n `Added a ${chalk.cyan(SENTRY_NPM_SCRIPT_NAME)} script to your ${chalk.cyan(\n 'package.json',\n )}.`,\n );\n}\n\nasync function askShouldAddToBuildCommand(): Promise<boolean> {\n const shouldAddToBuildCommand = await abortIfCancelled(\n clack.select({\n message: `Do you want to automatically run the ${chalk.cyan(\n SENTRY_NPM_SCRIPT_NAME,\n )} script after each production build?`,\n options: [\n {\n label: 'Yes',\n value: true,\n hint: 'This will modify your prod build command',\n },\n { label: 'No', value: false },\n ],\n initialValue: true,\n }),\n );\n\n Sentry.setTag('modify-build-command', shouldAddToBuildCommand);\n\n return shouldAddToBuildCommand;\n}\n\n/**\n * Add the sentry:sourcemaps command to the prod build command in the package.json\n * - Detect the user's build command\n * - Append the sentry:sourcemaps command to it\n *\n * @param packageDotJson The package.json which will be modified.\n */\nasync function addSentryCommandToBuildCommand(\n packageDotJson: PackageDotJson,\n): Promise<void> {\n // This usually shouldn't happen because earlier we added the\n // SENTRY_NPM_SCRIPT_NAME script but just to be sure\n packageDotJson.scripts = packageDotJson.scripts || {};\n\n const allNpmScripts = Object.keys(packageDotJson.scripts).filter(\n (s) => s !== SENTRY_NPM_SCRIPT_NAME,\n );\n\n const packageManager = detectPackageManger();\n const packageManagerName = packageManager?.name ?? 'npm';\n\n // Heuristic to pre-select the build command:\n // Often, 'build' is the prod build command, so we favour it.\n // If it's not there, commands that include 'build' might be the prod build command.\n let buildCommand =\n typeof packageDotJson.scripts.build === 'string'\n ? 'build'\n : allNpmScripts.find((s) => s.toLocaleLowerCase().includes('build'));\n\n const isProdBuildCommand =\n !!buildCommand &&\n (await abortIfCancelled(\n clack.confirm({\n message: `Is ${chalk.cyan(\n `${packageManagerName} run ${buildCommand}`,\n )} your production build command?`,\n }),\n ));\n\n if (allNpmScripts.length && (!buildCommand || !isProdBuildCommand)) {\n buildCommand = await abortIfCancelled(\n clack.select({\n message: `Which ${packageManagerName} command in your ${chalk.cyan(\n 'package.json',\n )} builds your application for production?`,\n options: allNpmScripts\n .map((script) => ({\n label: script,\n value: script,\n }))\n .concat({ label: 'None of the above', value: 'none' }),\n }),\n );\n }\n\n if (!buildCommand || buildCommand === 'none') {\n clack.log.warn(\n `We can only add the ${chalk.cyan(\n SENTRY_NPM_SCRIPT_NAME,\n )} script to another \\`script\\` in your ${chalk.cyan('package.json')}.\nPlease add it manually to your prod build command.`,\n );\n return;\n }\n\n packageDotJson.scripts[\n buildCommand\n // eslint-disable-next-line @typescript-eslint/restrict-template-expressions\n ] = `${packageDotJson.scripts[buildCommand]} && ${packageManager} run ${SENTRY_NPM_SCRIPT_NAME}`;\n\n await fs.promises.writeFile(\n path.join(process.cwd(), 'package.json'),\n JSON.stringify(packageDotJson, null, 2),\n );\n\n addedToBuildCommand = true;\n\n clack.log.info(\n `Added ${chalk.cyan(SENTRY_NPM_SCRIPT_NAME)} script to your ${chalk.cyan(\n buildCommand,\n )} command.`,\n );\n}\n\nasync function defaultConfigureSourcemapGenerationFlow(): Promise<void> {\n await abortIfCancelled(\n clack.select({\n message: `Verify that your build tool is generating source maps. ${chalk.dim(\n '(Your build output folder should contain .js.map files after a build)',\n )}`,\n options: [{ label: 'I checked. Continue!', value: true }],\n initialValue: true,\n }),\n );\n}\n"]}
@@ -1,2 +1,3 @@
1
- import { SourceMapUploadToolConfigurationFunction } from './types';
1
+ import { SourceMapUploadToolConfigurationFunction, SourceMapUploadToolConfigurationOptions } from './types';
2
2
  export declare const configureVitePlugin: SourceMapUploadToolConfigurationFunction;
3
+ export declare function addVitePluginToConfig(viteConfigPath: string, options: SourceMapUploadToolConfigurationOptions): Promise<boolean>;