@sentry/wizard 3.34.4 → 3.35.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +13 -1
- package/dist/e2e-tests/tests/nuxt-3.test.d.ts +1 -0
- package/dist/e2e-tests/tests/nuxt-3.test.js +231 -0
- package/dist/e2e-tests/tests/nuxt-3.test.js.map +1 -0
- package/dist/e2e-tests/tests/nuxt-4.test.d.ts +1 -0
- package/dist/e2e-tests/tests/nuxt-4.test.js +232 -0
- package/dist/e2e-tests/tests/nuxt-4.test.js.map +1 -0
- package/dist/e2e-tests/tests/remix.test.js +92 -27
- package/dist/e2e-tests/tests/remix.test.js.map +1 -1
- package/dist/e2e-tests/tests/sveltekit.test.js +102 -42
- package/dist/e2e-tests/tests/sveltekit.test.js.map +1 -1
- package/dist/e2e-tests/utils/index.d.ts +18 -1
- package/dist/e2e-tests/utils/index.js +31 -2
- package/dist/e2e-tests/utils/index.js.map +1 -1
- package/dist/lib/Constants.d.ts +1 -0
- package/dist/lib/Constants.js +1 -0
- package/dist/lib/Constants.js.map +1 -1
- package/dist/package.json +1 -1
- package/dist/src/apple/templates.js +2 -2
- package/dist/src/apple/templates.js.map +1 -1
- package/dist/src/nextjs/nextjs-wizard.js +1 -0
- package/dist/src/nextjs/nextjs-wizard.js.map +1 -1
- package/dist/src/nuxt/nuxt-wizard.d.ts +3 -0
- package/dist/src/nuxt/nuxt-wizard.js +220 -0
- package/dist/src/nuxt/nuxt-wizard.js.map +1 -0
- package/dist/src/nuxt/sdk-example.d.ts +8 -0
- package/dist/src/nuxt/sdk-example.js +179 -0
- package/dist/src/nuxt/sdk-example.js.map +1 -0
- package/dist/src/nuxt/sdk-setup.d.ts +8 -0
- package/dist/src/nuxt/sdk-setup.js +275 -0
- package/dist/src/nuxt/sdk-setup.js.map +1 -0
- package/dist/src/nuxt/templates.d.ts +22 -0
- package/dist/src/nuxt/templates.js +84 -0
- package/dist/src/nuxt/templates.js.map +1 -0
- package/dist/src/nuxt/utils.d.ts +1 -0
- package/dist/src/nuxt/utils.js +71 -0
- package/dist/src/nuxt/utils.js.map +1 -0
- package/dist/src/remix/remix-wizard.js +2 -1
- package/dist/src/remix/remix-wizard.js.map +1 -1
- package/dist/src/run.d.ts +1 -1
- package/dist/src/run.js +30 -23
- package/dist/src/run.js.map +1 -1
- package/dist/src/sourcemaps/tools/rollup.js +1 -1
- package/dist/src/sourcemaps/tools/rollup.js.map +1 -1
- package/dist/src/sveltekit/sveltekit-wizard.js +2 -1
- package/dist/src/sveltekit/sveltekit-wizard.js.map +1 -1
- package/dist/src/utils/clack-utils.d.ts +6 -2
- package/dist/src/utils/clack-utils.js +30 -10
- package/dist/src/utils/clack-utils.js.map +1 -1
- package/dist/test/nuxt/templates.test.d.ts +1 -0
- package/dist/test/nuxt/templates.test.js +70 -0
- package/dist/test/nuxt/templates.test.js.map +1 -0
- package/e2e-tests/README.md +59 -0
- package/e2e-tests/test-applications/nuxt-3-test-app/README.md +75 -0
- package/e2e-tests/test-applications/nuxt-3-test-app/nuxt.config.ts +5 -0
- package/e2e-tests/test-applications/nuxt-3-test-app/package.json +18 -0
- package/e2e-tests/test-applications/nuxt-3-test-app/public/favicon.ico +0 -0
- package/e2e-tests/test-applications/nuxt-3-test-app/public/robots.txt +1 -0
- package/e2e-tests/tests/nuxt-3.test.ts +169 -0
- package/e2e-tests/tests/nuxt-4.test.ts +168 -0
- package/e2e-tests/tests/remix.test.ts +163 -50
- package/e2e-tests/tests/sveltekit.test.ts +180 -79
- package/e2e-tests/utils/index.ts +31 -1
- package/lib/Constants.ts +1 -0
- package/package.json +1 -1
- package/src/apple/templates.ts +14 -2
- package/src/nextjs/nextjs-wizard.ts +1 -0
- package/src/nuxt/nuxt-wizard.ts +166 -0
- package/src/nuxt/sdk-example.ts +135 -0
- package/src/nuxt/sdk-setup.ts +209 -0
- package/src/nuxt/templates.ts +296 -0
- package/src/nuxt/utils.ts +32 -0
- package/src/remix/remix-wizard.ts +2 -1
- package/src/run.ts +7 -0
- package/src/sourcemaps/tools/rollup.ts +1 -1
- package/src/sveltekit/sveltekit-wizard.ts +2 -1
- package/src/utils/clack-utils.ts +32 -8
- package/test/nuxt/templates.test.ts +228 -0
|
@@ -0,0 +1,220 @@
|
|
|
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.runNuxtWizardWithTelemetry = exports.runNuxtWizard = void 0;
|
|
66
|
+
// @ts-ignore - clack is ESM and TS complains about that. It works though
|
|
67
|
+
var clack = __importStar(require("@clack/prompts"));
|
|
68
|
+
var Sentry = __importStar(require("@sentry/node"));
|
|
69
|
+
var semver_1 = require("semver");
|
|
70
|
+
var telemetry_1 = require("../telemetry");
|
|
71
|
+
var clack_utils_1 = require("../utils/clack-utils");
|
|
72
|
+
var package_json_1 = require("../utils/package-json");
|
|
73
|
+
var sdk_setup_1 = require("./sdk-setup");
|
|
74
|
+
var sdk_example_1 = require("./sdk-example");
|
|
75
|
+
var utils_1 = require("./utils");
|
|
76
|
+
var chalk_1 = __importDefault(require("chalk"));
|
|
77
|
+
function runNuxtWizard(options) {
|
|
78
|
+
return (0, telemetry_1.withTelemetry)({
|
|
79
|
+
enabled: options.telemetryEnabled,
|
|
80
|
+
integration: 'nuxt',
|
|
81
|
+
wizardOptions: options,
|
|
82
|
+
}, function () { return runNuxtWizardWithTelemetry(options); });
|
|
83
|
+
}
|
|
84
|
+
exports.runNuxtWizard = runNuxtWizard;
|
|
85
|
+
function runNuxtWizardWithTelemetry(options) {
|
|
86
|
+
return __awaiter(this, void 0, void 0, function () {
|
|
87
|
+
var packageJson, nuxtVersion, minVer, shouldContinue, _a, authToken, selectedProject, selfHosted, sentryUrl, sdkAlreadyInstalled, nuxtConfig, projectData, shouldCreateExamplePage, shouldCreateExampleButton, isV4, canCreateExamplePage;
|
|
88
|
+
var _this = this;
|
|
89
|
+
return __generator(this, function (_b) {
|
|
90
|
+
switch (_b.label) {
|
|
91
|
+
case 0:
|
|
92
|
+
(0, clack_utils_1.printWelcome)({
|
|
93
|
+
wizardName: 'Sentry Nuxt Wizard',
|
|
94
|
+
promoCode: options.promoCode,
|
|
95
|
+
telemetryEnabled: options.telemetryEnabled,
|
|
96
|
+
});
|
|
97
|
+
return [4 /*yield*/, (0, clack_utils_1.confirmContinueIfNoOrDirtyGitRepo)()];
|
|
98
|
+
case 1:
|
|
99
|
+
_b.sent();
|
|
100
|
+
return [4 /*yield*/, (0, clack_utils_1.getPackageDotJson)()];
|
|
101
|
+
case 2:
|
|
102
|
+
packageJson = _b.sent();
|
|
103
|
+
return [4 /*yield*/, (0, clack_utils_1.ensurePackageIsInstalled)(packageJson, 'nuxt', 'Nuxt')];
|
|
104
|
+
case 3:
|
|
105
|
+
_b.sent();
|
|
106
|
+
nuxtVersion = (0, package_json_1.getPackageVersion)('nuxt', packageJson);
|
|
107
|
+
Sentry.setTag('nuxt-version', nuxtVersion);
|
|
108
|
+
minVer = (0, semver_1.minVersion)(nuxtVersion || '0.0.0');
|
|
109
|
+
if (!(!nuxtVersion || !minVer || (0, semver_1.lt)(minVer, '3.7.0'))) return [3 /*break*/, 6];
|
|
110
|
+
clack.log.warn("It seems you're using a Nuxt version <3.7.0 which is not supported by Sentry.\nWe recommend upgrading to the latest version before you continue.");
|
|
111
|
+
return [4 /*yield*/, (0, clack_utils_1.abortIfCancelled)(clack.select({
|
|
112
|
+
message: 'Do you want to continue anyway?',
|
|
113
|
+
options: [
|
|
114
|
+
{
|
|
115
|
+
label: 'Yes, continue',
|
|
116
|
+
hint: 'The SDK might not work correctly',
|
|
117
|
+
value: true,
|
|
118
|
+
},
|
|
119
|
+
{ label: "No, I'll upgrade first", value: false },
|
|
120
|
+
],
|
|
121
|
+
}))];
|
|
122
|
+
case 4:
|
|
123
|
+
shouldContinue = _b.sent();
|
|
124
|
+
if (!!shouldContinue) return [3 /*break*/, 6];
|
|
125
|
+
return [4 /*yield*/, (0, clack_utils_1.abort)('Exiting Wizard', 0)];
|
|
126
|
+
case 5:
|
|
127
|
+
_b.sent();
|
|
128
|
+
return [2 /*return*/];
|
|
129
|
+
case 6: return [4 /*yield*/, (0, clack_utils_1.getOrAskForProjectData)(options, 'javascript-nuxt')];
|
|
130
|
+
case 7:
|
|
131
|
+
_a = _b.sent(), authToken = _a.authToken, selectedProject = _a.selectedProject, selfHosted = _a.selfHosted, sentryUrl = _a.sentryUrl;
|
|
132
|
+
sdkAlreadyInstalled = (0, package_json_1.hasPackageInstalled)('@sentry/nuxt', packageJson);
|
|
133
|
+
Sentry.setTag('sdk-already-installed', sdkAlreadyInstalled);
|
|
134
|
+
return [4 /*yield*/, (0, clack_utils_1.installPackage)({
|
|
135
|
+
packageName: '@sentry/nuxt',
|
|
136
|
+
alreadyInstalled: sdkAlreadyInstalled,
|
|
137
|
+
})];
|
|
138
|
+
case 8:
|
|
139
|
+
_b.sent();
|
|
140
|
+
return [4 /*yield*/, (0, clack_utils_1.addDotEnvSentryBuildPluginFile)(authToken)];
|
|
141
|
+
case 9:
|
|
142
|
+
_b.sent();
|
|
143
|
+
return [4 /*yield*/, (0, telemetry_1.traceStep)('load-nuxt-config', sdk_setup_1.getNuxtConfig)];
|
|
144
|
+
case 10:
|
|
145
|
+
nuxtConfig = _b.sent();
|
|
146
|
+
projectData = {
|
|
147
|
+
org: selectedProject.organization.slug,
|
|
148
|
+
project: selectedProject.slug,
|
|
149
|
+
projectId: selectedProject.id,
|
|
150
|
+
url: sentryUrl,
|
|
151
|
+
selfHosted: selfHosted,
|
|
152
|
+
};
|
|
153
|
+
return [4 /*yield*/, (0, telemetry_1.traceStep)('configure-sdk', function () { return __awaiter(_this, void 0, void 0, function () {
|
|
154
|
+
return __generator(this, function (_a) {
|
|
155
|
+
switch (_a.label) {
|
|
156
|
+
case 0: return [4 /*yield*/, (0, sdk_setup_1.addSDKModule)(nuxtConfig, projectData)];
|
|
157
|
+
case 1:
|
|
158
|
+
_a.sent();
|
|
159
|
+
return [4 /*yield*/, (0, sdk_setup_1.createConfigFiles)(selectedProject.keys[0].dsn.public)];
|
|
160
|
+
case 2:
|
|
161
|
+
_a.sent();
|
|
162
|
+
return [2 /*return*/];
|
|
163
|
+
}
|
|
164
|
+
});
|
|
165
|
+
}); })];
|
|
166
|
+
case 11:
|
|
167
|
+
_b.sent();
|
|
168
|
+
shouldCreateExamplePage = false;
|
|
169
|
+
shouldCreateExampleButton = false;
|
|
170
|
+
return [4 /*yield*/, (0, utils_1.isNuxtV4)(nuxtConfig, nuxtVersion)];
|
|
171
|
+
case 12:
|
|
172
|
+
isV4 = _b.sent();
|
|
173
|
+
return [4 /*yield*/, (0, sdk_example_1.supportsExamplePage)(isV4)];
|
|
174
|
+
case 13:
|
|
175
|
+
canCreateExamplePage = _b.sent();
|
|
176
|
+
Sentry.setTag('supports-example-page-creation', canCreateExamplePage);
|
|
177
|
+
if (!canCreateExamplePage) return [3 /*break*/, 17];
|
|
178
|
+
return [4 /*yield*/, (0, clack_utils_1.askShouldCreateExamplePage)()];
|
|
179
|
+
case 14:
|
|
180
|
+
shouldCreateExamplePage = _b.sent();
|
|
181
|
+
if (!shouldCreateExamplePage) return [3 /*break*/, 16];
|
|
182
|
+
return [4 /*yield*/, (0, telemetry_1.traceStep)('create-example-page', function () { return __awaiter(_this, void 0, void 0, function () { return __generator(this, function (_a) {
|
|
183
|
+
return [2 /*return*/, (0, sdk_example_1.createExamplePage)(isV4, projectData)];
|
|
184
|
+
}); }); })];
|
|
185
|
+
case 15:
|
|
186
|
+
_b.sent();
|
|
187
|
+
_b.label = 16;
|
|
188
|
+
case 16: return [3 /*break*/, 20];
|
|
189
|
+
case 17: return [4 /*yield*/, (0, clack_utils_1.askShouldCreateExampleComponent)()];
|
|
190
|
+
case 18:
|
|
191
|
+
shouldCreateExampleButton = _b.sent();
|
|
192
|
+
if (!shouldCreateExampleButton) return [3 /*break*/, 20];
|
|
193
|
+
return [4 /*yield*/, (0, telemetry_1.traceStep)('create-example-component', function () { return __awaiter(_this, void 0, void 0, function () { return __generator(this, function (_a) {
|
|
194
|
+
return [2 /*return*/, (0, sdk_example_1.createExampleComponent)(isV4)];
|
|
195
|
+
}); }); })];
|
|
196
|
+
case 19:
|
|
197
|
+
_b.sent();
|
|
198
|
+
_b.label = 20;
|
|
199
|
+
case 20: return [4 /*yield*/, (0, clack_utils_1.runPrettierIfInstalled)()];
|
|
200
|
+
case 21:
|
|
201
|
+
_b.sent();
|
|
202
|
+
clack.outro(buildOutroMessage(shouldCreateExamplePage, shouldCreateExampleButton));
|
|
203
|
+
return [2 /*return*/];
|
|
204
|
+
}
|
|
205
|
+
});
|
|
206
|
+
});
|
|
207
|
+
}
|
|
208
|
+
exports.runNuxtWizardWithTelemetry = runNuxtWizardWithTelemetry;
|
|
209
|
+
function buildOutroMessage(shouldCreateExamplePage, shouldCreateExampleButton) {
|
|
210
|
+
var msg = chalk_1.default.green('\nSuccessfully installed the Sentry Nuxt SDK!');
|
|
211
|
+
if (shouldCreateExamplePage) {
|
|
212
|
+
msg += "\n\nYou can validate your setup by visiting ".concat(chalk_1.default.cyan('"/sentry-example-page"'), ".");
|
|
213
|
+
}
|
|
214
|
+
if (shouldCreateExampleButton) {
|
|
215
|
+
msg += "\n\nYou can validate your setup by adding the ".concat(chalk_1.default.cyan('`SentryExampleButton`'), " component to a page and triggering it.");
|
|
216
|
+
}
|
|
217
|
+
msg += "\n\nCheck out the SDK documentation for further configuration:\nhttps://docs.sentry.io/platforms/javascript/guides/nuxt/";
|
|
218
|
+
return msg;
|
|
219
|
+
}
|
|
220
|
+
//# sourceMappingURL=nuxt-wizard.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"nuxt-wizard.js","sourceRoot":"","sources":["../../../src/nuxt/nuxt-wizard.ts"],"names":[],"mappings":"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","sourcesContent":["// @ts-ignore - clack is ESM and TS complains about that. It works though\nimport * as clack from '@clack/prompts';\nimport * as Sentry from '@sentry/node';\nimport { lt, minVersion } from 'semver';\nimport type { WizardOptions } from '../utils/types';\nimport { traceStep, withTelemetry } from '../telemetry';\nimport {\n abort,\n abortIfCancelled,\n addDotEnvSentryBuildPluginFile,\n askShouldCreateExampleComponent,\n askShouldCreateExamplePage,\n confirmContinueIfNoOrDirtyGitRepo,\n ensurePackageIsInstalled,\n getOrAskForProjectData,\n getPackageDotJson,\n installPackage,\n printWelcome,\n runPrettierIfInstalled,\n} from '../utils/clack-utils';\nimport { getPackageVersion, hasPackageInstalled } from '../utils/package-json';\nimport { addSDKModule, getNuxtConfig, createConfigFiles } from './sdk-setup';\nimport {\n createExampleComponent,\n createExamplePage,\n supportsExamplePage,\n} from './sdk-example';\nimport { isNuxtV4 } from './utils';\nimport chalk from 'chalk';\n\nexport function runNuxtWizard(options: WizardOptions) {\n return withTelemetry(\n {\n enabled: options.telemetryEnabled,\n integration: 'nuxt',\n wizardOptions: options,\n },\n () => runNuxtWizardWithTelemetry(options),\n );\n}\n\nexport async function runNuxtWizardWithTelemetry(\n options: WizardOptions,\n): Promise<void> {\n printWelcome({\n wizardName: 'Sentry Nuxt Wizard',\n promoCode: options.promoCode,\n telemetryEnabled: options.telemetryEnabled,\n });\n\n await confirmContinueIfNoOrDirtyGitRepo();\n\n const packageJson = await getPackageDotJson();\n\n await ensurePackageIsInstalled(packageJson, 'nuxt', 'Nuxt');\n\n const nuxtVersion = getPackageVersion('nuxt', packageJson);\n Sentry.setTag('nuxt-version', nuxtVersion);\n\n const minVer = minVersion(nuxtVersion || '0.0.0');\n\n if (!nuxtVersion || !minVer || lt(minVer, '3.7.0')) {\n clack.log.warn(\n \"It seems you're using a Nuxt version <3.7.0 which is not supported by Sentry.\\nWe recommend upgrading to the latest version before you continue.\",\n );\n const shouldContinue = await abortIfCancelled(\n clack.select({\n message: 'Do you want to continue anyway?',\n options: [\n {\n label: 'Yes, continue',\n hint: 'The SDK might not work correctly',\n value: true,\n },\n { label: \"No, I'll upgrade first\", value: false },\n ],\n }),\n );\n if (!shouldContinue) {\n await abort('Exiting Wizard', 0);\n return;\n }\n }\n\n const { authToken, selectedProject, selfHosted, sentryUrl } =\n await getOrAskForProjectData(options, 'javascript-nuxt');\n\n const sdkAlreadyInstalled = hasPackageInstalled('@sentry/nuxt', packageJson);\n Sentry.setTag('sdk-already-installed', sdkAlreadyInstalled);\n\n await installPackage({\n packageName: '@sentry/nuxt',\n alreadyInstalled: sdkAlreadyInstalled,\n });\n\n await addDotEnvSentryBuildPluginFile(authToken);\n\n const nuxtConfig = await traceStep('load-nuxt-config', getNuxtConfig);\n\n const projectData = {\n org: selectedProject.organization.slug,\n project: selectedProject.slug,\n projectId: selectedProject.id,\n url: sentryUrl,\n selfHosted,\n };\n\n await traceStep('configure-sdk', async () => {\n await addSDKModule(nuxtConfig, projectData);\n await createConfigFiles(selectedProject.keys[0].dsn.public);\n });\n\n let shouldCreateExamplePage = false;\n let shouldCreateExampleButton = false;\n\n const isV4 = await isNuxtV4(nuxtConfig, nuxtVersion);\n const canCreateExamplePage = await supportsExamplePage(isV4);\n Sentry.setTag('supports-example-page-creation', canCreateExamplePage);\n\n if (canCreateExamplePage) {\n shouldCreateExamplePage = await askShouldCreateExamplePage();\n\n if (shouldCreateExamplePage) {\n await traceStep('create-example-page', async () =>\n createExamplePage(isV4, projectData),\n );\n }\n } else {\n shouldCreateExampleButton = await askShouldCreateExampleComponent();\n\n if (shouldCreateExampleButton) {\n await traceStep('create-example-component', async () =>\n createExampleComponent(isV4),\n );\n }\n }\n\n await runPrettierIfInstalled();\n\n clack.outro(\n buildOutroMessage(shouldCreateExamplePage, shouldCreateExampleButton),\n );\n}\n\nfunction buildOutroMessage(\n shouldCreateExamplePage: boolean,\n shouldCreateExampleButton: boolean,\n): string {\n let msg = chalk.green('\\nSuccessfully installed the Sentry Nuxt SDK!');\n\n if (shouldCreateExamplePage) {\n msg += `\\n\\nYou can validate your setup by visiting ${chalk.cyan(\n '\"/sentry-example-page\"',\n )}.`;\n }\n if (shouldCreateExampleButton) {\n msg += `\\n\\nYou can validate your setup by adding the ${chalk.cyan(\n '`SentryExampleButton`',\n )} component to a page and triggering it.`;\n }\n\n msg += `\\n\\nCheck out the SDK documentation for further configuration:\nhttps://docs.sentry.io/platforms/javascript/guides/nuxt/`;\n\n return msg;\n}\n"]}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
export declare function supportsExamplePage(isNuxtV4: boolean): Promise<boolean>;
|
|
2
|
+
export declare function createExamplePage(isNuxtV4: boolean, options: {
|
|
3
|
+
org: string;
|
|
4
|
+
project: string;
|
|
5
|
+
projectId: string;
|
|
6
|
+
url: string;
|
|
7
|
+
}): Promise<void>;
|
|
8
|
+
export declare function createExampleComponent(isNuxtV4: boolean): Promise<void>;
|
|
@@ -0,0 +1,179 @@
|
|
|
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.createExampleComponent = exports.createExamplePage = exports.supportsExamplePage = void 0;
|
|
66
|
+
var fs = __importStar(require("fs"));
|
|
67
|
+
var path = __importStar(require("path"));
|
|
68
|
+
// @ts-expect-error - clack is ESM and TS complains about that. It works though
|
|
69
|
+
var prompts_1 = __importDefault(require("@clack/prompts"));
|
|
70
|
+
var templates_1 = require("./templates");
|
|
71
|
+
var clack_utils_1 = require("../utils/clack-utils");
|
|
72
|
+
var chalk_1 = __importDefault(require("chalk"));
|
|
73
|
+
var Sentry = __importStar(require("@sentry/node"));
|
|
74
|
+
function getSrcDirectory(isNuxtV4) {
|
|
75
|
+
// In nuxt v4, the src directory is `app/` unless
|
|
76
|
+
// users already had a `pages` directory
|
|
77
|
+
return isNuxtV4 && !fs.existsSync(path.resolve('pages')) ? 'app' : '.';
|
|
78
|
+
}
|
|
79
|
+
function supportsExamplePage(isNuxtV4) {
|
|
80
|
+
return __awaiter(this, void 0, void 0, function () {
|
|
81
|
+
var src, app, content;
|
|
82
|
+
return __generator(this, function (_a) {
|
|
83
|
+
switch (_a.label) {
|
|
84
|
+
case 0:
|
|
85
|
+
src = getSrcDirectory(isNuxtV4);
|
|
86
|
+
app = path.join(src, 'app.vue');
|
|
87
|
+
// If there's no `app.vue` layout, nuxt automatically renders
|
|
88
|
+
// the routes.
|
|
89
|
+
if (!fs.existsSync(path.resolve(app))) {
|
|
90
|
+
return [2 /*return*/, true];
|
|
91
|
+
}
|
|
92
|
+
return [4 /*yield*/, fs.promises.readFile(path.resolve(app), 'utf8')];
|
|
93
|
+
case 1:
|
|
94
|
+
content = _a.sent();
|
|
95
|
+
return [2 /*return*/, !!content.match(/<NuxtPage/g)];
|
|
96
|
+
}
|
|
97
|
+
});
|
|
98
|
+
});
|
|
99
|
+
}
|
|
100
|
+
exports.supportsExamplePage = supportsExamplePage;
|
|
101
|
+
function createExamplePage(isNuxtV4, options) {
|
|
102
|
+
return __awaiter(this, void 0, void 0, function () {
|
|
103
|
+
var src, pages, indexPage, examplePage, api, exampleApi, e_1;
|
|
104
|
+
return __generator(this, function (_a) {
|
|
105
|
+
switch (_a.label) {
|
|
106
|
+
case 0:
|
|
107
|
+
_a.trys.push([0, 5, , 7]);
|
|
108
|
+
src = getSrcDirectory(isNuxtV4);
|
|
109
|
+
pages = path.join(src, 'pages');
|
|
110
|
+
if (!!fs.existsSync(path.resolve(pages))) return [3 /*break*/, 2];
|
|
111
|
+
fs.mkdirSync(path.resolve(pages), { recursive: true });
|
|
112
|
+
indexPage = path.join(pages, 'index.vue');
|
|
113
|
+
return [4 /*yield*/, fs.promises.writeFile(path.resolve(indexPage), (0, templates_1.getIndexRouteTemplate)())];
|
|
114
|
+
case 1:
|
|
115
|
+
_a.sent();
|
|
116
|
+
prompts_1.default.log.success("Created ".concat(chalk_1.default.cyan(indexPage), "."));
|
|
117
|
+
_a.label = 2;
|
|
118
|
+
case 2:
|
|
119
|
+
examplePage = path.join(pages, 'sentry-example-page.vue');
|
|
120
|
+
if (fs.existsSync(path.resolve(examplePage))) {
|
|
121
|
+
prompts_1.default.log.warn("It seems like a sentry example page already exists. Skipping creation of example page.");
|
|
122
|
+
return [2 /*return*/];
|
|
123
|
+
}
|
|
124
|
+
return [4 /*yield*/, fs.promises.writeFile(path.resolve(examplePage), (0, templates_1.getSentryExamplePageTemplate)(options))];
|
|
125
|
+
case 3:
|
|
126
|
+
_a.sent();
|
|
127
|
+
prompts_1.default.log.success("Created ".concat(chalk_1.default.cyan(examplePage), "."));
|
|
128
|
+
api = path.join('server', 'api');
|
|
129
|
+
if (!fs.existsSync(path.resolve(api))) {
|
|
130
|
+
fs.mkdirSync(path.resolve(api), { recursive: true });
|
|
131
|
+
}
|
|
132
|
+
exampleApi = path.join(api, (0, clack_utils_1.isUsingTypeScript)() ? 'sentry-example-api.ts' : 'sentry-example-api.js');
|
|
133
|
+
return [4 /*yield*/, fs.promises.writeFile(path.resolve(exampleApi), (0, templates_1.getSentryExampleApiTemplate)())];
|
|
134
|
+
case 4:
|
|
135
|
+
_a.sent();
|
|
136
|
+
prompts_1.default.log.success("Created ".concat(chalk_1.default.cyan(exampleApi), "."));
|
|
137
|
+
return [3 /*break*/, 7];
|
|
138
|
+
case 5:
|
|
139
|
+
e_1 = _a.sent();
|
|
140
|
+
prompts_1.default.log.error('Error while creating an example page to test Sentry:');
|
|
141
|
+
prompts_1.default.log.info(chalk_1.default.dim(typeof e_1 === 'object' && e_1 != null && 'toString' in e_1
|
|
142
|
+
? e_1.toString()
|
|
143
|
+
: typeof e_1 === 'string'
|
|
144
|
+
? e_1
|
|
145
|
+
: 'Unknown error'));
|
|
146
|
+
Sentry.captureException('Error while creating an example Nuxt page to test Sentry');
|
|
147
|
+
return [4 /*yield*/, (0, clack_utils_1.abort)('Exiting Wizard')];
|
|
148
|
+
case 6:
|
|
149
|
+
_a.sent();
|
|
150
|
+
return [3 /*break*/, 7];
|
|
151
|
+
case 7: return [2 /*return*/];
|
|
152
|
+
}
|
|
153
|
+
});
|
|
154
|
+
});
|
|
155
|
+
}
|
|
156
|
+
exports.createExamplePage = createExamplePage;
|
|
157
|
+
function createExampleComponent(isNuxtV4) {
|
|
158
|
+
return __awaiter(this, void 0, void 0, function () {
|
|
159
|
+
var src, components, exampleComponent;
|
|
160
|
+
return __generator(this, function (_a) {
|
|
161
|
+
switch (_a.label) {
|
|
162
|
+
case 0:
|
|
163
|
+
src = getSrcDirectory(isNuxtV4);
|
|
164
|
+
components = path.join(src, 'components');
|
|
165
|
+
if (!fs.existsSync(path.resolve(components))) {
|
|
166
|
+
fs.mkdirSync(path.resolve(components), { recursive: true });
|
|
167
|
+
}
|
|
168
|
+
exampleComponent = path.join(components, 'SentryErrorButton.vue');
|
|
169
|
+
return [4 /*yield*/, fs.promises.writeFile(path.resolve(exampleComponent), (0, templates_1.getSentryErrorButtonTemplate)())];
|
|
170
|
+
case 1:
|
|
171
|
+
_a.sent();
|
|
172
|
+
prompts_1.default.log.success("Created ".concat(chalk_1.default.cyan(exampleComponent), "."));
|
|
173
|
+
return [2 /*return*/];
|
|
174
|
+
}
|
|
175
|
+
});
|
|
176
|
+
});
|
|
177
|
+
}
|
|
178
|
+
exports.createExampleComponent = createExampleComponent;
|
|
179
|
+
//# sourceMappingURL=sdk-example.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sdk-example.js","sourceRoot":"","sources":["../../../src/nuxt/sdk-example.ts"],"names":[],"mappings":"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","sourcesContent":["import * as fs from 'fs';\nimport * as path from 'path';\n// @ts-expect-error - clack is ESM and TS complains about that. It works though\nimport clack from '@clack/prompts';\nimport {\n getIndexRouteTemplate,\n getSentryExampleApiTemplate,\n getSentryExamplePageTemplate,\n getSentryErrorButtonTemplate,\n} from './templates';\nimport { abort, isUsingTypeScript } from '../utils/clack-utils';\nimport chalk from 'chalk';\nimport * as Sentry from '@sentry/node';\n\nfunction getSrcDirectory(isNuxtV4: boolean) {\n // In nuxt v4, the src directory is `app/` unless\n // users already had a `pages` directory\n return isNuxtV4 && !fs.existsSync(path.resolve('pages')) ? 'app' : '.';\n}\n\nexport async function supportsExamplePage(isNuxtV4: boolean) {\n // We currently only support creating an example page\n // if users can reliably access it without having to\n // add code changes themselves.\n //\n // If users have an `app.vue` layout without the\n // needed component to render routes (<NuxtPage/>),\n // we bail out of creating an example page altogether.\n const src = getSrcDirectory(isNuxtV4);\n const app = path.join(src, 'app.vue');\n\n // If there's no `app.vue` layout, nuxt automatically renders\n // the routes.\n if (!fs.existsSync(path.resolve(app))) {\n return true;\n }\n\n const content = await fs.promises.readFile(path.resolve(app), 'utf8');\n return !!content.match(/<NuxtPage/g);\n}\n\nexport async function createExamplePage(\n isNuxtV4: boolean,\n options: {\n org: string;\n project: string;\n projectId: string;\n url: string;\n },\n) {\n try {\n const src = getSrcDirectory(isNuxtV4);\n const pages = path.join(src, 'pages');\n\n if (!fs.existsSync(path.resolve(pages))) {\n fs.mkdirSync(path.resolve(pages), { recursive: true });\n\n const indexPage = path.join(pages, 'index.vue');\n\n await fs.promises.writeFile(\n path.resolve(indexPage),\n getIndexRouteTemplate(),\n );\n\n clack.log.success(`Created ${chalk.cyan(indexPage)}.`);\n }\n\n const examplePage = path.join(pages, 'sentry-example-page.vue');\n\n if (fs.existsSync(path.resolve(examplePage))) {\n clack.log.warn(\n `It seems like a sentry example page already exists. Skipping creation of example page.`,\n );\n return;\n }\n\n await fs.promises.writeFile(\n path.resolve(examplePage),\n getSentryExamplePageTemplate(options),\n );\n\n clack.log.success(`Created ${chalk.cyan(examplePage)}.`);\n\n const api = path.join('server', 'api');\n\n if (!fs.existsSync(path.resolve(api))) {\n fs.mkdirSync(path.resolve(api), { recursive: true });\n }\n\n const exampleApi = path.join(\n api,\n isUsingTypeScript() ? 'sentry-example-api.ts' : 'sentry-example-api.js',\n );\n\n await fs.promises.writeFile(\n path.resolve(exampleApi),\n getSentryExampleApiTemplate(),\n );\n\n clack.log.success(`Created ${chalk.cyan(exampleApi)}.`);\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 Sentry.captureException(\n 'Error while creating an example Nuxt page to test Sentry',\n );\n await abort('Exiting Wizard');\n }\n}\n\nexport async function createExampleComponent(isNuxtV4: boolean) {\n const src = getSrcDirectory(isNuxtV4);\n const components = path.join(src, 'components');\n\n if (!fs.existsSync(path.resolve(components))) {\n fs.mkdirSync(path.resolve(components), { recursive: true });\n }\n\n const exampleComponent = path.join(components, 'SentryErrorButton.vue');\n\n await fs.promises.writeFile(\n path.resolve(exampleComponent),\n getSentryErrorButtonTemplate(),\n );\n\n clack.log.success(`Created ${chalk.cyan(exampleComponent)}.`);\n}\n"]}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
export declare function getNuxtConfig(): Promise<string>;
|
|
2
|
+
export declare function addSDKModule(config: string, options: {
|
|
3
|
+
org: string;
|
|
4
|
+
project: string;
|
|
5
|
+
url: string;
|
|
6
|
+
selfHosted: boolean;
|
|
7
|
+
}): Promise<void>;
|
|
8
|
+
export declare function createConfigFiles(dsn: string): Promise<void>;
|