Я думал, что я довольно хорошо осведомленный на Semantic Versioning, но это одно изменение сделало меня неуверенный о том, что ожидаемое изменение версии:Semver на вложенном объекте в JavaScript, майор, малый или патч?
Исходный код:
if (result.error) {
return callback(result.error);
}
Новый код:
if (result.error) {
result.error.message = `${result.error.message} on ${self.tableName()}`;
return callback(result.error);
}
Я думаю, что это изменение можно было бы классифицировать как patch
, minor
или как major
изменение. Три сценария:
patch
: обратный вызов по-прежнему появляетсяError
объекта. ОбъектError
по-прежнему имеет свойствоmessage
, и этот объект по-прежнему являетсяString
.minor
: потребитель может полагаться на содержимое имуществаmessage
, ища часть строки. Это изменение просто добавляет больше конца строки, поэтому является просто аддитивным.major
: потребитель может полагаться на содержаниеmessage
собственности и теперь это другая строка
Я получил очень сердится один раз, когда библиотека я использовал не соответствовал semver в пути Я ожидал. Я не хочу этого делать с кем-то другим.
Я сознаю, что это можно рассматривать как субъективный/основанный на мнениях вопрос, но я ищу «правильный» ответ (с доказательством, если это возможно). Самый безопасный вариант, очевидно, должен идти за major
, но я ищу, чтобы узнать, не слишком ли это.
Поскольку вы не можете знать, как ваши пользователи используют сообщение, это нарушение. –
@AdrianLynch затем * каждый * изменение - нарушение. – zerkms
Конечно нет. Если я добавлю новый метод, это не будет изменением. Если я добавлю дополнительный аргумент методу, это не будет изменением. Если я верну что-то другое раньше, это потенциально прерывное изменение. –