Object.defineProperty(exports, "__esModule", { value: true }); var tslib_1 = require("tslib"); var hub_1 = require("@sentry/hub"); var utils_1 = require("@sentry/utils"); var flags_1 = require("./flags"); exports.installedIntegrations = []; /** * @private */ function filterDuplicates(integrations) { return integrations.reduce(function (acc, integrations) { if (acc.every(function (accIntegration) { return integrations.name !== accIntegration.name; })) { acc.push(integrations); } return acc; }, []); } /** Gets integration to install */ function getIntegrationsToSetup(options) { var defaultIntegrations = (options.defaultIntegrations && tslib_1.__spread(options.defaultIntegrations)) || []; var userIntegrations = options.integrations; var integrations = tslib_1.__spread(filterDuplicates(defaultIntegrations)); if (Array.isArray(userIntegrations)) { // Filter out integrations that are also included in user options integrations = tslib_1.__spread(integrations.filter(function (integrations) { return userIntegrations.every(function (userIntegration) { return userIntegration.name !== integrations.name; }); }), 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(function (i) { return i.name; }); var alwaysLastToRun = 'Debug'; if (integrationsNames.indexOf(alwaysLastToRun) !== -1) { integrations.push.apply(integrations, tslib_1.__spread(integrations.splice(integrationsNames.indexOf(alwaysLastToRun), 1))); } return integrations; } exports.getIntegrationsToSetup = getIntegrationsToSetup; /** Setup given integration */ function setupIntegration(integration) { if (exports.installedIntegrations.indexOf(integration.name) !== -1) { return; } integration.setupOnce(hub_1.addGlobalEventProcessor, hub_1.getCurrentHub); exports.installedIntegrations.push(integration.name); flags_1.IS_DEBUG_BUILD && utils_1.logger.log("Integration installed: " + integration.name); } exports.setupIntegration = setupIntegration; /** * 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(options) { var integrations = {}; getIntegrationsToSetup(options).forEach(function (integration) { integrations[integration.name] = integration; setupIntegration(integration); }); // set the `initialized` flag so we don't run through the process again unecessarily; use `Object.defineProperty` // because by default it creates a property which is nonenumerable, which we want since `initialized` shouldn't be // considered a member of the index the way the actual integrations are utils_1.addNonEnumerableProperty(integrations, 'initialized', true); return integrations; } exports.setupIntegrations = setupIntegrations; //# sourceMappingURL=integration.js.map