UNPKG

@sentry/wizard

Version:

Sentry wizard helping you to configure your project

194 lines (191 loc) 9.35 kB
"use strict"; 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