@sentry/wizard 3.35.0 → 3.36.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.
@@ -1 +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"]}
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 chalk from 'chalk';\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 getPackageManager,\n installPackage,\n printWelcome,\n runPrettierIfInstalled,\n} from '../utils/clack-utils';\nimport { getPackageVersion, hasPackageInstalled } from '../utils/package-json';\nimport {\n addSDKModule,\n getNuxtConfig,\n createConfigFiles,\n addNuxtOverrides,\n} from './sdk-setup';\nimport {\n createExampleComponent,\n createExamplePage,\n supportsExamplePage,\n} from './sdk-example';\nimport { isNuxtV4 } from './utils';\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 packageManager = await getPackageManager();\n\n await addNuxtOverrides(packageManager, minVer);\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 packageManager,\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"]}
@@ -1,3 +1,5 @@
1
+ import { SemVer } from 'semver';
2
+ import { PackageManager } from '../utils/package-manager';
1
3
  export declare function getNuxtConfig(): Promise<string>;
2
4
  export declare function addSDKModule(config: string, options: {
3
5
  org: string;
@@ -6,3 +8,4 @@ export declare function addSDKModule(config: string, options: {
6
8
  selfHosted: boolean;
7
9
  }): Promise<void>;
8
10
  export declare function createConfigFiles(dsn: string): Promise<void>;
11
+ export declare function addNuxtOverrides(packageManager: PackageManager, nuxtMinVer: SemVer | null): Promise<void>;
@@ -69,11 +69,20 @@ var __generator = (this && this.__generator) || function (thisArg, body) {
69
69
  if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
70
70
  }
71
71
  };
72
+ var __spreadArray = (this && this.__spreadArray) || function (to, from, pack) {
73
+ if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {
74
+ if (ar || !(i in from)) {
75
+ if (!ar) ar = Array.prototype.slice.call(from, 0, i);
76
+ ar[i] = from[i];
77
+ }
78
+ }
79
+ return to.concat(ar || Array.prototype.slice.call(from));
80
+ };
72
81
  var __importDefault = (this && this.__importDefault) || function (mod) {
73
82
  return (mod && mod.__esModule) ? mod : { "default": mod };
74
83
  };
75
84
  Object.defineProperty(exports, "__esModule", { value: true });
76
- exports.createConfigFiles = exports.addSDKModule = exports.getNuxtConfig = void 0;
85
+ exports.addNuxtOverrides = exports.createConfigFiles = exports.addSDKModule = exports.getNuxtConfig = void 0;
77
86
  // @ts-expect-error - clack is ESM and TS complains about that. It works though
78
87
  var prompts_1 = __importDefault(require("@clack/prompts"));
79
88
  var Sentry = __importStar(require("@sentry/node"));
@@ -87,6 +96,7 @@ var path_1 = __importDefault(require("path"));
87
96
  var templates_1 = require("./templates");
88
97
  var clack_utils_1 = require("../utils/clack-utils");
89
98
  var telemetry_1 = require("../telemetry");
99
+ var semver_1 = require("semver");
90
100
  var possibleNuxtConfig = [
91
101
  'nuxt.config.js',
92
102
  'nuxt.config.mjs',
@@ -272,4 +282,45 @@ function createConfigFiles(dsn) {
272
282
  });
273
283
  }
274
284
  exports.createConfigFiles = createConfigFiles;
285
+ function addNuxtOverrides(packageManager, nuxtMinVer) {
286
+ return __awaiter(this, void 0, void 0, function () {
287
+ var overrides, _i, overrides_1, _a, pkgName, pkgVersion, shouldAddOverride;
288
+ return __generator(this, function (_b) {
289
+ switch (_b.label) {
290
+ case 0:
291
+ overrides = __spreadArray([
292
+ {
293
+ pkgName: 'nitropack',
294
+ pkgVersion: '~2.9.7',
295
+ },
296
+ {
297
+ pkgName: '@vercel/nft',
298
+ pkgVersion: '^0.27.4',
299
+ }
300
+ ], (nuxtMinVer && (0, semver_1.lt)(nuxtMinVer, '3.14.0')
301
+ ? [{ pkgName: 'ofetch', pkgVersion: '^1.4.0' }]
302
+ : []), true);
303
+ prompts_1.default.log.warn("To ensure Sentry can properly instrument your code it needs to add version overrides for some Nuxt dependencies.\n\nFor more info see: ".concat(chalk_1.default.cyan('https://github.com/getsentry/sentry-javascript/issues/14514')));
304
+ _i = 0, overrides_1 = overrides;
305
+ _b.label = 1;
306
+ case 1:
307
+ if (!(_i < overrides_1.length)) return [3 /*break*/, 5];
308
+ _a = overrides_1[_i], pkgName = _a.pkgName, pkgVersion = _a.pkgVersion;
309
+ return [4 /*yield*/, (0, clack_utils_1.askShouldAddPackageOverride)(pkgName, pkgVersion)];
310
+ case 2:
311
+ shouldAddOverride = _b.sent();
312
+ if (!shouldAddOverride) return [3 /*break*/, 4];
313
+ return [4 /*yield*/, packageManager.addOverride(pkgName, pkgVersion)];
314
+ case 3:
315
+ _b.sent();
316
+ _b.label = 4;
317
+ case 4:
318
+ _i++;
319
+ return [3 /*break*/, 1];
320
+ case 5: return [2 /*return*/];
321
+ }
322
+ });
323
+ });
324
+ }
325
+ exports.addNuxtOverrides = addNuxtOverrides;
275
326
  //# sourceMappingURL=sdk-setup.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"sdk-setup.js","sourceRoot":"","sources":["../../../src/nuxt/sdk-setup.ts"],"names":[],"mappings":"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","sourcesContent":["// @ts-expect-error - clack is ESM and TS complains about that. It works though\nimport clack from '@clack/prompts';\nimport * as Sentry from '@sentry/node';\nimport chalk from 'chalk';\nimport fs from 'fs';\n// @ts-expect-error - magicast is ESM and TS complains about that. It works though\nimport { loadFile, generateCode, MagicastError } from 'magicast';\n// @ts-expect-error - magicast is ESM and TS complains about that. It works though\nimport { addNuxtModule } from 'magicast/helpers';\nimport path from 'path';\nimport {\n getConfigBody,\n getDefaultNuxtConfig,\n getNuxtModuleFallbackTemplate,\n getSentryConfigContents,\n} from './templates';\nimport {\n abort,\n abortIfCancelled,\n featureSelectionPrompt,\n isUsingTypeScript,\n} from '../utils/clack-utils';\nimport { traceStep } from '../telemetry';\n\nconst possibleNuxtConfig = [\n 'nuxt.config.js',\n 'nuxt.config.mjs',\n 'nuxt.config.cjs',\n 'nuxt.config.ts',\n 'nuxt.config.mts',\n 'nuxt.config.cts',\n];\n\nexport async function getNuxtConfig(): Promise<string> {\n let configFile = possibleNuxtConfig.find((fileName) =>\n fs.existsSync(path.join(process.cwd(), fileName)),\n );\n\n if (!configFile) {\n clack.log.info('No Nuxt config file found, creating a new one.');\n Sentry.setTag('nuxt-config-strategy', 'create');\n // nuxt recommends its config to be .ts by default\n configFile = 'nuxt.config.ts';\n\n await fs.promises.writeFile(\n path.join(process.cwd(), configFile),\n getDefaultNuxtConfig(),\n { encoding: 'utf-8', flag: 'w' },\n );\n\n clack.log.success(`Created ${chalk.cyan('nuxt.config.ts')}.`);\n }\n\n return path.join(process.cwd(), configFile);\n}\n\nexport async function addSDKModule(\n config: string,\n options: { org: string; project: string; url: string; selfHosted: boolean },\n): Promise<void> {\n try {\n const mod = await loadFile(config);\n\n addNuxtModule(mod, '@sentry/nuxt/module', 'sentry', {\n sourceMapsUploadOptions: {\n org: options.org,\n project: options.project,\n ...(options.selfHosted && { url: options.url }),\n },\n });\n addNuxtModule(mod, '@sentry/nuxt/module', 'sourcemap', {\n client: 'hidden',\n });\n\n const { code } = generateCode(mod);\n\n await fs.promises.writeFile(config, code, { encoding: 'utf-8', flag: 'w' });\n\n clack.log.success(\n `Added Sentry Nuxt Module to ${chalk.cyan(path.basename(config))}.`,\n );\n } catch (e: unknown) {\n // Cases where users spread options are not covered by magicast,\n // so we fall back to showing how to configure the nuxt config\n // manually.\n if (e instanceof MagicastError) {\n clack.log.warn(\n `Automatic configuration of ${chalk.cyan(\n path.basename(config),\n )} failed, please add the following settings:`,\n );\n // eslint-disable-next-line no-console\n console.log(`\\n\\n${getNuxtModuleFallbackTemplate(options)}\\n\\n`);\n } else {\n clack.log.error(\n 'Error while adding the Sentry Nuxt Module to the Nuxt config.',\n );\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('Error while setting up the Nuxt SDK');\n await abort('Exiting Wizard');\n }\n }\n}\n\nexport async function createConfigFiles(dsn: string) {\n const selectedFeatures = await featureSelectionPrompt([\n {\n id: 'performance',\n prompt: `Do you want to enable ${chalk.bold(\n 'Tracing',\n )} to track the performance of your application?`,\n enabledHint: 'recommended',\n },\n {\n id: 'replay',\n prompt: `Do you want to enable ${chalk.bold(\n 'Sentry Session Replay',\n )} to get a video-like reproduction of errors during a user session?`,\n enabledHint: 'recommended, but increases bundle size',\n },\n ] as const);\n\n const typeScriptDetected = isUsingTypeScript();\n\n const configVariants = ['server', 'client'] as const;\n\n for (const configVariant of configVariants) {\n await traceStep(`create-sentry-${configVariant}-config`, async () => {\n const jsConfig = `sentry.${configVariant}.config.js`;\n const tsConfig = `sentry.${configVariant}.config.ts`;\n\n const jsConfigExists = fs.existsSync(path.join(process.cwd(), jsConfig));\n const tsConfigExists = fs.existsSync(path.join(process.cwd(), tsConfig));\n\n let shouldWriteFile = true;\n\n if (jsConfigExists || tsConfigExists) {\n const existingConfigs = [];\n\n if (jsConfigExists) {\n existingConfigs.push(jsConfig);\n }\n\n if (tsConfigExists) {\n existingConfigs.push(tsConfig);\n }\n\n const overwriteExistingConfigs = await abortIfCancelled(\n clack.confirm({\n message: `Found existing Sentry ${configVariant} config (${existingConfigs.join(\n ', ',\n )}). Overwrite ${existingConfigs.length > 1 ? 'them' : 'it'}?`,\n }),\n );\n Sentry.setTag(\n `overwrite-${configVariant}-config`,\n overwriteExistingConfigs,\n );\n\n shouldWriteFile = overwriteExistingConfigs;\n\n if (overwriteExistingConfigs) {\n if (jsConfigExists) {\n fs.unlinkSync(path.join(process.cwd(), jsConfig));\n clack.log.warn(`Removed existing ${chalk.cyan(jsConfig)}.`);\n }\n if (tsConfigExists) {\n fs.unlinkSync(path.join(process.cwd(), tsConfig));\n clack.log.warn(`Removed existing ${chalk.cyan(tsConfig)}.`);\n }\n }\n }\n\n if (shouldWriteFile) {\n await fs.promises.writeFile(\n path.join(process.cwd(), typeScriptDetected ? tsConfig : jsConfig),\n getSentryConfigContents(dsn, configVariant, selectedFeatures),\n { encoding: 'utf8', flag: 'w' },\n );\n clack.log.success(\n `Created new ${chalk.cyan(\n typeScriptDetected ? tsConfig : jsConfig,\n )}.`,\n );\n Sentry.setTag(`created-${configVariant}-config`, true);\n } else {\n clack.log.info(\n `Okay, here are the changes your ${chalk.cyan(\n typeScriptDetected ? tsConfig : jsConfig,\n )} should contain:`,\n );\n // eslint-disable-next-line no-console\n console.log(\n '\\n\\n ' +\n getConfigBody(dsn, configVariant, selectedFeatures) +\n '\\n\\n',\n );\n }\n });\n }\n}\n"]}
1
+ {"version":3,"file":"sdk-setup.js","sourceRoot":"","sources":["../../../src/nuxt/sdk-setup.ts"],"names":[],"mappings":"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","sourcesContent":["// @ts-expect-error - clack is ESM and TS complains about that. It works though\nimport clack from '@clack/prompts';\nimport * as Sentry from '@sentry/node';\nimport chalk from 'chalk';\nimport fs from 'fs';\n// @ts-expect-error - magicast is ESM and TS complains about that. It works though\nimport { loadFile, generateCode, MagicastError } from 'magicast';\n// @ts-expect-error - magicast is ESM and TS complains about that. It works though\nimport { addNuxtModule } from 'magicast/helpers';\nimport path from 'path';\nimport {\n getConfigBody,\n getDefaultNuxtConfig,\n getNuxtModuleFallbackTemplate,\n getSentryConfigContents,\n} from './templates';\nimport {\n abort,\n abortIfCancelled,\n askShouldAddPackageOverride,\n featureSelectionPrompt,\n isUsingTypeScript,\n} from '../utils/clack-utils';\nimport { traceStep } from '../telemetry';\nimport { lt, SemVer } from 'semver';\nimport { PackageManager } from '../utils/package-manager';\n\nconst possibleNuxtConfig = [\n 'nuxt.config.js',\n 'nuxt.config.mjs',\n 'nuxt.config.cjs',\n 'nuxt.config.ts',\n 'nuxt.config.mts',\n 'nuxt.config.cts',\n];\n\nexport async function getNuxtConfig(): Promise<string> {\n let configFile = possibleNuxtConfig.find((fileName) =>\n fs.existsSync(path.join(process.cwd(), fileName)),\n );\n\n if (!configFile) {\n clack.log.info('No Nuxt config file found, creating a new one.');\n Sentry.setTag('nuxt-config-strategy', 'create');\n // nuxt recommends its config to be .ts by default\n configFile = 'nuxt.config.ts';\n\n await fs.promises.writeFile(\n path.join(process.cwd(), configFile),\n getDefaultNuxtConfig(),\n { encoding: 'utf-8', flag: 'w' },\n );\n\n clack.log.success(`Created ${chalk.cyan('nuxt.config.ts')}.`);\n }\n\n return path.join(process.cwd(), configFile);\n}\n\nexport async function addSDKModule(\n config: string,\n options: { org: string; project: string; url: string; selfHosted: boolean },\n): Promise<void> {\n try {\n const mod = await loadFile(config);\n\n addNuxtModule(mod, '@sentry/nuxt/module', 'sentry', {\n sourceMapsUploadOptions: {\n org: options.org,\n project: options.project,\n ...(options.selfHosted && { url: options.url }),\n },\n });\n addNuxtModule(mod, '@sentry/nuxt/module', 'sourcemap', {\n client: 'hidden',\n });\n\n const { code } = generateCode(mod);\n\n await fs.promises.writeFile(config, code, { encoding: 'utf-8', flag: 'w' });\n\n clack.log.success(\n `Added Sentry Nuxt Module to ${chalk.cyan(path.basename(config))}.`,\n );\n } catch (e: unknown) {\n // Cases where users spread options are not covered by magicast,\n // so we fall back to showing how to configure the nuxt config\n // manually.\n if (e instanceof MagicastError) {\n clack.log.warn(\n `Automatic configuration of ${chalk.cyan(\n path.basename(config),\n )} failed, please add the following settings:`,\n );\n // eslint-disable-next-line no-console\n console.log(`\\n\\n${getNuxtModuleFallbackTemplate(options)}\\n\\n`);\n } else {\n clack.log.error(\n 'Error while adding the Sentry Nuxt Module to the Nuxt config.',\n );\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('Error while setting up the Nuxt SDK');\n await abort('Exiting Wizard');\n }\n }\n}\n\nexport async function createConfigFiles(dsn: string) {\n const selectedFeatures = await featureSelectionPrompt([\n {\n id: 'performance',\n prompt: `Do you want to enable ${chalk.bold(\n 'Tracing',\n )} to track the performance of your application?`,\n enabledHint: 'recommended',\n },\n {\n id: 'replay',\n prompt: `Do you want to enable ${chalk.bold(\n 'Sentry Session Replay',\n )} to get a video-like reproduction of errors during a user session?`,\n enabledHint: 'recommended, but increases bundle size',\n },\n ] as const);\n\n const typeScriptDetected = isUsingTypeScript();\n\n const configVariants = ['server', 'client'] as const;\n\n for (const configVariant of configVariants) {\n await traceStep(`create-sentry-${configVariant}-config`, async () => {\n const jsConfig = `sentry.${configVariant}.config.js`;\n const tsConfig = `sentry.${configVariant}.config.ts`;\n\n const jsConfigExists = fs.existsSync(path.join(process.cwd(), jsConfig));\n const tsConfigExists = fs.existsSync(path.join(process.cwd(), tsConfig));\n\n let shouldWriteFile = true;\n\n if (jsConfigExists || tsConfigExists) {\n const existingConfigs = [];\n\n if (jsConfigExists) {\n existingConfigs.push(jsConfig);\n }\n\n if (tsConfigExists) {\n existingConfigs.push(tsConfig);\n }\n\n const overwriteExistingConfigs = await abortIfCancelled(\n clack.confirm({\n message: `Found existing Sentry ${configVariant} config (${existingConfigs.join(\n ', ',\n )}). Overwrite ${existingConfigs.length > 1 ? 'them' : 'it'}?`,\n }),\n );\n Sentry.setTag(\n `overwrite-${configVariant}-config`,\n overwriteExistingConfigs,\n );\n\n shouldWriteFile = overwriteExistingConfigs;\n\n if (overwriteExistingConfigs) {\n if (jsConfigExists) {\n fs.unlinkSync(path.join(process.cwd(), jsConfig));\n clack.log.warn(`Removed existing ${chalk.cyan(jsConfig)}.`);\n }\n if (tsConfigExists) {\n fs.unlinkSync(path.join(process.cwd(), tsConfig));\n clack.log.warn(`Removed existing ${chalk.cyan(tsConfig)}.`);\n }\n }\n }\n\n if (shouldWriteFile) {\n await fs.promises.writeFile(\n path.join(process.cwd(), typeScriptDetected ? tsConfig : jsConfig),\n getSentryConfigContents(dsn, configVariant, selectedFeatures),\n { encoding: 'utf8', flag: 'w' },\n );\n clack.log.success(\n `Created new ${chalk.cyan(\n typeScriptDetected ? tsConfig : jsConfig,\n )}.`,\n );\n Sentry.setTag(`created-${configVariant}-config`, true);\n } else {\n clack.log.info(\n `Okay, here are the changes your ${chalk.cyan(\n typeScriptDetected ? tsConfig : jsConfig,\n )} should contain:`,\n );\n // eslint-disable-next-line no-console\n console.log(\n '\\n\\n ' +\n getConfigBody(dsn, configVariant, selectedFeatures) +\n '\\n\\n',\n );\n }\n });\n }\n}\n\nexport async function addNuxtOverrides(\n packageManager: PackageManager,\n nuxtMinVer: SemVer | null,\n) {\n const overrides = [\n {\n pkgName: 'nitropack',\n pkgVersion: '~2.9.7',\n },\n {\n pkgName: '@vercel/nft',\n pkgVersion: '^0.27.4',\n },\n ...(nuxtMinVer && lt(nuxtMinVer, '3.14.0')\n ? [{ pkgName: 'ofetch', pkgVersion: '^1.4.0' }]\n : []),\n ];\n\n clack.log.warn(\n `To ensure Sentry can properly instrument your code it needs to add version overrides for some Nuxt dependencies.\\n\\nFor more info see: ${chalk.cyan(\n 'https://github.com/getsentry/sentry-javascript/issues/14514',\n )}`,\n );\n\n for (const { pkgName, pkgVersion } of overrides) {\n const shouldAddOverride = await askShouldAddPackageOverride(\n pkgName,\n pkgVersion,\n );\n\n if (shouldAddOverride) {\n await packageManager.addOverride(pkgName, pkgVersion);\n }\n }\n}\n"]}
@@ -52,13 +52,14 @@ export declare function confirmContinueIfPackageVersionNotSupported({ packageId,
52
52
  * IMPORTANT: This function modifies the `package.json`! Be sure to re-read
53
53
  * it if you make additional modifications to it after calling this function!
54
54
  */
55
- export declare function installPackage({ packageName, alreadyInstalled, askBeforeUpdating, packageNameDisplayLabel, }: {
55
+ export declare function installPackage({ packageName, alreadyInstalled, askBeforeUpdating, packageNameDisplayLabel, packageManager, }: {
56
56
  /** The string that is passed to the package manager CLI as identifier to install (e.g. `@sentry/nextjs`, or `@sentry/nextjs@^8`) */
57
57
  packageName: string;
58
58
  alreadyInstalled: boolean;
59
59
  askBeforeUpdating?: boolean;
60
60
  /** Overrides what is shown in the installation logs in place of the `packageName` option. Useful if the `packageName` is ugly (e.g. `@sentry/nextjs@^8`) */
61
61
  packageNameDisplayLabel?: string;
62
+ packageManager?: PackageManager;
62
63
  }): Promise<{
63
64
  packageManager?: PackageManager;
64
65
  }>;
@@ -77,6 +78,7 @@ export declare function runPrettierIfInstalled(): Promise<void>;
77
78
  */
78
79
  export declare function ensurePackageIsInstalled(packageJson: PackageDotJson, packageId: string, packageName: string): Promise<void>;
79
80
  export declare function getPackageDotJson(): Promise<PackageDotJson>;
81
+ export declare function updatePackageDotJson(packageDotJson: PackageDotJson): Promise<void>;
80
82
  export declare function getPackageManager(): Promise<PackageManager>;
81
83
  export declare function isUsingTypeScript(): boolean;
82
84
  /**
@@ -184,4 +186,5 @@ export declare function askShouldCreateExampleComponent(): Promise<boolean>;
184
186
  export declare function featureSelectionPrompt<F extends ReadonlyArray<Feature>>(features: F): Promise<{
185
187
  [key in F[number]['id']]: boolean;
186
188
  }>;
189
+ export declare function askShouldAddPackageOverride(pkgName: string, pkgVersion: string): Promise<boolean>;
187
190
  export {};
@@ -62,7 +62,7 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
62
62
  return (mod && mod.__esModule) ? mod : { "default": mod };
63
63
  };
64
64
  Object.defineProperty(exports, "__esModule", { value: true });
65
- exports.featureSelectionPrompt = exports.askShouldCreateExampleComponent = exports.askShouldCreateExamplePage = exports.createNewConfigFile = exports.makeCodeSnippet = exports.showCopyPasteInstructions = exports.askForToolConfigPath = exports.getOrAskForProjectData = exports.isUsingTypeScript = exports.getPackageManager = exports.getPackageDotJson = exports.ensurePackageIsInstalled = exports.runPrettierIfInstalled = exports.addDotEnvSentryBuildPluginFile = exports.addSentryCliConfig = exports.installPackage = exports.confirmContinueIfPackageVersionNotSupported = exports.askForItemSelection = exports.askToInstallSentryCLI = exports.getUncommittedOrUntrackedFiles = exports.isInGitRepo = exports.confirmContinueIfNoOrDirtyGitRepo = exports.printWelcome = exports.abortIfCancelled = exports.abort = exports.propertiesCliSetupConfig = exports.rcCliSetupConfig = exports.SENTRY_PROPERTIES_FILE = exports.SENTRY_CLI_RC_FILE = exports.SENTRY_DOT_ENV_FILE = void 0;
65
+ exports.askShouldAddPackageOverride = exports.featureSelectionPrompt = exports.askShouldCreateExampleComponent = exports.askShouldCreateExamplePage = exports.createNewConfigFile = exports.makeCodeSnippet = exports.showCopyPasteInstructions = exports.askForToolConfigPath = exports.getOrAskForProjectData = exports.isUsingTypeScript = exports.getPackageManager = exports.updatePackageDotJson = exports.getPackageDotJson = exports.ensurePackageIsInstalled = exports.runPrettierIfInstalled = exports.addDotEnvSentryBuildPluginFile = exports.addSentryCliConfig = exports.installPackage = exports.confirmContinueIfPackageVersionNotSupported = exports.askForItemSelection = exports.askToInstallSentryCLI = exports.getUncommittedOrUntrackedFiles = exports.isInGitRepo = exports.confirmContinueIfNoOrDirtyGitRepo = exports.printWelcome = exports.abortIfCancelled = exports.abort = exports.propertiesCliSetupConfig = exports.rcCliSetupConfig = exports.SENTRY_PROPERTIES_FILE = exports.SENTRY_CLI_RC_FILE = exports.SENTRY_DOT_ENV_FILE = void 0;
66
66
  // @ts-ignore - clack is ESM and TS complains about that. It works though
67
67
  var clack = __importStar(require("@clack/prompts"));
68
68
  var axios_1 = __importDefault(require("axios"));
@@ -364,36 +364,41 @@ exports.confirmContinueIfPackageVersionNotSupported = confirmContinueIfPackageVe
364
364
  * it if you make additional modifications to it after calling this function!
365
365
  */
366
366
  function installPackage(_a) {
367
- var packageName = _a.packageName, alreadyInstalled = _a.alreadyInstalled, _b = _a.askBeforeUpdating, askBeforeUpdating = _b === void 0 ? true : _b, packageNameDisplayLabel = _a.packageNameDisplayLabel;
367
+ var packageName = _a.packageName, alreadyInstalled = _a.alreadyInstalled, _b = _a.askBeforeUpdating, askBeforeUpdating = _b === void 0 ? true : _b, packageNameDisplayLabel = _a.packageNameDisplayLabel, packageManager = _a.packageManager;
368
368
  return __awaiter(this, void 0, void 0, function () {
369
369
  var _this = this;
370
370
  return __generator(this, function (_c) {
371
371
  return [2 /*return*/, (0, telemetry_1.traceStep)('install-package', function () { return __awaiter(_this, void 0, void 0, function () {
372
- var shouldUpdatePackage, sdkInstallSpinner, packageManager, e_1;
373
- return __generator(this, function (_a) {
374
- switch (_a.label) {
372
+ var shouldUpdatePackage, sdkInstallSpinner, pkgManager, _a, e_1;
373
+ return __generator(this, function (_b) {
374
+ switch (_b.label) {
375
375
  case 0:
376
376
  if (!(alreadyInstalled && askBeforeUpdating)) return [3 /*break*/, 2];
377
377
  return [4 /*yield*/, abortIfCancelled(clack.confirm({
378
378
  message: "The ".concat(chalk_1.default.bold.cyan(packageNameDisplayLabel !== null && packageNameDisplayLabel !== void 0 ? packageNameDisplayLabel : packageName), " package is already installed. Do you want to update it to the latest version?"),
379
379
  }))];
380
380
  case 1:
381
- shouldUpdatePackage = _a.sent();
381
+ shouldUpdatePackage = _b.sent();
382
382
  if (!shouldUpdatePackage) {
383
383
  return [2 /*return*/, {}];
384
384
  }
385
- _a.label = 2;
385
+ _b.label = 2;
386
386
  case 2:
387
387
  sdkInstallSpinner = clack.spinner();
388
+ _a = packageManager;
389
+ if (_a) return [3 /*break*/, 4];
388
390
  return [4 /*yield*/, getPackageManager()];
389
391
  case 3:
390
- packageManager = _a.sent();
391
- sdkInstallSpinner.start("".concat(alreadyInstalled ? 'Updating' : 'Installing', " ").concat(chalk_1.default.bold.cyan(packageNameDisplayLabel !== null && packageNameDisplayLabel !== void 0 ? packageNameDisplayLabel : packageName), " with ").concat(chalk_1.default.bold(packageManager.label), "."));
392
- _a.label = 4;
392
+ _a = (_b.sent());
393
+ _b.label = 4;
393
394
  case 4:
394
- _a.trys.push([4, 6, , 8]);
395
+ pkgManager = _a;
396
+ sdkInstallSpinner.start("".concat(alreadyInstalled ? 'Updating' : 'Installing', " ").concat(chalk_1.default.bold.cyan(packageNameDisplayLabel !== null && packageNameDisplayLabel !== void 0 ? packageNameDisplayLabel : packageName), " with ").concat(chalk_1.default.bold(pkgManager.label), "."));
397
+ _b.label = 5;
398
+ case 5:
399
+ _b.trys.push([5, 7, , 9]);
395
400
  return [4 /*yield*/, new Promise(function (resolve, reject) {
396
- childProcess.exec("".concat(packageManager.installCommand, " ").concat(packageName, " ").concat(packageManager.flags), function (err, stdout, stderr) {
401
+ childProcess.exec("".concat(pkgManager.installCommand, " ").concat(packageName, " ").concat(pkgManager.flags), function (err, stdout, stderr) {
397
402
  if (err) {
398
403
  // Write a log file so we can better troubleshoot issues
399
404
  fs.writeFileSync(path.join(process.cwd(), "sentry-wizard-installation-error-".concat(Date.now(), ".log")), JSON.stringify({
@@ -407,20 +412,20 @@ function installPackage(_a) {
407
412
  }
408
413
  });
409
414
  })];
410
- case 5:
411
- _a.sent();
412
- return [3 /*break*/, 8];
413
415
  case 6:
414
- e_1 = _a.sent();
416
+ _b.sent();
417
+ return [3 /*break*/, 9];
418
+ case 7:
419
+ e_1 = _b.sent();
415
420
  sdkInstallSpinner.stop('Installation failed.');
416
421
  clack.log.error("".concat(chalk_1.default.red('Encountered the following error during installation:'), "\n\n").concat(e_1, "\n\n").concat(chalk_1.default.dim("The wizard has created a `sentry-wizard-installation-error-*.log` file. If you think this issue is caused by the Sentry wizard, create an issue on GitHub and include the log file's content:\nhttps://github.com/getsentry/sentry-wizard/issues")));
417
422
  return [4 /*yield*/, abort()];
418
- case 7:
419
- _a.sent();
420
- return [3 /*break*/, 8];
421
423
  case 8:
422
- sdkInstallSpinner.stop("".concat(alreadyInstalled ? 'Updated' : 'Installed', " ").concat(chalk_1.default.bold.cyan(packageNameDisplayLabel !== null && packageNameDisplayLabel !== void 0 ? packageNameDisplayLabel : packageName), " with ").concat(chalk_1.default.bold(packageManager.label), "."));
423
- return [2 /*return*/, { packageManager: packageManager }];
424
+ _b.sent();
425
+ return [3 /*break*/, 9];
426
+ case 9:
427
+ sdkInstallSpinner.stop("".concat(alreadyInstalled ? 'Updated' : 'Installed', " ").concat(chalk_1.default.bold.cyan(packageNameDisplayLabel !== null && packageNameDisplayLabel !== void 0 ? packageNameDisplayLabel : packageName), " with ").concat(chalk_1.default.bold(pkgManager.label), "."));
428
+ return [2 /*return*/, { packageManager: pkgManager }];
424
429
  }
425
430
  });
426
431
  }); })];
@@ -744,6 +749,35 @@ function getPackageDotJson() {
744
749
  });
745
750
  }
746
751
  exports.getPackageDotJson = getPackageDotJson;
752
+ function updatePackageDotJson(packageDotJson) {
753
+ return __awaiter(this, void 0, void 0, function () {
754
+ var _a;
755
+ return __generator(this, function (_b) {
756
+ switch (_b.label) {
757
+ case 0:
758
+ _b.trys.push([0, 2, , 4]);
759
+ return [4 /*yield*/, fs.promises.writeFile(path.join(process.cwd(), 'package.json'),
760
+ // TODO: maybe figure out the original indentation
761
+ JSON.stringify(packageDotJson, null, 2), {
762
+ encoding: 'utf8',
763
+ flag: 'w',
764
+ })];
765
+ case 1:
766
+ _b.sent();
767
+ return [3 /*break*/, 4];
768
+ case 2:
769
+ _a = _b.sent();
770
+ clack.log.error("Unable to update your ".concat(chalk_1.default.cyan('package.json'), "."));
771
+ return [4 /*yield*/, abort()];
772
+ case 3:
773
+ _b.sent();
774
+ return [3 /*break*/, 4];
775
+ case 4: return [2 /*return*/];
776
+ }
777
+ });
778
+ });
779
+ }
780
+ exports.updatePackageDotJson = updatePackageDotJson;
747
781
  function getPackageManager() {
748
782
  return __awaiter(this, void 0, void 0, function () {
749
783
  var detectedPackageManager, selectedPackageManager;
@@ -1338,4 +1372,16 @@ function featureSelectionPrompt(features) {
1338
1372
  });
1339
1373
  }
1340
1374
  exports.featureSelectionPrompt = featureSelectionPrompt;
1375
+ function askShouldAddPackageOverride(pkgName, pkgVersion) {
1376
+ return __awaiter(this, void 0, void 0, function () {
1377
+ return __generator(this, function (_a) {
1378
+ return [2 /*return*/, (0, telemetry_1.traceStep)("ask-add-package-override", function () {
1379
+ return abortIfCancelled(clack.confirm({
1380
+ message: "Do you want to add an override for ".concat(chalk_1.default.cyan(pkgName), " version ").concat(chalk_1.default.cyan(pkgVersion), "?"),
1381
+ }));
1382
+ })];
1383
+ });
1384
+ });
1385
+ }
1386
+ exports.askShouldAddPackageOverride = askShouldAddPackageOverride;
1341
1387
  //# sourceMappingURL=clack-utils.js.map