JavaScript 中嵌套对象的 Semver,主要、次要或补丁?

Semver on nested object in JavaScript, major, minor or patch?

我以为我对 Semantic Versioning 很了解,但这一变化让我不确定预期的版本变化是什么:

原代码:

if (result.error) {
  return callback(result.error);
}

新代码:

if (result.error) {
  result.error.message = `${result.error.message} on ${self.tableName()}`;
  return callback(result.error);
}

我认为此更改可归类为 patchminormajor 更改。三种场景:

  1. patch:回调还在接收一个Error对象。 Error 对象仍然有一个 message 属性 并且 属性 仍然是一个 String.
  2. minor:消费者可能依赖message属性的内容,寻找字符串的一部分。此更改只是将更多内容添加到字符串的末尾,因此只是附加的。
  3. major:消费者可能依赖 message 属性 的内容,现在这是一个不同的字符串

有一次我使用的库不符合我预期的 semver,我真的很生气。我不想这样对别人。

我知道这可以被视为一个基于 subjective/opinion 的问题,但我正在寻找 'correct' 答案(如果可能的话有证据)。最安全的选择显然是 major,但我想看看这是否有点过分。

Patch

您执行此操作时是否必须更改任何测试以适应更改?我怀疑不是。如果您不依赖这种消息格式,那么您的消费者依赖它的可能性有多大?

我认为这取决于上下文 - 有没有一种方法可以在不进行字符串操作的情况下获取错误消息中包含的信息?如果是这样,我会说更改它不是一个重大更改 - 您不必向后弯腰以支持以不受支持的方式使用 API 的代码。

另一方面,如果没有其他方式获取该信息,那么这就是您的 API 的问题。在这种情况下,我建议推送一个包含新消息的主要版本和错误对象上的 methods/properties 以获取该信息——这将避免破坏人们的代码,并确保您不必处理这个问题如果您想更改错误消息,请再次输入。