2016-07-18 2 views
2

Я думал, что я довольно хорошо осведомленный на 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 изменение. Три сценария:

  1. patch: обратный вызов по-прежнему появляется Error объекта. Объект Error по-прежнему имеет свойство message, и этот объект по-прежнему является String.
  2. minor: потребитель может полагаться на содержимое имущества message, ища часть строки. Это изменение просто добавляет больше конца строки, поэтому является просто аддитивным.
  3. major: потребитель может полагаться на содержание message собственности и теперь это другая строка

Я получил очень сердится один раз, когда библиотека я использовал не соответствовал semver в пути Я ожидал. Я не хочу этого делать с кем-то другим.

Я сознаю, что это можно рассматривать как субъективный/основанный на мнениях вопрос, но я ищу «правильный» ответ (с доказательством, если это возможно). Самый безопасный вариант, очевидно, должен идти за major, но я ищу, чтобы узнать, не слишком ли это.

+0

Поскольку вы не можете знать, как ваши пользователи используют сообщение, это нарушение. –

+0

@AdrianLynch затем * каждый * изменение - нарушение. – zerkms

+0

Конечно нет. Если я добавлю новый метод, это не будет изменением. Если я добавлю дополнительный аргумент методу, это не будет изменением. Если я верну что-то другое раньше, это потенциально прерывное изменение. –

ответ

3

Patch

Вы должны изменить любого из ваших тестов, когда вы сделали это, чтобы приспособить изменения? Я подозреваю, что нет. Если вы не полагались на этот формат сообщений, каковы шансы ваших потребителей на это?

+1

Я пошел на патч в конце. Сообщения об ошибках не были задокументированы, поэтому на них не следует полагаться. – Clarkie

0

Я думаю, что это зависит от контекста - есть ли способ получить информацию, содержащуюся в сообщении об ошибке, без строковых манипуляций? Если это так, я бы сказал, что изменение это не прерывное изменение - вам не придется перегибаться назад, чтобы поддерживать код, использующий API, неподдерживаемым образом.

С другой стороны, если нет другого способа получить эту информацию, тогда это проблема с вашим API. В этом случае я бы рекомендовал нажать главную версию с новым сообщением и методами/свойствами объекта ошибки для получения этой информации - это позволит избежать нарушения кода пользователя и гарантировать, что вам не придется снова заниматься этой проблемой, если вы хотите изменить сообщение об ошибке.

Смежные вопросы