@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.
- package/CHANGELOG.md +58 -6
- package/dist/lib/Constants.d.ts +2 -0
- package/dist/lib/Constants.js +10 -0
- package/dist/lib/Constants.js.map +1 -1
- package/dist/lib/Steps/ChooseIntegration.js +15 -4
- package/dist/lib/Steps/ChooseIntegration.js.map +1 -1
- package/dist/lib/Steps/Integrations/Android.d.ts +9 -0
- package/dist/lib/Steps/Integrations/Android.js +86 -0
- package/dist/lib/Steps/Integrations/Android.js.map +1 -0
- package/dist/lib/Steps/Integrations/Cordova.js +5 -1
- package/dist/lib/Steps/Integrations/Cordova.js.map +1 -1
- package/dist/lib/Steps/Integrations/ReactNative.js +3 -3
- package/dist/lib/Steps/Integrations/ReactNative.js.map +1 -1
- package/dist/lib/Steps/Integrations/Remix.d.ts +12 -0
- package/dist/lib/Steps/Integrations/Remix.js +98 -0
- package/dist/lib/Steps/Integrations/Remix.js.map +1 -0
- package/dist/lib/Steps/PromptForParameters.js +36 -3
- package/dist/lib/Steps/PromptForParameters.js.map +1 -1
- package/dist/lib/Steps/SentryProjectSelector.js +1 -1
- package/dist/lib/Steps/SentryProjectSelector.js.map +1 -1
- package/dist/package.json +4 -3
- package/dist/src/android/android-wizard.d.ts +2 -0
- package/dist/src/android/android-wizard.js +217 -0
- package/dist/src/android/android-wizard.js.map +1 -0
- package/dist/src/android/code-tools.d.ts +39 -0
- package/dist/src/android/code-tools.js +161 -0
- package/dist/src/android/code-tools.js.map +1 -0
- package/dist/src/android/gradle.d.ts +62 -0
- package/dist/src/android/gradle.js +281 -0
- package/dist/src/android/gradle.js.map +1 -0
- package/dist/src/android/manifest.d.ts +57 -0
- package/dist/src/android/manifest.js +183 -0
- package/dist/src/android/manifest.js.map +1 -0
- package/dist/src/android/templates.d.ts +11 -0
- package/dist/src/android/templates.js +34 -0
- package/dist/src/android/templates.js.map +1 -0
- package/dist/src/apple/apple-wizard.js +123 -64
- package/dist/src/apple/apple-wizard.js.map +1 -1
- package/dist/src/apple/cocoapod.js +4 -3
- package/dist/src/apple/cocoapod.js.map +1 -1
- package/dist/src/apple/code-tools.d.ts +1 -1
- package/dist/src/apple/code-tools.js +43 -19
- package/dist/src/apple/code-tools.js.map +1 -1
- package/dist/src/apple/fastlane.d.ts +1 -1
- package/dist/src/apple/fastlane.js +12 -6
- package/dist/src/apple/fastlane.js.map +1 -1
- package/dist/src/apple/templates.d.ts +2 -2
- package/dist/src/apple/templates.js +4 -4
- package/dist/src/apple/templates.js.map +1 -1
- package/dist/src/apple/xcode-manager.d.ts +19 -3
- package/dist/src/apple/xcode-manager.js +126 -24
- package/dist/src/apple/xcode-manager.js.map +1 -1
- package/dist/src/nextjs/nextjs-wizard.js +49 -11
- package/dist/src/nextjs/nextjs-wizard.js.map +1 -1
- package/dist/src/nextjs/templates.d.ts +2 -0
- package/dist/src/nextjs/templates.js +6 -2
- package/dist/src/nextjs/templates.js.map +1 -1
- package/dist/src/remix/codemods/handle-error.d.ts +2 -0
- package/dist/src/remix/codemods/handle-error.js +70 -0
- package/dist/src/remix/codemods/handle-error.js.map +1 -0
- package/dist/src/remix/codemods/root-v1.d.ts +1 -0
- package/dist/src/remix/codemods/root-v1.js +133 -0
- package/dist/src/remix/codemods/root-v1.js.map +1 -0
- package/dist/src/remix/codemods/root-v2.d.ts +1 -0
- package/dist/src/remix/codemods/root-v2.js +134 -0
- package/dist/src/remix/codemods/root-v2.js.map +1 -0
- package/dist/src/remix/remix-wizard.d.ts +2 -0
- package/dist/src/remix/remix-wizard.js +196 -0
- package/dist/src/remix/remix-wizard.js.map +1 -0
- package/dist/src/remix/sdk-setup.d.ts +18 -0
- package/dist/src/remix/sdk-setup.js +293 -0
- package/dist/src/remix/sdk-setup.js.map +1 -0
- package/dist/src/remix/templates.d.ts +2 -0
- package/dist/src/remix/templates.js +6 -0
- package/dist/src/remix/templates.js.map +1 -0
- package/dist/src/remix/utils.d.ts +6 -0
- package/dist/src/remix/utils.js +55 -0
- package/dist/src/remix/utils.js.map +1 -0
- package/dist/src/sourcemaps/sourcemaps-wizard.js +49 -25
- package/dist/src/sourcemaps/sourcemaps-wizard.js.map +1 -1
- package/dist/src/sourcemaps/tools/nextjs.js +1 -1
- package/dist/src/sourcemaps/tools/nextjs.js.map +1 -1
- package/dist/src/sourcemaps/tools/remix.d.ts +3 -0
- package/dist/src/sourcemaps/tools/remix.js +125 -0
- package/dist/src/sourcemaps/tools/remix.js.map +1 -0
- package/dist/src/sourcemaps/tools/sentry-cli.js +19 -16
- package/dist/src/sourcemaps/tools/sentry-cli.js.map +1 -1
- package/dist/src/sourcemaps/tools/vite.d.ts +2 -1
- package/dist/src/sourcemaps/tools/vite.js +99 -12
- package/dist/src/sourcemaps/tools/vite.js.map +1 -1
- package/dist/src/sourcemaps/utils/detect-tool.d.ts +1 -1
- package/dist/src/sourcemaps/utils/detect-tool.js +1 -0
- package/dist/src/sourcemaps/utils/detect-tool.js.map +1 -1
- package/dist/src/sveltekit/sdk-setup.js +3 -3
- package/dist/src/sveltekit/sdk-setup.js.map +1 -1
- package/dist/src/sveltekit/sveltekit-wizard.js +34 -44
- package/dist/src/sveltekit/sveltekit-wizard.js.map +1 -1
- package/dist/src/telemetry.js +1 -0
- package/dist/src/telemetry.js.map +1 -1
- package/dist/src/utils/ast-utils.d.ts +2 -2
- package/dist/src/utils/ast-utils.js +7 -7
- package/dist/src/utils/ast-utils.js.map +1 -1
- package/dist/src/utils/clack-utils.d.ts +23 -28
- package/dist/src/utils/clack-utils.js +287 -244
- package/dist/src/utils/clack-utils.js.map +1 -1
- package/dist/src/utils/package-manager.d.ts +10 -0
- package/dist/{lib/Helper/PackageManager.js → src/utils/package-manager.js} +42 -74
- package/dist/src/utils/package-manager.js.map +1 -0
- package/dist/src/utils/release-registry.d.ts +1 -0
- package/dist/src/utils/release-registry.js +68 -0
- package/dist/src/utils/release-registry.js.map +1 -0
- package/dist/src/utils/sentrycli-utils.d.ts +4 -0
- package/dist/src/utils/sentrycli-utils.js +41 -0
- package/dist/src/utils/sentrycli-utils.js.map +1 -0
- package/dist/test/sourcemaps/tools/vite.test.d.ts +1 -0
- package/dist/test/sourcemaps/tools/vite.test.js +132 -0
- package/dist/test/sourcemaps/tools/vite.test.js.map +1 -0
- package/lib/Constants.ts +10 -0
- package/lib/Steps/ChooseIntegration.ts +14 -3
- package/lib/Steps/Integrations/Android.ts +23 -0
- package/lib/Steps/Integrations/Cordova.ts +5 -1
- package/lib/Steps/Integrations/ReactNative.ts +9 -3
- package/lib/Steps/Integrations/Remix.ts +32 -0
- package/lib/Steps/PromptForParameters.ts +48 -3
- package/lib/Steps/SentryProjectSelector.ts +3 -1
- package/package.json +4 -3
- package/src/android/android-wizard.ts +196 -0
- package/src/android/code-tools.ts +156 -0
- package/src/android/gradle.ts +245 -0
- package/src/android/manifest.ts +180 -0
- package/src/android/templates.ts +88 -0
- package/src/apple/apple-wizard.ts +113 -35
- package/src/apple/cocoapod.ts +6 -3
- package/src/apple/code-tools.ts +46 -18
- package/src/apple/fastlane.ts +6 -12
- package/src/apple/templates.ts +2 -8
- package/src/apple/xcode-manager.ts +167 -25
- package/src/nextjs/nextjs-wizard.ts +72 -8
- package/src/nextjs/templates.ts +16 -2
- package/src/remix/codemods/handle-error.ts +67 -0
- package/src/remix/codemods/root-v1.ts +91 -0
- package/src/remix/codemods/root-v2.ts +84 -0
- package/src/remix/remix-wizard.ts +132 -0
- package/src/remix/sdk-setup.ts +300 -0
- package/src/remix/templates.ts +15 -0
- package/src/remix/utils.ts +41 -0
- package/src/sourcemaps/sourcemaps-wizard.ts +28 -5
- package/src/sourcemaps/tools/nextjs.ts +2 -2
- package/src/sourcemaps/tools/remix.ts +90 -0
- package/src/sourcemaps/tools/sentry-cli.ts +8 -7
- package/src/sourcemaps/tools/vite.ts +136 -6
- package/src/sourcemaps/utils/detect-tool.ts +4 -1
- package/src/sveltekit/sdk-setup.ts +4 -4
- package/src/sveltekit/sveltekit-wizard.ts +5 -14
- package/src/telemetry.ts +2 -0
- package/src/utils/ast-utils.ts +7 -5
- package/src/utils/clack-utils.ts +366 -258
- package/src/utils/package-manager.ts +61 -0
- package/src/utils/release-registry.ts +19 -0
- package/src/utils/sentrycli-utils.ts +22 -0
- package/test/sourcemaps/tools/vite.test.ts +149 -0
- package/dist/lib/Helper/PackageManager.d.ts +0 -22
- package/dist/lib/Helper/PackageManager.js.map +0 -1
- package/dist/src/utils/vendor/clack-custom-select.d.ts +0 -21
- package/dist/src/utils/vendor/clack-custom-select.js +0 -137
- package/dist/src/utils/vendor/clack-custom-select.js.map +0 -1
- package/lib/Helper/PackageManager.ts +0 -59
- 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
|
-
|
|
148
|
-
|
|
149
|
-
|
|
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
|
|
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: '
|
|
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*/,
|
|
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*/,
|
|
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*/,
|
|
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*/,
|
|
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*/,
|
|
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*/,
|
|
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*/,
|
|
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*/,
|
|
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*/,
|
|
288
|
-
case 17: return [4 /*yield*/, (0,
|
|
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*/,
|
|
292
|
-
case 19: 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
|
|
384
|
-
var
|
|
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.
|
|
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,
|
|
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,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.
|
|
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,
|
|
257
|
-
return __generator(this, function (
|
|
258
|
-
switch (
|
|
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
|
-
|
|
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
|
-
|
|
269
|
-
if (!
|
|
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(
|
|
274
|
+
message: "Is ".concat(chalk_1.default.cyan("".concat(packageManagerName, " run ").concat(buildCommand)), " your production build command?"),
|
|
272
275
|
}))];
|
|
273
276
|
case 1:
|
|
274
|
-
|
|
275
|
-
|
|
277
|
+
_b = (_c.sent());
|
|
278
|
+
_c.label = 2;
|
|
276
279
|
case 2:
|
|
277
|
-
isProdBuildCommand =
|
|
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(
|
|
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 =
|
|
290
|
-
|
|
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(
|
|
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
|
-
|
|
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>;
|