# API Reference

* [`validate`](/veni/docs.md#validate-value-schema-rootname)
* [`getValidateResult`](/veni/docs.md#getValidateResult)
* [`V`](/veni/docs.md#v)
  * [`any`](/veni/docs.md#any)
  * [`string`](/veni/docs.md#string)
  * [`object`](/veni/docs.md#object)
  * [`array`](/veni/docs.md#array)
  * [`enum`](/veni/docs.md#enum)
  * [`number`](/veni/docs.md#number)
  * [`boolean`](/veni/docs.md#boolean)
  * [`date`](/veni/docs.md#date)

## `validate(value, schema, [rootName])`

Validates a value using the given schema.

### Arguments

* `value` A value to validate.
* `schema` A schema definition.
* `rootName` The optional name of the root objected. Used when formatting validation errors.

#### Returns

A validated object.

#### Throws

A `ValidationError` is throws if validation failed.

## `getValidateResult(value, schema, [path])`

Validate a value using the given schema, and get result as an object.

### Arguments

* `value` A value to validate.
* `schema` A schema definition.
* `path` The prefix path used for formatting validation errors.

#### Returns

An object with the following props:

* `value` The new value after validation.
* `errors` The list of validation errors. If the validation was successful an array will be empty.

## V

## any

Matches any object. By default it's required, and non nullable.

### any.optional()

Marks a key as optional. `undefined` value is allowed.

### any.nullable()

Marks a key as required. `null` value is allowed.

## string

Matches a string.

### string.min(min: number)

Specifies the minimum number of characters.

### string.max(max: number)

Specifies the maximum number of characters.

### string.trim()

Trims the output value.

### string.regex(reg: RegExp)

Defines a regular expression.

### string.email()

Requires the string value to be a valid email address.\
The Following regexp is used `/^[a-zA-Z0-9._\-+]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,4}$/`

## object

Matches an object.\
If `keys` are not set then any object is allowed.

### object.keys(schema: SchemaMap)

Defines a schema for each property.

### string.unknown()

Allows unknown keys.

## array

Matches an array.

### array.items(typeSchema)

Defines the schema of the array element.

### enum

Matches predefined list of values. Values are case insensitive.

### enum.values(values)

Defines the required enum value.

Example:

```typescript
enum Gender {
  Male = 'Male',
  Female = 'Female',
}

const schema = V.object().keys({
  gender: V.enum().values<Gender>(Object.values(Gender)),
});
```

### enum.literal(...values)

Defines allowed literal values.

Example:

```typescript
const schema = V.object().keys({
  gender: V.enum().literal('male', 'female'),
});
```

## number

Matches a number. Valid string numbers are casted to a number type.

### number.integer()

Requires the number to be an integer (no floating point).

### number.min(min: number)

Specifies the minimum allowed number.

### number.max(max: number)

Specifies the maximum allowed number.

## boolean

Matches a boolean. Strings `'true'` and `'false'` are casted to a boolean type.

## date

Matches a date. Valid iso strings e.g. `"2018-12-01T14:08:26.061Z"` are converted to a date object. Invalid dates are not allowed e.g. `new Date('')`.


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://veni.gitbook.io/veni/docs.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
