Page Menu
Home
Software Heritage
Search
Configure Global Search
Log In
Files
F9339260
integration.js
No One
Temporary
Actions
Download File
Edit File
Delete File
View Transforms
Subscribe
Mute Notifications
Award Token
Flag For Later
Size
3 KB
Subscribers
None
integration.js
View Options
import
{
arrayify
,
logger
}
from
'@sentry/utils'
;
import
{
getCurrentHub
}
from
'./hub.js'
;
import
{
addGlobalEventProcessor
}
from
'./scope.js'
;
const
installedIntegrations
=
[];
/** Map of integrations assigned to a client */
/**
* Remove duplicates from the given array, preferring the last instance of any duplicate. Not guaranteed to
* preseve the order of integrations in the array.
*
* @private
*/
function
filterDuplicates
(
integrations
)
{
const
integrationsByName
=
{};
integrations
.
forEach
(
currentInstance
=>
{
const
{
name
}
=
currentInstance
;
const
existingInstance
=
integrationsByName
[
name
];
// We want integrations later in the array to overwrite earlier ones of the same type, except that we never want a
// default instance to overwrite an existing user instance
if
(
existingInstance
&&
!
existingInstance
.
isDefaultInstance
&&
currentInstance
.
isDefaultInstance
)
{
return
;
}
integrationsByName
[
name
]
=
currentInstance
;
});
return
Object
.
values
(
integrationsByName
);
}
/** Gets integrations to install */
function
getIntegrationsToSetup
(
options
)
{
const
defaultIntegrations
=
options
.
defaultIntegrations
||
[];
const
userIntegrations
=
options
.
integrations
;
// We flag default instances, so that later we can tell them apart from any user-created instances of the same class
defaultIntegrations
.
forEach
(
integration
=>
{
integration
.
isDefaultInstance
=
true
;
});
let
integrations
;
if
(
Array
.
isArray
(
userIntegrations
))
{
integrations
=
[...
defaultIntegrations
,
...
userIntegrations
];
}
else
if
(
typeof
userIntegrations
===
'function'
)
{
integrations
=
arrayify
(
userIntegrations
(
defaultIntegrations
));
}
else
{
integrations
=
defaultIntegrations
;
}
const
finalIntegrations
=
filterDuplicates
(
integrations
);
// The `Debug` integration prints copies of the `event` and `hint` which will be passed to `beforeSend`. It therefore
// has to run after all other integrations, so that the changes of all event processors will be reflected in the
// printed values. For lack of a more elegant way to guarantee that, we therefore locate it and, assuming it exists,
// pop it out of its current spot and shove it onto the end of the array.
const
debugIndex
=
finalIntegrations
.
findIndex
(
integration
=>
integration
.
name
===
'Debug'
);
if
(
debugIndex
!==
-
1
)
{
const
[
debugInstance
]
=
finalIntegrations
.
splice
(
debugIndex
,
1
);
finalIntegrations
.
push
(
debugInstance
);
}
return
finalIntegrations
;
}
/**
* 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
)
{
const
integrationIndex
=
{};
integrations
.
forEach
(
integration
=>
{
integrationIndex
[
integration
.
name
]
=
integration
;
if
(
installedIntegrations
.
indexOf
(
integration
.
name
)
===
-
1
)
{
integration
.
setupOnce
(
addGlobalEventProcessor
,
getCurrentHub
);
installedIntegrations
.
push
(
integration
.
name
);
(
typeof
__SENTRY_DEBUG__
===
'undefined'
||
__SENTRY_DEBUG__
)
&&
logger
.
log
(
`Integration installed:
${
integration
.
name
}
`
);
}
});
return
integrationIndex
;
}
export
{
getIntegrationsToSetup
,
installedIntegrations
,
setupIntegrations
};
//# sourceMappingURL=integration.js.map
File Metadata
Details
Attached
Mime Type
text/x-java
Expires
Jul 4 2025, 9:33 AM (5 w, 5 d ago)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
3297923
Attached To
rDWAPPS Web applications
Event Timeline
Log In to Comment