Skip to content

Releases: microsoft/cppgraphqlgen

Make find_package(cppgraphqlgen CONFIG) depend on PEGTL

15 May 18:34
00a6d4b
Compare
Choose a tag to compare

What's Changed

  • Call find_package(PEGTL) implicitly from find_package(cppgraphqlgen CONFIG) by @wravery in #289

Full Changelog: v4.5.2...v4.5.3

Some bug fixes/cleanup and a new HTTP client/server sample

12 May 05:18
2175116
Compare
Choose a tag to compare

What's Changed

  • Default arguments break for incomplete struct definitions in input types by @wravery in #282
  • Add an HTTP client/server sample with Boost.Beast by @wravery in #283
  • Improve awaitable errors by @wravery in #285
  • Fixing SonarQube static analysis warnings by @wravery in #286
  • Export compile commands and fix some SonarLint warnings by @wravery in #287

Full Changelog: v4.5.1...v4.5.2

Miscellaneous bug fixes

20 Jan 23:48
7f0e166
Compare
Choose a tag to compare

What's Changed

Full Changelog: v4.5.0...v4.5.1

Bug fixes and link-time-optimization support for GCC 12

24 May 20:14
8c1623a
Compare
Choose a tag to compare

The most notable change was part of the fix for #254 in #256. In the course of debugging it, I realized that response::IdType was being overly aggressive about trying to interpret any string that was a valid Base64 encoding as a Base64 encoded vector of bytes:

I'm bumping the minor version because response::IdType in inputs/arguments is going to be a string all the time internally, and that changes which accessors you can use on field arguments. It's generally more consistent now, but if you are used to using it with Base64 encoded binaries and your code assumes that's what it contains, you may need to perform the conversion explicitly with argId.release<response::IdType::ByteData>() rather than using the const ByteData accessors. You can still use response::IdType::isBase64() to tell if it's safe to release it as a binary (otherwise it will throw an exception for strings which are not valid Base64 encodings), and it's always safe to release it as a string. It's also always safe to use the const c_str() OpaqueString accessor on response::IdType field arguments now because they are guaranteed to hold a string internally.

The response::IdType::ByteData type is just an alias for std::vector<std::uint8_t>, which was the original type for response::IdType before I added std::string support, so you could also write the release call as argId.release<std::vector<std::uint8_t>>() if that looks better to you. The same applies to response::IdType::OpaqueString vs. std::string.

Otherwise, most of the changes since v4.4.1 have to do with fixing warnings and errors that showed up when enabling LTO (link-time-optimization) in GCC 10 and 12. The project, including all samples and tests, should now build cleanly with GCC using the -flto=auto compiler flag.

What's Changed

  • Update PEGTL version number in README by @wravery in #253
  • Fix source lifetime and preserve input strings in response::IdType by @wravery in #256
  • Miscellaneous warnings and errors which showed up in GCC 12 by @wravery in #257
  • Adding Microsoft SECURITY.MD by @microsoft-github-policy-service in #259
  • Cleanup redundant inline specifiers by @wravery in #262

New Contributors

  • @microsoft-github-policy-service made their first contribution in #259

Full Changelog: v4.4.1...v4.5.0

Custom PEGTL parse tree without unwind support

18 May 05:14
b8edf5f
Compare
Choose a tag to compare

Till the try/catch/rethrow handling is fixed in the PEGTL version of parse_tree, throwing an exception during parsing easily overflows the stack on Windows with MSVC. This change brings a simplified version of the PEGTL parse_tree into cppgraphqlgen without support for the unwind feature (which cppgraphqlgen doesn't use), so it no longer needs to handle the exceptions at each level of the tree. It just lets them be caught directly in the caller after destroying all of the objects on the stack.

The short version is that this should fix #222 using the default depth limit of 25 (or even up to ~100) rather than needing to set it to something less than 10. If/when PEGTL is updated to remove the try/catch/rethrow implementation, cppgraphqlgen can revert to using the original version of parse_tree in PEGTL.

This version also updates the PEGTL sub-module and find_package call in CMake to use 3.2.6, which has some fixes for recent versions of both MSVC and GCC. If you have a CI build which uses cppgraphqlgen and PEGTL (e.g. from vcpkg), you may have noticed that it broke recently when Visual Studio was updated. This should fix that, too.

What's Changed

  • Customize the PEGTL parse_tree implementation by @wravery in #252

Full Changelog: v4.4.0...v4.4.1

Simplify generated code for input types in schemagen and clientgen

11 May 17:45
8c502ed
Compare
Choose a tag to compare

This is a minor version update because the code does need to be regenerated with schemagen/clientgen to maintain compatibility with the GraphQLService.h/GraphQLClient.h shared headers.

There's also a fix for a command line parsing bug in clientgen (#248) and several small documentation fixes to match changes in behavior or improve clarity.

What's Changed

  • Fix #248 by @wravery in #250
  • Use concepts and type traits instead of specializing service::isInputType() for each input type by @wravery in #249
  • Clarify clientgen usage in latest version by @wravery in #251

Full Changelog: v4.3.1...v4.4.0

Mitigate breaking changes since v4.2.0

08 May 05:54
681c08d
Compare
Choose a tag to compare

What's Changed

  • Add response::IdType accessors for backwards compatibility by @wravery in #245
  • Generate input type copy constructors by @wravery in #247

Full Changelog: v4.3.0...v4.3.1

Implement several feature requests and cleanup code

05 May 22:09
c0d6bf1
Compare
Choose a tag to compare

Possible Breaking Changes

Most users should not notice the difference, but there are a few things that might require changes to your code or build settings:

  • Almost every struct and method/function that returns anything is now decorated with [[nodiscard]], so you may get compiler warnings where you did not before. If you treat warnings as errors, this could also break your build.
  • The [[nodiscard]] annotations led me to notice that I was not checking the result of the ResolverContext::NotifySubscribe/ResolverContext::NotifyUnsubscribe resolvers in subscribe/unsubscribe. I decided in 63ef2ce that subscribe/unsubscribe ought to propagate the errors by throwing an exception. If you have a default subscription object and it does not handle every field gracefully in the ResolverContext::NotifySubscribe/ResolverContext::NotifyUnsubscribe case (for instance you are using the NYI generated stubs which throw exceptions), you may need to work around that. The changes in #240 allow a couple of ways to do that:
    • If you do not handle the ResolverContext::NotifySubscribe/ResolverContext::NotifyUnsubscribe resolver calls, you can leave the default subscription object on Operations empty and it will skip that call. You need to override the default (empty) subscription object in each call to deliver if you were not already doing that, since the default subscription object is also used by deliver in the absence of an override.
    • You can override the subscription object used for ResolverContext::NotifySubscribe/ResolverContext::NotifyUnsubscribe now in subscribe/unsubscribe, as an additional member in RequestSubscribeParams/RequestUnsubscribeParams.
  • PR #241 added support for generating multiple operation objects in a single request document from clientgen. Part of that involved moving the enum and input type declarations to a shared namespace (already specified with the --namespace parameter). They are re-exposed with using statements in the per-operation namespace, but since the input types used to be declared inline as part of the Variables struct, you may need to remove the Variables:: scope from code which references them. You can now reference them from either the --namespace shared namespace or the per-operation namespace which still contains the Variables struct.

What's Changed

  • Add a migration guide from v3.x to v4.x by @wravery in #236
  • Add constexpr support to internal::sorted_map and internal::sorted_set by @wravery in #237
  • Make the default subscription object optional and allow an override for subscribe/unsubscribe by @wravery in #240
  • Output all operations from clientgen if the --operation flag is not specified by @wravery in #241
  • Code cleanup by @wravery in #242
  • Update docs for next release by @wravery in #243

Full Changelog: v4.2.0...v4.3.0

Fixing various issues reported in v4.1.1

25 Apr 23:07
b41c977
Compare
Choose a tag to compare

I had to make a few changes that may be incompatible with existing consumers, but they are small enough that I think this can be considered a minor version update rather than a full major version. The changes which are most likely to affect existing code are the updates to response::IdType (see changes to how the fake ID's are initialized in TodayMock.cpp), and how nullable nested input types are represented as std::unique_ptr instead of std::optional to support cycles of nullable/list input types (see changes in ClientTests.cpp where it initializes the Variables::CompleteTaskInput variable).

What's Changed

  • Fixes for #208 and #209 by @wravery in #214
  • Make CMake old-file cleanup safer/more specific by @wravery in #215
  • Update PEGTL submodule to 3.2.5 by @wravery in #219
  • Add a unit test for invalid string escape sequences by @wravery in #223
  • Adds a virtual default destructor for RequestState by @ALTinners in #228
  • Add a configurable depth limit to the parser by @wravery in #231
  • Accept either a Base64 encoded binary or an opaque string in response::IdType by @wravery in #232
  • Options to remove base64 ID encoding at compile time by @ALTinners in #229
  • More constexpr schema by @wravery in #234
  • More constexpr schema by @ALTinners in #227
  • Input type references by @wravery in #235

New Contributors

  • @ALTinners made their first contribution in #228

Full Changelog: v4.1.1...v4.2.0

Bug fixes and custom awaitable improvements

22 Jan 06:49
eef8bcc
Compare
Choose a tag to compare

What's Changed

  • Don't add Variables:: scope to scalar and built-in types in clientgen by @wravery in #202
  • Make Request/Operations methods thread-safe and test custom awaitables by @wravery in #204
  • Bump patch version for bugfix release by @wravery in #207

Full Changelog: v4.1.0...v4.1.1