nox-validation
Version:
validate dynamic schema
216 lines (167 loc) • 5.54 kB
Markdown
# Nox Validation
`nox-validation` is a powerful and flexible validation library for both client-side and server-side use. It supports nested fields, alias validation, and customizable rules, making it perfect for complex form data validation.
## Installation
```bash
npm install nox-validation
```
## Library Exports
### **Validation Functions:**
- `validate` - The core function for validating data.
### **Constants:**
- `CONSTANTS` - A collection of predefined constants (likely including data types, error messages, validation rules, etc.).
### **Helper Functions (`HELPERS`):**
- `validateSingleField` - Validates a single field against defined rules.
- `validateType` - Performs type checks for data validation.
- `fieldsMapping` - Groups fields by `schemaId` for structured access.
- `convertTree` - Converts a flat structure into a nested tree format.
- `getValueByDynamicKey` - Retrieves a value dynamically from an object using a key path.
- `setValueByDynamicKey` - Sets a value dynamically in an object using a key path.
## Usage
```javascript
const { validate, helpers } = require("nox-validation");
const all_fields = []; // fields of all collection
const relations = []; // all relations data
const schema = [
{
_id: "67d2996955b853593b84a0c8",
schema_id: "67d2993655b853593b84a086",
field: "email",
field_type: "Single",
type: "String",
path: "email",
meta: {
field: "email",
interface: "input",
hidden: false,
sort: null,
required: true,
nullable: false,
validations: {
rules: [
{
rule: "matchesRegExp",
matchesRegExp: {
value: "/^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\\.[a-zA-Z]{2,}$/",
},
},
],
},
readonly: false,
},
schema_definition: {
name: "email",
type: "String",
default: null,
unique: true,
},
},
{
_id: "67d2995955b853593b84a0bc",
schema_id: "67d2993655b853593b84a086",
field: "user_name",
field_type: "Single",
type: "String",
path: "user_name",
meta: {
field: "user_name",
interface: "input",
hidden: false,
sort: null,
required: true,
nullable: false,
readonly: false,
},
schema_definition: {
name: "user_name",
type: "String",
default: null,
},
},
];
```
#### When `isSeparatedFields` is `true`
```javascript
const result = validate({
formData: {
user_name: "John Doe",
email: "john.doe@example.com",
},
isSeparatedFields: true,
fields: schema,
relationalFields: helpers.fieldsMapping(all_fields),
relations: relations,
formId: "67d2993655b853593b84a086",
abortEarly: false,
byPassKeys: [],
apiVersion: "v1",
language: "nl",
maxLevel: 3,
});
```
#### When `isSeparatedFields` is `false`
```javascript
const result = validate({
formData: {
user_name: "John Doe",
email: "john.doe@example.com",
},
isSeparatedFields: false,
fields: all_fields,
relationalFields: {},
relations: relations,
formId: "67d2993655b853593b84a086",
abortEarly: false,
byPassKeys: [],
apiVersion: "v1",
language: "nl",
maxLevel: 3
});
```
#### Output Example:
```javascript
{
status: true, // Validation passed
error: {}, // Empty if no errors
data: {} // Validated data
}
```
## Parameters
### Schema Parameter Descriptions:
#### `formData` (Object)
- Represents the primary data structure for form submission.
- Contains key-value pairs corresponding to form fields.
#### `formId` (ObjectId)
- A unique identifier for the form schema.
- Required when `isSeparatedFields` is `true`, indicating that only form-specific fields are provided.
#### `isSeparatedFields` (Boolean)
- Determines how fields are structured in the request.
- **If `true`** → Only form schema fields are included in `fields`.
- **If `false`** → All fields for a specific tenant are included. Additionally, `relationalFields` will contain `{ schema_id: [related fields] }`.
#### `relations` (Array of Objects)
- Defines the relationships between different entities.
- Contains objects specifying relation types and linked entities.
#### `fields` (Array of Objects)
- Holds the form schema fields when `isSeparatedFields` is `true`.
- If `false`, it contains all fields for the specific tenant.
#### `relationalFields` (Object)
- Maps schema IDs to their related fields.
- Used when `isSeparatedFields` is `false` to maintain relationships between schemas and related fields.
#### `abortEarly` (Boolean)
- Determines validation behavior.
- **If `true`** → Validation stops on the first error encountered.
- **If `false`** → All validation errors are collected and returned.
#### `byPassKeys` (Array of Strings)
- Contains field names that should be skipped during validation.
- Allows exclusion of specific fields from validation checks.
#### `apiVersion` (String)
- Specifies the API version (`"v1"` or `"v2"`).
- Helps in maintaining compatibility and version control.
#### `language` (String)
- Specifies the locale language (`"nl"` or `"en"`).
- Determines the locale for validation messages.
#### `maxLevel` (Number)
- Defines the level for generate tree structure.
## Result
The `validate` function returns an object with two keys:
- `status` (_boolean_): `true` if validation passed, `false` if there were errors.
- `error` (_object_): Contains validation errors, with field paths as keys and error messages as values.