3 ms·
Example of using xtypejs: Go from this: function searchEmployees(value) { if (typeof value === 'string') { if (value.trim().length >
by lucono 11y ago
Example of using xtypejs:
Go from this:
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:
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' };
}
}
- keedot 11y agoContrived and oddly specific for an example. Do we have any examples being used out in the wild?
- lucono 11y agoThere is a non-open-source JavaScript decorator library using this. It has many (real) examples, but the one that first comes to mind is its use of the xtype.is API method (http://xtype.js.org/api/is http://xtype.js.org/api/is) to perform runtime validations based on validation meta-data that's defined in configuration. For an idea of what that looks like, see: http://xtype.js.org/guide/checking_combinations_of_types http://xtype.js.org/guide/checking_combinations_of_types
- keedot 11y agoCompletely makes sense now, the example had me in the wrong headspace.