mirror of
https://github.com/zulip/zulip.git
synced 2025-11-04 14:03:30 +00:00
This starts the concept of a schema checker, similar to zerver/lib/validator.py on the server. We can use this to validate incoming data. Our server should filter most of our incoming data, but it's useful to have client-side checking to defend against things like upgrade regressions (i.e. what if we change the name of the field on the server side without updating all client uses).
66 lines
1.3 KiB
JavaScript
66 lines
1.3 KiB
JavaScript
var schema = (function () {
|
|
|
|
var exports = {};
|
|
|
|
/*
|
|
|
|
These runtime schema validators are defensive and
|
|
should always succeed, so we don't necessarily want
|
|
to translate these. These are very similar to server
|
|
side validators in zerver/lib/validator.py.
|
|
|
|
*/
|
|
|
|
exports.check_string = function (var_name, val) {
|
|
if (!_.isString(val)) {
|
|
return var_name + ' is not a string';
|
|
}
|
|
};
|
|
|
|
exports.check_record = function (var_name, val, fields) {
|
|
if (!_.isObject(val)) {
|
|
return var_name + ' is not a record';
|
|
}
|
|
|
|
var field_results = _.map(fields, function (f, field_name) {
|
|
if (val[field_name] === undefined) {
|
|
return field_name + ' is missing';
|
|
}
|
|
return f(field_name, val[field_name]);
|
|
});
|
|
|
|
var msg = _.filter(field_results).sort().join(', ');
|
|
|
|
if (msg) {
|
|
return 'in ' + var_name + ' ' + msg;
|
|
}
|
|
};
|
|
|
|
exports.check_array = function (var_name, val, checker) {
|
|
if (!_.isArray(val)) {
|
|
return var_name + ' is not an array';
|
|
}
|
|
|
|
var msg;
|
|
|
|
_.find(val, function (item) {
|
|
var res = checker('item', item);
|
|
|
|
if (res) {
|
|
msg = res;
|
|
return msg;
|
|
}
|
|
});
|
|
|
|
if (msg) {
|
|
return 'in ' + var_name + ' we found an item where ' + msg;
|
|
}
|
|
};
|
|
|
|
return exports;
|
|
|
|
}());
|
|
if (typeof module !== 'undefined') {
|
|
module.exports = schema;
|
|
}
|