@sentry/core
Version:
Base implementation for all Sentry JavaScript SDKs
79 lines (64 loc) • 2.75 kB
JavaScript
Object.defineProperty(exports, '__esModule', { value: true });
var hub = require('@sentry/hub');
var utils = require('@sentry/utils');
var installedIntegrations = [];
/** Map of integrations assigned to a client */
/**
* @private
*/
function filterDuplicates(integrations) {
return integrations.reduce((acc, integrations) => {
if (acc.every(accIntegration => integrations.name !== accIntegration.name)) {
acc.push(integrations);
}
return acc;
}, [] );
}
/** Gets integration to install */
function getIntegrationsToSetup(options) {
var defaultIntegrations = (options.defaultIntegrations && [...options.defaultIntegrations]) || [];
var userIntegrations = options.integrations;
let integrations = [...filterDuplicates(defaultIntegrations)];
if (Array.isArray(userIntegrations)) {
// Filter out integrations that are also included in user options
integrations = [
...integrations.filter(integrations =>
userIntegrations.every(userIntegration => userIntegration.name !== integrations.name),
),
// And filter out duplicated user options integrations
...filterDuplicates(userIntegrations),
];
} else if (typeof userIntegrations === 'function') {
integrations = userIntegrations(integrations);
integrations = Array.isArray(integrations) ? integrations : [integrations];
}
// Make sure that if present, `Debug` integration will always run last
var integrationsNames = integrations.map(i => i.name);
var alwaysLastToRun = 'Debug';
if (integrationsNames.indexOf(alwaysLastToRun) !== -1) {
integrations.push(...integrations.splice(integrationsNames.indexOf(alwaysLastToRun), 1));
}
return integrations;
}
/**
* Given a list of integration instances this installs them all. When `withDefaults` is set to `true` then all default
* integrations are added unless they were already provided before.
* @param integrations array of integration instances
* @param withDefault should enable default integrations
*/
function setupIntegrations(integrations) {
var integrationIndex = {};
integrations.forEach(integration => {
integrationIndex[integration.name] = integration;
if (installedIntegrations.indexOf(integration.name) === -1) {
integration.setupOnce(hub.addGlobalEventProcessor, hub.getCurrentHub);
installedIntegrations.push(integration.name);
(typeof __SENTRY_DEBUG__ === 'undefined' || __SENTRY_DEBUG__) && utils.logger.log(`Integration installed: ${integration.name}`);
}
});
return integrationIndex;
}
exports.getIntegrationsToSetup = getIntegrationsToSetup;
exports.installedIntegrations = installedIntegrations;
exports.setupIntegrations = setupIntegrations;
//# sourceMappingURL=integration.js.map