News for hackers. Stuff that matters.
Re:Xtypejs: data validation for JavaScript Apps by lucono on Wednesday July 01, 2015 @03:57AM (#9810514)
Thanks to lots of great community feedback and input, xtypejs now has a home at [http://xtype.js.org](http://xtype.js.org), with great documentation, user guide, and lots of examples.
Re:Xtypejs: data validation for JavaScript Apps by o_____________o on Wednesday July 01, 2015 @01:05PM (#9813401)
Lately 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/ https://github.com/zaggino/z-schema

Re:Xtypejs: data validation for JavaScript Apps by lucono on Wednesday July 01, 2015 @09:37AM (#9811669)
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' };
        }
    }
Re:Xtypejs: data validation for JavaScript Apps by keedot on Wednesday July 01, 2015 @10:11AM (#9811893)
Contrived and oddly specific for an example. Do we have any examples being used out in the wild?
Re:Xtypejs: data validation for JavaScript Apps by lucono on Wednesday July 01, 2015 @03:14PM (#9814420)
There 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) 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

Re:Xtypejs: data validation for JavaScript Apps by keedot on Wednesday July 01, 2015 @04:40PM (#9814979)
Completely makes sense now, the example had me in the wrong headspace.