UNPKG

react-indexeddb-kit

Version:

A TypeScript-based React IndexedDB wrapper with CRUD operations.

49 lines (48 loc) 2.29 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.validateData = validateData; const errors_1 = require("../../errors"); function validateData(data, modelDef, schema) { const validatedData = {}; Object.entries(modelDef.fields).forEach(([fieldName, definition]) => { const fieldValue = data[fieldName]; // Check if the field is required and the value is undefined if (definition.required && fieldValue === undefined) { throw new errors_1.ValidationError(`Field '${fieldName}' is required`); } // If the field has a default value and is missing, set the default if (fieldValue === undefined && definition.default !== undefined) { validatedData[fieldName] = definition.default; return; } // Complex type checks for 'array' and 'object' if (fieldValue !== undefined) { if (definition.type === "array" && !Array.isArray(fieldValue)) { throw new errors_1.ValidationError(`Field '${fieldName}' must be an array`); } if (definition.type === "object" && typeof fieldValue !== "object") { throw new errors_1.ValidationError(`Field '${fieldName}' must be an object`); } // Check for 'date' type if (definition.type === "date" && !(fieldValue instanceof Date)) { throw new errors_1.ValidationError(`Field '${fieldName}' must be a Date`); } // Check basic types if (definition.type !== "array" && definition.type !== "object" && definition.type !== "date" && typeof fieldValue !== definition.type) { throw new errors_1.ValidationError(`Field '${fieldName}' must be of type ${definition.type}`); } // If the field passes validation, include it in validated data validatedData[fieldName] = fieldValue; } }); // Prevent extra fields that are not part of the model Object.keys(data).forEach((key) => { if (!modelDef.fields[key]) { throw new errors_1.ValidationError(`Field '${key}' is not defined in the schema`); } }); return validatedData; }