👮 fix(enforceModelSpec): handle nested objects (#2681)

This commit is contained in:
Danny Avila 2024-05-12 18:20:53 -04:00 committed by GitHub
parent c83d9d61d4
commit 89899164ed
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
3 changed files with 71 additions and 4 deletions

View file

@ -24,21 +24,32 @@ const enforceModelSpec = (modelSpec, parsedBody) => {
/**
* Checks if there is a match for the given key and value in the parsed body
* or any of its interchangeable keys.
* or any of its interchangeable keys, including deep comparison for objects and arrays.
* @param {string} key
* @param {any} value
* @param {TConversation} parsedBody
* @param {object} parsedBody
* @returns {boolean}
*/
const checkMatch = (key, value, parsedBody) => {
if (parsedBody[key] === value) {
const isEqual = (a, b) => {
if (Array.isArray(a) && Array.isArray(b)) {
return a.length === b.length && a.every((val, index) => isEqual(val, b[index]));
} else if (typeof a === 'object' && typeof b === 'object' && a !== null && b !== null) {
const keysA = Object.keys(a);
const keysB = Object.keys(b);
return keysA.length === keysB.length && keysA.every((k) => isEqual(a[k], b[k]));
}
return a === b;
};
if (isEqual(parsedBody[key], value)) {
return true;
}
if (interchangeableKeys.has(key)) {
return interchangeableKeys
.get(key)
.some((interchangeableKey) => parsedBody[interchangeableKey] === value);
.some((interchangeableKey) => isEqual(parsedBody[interchangeableKey], value));
}
return false;