@sentry/nextjs
Version:
Official Sentry SDK for Next.js
186 lines (158 loc) • 8.24 kB
JavaScript
Object.defineProperty(exports, '__esModule', { value: true });
const core = require('@sentry/core');
const node = require('@sentry/node');
const utils = require('@sentry/utils');
const debugBuild = require('../common/debug-build.js');
const devErrorSymbolicationEventProcessor = require('../common/devErrorSymbolicationEventProcessor.js');
const getVercelEnv = require('../common/getVercelEnv.js');
const isBuild = require('../common/utils/isBuild.js');
const httpIntegration = require('./httpIntegration.js');
const onUncaughtExceptionIntegration = require('./onUncaughtExceptionIntegration.js');
const rewriteFramesIntegration = require('./rewriteFramesIntegration.js');
const react = require('@sentry/react');
const _error = require('../common/_error.js');
const wrapGetStaticPropsWithSentry = require('../common/wrapGetStaticPropsWithSentry.js');
const wrapGetInitialPropsWithSentry = require('../common/wrapGetInitialPropsWithSentry.js');
const wrapAppGetInitialPropsWithSentry = require('../common/wrapAppGetInitialPropsWithSentry.js');
const wrapDocumentGetInitialPropsWithSentry = require('../common/wrapDocumentGetInitialPropsWithSentry.js');
const wrapErrorGetInitialPropsWithSentry = require('../common/wrapErrorGetInitialPropsWithSentry.js');
const wrapGetServerSidePropsWithSentry = require('../common/wrapGetServerSidePropsWithSentry.js');
const wrapServerComponentWithSentry = require('../common/wrapServerComponentWithSentry.js');
const wrapRouteHandlerWithSentry = require('../common/wrapRouteHandlerWithSentry.js');
const wrapApiHandlerWithSentryVercelCrons = require('../common/wrapApiHandlerWithSentryVercelCrons.js');
const wrapMiddlewareWithSentry = require('../common/wrapMiddlewareWithSentry.js');
const wrapPageComponentWithSentry = require('../common/wrapPageComponentWithSentry.js');
const wrapGenerationFunctionWithSentry = require('../common/wrapGenerationFunctionWithSentry.js');
const withServerActionInstrumentation = require('../common/withServerActionInstrumentation.js');
const wrapApiHandlerWithSentry = require('../common/wrapApiHandlerWithSentry.js');
const Integrations = {
...node.Integrations,
Http: httpIntegration.Http,
OnUncaughtException: onUncaughtExceptionIntegration.OnUncaughtException,
};
/**
* A passthrough error boundary for the server that doesn't depend on any react. Error boundaries don't catch SSR errors
* so they should simply be a passthrough.
*/
const ErrorBoundary = (props) => {
if (!props.children) {
return null;
}
if (typeof props.children === 'function') {
return (props.children )();
}
// since Next.js >= 10 requires React ^16.6.0 we are allowed to return children like this here
return props.children ;
};
/**
* A passthrough error boundary wrapper for the server that doesn't depend on any react. Error boundaries don't catch
* SSR errors so they should simply be a passthrough.
*/
// eslint-disable-next-line @typescript-eslint/no-explicit-any
function withErrorBoundary(
WrappedComponent,
) {
return WrappedComponent ;
}
/**
* Just a passthrough since we're on the server and showing the report dialog on the server doesn't make any sense.
*/
function showReportDialog() {
return;
}
// TODO (v8): Remove this
/**
* @deprecated This constant will be removed in the next major update.
*/
const IS_BUILD = isBuild.isBuild();
const IS_VERCEL = !!process.env.VERCEL;
/** Inits the Sentry NextJS SDK on node. */
function init(options) {
core.addTracingExtensions();
if (isBuild.isBuild()) {
return;
}
const customDefaultIntegrations = [
...node.getDefaultIntegrations(options).filter(
integration => !['Http', 'OnUncaughtException'].includes(integration.name),
),
rewriteFramesIntegration.rewriteFramesIntegration(),
new httpIntegration.Http(),
new onUncaughtExceptionIntegration.OnUncaughtException(),
];
const opts = {
environment: process.env.SENTRY_ENVIRONMENT || getVercelEnv.getVercelEnv(false) || process.env.NODE_ENV,
defaultIntegrations: customDefaultIntegrations,
...options,
// Right now we only capture frontend sessions for Next.js
autoSessionTracking: false,
};
if (debugBuild.DEBUG_BUILD && opts.debug) {
utils.logger.enable();
}
debugBuild.DEBUG_BUILD && utils.logger.log('Initializing SDK...');
if (sdkAlreadyInitialized()) {
debugBuild.DEBUG_BUILD && utils.logger.log('SDK already initialized');
return;
}
core.applySdkMetadata(opts, 'nextjs', ['nextjs', 'node']);
node.init(opts);
const filterTransactions = event => {
return event.type === 'transaction' && event.transaction === '/404' ? null : event;
};
filterTransactions.id = 'NextServer404TransactionFilter';
const scope = node.getCurrentScope();
scope.setTag('runtime', 'node');
if (IS_VERCEL) {
scope.setTag('vercel', true);
}
scope.addEventProcessor(filterTransactions);
if (process.env.NODE_ENV === 'development') {
scope.addEventProcessor(devErrorSymbolicationEventProcessor.devErrorSymbolicationEventProcessor);
}
debugBuild.DEBUG_BUILD && utils.logger.log('SDK successfully initialized');
}
function sdkAlreadyInitialized() {
return !!core.getClient();
}
// TODO (v8): Remove this
/**
* @deprecated This constant will be removed in the next major update.
*/
const deprecatedIsBuild = () => isBuild.isBuild();
exports.rewriteFramesIntegration = rewriteFramesIntegration.rewriteFramesIntegration;
exports.createReduxEnhancer = react.createReduxEnhancer;
exports.captureUnderscoreErrorException = _error.captureUnderscoreErrorException;
exports.withSentryGetStaticProps = wrapGetStaticPropsWithSentry.withSentryGetStaticProps;
exports.wrapGetStaticPropsWithSentry = wrapGetStaticPropsWithSentry.wrapGetStaticPropsWithSentry;
exports.withSentryServerSideGetInitialProps = wrapGetInitialPropsWithSentry.withSentryServerSideGetInitialProps;
exports.wrapGetInitialPropsWithSentry = wrapGetInitialPropsWithSentry.wrapGetInitialPropsWithSentry;
exports.withSentryServerSideAppGetInitialProps = wrapAppGetInitialPropsWithSentry.withSentryServerSideAppGetInitialProps;
exports.wrapAppGetInitialPropsWithSentry = wrapAppGetInitialPropsWithSentry.wrapAppGetInitialPropsWithSentry;
exports.withSentryServerSideDocumentGetInitialProps = wrapDocumentGetInitialPropsWithSentry.withSentryServerSideDocumentGetInitialProps;
exports.wrapDocumentGetInitialPropsWithSentry = wrapDocumentGetInitialPropsWithSentry.wrapDocumentGetInitialPropsWithSentry;
exports.withSentryServerSideErrorGetInitialProps = wrapErrorGetInitialPropsWithSentry.withSentryServerSideErrorGetInitialProps;
exports.wrapErrorGetInitialPropsWithSentry = wrapErrorGetInitialPropsWithSentry.wrapErrorGetInitialPropsWithSentry;
exports.withSentryGetServerSideProps = wrapGetServerSidePropsWithSentry.withSentryGetServerSideProps;
exports.wrapGetServerSidePropsWithSentry = wrapGetServerSidePropsWithSentry.wrapGetServerSidePropsWithSentry;
exports.wrapServerComponentWithSentry = wrapServerComponentWithSentry.wrapServerComponentWithSentry;
exports.wrapRouteHandlerWithSentry = wrapRouteHandlerWithSentry.wrapRouteHandlerWithSentry;
exports.wrapApiHandlerWithSentryVercelCrons = wrapApiHandlerWithSentryVercelCrons.wrapApiHandlerWithSentryVercelCrons;
exports.wrapMiddlewareWithSentry = wrapMiddlewareWithSentry.wrapMiddlewareWithSentry;
exports.wrapPageComponentWithSentry = wrapPageComponentWithSentry.wrapPageComponentWithSentry;
exports.wrapGenerationFunctionWithSentry = wrapGenerationFunctionWithSentry.wrapGenerationFunctionWithSentry;
exports.withServerActionInstrumentation = withServerActionInstrumentation.withServerActionInstrumentation;
exports.withSentry = wrapApiHandlerWithSentry.withSentry;
exports.withSentryAPI = wrapApiHandlerWithSentry.withSentryAPI;
exports.wrapApiHandlerWithSentry = wrapApiHandlerWithSentry.wrapApiHandlerWithSentry;
exports.ErrorBoundary = ErrorBoundary;
exports.IS_BUILD = IS_BUILD;
exports.Integrations = Integrations;
exports.init = init;
exports.isBuild = deprecatedIsBuild;
exports.showReportDialog = showReportDialog;
exports.withErrorBoundary = withErrorBoundary;
for (const k in node) {
if (k !== 'default' && !exports.hasOwnProperty(k)) exports[k] = node[k];
}
//# sourceMappingURL=index.js.map