Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/lucono/xtypejs
Elegant, highly efficient data validation for JavaScript.
https://github.com/lucono/xtypejs
data-types data-validation javascript
Last synced: 4 days ago
JSON representation
Elegant, highly efficient data validation for JavaScript.
- Host: GitHub
- URL: https://github.com/lucono/xtypejs
- Owner: lucono
- License: mit
- Created: 2015-03-31T07:05:22.000Z (almost 10 years ago)
- Default Branch: master
- Last Pushed: 2023-01-12T08:26:34.000Z (almost 2 years ago)
- Last Synced: 2024-12-20T13:47:06.437Z (11 days ago)
- Topics: data-types, data-validation, javascript
- Language: JavaScript
- Homepage: https://xtype.js.org
- Size: 1.47 MB
- Stars: 362
- Watchers: 10
- Forks: 15
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
[![xtypejs Logo](https://xtype.js.org/site/assets/img/xtypejs-logo.png)](https://xtype.js.org/)
## Elegant, highly efficient data validation for JavaScript---
### Overview
- Provides concise, performant, readable, data and type validation for JavaScript apps, using built-in and user-defined data-validating pseudo types.
- Improves application efficiency and readability by unifying the most basic but common data and type validations in JavaScript apps, into single, concise, highly optimized operations.
- Employs bitwise operations, data pre-processing, and memory-efficient memoization for fast, robust performance in small and large apps and libraries.
- Ready for nodejs, requirejs, and regular script tag.
- Website – **[xtype.js.org](https://xtype.js.org)**### Go from this:
```js
function searchEmployees(value) {
if (typeof value === 'string') {
if (value.trim().length > 1) {
return EmployeeDB.searchByName(value);
} else if (value.trim().length === 1) {
return EmployeeDB.searchByMiddleInitial(value);
} else {
return { error: 'Invalid search value supplied' };
}
} else if (typeof value === 'object' && value !== null) {
if (Object.keys(value).length === 1) {
return EmployeeDB.searchByFieldValuePair(value);
} else if (Object.keys(value).length > 1) {
return { error: 'Search by multiple fields not supported' };
} else {
return { error: 'Invalid search value supplied' };
}
} else if (typeof value === 'number') {
if (!isNaN(value) && isFinite(value) && value > 0 && value % 1 === 0) {
return EmployeeDB.searchByEmployeeNumber(value);
} else {
return { error: 'Invalid employee number supplied' };
}
} else if (typeof value === 'undefined' || value === null) {
return { error: 'No search value supplied' };
} else {
return { error: 'Invalid search value supplied' };
}
}
```### To concise, performant, readable, data validation:
```js
function searchEmployees(value) {
switch (xtype.which(value, 'str2+ str1 int+ obj1 obj2+ num nil')) {
case 'str2+':
return EmployeeDB.searchByName(value);
case 'str1':
return EmployeeDB.searchByMiddleInitial(value);
case 'int+':
return EmployeeDB.searchByEmployeeNumber(value);
case 'obj1':
return EmployeeDB.searchByFieldValuePair(value);
case 'obj2+':
return { error: 'Search by multiple fields not supported' };
case 'num':
return { error: 'Invalid employee number supplied' };
case 'nil':
return { error: 'No search value supplied' };
default:
return { error: 'Invalid search value supplied' };
}
}
```### And even add custom validation types of your own:
```js
xtype.ext.registerType('ssn', {
validator: function(val) {
return typeof val === 'string' && /^\d{3}-\d{2}-\d{4}$/.test(val);
}
});function searchEmployees(value) {
switch (xtype.which(value, 'positive_integer, ssn, multi_char_string')) {
case 'positive_integer':
return EmployeeDB.searchByEmployeeNumber(value);
case 'ssn':
return EmployeeDB.searchBySSN(value);
case 'multi_char_string':
return EmployeeDB.searchByName(value);
default:
return { error: 'Invalid search value supplied' };
}
}
```##
#### Links
- [Website](https://xtype.js.org)
- [Examples And Guide](https://xtype.js.org/?doc=guide)
- [API Docs](https://xtype.js.org/?doc=api)#### Installation
See [here](https://xtype.js.org/?doc=getit).
#### Dependencies
None.
#### Build / Test
See [here](https://github.com/lucono/xtypejs/tree/master/project/xtypejs/test).
#### License
MIT license.
#### Website
Visit the website for usage guide, examples, API docs, and installation.
**[xtype.js.org](https://xtype.js.org/)**