Я только начинаю новое веб-приложение, и я хочу реализовать некоторую форму проверки стиля контракта в моем JavaScript. Я сделал быстрый поиск в Google и наткнулся на JsContact, но синтаксис не совсем то, что я имел в виду. Кто-нибудь знает о других библиотеках?
Я думаю, что я хочу, чтобы синтаксис был чем-то вроде
String.prototype.padLeft = function(c, width) {
Verify.value(c).isRequired().isNotNull().isChar();
Verify.value(width).isRequired().isNotNull().isNumber().greaterThan(0);
...
Verify.value(result).isNotNull();
return result;
};
Хотя мне не понадобится много времени, чтобы собрать свою собственную библиотеку с синтаксисом/методами, которые я хочу, если кто-то еще уже выполнил эту работу, и она достаточно близко, это сэкономит мне некоторое время. Спасибо заранее.
UPDATE
У меня не будет времени, чтобы поработать над этим до сегодняшнего дня, поэтому я дам ему еще несколько часов, чтобы узнать, есть ли у кого-либо рекомендации. Если нет, я отправлю все, что я создаю где-то в качестве ответа ниже, чтобы другие люди могли ссылаться, если они пожелают.
Я также немного поразмыслил с API, который будет иметь смысл, и я сейчас думаю что-то вроде (надуманные примеры):
function searchUser(firstName, middleInit, lastName) {
Verify.value(firstName).isString().matching(/\w+/); // Must have value
Verify.value(middleInit).whenNotNull().isChar(); // May be null, but not undefined
Verify.value(lastName).isString().withMinimumLengthOf(2); // Must have value
...
}
function syncTime(serverTime, now) {
Verify.value(serverTime).isDate(); // Must have value.
Verify.value(now).whenDefined().isDate(); // May be undefined, but not null.
}
Моя текущая мысль заключается в том, что перенос значений NULL или UNDEFINED является нетипичным (по крайней мере для меня?), как таковым, а не явно указывая, что значение .isNotNull() вы фактически отключили бы правило для .whenDefined() или .whenNotNull(), как показано выше. Я могу сделать .whenNotNull() не ошибка на UNDEFINED, но я вижу NULL vs. UNDEFINED как важное различие; мы увидим... все другие методы будут довольно типичными... мыслями? комментарии?