# CHANGE LOG
All notable changes to this project will be documented in this file.

The format is based on [Keep a Changelog](http://keepachangelog.com/)
and this project adheres to [Semantic Versioning](http://semver.org/).

----
## [Unreleased]

### Added

* Initial Perl implementation
  ([#1670](https://github.com/cucumber/common/pull/1670) [ehuelsmann])

### Changed

### Deprecated

### Removed

### Fixed

## [17.0.1] - 2021-07-19

### Fixed

- [Ruby] `seconds_to_duration` convert nanos to an integer to match the json schema
  ([#1655](https://github.com/cucumber/common/pull/1655))

## [17.0.0] - 2021-07-08

### Added

* Added `Ci#buildNumber` field
  ([#1632](https://github.com/cucumber/common/pull/1632)
   [#1606](https://github.com/cucumber/common/issues/1606)
   [aslakhellesoy])
* [Ruby] Generate DTOs from the json schemas to avoid usage of plain ruby hashes
  ([#1574](https://github.com/cucumber/common/issues/1574)
   [#1605](https://github.com/cucumber/common/pull/1605))
* [Java] Added various overloads to `JSON` to work with streams efficiently

### Changed

* **BREAKING** Move `willBeRetried` field from `TestStepResult` to `TestCaseFinished`
  ([#902](https://github.com/cucumber/common/issues/902) [#1631](https://github.com/cucumber/common/pull/1631))
* [Go] Move module paths to point to monorepo
  ([#1550](https://github.com/cucumber/common/issues/1550))
* [Java] Removed implicit utility class constructors and made classes final

## [16.0.1] - 2021-05-24

### Fixed

* [JavaScript] `addDurations` works with legacy messages that represent `seconds` as a `string`.

## [16.0.0] - 2021-05-15

### Added

* [Ruby] The generated code is added to Git.
  ([#1461](https://github.com/cucumber/cucumber/pull/1461)
   [aslakhellesoy])
* [JavaScript] Added `getWorstTestStepResult` function (moved from `@cucumber/query`)

### Changed

* [Go, Java, JavaScript, Ruby] The library no longer depends on protocol buffers. The message classes are generated from [JSON Schemas](https://github.com/cucumber/common/tree/messages/v16.0.0/messages).
  ([#1414](https://github.com/cucumber/cucumber/pull/1414)
   [aslakhellesoy])
   * Empty `string` properties are set to `""` rather than being omitted.
   * Empty `Array` properties are set to `[]` rather than being omitted.
   * The `seconds` property on `Timestamp` and `Diration` is now a `number` rather than a `string`.
* [Go, Java, JavaScript, Ruby] Packages and structs have changed:
  * [JavaScript]: Import with `import * as messages from '@cucumber/messages'`
  * [Ruby] Messages are now plain ruby hashes with camelCase symbol keys instead of objects with snake_case properties.

## [15.0.0] - 2021-03-23

### Added

* [All] Added tags to Rule node
    ([#1356](https://github.com/cucumber/cucumber/pull/1356) [sebrose], [gasparnagy], [brasmusson], [WannesFransen1994])

### Removed

* [JavaScript] moved code that depends on Node.js stream APIs to `@cucumber/message-streams`

### Fixed

* [Elixir] Make sure messages.proto is updated with ../messages.proto
* [Elixir] Generated new message modules based on the new messages.proto file

## [14.1.2] - 2021-03-23

### Fixed

* [JavaScript] revert breaking changes in 14.1.1
  ([#1437](https://github.com/cucumber/cucumber/issues/1437))

## [14.1.1] - 2021-03-22

### Fixed

* The 14.1.0 release failed half way through due to build script problems.

## [14.1.0] - 2021-03-22

### Added

* [All] Added tags to Rule node
    ([#1356](https://github.com/cucumber/cucumber/pull/1356) [sebrose], [gasparnagy], [brasmusson], [WannesFransen1994])

### Fixed

* [Elixir] Make sure messages.proto is updated with ../messages.proto
* [Elixir] Generated new message modules based on the new messages.proto file

## [14.0.1] - 2021-02-08

### Fixed

* [JavaScript] Remove `Long` from function signatures in `TimeConversion`

## [14.0.0] - 2021-02-05

### Changed

* [JavaScript] The stream classes have to be imported separately:
  `import { MessageToBinaryStream, MessageToNdjsonStream, BinaryToMessageStream, NdjsonToMessageStream} from '@cucumber/messages/dist/src/stream'`
  ([#1331](https://github.com/cucumber/cucumber/issues/1331))
* In JavaScript, Int64 fields are now typed as `number`, rather than `number|Long`

### Fixed

* [JavaScript] removed circular dependencies.
  ([#1292](https://github.com/cucumber/cucumber/pull/1292)
   [davidjgoss]
   [aslakhellesoy])

## [13.2.1] - 2020-11-19

### Fixed

* In case a line cannot be parsed as JSON, throw an error
  with the offending line in the exception message.

## [13.2.0] - 2020-11-12

### Added

* Elixir implementation
  ([#1175](https://github.com/cucumber/cucumber/pull/1175)
   [WannesFransen1994])

## [13.1.0] - 2020-09-14

### Added

* Add `Attachment#url`. This makes it possible to "detach" attachments so the main stream
  gets smaller and the attachments can be processed/downloaded separately with more ease.
  ([#1183](https://github.com/cucumber/cucumber/pull/1183)
   [aslakhellesoy])

### Fixed

* Ignore empty lines rather than throwing an error.

## [13.0.1] - 2020-08-07

### Fixed

* Release again since the 13.0.0 release didn't fully sync to subrepos

## [13.0.0] - 2020-08-07

### Changed

* Move `JavaMethod` and `JavaStackTraceElement` to be children of `SourceReference`

## [12.4.0] - 2020-07-31

### Added

* Suggested file name to the Attachment messages ([#1128](https://github.com/cucumber/cucumber/pull/1128))
* Added ProtocolVersion to access messages version reliably ([#1127](https://github.com/cucumber/cucumber/pull/1127) [mpkorstanje])

## [12.3.2] - 2020-07-29

### Fixed

* Release process for 12.3.1 failed

## [12.3.1] - 2020-07-29

### Fixed

* Release process for 12.3.0 failed

## [12.3.0] - 2020-07-29

### Added

* Add `JavaMethod` and `JavaStackTraceElement` as `SourceReference` ([#1120](https://github.com/cucumber/cucumber/pull/1120))

### Fixed

* [Ruby] Fix computing of Timestamp (see [cucumber-ruby#1438](https://github.com/cucumber/cucumber-ruby/issues/1438))

## [12.2.0] - 2020-06-26

### Added

* Added field `ci` to `Meta` message.

## [12.1.1] - 2020-04-21

### Fixed

* [Ruby] Add `VERSION` file to gem, so `Messages::Envelope::VERSION` works

## [12.1.0] - 2020-04-21

### Added

* Expose the library version through the API
  * Java: `io.cucumber.messages.Messages.Envelope.class.getPackage().getImplementationVersion()`
  * Ruby: `Messages::Envelope::VERSION`
  * JavaScript: `import { version } from '@cucumber/messages'`
* Add `Meta` message
  ([#976](https://github.com/cucumber/cucumber/pull/976)
   [aslakhellesoy])
* [Java] Upgrade to `cucumber-parent:2.1.0` (needed to expose library version)
 ([#976](https://github.com/cucumber/cucumber/pull/976)
  [aslakhellesoy])

## [12.0.0] - 2020-04-14

### Added

* Add `id` field to `Background`, `Rule` and `Examples`. Needed for search engine indexing.

### Changed

* Some messages have been nested under other messages (removal of other messages)
  made it possible to scope them more locally

### Removed

* Several messages that weren't used have been removed
  ([#962](https://github.com/cucumber/cucumber/pull/962)
   [#951](https://github.com/cucumber/cucumber/issues/951)
   [aslakhellesoy])

### Fixed

* Ignore unknown fields when parsing JSON. This is to ensure forward and backward
  compatibility when using JSON encoding (NDJSON).
  ([#959](https://github.com/cucumber/cucumber/pull/959)
   [#957](https://github.com/cucumber/cucumber/pull/957)
   [aslakhellesoy]
   [mpkorstanje])

## [11.1.1] - 2020-03-30

### Fixed

* The [#932](https://github.com/cucumber/cucumber/pull/932) pull request wasn't actually
  included in 11.1.0

## [11.1.0] - 2020-03-30

### Added

* [JavaScript] Add `#addDurations` function to `TimeConversion`
  ([#932](https://github.com/cucumber/cucumber/pull/932)
   [charlierudolph])

## [11.0.1] - 2020-03-30

### Fixed

* Release process

## [11.0.0] - 2020-03-30

### Changed

* `Attachment#text` and `Attachment#binary` have been replaced with `Attachment#body`,
  and `Attachment#content_encoding` has been added.
  ([#947](https://github.com/cucumber/cucumber/pull/947)
   [aslakhellesoy])

## [10.0.3] - 2020-03-05

### Fixed

* 10.0.2 release process failed.

## [10.0.2] - 2020-03-02

### Fixed

* [JavaScript] make stream readable/writable object modes explicit. Better buffer handling.
* [Ruby] Don't depend on the `json` gem, since it only installs on Windows with
  a C compiler toolchain. The `json` gem is part of the Ruby stdlib.
* [Go] Increase max size of a JSON message to 10Mb
  ([#901](https://github.com/cucumber/cucumber/issues/901)
   [#903](https://github.com/cucumber/cucumber/pull/903)
   [aslakhellesoy])

## [10.0.1] - 2020-02-13

### Fixed

* The 10.0.0 release failed.

## [10.0.0] - 2020-02-13

### Added

* Add `UndefinedParameterType`
  ([#890](https://github.com/cucumber/cucumber/pull/890)
   [aslakhellesoy])
* Add `TestCaseFinished#message`
  ([#890](https://github.com/cucumber/cucumber/pull/890)
   [aslakhellesoy])

### Changed

* Rename `TestResult` to `TestStepResult`
  ([#890](https://github.com/cucumber/cucumber/pull/890)
   [aslakhellesoy])

### Fixed

* Ruby: Fixed rounding errors in `TimeConversion`

## [9.0.3] - 2020-01-10

### Fixed

* Ruby: Fix inclusion of generated lib/messages.pb.rb

## [9.0.2] - 2020-01-10

* Ruby: Fix error in gemspec

## [9.0.1] - 2020-01-09

### Fixed

* Fixed release scripts for Go and JavaScript

## [9.0.0] - 2020-01-09

### Added

* Added `ParameterType` as an envelope message

### Changed

* Renamed module name from `cucumber-messages` to `messsages`
  ([#850](https://github.com/cucumber/cucumber/pull/850)
   [aslakhellesoy])
* Use pure Ruby protobuf in order to avoid problems with Ruby 2.7.0 and JRuby.
  ([#813](https://github.com/cucumber/cucumber/pull/813)
   [#843](https://github.com/cucumber/cucumber/issues/843)
   [mvz]
   [aslakhellesoy])
* A `TestCase` now has a list of `StepMatchArgumentsList` rather than a list of `StepMatchArgument`.
  This allows a `TestCase` to hold matches from more than one `StepDefinition`, which is possible
  in the case of ambiguous matches.
* Renamed `content_type` fields to `media_type`
* Removed the `Media` message
* Attachments can have one of `string text` and `bytes binary` as the `body`

### Removed

* Removed `TestCase#test_result`. Aggregate results will be computed by `cucumber-query` instead

## [8.0.0] - 2019-12-10

### Added

* Added `testStepId` and `testCaseStartedId` to `Attachment`
  ([#814](https://github.com/cucumber/cucumber/pull/814)
   [charlierudolph])
* Added new classes for working with NDJSON streams
* Added new `TimeConversion` utilities for converting between protobuf `Timestamp/Duration` and the
  platform's representation of timestamps (clock time) and duration (monotonic time)

### Changed

* Renamed some of the classes for dealing with streams

## [7.0.0] - 2019-11-14

### Added

* Support retry
  ([#722](https://github.com/cucumber/cucumber/pull/722)
   [charlierudolph])

### Changed

* Added more reference ids and removed deprecated/reserved fields
  ([#790](https://github.com/cucumber/cucumber/pull/790)
   [#794](https://github.com/cucumber/cucumber/pull/794)
   [vincent-psarga]
   [aslakhellesoy])

## [6.0.2] - 2019-10-16

* [Java] Fix shading of `com.google.protobuf.util`

## [6.0.1] - 2019-10-03

### Fixed

* [Go] Release 6.0.0 is unusable.

## [6.0.0] - 2019-10-02

### Added

* New `TestStepMatched` message
* `Duration` message to express duration in a seconds + nano format
* field `duration` in `TestResult` message

### Changed

* Renamed `PatternMatch` to `StepMatchArgument`
* Renamed `CommandRunTestStep#patternMatches` to `CommandRunTestStep#stepMatchArguments`
* Replace Google's Timestamp by our own message

### Removed

* `durationNanoSeconds` field in `TestResult` message

## [5.0.1] - 2019-08-23

### Fixed

* [Go] Fix module version (5.0.0 left it at v4)

## [5.0.0] - 2019-08-23

### Changed

* The ordinal numbers of the `Status` enum have changed, to easier compute an
  aggregated status.

### Fixed

* [JavaScript] Don't swallow exceptions happening in `ProtobufMessageStream`

## [4.0.0] - 2019-08-14

* [Go] Append v4 to go module name to comply with the go.mod spec

## [3.0.5] - 2019-08-14

### Fixed

* [Go] Tag the cucumber/messages-go subrepo (again)

## [3.0.4] - 2019-08-14

### Fixed

* [Go] Tag the cucumber/messages-go subrepo (again)

## [3.0.3] - 2019-08-14

### Fixed

* [Go] Tag the cucumber/messages-go subrepo

## [3.0.2] - 2019-08-01

### Added

* Add Timestamp property and comments to TestRunFinished message
  ([#665](https://github.com/cucumber/cucumber/pull/665)
   [SabotageAndi]

## [3.0.1] - 2019-07-15

### Added

* [.NET] Publish NuGet package
  ([#635](https://github.com/cucumber/cucumber/pull/635)
   [SabotageAndi]
   [aslakhellesoy]
   [vincent-psarga])

## [3.0.0] - 2019-06-05

### Added
* Added `TestRunStarted#timestamp` field
  ([#615](https://github.com/cucumber/cucumber/pull/615)
   [david1995])
* Added `TestCaseStarted#platform` field
  ([#626](https://github.com/cucumber/cucumber/pull/626)
   [#616](https://github.com/cucumber/cucumber/pull/616)
   [david1995])

### Changed
* Use an enum for the `encoding` field.
* Misc changes for `cucumber-engine`
  ([#549](https://github.com/cucumber/cucumber/pull/549))

### Deprecated

### Removed

### Fixed

## [2.1.2] - 2019-03-29

### Fixed

* Fix Project struggling to build across JRuby and Ruby 2.6
  ([#578](https://github.com/cucumber/cucumber/pull/578)
  [luke-hill])

## [2.1.1] - 2018-11-02

### Fixed

* Release process improvements

## [2.1.0] - 2018-11-01

### Added

* Add testResult to the TestCaseFinished message
  ([#488](https://github.com/cucumber/cucumber/pull/488)
   [brasmusson])

## [2.0.0] - 2018-10-14

### Added

* Several messages to support [cucumber-engine]()
  ([#502](https://github.com/cucumber/cucumber/pull/502)
   [charlierudolph])

## [1.1.2] - 2018-10-01

### Added

* Added `TestHookStarted` and `TestHookFinished` to distinguish between messages about Gherkin steps and hooks
  ([aslakhellesoy])

## [1.0.0] - 2018-09-15

### Added

* Protobuf messages for Go, Java, JavaScript, TypeScript and Ruby

<!-- Releases -->
[Unreleased]: https://github.com/cucumber/cucumber/compare/messages/v17.0.1...main
[17.0.1]:      https://github.com/cucumber/cucumber/compare/messages/v17.0.0...messages/v17.0.1
[17.0.0]:      https://github.com/cucumber/cucumber/compare/messages/v16.0.1...messages/v17.0.0
[16.0.1]:      https://github.com/cucumber/cucumber/compare/messages/v16.0.0...messages/v16.0.1
[16.0.0]:      https://github.com/cucumber/cucumber/compare/messages/v15.0.0...messages/v16.0.0
[15.0.0]:      https://github.com/cucumber/cucumber/compare/messages/v14.1.2...messages/v15.0.0
[14.1.2]:      https://github.com/cucumber/cucumber/compare/messages/v14.0.1...messages/v14.1.2
[14.1.1]:      https://github.com/cucumber/cucumber/compare/messages/v14.1.0...messages/v14.1.1
[14.1.0]:      https://github.com/cucumber/cucumber/compare/messages/v14.0.1...messages/v14.1.0
[14.0.1]:      https://github.com/cucumber/cucumber/compare/messages/v14.0.0...messages/v14.0.1
[14.0.0]:      https://github.com/cucumber/cucumber/compare/messages/v13.2.1...messages/v14.0.0
[13.2.1]:      https://github.com/cucumber/cucumber/compare/messages/v13.2.0...messages/v13.2.1
[13.2.0]:      https://github.com/cucumber/cucumber/compare/messages/v13.1.0...messages/v13.2.0
[13.1.0]:      https://github.com/cucumber/cucumber/compare/messages/v13.0.1...messages/v13.1.0
[13.0.1]:      https://github.com/cucumber/cucumber/compare/messages/v13.0.0...messages/v13.0.1
[13.0.0]:      https://github.com/cucumber/cucumber/compare/messages/v12.4.0...messages/v13.0.0
[12.4.0]:      https://github.com/cucumber/cucumber/compare/messages/v12.3.2...messages/v12.4.0
[12.3.2]:      https://github.com/cucumber/cucumber/compare/messages/v12.3.1...messages/v12.3.2
[12.3.1]:      https://github.com/cucumber/cucumber/compare/messages/v12.3.0...messages/v12.3.1
[12.3.0]:      https://github.com/cucumber/cucumber/compare/messages/v12.2.0...messages/v12.3.0
[12.2.0]:      https://github.com/cucumber/cucumber/compare/messages/v12.1.1...messages/v12.2.0
[12.1.1]:      https://github.com/cucumber/cucumber/compare/messages/v12.1.0...messages/v12.1.1
[12.1.0]:      https://github.com/cucumber/cucumber/compare/messages/v12.0.0...messages/v12.1.0
[12.0.0]:      https://github.com/cucumber/cucumber/compare/messages/v11.1.1...messages/v12.0.0
[11.1.1]:      https://github.com/cucumber/cucumber/compare/messages/v11.1.0...messages/v11.1.1
[11.1.0]:      https://github.com/cucumber/cucumber/compare/messages/v11.0.1...messages/v11.1.0
[11.0.1]:      https://github.com/cucumber/cucumber/compare/messages/v11.0.0...messages/v11.0.1
[11.0.0]:      https://github.com/cucumber/cucumber/compare/messages/v10.0.3...messages/v11.0.0
[10.0.3]:      https://github.com/cucumber/cucumber/compare/messages/v10.0.2...messages/v10.0.3
[10.0.2]:      https://github.com/cucumber/cucumber/compare/messages/v10.0.1...messages/v10.0.2
[10.0.1]:      https://github.com/cucumber/cucumber/compare/messages/v10.0.0...messages/v10.0.1
[10.0.0]:      https://github.com/cucumber/cucumber/compare/messages/v9.0.3...messages/v10.0.0
[9.0.3]:      https://github.com/cucumber/cucumber/compare/messages/v9.0.2...messages/v9.0.3
[9.0.2]:      https://github.com/cucumber/cucumber/compare/messages/v9.0.1...messages/v9.0.2
[9.0.1]:      https://github.com/cucumber/cucumber/compare/messages/v9.0.0...messages/v9.0.1
[9.0.0]:      https://github.com/cucumber/cucumber/compare/cucumber-messages/v8.0.0...messages/v9.0.0
[8.0.0]:      https://github.com/cucumber/cucumber/compare/cucumber-messages/v7.0.0...cucumber-messages/v8.0.0
[7.0.0]:      https://github.com/cucumber/cucumber/compare/cucumber-messages/v6.0.2...cucumber-messages/v7.0.0
[6.0.2]:      https://github.com/cucumber/cucumber/compare/cucumber-messages/v6.0.1...cucumber-messages/v6.0.2
[6.0.1]:      https://github.com/cucumber/cucumber/compare/cucumber-messages/v6.0.0...cucumber-messages/v6.0.1
[6.0.0]:      https://github.com/cucumber/cucumber/compare/cucumber-messages/v5.0.1...cucumber-messages/v6.0.0
[5.0.1]:      https://github.com/cucumber/cucumber/compare/cucumber-messages/v5.0.0...cucumber-messages/v5.0.1
[5.0.0]:      https://github.com/cucumber/cucumber/compare/cucumber-messages/v4.0.0...cucumber-messages/v5.0.0
[4.0.0]:      https://github.com/cucumber/cucumber/compare/cucumber-messages/v3.0.5...cucumber-messages/v4.0.0
[3.0.5]:      https://github.com/cucumber/cucumber/compare/cucumber-messages/v3.0.4...cucumber-messages/v3.0.5
[3.0.4]:      https://github.com/cucumber/cucumber/compare/cucumber-messages/v3.0.3...cucumber-messages/v3.0.4
[3.0.3]:      https://github.com/cucumber/cucumber/compare/cucumber-messages/v3.0.2...cucumber-messages/v3.0.3
[3.0.2]:      https://github.com/cucumber/cucumber/compare/cucumber-messages/v3.0.1...cucumber-messages/v3.0.2
[3.0.1]:      https://github.com/cucumber/cucumber/compare/cucumber-messages/v3.0.0...cucumber-messages/v3.0.1
[3.0.0]:      https://github.com/cucumber/cucumber/compare/cucumber-messages/v2.1.2...cucumber-messages/v3.0.0
[2.1.2]:      https://github.com/cucumber/cucumber/compare/cucumber-messages/v2.1.1...cucumber-messages/v2.1.2
[2.1.1]:      https://github.com/cucumber/cucumber/compare/cucumber-messages/v2.1.0...cucumber-messages/v2.1.1
[2.1.0]:      https://github.com/cucumber/cucumber/compare/cucumber-messages/v2.0.0...cucumber-messages/v2.1.0
[2.0.0]:      https://github.com/cucumber/cucumber/compare/cucumber-messages/v1.1.2...cucumber-messages/v2.0.0
[1.1.2]:      https://github.com/cucumber/cucumber/compare/cucumber-messages-v1.0.0...cucumber-messages/v1.1.2
[1.0.0]:      https://github.com/cucumber/cucumber/releases/tag/cucumber-messages-v1.0.0

<!-- Contributors in alphabetical order -->
[aslakhellesoy]:    https://github.com/aslakhellesoy
[brasmusson]:       https://github.com/brasmusson
[charlierudolph]:   https://github.com/charlierudolph
[david1995]:        https://github.com/david1995
[ehuelsmann]:       https://github.com/ehuelsmann
[luke-hill]:        https://github.com/luke-hill
[mpkorstanje]:      https://github.com/mpkorstanje
[mvz]:              https://github.com/mvz
[SabotageAndi]:     https://github.com/SabotageAndi
[vincent-psarga]:   https://github.com/vincent-psarga
