veffect
Version:
powerful TypeScript validation library built on the robust foundation of Effect combining exceptional type safety, high performance, and developer experience. Taking inspiration from Effect's functional principles, VEffect delivers a balanced approach tha
86 lines (85 loc) • 2.67 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
/**
* Example usage of the validation library
*/
const string_1 = require("./schema/string");
const number_1 = require("./schema/number");
const boolean_1 = require("./schema/boolean");
const object_1 = require("./schema/object");
const array_1 = require("./schema/array");
const optional_1 = require("./schema/optional");
// Define a User schema
const UserSchema = (0, object_1.object)({
id: (0, number_1.number)().integer(),
name: (0, string_1.string)().minLength(2).maxLength(50),
email: (0, string_1.string)().email(),
isActive: (0, boolean_1.boolean)(),
tags: (0, array_1.array)((0, string_1.string)()),
metadata: (0, optional_1.optional)((0, object_1.object)({
lastLogin: (0, string_1.string)(),
preferences: (0, object_1.object)({
theme: (0, string_1.string)(),
notifications: (0, boolean_1.boolean)()
})
}))
});
// Example valid data
const validUser = {
id: 123,
name: "John Doe",
email: "john@example.com",
isActive: true,
tags: ["user", "customer"],
metadata: {
lastLogin: "2023-04-10",
preferences: {
theme: "dark",
notifications: true
}
}
};
// Example invalid data
const invalidUser = {
id: 456.7, // Not an integer
name: "J", // Too short
email: "not-an-email", // Invalid email
isActive: "yes", // Not a boolean
tags: "user", // Not an array
metadata: {
lastLogin: 12345, // Not a string
preferences: {
theme: "dark",
notifications: "yes" // Not a boolean
}
}
};
// Create a validator from the schema
const userValidator = UserSchema.toValidator();
// Validate the valid user
console.log("Validating valid user:");
const validResult = userValidator.safeParse(validUser);
console.log(validResult);
// Validate the invalid user
console.log("\nValidating invalid user:");
const invalidResult = userValidator.safeParse(invalidUser);
console.log(invalidResult);
// Using try/catch with parse for validation
console.log("\nUsing try/catch with parse:");
try {
const validatedUser = userValidator.parse(validUser);
console.log("Valid user:", validatedUser);
}
catch (error) {
console.error("Validation error:", error);
}
// Using async validation with promises
console.log("\nUsing async validation with Promise.resolve:");
userValidator
.validateAsync(validUser)
.then((validatedUser) => {
console.log("Valid user (async):", validatedUser);
})
.catch((error) => {
console.error("Validation error (async):", error);
});