@sentry/wizard 3.8.0 → 3.9.1
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 +16 -0
- package/bin.ts +14 -0
- package/dist/bin.js +9 -0
- package/dist/bin.js.map +1 -1
- package/dist/lib/Helper/Logging.d.ts +1 -0
- package/dist/lib/Helper/Logging.js +2 -1
- package/dist/lib/Helper/Logging.js.map +1 -1
- package/dist/lib/Setup.js +4 -0
- package/dist/lib/Setup.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/package.json +11 -7
- package/dist/src/apple/xcode-manager.js +6 -2
- package/dist/src/apple/xcode-manager.js.map +1 -1
- package/dist/src/sourcemaps/tools/sentry-cli.js +1 -1
- package/dist/src/sourcemaps/tools/sentry-cli.js.map +1 -1
- package/dist/src/sourcemaps/tools/vite.js +208 -22
- package/dist/src/sourcemaps/tools/vite.js.map +1 -1
- package/dist/src/sveltekit/sdk-setup.d.ts +9 -1
- package/dist/src/sveltekit/sdk-setup.js +73 -29
- package/dist/src/sveltekit/sdk-setup.js.map +1 -1
- package/dist/src/sveltekit/sveltekit-wizard.js +9 -5
- package/dist/src/sveltekit/sveltekit-wizard.js.map +1 -1
- package/dist/src/utils/ast-utils.d.ts +8 -0
- package/dist/src/utils/ast-utils.js +45 -0
- package/dist/src/utils/ast-utils.js.map +1 -0
- package/dist/src/utils/debug.d.ts +2 -0
- package/dist/src/utils/debug.js +51 -0
- package/dist/src/utils/debug.js.map +1 -0
- package/dist/src/utils/string.d.ts +1 -0
- package/dist/src/utils/string.js +10 -0
- package/dist/src/utils/string.js.map +1 -0
- package/dist/test/utils/ast-utils.test.d.ts +1 -0
- package/dist/test/utils/ast-utils.test.js +21 -0
- package/dist/test/utils/ast-utils.test.js.map +1 -0
- package/lib/Helper/Logging.ts +1 -1
- package/lib/Setup.ts +5 -0
- package/lib/Steps/Integrations/ReactNative.ts +7 -3
- package/package.json +11 -7
- package/src/apple/xcode-manager.ts +7 -2
- package/src/sourcemaps/tools/sentry-cli.ts +1 -1
- package/src/sourcemaps/tools/vite.ts +220 -28
- package/src/sveltekit/sdk-setup.ts +122 -43
- package/src/sveltekit/sveltekit-wizard.ts +12 -6
- package/src/utils/ast-utils.ts +20 -0
- package/src/utils/debug.ts +20 -0
- package/src/utils/string.ts +7 -0
- package/test/utils/ast-utils.test.ts +44 -0
- package/dist/src/sveltekit/sentry-cli-setup.d.ts +0 -2
- package/dist/src/sveltekit/sentry-cli-setup.js +0 -71
- package/dist/src/sveltekit/sentry-cli-setup.js.map +0 -1
- package/package-lock.json +0 -8910
- package/src/sveltekit/sentry-cli-setup.ts +0 -27
|
@@ -1,4 +1,15 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
+
var __assign = (this && this.__assign) || function () {
|
|
3
|
+
__assign = Object.assign || function(t) {
|
|
4
|
+
for (var s, i = 1, n = arguments.length; i < n; i++) {
|
|
5
|
+
s = arguments[i];
|
|
6
|
+
for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
|
|
7
|
+
t[p] = s[p];
|
|
8
|
+
}
|
|
9
|
+
return t;
|
|
10
|
+
};
|
|
11
|
+
return __assign.apply(this, arguments);
|
|
12
|
+
};
|
|
2
13
|
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
14
|
if (k2 === undefined) k2 = k;
|
|
4
15
|
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
@@ -65,46 +76,221 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
65
76
|
exports.configureVitePlugin = void 0;
|
|
66
77
|
// @ts-ignore - clack is ESM and TS complains about that. It works though
|
|
67
78
|
var prompts_1 = __importStar(require("@clack/prompts"));
|
|
79
|
+
// @ts-ignore - magicast is ESM and TS complains about that. It works though
|
|
80
|
+
var magicast_1 = require("magicast");
|
|
81
|
+
// @ts-ignore - magicast is ESM and TS complains about that. It works though
|
|
82
|
+
var helpers_1 = require("magicast/helpers");
|
|
83
|
+
var Sentry = __importStar(require("@sentry/node"));
|
|
68
84
|
var chalk_1 = __importDefault(require("chalk"));
|
|
69
85
|
var clack_utils_1 = require("../../utils/clack-utils");
|
|
70
86
|
var package_json_1 = require("../../utils/package-json");
|
|
71
|
-
var
|
|
72
|
-
|
|
87
|
+
var ast_utils_1 = require("../../utils/ast-utils");
|
|
88
|
+
var path = __importStar(require("path"));
|
|
89
|
+
var fs = __importStar(require("fs"));
|
|
90
|
+
var debug_1 = require("../../utils/debug");
|
|
91
|
+
var getViteConfigSnippet = function (options, colors) {
|
|
92
|
+
var rawImportStmt = 'import { sentryVitePlugin } from "@sentry/vite-plugin";';
|
|
93
|
+
var rawGenerateSourceMapsOption = 'sourcemap: true, // Source map generation must be turned on';
|
|
94
|
+
var rawSentryVitePluginFunction = "sentryVitePlugin({\n authToken: process.env.SENTRY_AUTH_TOKEN,\n org: \"".concat(options.orgSlug, "\",\n project: \"").concat(options.projectSlug, "\",").concat(options.selfHosted ? "\n url: \"".concat(options.url, "\",") : '', "\n }),");
|
|
95
|
+
var importStmt = colors ? chalk_1.default.greenBright(rawImportStmt) : rawImportStmt;
|
|
96
|
+
var generateSourceMapsOption = colors
|
|
97
|
+
? chalk_1.default.greenBright(rawGenerateSourceMapsOption)
|
|
98
|
+
: rawGenerateSourceMapsOption;
|
|
99
|
+
var sentryVitePluginFunction = colors
|
|
100
|
+
? chalk_1.default.greenBright(rawSentryVitePluginFunction)
|
|
101
|
+
: rawSentryVitePluginFunction;
|
|
102
|
+
var code = getViteConfigContent(importStmt, generateSourceMapsOption, sentryVitePluginFunction);
|
|
103
|
+
return colors ? chalk_1.default.gray(code) : code;
|
|
73
104
|
};
|
|
105
|
+
var getViteConfigContent = function (importStmt, generateSourceMapsOption, sentryVitePluginFunction) { return "import { defineConfig } from \"vite\";\n".concat(importStmt, "\n\nexport default defineConfig({\n build: {\n ").concat(generateSourceMapsOption, "\n },\n plugins: [\n // Put the Sentry vite plugin after all other plugins\n ").concat(sentryVitePluginFunction, "\n ],\n});\n"); };
|
|
74
106
|
var configureVitePlugin = function (options) { return __awaiter(void 0, void 0, void 0, function () {
|
|
75
|
-
var _a, _b, _c;
|
|
76
|
-
var
|
|
77
|
-
return __generator(this, function (
|
|
78
|
-
switch (
|
|
107
|
+
var _a, _b, _c, viteConfigPath, _d, successfullyAdded;
|
|
108
|
+
var _e;
|
|
109
|
+
return __generator(this, function (_f) {
|
|
110
|
+
switch (_f.label) {
|
|
79
111
|
case 0:
|
|
80
112
|
_a = clack_utils_1.installPackage;
|
|
81
|
-
|
|
113
|
+
_e = {
|
|
82
114
|
packageName: '@sentry/vite-plugin'
|
|
83
115
|
};
|
|
84
116
|
_b = package_json_1.hasPackageInstalled;
|
|
85
117
|
_c = ['@sentry/vite-plugin'];
|
|
86
118
|
return [4 /*yield*/, (0, clack_utils_1.getPackageDotJson)()];
|
|
87
|
-
case 1: return [4 /*yield*/, _a.apply(void 0, [(
|
|
88
|
-
|
|
119
|
+
case 1: return [4 /*yield*/, _a.apply(void 0, [(_e.alreadyInstalled = _b.apply(void 0, _c.concat([_f.sent()])),
|
|
120
|
+
_e)])];
|
|
89
121
|
case 2:
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
console.log(getCodeSnippet(options));
|
|
95
|
-
return [4 /*yield*/, (0, clack_utils_1.abortIfCancelled)((0, prompts_1.select)({
|
|
96
|
-
message: 'Did you copy the snippet above?',
|
|
97
|
-
options: [{ label: 'Yes, continue!', value: true }],
|
|
98
|
-
initialValue: true,
|
|
99
|
-
}))];
|
|
122
|
+
_f.sent();
|
|
123
|
+
_d = (0, ast_utils_1.findScriptFile)(path.resolve(process.cwd(), 'vite.config'));
|
|
124
|
+
if (_d) return [3 /*break*/, 4];
|
|
125
|
+
return [4 /*yield*/, askForViteConfigPath()];
|
|
100
126
|
case 3:
|
|
101
|
-
|
|
102
|
-
|
|
127
|
+
_d = (_f.sent());
|
|
128
|
+
_f.label = 4;
|
|
103
129
|
case 4:
|
|
104
|
-
|
|
130
|
+
viteConfigPath = _d;
|
|
131
|
+
successfullyAdded = false;
|
|
132
|
+
if (!viteConfigPath) return [3 /*break*/, 6];
|
|
133
|
+
return [4 /*yield*/, addVitePluginToConfig(viteConfigPath, options)];
|
|
134
|
+
case 5:
|
|
135
|
+
successfullyAdded = _f.sent();
|
|
136
|
+
return [3 /*break*/, 8];
|
|
137
|
+
case 6: return [4 /*yield*/, createNewViteConfig(options)];
|
|
138
|
+
case 7:
|
|
139
|
+
successfullyAdded = _f.sent();
|
|
140
|
+
_f.label = 8;
|
|
141
|
+
case 8:
|
|
142
|
+
if (!successfullyAdded) return [3 /*break*/, 9];
|
|
143
|
+
Sentry.setTag('ast-mod', 'success');
|
|
144
|
+
return [3 /*break*/, 11];
|
|
145
|
+
case 9:
|
|
146
|
+
Sentry.setTag('ast-mod', 'fail');
|
|
147
|
+
return [4 /*yield*/, showCopyPasteInstructions(path.basename(viteConfigPath || 'vite.config.js'), options)];
|
|
148
|
+
case 10:
|
|
149
|
+
_f.sent();
|
|
150
|
+
_f.label = 11;
|
|
151
|
+
case 11: return [4 /*yield*/, (0, clack_utils_1.addDotEnvSentryBuildPluginFile)(options.authToken)];
|
|
152
|
+
case 12:
|
|
153
|
+
_f.sent();
|
|
105
154
|
return [2 /*return*/];
|
|
106
155
|
}
|
|
107
156
|
});
|
|
108
157
|
}); };
|
|
109
158
|
exports.configureVitePlugin = configureVitePlugin;
|
|
159
|
+
function createNewViteConfig(options) {
|
|
160
|
+
return __awaiter(this, void 0, void 0, function () {
|
|
161
|
+
var e_1;
|
|
162
|
+
return __generator(this, function (_a) {
|
|
163
|
+
switch (_a.label) {
|
|
164
|
+
case 0:
|
|
165
|
+
_a.trys.push([0, 2, , 3]);
|
|
166
|
+
return [4 /*yield*/, fs.promises.writeFile('vite.config.js', getViteConfigSnippet(options, false))];
|
|
167
|
+
case 1:
|
|
168
|
+
_a.sent();
|
|
169
|
+
Sentry.setTag('created-new-config', 'success');
|
|
170
|
+
return [2 /*return*/, true];
|
|
171
|
+
case 2:
|
|
172
|
+
e_1 = _a.sent();
|
|
173
|
+
(0, debug_1.debug)(e_1);
|
|
174
|
+
Sentry.setTag('created-new-config', 'fail');
|
|
175
|
+
prompts_1.default.log.warn("Could not create a new ".concat(chalk_1.default.cyan('vite.config.js'), " file. Please create one manually and follow the instructions below."));
|
|
176
|
+
prompts_1.default.log.info(chalk_1.default.gray('More information about vite configs: https://vitejs.dev/config/'));
|
|
177
|
+
return [2 /*return*/, false];
|
|
178
|
+
case 3: return [2 /*return*/];
|
|
179
|
+
}
|
|
180
|
+
});
|
|
181
|
+
});
|
|
182
|
+
}
|
|
183
|
+
function addVitePluginToConfig(viteConfigPath, options) {
|
|
184
|
+
return __awaiter(this, void 0, void 0, function () {
|
|
185
|
+
var prettyViteConfigFilename, viteConfigContent, mod, shouldContinue, org, project, selfHosted, url, code, e_2;
|
|
186
|
+
return __generator(this, function (_a) {
|
|
187
|
+
switch (_a.label) {
|
|
188
|
+
case 0:
|
|
189
|
+
_a.trys.push([0, 5, , 6]);
|
|
190
|
+
prettyViteConfigFilename = chalk_1.default.cyan(path.basename(viteConfigPath));
|
|
191
|
+
return [4 /*yield*/, fs.promises.readFile(viteConfigPath)];
|
|
192
|
+
case 1:
|
|
193
|
+
viteConfigContent = (_a.sent()).toString();
|
|
194
|
+
mod = (0, magicast_1.parseModule)(viteConfigContent);
|
|
195
|
+
if (!(0, ast_utils_1.hasSentryContent)(mod)) return [3 /*break*/, 3];
|
|
196
|
+
return [4 /*yield*/, (0, clack_utils_1.abortIfCancelled)(prompts_1.default.select({
|
|
197
|
+
message: "".concat(prettyViteConfigFilename, " already contains Sentry-related code. Should the wizard modify it anyway?"),
|
|
198
|
+
options: [
|
|
199
|
+
{
|
|
200
|
+
label: 'Yes, add the Sentry Vite plugin',
|
|
201
|
+
value: true,
|
|
202
|
+
},
|
|
203
|
+
{
|
|
204
|
+
label: 'No, show me instructions to manually add the plugin',
|
|
205
|
+
value: false,
|
|
206
|
+
},
|
|
207
|
+
],
|
|
208
|
+
initialValue: true,
|
|
209
|
+
}))];
|
|
210
|
+
case 2:
|
|
211
|
+
shouldContinue = _a.sent();
|
|
212
|
+
if (!shouldContinue) {
|
|
213
|
+
Sentry.setTag('ast-mod-fail-reason', 'has-sentry-content');
|
|
214
|
+
return [2 /*return*/, false];
|
|
215
|
+
}
|
|
216
|
+
_a.label = 3;
|
|
217
|
+
case 3:
|
|
218
|
+
org = options.orgSlug, project = options.projectSlug, selfHosted = options.selfHosted, url = options.url;
|
|
219
|
+
(0, helpers_1.addVitePlugin)(mod, {
|
|
220
|
+
imported: 'sentryVitePlugin',
|
|
221
|
+
from: '@sentry/vite-plugin',
|
|
222
|
+
constructor: 'sentryVitePlugin',
|
|
223
|
+
options: __assign({ org: org, project: project }, (selfHosted && { url: url })),
|
|
224
|
+
});
|
|
225
|
+
code = (0, magicast_1.generateCode)(mod.$ast).code;
|
|
226
|
+
return [4 /*yield*/, fs.promises.writeFile(viteConfigPath, code)];
|
|
227
|
+
case 4:
|
|
228
|
+
_a.sent();
|
|
229
|
+
prompts_1.default.log.success("Added the Sentry Vite plugin to ".concat(prettyViteConfigFilename));
|
|
230
|
+
return [2 /*return*/, true];
|
|
231
|
+
case 5:
|
|
232
|
+
e_2 = _a.sent();
|
|
233
|
+
(0, debug_1.debug)(e_2);
|
|
234
|
+
Sentry.setTag('ast-mod-fail-reason', 'insertion-fail');
|
|
235
|
+
return [2 /*return*/, false];
|
|
236
|
+
case 6: return [2 /*return*/];
|
|
237
|
+
}
|
|
238
|
+
});
|
|
239
|
+
});
|
|
240
|
+
}
|
|
241
|
+
function showCopyPasteInstructions(viteConfigFilename, options) {
|
|
242
|
+
return __awaiter(this, void 0, void 0, function () {
|
|
243
|
+
return __generator(this, function (_a) {
|
|
244
|
+
switch (_a.label) {
|
|
245
|
+
case 0:
|
|
246
|
+
prompts_1.default.log.step("Add the following code to your ".concat(chalk_1.default.cyan(viteConfigFilename), " file:"));
|
|
247
|
+
// Intentionally logging directly to console here so that the code can be copied/pasted directly
|
|
248
|
+
// eslint-disable-next-line no-console
|
|
249
|
+
console.log("\n".concat(getViteConfigSnippet(options, true)));
|
|
250
|
+
return [4 /*yield*/, (0, clack_utils_1.abortIfCancelled)((0, prompts_1.select)({
|
|
251
|
+
message: 'Did you copy the snippet above?',
|
|
252
|
+
options: [{ label: 'Yes, continue!', value: true }],
|
|
253
|
+
initialValue: true,
|
|
254
|
+
}))];
|
|
255
|
+
case 1:
|
|
256
|
+
_a.sent();
|
|
257
|
+
return [2 /*return*/];
|
|
258
|
+
}
|
|
259
|
+
});
|
|
260
|
+
});
|
|
261
|
+
}
|
|
262
|
+
function askForViteConfigPath() {
|
|
263
|
+
return __awaiter(this, void 0, void 0, function () {
|
|
264
|
+
var hasViteConfig;
|
|
265
|
+
return __generator(this, function (_a) {
|
|
266
|
+
switch (_a.label) {
|
|
267
|
+
case 0: return [4 /*yield*/, (0, clack_utils_1.abortIfCancelled)(prompts_1.default.confirm({
|
|
268
|
+
message: "Do you have a vite config file (e.g. ".concat(chalk_1.default.cyan('vite.config.js'), "?"),
|
|
269
|
+
initialValue: true,
|
|
270
|
+
}))];
|
|
271
|
+
case 1:
|
|
272
|
+
hasViteConfig = _a.sent();
|
|
273
|
+
if (!hasViteConfig) {
|
|
274
|
+
return [2 /*return*/, undefined];
|
|
275
|
+
}
|
|
276
|
+
return [4 /*yield*/, (0, clack_utils_1.abortIfCancelled)(prompts_1.default.text({
|
|
277
|
+
message: 'Please enter the path to your vite config file:',
|
|
278
|
+
placeholder: ".".concat(path.sep, "vite.config.js"),
|
|
279
|
+
validate: function (value) {
|
|
280
|
+
if (!value) {
|
|
281
|
+
return 'Please enter a path.';
|
|
282
|
+
}
|
|
283
|
+
try {
|
|
284
|
+
fs.accessSync(value);
|
|
285
|
+
}
|
|
286
|
+
catch (_a) {
|
|
287
|
+
return 'Could not access the file at this path.';
|
|
288
|
+
}
|
|
289
|
+
},
|
|
290
|
+
}))];
|
|
291
|
+
case 2: return [2 /*return*/, _a.sent()];
|
|
292
|
+
}
|
|
293
|
+
});
|
|
294
|
+
});
|
|
295
|
+
}
|
|
110
296
|
//# sourceMappingURL=vite.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"vite.js","sourceRoot":"","sources":["../../../../src/sourcemaps/tools/vite.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,yEAAyE;AACzE,wDAA+C;AAC/C,gDAA0B;AAC1B,uDAKiC;AACjC,yDAA+D;AAO/D,IAAM,cAAc,GAAG,UAAC,OAAgD;IACtE,OAAA,eAAK,CAAC,IAAI,CAAC,oDAEX,eAAK,CAAC,WAAW,CAAC,wDAAwD,CAAC,iEAIvE,eAAK,CAAC,WAAW,CACjB,6DAA6D,CAC9D,kGAIC,eAAK,CAAC,WAAW,CAAC,4FAEV,OAAO,CAAC,OAAO,mCACX,OAAO,CAAC,WAAW,gBAC/B,OAAO,CAAC,UAAU,CAAC,CAAC,CAAC,yBAAiB,OAAO,CAAC,GAAG,QAAI,CAAC,CAAC,CAAC,EAAE,cAExD,CAAC,kBAGR,CAAC;AArBA,CAqBA,CAAC;AAEI,IAAM,mBAAmB,GAC9B,UAAO,OAAO;;;;;;gBACN,KAAA,4BAAc,CAAA;;oBAClB,WAAW,EAAE,qBAAqB;;gBAChB,KAAA,kCAAmB,CAAA;sBACnC,qBAAqB;gBACrB,qBAAM,IAAA,+BAAiB,GAAE,EAAA;oBAJ7B,qBAAM,mBAEJ,mBAAgB,GAAE,4BAEhB,SAAyB,GAC1B;6BACD,EAAA;;gBANF,SAME,CAAC;gBAEH,iBAAK,CAAC,GAAG,CAAC,IAAI,CACZ,yCAAkC,eAAK,CAAC,IAAI,CAAC,gBAAgB,CAAC,WAAQ,CACvE,CAAC;gBAEF,8FAA8F;gBAC9F,sCAAsC;gBACtC,OAAO,CAAC,GAAG,CAAC,cAAc,CAAC,OAAO,CAAC,CAAC,CAAC;gBAErC,qBAAM,IAAA,8BAAgB,EACpB,IAAA,gBAAM,EAAC;wBACL,OAAO,EAAE,iCAAiC;wBAC1C,OAAO,EAAE,CAAC,EAAE,KAAK,EAAE,gBAAgB,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC;wBACnD,YAAY,EAAE,IAAI;qBACnB,CAAC,CACH,EAAA;;gBAND,SAMC,CAAC;gBAEF,qBAAM,IAAA,4CAA8B,EAAC,OAAO,CAAC,SAAS,CAAC,EAAA;;gBAAvD,SAAuD,CAAC;;;;KACzD,CAAC;AA3BS,QAAA,mBAAmB,uBA2B5B","sourcesContent":["// @ts-ignore - clack is ESM and TS complains about that. It works though\nimport clack, { select } from '@clack/prompts';\nimport chalk from 'chalk';\nimport {\n abortIfCancelled,\n addDotEnvSentryBuildPluginFile,\n getPackageDotJson,\n installPackage,\n} from '../../utils/clack-utils';\nimport { hasPackageInstalled } from '../../utils/package-json';\n\nimport {\n SourceMapUploadToolConfigurationFunction,\n SourceMapUploadToolConfigurationOptions,\n} from './types';\n\nconst getCodeSnippet = (options: SourceMapUploadToolConfigurationOptions) =>\n chalk.gray(`\nimport { defineConfig } from \"vite\";\n${chalk.greenBright('import { sentryVitePlugin } from \"@sentry/vite-plugin\"')};\n\nexport default defineConfig({\n build: {\n ${chalk.greenBright(\n 'sourcemap: true, // Source map generation must be turned on',\n )}\n },\n plugins: [\n // Put the Sentry vite plugin after all other plugins\n ${chalk.greenBright(`sentryVitePlugin({\n authToken: process.env.SENTRY_AUTH_TOKEN,\n org: \"${options.orgSlug}\",\n project: \"${options.projectSlug}\",${\n options.selfHosted ? `\\n url: \"${options.url}\",` : ''\n }\n }),`)}\n ],\n});\n`);\n\nexport const configureVitePlugin: SourceMapUploadToolConfigurationFunction =\n async (options) => {\n await installPackage({\n packageName: '@sentry/vite-plugin',\n alreadyInstalled: hasPackageInstalled(\n '@sentry/vite-plugin',\n await getPackageDotJson(),\n ),\n });\n\n clack.log.step(\n `Add the following code to your ${chalk.bold('vite.config.js')} file:`,\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(getCodeSnippet(options));\n\n await abortIfCancelled(\n select({\n message: 'Did you copy the snippet above?',\n options: [{ label: 'Yes, continue!', value: true }],\n initialValue: true,\n }),\n );\n\n await addDotEnvSentryBuildPluginFile(options.authToken);\n };\n"]}
|
|
1
|
+
{"version":3,"file":"vite.js","sourceRoot":"","sources":["../../../../src/sourcemaps/tools/vite.ts"],"names":[],"mappings":"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","sourcesContent":["// @ts-ignore - clack is ESM and TS complains about that. It works though\nimport clack, { select } from '@clack/prompts';\n// @ts-ignore - magicast is ESM and TS complains about that. It works though\nimport { generateCode, parseModule } from 'magicast';\n// @ts-ignore - magicast is ESM and TS complains about that. It works though\nimport { addVitePlugin } from 'magicast/helpers';\n\nimport * as Sentry from '@sentry/node';\n\nimport chalk from 'chalk';\nimport {\n abortIfCancelled,\n addDotEnvSentryBuildPluginFile,\n getPackageDotJson,\n installPackage,\n} from '../../utils/clack-utils';\nimport { hasPackageInstalled } from '../../utils/package-json';\n\nimport {\n SourceMapUploadToolConfigurationFunction,\n SourceMapUploadToolConfigurationOptions,\n} from './types';\nimport { findScriptFile, hasSentryContent } from '../../utils/ast-utils';\n\nimport * as path from 'path';\nimport * as fs from 'fs';\nimport { debug } from '../../utils/debug';\n\nconst getViteConfigSnippet = (\n options: SourceMapUploadToolConfigurationOptions,\n colors: boolean,\n) => {\n const rawImportStmt =\n 'import { sentryVitePlugin } from \"@sentry/vite-plugin\";';\n const rawGenerateSourceMapsOption =\n 'sourcemap: true, // Source map generation must be turned on';\n const rawSentryVitePluginFunction = `sentryVitePlugin({\n authToken: process.env.SENTRY_AUTH_TOKEN,\n org: \"${options.orgSlug}\",\n project: \"${options.projectSlug}\",${\n options.selfHosted ? `\\n url: \"${options.url}\",` : ''\n }\n }),`;\n\n const importStmt = colors ? chalk.greenBright(rawImportStmt) : rawImportStmt;\n const generateSourceMapsOption = colors\n ? chalk.greenBright(rawGenerateSourceMapsOption)\n : rawGenerateSourceMapsOption;\n const sentryVitePluginFunction = colors\n ? chalk.greenBright(rawSentryVitePluginFunction)\n : rawSentryVitePluginFunction;\n\n const code = getViteConfigContent(\n importStmt,\n generateSourceMapsOption,\n sentryVitePluginFunction,\n );\n return colors ? chalk.gray(code) : code;\n};\n\nconst getViteConfigContent = (\n importStmt: string,\n generateSourceMapsOption: string,\n sentryVitePluginFunction: string,\n) => `import { defineConfig } from \"vite\";\n${importStmt}\n\nexport default defineConfig({\n build: {\n ${generateSourceMapsOption}\n },\n plugins: [\n // Put the Sentry vite plugin after all other plugins\n ${sentryVitePluginFunction}\n ],\n});\n`;\n\nexport const configureVitePlugin: SourceMapUploadToolConfigurationFunction =\n async (options) => {\n await installPackage({\n packageName: '@sentry/vite-plugin',\n alreadyInstalled: hasPackageInstalled(\n '@sentry/vite-plugin',\n await getPackageDotJson(),\n ),\n });\n\n const viteConfigPath =\n findScriptFile(path.resolve(process.cwd(), 'vite.config')) ||\n (await askForViteConfigPath());\n\n let successfullyAdded = false;\n if (viteConfigPath) {\n successfullyAdded = await addVitePluginToConfig(viteConfigPath, options);\n } else {\n successfullyAdded = await createNewViteConfig(options);\n }\n\n if (successfullyAdded) {\n Sentry.setTag('ast-mod', 'success');\n } else {\n Sentry.setTag('ast-mod', 'fail');\n await showCopyPasteInstructions(\n path.basename(viteConfigPath || 'vite.config.js'),\n options,\n );\n }\n\n await addDotEnvSentryBuildPluginFile(options.authToken);\n };\n\nasync function createNewViteConfig(\n options: SourceMapUploadToolConfigurationOptions,\n): Promise<boolean> {\n try {\n await fs.promises.writeFile(\n 'vite.config.js',\n getViteConfigSnippet(options, false),\n );\n Sentry.setTag('created-new-config', 'success');\n return true;\n } catch (e) {\n debug(e);\n Sentry.setTag('created-new-config', 'fail');\n clack.log.warn(\n `Could not create a new ${chalk.cyan(\n 'vite.config.js',\n )} file. Please create one manually and follow the instructions below.`,\n );\n\n clack.log.info(\n chalk.gray(\n 'More information about vite configs: https://vitejs.dev/config/',\n ),\n );\n\n return false;\n }\n}\n\nasync function addVitePluginToConfig(\n viteConfigPath: string,\n options: SourceMapUploadToolConfigurationOptions,\n): Promise<boolean> {\n try {\n const prettyViteConfigFilename = chalk.cyan(path.basename(viteConfigPath));\n\n const viteConfigContent = (\n await fs.promises.readFile(viteConfigPath)\n ).toString();\n\n const mod = parseModule(viteConfigContent);\n\n if (hasSentryContent(mod)) {\n const shouldContinue = await abortIfCancelled(\n clack.select({\n message: `${prettyViteConfigFilename} already contains Sentry-related code. Should the wizard modify it anyway?`,\n options: [\n {\n label: 'Yes, add the Sentry Vite plugin',\n value: true,\n },\n {\n label: 'No, show me instructions to manually add the plugin',\n value: false,\n },\n ],\n initialValue: true,\n }),\n );\n\n if (!shouldContinue) {\n Sentry.setTag('ast-mod-fail-reason', 'has-sentry-content');\n return false;\n }\n }\n\n const { orgSlug: org, projectSlug: project, selfHosted, url } = options;\n\n addVitePlugin(mod, {\n imported: 'sentryVitePlugin',\n from: '@sentry/vite-plugin',\n constructor: 'sentryVitePlugin',\n options: {\n org,\n project,\n ...(selfHosted && { url }),\n },\n });\n\n const code = generateCode(mod.$ast).code;\n\n await fs.promises.writeFile(viteConfigPath, code);\n\n clack.log.success(\n `Added the Sentry Vite plugin to ${prettyViteConfigFilename}`,\n );\n\n return true;\n } catch (e) {\n debug(e);\n Sentry.setTag('ast-mod-fail-reason', 'insertion-fail');\n return false;\n }\n}\n\nasync function showCopyPasteInstructions(\n viteConfigFilename: string,\n options: SourceMapUploadToolConfigurationOptions,\n) {\n clack.log.step(\n `Add the following code to your ${chalk.cyan(viteConfigFilename)} file:`,\n );\n\n // Intentionally 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${getViteConfigSnippet(options, true)}`);\n\n await abortIfCancelled(\n select({\n message: 'Did you copy the snippet above?',\n options: [{ label: 'Yes, continue!', value: true }],\n initialValue: true,\n }),\n );\n}\n\nasync function askForViteConfigPath(): Promise<string | undefined> {\n const hasViteConfig = await abortIfCancelled(\n clack.confirm({\n message: `Do you have a vite config file (e.g. ${chalk.cyan(\n 'vite.config.js',\n )}?`,\n initialValue: true,\n }),\n );\n\n if (!hasViteConfig) {\n return undefined;\n }\n\n return await abortIfCancelled(\n clack.text({\n message: 'Please enter the path to your vite config file:',\n placeholder: `.${path.sep}vite.config.js`,\n validate: (value) => {\n if (!value) {\n return 'Please enter a path.';\n }\n\n try {\n fs.accessSync(value);\n } catch {\n return 'Could not access the file at this path.';\n }\n },\n }),\n );\n}\n"]}
|
|
@@ -9,5 +9,13 @@ export type PartialSvelteConfig = {
|
|
|
9
9
|
};
|
|
10
10
|
};
|
|
11
11
|
};
|
|
12
|
-
|
|
12
|
+
type ProjectInfo = {
|
|
13
|
+
dsn: string;
|
|
14
|
+
org: string;
|
|
15
|
+
project: string;
|
|
16
|
+
selfHosted: boolean;
|
|
17
|
+
url: string;
|
|
18
|
+
};
|
|
19
|
+
export declare function createOrMergeSvelteKitFiles(projectInfo: ProjectInfo, svelteConfig: PartialSvelteConfig): Promise<void>;
|
|
13
20
|
export declare function loadSvelteConfig(): Promise<PartialSvelteConfig>;
|
|
21
|
+
export {};
|
|
@@ -1,4 +1,15 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
+
var __assign = (this && this.__assign) || function () {
|
|
3
|
+
__assign = Object.assign || function(t) {
|
|
4
|
+
for (var s, i = 1, n = arguments.length; i < n; i++) {
|
|
5
|
+
s = arguments[i];
|
|
6
|
+
for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
|
|
7
|
+
t[p] = s[p];
|
|
8
|
+
}
|
|
9
|
+
return t;
|
|
10
|
+
};
|
|
11
|
+
return __assign.apply(this, arguments);
|
|
12
|
+
};
|
|
2
13
|
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
14
|
if (k2 === undefined) k2 = k;
|
|
4
15
|
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
@@ -84,18 +95,21 @@ var magicast_1 = require("magicast");
|
|
|
84
95
|
var helpers_1 = require("magicast/helpers");
|
|
85
96
|
var templates_1 = require("./templates");
|
|
86
97
|
var clack_utils_1 = require("../utils/clack-utils");
|
|
98
|
+
var debug_1 = require("../utils/debug");
|
|
99
|
+
var ast_utils_1 = require("../utils/ast-utils");
|
|
87
100
|
var SVELTE_CONFIG_FILE = 'svelte.config.js';
|
|
88
|
-
function createOrMergeSvelteKitFiles(
|
|
101
|
+
function createOrMergeSvelteKitFiles(projectInfo, svelteConfig) {
|
|
89
102
|
return __awaiter(this, void 0, void 0, function () {
|
|
90
|
-
var _a, clientHooksPath, serverHooksPath, originalClientHooksFile, originalServerHooksFile, viteConfig, fileEnding;
|
|
103
|
+
var _a, clientHooksPath, serverHooksPath, originalClientHooksFile, originalServerHooksFile, viteConfig, fileEnding, dsn;
|
|
91
104
|
return __generator(this, function (_b) {
|
|
92
105
|
switch (_b.label) {
|
|
93
106
|
case 0:
|
|
94
107
|
_a = getHooksConfigDirs(svelteConfig), clientHooksPath = _a.clientHooksPath, serverHooksPath = _a.serverHooksPath;
|
|
95
|
-
originalClientHooksFile =
|
|
96
|
-
originalServerHooksFile =
|
|
97
|
-
viteConfig =
|
|
108
|
+
originalClientHooksFile = (0, ast_utils_1.findScriptFile)(clientHooksPath);
|
|
109
|
+
originalServerHooksFile = (0, ast_utils_1.findScriptFile)(serverHooksPath);
|
|
110
|
+
viteConfig = (0, ast_utils_1.findScriptFile)(path.resolve(process.cwd(), 'vite.config'));
|
|
98
111
|
fileEnding = (0, clack_utils_1.isUsingTypeScript)() ? 'ts' : 'js';
|
|
112
|
+
dsn = projectInfo.dsn;
|
|
99
113
|
if (!!originalClientHooksFile) return [3 /*break*/, 2];
|
|
100
114
|
prompts_1.default.log.info('No client hooks file found, creating a new one.');
|
|
101
115
|
return [4 /*yield*/, createNewHooksFile("".concat(clientHooksPath, ".").concat(fileEnding), 'client', dsn)];
|
|
@@ -123,7 +137,7 @@ function createOrMergeSvelteKitFiles(dsn, svelteConfig) {
|
|
|
123
137
|
_b.label = 8;
|
|
124
138
|
case 8:
|
|
125
139
|
if (!viteConfig) return [3 /*break*/, 10];
|
|
126
|
-
return [4 /*yield*/, modifyViteConfig(viteConfig)];
|
|
140
|
+
return [4 /*yield*/, modifyViteConfig(viteConfig, projectInfo)];
|
|
127
141
|
case 9:
|
|
128
142
|
_b.sent();
|
|
129
143
|
_b.label = 10;
|
|
@@ -153,15 +167,6 @@ function getHooksConfigDirs(svelteConfig) {
|
|
|
153
167
|
serverHooksPath: userServerHooksPath || defaultServerHooksPath,
|
|
154
168
|
};
|
|
155
169
|
}
|
|
156
|
-
/**
|
|
157
|
-
* Checks if a hooks file exists and returns the full path to the file with the correct file type.
|
|
158
|
-
*/
|
|
159
|
-
function findHooksFile(hooksFile) {
|
|
160
|
-
var possibleFileTypes = ['.js', '.ts', '.mjs'];
|
|
161
|
-
return possibleFileTypes
|
|
162
|
-
.map(function (type) { return "".concat(hooksFile).concat(type); })
|
|
163
|
-
.find(function (file) { return fs.existsSync(file); });
|
|
164
|
-
}
|
|
165
170
|
/**
|
|
166
171
|
* Reads the template, replaces the dsn placeholder with the actual dsn and writes the file to @param hooksFileDest
|
|
167
172
|
*/
|
|
@@ -205,9 +210,10 @@ function mergeHooksFile(hooksFile, hookType, dsn) {
|
|
|
205
210
|
case 0: return [4 /*yield*/, (0, magicast_1.loadFile)(hooksFile)];
|
|
206
211
|
case 1:
|
|
207
212
|
originalHooksMod = _a.sent();
|
|
208
|
-
if (
|
|
213
|
+
if ((0, ast_utils_1.hasSentryContent)(originalHooksMod)) {
|
|
209
214
|
// We don't want to mess with files that already have Sentry content.
|
|
210
215
|
// Let's just bail out at this point.
|
|
216
|
+
prompts_1.default.log.warn("File ".concat(chalk_1.default.cyan(path.basename(hooksFile)), " already contains Sentry code.\nSkipping adding Sentry functionality to."));
|
|
211
217
|
return [2 /*return*/];
|
|
212
218
|
}
|
|
213
219
|
originalHooksMod.imports.$add({
|
|
@@ -369,14 +375,6 @@ function wrapHandle(mod) {
|
|
|
369
375
|
// It's possible sequence is already imported. in this case, magicast throws but that's fine.
|
|
370
376
|
}
|
|
371
377
|
}
|
|
372
|
-
/** Checks if the Sentry SvelteKit SDK is already mentioned in the file */
|
|
373
|
-
function hasSentryContent(fileName, fileContent) {
|
|
374
|
-
if (fileContent.includes('@sentry/sveltekit')) {
|
|
375
|
-
prompts_1.default.log.warn("File ".concat(chalk_1.default.cyan(path.basename(fileName)), " already contains Sentry code.\nSkipping adding Sentry functionality to ").concat(chalk_1.default.cyan(path.basename(fileName)), "."));
|
|
376
|
-
return true;
|
|
377
|
-
}
|
|
378
|
-
return false;
|
|
379
|
-
}
|
|
380
378
|
function loadSvelteConfig() {
|
|
381
379
|
return __awaiter(this, void 0, void 0, function () {
|
|
382
380
|
var configFilePath, configUrl, svelteConfigModule, e_1;
|
|
@@ -410,33 +408,79 @@ function loadSvelteConfig() {
|
|
|
410
408
|
});
|
|
411
409
|
}
|
|
412
410
|
exports.loadSvelteConfig = loadSvelteConfig;
|
|
413
|
-
function modifyViteConfig(viteConfigPath) {
|
|
411
|
+
function modifyViteConfig(viteConfigPath, projectInfo) {
|
|
414
412
|
return __awaiter(this, void 0, void 0, function () {
|
|
415
|
-
var viteConfigContent, viteModule, code;
|
|
413
|
+
var viteConfigContent, org, project, url, selfHosted, viteModule, code, e_2;
|
|
416
414
|
return __generator(this, function (_a) {
|
|
417
415
|
switch (_a.label) {
|
|
418
416
|
case 0: return [4 /*yield*/, fs.promises.readFile(viteConfigPath, 'utf-8')];
|
|
419
417
|
case 1:
|
|
420
418
|
viteConfigContent = (_a.sent()).toString();
|
|
421
|
-
|
|
419
|
+
org = projectInfo.org, project = projectInfo.project, url = projectInfo.url, selfHosted = projectInfo.selfHosted;
|
|
420
|
+
_a.label = 2;
|
|
421
|
+
case 2:
|
|
422
|
+
_a.trys.push([2, 4, , 6]);
|
|
423
|
+
viteModule = (0, magicast_1.parseModule)(viteConfigContent);
|
|
424
|
+
if ((0, ast_utils_1.hasSentryContent)(viteModule)) {
|
|
425
|
+
prompts_1.default.log.warn("File ".concat(chalk_1.default.cyan(path.basename(viteConfigPath)), " already contains Sentry code.\nSkipping adding Sentry functionality to."));
|
|
422
426
|
return [2 /*return*/];
|
|
423
427
|
}
|
|
424
|
-
viteModule = (0, magicast_1.parseModule)(viteConfigContent);
|
|
425
428
|
(0, helpers_1.addVitePlugin)(viteModule, {
|
|
426
429
|
imported: 'sentrySvelteKit',
|
|
427
430
|
from: '@sentry/sveltekit',
|
|
428
431
|
constructor: 'sentrySvelteKit',
|
|
432
|
+
options: {
|
|
433
|
+
sourceMapsUploadOptions: __assign({ org: org, project: project }, (selfHosted && { url: url })),
|
|
434
|
+
},
|
|
429
435
|
index: 0,
|
|
430
436
|
});
|
|
431
437
|
code = (0, magicast_1.generateCode)(viteModule.$ast).code;
|
|
432
438
|
return [4 /*yield*/, fs.promises.writeFile(viteConfigPath, code)];
|
|
433
|
-
case
|
|
439
|
+
case 3:
|
|
440
|
+
_a.sent();
|
|
441
|
+
return [3 /*break*/, 6];
|
|
442
|
+
case 4:
|
|
443
|
+
e_2 = _a.sent();
|
|
444
|
+
(0, debug_1.debug)(e_2);
|
|
445
|
+
return [4 /*yield*/, showFallbackViteCopyPasteSnippet(viteConfigPath, getViteConfigCodeSnippet(org, project, selfHosted, url))];
|
|
446
|
+
case 5:
|
|
447
|
+
_a.sent();
|
|
448
|
+
return [3 /*break*/, 6];
|
|
449
|
+
case 6: return [2 /*return*/];
|
|
450
|
+
}
|
|
451
|
+
});
|
|
452
|
+
});
|
|
453
|
+
}
|
|
454
|
+
function showFallbackViteCopyPasteSnippet(viteConfigPath, codeSnippet) {
|
|
455
|
+
return __awaiter(this, void 0, void 0, function () {
|
|
456
|
+
var viteConfigFilename;
|
|
457
|
+
return __generator(this, function (_a) {
|
|
458
|
+
switch (_a.label) {
|
|
459
|
+
case 0:
|
|
460
|
+
viteConfigFilename = path.basename(viteConfigPath);
|
|
461
|
+
prompts_1.default.log.warning("Couldn't automatically modify your ".concat(chalk_1.default.cyan(viteConfigFilename), "\n").concat(chalk_1.default.dim("This sometimes happens when we encounter more complex vite configs.\nIt may not seem like it but sometimes our magical powers are limited ;)")));
|
|
462
|
+
prompts_1.default.log.info("But don't worry - it's super easy to do this yourself!");
|
|
463
|
+
prompts_1.default.log.step("Add the following code to your ".concat(chalk_1.default.cyan(viteConfigFilename), ":"));
|
|
464
|
+
// Intentionally logging to console here for easier copy/pasting
|
|
465
|
+
// eslint-disable-next-line no-console
|
|
466
|
+
console.log(codeSnippet);
|
|
467
|
+
return [4 /*yield*/, (0, clack_utils_1.abortIfCancelled)(prompts_1.default.select({
|
|
468
|
+
message: 'Did you copy the snippet above?',
|
|
469
|
+
options: [
|
|
470
|
+
{ label: 'Yes!', value: true, hint: "Great, that's already it!" },
|
|
471
|
+
],
|
|
472
|
+
initialValue: true,
|
|
473
|
+
}))];
|
|
474
|
+
case 1:
|
|
434
475
|
_a.sent();
|
|
435
476
|
return [2 /*return*/];
|
|
436
477
|
}
|
|
437
478
|
});
|
|
438
479
|
});
|
|
439
480
|
}
|
|
481
|
+
var getViteConfigCodeSnippet = function (org, project, selfHosted, url) {
|
|
482
|
+
return chalk_1.default.gray("\nimport { sveltekit } from '@sveltejs/kit/vite';\nimport { defineConfig } from 'vite';\n".concat(chalk_1.default.greenBright("import { sentrySvelteKit } from '@sentry/sveltekit'"), "\n\nexport default defineConfig({\n plugins: [\n // Make sure `sentrySvelteKit` is registered before `sveltekit`\n ").concat(chalk_1.default.greenBright("sentrySvelteKit({\n sourceMapsUploadOptions: {\n org: '".concat(org, "',\n project: '").concat(project, "',").concat(selfHosted ? "\n url: '".concat(url, "',") : '', "\n } \n }),")), "\n sveltekit(),\n ]\n});\n"));
|
|
483
|
+
};
|
|
440
484
|
/**
|
|
441
485
|
* We want to insert the init call on top of the file but after all import statements
|
|
442
486
|
*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sdk-setup.js","sourceRoot":"","sources":["../../../src/sveltekit/sdk-setup.ts"],"names":[],"mappings":"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","sourcesContent":["import type { ExportNamedDeclaration, Program } from '@babel/types';\nimport * as fs from 'fs';\nimport * as path from 'path';\nimport * as url from 'url';\nimport chalk from 'chalk';\n\n// @ts-ignore - clack is ESM and TS complains about that. It works though\nimport clack from '@clack/prompts';\n// @ts-ignore - magicast is ESM and TS complains about that. It works though\nimport type { ProxifiedModule } from 'magicast';\n// @ts-ignore - magicast is ESM and TS complains about that. It works though\nimport { builders, generateCode, loadFile, parseModule } from 'magicast';\n// @ts-ignore - magicast is ESM and TS complains about that. It works though\nimport { addVitePlugin } from 'magicast/helpers';\nimport { getClientHooksTemplate, getServerHooksTemplate } from './templates';\nimport { isUsingTypeScript } from '../utils/clack-utils';\n\nconst SVELTE_CONFIG_FILE = 'svelte.config.js';\n\nexport type PartialSvelteConfig = {\n kit?: {\n files?: {\n hooks?: {\n client?: string;\n server?: string;\n };\n routes?: string;\n };\n };\n};\n\nexport async function createOrMergeSvelteKitFiles(\n dsn: string,\n svelteConfig: PartialSvelteConfig,\n): Promise<void> {\n const { clientHooksPath, serverHooksPath } = getHooksConfigDirs(svelteConfig);\n\n // full file paths with correct file ending (or undefined if not found)\n const originalClientHooksFile = findHooksFile(clientHooksPath);\n const originalServerHooksFile = findHooksFile(serverHooksPath);\n\n const viteConfig = findHooksFile(path.resolve(process.cwd(), 'vite.config'));\n\n const fileEnding = isUsingTypeScript() ? 'ts' : 'js';\n\n if (!originalClientHooksFile) {\n clack.log.info('No client hooks file found, creating a new one.');\n await createNewHooksFile(`${clientHooksPath}.${fileEnding}`, 'client', dsn);\n }\n if (!originalServerHooksFile) {\n clack.log.info('No server hooks file found, creating a new one.');\n await createNewHooksFile(`${serverHooksPath}.${fileEnding}`, 'server', dsn);\n }\n\n if (originalClientHooksFile) {\n await mergeHooksFile(originalClientHooksFile, 'client', dsn);\n }\n if (originalServerHooksFile) {\n await mergeHooksFile(originalServerHooksFile, 'server', dsn);\n }\n\n if (viteConfig) {\n await modifyViteConfig(viteConfig);\n }\n}\n\n/**\n * Attempts to read the svelte.config.js file to find the location of the hooks files.\n * If users specified a custom location, we'll use that. Otherwise, we'll use the default.\n */\nfunction getHooksConfigDirs(svelteConfig: PartialSvelteConfig): {\n clientHooksPath: string;\n serverHooksPath: string;\n} {\n const relativeUserClientHooksPath = svelteConfig?.kit?.files?.hooks?.client;\n const relativeUserServerHooksPath = svelteConfig?.kit?.files?.hooks?.server;\n const userClientHooksPath =\n relativeUserClientHooksPath &&\n path.resolve(process.cwd(), relativeUserClientHooksPath);\n const userServerHooksPath =\n relativeUserServerHooksPath &&\n path.resolve(process.cwd(), relativeUserServerHooksPath);\n\n const defaulHooksDir = path.resolve(process.cwd(), 'src');\n const defaultClientHooksPath = path.resolve(defaulHooksDir, 'hooks.client'); // file ending missing on purpose\n const defaultServerHooksPath = path.resolve(defaulHooksDir, 'hooks.server'); // same here\n\n return {\n clientHooksPath: userClientHooksPath || defaultClientHooksPath,\n serverHooksPath: userServerHooksPath || defaultServerHooksPath,\n };\n}\n\n/**\n * Checks if a hooks file exists and returns the full path to the file with the correct file type.\n */\nfunction findHooksFile(hooksFile: string): string | undefined {\n const possibleFileTypes = ['.js', '.ts', '.mjs'];\n return possibleFileTypes\n .map((type) => `${hooksFile}${type}`)\n .find((file) => fs.existsSync(file));\n}\n\n/**\n * Reads the template, replaces the dsn placeholder with the actual dsn and writes the file to @param hooksFileDest\n */\nasync function createNewHooksFile(\n hooksFileDest: string,\n hooktype: 'client' | 'server',\n dsn: string,\n): Promise<void> {\n const filledTemplate =\n hooktype === 'client'\n ? getClientHooksTemplate(dsn)\n : getServerHooksTemplate(dsn);\n\n await fs.promises.mkdir(path.dirname(hooksFileDest), { recursive: true });\n await fs.promises.writeFile(hooksFileDest, filledTemplate);\n\n clack.log.success(`Created ${hooksFileDest}`);\n}\n\n/**\n * Merges the users' hooks file with Sentry-related code.\n *\n * Both hooks:\n * - add import * as Sentry\n * - add Sentry.init\n * - add handleError hook wrapper\n *\n * Additionally in Server hook:\n * - add handle hook handler\n */\nasync function mergeHooksFile(\n hooksFile: string,\n hookType: 'client' | 'server',\n dsn: string,\n): Promise<void> {\n const originalHooksMod = await loadFile(hooksFile);\n if (hasSentryContent(path.basename(hooksFile), originalHooksMod.$code)) {\n // We don't want to mess with files that already have Sentry content.\n // Let's just bail out at this point.\n return;\n }\n\n originalHooksMod.imports.$add({\n from: '@sentry/sveltekit',\n imported: '*',\n local: 'Sentry',\n });\n\n if (hookType === 'client') {\n insertClientInitCall(dsn, originalHooksMod);\n } else {\n insertServerInitCall(dsn, originalHooksMod);\n }\n\n wrapHandleError(originalHooksMod);\n\n if (hookType === 'server') {\n wrapHandle(originalHooksMod);\n }\n\n const modifiedCode = originalHooksMod.generate().code;\n\n await fs.promises.writeFile(hooksFile, modifiedCode);\n\n clack.log.success(`Added Sentry code to ${hooksFile}`);\n}\n\nfunction insertClientInitCall(\n dsn: string,\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n originalHooksMod: ProxifiedModule<any>,\n): void {\n const initCallComment = `\n // If you don't want to use Session Replay, remove the \\`Replay\\` integration, \n // \\`replaysSessionSampleRate\\` and \\`replaysOnErrorSampleRate\\` options.`;\n\n // This assignment of any values is fine because we're just creating a function call in magicast\n // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment\n const initCall = builders.functionCall('Sentry.init', {\n dsn,\n tracesSampleRate: 1.0,\n replaysSessionSampleRate: 0.1,\n replaysOnErrorSampleRate: 1.0,\n integrations: [builders.newExpression('Sentry.Replay')],\n });\n\n // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment\n const initCallWithComment = builders.raw(\n // eslint-disable-next-line @typescript-eslint/no-unsafe-argument\n `${initCallComment}\\n${generateCode(initCall).code}`,\n );\n\n const originalHooksModAST = originalHooksMod.$ast as Program;\n\n const initCallInsertionIndex = getInitCallInsertionIndex(originalHooksModAST);\n\n originalHooksModAST.body.splice(\n initCallInsertionIndex,\n 0,\n // @ts-ignore - string works here because the AST is proxified by magicast\n // eslint-disable-next-line @typescript-eslint/no-unsafe-argument\n generateCode(initCallWithComment).code,\n );\n}\n\nfunction insertServerInitCall(\n dsn: string,\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n originalHooksMod: ProxifiedModule<any>,\n): void {\n // This assignment of any values is fine because we're just creating a function call in magicast\n // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment\n const initCall = builders.functionCall('Sentry.init', {\n dsn,\n tracesSampleRate: 1.0,\n });\n\n const originalHooksModAST = originalHooksMod.$ast as Program;\n\n const initCallInsertionIndex = getInitCallInsertionIndex(originalHooksModAST);\n\n originalHooksModAST.body.splice(\n initCallInsertionIndex,\n 0,\n // @ts-ignore - string works here because the AST is proxified by magicast\n // eslint-disable-next-line @typescript-eslint/no-unsafe-argument\n generateCode(initCall).code,\n );\n}\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nfunction wrapHandleError(mod: ProxifiedModule<any>): void {\n const modAst = mod.exports.$ast as Program;\n const namedExports = modAst.body.filter(\n (node) => node.type === 'ExportNamedDeclaration',\n ) as ExportNamedDeclaration[];\n\n let foundHandleError = false;\n\n namedExports.forEach((modExport) => {\n const declaration = modExport.declaration;\n if (!declaration) {\n return;\n }\n if (declaration.type === 'FunctionDeclaration') {\n if (!declaration.id || declaration.id.name !== 'handleError') {\n return;\n }\n foundHandleError = true;\n const userCode = generateCode(declaration).code;\n // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment\n mod.exports.handleError = builders.raw(\n `Sentry.handleErrorWithSentry(${userCode.replace(\n 'handleError',\n '_handleError',\n )})`,\n );\n // because magicast doesn't overwrite the original function export, we need to remove it manually\n modAst.body = modAst.body.filter((node) => node !== modExport);\n } else if (declaration.type === 'VariableDeclaration') {\n const declarations = declaration.declarations;\n declarations.forEach((declaration) => {\n // @ts-ignore - id should always have a name in this case\n if (!declaration.id || declaration.id.name !== 'handleError') {\n return;\n }\n foundHandleError = true;\n const userCode = declaration.init;\n const stringifiedUserCode = userCode ? generateCode(userCode).code : '';\n // @ts-ignore - we can just place a string here, magicast will convert it to a node\n declaration.init = `Sentry.handleErrorWithSentry(${stringifiedUserCode})`;\n });\n }\n });\n\n if (!foundHandleError) {\n // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment\n mod.exports.handleError = builders.functionCall(\n 'Sentry.handleErrorWithSentry',\n );\n }\n}\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nfunction wrapHandle(mod: ProxifiedModule<any>): void {\n const modAst = mod.exports.$ast as Program;\n const namedExports = modAst.body.filter(\n (node) => node.type === 'ExportNamedDeclaration',\n ) as ExportNamedDeclaration[];\n\n let foundHandle = false;\n\n namedExports.forEach((modExport) => {\n const declaration = modExport.declaration;\n if (!declaration) {\n return;\n }\n if (declaration.type === 'FunctionDeclaration') {\n if (!declaration.id || declaration.id.name !== 'handle') {\n return;\n }\n foundHandle = true;\n const userCode = generateCode(declaration).code;\n // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment\n mod.exports.handle = builders.raw(\n `sequence(Sentry.sentryHandle(), ${userCode.replace(\n 'handle',\n '_handle',\n )})`,\n );\n // because of an issue with magicast, we need to remove the original export\n modAst.body = modAst.body.filter((node) => node !== modExport);\n } else if (declaration.type === 'VariableDeclaration') {\n const declarations = declaration.declarations;\n declarations.forEach((declaration) => {\n // @ts-ignore - id should always have a name in this case\n if (!declaration.id || declaration.id.name !== 'handle') {\n return;\n }\n const userCode = declaration.init;\n const stringifiedUserCode = userCode ? generateCode(userCode).code : '';\n // @ts-ignore - we can just place a string here, magicast will convert it to a node\n declaration.init = `sequence(Sentry.sentryHandle(), ${stringifiedUserCode})`;\n foundHandle = true;\n });\n }\n });\n\n if (!foundHandle) {\n // can't use builders.functionCall here because it doesn't yet\n // support member expressions (Sentry.sentryHandle()) in args\n // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment\n mod.exports.handle = builders.raw('sequence(Sentry.sentryHandle())');\n }\n\n try {\n mod.imports.$add({\n from: '@sveltejs/kit/hooks',\n imported: 'sequence',\n local: 'sequence',\n });\n } catch (_) {\n // It's possible sequence is already imported. in this case, magicast throws but that's fine.\n }\n}\n\n/** Checks if the Sentry SvelteKit SDK is already mentioned in the file */\nfunction hasSentryContent(fileName: string, fileContent: string): boolean {\n if (fileContent.includes('@sentry/sveltekit')) {\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 return true;\n }\n return false;\n}\n\nexport async function loadSvelteConfig(): Promise<PartialSvelteConfig> {\n const configFilePath = path.join(process.cwd(), SVELTE_CONFIG_FILE);\n\n try {\n if (!fs.existsSync(configFilePath)) {\n return {};\n }\n\n const configUrl = url.pathToFileURL(configFilePath).href;\n const svelteConfigModule = (await import(configUrl)) as {\n default: PartialSvelteConfig;\n };\n\n return svelteConfigModule?.default || {};\n } catch (e: unknown) {\n clack.log.error(`Couldn't load ${SVELTE_CONFIG_FILE}.\nPlease make sure, you're running this wizard with Node 16 or newer`);\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\n return {};\n }\n}\n\nasync function modifyViteConfig(viteConfigPath: string): Promise<void> {\n const viteConfigContent = (\n await fs.promises.readFile(viteConfigPath, 'utf-8')\n ).toString();\n\n if (hasSentryContent(viteConfigPath, viteConfigContent)) {\n return;\n }\n\n const viteModule = parseModule(viteConfigContent);\n\n addVitePlugin(viteModule, {\n imported: 'sentrySvelteKit',\n from: '@sentry/sveltekit',\n constructor: 'sentrySvelteKit',\n index: 0,\n });\n\n const code = generateCode(viteModule.$ast).code;\n await fs.promises.writeFile(viteConfigPath, code);\n}\n\n/**\n * We want to insert the init call on top of the file but after all import statements\n */\nfunction getInitCallInsertionIndex(originalHooksModAST: Program): number {\n // We need to deep-copy here because reverse mutates in place\n const copiedBodyNodes = [...originalHooksModAST.body];\n const lastImportDeclaration = copiedBodyNodes\n .reverse()\n .find((node) => node.type === 'ImportDeclaration');\n\n const initCallInsertionIndex = lastImportDeclaration\n ? originalHooksModAST.body.indexOf(lastImportDeclaration) + 1\n : 0;\n return initCallInsertionIndex;\n}\n"]}
|
|
1
|
+
{"version":3,"file":"sdk-setup.js","sourceRoot":"","sources":["../../../src/sveltekit/sdk-setup.ts"],"names":[],"mappings":"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","sourcesContent":["import type { ExportNamedDeclaration, Program } from '@babel/types';\nimport * as fs from 'fs';\nimport * as path from 'path';\nimport * as url from 'url';\nimport chalk from 'chalk';\n\n// @ts-ignore - clack is ESM and TS complains about that. It works though\nimport clack from '@clack/prompts';\n// @ts-ignore - magicast is ESM and TS complains about that. It works though\nimport type { ProxifiedModule } from 'magicast';\n// @ts-ignore - magicast is ESM and TS complains about that. It works though\nimport { builders, generateCode, loadFile, parseModule } from 'magicast';\n// @ts-ignore - magicast is ESM and TS complains about that. It works though\nimport { addVitePlugin } from 'magicast/helpers';\nimport { getClientHooksTemplate, getServerHooksTemplate } from './templates';\nimport { abortIfCancelled, isUsingTypeScript } from '../utils/clack-utils';\nimport { debug } from '../utils/debug';\nimport { findScriptFile, hasSentryContent } from '../utils/ast-utils';\n\nconst SVELTE_CONFIG_FILE = 'svelte.config.js';\n\nexport type PartialSvelteConfig = {\n kit?: {\n files?: {\n hooks?: {\n client?: string;\n server?: string;\n };\n routes?: string;\n };\n };\n};\n\ntype ProjectInfo = {\n dsn: string;\n org: string;\n project: string;\n selfHosted: boolean;\n url: string;\n};\n\nexport async function createOrMergeSvelteKitFiles(\n projectInfo: ProjectInfo,\n svelteConfig: PartialSvelteConfig,\n): Promise<void> {\n const { clientHooksPath, serverHooksPath } = getHooksConfigDirs(svelteConfig);\n\n // full file paths with correct file ending (or undefined if not found)\n const originalClientHooksFile = findScriptFile(clientHooksPath);\n const originalServerHooksFile = findScriptFile(serverHooksPath);\n\n const viteConfig = findScriptFile(path.resolve(process.cwd(), 'vite.config'));\n\n const fileEnding = isUsingTypeScript() ? 'ts' : 'js';\n\n const { dsn } = projectInfo;\n\n if (!originalClientHooksFile) {\n clack.log.info('No client hooks file found, creating a new one.');\n await createNewHooksFile(`${clientHooksPath}.${fileEnding}`, 'client', dsn);\n }\n if (!originalServerHooksFile) {\n clack.log.info('No server hooks file found, creating a new one.');\n await createNewHooksFile(`${serverHooksPath}.${fileEnding}`, 'server', dsn);\n }\n\n if (originalClientHooksFile) {\n await mergeHooksFile(originalClientHooksFile, 'client', dsn);\n }\n if (originalServerHooksFile) {\n await mergeHooksFile(originalServerHooksFile, 'server', dsn);\n }\n\n if (viteConfig) {\n await modifyViteConfig(viteConfig, projectInfo);\n }\n}\n\n/**\n * Attempts to read the svelte.config.js file to find the location of the hooks files.\n * If users specified a custom location, we'll use that. Otherwise, we'll use the default.\n */\nfunction getHooksConfigDirs(svelteConfig: PartialSvelteConfig): {\n clientHooksPath: string;\n serverHooksPath: string;\n} {\n const relativeUserClientHooksPath = svelteConfig?.kit?.files?.hooks?.client;\n const relativeUserServerHooksPath = svelteConfig?.kit?.files?.hooks?.server;\n const userClientHooksPath =\n relativeUserClientHooksPath &&\n path.resolve(process.cwd(), relativeUserClientHooksPath);\n const userServerHooksPath =\n relativeUserServerHooksPath &&\n path.resolve(process.cwd(), relativeUserServerHooksPath);\n\n const defaulHooksDir = path.resolve(process.cwd(), 'src');\n const defaultClientHooksPath = path.resolve(defaulHooksDir, 'hooks.client'); // file ending missing on purpose\n const defaultServerHooksPath = path.resolve(defaulHooksDir, 'hooks.server'); // same here\n\n return {\n clientHooksPath: userClientHooksPath || defaultClientHooksPath,\n serverHooksPath: userServerHooksPath || defaultServerHooksPath,\n };\n}\n\n/**\n * Reads the template, replaces the dsn placeholder with the actual dsn and writes the file to @param hooksFileDest\n */\nasync function createNewHooksFile(\n hooksFileDest: string,\n hooktype: 'client' | 'server',\n dsn: string,\n): Promise<void> {\n const filledTemplate =\n hooktype === 'client'\n ? getClientHooksTemplate(dsn)\n : getServerHooksTemplate(dsn);\n\n await fs.promises.mkdir(path.dirname(hooksFileDest), { recursive: true });\n await fs.promises.writeFile(hooksFileDest, filledTemplate);\n\n clack.log.success(`Created ${hooksFileDest}`);\n}\n\n/**\n * Merges the users' hooks file with Sentry-related code.\n *\n * Both hooks:\n * - add import * as Sentry\n * - add Sentry.init\n * - add handleError hook wrapper\n *\n * Additionally in Server hook:\n * - add handle hook handler\n */\nasync function mergeHooksFile(\n hooksFile: string,\n hookType: 'client' | 'server',\n dsn: string,\n): Promise<void> {\n const originalHooksMod = await loadFile(hooksFile);\n if (hasSentryContent(originalHooksMod)) {\n // We don't want to mess with files that already have Sentry content.\n // Let's just bail out at this point.\n clack.log.warn(\n `File ${chalk.cyan(\n path.basename(hooksFile),\n )} already contains Sentry code.\nSkipping adding Sentry functionality to.`,\n );\n return;\n }\n\n originalHooksMod.imports.$add({\n from: '@sentry/sveltekit',\n imported: '*',\n local: 'Sentry',\n });\n\n if (hookType === 'client') {\n insertClientInitCall(dsn, originalHooksMod);\n } else {\n insertServerInitCall(dsn, originalHooksMod);\n }\n\n wrapHandleError(originalHooksMod);\n\n if (hookType === 'server') {\n wrapHandle(originalHooksMod);\n }\n\n const modifiedCode = originalHooksMod.generate().code;\n\n await fs.promises.writeFile(hooksFile, modifiedCode);\n\n clack.log.success(`Added Sentry code to ${hooksFile}`);\n}\n\nfunction insertClientInitCall(\n dsn: string,\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n originalHooksMod: ProxifiedModule<any>,\n): void {\n const initCallComment = `\n // If you don't want to use Session Replay, remove the \\`Replay\\` integration, \n // \\`replaysSessionSampleRate\\` and \\`replaysOnErrorSampleRate\\` options.`;\n\n // This assignment of any values is fine because we're just creating a function call in magicast\n // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment\n const initCall = builders.functionCall('Sentry.init', {\n dsn,\n tracesSampleRate: 1.0,\n replaysSessionSampleRate: 0.1,\n replaysOnErrorSampleRate: 1.0,\n integrations: [builders.newExpression('Sentry.Replay')],\n });\n\n // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment\n const initCallWithComment = builders.raw(\n // eslint-disable-next-line @typescript-eslint/no-unsafe-argument\n `${initCallComment}\\n${generateCode(initCall).code}`,\n );\n\n const originalHooksModAST = originalHooksMod.$ast as Program;\n\n const initCallInsertionIndex = getInitCallInsertionIndex(originalHooksModAST);\n\n originalHooksModAST.body.splice(\n initCallInsertionIndex,\n 0,\n // @ts-ignore - string works here because the AST is proxified by magicast\n // eslint-disable-next-line @typescript-eslint/no-unsafe-argument\n generateCode(initCallWithComment).code,\n );\n}\n\nfunction insertServerInitCall(\n dsn: string,\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n originalHooksMod: ProxifiedModule<any>,\n): void {\n // This assignment of any values is fine because we're just creating a function call in magicast\n // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment\n const initCall = builders.functionCall('Sentry.init', {\n dsn,\n tracesSampleRate: 1.0,\n });\n\n const originalHooksModAST = originalHooksMod.$ast as Program;\n\n const initCallInsertionIndex = getInitCallInsertionIndex(originalHooksModAST);\n\n originalHooksModAST.body.splice(\n initCallInsertionIndex,\n 0,\n // @ts-ignore - string works here because the AST is proxified by magicast\n // eslint-disable-next-line @typescript-eslint/no-unsafe-argument\n generateCode(initCall).code,\n );\n}\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nfunction wrapHandleError(mod: ProxifiedModule<any>): void {\n const modAst = mod.exports.$ast as Program;\n const namedExports = modAst.body.filter(\n (node) => node.type === 'ExportNamedDeclaration',\n ) as ExportNamedDeclaration[];\n\n let foundHandleError = false;\n\n namedExports.forEach((modExport) => {\n const declaration = modExport.declaration;\n if (!declaration) {\n return;\n }\n if (declaration.type === 'FunctionDeclaration') {\n if (!declaration.id || declaration.id.name !== 'handleError') {\n return;\n }\n foundHandleError = true;\n const userCode = generateCode(declaration).code;\n // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment\n mod.exports.handleError = builders.raw(\n `Sentry.handleErrorWithSentry(${userCode.replace(\n 'handleError',\n '_handleError',\n )})`,\n );\n // because magicast doesn't overwrite the original function export, we need to remove it manually\n modAst.body = modAst.body.filter((node) => node !== modExport);\n } else if (declaration.type === 'VariableDeclaration') {\n const declarations = declaration.declarations;\n declarations.forEach((declaration) => {\n // @ts-ignore - id should always have a name in this case\n if (!declaration.id || declaration.id.name !== 'handleError') {\n return;\n }\n foundHandleError = true;\n const userCode = declaration.init;\n const stringifiedUserCode = userCode ? generateCode(userCode).code : '';\n // @ts-ignore - we can just place a string here, magicast will convert it to a node\n declaration.init = `Sentry.handleErrorWithSentry(${stringifiedUserCode})`;\n });\n }\n });\n\n if (!foundHandleError) {\n // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment\n mod.exports.handleError = builders.functionCall(\n 'Sentry.handleErrorWithSentry',\n );\n }\n}\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nfunction wrapHandle(mod: ProxifiedModule<any>): void {\n const modAst = mod.exports.$ast as Program;\n const namedExports = modAst.body.filter(\n (node) => node.type === 'ExportNamedDeclaration',\n ) as ExportNamedDeclaration[];\n\n let foundHandle = false;\n\n namedExports.forEach((modExport) => {\n const declaration = modExport.declaration;\n if (!declaration) {\n return;\n }\n if (declaration.type === 'FunctionDeclaration') {\n if (!declaration.id || declaration.id.name !== 'handle') {\n return;\n }\n foundHandle = true;\n const userCode = generateCode(declaration).code;\n // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment\n mod.exports.handle = builders.raw(\n `sequence(Sentry.sentryHandle(), ${userCode.replace(\n 'handle',\n '_handle',\n )})`,\n );\n // because of an issue with magicast, we need to remove the original export\n modAst.body = modAst.body.filter((node) => node !== modExport);\n } else if (declaration.type === 'VariableDeclaration') {\n const declarations = declaration.declarations;\n declarations.forEach((declaration) => {\n // @ts-ignore - id should always have a name in this case\n if (!declaration.id || declaration.id.name !== 'handle') {\n return;\n }\n const userCode = declaration.init;\n const stringifiedUserCode = userCode ? generateCode(userCode).code : '';\n // @ts-ignore - we can just place a string here, magicast will convert it to a node\n declaration.init = `sequence(Sentry.sentryHandle(), ${stringifiedUserCode})`;\n foundHandle = true;\n });\n }\n });\n\n if (!foundHandle) {\n // can't use builders.functionCall here because it doesn't yet\n // support member expressions (Sentry.sentryHandle()) in args\n // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment\n mod.exports.handle = builders.raw('sequence(Sentry.sentryHandle())');\n }\n\n try {\n mod.imports.$add({\n from: '@sveltejs/kit/hooks',\n imported: 'sequence',\n local: 'sequence',\n });\n } catch (_) {\n // It's possible sequence is already imported. in this case, magicast throws but that's fine.\n }\n}\n\nexport async function loadSvelteConfig(): Promise<PartialSvelteConfig> {\n const configFilePath = path.join(process.cwd(), SVELTE_CONFIG_FILE);\n\n try {\n if (!fs.existsSync(configFilePath)) {\n return {};\n }\n\n const configUrl = url.pathToFileURL(configFilePath).href;\n const svelteConfigModule = (await import(configUrl)) as {\n default: PartialSvelteConfig;\n };\n\n return svelteConfigModule?.default || {};\n } catch (e: unknown) {\n clack.log.error(`Couldn't load ${SVELTE_CONFIG_FILE}.\nPlease make sure, you're running this wizard with Node 16 or newer`);\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\n return {};\n }\n}\n\nasync function modifyViteConfig(\n viteConfigPath: string,\n projectInfo: ProjectInfo,\n): Promise<void> {\n const viteConfigContent = (\n await fs.promises.readFile(viteConfigPath, 'utf-8')\n ).toString();\n\n const { org, project, url, selfHosted } = projectInfo;\n\n try {\n const viteModule = parseModule(viteConfigContent);\n\n if (hasSentryContent(viteModule)) {\n clack.log.warn(\n `File ${chalk.cyan(\n path.basename(viteConfigPath),\n )} already contains Sentry code.\nSkipping adding Sentry functionality to.`,\n );\n return;\n }\n\n addVitePlugin(viteModule, {\n imported: 'sentrySvelteKit',\n from: '@sentry/sveltekit',\n constructor: 'sentrySvelteKit',\n options: {\n sourceMapsUploadOptions: {\n org,\n project,\n ...(selfHosted && { url }),\n },\n },\n index: 0,\n });\n\n const code = generateCode(viteModule.$ast).code;\n\n await fs.promises.writeFile(viteConfigPath, code);\n } catch (e) {\n debug(e);\n await showFallbackViteCopyPasteSnippet(\n viteConfigPath,\n getViteConfigCodeSnippet(org, project, selfHosted, url),\n );\n }\n}\n\nasync function showFallbackViteCopyPasteSnippet(\n viteConfigPath: string,\n codeSnippet: string,\n) {\n const viteConfigFilename = path.basename(viteConfigPath);\n\n clack.log.warning(\n `Couldn't automatically modify your ${chalk.cyan(viteConfigFilename)}\n${chalk.dim(`This sometimes happens when we encounter more complex vite configs.\nIt may not seem like it but sometimes our magical powers are limited ;)`)}`,\n );\n\n clack.log.info(\"But don't worry - it's super easy to do this yourself!\");\n\n clack.log.step(\n `Add the following code to your ${chalk.cyan(viteConfigFilename)}:`,\n );\n\n // Intentionally logging to console here for easier copy/pasting\n // eslint-disable-next-line no-console\n console.log(codeSnippet);\n\n await abortIfCancelled(\n clack.select({\n message: 'Did you copy the snippet above?',\n options: [\n { label: 'Yes!', value: true, hint: \"Great, that's already it!\" },\n ],\n initialValue: true,\n }),\n );\n}\n\nconst getViteConfigCodeSnippet = (\n org: string,\n project: string,\n selfHosted: boolean,\n url: string,\n) =>\n chalk.gray(`\nimport { sveltekit } from '@sveltejs/kit/vite';\nimport { defineConfig } from 'vite';\n${chalk.greenBright(\"import { sentrySvelteKit } from '@sentry/sveltekit'\")}\n\nexport default defineConfig({\n plugins: [\n // Make sure \\`sentrySvelteKit\\` is registered before \\`sveltekit\\`\n ${chalk.greenBright(`sentrySvelteKit({\n sourceMapsUploadOptions: {\n org: '${org}',\n project: '${project}',${selfHosted ? `\\n url: '${url}',` : ''}\n } \n }),`)}\n sveltekit(),\n ]\n});\n`);\n\n/**\n * We want to insert the init call on top of the file but after all import statements\n */\nfunction getInitCallInsertionIndex(originalHooksModAST: Program): number {\n // We need to deep-copy here because reverse mutates in place\n const copiedBodyNodes = [...originalHooksModAST.body];\n const lastImportDeclaration = copiedBodyNodes\n .reverse()\n .find((node) => node.type === 'ImportDeclaration');\n\n const initCallInsertionIndex = lastImportDeclaration\n ? originalHooksModAST.body.indexOf(lastImportDeclaration) + 1\n : 0;\n return initCallInsertionIndex;\n}\n"]}
|