Skip to content
Merged
Show file tree
Hide file tree
Changes from 3 commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
8 changes: 8 additions & 0 deletions packages/browser/rollup.config.js
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,14 @@ const commitHash = require('child_process')
.trim();

const terserInstance = terser({
compress: {
// Tell env.ts that we're building a browser bundle and that we do not
// want to have unnecessary debug functionality.
global_defs: {
__SENTRY_BROWSER_BUNDLE__: true,
__SENTRY_NO_DEBUG__: true,
},
},
mangle: {
// captureExceptions and captureMessage are public API methods and they don't need to be listed here
// as mangler doesn't touch user-facing thing, however sentryWrapped is not, and it would be mangled into a minified version.
Expand Down
31 changes: 31 additions & 0 deletions packages/utils/src/env.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,31 @@
/**
* This module mostly exists for optimizations in the build process
* through rollup and terser. We define some global constants which
* are normally undefined. However terser overrides these with global
* definitions which can be evaluated by the static analyzer when
* creating a bundle.
*
* In turn the `isDebugBuild` and `isBrowserBundle` functions are pure
* and can help us remove unused code from the bundles.
*/

declare const __SENTRY_BROWSER_BUNDLE__: boolean | undefined;
declare const __SENTRY_NO_DEBUG__: boolean | undefined;

/**
* Figures out if we're building with debug functionality.
*
* @returns true if this is a debug build
*/
export function isDebugBuild(): boolean {
return typeof __SENTRY_NO_DEBUG__ !== 'undefined' && !__SENTRY_BROWSER_BUNDLE__;
}

/**
* Figures out if we're building a browser bundle.
*
* @returns true if this is a browser bundle build.
*/
export function isBrowserBundle(): boolean {
return typeof __SENTRY_BROWSER_BUNDLE__ !== 'undefined' && !!__SENTRY_BROWSER_BUNDLE__;
}
1 change: 1 addition & 0 deletions packages/utils/src/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -17,3 +17,4 @@ export * from './string';
export * from './supports';
export * from './syncpromise';
export * from './time';
export * from './env';
9 changes: 8 additions & 1 deletion packages/utils/src/node.ts
Original file line number Diff line number Diff line change
Expand Up @@ -3,13 +3,20 @@
* you must either a) use `console.log` rather than the logger, or b) put your function elsewhere.
*/

import { isBrowserBundle } from './env';

/**
* Checks whether we're in the Node.js or Browser environment
*
* @returns Answer to given question
*/
export function isNodeEnv(): boolean {
return Object.prototype.toString.call(typeof process !== 'undefined' ? process : 0) === '[object process]';
// explicitly check for browser bundles as those can be optimized statically
// by terser/rollup.
return (
!isBrowserBundle() &&
Object.prototype.toString.call(typeof process !== 'undefined' ? process : 0) === '[object process]'
);
}

/**
Expand Down