From 3006ec062df01a37e224a58a2f74dd3f024665be Mon Sep 17 00:00:00 2001 From: Ugaitz Urien Date: Mon, 27 May 2024 15:29:10 +0200 Subject: [PATCH] Back to keys approach, prevent creating more objects --- packages/dd-trace/src/encode/0.4.js | 38 +++++++++++++++++------------ 1 file changed, 22 insertions(+), 16 deletions(-) diff --git a/packages/dd-trace/src/encode/0.4.js b/packages/dd-trace/src/encode/0.4.js index 92ad03ffd1c..02d96cb8a26 100644 --- a/packages/dd-trace/src/encode/0.4.js +++ b/packages/dd-trace/src/encode/0.4.js @@ -272,16 +272,19 @@ class AgentEncoder { } _encodeMetaStruct (bytes, value) { - const entries = Array.isArray(value) ? [] : Object.entries(value) - const validEntries = entries.filter(([_, v]) => - typeof v === 'string' || - typeof v === 'number' || - (v !== null && typeof v === 'object')) + const keys = Array.isArray(value) ? [] : Object.keys(value) + const validKeys = keys.filter(key => { + const v = value[key] + return typeof v === 'string' || + typeof v === 'number' || + (v !== null && typeof v === 'object') + }) - this._encodeMapPrefix(bytes, validEntries.length) + this._encodeMapPrefix(bytes, validKeys.length) - for (const [k, v] of validEntries) { - this._encodeString(bytes, k) + for (const key of validKeys) { + const v = value[key] + this._encodeString(bytes, key) this._encodeObjectAsByteArray(bytes, v) } } @@ -316,16 +319,19 @@ class AgentEncoder { } _encodeObjectAsMap (bytes, value, circularReferencesDetector) { - const entries = Object.entries(value) - const validEntries = entries.filter(([_, v]) => - typeof v === 'string' || - typeof v === 'number' || - (v !== null && typeof v === 'object' && !circularReferencesDetector.has(v))) + const keys = Object.keys(value) + const validKeys = keys.filter(key => { + const v = value[key] + return typeof v === 'string' || + typeof v === 'number' || + (v !== null && typeof v === 'object' && !circularReferencesDetector.has(v)) + }) - this._encodeMapPrefix(bytes, validEntries.length) + this._encodeMapPrefix(bytes, validKeys.length) - for (const [k, v] of validEntries) { - this._encodeString(bytes, k) + for (const key of validKeys) { + const v = value[key] + this._encodeString(bytes, key) this._encodeObject(bytes, v, circularReferencesDetector) } }