UNPKG

@dynatrace/react-native-plugin

Version:

This plugin gives you the ability to use the Dynatrace Mobile agent in your react native application.

123 lines (122 loc) 4.27 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.getReactNativeVersion = exports.containEventPropertiesInArray = exports.addIsApiReported = exports.flagEventProperties = exports.containEventProperties = exports.containSessionProperties = exports.trimStringValuesInObject = exports.trimString = exports.isObject = exports.flattenAdditionalData = void 0; const ConsoleLogger_1 = require("../../../core/logging/ConsoleLogger"); const MAX_STRING_LENGTH_FOR_VALUES = 5000; const logger = new ConsoleLogger_1.ConsoleLogger('EventModifierUtil'); const flattenAdditionalData = (obj, parent, res = {}) => { for (const key in obj) { const propName = parent != null ? parent + '.' + key : key; const valueOfObject = obj[key]; if ((0, exports.isObject)(valueOfObject)) { (0, exports.flattenAdditionalData)(valueOfObject, propName, res); } else { res[propName] = obj[key]; } } return res; }; exports.flattenAdditionalData = flattenAdditionalData; const isObject = (obj) => { if (obj === null || typeof obj !== 'object') { return false; } return Object.prototype.toString.call(obj) === '[object Object]'; }; exports.isObject = isObject; const trimString = (str, maxLength = MAX_STRING_LENGTH_FOR_VALUES) => { const stringToTrim = str.toString(); if (stringToTrim.length <= maxLength) { return stringToTrim; } else { return stringToTrim.substring(0, maxLength); } }; exports.trimString = trimString; const trimStringValuesInObject = (jsonData) => { for (const key in jsonData) { if (Object.prototype.hasOwnProperty.call(jsonData, key)) { jsonData[key] = trimStringValue(jsonData[key]); } } return jsonData; }; exports.trimStringValuesInObject = trimStringValuesInObject; const containSessionProperties = (jsonData) => { for (const key in jsonData) { if (key.startsWith(`${"session_properties"}.`)) { return true; } } return false; }; exports.containSessionProperties = containSessionProperties; const containEventProperties = (jsonData) => { for (const key in jsonData) { if (key.startsWith(`${"event_properties"}.`)) { return true; } } return false; }; exports.containEventProperties = containEventProperties; const flagEventProperties = (event) => { if (event !== null && (0, exports.containEventProperties)(event)) { event["characteristics.has_event_properties"] = true; } }; exports.flagEventProperties = flagEventProperties; const addIsApiReported = (event) => { if (event !== null) { event["characteristics.is_api_reported"] = true; } }; exports.addIsApiReported = addIsApiReported; const containEventPropertiesInArray = (eventEntries) => { for (const [key, value] of eventEntries) { if (key.startsWith(`${"event_properties"}.`)) { return true; } } return false; }; exports.containEventPropertiesInArray = containEventPropertiesInArray; const getReactNativeVersion = () => { const candidates = [ () => require('react-native').ReactNativeVersion, () => require('react-native/Libraries/Core/ReactNativeVersion').version, ]; for (const get of candidates) { try { const v = get(); if (v) return toVersionString(v); } catch (_a) { } } logger.debug('Unable to determine React Native version'); return undefined; }; exports.getReactNativeVersion = getReactNativeVersion; const toVersionString = (v) => `${v.major}.${v.minor}.${v.patch}${v.prerelease ? `-${v.prerelease}` : ''}`; const trimStringValuesInArray = (arrayData) => { arrayData.forEach((value, index, array) => { array[index] = trimStringValue(value); }); return arrayData; }; const trimStringValue = (data) => { if (typeof data === 'string') { return (0, exports.trimString)(data); } else if (Array.isArray(data)) { return trimStringValuesInArray(data); } else if ((0, exports.isObject)(data)) { return (0, exports.trimStringValuesInObject)(data); } return data; };