UNPKG

2.63 kBJavaScriptView Raw
1import { addGlobalEventProcessor, getCurrentHub } from '@sentry/hub';
2import { logger } from '@sentry/utils';
3
4var installedIntegrations = [];
5
6/** Map of integrations assigned to a client */
7
8/**
9 * @private
10 */
11function filterDuplicates(integrations) {
12 return integrations.reduce((acc, integrations) => {
13 if (acc.every(accIntegration => integrations.name !== accIntegration.name)) {
14 acc.push(integrations);
15 }
16 return acc;
17 }, [] );
18}
19
20/** Gets integration to install */
21function getIntegrationsToSetup(options) {
22 var defaultIntegrations = (options.defaultIntegrations && [...options.defaultIntegrations]) || [];
23 var userIntegrations = options.integrations;
24
25 let integrations = [...filterDuplicates(defaultIntegrations)];
26
27 if (Array.isArray(userIntegrations)) {
28 // Filter out integrations that are also included in user options
29 integrations = [
30 ...integrations.filter(integrations =>
31 userIntegrations.every(userIntegration => userIntegration.name !== integrations.name),
32 ),
33 // And filter out duplicated user options integrations
34 ...filterDuplicates(userIntegrations),
35 ];
36 } else if (typeof userIntegrations === 'function') {
37 integrations = userIntegrations(integrations);
38 integrations = Array.isArray(integrations) ? integrations : [integrations];
39 }
40
41 // Make sure that if present, `Debug` integration will always run last
42 var integrationsNames = integrations.map(i => i.name);
43 var alwaysLastToRun = 'Debug';
44 if (integrationsNames.indexOf(alwaysLastToRun) !== -1) {
45 integrations.push(...integrations.splice(integrationsNames.indexOf(alwaysLastToRun), 1));
46 }
47
48 return integrations;
49}
50
51/**
52 * Given a list of integration instances this installs them all. When `withDefaults` is set to `true` then all default
53 * integrations are added unless they were already provided before.
54 * @param integrations array of integration instances
55 * @param withDefault should enable default integrations
56 */
57function setupIntegrations(integrations) {
58 var integrationIndex = {};
59
60 integrations.forEach(integration => {
61 integrationIndex[integration.name] = integration;
62
63 if (installedIntegrations.indexOf(integration.name) === -1) {
64 integration.setupOnce(addGlobalEventProcessor, getCurrentHub);
65 installedIntegrations.push(integration.name);
66 (typeof __SENTRY_DEBUG__ === 'undefined' || __SENTRY_DEBUG__) && logger.log(`Integration installed: ${integration.name}`);
67 }
68 });
69
70 return integrationIndex;
71}
72
73export { getIntegrationsToSetup, installedIntegrations, setupIntegrations };
74//# sourceMappingURL=integration.js.map