Skip to content

Commit c162b49

Browse files
fix: preserve int64 precision for typed fields in keepAllInAdditional mode
When _keepTypedInAdditionalProperties is true, known typed attributes are now deserialized with their declared type/format before being stored in additionalProperties. This routes int64 fields through the BigInt conversion path instead of raw JSON number assignment. Also removes the redundant instance.additionalProperties initialization guard that was immediately overwritten. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
1 parent ddb11e1 commit c162b49

2 files changed

Lines changed: 52 additions & 26 deletions

File tree

packages/datadog-api-client-v1/models/ObjectSerializer.ts

Lines changed: 26 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -3350,21 +3350,34 @@ export class ObjectSerializer {
33503350

33513351
if (extraAttributes.length > 0) {
33523352
if ("additionalProperties" in attributesMap) {
3353-
if (!instance.additionalProperties) {
3354-
instance.additionalProperties = {};
3355-
}
3356-
33573353
const additionalProperties: { [key: string]: any } = {};
3358-
for (const key of extraAttributes) {
3359-
additionalProperties[key] = data[key];
3354+
if (keepAllInAdditional) {
3355+
// Build reverse map from JSON baseName → attribute config for per-field deserialization.
3356+
// This preserves int64 precision for typed numeric fields via their declared format.
3357+
const baseNameToAttr: { [key: string]: any } = {};
3358+
for (const attrName in attributesMap) {
3359+
if (attrName !== "additionalProperties") {
3360+
baseNameToAttr[attributesMap[attrName].baseName] = attributesMap[attrName];
3361+
}
3362+
}
3363+
for (const key of extraAttributes) {
3364+
const attrInfo = baseNameToAttr[key];
3365+
additionalProperties[key] = attrInfo
3366+
? ObjectSerializer.deserialize(data[key], attrInfo.type, attrInfo.format)
3367+
: data[key];
3368+
}
3369+
instance.additionalProperties = additionalProperties;
3370+
} else {
3371+
for (const key of extraAttributes) {
3372+
additionalProperties[key] = data[key];
3373+
}
3374+
const attributeObj = attributesMap["additionalProperties"];
3375+
instance.additionalProperties = ObjectSerializer.deserialize(
3376+
additionalProperties,
3377+
attributeObj.type,
3378+
attributeObj.format
3379+
);
33603380
}
3361-
3362-
const attributeObj = attributesMap["additionalProperties"];
3363-
instance.additionalProperties = ObjectSerializer.deserialize(
3364-
additionalProperties,
3365-
attributeObj.type,
3366-
attributeObj.format
3367-
);
33683381
} else {
33693382
throw new Error(
33703383
`found extra attributes '${extraAttributes}' in ${type}`

packages/datadog-api-client-v2/models/ObjectSerializer.ts

Lines changed: 26 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -14366,21 +14366,34 @@ export class ObjectSerializer {
1436614366

1436714367
if (extraAttributes.length > 0) {
1436814368
if ("additionalProperties" in attributesMap) {
14369-
if (!instance.additionalProperties) {
14370-
instance.additionalProperties = {};
14371-
}
14372-
1437314369
const additionalProperties: { [key: string]: any } = {};
14374-
for (const key of extraAttributes) {
14375-
additionalProperties[key] = data[key];
14370+
if (keepAllInAdditional) {
14371+
// Build reverse map from JSON baseName → attribute config for per-field deserialization.
14372+
// This preserves int64 precision for typed numeric fields via their declared format.
14373+
const baseNameToAttr: { [key: string]: any } = {};
14374+
for (const attrName in attributesMap) {
14375+
if (attrName !== "additionalProperties") {
14376+
baseNameToAttr[attributesMap[attrName].baseName] = attributesMap[attrName];
14377+
}
14378+
}
14379+
for (const key of extraAttributes) {
14380+
const attrInfo = baseNameToAttr[key];
14381+
additionalProperties[key] = attrInfo
14382+
? ObjectSerializer.deserialize(data[key], attrInfo.type, attrInfo.format)
14383+
: data[key];
14384+
}
14385+
instance.additionalProperties = additionalProperties;
14386+
} else {
14387+
for (const key of extraAttributes) {
14388+
additionalProperties[key] = data[key];
14389+
}
14390+
const attributeObj = attributesMap["additionalProperties"];
14391+
instance.additionalProperties = ObjectSerializer.deserialize(
14392+
additionalProperties,
14393+
attributeObj.type,
14394+
attributeObj.format
14395+
);
1437614396
}
14377-
14378-
const attributeObj = attributesMap["additionalProperties"];
14379-
instance.additionalProperties = ObjectSerializer.deserialize(
14380-
additionalProperties,
14381-
attributeObj.type,
14382-
attributeObj.format
14383-
);
1438414397
} else {
1438514398
throw new Error(
1438614399
`found extra attributes '${extraAttributes}' in ${type}`

0 commit comments

Comments
 (0)