@sentry/wizard
Version:
Sentry wizard helping you to configure your project
69 lines (60 loc) • 1.97 kB
text/typescript
// @ts-ignore - clack is ESM and TS complains about that. It works though
import clack, { select } from '@clack/prompts';
import chalk from 'chalk';
import {
abortIfCancelled,
addDotEnvSentryBuildPluginFile,
getPackageDotJson,
hasPackageInstalled,
installPackage,
} from '../../utils/clack-utils';
import {
SourceMapUploadToolConfigurationFunction,
SourceMapUploadToolConfigurationOptions,
} from './types';
const getCodeSnippet = (options: SourceMapUploadToolConfigurationOptions) =>
chalk.gray(`
import { defineConfig } from "vite";
${chalk.greenBright('import { sentryVitePlugin } from "@sentry/vite-plugin"')};
export default defineConfig({
build: {
${chalk.greenBright(
'sourcemap: true, // Source map generation must be turned on',
)}
},
plugins: [
// Put the Sentry vite plugin after all other plugins
${chalk.greenBright(`sentryVitePlugin({
authToken: process.env.SENTRY_AUTH_TOKEN,
org: "${options.orgSlug}",
project: "${options.projectSlug}",${
options.selfHosted ? `\n url: "${options.url}",` : ''
}
}),`)}
],
});
`);
export const configureVitePlugin: SourceMapUploadToolConfigurationFunction =
async (options) => {
await installPackage({
packageName: '@sentry/vite-plugin',
alreadyInstalled: hasPackageInstalled(
'@sentry/vite-plugin',
await getPackageDotJson(),
),
});
clack.log.step(
`Add the following code to your ${chalk.bold('vite.config.js')} file:`,
);
// Intentially logging directly to console here so that the code can be copied/pasted directly
// eslint-disable-next-line no-console
console.log(getCodeSnippet(options));
await abortIfCancelled(
select({
message: 'Did you copy the snippet above?',
options: [{ label: 'Yes, continue!', value: true }],
initialValue: true,
}),
);
await addDotEnvSentryBuildPluginFile(options.authToken);
};