@tmlmobilidade/utils
Version:
This package provides a collection of common utility functions used across projects within the organization.
32 lines (31 loc) • 1.25 kB
JavaScript
/* eslint-disable @typescript-eslint/no-explicit-any */
/**
* Convert an object to match a Zod schema's shape.
* @param source - The source object to convert
* @param template - The Zod schema to validate against
* @returns The converted object containing only the fields defined in the schema
* @throws {Error} If a required field is missing from the source object
*/
export function convertObject(source, template) {
//
const templateKeys = Object.keys(template.shape);
const result = {};
for (const key of templateKeys) {
const fieldSchema = template.shape[key];
const value = source[key];
// Handle undefined/null values
if (value === undefined || value === null) {
if (!fieldSchema.nullish()) {
throw new Error(`Required field "${key}" is missing in the source object`);
}
continue;
}
const parsedValue = fieldSchema.safeParse(value);
if (!parsedValue.success) {
throw new Error(`Invalid field type for "${key}" in the source object:\n> ${parsedValue.error.errors.map(error => error.message).join('\n')}`);
}
// Add the value to result
result[key] = value;
}
return result;
}