4 ms·
Xtypejs: data validation for JavaScript Apps
- lucono 11y agoThanks to lots of great community feedback and input, xtypejs now has a home at [http://xtype.js.org](http://xtype.js.org) http://xtype.js.org](http://xtype.js.org), with great documentation, user guide, and lots of examples.
- lucono 11y agoExample 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.
- o_____________o 11y agoLately I've been using the JSON schema format to validate. It's powerful and clean. We've paired it with RAML to validate everything from the URL parameters, POST bodies, response bodies, etc. http://json-schema.org/ http://json-schema.org/ https://github.com/zaggino/z-schema https://github.com/zaggino/z-schema