validlyjs
Version:
ValidlyJS is a lightweight, type-safe validation library inspired by Laravel's validation syntax
41 lines • 1.77 kB
JavaScript
import { Validator } from "../../core/Validator.js";
export const objectRule = {
validate: (value) => typeof value === "object" && !Array.isArray(value) && value !== null,
message: ([], ctx) => {
const message = ctx.config.messages?.object;
return typeof message === "string"
? ctx.formatMessage({ attribute: ctx.field || "field" }, message)
: `${ctx.field} must be an object`;
},
additionalRules: {
shape: (schema) => ({
validate: async (obj, params, ctx) => {
const validator = new Validator(schema);
const result = await validator.validateAsync(obj);
return result.isValid;
},
message: (params, ctx) => {
const message = ctx.config.messages?.shape;
return typeof message === "string"
? ctx.formatMessage({ attribute: ctx.field || "field" }, message)
: `${ctx.field} has an invalid structure`;
},
}),
strict: () => ({
validate: (obj, [], ctx) => {
if (!ctx.schema) {
throw new Error("Schema is required for strict validation");
}
const extraKeys = Object.keys(obj).filter((key) => !(key in ctx.schema));
return extraKeys.length === 0;
},
message: ([], ctx) => {
const message = ctx.config.messages?.strict;
return typeof message === "string"
? ctx.formatMessage({ attribute: ctx.field || "field" }, message)
: `${ctx.field} contains unexpected fields`;
},
}),
},
};
//# sourceMappingURL=Object.js.map