import {Layout, LayoutProps} from 'sentry/components/onboarding/gettingStartedDoc/layout';
import {ModuleProps} from 'sentry/components/onboarding/gettingStartedDoc/sdkDocumentation';
import {StepType} from 'sentry/components/onboarding/gettingStartedDoc/step';
import {t, tct} from 'sentry/locale';
import {
getDefaultInitParams,
getDefaultNodeImports,
getInstallSnippet,
getProductInitParams,
getProductIntegrations,
getProductSelectionMap,
joinWithIndentation,
} from 'sentry/utils/gettingStartedDocs/node';
interface StepProps {
importContent: string;
initContent: string;
installSnippet: string;
}
export const steps = ({
installSnippet,
importContent,
initContent,
}: StepProps): LayoutProps['steps'] => [
{
type: StepType.INSTALL,
description: t('Add the Sentry Node SDK as a dependency:'),
configurations: [
{
language: 'bash',
code: installSnippet,
},
],
},
{
type: StepType.CONFIGURE,
description: (
{tct(
"Initialize Sentry as early as possible in your application's lifecycle, for example in your [code:index.ts/js] entry point:",
{code:
}
)}
),
configurations: [
{
language: 'javascript',
code: `
${importContent}
Sentry.init({
${initContent}
});
`,
},
],
},
{
type: StepType.VERIFY,
description: t(
"This snippet contains an intentional error and can be used as a test to make sure that everything's working as expected."
),
configurations: [
{
language: 'javascript',
code: `
const transaction = Sentry.startTransaction({
op: "test",
name: "My First Test Transaction",
});
setTimeout(() => {
try {
foo();
} catch (e) {
Sentry.captureException(e);
} finally {
transaction.finish();
}
}, 99);
`,
},
],
},
];
export function GettingStartedWithNode({
dsn,
newOrg,
platformKey,
activeProductSelection = [],
}: ModuleProps) {
const productSelection = getProductSelectionMap(activeProductSelection);
const installSnippet = getInstallSnippet({productSelection});
const imports = getDefaultNodeImports({productSelection});
const integrations = getProductIntegrations({productSelection});
const integrationParam =
integrations.length > 0
? `integrations: [\n${joinWithIndentation(integrations)}\n],`
: null;
const initContent = joinWithIndentation([
...getDefaultInitParams({dsn}),
...(integrationParam ? [integrationParam] : []),
...getProductInitParams({productSelection}),
]);
return (
);
}
export default GettingStartedWithNode;