Add input validation guidelines and enhance cleanParams function to preserve default values
This commit is contained in:
parent
b025bffc9d
commit
0123a71da4
1 changed files with 94 additions and 1 deletions
|
|
@ -2,7 +2,7 @@ import type { JsonSchemaType } from "./jsonUtils";
|
|||
|
||||
/**
|
||||
* Cleans parameters by removing undefined, null, and empty string values for optional fields
|
||||
* while preserving all values for required fields.
|
||||
* while preserving all values for required fields and fields with explicit default values.
|
||||
*
|
||||
* @param params - The parameters object to clean
|
||||
* @param schema - The JSON schema defining which fields are required
|
||||
|
|
@ -14,13 +14,23 @@ export function cleanParams(
|
|||
): Record<string, unknown> {
|
||||
const cleaned: Record<string, unknown> = {};
|
||||
const required = schema.required || [];
|
||||
const properties = schema.properties || {};
|
||||
|
||||
for (const [key, value] of Object.entries(params)) {
|
||||
const isFieldRequired = required.includes(key);
|
||||
const fieldSchema = properties[key] as JsonSchemaType | undefined;
|
||||
|
||||
// Check if the field has an explicit default value
|
||||
const hasDefault = fieldSchema && "default" in fieldSchema;
|
||||
const defaultValue = hasDefault ? fieldSchema.default : undefined;
|
||||
|
||||
if (isFieldRequired) {
|
||||
// Required fields: always include, even if empty string or falsy
|
||||
cleaned[key] = value;
|
||||
} else if (hasDefault && value === defaultValue) {
|
||||
// Field has a default value and current value matches it - preserve it
|
||||
// This is important for cases like default: null
|
||||
cleaned[key] = value;
|
||||
} else {
|
||||
// Optional fields: only include if they have meaningful values
|
||||
if (value !== undefined && value !== "" && value !== null) {
|
||||
|
|
|
|||
Loading…
Reference in a new issue