@dynatrace/react-native-plugin
Version:
This plugin gives you the ability to use the Dynatrace Mobile agent in your react native application.
57 lines (56 loc) • 2 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.ValueRestrictionModifier = void 0;
const ConsoleLogger_1 = require("../../../core/logging/ConsoleLogger");
const EventModifierUtil_1 = require("./EventModifierUtil");
class ValueRestrictionModifierImpl {
constructor() {
this.logger = new ConsoleLogger_1.ConsoleLogger('NonFiniteNumbersModifier');
}
modifyEvent(event) {
if (event != null && this.eventHasRestrictedValues(event)) {
event["dt.internal.has_nfn_values"] = true;
}
return JSON.parse(JSON.stringify(event, (_key, value) => {
if (value === undefined) {
return null;
}
return value;
}));
}
eventHasRestrictedValues(obj) {
for (const key in obj) {
if (Object.prototype.hasOwnProperty.call(obj, key) &&
(this.valueHasRestrictedValues(obj[key]) ||
obj[key] === undefined)) {
this.logger.debug(`eventHasNonFiniteNumbers() - ${key} contains non-finite numbers or undefined: ${obj[key]} changed to null!`);
return true;
}
}
return false;
}
valueHasRestrictedValues(val) {
if (typeof val === 'function') {
return true;
}
if (Array.isArray(val)) {
return this.arrayHasRestrictedValues(val);
}
if ((0, EventModifierUtil_1.isObject)(val)) {
return this.eventHasRestrictedValues(val);
}
return !this.isFinitePrimitive(val);
}
arrayHasRestrictedValues(arr) {
for (const val of arr) {
if (this.valueHasRestrictedValues(val) || val === undefined) {
return true;
}
}
return false;
}
isFinitePrimitive(value) {
return typeof value !== 'number' || isFinite(value);
}
}
exports.ValueRestrictionModifier = new ValueRestrictionModifierImpl();