@sentry/wizard 3.3.2 → 3.5.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 (71) hide show
  1. package/CHANGELOG.md +18 -0
  2. package/bin.ts +29 -19
  3. package/dist/bin.js +23 -18
  4. package/dist/bin.js.map +1 -1
  5. package/dist/lib/Helper/Wizard.js +0 -9
  6. package/dist/lib/Helper/Wizard.js.map +1 -1
  7. package/dist/lib/Setup.js.map +1 -1
  8. package/dist/lib/Steps/ChooseIntegration.js +26 -10
  9. package/dist/lib/Steps/ChooseIntegration.js.map +1 -1
  10. package/dist/lib/Steps/Integrations/{NextJs.d.ts → NextJsShim.d.ts} +1 -1
  11. package/dist/lib/Steps/Integrations/{NextJs.js → NextJsShim.js} +13 -10
  12. package/dist/lib/Steps/Integrations/NextJsShim.js.map +1 -0
  13. package/dist/lib/Steps/Integrations/SourceMapsShim.js +4 -1
  14. package/dist/lib/Steps/Integrations/SourceMapsShim.js.map +1 -1
  15. package/dist/lib/Steps/Integrations/{SvelteKit.d.ts → SvelteKitShim.d.ts} +1 -1
  16. package/dist/lib/Steps/Integrations/{SvelteKit.js → SvelteKitShim.js} +13 -10
  17. package/dist/lib/Steps/Integrations/SvelteKitShim.js.map +1 -0
  18. package/dist/package.json +3 -3
  19. package/dist/src/nextjs/nextjs-wizard.d.ts +2 -5
  20. package/dist/src/nextjs/nextjs-wizard.js +1 -1
  21. package/dist/src/nextjs/nextjs-wizard.js.map +1 -1
  22. package/dist/src/sourcemaps/sourcemaps-wizard.d.ts +2 -5
  23. package/dist/src/sourcemaps/sourcemaps-wizard.js +68 -31
  24. package/dist/src/sourcemaps/sourcemaps-wizard.js.map +1 -1
  25. package/dist/src/sourcemaps/tools/create-react-app.d.ts +1 -0
  26. package/dist/src/sourcemaps/tools/create-react-app.js +69 -0
  27. package/dist/src/sourcemaps/tools/create-react-app.js.map +1 -0
  28. package/dist/src/sourcemaps/tools/esbuild.d.ts +2 -0
  29. package/dist/src/sourcemaps/tools/esbuild.js +109 -0
  30. package/dist/src/sourcemaps/tools/esbuild.js.map +1 -0
  31. package/dist/src/sourcemaps/tools/rollup.d.ts +2 -0
  32. package/dist/src/sourcemaps/tools/rollup.js +109 -0
  33. package/dist/src/sourcemaps/tools/rollup.js.map +1 -0
  34. package/dist/src/sourcemaps/tools/sentry-cli.d.ts +2 -2
  35. package/dist/src/sourcemaps/tools/sentry-cli.js +111 -91
  36. package/dist/src/sourcemaps/tools/sentry-cli.js.map +1 -1
  37. package/dist/src/sourcemaps/tools/tsc.d.ts +1 -0
  38. package/dist/src/sourcemaps/tools/tsc.js +93 -0
  39. package/dist/src/sourcemaps/tools/tsc.js.map +1 -0
  40. package/dist/src/sourcemaps/utils/sdk-version.d.ts +14 -0
  41. package/dist/src/sourcemaps/utils/sdk-version.js +275 -0
  42. package/dist/src/sourcemaps/utils/sdk-version.js.map +1 -0
  43. package/dist/src/sveltekit/sveltekit-wizard.d.ts +2 -5
  44. package/dist/src/sveltekit/sveltekit-wizard.js +1 -1
  45. package/dist/src/sveltekit/sveltekit-wizard.js.map +1 -1
  46. package/dist/src/utils/clack-utils.d.ts +13 -2
  47. package/dist/src/utils/clack-utils.js +78 -45
  48. package/dist/src/utils/clack-utils.js.map +1 -1
  49. package/dist/src/utils/types.d.ts +12 -0
  50. package/dist/src/utils/types.js +3 -0
  51. package/dist/src/utils/types.js.map +1 -0
  52. package/lib/Helper/Wizard.ts +0 -9
  53. package/lib/Setup.ts +1 -0
  54. package/lib/Steps/ChooseIntegration.ts +35 -11
  55. package/lib/Steps/Integrations/{NextJs.ts → NextJsShim.ts} +5 -2
  56. package/lib/Steps/Integrations/SourceMapsShim.ts +4 -1
  57. package/lib/Steps/Integrations/{SvelteKit.ts → SvelteKitShim.ts} +5 -2
  58. package/package.json +3 -3
  59. package/src/nextjs/nextjs-wizard.ts +3 -8
  60. package/src/sourcemaps/sourcemaps-wizard.ts +67 -38
  61. package/src/sourcemaps/tools/create-react-app.ts +19 -0
  62. package/src/sourcemaps/tools/esbuild.ts +65 -0
  63. package/src/sourcemaps/tools/rollup.ts +69 -0
  64. package/src/sourcemaps/tools/sentry-cli.ts +114 -105
  65. package/src/sourcemaps/tools/tsc.ts +39 -0
  66. package/src/sourcemaps/utils/sdk-version.ts +264 -0
  67. package/src/sveltekit/sveltekit-wizard.ts +3 -6
  68. package/src/utils/clack-utils.ts +71 -29
  69. package/src/utils/types.ts +13 -0
  70. package/dist/lib/Steps/Integrations/NextJs.js.map +0 -1
  71. package/dist/lib/Steps/Integrations/SvelteKit.js.map +0 -1
@@ -0,0 +1,275 @@
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.ensureMinimumSdkVersionIsInstalled = void 0;
66
+ // @ts-ignore - clack is ESM and TS complains about that. It works though
67
+ var prompts_1 = __importDefault(require("@clack/prompts"));
68
+ var chalk_1 = __importDefault(require("chalk"));
69
+ var semver_1 = require("semver");
70
+ var clack_utils_1 = require("../../utils/clack-utils");
71
+ var Sentry = __importStar(require("@sentry/node"));
72
+ var MINIMUM_DEBUG_ID_SDK_VERSION = '7.47.0';
73
+ // This array is orderd by the SDKs we want to check for first.
74
+ // The reason is that some SDKs depend on others and some users might
75
+ // have added the dependencies to their package.json. We want to make sure
76
+ // that we actually detect the "top-level" SDK first.
77
+ var SENTRY_SDK_PACKAGE_NAMES = [
78
+ // SDKs using other framework SDKs need to be checked first
79
+ '@sentry/gatsby',
80
+ '@sentry/nextjs',
81
+ '@sentry/remix',
82
+ '@sentry/sveltekit',
83
+ // Framework SDKs
84
+ '@sentry/angular',
85
+ '@sentry/angular-ivy',
86
+ '@sentry/ember',
87
+ '@sentry/react',
88
+ '@sentry/svelte',
89
+ '@sentry/vue',
90
+ '@sentry/serverless',
91
+ // Base SDKs
92
+ '@sentry/browser',
93
+ '@sentry/node',
94
+ ];
95
+ /**
96
+ * Check for a minimum SDK version and prompt the user to upgrade if necessary.
97
+ * We distinguish between 4 cases here:
98
+ *
99
+ * 1. Users didn't install any SDK yet
100
+ * -> We tell them to install an SDK and then continue with the wizard
101
+ * 2. Users installed an SDK in the range >=7.47.0
102
+ * -> All good, no need to do anything!
103
+ * 3. Users installed an SDK in the range >=7.0.0 <= 7.46.0
104
+ * -> We ask if they want to auto-update to the latest version
105
+ * 4. Users installed an SDK in the range <7.x
106
+ * -> We tell users to manually upgrade (migrate between majors)
107
+ */
108
+ function ensureMinimumSdkVersionIsInstalled() {
109
+ return __awaiter(this, void 0, void 0, function () {
110
+ var packageJson, installedSdkPackages, installedSdkPackage, installedSdkName, installedSdkVersionOrRange, minInstalledVersion, hasDebugIdCompatibleSdkVersion, hasV7SdkVersion;
111
+ return __generator(this, function (_a) {
112
+ switch (_a.label) {
113
+ case 0: return [4 /*yield*/, (0, clack_utils_1.getPackageDotJson)()];
114
+ case 1:
115
+ packageJson = _a.sent();
116
+ installedSdkPackages = SENTRY_SDK_PACKAGE_NAMES.map(function (packageName) { return ({
117
+ name: packageName,
118
+ version: (0, clack_utils_1.getPackageVersion)(packageName, packageJson),
119
+ }); }).filter(function (sdkPackage) { return !!sdkPackage.version; });
120
+ installedSdkPackage = installedSdkPackages.length > 0 && installedSdkPackages[0];
121
+ if (!!installedSdkPackage) return [3 /*break*/, 3];
122
+ return [4 /*yield*/, handleNoSdkInstalled()];
123
+ case 2: return [2 /*return*/, _a.sent()];
124
+ case 3:
125
+ installedSdkName = installedSdkPackage.name, installedSdkVersionOrRange = installedSdkPackage.version;
126
+ minInstalledVersion = getMinInstalledVersion(installedSdkVersionOrRange, installedSdkName);
127
+ if (!minInstalledVersion) {
128
+ // This is handled in the getMinInstalledVersion function
129
+ return [2 /*return*/];
130
+ }
131
+ hasDebugIdCompatibleSdkVersion = (0, semver_1.satisfies)(minInstalledVersion, ">=".concat(MINIMUM_DEBUG_ID_SDK_VERSION));
132
+ // Case 2:
133
+ if (hasDebugIdCompatibleSdkVersion) {
134
+ Sentry.setTag('initial-sdk-version', '>=7.47.0');
135
+ return [2 /*return*/];
136
+ }
137
+ hasV7SdkVersion = (0, semver_1.satisfies)(minInstalledVersion, '>=7.0.0');
138
+ prompts_1.default.log.warn("".concat(chalk_1.default.yellowBright("It seems like you're using an outdated version (".concat(installedSdkVersionOrRange, ") of the ").concat(chalk_1.default.bold(installedSdkName), " SDK.")), "\nUploading source maps is easiest with an SDK from version ").concat(chalk_1.default.bold(MINIMUM_DEBUG_ID_SDK_VERSION), " or newer. \n"));
139
+ if (!hasV7SdkVersion) return [3 /*break*/, 5];
140
+ return [4 /*yield*/, handleAutoUpdateSdk(installedSdkName)];
141
+ case 4:
142
+ _a.sent();
143
+ return [2 /*return*/];
144
+ case 5:
145
+ // Case 4:
146
+ return [4 /*yield*/, handleManuallyUpdateSdk(minInstalledVersion)];
147
+ case 6:
148
+ // Case 4:
149
+ _a.sent();
150
+ return [2 /*return*/];
151
+ }
152
+ });
153
+ });
154
+ }
155
+ exports.ensureMinimumSdkVersionIsInstalled = ensureMinimumSdkVersionIsInstalled;
156
+ function handleManuallyUpdateSdk(minInstalledVersion) {
157
+ return __awaiter(this, void 0, void 0, function () {
158
+ var didUpdate;
159
+ return __generator(this, function (_a) {
160
+ switch (_a.label) {
161
+ case 0:
162
+ Sentry.setTag('initial-sdk-version', "".concat((0, semver_1.satisfies)(minInstalledVersion, '>=6.0.0') ? '6.x' : '<6.0.0'));
163
+ prompts_1.default.log
164
+ .info("When upgrading from a version older than 7.0.0, make sure to follow the migration guide:\nhttps://github.com/getsentry/sentry-javascript/blob/develop/MIGRATION.md#upgrading-from-6x-to-7x\n");
165
+ return [4 /*yield*/, (0, clack_utils_1.abortIfCancelled)(prompts_1.default.select({
166
+ message: 'Did you update your SDK to the latest version?',
167
+ options: [
168
+ {
169
+ label: 'Yes!',
170
+ value: true,
171
+ },
172
+ {
173
+ label: "No, I'll do it later...",
174
+ value: false,
175
+ hint: chalk_1.default.yellow("Remember to update your SDK to at least ".concat(MINIMUM_DEBUG_ID_SDK_VERSION, ".")),
176
+ },
177
+ ],
178
+ initialValue: true,
179
+ }))];
180
+ case 1:
181
+ didUpdate = _a.sent();
182
+ Sentry.setTag('resolved-sdk-status', didUpdate ? 'updated-manually' : 'update-later');
183
+ return [2 /*return*/];
184
+ }
185
+ });
186
+ });
187
+ }
188
+ function handleAutoUpdateSdk(packageName) {
189
+ return __awaiter(this, void 0, void 0, function () {
190
+ var shouldUpdate;
191
+ return __generator(this, function (_a) {
192
+ switch (_a.label) {
193
+ case 0:
194
+ Sentry.setTag('initial-sdk-version', '>=7.0.0 <7.47.0');
195
+ return [4 /*yield*/, (0, clack_utils_1.abortIfCancelled)(prompts_1.default.select({
196
+ message: 'Do you want to automatically update your SDK to the latest version?',
197
+ options: [
198
+ {
199
+ label: 'Yes!',
200
+ value: true,
201
+ hint: chalk_1.default.green('Recommended'),
202
+ },
203
+ {
204
+ label: "No, I'll do it later...",
205
+ value: false,
206
+ hint: chalk_1.default.yellow("Remember to update your SDK to at least ".concat(MINIMUM_DEBUG_ID_SDK_VERSION, ".")),
207
+ },
208
+ ],
209
+ initialValue: true,
210
+ }))];
211
+ case 1:
212
+ shouldUpdate = _a.sent();
213
+ if (!shouldUpdate) return [3 /*break*/, 3];
214
+ return [4 /*yield*/, (0, clack_utils_1.installPackage)({
215
+ packageName: packageName,
216
+ alreadyInstalled: true,
217
+ askBeforeUpdating: false, // we already did this above
218
+ })];
219
+ case 2:
220
+ _a.sent();
221
+ _a.label = 3;
222
+ case 3:
223
+ Sentry.setTag('resolved-sdk-status', shouldUpdate ? 'updated-automatically' : 'update-later');
224
+ return [2 /*return*/];
225
+ }
226
+ });
227
+ });
228
+ }
229
+ function handleNoSdkInstalled() {
230
+ return __awaiter(this, void 0, void 0, function () {
231
+ var installedSDK;
232
+ return __generator(this, function (_a) {
233
+ switch (_a.label) {
234
+ case 0:
235
+ Sentry.setTag('initial-sdk-version', 'none');
236
+ prompts_1.default.log.warn("".concat(chalk_1.default.yellowBright("It seems like you didn't yet install a Sentry SDK in your project."), "\nWe recommend setting up the SDK before continuing with the source maps wizard.\n\n").concat(chalk_1.default.dim("Take a look at our docs to get started:\nhttps://docs.sentry.io/")));
237
+ return [4 /*yield*/, (0, clack_utils_1.abortIfCancelled)(prompts_1.default.select({
238
+ message: 'Did you set up your Sentry SDK?',
239
+ options: [
240
+ { label: 'Yes, continue!', value: true },
241
+ {
242
+ label: "I'll do it later...",
243
+ value: false,
244
+ hint: chalk_1.default.yellow('You need to set up an SDK before you can use Sentry'),
245
+ },
246
+ ],
247
+ initialValue: true,
248
+ }))];
249
+ case 1:
250
+ installedSDK = _a.sent();
251
+ Sentry.setTag('resolved-sdk-status', installedSDK ? 'installed-manually' : 'install-later');
252
+ return [2 /*return*/];
253
+ }
254
+ });
255
+ });
256
+ }
257
+ function getMinInstalledVersion(installedSdkVersionOrRange, installedSdkName) {
258
+ var _a;
259
+ try {
260
+ // If `minVersion` is unable to parse the version it will throw an error
261
+ // However, it will also return `null` if the parameter is undefined, which
262
+ // we explicitly checked before but the typing doesn't know that.
263
+ var minInstalledVersion = (_a = (0, semver_1.minVersion)(installedSdkVersionOrRange)) === null || _a === void 0 ? void 0 : _a.version;
264
+ if (minInstalledVersion) {
265
+ return minInstalledVersion;
266
+ }
267
+ }
268
+ catch (_b) {
269
+ // handling this, along with the `null` case below
270
+ }
271
+ Sentry.setTag('initial-sdk-version', 'unknown');
272
+ prompts_1.default.log.warn("".concat(chalk_1.default.yellow("Could not parse the version of your installed SDK (\"".concat(installedSdkName, "\": \"").concat(installedSdkVersionOrRange, "\")")), "\n\nPlease make sure that your Sentry SDK is updated to version ").concat(chalk_1.default.bold(MINIMUM_DEBUG_ID_SDK_VERSION), " or newer.\n "));
273
+ return undefined;
274
+ }
275
+ //# sourceMappingURL=sdk-version.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sdk-version.js","sourceRoot":"","sources":["../../../../src/sourcemaps/utils/sdk-version.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 { minVersion, satisfies } from 'semver';\nimport {\n abortIfCancelled,\n getPackageDotJson,\n getPackageVersion,\n installPackage,\n} from '../../utils/clack-utils';\n\nimport * as Sentry from '@sentry/node';\n\nconst MINIMUM_DEBUG_ID_SDK_VERSION = '7.47.0';\n\n// This array is orderd by the SDKs we want to check for first.\n// The reason is that some SDKs depend on others and some users might\n// have added the dependencies to their package.json. We want to make sure\n// that we actually detect the \"top-level\" SDK first.\nconst SENTRY_SDK_PACKAGE_NAMES = [\n // SDKs using other framework SDKs need to be checked first\n '@sentry/gatsby',\n '@sentry/nextjs',\n '@sentry/remix',\n '@sentry/sveltekit',\n\n // Framework SDKs\n '@sentry/angular',\n '@sentry/angular-ivy',\n '@sentry/ember',\n '@sentry/react',\n '@sentry/svelte',\n '@sentry/vue',\n '@sentry/serverless',\n\n // Base SDKs\n '@sentry/browser',\n '@sentry/node',\n] as const;\n\ntype SdkPackage = {\n name: (typeof SENTRY_SDK_PACKAGE_NAMES)[number];\n version: string;\n};\n\n/**\n * Check for a minimum SDK version and prompt the user to upgrade if necessary.\n * We distinguish between 4 cases here:\n *\n * 1. Users didn't install any SDK yet\n * -> We tell them to install an SDK and then continue with the wizard\n * 2. Users installed an SDK in the range >=7.47.0\n * -> All good, no need to do anything!\n * 3. Users installed an SDK in the range >=7.0.0 <= 7.46.0\n * -> We ask if they want to auto-update to the latest version\n * 4. Users installed an SDK in the range <7.x\n * -> We tell users to manually upgrade (migrate between majors)\n */\nexport async function ensureMinimumSdkVersionIsInstalled(): Promise<void> {\n const packageJson = await getPackageDotJson();\n\n const installedSdkPackages = SENTRY_SDK_PACKAGE_NAMES.map((packageName) => ({\n name: packageName,\n version: getPackageVersion(packageName, packageJson),\n })).filter((sdkPackage): sdkPackage is SdkPackage => !!sdkPackage.version);\n\n const installedSdkPackage =\n installedSdkPackages.length > 0 && installedSdkPackages[0];\n\n // Case 1:\n if (!installedSdkPackage) {\n return await handleNoSdkInstalled();\n }\n\n const { name: installedSdkName, version: installedSdkVersionOrRange } =\n installedSdkPackage;\n\n const minInstalledVersion = getMinInstalledVersion(\n installedSdkVersionOrRange,\n installedSdkName,\n );\n\n if (!minInstalledVersion) {\n // This is handled in the getMinInstalledVersion function\n return;\n }\n\n const hasDebugIdCompatibleSdkVersion = satisfies(\n minInstalledVersion,\n `>=${MINIMUM_DEBUG_ID_SDK_VERSION}`,\n );\n\n // Case 2:\n if (hasDebugIdCompatibleSdkVersion) {\n Sentry.setTag('initial-sdk-version', '>=7.47.0');\n return;\n }\n\n const hasV7SdkVersion = satisfies(minInstalledVersion, '>=7.0.0');\n\n clack.log.warn(\n `${chalk.yellowBright(\n `It seems like you're using an outdated version (${installedSdkVersionOrRange}) of the ${chalk.bold(\n installedSdkName,\n )} SDK.`,\n )}\nUploading source maps is easiest with an SDK from version ${chalk.bold(\n MINIMUM_DEBUG_ID_SDK_VERSION,\n )} or newer. \n`,\n );\n\n // Case 3:\n if (hasV7SdkVersion) {\n await handleAutoUpdateSdk(installedSdkName);\n return;\n }\n\n // Case 4:\n await handleManuallyUpdateSdk(minInstalledVersion);\n}\n\nasync function handleManuallyUpdateSdk(minInstalledVersion: string) {\n Sentry.setTag(\n 'initial-sdk-version',\n `${satisfies(minInstalledVersion, '>=6.0.0') ? '6.x' : '<6.0.0'}`,\n );\n\n clack.log\n .info(`When upgrading from a version older than 7.0.0, make sure to follow the migration guide:\nhttps://github.com/getsentry/sentry-javascript/blob/develop/MIGRATION.md#upgrading-from-6x-to-7x\n`);\n\n const didUpdate = await abortIfCancelled(\n clack.select({\n message: 'Did you update your SDK to the latest version?',\n options: [\n {\n label: 'Yes!',\n value: true,\n },\n {\n label: \"No, I'll do it later...\",\n value: false,\n hint: chalk.yellow(\n `Remember to update your SDK to at least ${MINIMUM_DEBUG_ID_SDK_VERSION}.`,\n ),\n },\n ],\n initialValue: true,\n }),\n );\n\n Sentry.setTag(\n 'resolved-sdk-status',\n didUpdate ? 'updated-manually' : 'update-later',\n );\n}\n\nasync function handleAutoUpdateSdk(packageName: string) {\n Sentry.setTag('initial-sdk-version', '>=7.0.0 <7.47.0');\n\n const shouldUpdate = await abortIfCancelled(\n clack.select({\n message:\n 'Do you want to automatically update your SDK to the latest version?',\n options: [\n {\n label: 'Yes!',\n value: true,\n hint: chalk.green('Recommended'),\n },\n {\n label: \"No, I'll do it later...\",\n value: false,\n hint: chalk.yellow(\n `Remember to update your SDK to at least ${MINIMUM_DEBUG_ID_SDK_VERSION}.`,\n ),\n },\n ],\n initialValue: true,\n }),\n );\n\n if (shouldUpdate) {\n await installPackage({\n packageName,\n alreadyInstalled: true,\n askBeforeUpdating: false, // we already did this above\n });\n }\n\n Sentry.setTag(\n 'resolved-sdk-status',\n shouldUpdate ? 'updated-automatically' : 'update-later',\n );\n}\n\nasync function handleNoSdkInstalled(): Promise<void> {\n Sentry.setTag('initial-sdk-version', 'none');\n\n clack.log.warn(\n `${chalk.yellowBright(\n `It seems like you didn't yet install a Sentry SDK in your project.`,\n )}\nWe recommend setting up the SDK before continuing with the source maps wizard.\n\n${chalk.dim(`Take a look at our docs to get started:\nhttps://docs.sentry.io/`)}`,\n );\n\n const installedSDK = await abortIfCancelled(\n clack.select({\n message: 'Did you set up your Sentry SDK?',\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 up an SDK before you can use Sentry',\n ),\n },\n ],\n initialValue: true,\n }),\n );\n\n Sentry.setTag(\n 'resolved-sdk-status',\n installedSDK ? 'installed-manually' : 'install-later',\n );\n}\n\nfunction getMinInstalledVersion(\n installedSdkVersionOrRange: string,\n installedSdkName: string,\n): string | undefined {\n try {\n // If `minVersion` is unable to parse the version it will throw an error\n // However, it will also return `null` if the parameter is undefined, which\n // we explicitly checked before but the typing doesn't know that.\n const minInstalledVersion = minVersion(installedSdkVersionOrRange)?.version;\n if (minInstalledVersion) {\n return minInstalledVersion;\n }\n } catch {\n // handling this, along with the `null` case below\n }\n\n Sentry.setTag('initial-sdk-version', 'unknown');\n clack.log.warn(\n `${chalk.yellow(\n `Could not parse the version of your installed SDK (\"${installedSdkName}\": \"${installedSdkVersionOrRange}\")`,\n )}\n\nPlease make sure that your Sentry SDK is updated to version ${chalk.bold(\n MINIMUM_DEBUG_ID_SDK_VERSION,\n )} or newer.\n `,\n );\n\n return undefined;\n}\n"]}
@@ -1,5 +1,2 @@
1
- interface SvelteKitWizardOptions {
2
- promoCode?: string;
3
- }
4
- export declare function runSvelteKitWizard(options: SvelteKitWizardOptions): Promise<void>;
5
- export {};
1
+ import { WizardOptions } from '../utils/types';
2
+ export declare function runSvelteKitWizard(options: WizardOptions): Promise<void>;
@@ -66,7 +66,7 @@ function runSvelteKitWizard(options) {
66
66
  return [4 /*yield*/, (0, clack_utils_1.ensurePackageIsInstalled)(packageJson, '@sveltejs/kit', 'Sveltekit')];
67
67
  case 3:
68
68
  _c.sent();
69
- return [4 /*yield*/, (0, clack_utils_1.askForSelfHosted)()];
69
+ return [4 /*yield*/, (0, clack_utils_1.askForSelfHosted)(options.url)];
70
70
  case 4:
71
71
  _a = _c.sent(), sentryUrl = _a.url, selfHosted = _a.selfHosted;
72
72
  return [4 /*yield*/, (0, clack_utils_1.askForWizardLogin)({
@@ -1 +1 @@
1
- {"version":3,"file":"sveltekit-wizard.js","sourceRoot":"","sources":["../../../src/sveltekit/sveltekit-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';\n\nimport {\n askForProjectSelection,\n askForSelfHosted,\n askForWizardLogin,\n confirmContinueEvenThoughNoGitRepo,\n ensurePackageIsInstalled,\n getPackageDotJson,\n hasPackageInstalled,\n installPackage,\n printWelcome,\n} from '../utils/clack-utils';\nimport { createExamplePage } from './sdk-example';\nimport { createOrMergeSvelteKitFiles, loadSvelteConfig } from './sdk-setup';\n\nimport { setupCLIConfig } from './sentry-cli-setup';\n\ninterface SvelteKitWizardOptions {\n promoCode?: string;\n}\n\nexport async function runSvelteKitWizard(\n options: SvelteKitWizardOptions,\n): Promise<void> {\n printWelcome({\n wizardName: 'Sentry SvelteKit Wizard',\n promoCode: options.promoCode,\n });\n\n await confirmContinueEvenThoughNoGitRepo();\n\n const packageJson = await getPackageDotJson();\n await ensurePackageIsInstalled(packageJson, '@sveltejs/kit', 'Sveltekit');\n\n const { url: sentryUrl, selfHosted } = await askForSelfHosted();\n\n const { projects, apiKeys } = await askForWizardLogin({\n promoCode: options.promoCode,\n url: sentryUrl,\n platform: 'javascript-sveltekit',\n });\n\n const selectedProject = await askForProjectSelection(projects);\n\n await installPackage({\n packageName: '@sentry/sveltekit',\n alreadyInstalled: hasPackageInstalled('@sentry/sveltekit', packageJson),\n });\n\n await setupCLIConfig(apiKeys.token, selectedProject, sentryUrl);\n\n const dsn = selectedProject.keys[0].dsn.public;\n\n const svelteConfig = await loadSvelteConfig();\n\n try {\n await createOrMergeSvelteKitFiles(dsn, svelteConfig);\n } catch (e: unknown) {\n clack.log.error('Error while setting up the SvelteKit SDK:');\n clack.log.info(\n chalk.dim(\n typeof e === 'object' && e != null && 'toString' in e\n ? e.toString()\n : typeof e === 'string'\n ? e\n : 'Unknown error',\n ),\n );\n return;\n }\n\n try {\n await createExamplePage(svelteConfig, {\n selfHosted,\n url: sentryUrl,\n orgSlug: selectedProject.organization.slug,\n projectId: selectedProject.id,\n });\n } catch (e: unknown) {\n clack.log.error('Error while creating an example page to test Sentry:');\n clack.log.info(\n chalk.dim(\n typeof e === 'object' && e != null && 'toString' in e\n ? e.toString()\n : typeof e === 'string'\n ? e\n : 'Unknown error',\n ),\n );\n return;\n }\n\n clack.outro(`\n${chalk.green('Successfully installed the Sentry SvelteKit SDK!')}\n\n${chalk.cyan(\n 'You can validate your setup by starting your dev environment (`npm run dev`) and visiting \"/sentry-example\".',\n)}\n\nCheck out the SDK documentation for further configuration:\nhttps://docs.sentry.io/platforms/javascript/guides/sveltekit/\n `);\n}\n"]}
1
+ {"version":3,"file":"sveltekit-wizard.js","sourceRoot":"","sources":["../../../src/sveltekit/sveltekit-wizard.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,yEAAyE;AACzE,2DAAmC;AACnC,gDAA0B;AAE1B,oDAU8B;AAE9B,6CAAkD;AAClD,yCAA4E;AAE5E,uDAAoD;AAEpD,SAAsB,kBAAkB,CACtC,OAAsB;;;;;;oBAEtB,IAAA,0BAAY,EAAC;wBACX,UAAU,EAAE,yBAAyB;wBACrC,SAAS,EAAE,OAAO,CAAC,SAAS;qBAC7B,CAAC,CAAC;oBAEH,qBAAM,IAAA,gDAAkC,GAAE,EAAA;;oBAA1C,SAA0C,CAAC;oBAEvB,qBAAM,IAAA,+BAAiB,GAAE,EAAA;;oBAAvC,WAAW,GAAG,SAAyB;oBAC7C,qBAAM,IAAA,sCAAwB,EAAC,WAAW,EAAE,eAAe,EAAE,WAAW,CAAC,EAAA;;oBAAzE,SAAyE,CAAC;oBAEnC,qBAAM,IAAA,8BAAgB,EAAC,OAAO,CAAC,GAAG,CAAC,EAAA;;oBAApE,KAAiC,SAAmC,EAA7D,SAAS,SAAA,EAAE,UAAU,gBAAA;oBAEJ,qBAAM,IAAA,+BAAiB,EAAC;4BACpD,SAAS,EAAE,OAAO,CAAC,SAAS;4BAC5B,GAAG,EAAE,SAAS;4BACd,QAAQ,EAAE,sBAAsB;yBACjC,CAAC,EAAA;;oBAJI,KAAwB,SAI5B,EAJM,QAAQ,cAAA,EAAE,OAAO,aAAA;oBAMD,qBAAM,IAAA,oCAAsB,EAAC,QAAQ,CAAC,EAAA;;oBAAxD,eAAe,GAAG,SAAsC;oBAE9D,qBAAM,IAAA,4BAAc,EAAC;4BACnB,WAAW,EAAE,mBAAmB;4BAChC,gBAAgB,EAAE,IAAA,iCAAmB,EAAC,mBAAmB,EAAE,WAAW,CAAC;yBACxE,CAAC,EAAA;;oBAHF,SAGE,CAAC;oBAEH,qBAAM,IAAA,iCAAc,EAAC,OAAO,CAAC,KAAK,EAAE,eAAe,EAAE,SAAS,CAAC,EAAA;;oBAA/D,SAA+D,CAAC;oBAE1D,GAAG,GAAG,eAAe,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC;oBAE1B,qBAAM,IAAA,4BAAgB,GAAE,EAAA;;oBAAvC,YAAY,GAAG,SAAwB;;;;oBAG3C,qBAAM,IAAA,uCAA2B,EAAC,GAAG,EAAE,YAAY,CAAC,EAAA;;oBAApD,SAAoD,CAAC;;;;oBAErD,iBAAK,CAAC,GAAG,CAAC,KAAK,CAAC,2CAA2C,CAAC,CAAC;oBAC7D,iBAAK,CAAC,GAAG,CAAC,IAAI,CACZ,eAAK,CAAC,GAAG,CACP,OAAO,GAAC,KAAK,QAAQ,IAAI,GAAC,IAAI,IAAI,IAAI,UAAU,IAAI,GAAC;wBACnD,CAAC,CAAC,GAAC,CAAC,QAAQ,EAAE;wBACd,CAAC,CAAC,OAAO,GAAC,KAAK,QAAQ;4BACvB,CAAC,CAAC,GAAC;4BACH,CAAC,CAAC,eAAe,CACpB,CACF,CAAC;oBACF,sBAAO;;;oBAIP,qBAAM,IAAA,+BAAiB,EAAC,YAAY,EAAE;4BACpC,UAAU,YAAA;4BACV,GAAG,EAAE,SAAS;4BACd,OAAO,EAAE,eAAe,CAAC,YAAY,CAAC,IAAI;4BAC1C,SAAS,EAAE,eAAe,CAAC,EAAE;yBAC9B,CAAC,EAAA;;oBALF,SAKE,CAAC;;;;oBAEH,iBAAK,CAAC,GAAG,CAAC,KAAK,CAAC,sDAAsD,CAAC,CAAC;oBACxE,iBAAK,CAAC,GAAG,CAAC,IAAI,CACZ,eAAK,CAAC,GAAG,CACP,OAAO,GAAC,KAAK,QAAQ,IAAI,GAAC,IAAI,IAAI,IAAI,UAAU,IAAI,GAAC;wBACnD,CAAC,CAAC,GAAC,CAAC,QAAQ,EAAE;wBACd,CAAC,CAAC,OAAO,GAAC,KAAK,QAAQ;4BACvB,CAAC,CAAC,GAAC;4BACH,CAAC,CAAC,eAAe,CACpB,CACF,CAAC;oBACF,sBAAO;;oBAGT,iBAAK,CAAC,KAAK,CAAC,YACZ,eAAK,CAAC,KAAK,CAAC,kDAAkD,CAAC,iBAE/D,eAAK,CAAC,IAAI,CACV,8GAA8G,CAC/G,sIAIE,CAAC,CAAC;;;;;CACJ;AAjFD,gDAiFC","sourcesContent":["// @ts-ignore - clack is ESM and TS complains about that. It works though\nimport clack from '@clack/prompts';\nimport chalk from 'chalk';\n\nimport {\n askForProjectSelection,\n askForSelfHosted,\n askForWizardLogin,\n confirmContinueEvenThoughNoGitRepo,\n ensurePackageIsInstalled,\n getPackageDotJson,\n hasPackageInstalled,\n installPackage,\n printWelcome,\n} from '../utils/clack-utils';\nimport { WizardOptions } from '../utils/types';\nimport { createExamplePage } from './sdk-example';\nimport { createOrMergeSvelteKitFiles, loadSvelteConfig } from './sdk-setup';\n\nimport { setupCLIConfig } from './sentry-cli-setup';\n\nexport async function runSvelteKitWizard(\n options: WizardOptions,\n): Promise<void> {\n printWelcome({\n wizardName: 'Sentry SvelteKit Wizard',\n promoCode: options.promoCode,\n });\n\n await confirmContinueEvenThoughNoGitRepo();\n\n const packageJson = await getPackageDotJson();\n await ensurePackageIsInstalled(packageJson, '@sveltejs/kit', 'Sveltekit');\n\n const { url: sentryUrl, selfHosted } = await askForSelfHosted(options.url);\n\n const { projects, apiKeys } = await askForWizardLogin({\n promoCode: options.promoCode,\n url: sentryUrl,\n platform: 'javascript-sveltekit',\n });\n\n const selectedProject = await askForProjectSelection(projects);\n\n await installPackage({\n packageName: '@sentry/sveltekit',\n alreadyInstalled: hasPackageInstalled('@sentry/sveltekit', packageJson),\n });\n\n await setupCLIConfig(apiKeys.token, selectedProject, sentryUrl);\n\n const dsn = selectedProject.keys[0].dsn.public;\n\n const svelteConfig = await loadSvelteConfig();\n\n try {\n await createOrMergeSvelteKitFiles(dsn, svelteConfig);\n } catch (e: unknown) {\n clack.log.error('Error while setting up the SvelteKit SDK:');\n clack.log.info(\n chalk.dim(\n typeof e === 'object' && e != null && 'toString' in e\n ? e.toString()\n : typeof e === 'string'\n ? e\n : 'Unknown error',\n ),\n );\n return;\n }\n\n try {\n await createExamplePage(svelteConfig, {\n selfHosted,\n url: sentryUrl,\n orgSlug: selectedProject.organization.slug,\n projectId: selectedProject.id,\n });\n } catch (e: unknown) {\n clack.log.error('Error while creating an example page to test Sentry:');\n clack.log.info(\n chalk.dim(\n typeof e === 'object' && e != null && 'toString' in e\n ? e.toString()\n : typeof e === 'string'\n ? e\n : 'Unknown error',\n ),\n );\n return;\n }\n\n clack.outro(`\n${chalk.green('Successfully installed the Sentry SvelteKit SDK!')}\n\n${chalk.cyan(\n 'You can validate your setup by starting your dev environment (`npm run dev`) and visiting \"/sentry-example\".',\n)}\n\nCheck out the SDK documentation for further configuration:\nhttps://docs.sentry.io/platforms/javascript/guides/sveltekit/\n `);\n}\n"]}
@@ -36,11 +36,21 @@ export declare function askForWizardLogin(options: {
36
36
  platform?: 'javascript-nextjs' | 'javascript-sveltekit';
37
37
  }): Promise<WizardProjectData>;
38
38
  export declare function askForProjectSelection(projects: SentryProjectData[]): Promise<SentryProjectData>;
39
- export declare function installPackage({ packageName, alreadyInstalled, }: {
39
+ export declare function installPackage({ packageName, alreadyInstalled, askBeforeUpdating, }: {
40
40
  packageName: string;
41
41
  alreadyInstalled: boolean;
42
+ askBeforeUpdating?: boolean;
42
43
  }): Promise<void>;
43
- export declare function askForSelfHosted(): Promise<{
44
+ /**
45
+ * Asks users if they are using SaaS or self-hosted Sentry and returns the validated URL.
46
+ *
47
+ * If users started the wizard with a --url arg, that URL is used as the default and we skip
48
+ * the self-hosted question. However, the passed url is still validated and in case it's
49
+ * invalid, users are asked to enter a new one until it is valid.
50
+ *
51
+ * @param urlFromArgs the url passed via the --url arg
52
+ */
53
+ export declare function askForSelfHosted(urlFromArgs?: string): Promise<{
44
54
  url: string;
45
55
  selfHosted: boolean;
46
56
  }>;
@@ -49,4 +59,5 @@ export declare function addDotEnvSentryBuildPluginFile(authToken: string): Promi
49
59
  export declare function ensurePackageIsInstalled(packageJson: PackageDotJson, packageId: string, packageName: string): Promise<void>;
50
60
  export declare function getPackageDotJson(): Promise<PackageDotJson>;
51
61
  export declare function hasPackageInstalled(packageName: string, packageJson: PackageDotJson): boolean;
62
+ export declare function getPackageVersion(packageName: string, packageJson: PackageDotJson): string | undefined;
52
63
  export {};
@@ -62,7 +62,7 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
62
62
  return (mod && mod.__esModule) ? mod : { "default": mod };
63
63
  };
64
64
  Object.defineProperty(exports, "__esModule", { value: true });
65
- exports.hasPackageInstalled = exports.getPackageDotJson = exports.ensurePackageIsInstalled = exports.addDotEnvSentryBuildPluginFile = exports.addSentryCliRc = exports.askForSelfHosted = exports.installPackage = exports.askForProjectSelection = exports.askForWizardLogin = exports.confirmContinueEvenThoughNoGitRepo = exports.printWelcome = exports.abortIfCancelled = exports.abort = void 0;
65
+ exports.getPackageVersion = exports.hasPackageInstalled = exports.getPackageDotJson = exports.ensurePackageIsInstalled = exports.addDotEnvSentryBuildPluginFile = exports.addSentryCliRc = exports.askForSelfHosted = exports.installPackage = exports.askForProjectSelection = exports.askForWizardLogin = exports.confirmContinueEvenThoughNoGitRepo = exports.printWelcome = exports.abortIfCancelled = exports.abort = void 0;
66
66
  // @ts-ignore - clack is ESM and TS complains about that. It works though
67
67
  var clack = __importStar(require("@clack/prompts"));
68
68
  var axios_1 = __importDefault(require("axios"));
@@ -75,6 +75,7 @@ var url_1 = require("url");
75
75
  var util_1 = require("util");
76
76
  var Sentry = __importStar(require("@sentry/node"));
77
77
  var clack_custom_select_1 = require("./vendor/clack-custom-select");
78
+ var opn = require('opn');
78
79
  var SAAS_URL = 'https://sentry.io/';
79
80
  function abort(message, status) {
80
81
  return __awaiter(this, void 0, void 0, function () {
@@ -142,7 +143,7 @@ function printWelcome(options) {
142
143
  console.log('');
143
144
  clack.intro(chalk_1.default.inverse(" ".concat(options.wizardName, " ")));
144
145
  var welcomeText = options.message ||
145
- 'This Wizard will help you to set up Sentry for your application.\nThank you for using Sentry :)';
146
+ 'This Wizard will help you set up Sentry for your application.\nThank you for using Sentry :)';
146
147
  if (options.promoCode) {
147
148
  welcomeText += "\n\nUsing promo-code: ".concat(options.promoCode);
148
149
  }
@@ -185,7 +186,7 @@ function confirmContinueEvenThoughNoGitRepo() {
185
186
  exports.confirmContinueEvenThoughNoGitRepo = confirmContinueEvenThoughNoGitRepo;
186
187
  function askForWizardLogin(options) {
187
188
  return __awaiter(this, void 0, void 0, function () {
188
- var hasSentryAccount, wizardHash, _a, loginUrl, loginSpinner, data;
189
+ var hasSentryAccount, wizardHash, _a, loginUrl, urlToOpen, loginSpinner, data;
189
190
  return __generator(this, function (_b) {
190
191
  switch (_b.label) {
191
192
  case 0:
@@ -232,9 +233,13 @@ function askForWizardLogin(options) {
232
233
  if (options.promoCode) {
233
234
  loginUrl.searchParams.set('code', options.promoCode);
234
235
  }
235
- clack.log.info("".concat(chalk_1.default.bold("Please open the following link in your browser to ".concat(hasSentryAccount ? 'log' : 'sign', " into Sentry:")), "\n\n").concat(chalk_1.default.cyan(loginUrl.toString())));
236
+ urlToOpen = loginUrl.toString();
237
+ clack.log.info("".concat(chalk_1.default.bold("If the browser window didn't open automatically, please open the following link to ".concat(hasSentryAccount ? 'log' : 'sign', " into Sentry:")), "\n\n").concat(chalk_1.default.cyan(urlToOpen)));
238
+ opn(urlToOpen).catch(function () {
239
+ // opn throws in environments that don't have a browser (e.g. remote shells) so we just noop here
240
+ });
236
241
  loginSpinner = clack.spinner();
237
- loginSpinner.start('Waiting for you to click the link above 👆. Take your time.');
242
+ loginSpinner.start("Waiting for you to log in using the link above. Once you're logged in, return to this wizard.");
238
243
  return [4 /*yield*/, new Promise(function (resolve) {
239
244
  var pollingInterval = (0, timers_1.setInterval)(function () {
240
245
  axios_1.default
@@ -292,56 +297,56 @@ function askForProjectSelection(projects) {
292
297
  }
293
298
  exports.askForProjectSelection = askForProjectSelection;
294
299
  function installPackage(_a) {
295
- var packageName = _a.packageName, alreadyInstalled = _a.alreadyInstalled;
300
+ var packageName = _a.packageName, alreadyInstalled = _a.alreadyInstalled, _b = _a.askBeforeUpdating, askBeforeUpdating = _b === void 0 ? true : _b;
296
301
  return __awaiter(this, void 0, void 0, function () {
297
302
  var shouldUpdatePackage, sdkInstallSpinner, packageManager, e_1;
298
- return __generator(this, function (_b) {
299
- switch (_b.label) {
303
+ return __generator(this, function (_c) {
304
+ switch (_c.label) {
300
305
  case 0:
301
- if (!alreadyInstalled) return [3 /*break*/, 2];
306
+ if (!(alreadyInstalled && askBeforeUpdating)) return [3 /*break*/, 2];
302
307
  return [4 /*yield*/, abortIfCancelled(clack.confirm({
303
308
  message: "The ".concat(chalk_1.default.bold.cyan(packageName), " package is already installed. Do you want to update it to the latest version?"),
304
309
  }))];
305
310
  case 1:
306
- shouldUpdatePackage = _b.sent();
311
+ shouldUpdatePackage = _c.sent();
307
312
  if (!shouldUpdatePackage) {
308
313
  return [2 /*return*/];
309
314
  }
310
- _b.label = 2;
315
+ _c.label = 2;
311
316
  case 2:
312
317
  sdkInstallSpinner = clack.spinner();
313
318
  return [4 /*yield*/, getPackageManager()];
314
319
  case 3:
315
- packageManager = _b.sent();
320
+ packageManager = _c.sent();
316
321
  sdkInstallSpinner.start("".concat(alreadyInstalled ? 'Updating' : 'Installing', " ").concat(chalk_1.default.bold.cyan(packageName), " with ").concat(chalk_1.default.bold(packageManager), "."));
317
- _b.label = 4;
322
+ _c.label = 4;
318
323
  case 4:
319
- _b.trys.push([4, 11, , 13]);
324
+ _c.trys.push([4, 11, , 13]);
320
325
  if (!(packageManager === 'yarn')) return [3 /*break*/, 6];
321
326
  return [4 /*yield*/, (0, util_1.promisify)(childProcess.exec)("yarn add ".concat(packageName, "@latest"))];
322
327
  case 5:
323
- _b.sent();
328
+ _c.sent();
324
329
  return [3 /*break*/, 10];
325
330
  case 6:
326
331
  if (!(packageManager === 'pnpm')) return [3 /*break*/, 8];
327
332
  return [4 /*yield*/, (0, util_1.promisify)(childProcess.exec)("pnpm add ".concat(packageName, "@latest"))];
328
333
  case 7:
329
- _b.sent();
334
+ _c.sent();
330
335
  return [3 /*break*/, 10];
331
336
  case 8:
332
337
  if (!(packageManager === 'npm')) return [3 /*break*/, 10];
333
338
  return [4 /*yield*/, (0, util_1.promisify)(childProcess.exec)("npm install ".concat(packageName, "@latest"))];
334
339
  case 9:
335
- _b.sent();
336
- _b.label = 10;
340
+ _c.sent();
341
+ _c.label = 10;
337
342
  case 10: return [3 /*break*/, 13];
338
343
  case 11:
339
- e_1 = _b.sent();
344
+ e_1 = _c.sent();
340
345
  sdkInstallSpinner.stop('Installation failed.');
341
346
  clack.log.error("".concat(chalk_1.default.red('Encountered the following error during installation:'), "\n\n").concat(e_1, "\n\n").concat(chalk_1.default.dim('If you think this issue is caused by the Sentry wizard, let us know here:\nhttps://github.com/getsentry/sentry-wizard/issues')));
342
347
  return [4 /*yield*/, abort()];
343
348
  case 12:
344
- _b.sent();
349
+ _c.sent();
345
350
  return [3 /*break*/, 13];
346
351
  case 13:
347
352
  sdkInstallSpinner.stop("".concat(alreadyInstalled ? 'Updated' : 'Installed', " ").concat(chalk_1.default.bold.cyan(packageName), " with ").concat(chalk_1.default.bold(packageManager), "."));
@@ -351,34 +356,57 @@ function installPackage(_a) {
351
356
  });
352
357
  }
353
358
  exports.installPackage = installPackage;
354
- function askForSelfHosted() {
359
+ /**
360
+ * Asks users if they are using SaaS or self-hosted Sentry and returns the validated URL.
361
+ *
362
+ * If users started the wizard with a --url arg, that URL is used as the default and we skip
363
+ * the self-hosted question. However, the passed url is still validated and in case it's
364
+ * invalid, users are asked to enter a new one until it is valid.
365
+ *
366
+ * @param urlFromArgs the url passed via the --url arg
367
+ */
368
+ function askForSelfHosted(urlFromArgs) {
355
369
  return __awaiter(this, void 0, void 0, function () {
356
- var choice, validUrl, url;
357
- return __generator(this, function (_a) {
358
- switch (_a.label) {
359
- case 0: return [4 /*yield*/, abortIfCancelled(clack.select({
360
- message: 'Are you using Sentry SaaS or self-hosted Sentry?',
361
- options: [
362
- { value: 'saas', label: 'Sentry SaaS (sentry.io)' },
363
- { value: 'self-hosted', label: 'Self-hosted/on-premise/single-tenant' },
364
- ],
365
- }))];
370
+ var choice, validUrl, tmpUrlFromArgs, url, _a, isSelfHostedUrl;
371
+ return __generator(this, function (_b) {
372
+ switch (_b.label) {
373
+ case 0:
374
+ if (!!urlFromArgs) return [3 /*break*/, 2];
375
+ return [4 /*yield*/, abortIfCancelled(clack.select({
376
+ message: 'Are you using Sentry SaaS or self-hosted Sentry?',
377
+ options: [
378
+ { value: 'saas', label: 'Sentry SaaS (sentry.io)' },
379
+ {
380
+ value: 'self-hosted',
381
+ label: 'Self-hosted/on-premise/single-tenant',
382
+ },
383
+ ],
384
+ }))];
366
385
  case 1:
367
- choice = _a.sent();
386
+ choice = _b.sent();
368
387
  if (choice === 'saas') {
369
388
  Sentry.setTag('url', SAAS_URL);
370
389
  Sentry.setTag('self-hosted', false);
371
390
  return [2 /*return*/, { url: SAAS_URL, selfHosted: false }];
372
391
  }
373
- _a.label = 2;
392
+ _b.label = 2;
374
393
  case 2:
375
- if (!(validUrl === undefined)) return [3 /*break*/, 4];
394
+ tmpUrlFromArgs = urlFromArgs;
395
+ _b.label = 3;
396
+ case 3:
397
+ if (!(validUrl === undefined)) return [3 /*break*/, 6];
398
+ _a = tmpUrlFromArgs;
399
+ if (_a) return [3 /*break*/, 5];
376
400
  return [4 /*yield*/, abortIfCancelled(clack.text({
377
- message: 'Please enter the URL of your self-hosted Sentry instance.',
401
+ message: "Please enter the URL of your ".concat(urlFromArgs ? '' : 'self-hosted ', "Sentry instance."),
378
402
  placeholder: 'https://sentry.io/',
379
403
  }))];
380
- case 3:
381
- url = _a.sent();
404
+ case 4:
405
+ _a = (_b.sent());
406
+ _b.label = 5;
407
+ case 5:
408
+ url = _a;
409
+ tmpUrlFromArgs = undefined;
382
410
  try {
383
411
  validUrl = new url_1.URL(url).toString();
384
412
  // We assume everywhere else that the URL ends in a slash
@@ -386,13 +414,14 @@ function askForSelfHosted() {
386
414
  validUrl += '/';
387
415
  }
388
416
  }
389
- catch (_b) {
390
- clack.log.error('Please enter a valid URL. (It should look something like "http://sentry.mydomain.com/")');
417
+ catch (_c) {
418
+ clack.log.error('Please enter a valid URL. (It should look something like "https://sentry.mydomain.com/")');
391
419
  }
392
- return [3 /*break*/, 2];
393
- case 4:
420
+ return [3 /*break*/, 3];
421
+ case 6:
422
+ isSelfHostedUrl = new url_1.URL(validUrl).host !== new url_1.URL(SAAS_URL).host;
394
423
  Sentry.setTag('url', validUrl);
395
- Sentry.setTag('self-hosted', true);
424
+ Sentry.setTag('self-hosted', isSelfHostedUrl);
396
425
  return [2 /*return*/, { url: validUrl, selfHosted: true }];
397
426
  }
398
427
  });
@@ -577,11 +606,15 @@ function getPackageDotJson() {
577
606
  }
578
607
  exports.getPackageDotJson = getPackageDotJson;
579
608
  function hasPackageInstalled(packageName, packageJson) {
580
- var _a, _b;
581
- return (!!((_a = packageJson === null || packageJson === void 0 ? void 0 : packageJson.dependencies) === null || _a === void 0 ? void 0 : _a[packageName]) ||
582
- !!((_b = packageJson === null || packageJson === void 0 ? void 0 : packageJson.devDependencies) === null || _b === void 0 ? void 0 : _b[packageName]));
609
+ return getPackageVersion(packageName, packageJson) !== undefined;
583
610
  }
584
611
  exports.hasPackageInstalled = hasPackageInstalled;
612
+ function getPackageVersion(packageName, packageJson) {
613
+ var _a, _b;
614
+ return (((_a = packageJson === null || packageJson === void 0 ? void 0 : packageJson.dependencies) === null || _a === void 0 ? void 0 : _a[packageName]) ||
615
+ ((_b = packageJson === null || packageJson === void 0 ? void 0 : packageJson.devDependencies) === null || _b === void 0 ? void 0 : _b[packageName]));
616
+ }
617
+ exports.getPackageVersion = getPackageVersion;
585
618
  function getPackageManager() {
586
619
  return __awaiter(this, void 0, void 0, function () {
587
620
  var detectedPackageManager, selectedPackageManager;