@sentry/wizard
Version:
Sentry wizard helping you to configure your project
194 lines (191 loc) • 9.35 kB
JavaScript
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
if (k2 === undefined) k2 = k;
var desc = Object.getOwnPropertyDescriptor(m, k);
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
desc = { enumerable: true, get: function() { return m[k]; } };
}
Object.defineProperty(o, k2, desc);
}) : (function(o, m, k, k2) {
if (k2 === undefined) k2 = k;
o[k2] = m[k];
}));
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
Object.defineProperty(o, "default", { enumerable: true, value: v });
}) : function(o, v) {
o["default"] = v;
});
var __importStar = (this && this.__importStar) || function (mod) {
if (mod && mod.__esModule) return mod;
var result = {};
if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
__setModuleDefault(result, mod);
return result;
};
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.runSvelteKitWizardWithTelemetry = exports.runSvelteKitWizard = void 0;
// @ts-expect-error - clack is ESM and TS complains about that. It works though
const clack = __importStar(require("@clack/prompts"));
const chalk_1 = __importDefault(require("chalk"));
const Sentry = __importStar(require("@sentry/node"));
const telemetry_1 = require("../telemetry");
const clack_1 = require("../utils/clack");
const package_json_1 = require("../utils/package-json");
const package_manager_1 = require("../utils/package-manager");
const mcp_config_1 = require("../utils/clack/mcp-config");
const sdk_example_1 = require("./sdk-example");
const setup_1 = require("./sdk-setup/setup");
const svelte_config_1 = require("./sdk-setup/svelte-config");
const utils_1 = require("./utils");
async function runSvelteKitWizard(options) {
return (0, telemetry_1.withTelemetry)({
enabled: options.telemetryEnabled,
integration: 'sveltekit',
wizardOptions: options,
}, () => runSvelteKitWizardWithTelemetry(options));
}
exports.runSvelteKitWizard = runSvelteKitWizard;
async function runSvelteKitWizardWithTelemetry(options) {
const { promoCode, telemetryEnabled, forceInstall } = options;
(0, clack_1.printWelcome)({
wizardName: 'Sentry SvelteKit Wizard',
promoCode,
telemetryEnabled,
});
await (0, clack_1.confirmContinueIfNoOrDirtyGitRepo)({
ignoreGitChanges: options.ignoreGitChanges,
cwd: undefined,
});
const packageJson = await (0, clack_1.getPackageDotJson)();
await (0, clack_1.ensurePackageIsInstalled)(packageJson, '@sveltejs/kit', 'Sveltekit');
const kitVersion = (0, package_json_1.getPackageVersion)('@sveltejs/kit', packageJson);
const kitVersionBucket = (0, utils_1.getKitVersionBucket)(kitVersion);
Sentry.setTag('sveltekit-version', kitVersionBucket);
if (kitVersionBucket === '0.x') {
clack.log.warn("It seems you're using a SvelteKit version <1.0.0 which is not supported by Sentry.\nWe recommend upgrading to the latest 1.x version before you continue.");
const shouldContinue = await (0, clack_1.abortIfCancelled)(clack.select({
message: 'Do you want to continue anyway?',
options: [
{
label: 'Yes, continue',
hint: 'The SDK might not work correctly',
value: true,
},
{ label: "No, I'll upgrade first", value: false },
],
}));
if (!shouldContinue) {
await (0, clack_1.abort)('Exiting Wizard', 0);
return;
}
}
let setupForSvelteKitTracing = kitVersionBucket === '>=2.31.0';
if (kitVersionBucket !== '>=2.31.0') {
clack.log.warn(`It seems you're using a SvelteKit version ${chalk_1.default.cyan('<2.31.0')} (detected ${chalk_1.default.cyan(kitVersion ?? 'unknown')}).
We recommend upgrading SvelteKit to version ${chalk_1.default.cyan('>=2.31.0')} to use SvelteKit's builtin observability:
${chalk_1.default.cyan('https://svelte.dev/docs/kit/observability')}
Sentry works best with SvelteKit versions ${chalk_1.default.cyan('>=2.31.0')}.
If you prefer, you can stay on your current version and use the Sentry SDK
without SvelteKit's builtin observability.`);
const decision = await (0, clack_1.abortIfCancelled)(clack.select({
message: 'Do you want to continue anyway?',
options: [
{
label: "No, I'll upgrade SvelteKit first",
hint: 'Recommended',
value: 'exit-to-upgrade',
},
{
label: "I'm already on SvelteKit >=2.31.0",
hint: 'Sorry, my bad!',
value: 'install-with-kit-tracing',
},
{
label: 'Yes, continue',
hint: 'No Problem!',
value: 'install-without-kit-tracing',
},
],
}));
if (decision === 'install-with-kit-tracing') {
setupForSvelteKitTracing = true;
}
if (decision === 'exit-to-upgrade') {
await (0, clack_1.abort)('Exiting Wizard', 0);
return;
}
}
Sentry.setTag('svelte-version', (0, utils_1.getSvelteVersionBucket)((0, package_json_1.getPackageVersion)('svelte', packageJson)));
const { selectedProject, selfHosted, sentryUrl, authToken } = await (0, clack_1.getOrAskForProjectData)(options, 'javascript-sveltekit');
const sdkAlreadyInstalled = (0, package_json_1.hasPackageInstalled)('@sentry/sveltekit', packageJson);
Sentry.setTag('sdk-already-installed', sdkAlreadyInstalled);
await (0, clack_1.installPackage)({
packageName: '@sentry/sveltekit@^10',
packageNameDisplayLabel: '@sentry/sveltekit',
alreadyInstalled: sdkAlreadyInstalled,
forceInstall,
});
await (0, clack_1.addDotEnvSentryBuildPluginFile)(authToken);
const svelteConfig = await (0, telemetry_1.traceStep)('load-svelte-config', svelte_config_1.loadSvelteConfig);
try {
await (0, telemetry_1.traceStep)('configure-sdk', () => (0, setup_1.createOrMergeSvelteKitFiles)({
dsn: selectedProject.keys[0].dsn.public,
org: selectedProject.organization.slug,
project: selectedProject.slug,
selfHosted,
url: sentryUrl,
}, svelteConfig, setupForSvelteKitTracing));
}
catch (e) {
clack.log.error('Error while setting up the SvelteKit SDK:');
clack.log.info(chalk_1.default.dim(typeof e === 'object' && e != null && 'toString' in e
? e.toString()
: typeof e === 'string'
? e
: 'Unknown error'));
Sentry.captureException('Error while setting up the SvelteKit SDK');
await (0, clack_1.abort)('Exiting Wizard');
return;
}
const shouldCreateExamplePage = await (0, clack_1.askShouldCreateExamplePage)('/sentry-example-page');
if (shouldCreateExamplePage) {
try {
await (0, telemetry_1.traceStep)('create-example-page', () => (0, sdk_example_1.createExamplePage)(svelteConfig, {
selfHosted,
url: sentryUrl,
orgSlug: selectedProject.organization.slug,
projectId: selectedProject.id,
}));
}
catch (e) {
clack.log.error('Error while creating an example page to test Sentry:');
clack.log.info(chalk_1.default.dim(typeof e === 'object' && e != null && 'toString' in e
? e.toString()
: typeof e === 'string'
? e
: 'Unknown error'));
Sentry.captureException('Error while creating an example Svelte page to test Sentry');
await (0, clack_1.abort)('Exiting Wizard');
return;
}
}
await (0, clack_1.runPrettierIfInstalled)({ cwd: undefined });
// Offer optional project-scoped MCP config for Sentry with org and project scope
await (0, mcp_config_1.offerProjectScopedMcpConfig)(selectedProject.organization.slug, selectedProject.slug);
clack.outro(await buildOutroMessage(shouldCreateExamplePage));
}
exports.runSvelteKitWizardWithTelemetry = runSvelteKitWizardWithTelemetry;
async function buildOutroMessage(shouldCreateExamplePage) {
const packageManager = await (0, clack_1.getPackageManager)(package_manager_1.NPM);
let msg = chalk_1.default.green('Successfully installed the Sentry SvelteKit SDK!');
if (shouldCreateExamplePage) {
msg += `\n\nYou can validate your setup by starting your dev environment (${chalk_1.default.cyan(`\`${packageManager.runScriptCommand} dev\``)}) and visiting ${chalk_1.default.cyan('"/sentry-example-page"')}.`;
}
msg += `\n\nCheck out the SDK documentation for further configuration:
https://docs.sentry.io/platforms/javascript/guides/sveltekit/`;
return msg;
}
//# sourceMappingURL=sveltekit-wizard.js.map
;