UNPKG

@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
"use strict"; 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();