@sentry/wizard 3.10.0 → 3.11.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 +47 -7
- package/dist/lib/Constants.d.ts +1 -0
- package/dist/lib/Constants.js +5 -0
- package/dist/lib/Constants.js.map +1 -1
- package/dist/lib/Steps/ChooseIntegration.js +8 -4
- package/dist/lib/Steps/ChooseIntegration.js.map +1 -1
- package/dist/lib/Steps/Integrations/Android.d.ts +9 -0
- package/dist/lib/Steps/Integrations/Android.js +86 -0
- package/dist/lib/Steps/Integrations/Android.js.map +1 -0
- package/dist/lib/Steps/Integrations/ReactNative.js +3 -3
- package/dist/lib/Steps/Integrations/ReactNative.js.map +1 -1
- package/dist/lib/Steps/PromptForParameters.js +36 -3
- package/dist/lib/Steps/PromptForParameters.js.map +1 -1
- package/dist/lib/Steps/SentryProjectSelector.js +1 -1
- package/dist/lib/Steps/SentryProjectSelector.js.map +1 -1
- package/dist/package.json +4 -3
- package/dist/src/android/android-wizard.d.ts +2 -0
- package/dist/src/android/android-wizard.js +217 -0
- package/dist/src/android/android-wizard.js.map +1 -0
- package/dist/src/android/code-tools.d.ts +39 -0
- package/dist/src/android/code-tools.js +161 -0
- package/dist/src/android/code-tools.js.map +1 -0
- package/dist/src/android/gradle.d.ts +62 -0
- package/dist/src/android/gradle.js +281 -0
- package/dist/src/android/gradle.js.map +1 -0
- package/dist/src/android/manifest.d.ts +57 -0
- package/dist/src/android/manifest.js +183 -0
- package/dist/src/android/manifest.js.map +1 -0
- package/dist/src/android/templates.d.ts +11 -0
- package/dist/src/android/templates.js +34 -0
- package/dist/src/android/templates.js.map +1 -0
- package/dist/src/apple/apple-wizard.js +123 -64
- package/dist/src/apple/apple-wizard.js.map +1 -1
- package/dist/src/apple/cocoapod.js +4 -3
- package/dist/src/apple/cocoapod.js.map +1 -1
- package/dist/src/apple/code-tools.d.ts +1 -1
- package/dist/src/apple/code-tools.js +43 -19
- package/dist/src/apple/code-tools.js.map +1 -1
- package/dist/src/apple/fastlane.d.ts +1 -1
- package/dist/src/apple/fastlane.js +12 -6
- package/dist/src/apple/fastlane.js.map +1 -1
- package/dist/src/apple/templates.d.ts +2 -2
- package/dist/src/apple/templates.js +4 -4
- package/dist/src/apple/templates.js.map +1 -1
- package/dist/src/apple/xcode-manager.d.ts +19 -3
- package/dist/src/apple/xcode-manager.js +126 -24
- package/dist/src/apple/xcode-manager.js.map +1 -1
- package/dist/src/nextjs/nextjs-wizard.js +49 -11
- package/dist/src/nextjs/nextjs-wizard.js.map +1 -1
- package/dist/src/nextjs/templates.d.ts +2 -0
- package/dist/src/nextjs/templates.js +6 -2
- package/dist/src/nextjs/templates.js.map +1 -1
- package/dist/src/remix/remix-wizard.js +10 -20
- package/dist/src/remix/remix-wizard.js.map +1 -1
- package/dist/src/sourcemaps/sourcemaps-wizard.js +26 -13
- package/dist/src/sourcemaps/sourcemaps-wizard.js.map +1 -1
- package/dist/src/sourcemaps/tools/nextjs.js +1 -1
- package/dist/src/sourcemaps/tools/nextjs.js.map +1 -1
- package/dist/src/sourcemaps/tools/sentry-cli.js +19 -16
- package/dist/src/sourcemaps/tools/sentry-cli.js.map +1 -1
- package/dist/src/sourcemaps/tools/vite.d.ts +2 -1
- package/dist/src/sourcemaps/tools/vite.js +99 -12
- package/dist/src/sourcemaps/tools/vite.js.map +1 -1
- package/dist/src/sourcemaps/utils/detect-tool.d.ts +1 -1
- package/dist/src/sourcemaps/utils/detect-tool.js.map +1 -1
- package/dist/src/sveltekit/sdk-setup.js +3 -3
- package/dist/src/sveltekit/sdk-setup.js.map +1 -1
- package/dist/src/sveltekit/sveltekit-wizard.js +34 -44
- package/dist/src/sveltekit/sveltekit-wizard.js.map +1 -1
- package/dist/src/telemetry.js +1 -0
- package/dist/src/telemetry.js.map +1 -1
- package/dist/src/utils/ast-utils.d.ts +2 -2
- package/dist/src/utils/ast-utils.js +7 -7
- package/dist/src/utils/ast-utils.js.map +1 -1
- package/dist/src/utils/clack-utils.d.ts +22 -28
- package/dist/src/utils/clack-utils.js +270 -264
- package/dist/src/utils/clack-utils.js.map +1 -1
- package/dist/src/utils/package-manager.d.ts +10 -0
- package/dist/{lib/Helper/PackageManager.js → src/utils/package-manager.js} +42 -74
- package/dist/src/utils/package-manager.js.map +1 -0
- package/dist/src/utils/release-registry.d.ts +1 -0
- package/dist/src/utils/release-registry.js +68 -0
- package/dist/src/utils/release-registry.js.map +1 -0
- package/dist/src/utils/sentrycli-utils.d.ts +4 -0
- package/dist/src/utils/sentrycli-utils.js +41 -0
- package/dist/src/utils/sentrycli-utils.js.map +1 -0
- package/dist/test/sourcemaps/tools/vite.test.d.ts +1 -0
- package/dist/test/sourcemaps/tools/vite.test.js +132 -0
- package/dist/test/sourcemaps/tools/vite.test.js.map +1 -0
- package/lib/Constants.ts +5 -0
- package/lib/Steps/ChooseIntegration.ts +7 -3
- package/lib/Steps/Integrations/Android.ts +23 -0
- package/lib/Steps/Integrations/ReactNative.ts +9 -3
- package/lib/Steps/PromptForParameters.ts +48 -3
- package/lib/Steps/SentryProjectSelector.ts +3 -1
- package/package.json +4 -3
- package/src/android/android-wizard.ts +196 -0
- package/src/android/code-tools.ts +156 -0
- package/src/android/gradle.ts +245 -0
- package/src/android/manifest.ts +180 -0
- package/src/android/templates.ts +88 -0
- package/src/apple/apple-wizard.ts +113 -35
- package/src/apple/cocoapod.ts +6 -3
- package/src/apple/code-tools.ts +46 -18
- package/src/apple/fastlane.ts +6 -12
- package/src/apple/templates.ts +2 -8
- package/src/apple/xcode-manager.ts +167 -25
- package/src/nextjs/nextjs-wizard.ts +72 -8
- package/src/nextjs/templates.ts +16 -2
- package/src/remix/remix-wizard.ts +10 -15
- package/src/sourcemaps/sourcemaps-wizard.ts +19 -5
- package/src/sourcemaps/tools/nextjs.ts +2 -2
- package/src/sourcemaps/tools/sentry-cli.ts +8 -7
- package/src/sourcemaps/tools/vite.ts +136 -6
- package/src/sourcemaps/utils/detect-tool.ts +2 -1
- package/src/sveltekit/sdk-setup.ts +4 -4
- package/src/sveltekit/sveltekit-wizard.ts +5 -14
- package/src/telemetry.ts +2 -0
- package/src/utils/ast-utils.ts +7 -5
- package/src/utils/clack-utils.ts +337 -283
- package/src/utils/package-manager.ts +61 -0
- package/src/utils/release-registry.ts +19 -0
- package/src/utils/sentrycli-utils.ts +22 -0
- package/test/sourcemaps/tools/vite.test.ts +149 -0
- package/dist/lib/Helper/PackageManager.d.ts +0 -22
- package/dist/lib/Helper/PackageManager.js.map +0 -1
- package/dist/src/utils/vendor/clack-custom-select.d.ts +0 -21
- package/dist/src/utils/vendor/clack-custom-select.js +0 -137
- package/dist/src/utils/vendor/clack-custom-select.js.map +0 -1
- package/lib/Helper/PackageManager.ts +0 -59
- package/src/utils/vendor/clack-custom-select.ts +0 -160
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sentry-cli.js","sourceRoot":"","sources":["../../../../src/sourcemaps/tools/sentry-cli.ts"],"names":[],"mappings":"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","sourcesContent":["// @ts-ignore - clack is ESM and TS complains about that. It works though\nimport clack from '@clack/prompts';\nimport chalk from 'chalk';\nimport * as Sentry from '@sentry/node';\nimport * as path from 'path';\nimport * as fs from 'fs';\nimport {\n abortIfCancelled,\n addSentryCliRc,\n detectPackageManager,\n getPackageDotJson,\n installPackage,\n} from '../../utils/clack-utils';\n\nimport { SourceMapUploadToolConfigurationOptions } from './types';\nimport { hasPackageInstalled, PackageDotJson } from '../../utils/package-json';\nimport { traceStep } from '../../telemetry';\n\nconst SENTRY_NPM_SCRIPT_NAME = 'sentry:sourcemaps';\n\nlet addedToBuildCommand = false;\n\nexport async function configureSentryCLI(\n options: SourceMapUploadToolConfigurationOptions,\n configureSourcemapGenerationFlow: () => Promise<void> = defaultConfigureSourcemapGenerationFlow,\n): Promise<void> {\n const packageDotJson = await getPackageDotJson();\n\n await installPackage({\n packageName: '@sentry/cli',\n alreadyInstalled: hasPackageInstalled('@sentry/cli', packageDotJson),\n });\n\n let validPath = false;\n let relativeArtifactPath;\n do {\n const rawArtifactPath = await abortIfCancelled(\n clack.text({\n message: 'Where are your build artifacts located?',\n placeholder: `.${path.sep}out`,\n validate(value) {\n if (!value) {\n return 'Please enter a path.';\n }\n },\n }),\n );\n\n if (path.isAbsolute(rawArtifactPath)) {\n relativeArtifactPath = path.relative(process.cwd(), rawArtifactPath);\n } else {\n relativeArtifactPath = rawArtifactPath;\n }\n\n try {\n await fs.promises.access(path.join(process.cwd(), relativeArtifactPath));\n validPath = true;\n } catch {\n validPath = await abortIfCancelled(\n clack.select({\n message: `We couldn't find artifacts at ${relativeArtifactPath}. Are you sure that this is the location that contains your build artifacts?`,\n options: [\n {\n label: 'No, let me verify.',\n value: false,\n },\n { label: 'Yes, I am sure!', value: true },\n ],\n initialValue: false,\n }),\n );\n }\n } while (!validPath);\n\n const relativePosixArtifactPath = relativeArtifactPath\n .split(path.sep)\n .join(path.posix.sep);\n\n await configureSourcemapGenerationFlow();\n\n await createAndAddNpmScript(\n packageDotJson,\n options,\n relativePosixArtifactPath,\n );\n\n if (await askShouldAddToBuildCommand()) {\n await traceStep('sentry-cli-add-to-build-cmd', () =>\n addSentryCommandToBuildCommand(packageDotJson),\n );\n } else {\n clack.log.info(\n `No problem, just make sure to run this script ${chalk.bold(\n 'after',\n )} building your application but ${chalk.bold('before')} deploying!`,\n );\n }\n\n await addSentryCliRc(options.authToken);\n}\n\nexport async function setupNpmScriptInCI(): Promise<void> {\n if (addedToBuildCommand) {\n // No need to tell users to add it manually to their CI\n // if the script is already added to the build command\n return;\n }\n\n const addedToCI = await abortIfCancelled(\n clack.select({\n message: `Add a step to your CI pipeline that runs the ${chalk.cyan(\n SENTRY_NPM_SCRIPT_NAME,\n )} script ${chalk.bold('right after')} building your application.`,\n options: [\n { label: 'I did, continue!', value: true },\n {\n label: \"I'll do it later...\",\n value: false,\n hint: chalk.yellow(\n `You need to run ${chalk.cyan(\n SENTRY_NPM_SCRIPT_NAME,\n )} after each build for source maps to work properly.`,\n ),\n },\n ],\n initialValue: true,\n }),\n );\n\n Sentry.setTag('added-ci-script', addedToCI);\n\n if (!addedToCI) {\n clack.log.info(\"Don't forget! :)\");\n }\n}\n\nasync function createAndAddNpmScript(\n packageDotJson: PackageDotJson,\n options: SourceMapUploadToolConfigurationOptions,\n relativePosixArtifactPath: string,\n): Promise<void> {\n const sentryCliNpmScript = `sentry-cli sourcemaps inject --org ${\n options.orgSlug\n } --project ${\n options.projectSlug\n } ${relativePosixArtifactPath} && sentry-cli${\n options.selfHosted ? ` --url ${options.url}` : ''\n } sourcemaps upload --org ${options.orgSlug} --project ${\n options.projectSlug\n } ${relativePosixArtifactPath}`;\n\n packageDotJson.scripts = packageDotJson.scripts || {};\n packageDotJson.scripts[SENTRY_NPM_SCRIPT_NAME] = sentryCliNpmScript;\n\n await fs.promises.writeFile(\n path.join(process.cwd(), 'package.json'),\n JSON.stringify(packageDotJson, null, 2),\n );\n\n clack.log.info(\n `Added a ${chalk.cyan(SENTRY_NPM_SCRIPT_NAME)} script to your ${chalk.cyan(\n 'package.json',\n )}.`,\n );\n}\n\nasync function askShouldAddToBuildCommand(): Promise<boolean> {\n const shouldAddToBuildCommand = await abortIfCancelled(\n clack.select({\n message: `Do you want to automatically run the ${chalk.cyan(\n SENTRY_NPM_SCRIPT_NAME,\n )} script after each production build?`,\n options: [\n {\n label: 'Yes',\n value: true,\n hint: 'This will modify your prod build command',\n },\n { label: 'No', value: false },\n ],\n initialValue: true,\n }),\n );\n\n Sentry.setTag('modify-build-command', shouldAddToBuildCommand);\n\n return shouldAddToBuildCommand;\n}\n\n/**\n * Add the sentry:sourcemaps command to the prod build command in the package.json\n * - Detect the user's build command\n * - Append the sentry:sourcemaps command to it\n *\n * @param packageDotJson The package.json which will be modified.\n */\nasync function addSentryCommandToBuildCommand(\n packageDotJson: PackageDotJson,\n): Promise<void> {\n // This usually shouldn't happen because earlier we added the\n // SENTRY_NPM_SCRIPT_NAME script but just to be sure\n packageDotJson.scripts = packageDotJson.scripts || {};\n\n const allNpmScripts = Object.keys(packageDotJson.scripts).filter(\n (s) => s !== SENTRY_NPM_SCRIPT_NAME,\n );\n\n const pacMan = detectPackageManager() || 'npm';\n\n // Heuristic to pre-select the build command:\n // Often, 'build' is the prod build command, so we favour it.\n // If it's not there, commands that include 'build' might be the prod build command.\n let buildCommand =\n typeof packageDotJson.scripts.build === 'string'\n ? 'build'\n : allNpmScripts.find((s) => s.toLocaleLowerCase().includes('build'));\n\n const isProdBuildCommand =\n !!buildCommand &&\n (await abortIfCancelled(\n clack.confirm({\n message: `Is ${chalk.cyan(\n `${pacMan} run ${buildCommand}`,\n )} your production build command?`,\n }),\n ));\n\n if (allNpmScripts.length && (!buildCommand || !isProdBuildCommand)) {\n buildCommand = await abortIfCancelled(\n clack.select({\n message: `Which ${pacMan} command in your ${chalk.cyan(\n 'package.json',\n )} builds your application for production?`,\n options: allNpmScripts\n .map((script) => ({\n label: script,\n value: script,\n }))\n .concat({ label: 'None of the above', value: 'none' }),\n }),\n );\n }\n\n if (!buildCommand || buildCommand === 'none') {\n clack.log.warn(\n `We can only add the ${chalk.cyan(\n SENTRY_NPM_SCRIPT_NAME,\n )} script to another \\`script\\` in your ${chalk.cyan('package.json')}.\nPlease add it manually to your prod build command.`,\n );\n return;\n }\n\n packageDotJson.scripts[\n buildCommand\n // eslint-disable-next-line @typescript-eslint/restrict-template-expressions\n ] = `${packageDotJson.scripts[buildCommand]} && ${pacMan} run ${SENTRY_NPM_SCRIPT_NAME}`;\n\n await fs.promises.writeFile(\n path.join(process.cwd(), 'package.json'),\n JSON.stringify(packageDotJson, null, 2),\n );\n\n addedToBuildCommand = true;\n\n clack.log.info(\n `Added ${chalk.cyan(SENTRY_NPM_SCRIPT_NAME)} script to your ${chalk.cyan(\n buildCommand,\n )} command.`,\n );\n}\n\nasync function defaultConfigureSourcemapGenerationFlow(): Promise<void> {\n await abortIfCancelled(\n clack.select({\n message: `Verify that your build tool is generating source maps. ${chalk.dim(\n '(Your build output folder should contain .js.map files after a build)',\n )}`,\n options: [{ label: 'I checked. Continue!', value: true }],\n initialValue: true,\n }),\n );\n}\n"]}
|
|
1
|
+
{"version":3,"file":"sentry-cli.js","sourceRoot":"","sources":["../../../../src/sourcemaps/tools/sentry-cli.ts"],"names":[],"mappings":"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","sourcesContent":["// @ts-ignore - clack is ESM and TS complains about that. It works though\nimport clack from '@clack/prompts';\nimport chalk from 'chalk';\nimport * as Sentry from '@sentry/node';\nimport * as path from 'path';\nimport * as fs from 'fs';\nimport {\n abortIfCancelled,\n addSentryCliConfig,\n getPackageDotJson,\n installPackage,\n} from '../../utils/clack-utils';\n\nimport { SourceMapUploadToolConfigurationOptions } from './types';\nimport { hasPackageInstalled, PackageDotJson } from '../../utils/package-json';\nimport { traceStep } from '../../telemetry';\nimport { detectPackageManger } from '../../utils/package-manager';\n\nconst SENTRY_NPM_SCRIPT_NAME = 'sentry:sourcemaps';\n\nlet addedToBuildCommand = false;\n\nexport async function configureSentryCLI(\n options: SourceMapUploadToolConfigurationOptions,\n configureSourcemapGenerationFlow: () => Promise<void> = defaultConfigureSourcemapGenerationFlow,\n): Promise<void> {\n const packageDotJson = await getPackageDotJson();\n\n await installPackage({\n packageName: '@sentry/cli',\n alreadyInstalled: hasPackageInstalled('@sentry/cli', packageDotJson),\n });\n\n let validPath = false;\n let relativeArtifactPath;\n do {\n const rawArtifactPath = await abortIfCancelled(\n clack.text({\n message: 'Where are your build artifacts located?',\n placeholder: `.${path.sep}out`,\n validate(value) {\n if (!value) {\n return 'Please enter a path.';\n }\n },\n }),\n );\n\n if (path.isAbsolute(rawArtifactPath)) {\n relativeArtifactPath = path.relative(process.cwd(), rawArtifactPath);\n } else {\n relativeArtifactPath = rawArtifactPath;\n }\n\n try {\n await fs.promises.access(path.join(process.cwd(), relativeArtifactPath));\n validPath = true;\n } catch {\n validPath = await abortIfCancelled(\n clack.select({\n message: `We couldn't find artifacts at ${relativeArtifactPath}. Are you sure that this is the location that contains your build artifacts?`,\n options: [\n {\n label: 'No, let me verify.',\n value: false,\n },\n { label: 'Yes, I am sure!', value: true },\n ],\n initialValue: false,\n }),\n );\n }\n } while (!validPath);\n\n const relativePosixArtifactPath = relativeArtifactPath\n .split(path.sep)\n .join(path.posix.sep);\n\n await configureSourcemapGenerationFlow();\n\n await createAndAddNpmScript(\n packageDotJson,\n options,\n relativePosixArtifactPath,\n );\n\n if (await askShouldAddToBuildCommand()) {\n await traceStep('sentry-cli-add-to-build-cmd', () =>\n addSentryCommandToBuildCommand(packageDotJson),\n );\n } else {\n clack.log.info(\n `No problem, just make sure to run this script ${chalk.bold(\n 'after',\n )} building your application but ${chalk.bold('before')} deploying!`,\n );\n }\n\n await addSentryCliConfig(options.authToken);\n}\n\nexport async function setupNpmScriptInCI(): Promise<void> {\n if (addedToBuildCommand) {\n // No need to tell users to add it manually to their CI\n // if the script is already added to the build command\n return;\n }\n\n const addedToCI = await abortIfCancelled(\n clack.select({\n message: `Add a step to your CI pipeline that runs the ${chalk.cyan(\n SENTRY_NPM_SCRIPT_NAME,\n )} script ${chalk.bold('right after')} building your application.`,\n options: [\n { label: 'I did, continue!', value: true },\n {\n label: \"I'll do it later...\",\n value: false,\n hint: chalk.yellow(\n `You need to run ${chalk.cyan(\n SENTRY_NPM_SCRIPT_NAME,\n )} after each build for source maps to work properly.`,\n ),\n },\n ],\n initialValue: true,\n }),\n );\n\n Sentry.setTag('added-ci-script', addedToCI);\n\n if (!addedToCI) {\n clack.log.info(\"Don't forget! :)\");\n }\n}\n\nasync function createAndAddNpmScript(\n packageDotJson: PackageDotJson,\n options: SourceMapUploadToolConfigurationOptions,\n relativePosixArtifactPath: string,\n): Promise<void> {\n const sentryCliNpmScript = `sentry-cli sourcemaps inject --org ${\n options.orgSlug\n } --project ${\n options.projectSlug\n } ${relativePosixArtifactPath} && sentry-cli${\n options.selfHosted ? ` --url ${options.url}` : ''\n } sourcemaps upload --org ${options.orgSlug} --project ${\n options.projectSlug\n } ${relativePosixArtifactPath}`;\n\n packageDotJson.scripts = packageDotJson.scripts || {};\n packageDotJson.scripts[SENTRY_NPM_SCRIPT_NAME] = sentryCliNpmScript;\n\n await fs.promises.writeFile(\n path.join(process.cwd(), 'package.json'),\n JSON.stringify(packageDotJson, null, 2),\n );\n\n clack.log.info(\n `Added a ${chalk.cyan(SENTRY_NPM_SCRIPT_NAME)} script to your ${chalk.cyan(\n 'package.json',\n )}.`,\n );\n}\n\nasync function askShouldAddToBuildCommand(): Promise<boolean> {\n const shouldAddToBuildCommand = await abortIfCancelled(\n clack.select({\n message: `Do you want to automatically run the ${chalk.cyan(\n SENTRY_NPM_SCRIPT_NAME,\n )} script after each production build?`,\n options: [\n {\n label: 'Yes',\n value: true,\n hint: 'This will modify your prod build command',\n },\n { label: 'No', value: false },\n ],\n initialValue: true,\n }),\n );\n\n Sentry.setTag('modify-build-command', shouldAddToBuildCommand);\n\n return shouldAddToBuildCommand;\n}\n\n/**\n * Add the sentry:sourcemaps command to the prod build command in the package.json\n * - Detect the user's build command\n * - Append the sentry:sourcemaps command to it\n *\n * @param packageDotJson The package.json which will be modified.\n */\nasync function addSentryCommandToBuildCommand(\n packageDotJson: PackageDotJson,\n): Promise<void> {\n // This usually shouldn't happen because earlier we added the\n // SENTRY_NPM_SCRIPT_NAME script but just to be sure\n packageDotJson.scripts = packageDotJson.scripts || {};\n\n const allNpmScripts = Object.keys(packageDotJson.scripts).filter(\n (s) => s !== SENTRY_NPM_SCRIPT_NAME,\n );\n\n const packageManager = detectPackageManger();\n const packageManagerName = packageManager?.name ?? 'npm';\n\n // Heuristic to pre-select the build command:\n // Often, 'build' is the prod build command, so we favour it.\n // If it's not there, commands that include 'build' might be the prod build command.\n let buildCommand =\n typeof packageDotJson.scripts.build === 'string'\n ? 'build'\n : allNpmScripts.find((s) => s.toLocaleLowerCase().includes('build'));\n\n const isProdBuildCommand =\n !!buildCommand &&\n (await abortIfCancelled(\n clack.confirm({\n message: `Is ${chalk.cyan(\n `${packageManagerName} run ${buildCommand}`,\n )} your production build command?`,\n }),\n ));\n\n if (allNpmScripts.length && (!buildCommand || !isProdBuildCommand)) {\n buildCommand = await abortIfCancelled(\n clack.select({\n message: `Which ${packageManagerName} command in your ${chalk.cyan(\n 'package.json',\n )} builds your application for production?`,\n options: allNpmScripts\n .map((script) => ({\n label: script,\n value: script,\n }))\n .concat({ label: 'None of the above', value: 'none' }),\n }),\n );\n }\n\n if (!buildCommand || buildCommand === 'none') {\n clack.log.warn(\n `We can only add the ${chalk.cyan(\n SENTRY_NPM_SCRIPT_NAME,\n )} script to another \\`script\\` in your ${chalk.cyan('package.json')}.\nPlease add it manually to your prod build command.`,\n );\n return;\n }\n\n packageDotJson.scripts[\n buildCommand\n // eslint-disable-next-line @typescript-eslint/restrict-template-expressions\n ] = `${packageDotJson.scripts[buildCommand]} && ${packageManager} run ${SENTRY_NPM_SCRIPT_NAME}`;\n\n await fs.promises.writeFile(\n path.join(process.cwd(), 'package.json'),\n JSON.stringify(packageDotJson, null, 2),\n );\n\n addedToBuildCommand = true;\n\n clack.log.info(\n `Added ${chalk.cyan(SENTRY_NPM_SCRIPT_NAME)} script to your ${chalk.cyan(\n buildCommand,\n )} command.`,\n );\n}\n\nasync function defaultConfigureSourcemapGenerationFlow(): Promise<void> {\n await abortIfCancelled(\n clack.select({\n message: `Verify that your build tool is generating source maps. ${chalk.dim(\n '(Your build output folder should contain .js.map files after a build)',\n )}`,\n options: [{ label: 'I checked. Continue!', value: true }],\n initialValue: true,\n }),\n );\n}\n"]}
|
|
@@ -1,2 +1,3 @@
|
|
|
1
|
-
import { SourceMapUploadToolConfigurationFunction } from './types';
|
|
1
|
+
import { SourceMapUploadToolConfigurationFunction, SourceMapUploadToolConfigurationOptions } from './types';
|
|
2
2
|
export declare const configureVitePlugin: SourceMapUploadToolConfigurationFunction;
|
|
3
|
+
export declare function addVitePluginToConfig(viteConfigPath: string, options: SourceMapUploadToolConfigurationOptions): Promise<boolean>;
|
|
@@ -73,13 +73,14 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
|
73
73
|
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
74
74
|
};
|
|
75
75
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
76
|
-
exports.configureVitePlugin = void 0;
|
|
76
|
+
exports.addVitePluginToConfig = exports.configureVitePlugin = void 0;
|
|
77
77
|
// @ts-ignore - clack is ESM and TS complains about that. It works though
|
|
78
|
-
var
|
|
78
|
+
var clack = __importStar(require("@clack/prompts"));
|
|
79
79
|
// @ts-ignore - magicast is ESM and TS complains about that. It works though
|
|
80
80
|
var magicast_1 = require("magicast");
|
|
81
81
|
// @ts-ignore - magicast is ESM and TS complains about that. It works though
|
|
82
82
|
var helpers_1 = require("magicast/helpers");
|
|
83
|
+
var recast = __importStar(require("recast"));
|
|
83
84
|
var Sentry = __importStar(require("@sentry/node"));
|
|
84
85
|
var chalk_1 = __importDefault(require("chalk"));
|
|
85
86
|
var clack_utils_1 = require("../../utils/clack-utils");
|
|
@@ -120,7 +121,7 @@ var configureVitePlugin = function (options) { return __awaiter(void 0, void 0,
|
|
|
120
121
|
_e)])];
|
|
121
122
|
case 2:
|
|
122
123
|
_f.sent();
|
|
123
|
-
_d = (0, ast_utils_1.
|
|
124
|
+
_d = (0, ast_utils_1.findFile)(path.resolve(process.cwd(), 'vite.config'));
|
|
124
125
|
if (_d) return [3 /*break*/, 4];
|
|
125
126
|
return [4 /*yield*/, askForViteConfigPath()];
|
|
126
127
|
case 3:
|
|
@@ -172,8 +173,8 @@ function createNewViteConfig(options) {
|
|
|
172
173
|
e_1 = _a.sent();
|
|
173
174
|
(0, debug_1.debug)(e_1);
|
|
174
175
|
Sentry.setTag('created-new-config', 'fail');
|
|
175
|
-
|
|
176
|
-
|
|
176
|
+
clack.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."));
|
|
177
|
+
clack.log.info(chalk_1.default.gray('More information about vite configs: https://vitejs.dev/config/'));
|
|
177
178
|
return [2 /*return*/, false];
|
|
178
179
|
case 3: return [2 /*return*/];
|
|
179
180
|
}
|
|
@@ -182,7 +183,7 @@ function createNewViteConfig(options) {
|
|
|
182
183
|
}
|
|
183
184
|
function addVitePluginToConfig(viteConfigPath, options) {
|
|
184
185
|
return __awaiter(this, void 0, void 0, function () {
|
|
185
|
-
var prettyViteConfigFilename, viteConfigContent, mod, shouldContinue, org, project, selfHosted, url, code, e_2;
|
|
186
|
+
var prettyViteConfigFilename, viteConfigContent, mod, shouldContinue, enabledSourcemaps, org, project, selfHosted, url, code, e_2;
|
|
186
187
|
return __generator(this, function (_a) {
|
|
187
188
|
switch (_a.label) {
|
|
188
189
|
case 0:
|
|
@@ -193,7 +194,7 @@ function addVitePluginToConfig(viteConfigPath, options) {
|
|
|
193
194
|
viteConfigContent = (_a.sent()).toString();
|
|
194
195
|
mod = (0, magicast_1.parseModule)(viteConfigContent);
|
|
195
196
|
if (!(0, ast_utils_1.hasSentryContent)(mod)) return [3 /*break*/, 3];
|
|
196
|
-
return [4 /*yield*/, (0, clack_utils_1.abortIfCancelled)(
|
|
197
|
+
return [4 /*yield*/, (0, clack_utils_1.abortIfCancelled)(clack.select({
|
|
197
198
|
message: "".concat(prettyViteConfigFilename, " already contains Sentry-related code. Should the wizard modify it anyway?"),
|
|
198
199
|
options: [
|
|
199
200
|
{
|
|
@@ -215,6 +216,11 @@ function addVitePluginToConfig(viteConfigPath, options) {
|
|
|
215
216
|
}
|
|
216
217
|
_a.label = 3;
|
|
217
218
|
case 3:
|
|
219
|
+
enabledSourcemaps = enableSourcemapGeneration(mod.$ast);
|
|
220
|
+
if (!enabledSourcemaps) {
|
|
221
|
+
Sentry.setTag('ast-mod-fail-reason', 'insertion-fail');
|
|
222
|
+
return [2 /*return*/, false];
|
|
223
|
+
}
|
|
218
224
|
org = options.orgSlug, project = options.projectSlug, selfHosted = options.selfHosted, url = options.url;
|
|
219
225
|
(0, helpers_1.addVitePlugin)(mod, {
|
|
220
226
|
imported: 'sentryVitePlugin',
|
|
@@ -226,7 +232,7 @@ function addVitePluginToConfig(viteConfigPath, options) {
|
|
|
226
232
|
return [4 /*yield*/, fs.promises.writeFile(viteConfigPath, code)];
|
|
227
233
|
case 4:
|
|
228
234
|
_a.sent();
|
|
229
|
-
|
|
235
|
+
clack.log.success("Added the Sentry Vite plugin to ".concat(prettyViteConfigFilename, " and enabled source maps"));
|
|
230
236
|
return [2 /*return*/, true];
|
|
231
237
|
case 5:
|
|
232
238
|
e_2 = _a.sent();
|
|
@@ -238,16 +244,17 @@ function addVitePluginToConfig(viteConfigPath, options) {
|
|
|
238
244
|
});
|
|
239
245
|
});
|
|
240
246
|
}
|
|
247
|
+
exports.addVitePluginToConfig = addVitePluginToConfig;
|
|
241
248
|
function showCopyPasteInstructions(viteConfigFilename, options) {
|
|
242
249
|
return __awaiter(this, void 0, void 0, function () {
|
|
243
250
|
return __generator(this, function (_a) {
|
|
244
251
|
switch (_a.label) {
|
|
245
252
|
case 0:
|
|
246
|
-
|
|
253
|
+
clack.log.step("Add the following code to your ".concat(chalk_1.default.cyan(viteConfigFilename), " file:"));
|
|
247
254
|
// Intentionally logging directly to console here so that the code can be copied/pasted directly
|
|
248
255
|
// eslint-disable-next-line no-console
|
|
249
256
|
console.log("\n".concat(getViteConfigSnippet(options, true)));
|
|
250
|
-
return [4 /*yield*/, (0, clack_utils_1.abortIfCancelled)(
|
|
257
|
+
return [4 /*yield*/, (0, clack_utils_1.abortIfCancelled)(clack.select({
|
|
251
258
|
message: 'Did you copy the snippet above?',
|
|
252
259
|
options: [{ label: 'Yes, continue!', value: true }],
|
|
253
260
|
initialValue: true,
|
|
@@ -264,7 +271,7 @@ function askForViteConfigPath() {
|
|
|
264
271
|
var hasViteConfig;
|
|
265
272
|
return __generator(this, function (_a) {
|
|
266
273
|
switch (_a.label) {
|
|
267
|
-
case 0: return [4 /*yield*/, (0, clack_utils_1.abortIfCancelled)(
|
|
274
|
+
case 0: return [4 /*yield*/, (0, clack_utils_1.abortIfCancelled)(clack.confirm({
|
|
268
275
|
message: "Do you have a vite config file (e.g. ".concat(chalk_1.default.cyan('vite.config.js'), "?"),
|
|
269
276
|
initialValue: true,
|
|
270
277
|
}))];
|
|
@@ -273,7 +280,7 @@ function askForViteConfigPath() {
|
|
|
273
280
|
if (!hasViteConfig) {
|
|
274
281
|
return [2 /*return*/, undefined];
|
|
275
282
|
}
|
|
276
|
-
return [4 /*yield*/, (0, clack_utils_1.abortIfCancelled)(
|
|
283
|
+
return [4 /*yield*/, (0, clack_utils_1.abortIfCancelled)(clack.text({
|
|
277
284
|
message: 'Please enter the path to your vite config file:',
|
|
278
285
|
placeholder: ".".concat(path.sep, "vite.config.js"),
|
|
279
286
|
validate: function (value) {
|
|
@@ -293,4 +300,84 @@ function askForViteConfigPath() {
|
|
|
293
300
|
});
|
|
294
301
|
});
|
|
295
302
|
}
|
|
303
|
+
function enableSourcemapGeneration(program) {
|
|
304
|
+
var configObj = getViteConfigObject(program);
|
|
305
|
+
if (!configObj) {
|
|
306
|
+
return false;
|
|
307
|
+
}
|
|
308
|
+
var b = recast.types.builders;
|
|
309
|
+
var buildProp = configObj.properties.find(function (p) {
|
|
310
|
+
return p.key.type === 'Identifier' && p.key.name === 'build';
|
|
311
|
+
});
|
|
312
|
+
// case 1: build property doesn't exist yet, so we can just add it
|
|
313
|
+
if (!buildProp) {
|
|
314
|
+
configObj.properties.push(b.objectProperty(b.identifier('build'), b.objectExpression([
|
|
315
|
+
b.objectProperty(b.identifier('sourcemap'), b.booleanLiteral(true)),
|
|
316
|
+
])));
|
|
317
|
+
return true;
|
|
318
|
+
}
|
|
319
|
+
var isValidBuildProp = buildProp.type === 'ObjectProperty' &&
|
|
320
|
+
buildProp.value.type === 'ObjectExpression';
|
|
321
|
+
if (!isValidBuildProp) {
|
|
322
|
+
return false;
|
|
323
|
+
}
|
|
324
|
+
var sourceMapsProp = buildProp.value.type === 'ObjectExpression' &&
|
|
325
|
+
buildProp.value.properties.find(function (p) {
|
|
326
|
+
return p.key.type === 'Identifier' && p.key.name === 'sourcemap';
|
|
327
|
+
});
|
|
328
|
+
// case 2: build.sourcemap property doesn't exist yet, so we just add it
|
|
329
|
+
if (!sourceMapsProp && buildProp.value.type === 'ObjectExpression') {
|
|
330
|
+
buildProp.value.properties.push(b.objectProperty(b.identifier('sourcemap'), b.booleanLiteral(true)));
|
|
331
|
+
return true;
|
|
332
|
+
}
|
|
333
|
+
if (!sourceMapsProp || sourceMapsProp.type !== 'ObjectProperty') {
|
|
334
|
+
return false;
|
|
335
|
+
}
|
|
336
|
+
// case 3: build.sourcemap property exists, and it's set to 'hidden'
|
|
337
|
+
if (sourceMapsProp.value.type === 'StringLiteral' &&
|
|
338
|
+
sourceMapsProp.value.value === 'hidden') {
|
|
339
|
+
// nothing to do for us
|
|
340
|
+
return true;
|
|
341
|
+
}
|
|
342
|
+
// case 4: build.sourcemap property exists, but it's not enabled, so we set it to true
|
|
343
|
+
// or it is already true in which case this is a noop
|
|
344
|
+
sourceMapsProp.value = b.booleanLiteral(true);
|
|
345
|
+
return true;
|
|
346
|
+
}
|
|
347
|
+
function getViteConfigObject(program) {
|
|
348
|
+
var defaultExport = program.body.find(function (s) { return s.type === 'ExportDefaultDeclaration'; });
|
|
349
|
+
if (!defaultExport) {
|
|
350
|
+
return undefined;
|
|
351
|
+
}
|
|
352
|
+
if (defaultExport.declaration.type === 'ObjectExpression') {
|
|
353
|
+
return defaultExport.declaration;
|
|
354
|
+
}
|
|
355
|
+
if (defaultExport.declaration.type === 'CallExpression' &&
|
|
356
|
+
defaultExport.declaration.arguments[0].type === 'ObjectExpression') {
|
|
357
|
+
return defaultExport.declaration.arguments[0];
|
|
358
|
+
}
|
|
359
|
+
if (defaultExport.declaration.type === 'Identifier') {
|
|
360
|
+
var configId = defaultExport.declaration.name;
|
|
361
|
+
return findConfigNode(configId, program);
|
|
362
|
+
}
|
|
363
|
+
return undefined;
|
|
364
|
+
}
|
|
365
|
+
function findConfigNode(configId, program) {
|
|
366
|
+
var _a;
|
|
367
|
+
for (var _i = 0, _b = program.body; _i < _b.length; _i++) {
|
|
368
|
+
var node = _b[_i];
|
|
369
|
+
if (node.type === 'VariableDeclaration') {
|
|
370
|
+
for (var _c = 0, _d = node.declarations; _c < _d.length; _c++) {
|
|
371
|
+
var declaration = _d[_c];
|
|
372
|
+
if (declaration.type === 'VariableDeclarator' &&
|
|
373
|
+
declaration.id.type === 'Identifier' &&
|
|
374
|
+
declaration.id.name === configId &&
|
|
375
|
+
((_a = declaration.init) === null || _a === void 0 ? void 0 : _a.type) === 'ObjectExpression') {
|
|
376
|
+
return declaration.init;
|
|
377
|
+
}
|
|
378
|
+
}
|
|
379
|
+
}
|
|
380
|
+
}
|
|
381
|
+
return undefined;
|
|
382
|
+
}
|
|
296
383
|
//# sourceMappingURL=vite.js.map
|
|
@@ -1 +1 @@
|
|
|
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"]}
|
|
1
|
+
{"version":3,"file":"vite.js","sourceRoot":"","sources":["../../../../src/sourcemaps/tools/vite.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,yEAAyE;AACzE,oDAAwC;AACxC,4EAA4E;AAC5E,qCAAqD;AACrD,4EAA4E;AAC5E,4CAAiD;AAIjD,6CAAiC;AAEjC,mDAAuC;AAEvC,gDAA0B;AAC1B,uDAKiC;AACjC,yDAA+D;AAM/D,mDAAmE;AAEnE,yCAA6B;AAC7B,qCAAyB;AACzB,2CAA0C;AAE1C,IAAM,oBAAoB,GAAG,UAC3B,OAAgD,EAChD,MAAe;IAEf,IAAM,aAAa,GACjB,yDAAyD,CAAC;IAC5D,IAAM,2BAA2B,GAC/B,6DAA6D,CAAC;IAChE,IAAM,2BAA2B,GAAG,4FAExB,OAAO,CAAC,OAAO,mCACX,OAAO,CAAC,WAAW,gBACjC,OAAO,CAAC,UAAU,CAAC,CAAC,CAAC,yBAAiB,OAAO,CAAC,GAAG,QAAI,CAAC,CAAC,CAAC,EAAE,cAEtD,CAAC;IAEP,IAAM,UAAU,GAAG,MAAM,CAAC,CAAC,CAAC,eAAK,CAAC,WAAW,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,aAAa,CAAC;IAC7E,IAAM,wBAAwB,GAAG,MAAM;QACrC,CAAC,CAAC,eAAK,CAAC,WAAW,CAAC,2BAA2B,CAAC;QAChD,CAAC,CAAC,2BAA2B,CAAC;IAChC,IAAM,wBAAwB,GAAG,MAAM;QACrC,CAAC,CAAC,eAAK,CAAC,WAAW,CAAC,2BAA2B,CAAC;QAChD,CAAC,CAAC,2BAA2B,CAAC;IAEhC,IAAM,IAAI,GAAG,oBAAoB,CAC/B,UAAU,EACV,wBAAwB,EACxB,wBAAwB,CACzB,CAAC;IACF,OAAO,MAAM,CAAC,CAAC,CAAC,eAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;AAC1C,CAAC,CAAC;AAEF,IAAM,oBAAoB,GAAG,UAC3B,UAAkB,EAClB,wBAAgC,EAChC,wBAAgC,IAC7B,OAAA,kDACH,UAAU,gEAIN,wBAAwB,kGAIxB,wBAAwB,kBAG7B,EAZI,CAYJ,CAAC;AAEK,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;gBAGD,KAAA,IAAA,oBAAQ,EAAC,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,aAAa,CAAC,CAAC,CAAA;wBAApD,wBAAoD;gBACnD,qBAAM,oBAAoB,EAAE,EAAA;;gBAA7B,KAAA,CAAC,SAA4B,CAAC,CAAA;;;gBAF1B,cAAc,KAEY;gBAE5B,iBAAiB,GAAG,KAAK,CAAC;qBAC1B,cAAc,EAAd,wBAAc;gBACI,qBAAM,qBAAqB,CAAC,cAAc,EAAE,OAAO,CAAC,EAAA;;gBAAxE,iBAAiB,GAAG,SAAoD,CAAC;;oBAErD,qBAAM,mBAAmB,CAAC,OAAO,CAAC,EAAA;;gBAAtD,iBAAiB,GAAG,SAAkC,CAAC;;;qBAGrD,iBAAiB,EAAjB,wBAAiB;gBACnB,MAAM,CAAC,MAAM,CAAC,SAAS,EAAE,SAAS,CAAC,CAAC;;;gBAEpC,MAAM,CAAC,MAAM,CAAC,SAAS,EAAE,MAAM,CAAC,CAAC;gBACjC,qBAAM,yBAAyB,CAC7B,IAAI,CAAC,QAAQ,CAAC,cAAc,IAAI,gBAAgB,CAAC,EACjD,OAAO,CACR,EAAA;;gBAHD,SAGC,CAAC;;qBAGJ,qBAAM,IAAA,4CAA8B,EAAC,OAAO,CAAC,SAAS,CAAC,EAAA;;gBAAvD,SAAuD,CAAC;;;;KACzD,CAAC;AAhCS,QAAA,mBAAmB,uBAgC5B;AAEJ,SAAe,mBAAmB,CAChC,OAAgD;;;;;;;oBAG9C,qBAAM,EAAE,CAAC,QAAQ,CAAC,SAAS,CACzB,gBAAgB,EAChB,oBAAoB,CAAC,OAAO,EAAE,KAAK,CAAC,CACrC,EAAA;;oBAHD,SAGC,CAAC;oBACF,MAAM,CAAC,MAAM,CAAC,oBAAoB,EAAE,SAAS,CAAC,CAAC;oBAC/C,sBAAO,IAAI,EAAC;;;oBAEZ,IAAA,aAAK,EAAC,GAAC,CAAC,CAAC;oBACT,MAAM,CAAC,MAAM,CAAC,oBAAoB,EAAE,MAAM,CAAC,CAAC;oBAC5C,KAAK,CAAC,GAAG,CAAC,IAAI,CACZ,iCAA0B,eAAK,CAAC,IAAI,CAClC,gBAAgB,CACjB,yEAAsE,CACxE,CAAC;oBAEF,KAAK,CAAC,GAAG,CAAC,IAAI,CACZ,eAAK,CAAC,IAAI,CACR,iEAAiE,CAClE,CACF,CAAC;oBAEF,sBAAO,KAAK,EAAC;;;;;CAEhB;AAED,SAAsB,qBAAqB,CACzC,cAAsB,EACtB,OAAgD;;;;;;;oBAGxC,wBAAwB,GAAG,eAAK,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,cAAc,CAAC,CAAC,CAAC;oBAGzE,qBAAM,EAAE,CAAC,QAAQ,CAAC,QAAQ,CAAC,cAAc,CAAC,EAAA;;oBADtC,iBAAiB,GAAG,CACxB,SAA0C,CAC3C,CAAC,QAAQ,EAAE;oBAEN,GAAG,GAAG,IAAA,sBAAW,EAAC,iBAAiB,CAAC,CAAC;yBAEvC,IAAA,4BAAgB,EAAC,GAAG,CAAC,EAArB,wBAAqB;oBACA,qBAAM,IAAA,8BAAgB,EAC3C,KAAK,CAAC,MAAM,CAAC;4BACX,OAAO,EAAE,UAAG,wBAAwB,+EAA4E;4BAChH,OAAO,EAAE;gCACP;oCACE,KAAK,EAAE,iCAAiC;oCACxC,KAAK,EAAE,IAAI;iCACZ;gCACD;oCACE,KAAK,EAAE,qDAAqD;oCAC5D,KAAK,EAAE,KAAK;iCACb;6BACF;4BACD,YAAY,EAAE,IAAI;yBACnB,CAAC,CACH,EAAA;;oBAfK,cAAc,GAAG,SAetB;oBAED,IAAI,CAAC,cAAc,EAAE;wBACnB,MAAM,CAAC,MAAM,CAAC,qBAAqB,EAAE,oBAAoB,CAAC,CAAC;wBAC3D,sBAAO,KAAK,EAAC;qBACd;;;oBAGG,iBAAiB,GAAG,yBAAyB,CAAC,GAAG,CAAC,IAAiB,CAAC,CAAC;oBAC3E,IAAI,CAAC,iBAAiB,EAAE;wBACtB,MAAM,CAAC,MAAM,CAAC,qBAAqB,EAAE,gBAAgB,CAAC,CAAC;wBACvD,sBAAO,KAAK,EAAC;qBACd;oBAEgB,GAAG,GAA4C,OAAO,QAAnD,EAAe,OAAO,GAAsB,OAAO,YAA7B,EAAE,UAAU,GAAU,OAAO,WAAjB,EAAE,GAAG,GAAK,OAAO,IAAZ,CAAa;oBAExE,IAAA,uBAAa,EAAC,GAAG,EAAE;wBACjB,QAAQ,EAAE,kBAAkB;wBAC5B,IAAI,EAAE,qBAAqB;wBAC3B,WAAW,EAAE,kBAAkB;wBAC/B,OAAO,aACL,GAAG,KAAA,EACH,OAAO,SAAA,IACJ,CAAC,UAAU,IAAI,EAAE,GAAG,KAAA,EAAE,CAAC,CAC3B;qBACF,CAAC,CAAC;oBAEG,IAAI,GAAG,IAAA,uBAAY,EAAC,GAAG,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC;oBAEzC,qBAAM,EAAE,CAAC,QAAQ,CAAC,SAAS,CAAC,cAAc,EAAE,IAAI,CAAC,EAAA;;oBAAjD,SAAiD,CAAC;oBAElD,KAAK,CAAC,GAAG,CAAC,OAAO,CACf,0CAAmC,wBAAwB,6BAA0B,CACtF,CAAC;oBAEF,sBAAO,IAAI,EAAC;;;oBAEZ,IAAA,aAAK,EAAC,GAAC,CAAC,CAAC;oBACT,MAAM,CAAC,MAAM,CAAC,qBAAqB,EAAE,gBAAgB,CAAC,CAAC;oBACvD,sBAAO,KAAK,EAAC;;;;;CAEhB;AAtED,sDAsEC;AAED,SAAe,yBAAyB,CACtC,kBAA0B,EAC1B,OAAgD;;;;;oBAEhD,KAAK,CAAC,GAAG,CAAC,IAAI,CACZ,yCAAkC,eAAK,CAAC,IAAI,CAAC,kBAAkB,CAAC,WAAQ,CACzE,CAAC;oBAEF,gGAAgG;oBAChG,sCAAsC;oBACtC,OAAO,CAAC,GAAG,CAAC,YAAK,oBAAoB,CAAC,OAAO,EAAE,IAAI,CAAC,CAAE,CAAC,CAAC;oBAExD,qBAAM,IAAA,8BAAgB,EACpB,KAAK,CAAC,MAAM,CAAC;4BACX,OAAO,EAAE,iCAAiC;4BAC1C,OAAO,EAAE,CAAC,EAAE,KAAK,EAAE,gBAAgB,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC;4BACnD,YAAY,EAAE,IAAI;yBACnB,CAAC,CACH,EAAA;;oBAND,SAMC,CAAC;;;;;CACH;AAED,SAAe,oBAAoB;;;;;wBACX,qBAAM,IAAA,8BAAgB,EAC1C,KAAK,CAAC,OAAO,CAAC;wBACZ,OAAO,EAAE,+CAAwC,eAAK,CAAC,IAAI,CACzD,gBAAgB,CACjB,MAAG;wBACJ,YAAY,EAAE,IAAI;qBACnB,CAAC,CACH,EAAA;;oBAPK,aAAa,GAAG,SAOrB;oBAED,IAAI,CAAC,aAAa,EAAE;wBAClB,sBAAO,SAAS,EAAC;qBAClB;oBAEM,qBAAM,IAAA,8BAAgB,EAC3B,KAAK,CAAC,IAAI,CAAC;4BACT,OAAO,EAAE,iDAAiD;4BAC1D,WAAW,EAAE,WAAI,IAAI,CAAC,GAAG,mBAAgB;4BACzC,QAAQ,EAAE,UAAC,KAAK;gCACd,IAAI,CAAC,KAAK,EAAE;oCACV,OAAO,sBAAsB,CAAC;iCAC/B;gCAED,IAAI;oCACF,EAAE,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC;iCACtB;gCAAC,WAAM;oCACN,OAAO,yCAAyC,CAAC;iCAClD;4BACH,CAAC;yBACF,CAAC,CACH,EAAA;wBAhBD,sBAAO,SAgBN,EAAC;;;;CACH;AAED,SAAS,yBAAyB,CAAC,OAAkB;IACnD,IAAM,SAAS,GAAG,mBAAmB,CAAC,OAAO,CAAC,CAAC;IAE/C,IAAI,CAAC,SAAS,EAAE;QACd,OAAO,KAAK,CAAC;KACd;IAED,IAAM,CAAC,GAAG,MAAM,CAAC,KAAK,CAAC,QAAQ,CAAC;IAEhC,IAAM,SAAS,GAAG,SAAS,CAAC,UAAU,CAAC,IAAI,CACzC,UAAC,CAAmB;QAClB,OAAA,CAAC,CAAC,GAAG,CAAC,IAAI,KAAK,YAAY,IAAI,CAAC,CAAC,GAAG,CAAC,IAAI,KAAK,OAAO;IAArD,CAAqD,CACxD,CAAC;IAEF,kEAAkE;IAClE,IAAI,CAAC,SAAS,EAAE;QACd,SAAS,CAAC,UAAU,CAAC,IAAI,CACvB,CAAC,CAAC,cAAc,CACd,CAAC,CAAC,UAAU,CAAC,OAAO,CAAC,EACrB,CAAC,CAAC,gBAAgB,CAAC;YACjB,CAAC,CAAC,cAAc,CAAC,CAAC,CAAC,UAAU,CAAC,WAAW,CAAC,EAAE,CAAC,CAAC,cAAc,CAAC,IAAI,CAAC,CAAC;SACpE,CAAC,CACH,CACF,CAAC;QACF,OAAO,IAAI,CAAC;KACb;IAED,IAAM,gBAAgB,GACpB,SAAS,CAAC,IAAI,KAAK,gBAAgB;QACnC,SAAS,CAAC,KAAK,CAAC,IAAI,KAAK,kBAAkB,CAAC;IAE9C,IAAI,CAAC,gBAAgB,EAAE;QACrB,OAAO,KAAK,CAAC;KACd;IAED,IAAM,cAAc,GAClB,SAAS,CAAC,KAAK,CAAC,IAAI,KAAK,kBAAkB;QAC3C,SAAS,CAAC,KAAK,CAAC,UAAU,CAAC,IAAI,CAC7B,UAAC,CAAmB;YAClB,OAAA,CAAC,CAAC,GAAG,CAAC,IAAI,KAAK,YAAY,IAAI,CAAC,CAAC,GAAG,CAAC,IAAI,KAAK,WAAW;QAAzD,CAAyD,CAC5D,CAAC;IAEJ,wEAAwE;IACxE,IAAI,CAAC,cAAc,IAAI,SAAS,CAAC,KAAK,CAAC,IAAI,KAAK,kBAAkB,EAAE;QAClE,SAAS,CAAC,KAAK,CAAC,UAAU,CAAC,IAAI,CAC7B,CAAC,CAAC,cAAc,CAAC,CAAC,CAAC,UAAU,CAAC,WAAW,CAAC,EAAE,CAAC,CAAC,cAAc,CAAC,IAAI,CAAC,CAAC,CACpE,CAAC;QACF,OAAO,IAAI,CAAC;KACb;IAED,IAAI,CAAC,cAAc,IAAI,cAAc,CAAC,IAAI,KAAK,gBAAgB,EAAE;QAC/D,OAAO,KAAK,CAAC;KACd;IAED,oEAAoE;IACpE,IACE,cAAc,CAAC,KAAK,CAAC,IAAI,KAAK,eAAe;QAC7C,cAAc,CAAC,KAAK,CAAC,KAAK,KAAK,QAAQ,EACvC;QACA,uBAAuB;QACvB,OAAO,IAAI,CAAC;KACb;IAED,sFAAsF;IACtF,6DAA6D;IAC7D,cAAc,CAAC,KAAK,GAAG,CAAC,CAAC,cAAc,CAAC,IAAI,CAAC,CAAC;IAC9C,OAAO,IAAI,CAAC;AACd,CAAC;AAED,SAAS,mBAAmB,CAC1B,OAAkB;IAElB,IAAM,aAAa,GAAG,OAAO,CAAC,IAAI,CAAC,IAAI,CACrC,UAAC,CAAC,IAAK,OAAA,CAAC,CAAC,IAAI,KAAK,0BAA0B,EAArC,CAAqC,CACf,CAAC;IAEhC,IAAI,CAAC,aAAa,EAAE;QAClB,OAAO,SAAS,CAAC;KAClB;IAED,IAAI,aAAa,CAAC,WAAW,CAAC,IAAI,KAAK,kBAAkB,EAAE;QACzD,OAAO,aAAa,CAAC,WAAW,CAAC;KAClC;IAED,IACE,aAAa,CAAC,WAAW,CAAC,IAAI,KAAK,gBAAgB;QACnD,aAAa,CAAC,WAAW,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,IAAI,KAAK,kBAAkB,EAClE;QACA,OAAO,aAAa,CAAC,WAAW,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC;KAC/C;IAED,IAAI,aAAa,CAAC,WAAW,CAAC,IAAI,KAAK,YAAY,EAAE;QACnD,IAAM,QAAQ,GAAG,aAAa,CAAC,WAAW,CAAC,IAAI,CAAC;QAChD,OAAO,cAAc,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;KAC1C;IAED,OAAO,SAAS,CAAC;AACnB,CAAC;AAED,SAAS,cAAc,CACrB,QAAgB,EAChB,OAAkB;;IAElB,KAAmB,UAAY,EAAZ,KAAA,OAAO,CAAC,IAAI,EAAZ,cAAY,EAAZ,IAAY,EAAE;QAA5B,IAAM,IAAI,SAAA;QACb,IAAI,IAAI,CAAC,IAAI,KAAK,qBAAqB,EAAE;YACvC,KAA0B,UAAiB,EAAjB,KAAA,IAAI,CAAC,YAAY,EAAjB,cAAiB,EAAjB,IAAiB,EAAE;gBAAxC,IAAM,WAAW,SAAA;gBACpB,IACE,WAAW,CAAC,IAAI,KAAK,oBAAoB;oBACzC,WAAW,CAAC,EAAE,CAAC,IAAI,KAAK,YAAY;oBACpC,WAAW,CAAC,EAAE,CAAC,IAAI,KAAK,QAAQ;oBAChC,CAAA,MAAA,WAAW,CAAC,IAAI,0CAAE,IAAI,MAAK,kBAAkB,EAC7C;oBACA,OAAO,WAAW,CAAC,IAAI,CAAC;iBACzB;aACF;SACF;KACF;IACD,OAAO,SAAS,CAAC;AACnB,CAAC","sourcesContent":["// @ts-ignore - clack is ESM and TS complains about that. It works though\nimport * as clack 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 type { namedTypes as t } from 'ast-types';\n\nimport * as recast from 'recast';\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 { findFile, 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 findFile(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\nexport async 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 enabledSourcemaps = enableSourcemapGeneration(mod.$ast as t.Program);\n if (!enabledSourcemaps) {\n Sentry.setTag('ast-mod-fail-reason', 'insertion-fail');\n return false;\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} and enabled source maps`,\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 clack.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\nfunction enableSourcemapGeneration(program: t.Program): boolean {\n const configObj = getViteConfigObject(program);\n\n if (!configObj) {\n return false;\n }\n\n const b = recast.types.builders;\n\n const buildProp = configObj.properties.find(\n (p: t.ObjectProperty) =>\n p.key.type === 'Identifier' && p.key.name === 'build',\n );\n\n // case 1: build property doesn't exist yet, so we can just add it\n if (!buildProp) {\n configObj.properties.push(\n b.objectProperty(\n b.identifier('build'),\n b.objectExpression([\n b.objectProperty(b.identifier('sourcemap'), b.booleanLiteral(true)),\n ]),\n ),\n );\n return true;\n }\n\n const isValidBuildProp =\n buildProp.type === 'ObjectProperty' &&\n buildProp.value.type === 'ObjectExpression';\n\n if (!isValidBuildProp) {\n return false;\n }\n\n const sourceMapsProp =\n buildProp.value.type === 'ObjectExpression' &&\n buildProp.value.properties.find(\n (p: t.ObjectProperty) =>\n p.key.type === 'Identifier' && p.key.name === 'sourcemap',\n );\n\n // case 2: build.sourcemap property doesn't exist yet, so we just add it\n if (!sourceMapsProp && buildProp.value.type === 'ObjectExpression') {\n buildProp.value.properties.push(\n b.objectProperty(b.identifier('sourcemap'), b.booleanLiteral(true)),\n );\n return true;\n }\n\n if (!sourceMapsProp || sourceMapsProp.type !== 'ObjectProperty') {\n return false;\n }\n\n // case 3: build.sourcemap property exists, and it's set to 'hidden'\n if (\n sourceMapsProp.value.type === 'StringLiteral' &&\n sourceMapsProp.value.value === 'hidden'\n ) {\n // nothing to do for us\n return true;\n }\n\n // case 4: build.sourcemap property exists, but it's not enabled, so we set it to true\n // or it is already true in which case this is a noop\n sourceMapsProp.value = b.booleanLiteral(true);\n return true;\n}\n\nfunction getViteConfigObject(\n program: t.Program,\n): t.ObjectExpression | undefined {\n const defaultExport = program.body.find(\n (s) => s.type === 'ExportDefaultDeclaration',\n ) as t.ExportDefaultDeclaration;\n\n if (!defaultExport) {\n return undefined;\n }\n\n if (defaultExport.declaration.type === 'ObjectExpression') {\n return defaultExport.declaration;\n }\n\n if (\n defaultExport.declaration.type === 'CallExpression' &&\n defaultExport.declaration.arguments[0].type === 'ObjectExpression'\n ) {\n return defaultExport.declaration.arguments[0];\n }\n\n if (defaultExport.declaration.type === 'Identifier') {\n const configId = defaultExport.declaration.name;\n return findConfigNode(configId, program);\n }\n\n return undefined;\n}\n\nfunction findConfigNode(\n configId: string,\n program: t.Program,\n): t.ObjectExpression | undefined {\n for (const node of program.body) {\n if (node.type === 'VariableDeclaration') {\n for (const declaration of node.declarations) {\n if (\n declaration.type === 'VariableDeclarator' &&\n declaration.id.type === 'Identifier' &&\n declaration.id.name === configId &&\n declaration.init?.type === 'ObjectExpression'\n ) {\n return declaration.init;\n }\n }\n }\n }\n return undefined;\n}\n"]}
|
|
@@ -1,3 +1,3 @@
|
|
|
1
|
-
export type SupportedTools = 'webpack' | 'vite' | 'rollup' | 'esbuild' | 'tsc' | 'sentry-cli' | 'create-react-app' | 'angular' | 'nextjs' | 'remix';
|
|
1
|
+
export type SupportedTools = 'webpack' | 'vite' | 'rollup' | 'esbuild' | 'tsc' | 'sentry-cli' | 'create-react-app' | 'angular' | 'nextjs' | 'remix' | 'no-tool';
|
|
2
2
|
export declare const TOOL_PACKAGE_MAP: Record<string, SupportedTools>;
|
|
3
3
|
export declare function detectUsedTool(): Promise<SupportedTools>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"detect-tool.js","sourceRoot":"","sources":["../../../../src/sourcemaps/utils/detect-tool.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,uDAA4D;AAC5D,yDAAwE;
|
|
1
|
+
{"version":3,"file":"detect-tool.js","sourceRoot":"","sources":["../../../../src/sourcemaps/utils/detect-tool.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,uDAA4D;AAC5D,yDAAwE;AAexE,oDAAoD;AACpD,kFAAkF;AAClF,sEAAsE;AACtE,YAAY;AACC,QAAA,gBAAgB,GAAmC;IAC9D,eAAe,EAAE,SAAS;IAC1B,kBAAkB,EAAE,kBAAkB;IACtC,IAAI,EAAE,QAAQ;IACd,OAAO,EAAE,SAAS;IAClB,IAAI,EAAE,MAAM;IACZ,OAAO,EAAE,SAAS;IAClB,MAAM,EAAE,QAAQ;IAChB,UAAU,EAAE,KAAK;IACjB,KAAK,EAAE,OAAO;CACf,CAAC;AAEF,SAAsB,cAAc;;;;;wBACd,qBAAM,IAAA,+BAAiB,GAAE,EAAA;;oBAAvC,WAAW,GAAG,SAAyB;oBAEvC,gBAAgB,GAAG,IAAA,2CAA4B,EACnD,MAAM,CAAC,IAAI,CAAC,wBAAgB,CAAC,EAC7B,WAAW,CACZ,CAAC;oBAEF,IAAI,gBAAgB,EAAE;wBACpB,sBAAO,wBAAgB,CAAC,gBAAgB,CAAC,IAAI,CAAC,EAAC;qBAChD;oBAED,sBAAO,YAAY,EAAC;;;;CACrB;AAbD,wCAaC","sourcesContent":["import { getPackageDotJson } from '../../utils/clack-utils';\nimport { findInstalledPackageFromList } from '../../utils/package-json';\n\nexport type SupportedTools =\n | 'webpack'\n | 'vite'\n | 'rollup'\n | 'esbuild'\n | 'tsc'\n | 'sentry-cli'\n | 'create-react-app'\n | 'angular'\n | 'nextjs'\n | 'remix'\n | 'no-tool';\n\n// A map of package names pointing to the tool slug.\n// The order is important, because we want to detect the most specific tool first.\n// For instance, webpack needs to come before tsc because typescript c\n// Similarly\nexport const TOOL_PACKAGE_MAP: Record<string, SupportedTools> = {\n '@angular/core': 'angular',\n 'create-react-app': 'create-react-app',\n next: 'nextjs',\n webpack: 'webpack',\n vite: 'vite',\n esbuild: 'esbuild',\n rollup: 'rollup',\n typescript: 'tsc',\n remix: 'remix',\n};\n\nexport async function detectUsedTool(): Promise<SupportedTools> {\n const packageJson = await getPackageDotJson();\n\n const foundToolPackage = findInstalledPackageFromList(\n Object.keys(TOOL_PACKAGE_MAP),\n packageJson,\n );\n\n if (foundToolPackage) {\n return TOOL_PACKAGE_MAP[foundToolPackage.name];\n }\n\n return 'sentry-cli';\n}\n"]}
|
|
@@ -105,9 +105,9 @@ function createOrMergeSvelteKitFiles(projectInfo, svelteConfig) {
|
|
|
105
105
|
switch (_b.label) {
|
|
106
106
|
case 0:
|
|
107
107
|
_a = getHooksConfigDirs(svelteConfig), clientHooksPath = _a.clientHooksPath, serverHooksPath = _a.serverHooksPath;
|
|
108
|
-
originalClientHooksFile = (0, ast_utils_1.
|
|
109
|
-
originalServerHooksFile = (0, ast_utils_1.
|
|
110
|
-
viteConfig = (0, ast_utils_1.
|
|
108
|
+
originalClientHooksFile = (0, ast_utils_1.findFile)(clientHooksPath);
|
|
109
|
+
originalServerHooksFile = (0, ast_utils_1.findFile)(serverHooksPath);
|
|
110
|
+
viteConfig = (0, ast_utils_1.findFile)(path.resolve(process.cwd(), 'vite.config'));
|
|
111
111
|
fileEnding = (0, clack_utils_1.isUsingTypeScript)() ? 'ts' : 'js';
|
|
112
112
|
dsn = projectInfo.dsn;
|
|
113
113
|
if (!!originalClientHooksFile) return [3 /*break*/, 2];
|
|
@@ -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 { 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"]}
|
|
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 { findFile, 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 = findFile(clientHooksPath);\n const originalServerHooksFile = findFile(serverHooksPath);\n\n const viteConfig = findFile(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"]}
|