@@ -17,7 +17,76 @@ This project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.htm
1717## Maintenance
1818## Documentation-->
1919
20- # [ 1.30.0] (unreleased) - 2025-08-27
20+ # [ 1.31.0] ( https://crates.io/crates/apollo-compiler/1.31.0 ) - 2025-11-10
21+
22+ ## Features
23+
24+ - ** Allow coercing Int variables to Float - [ tninesling] , [ pull/1011] **
25+
26+ The GraphQL spec allows coercing Int values to Float in input positions (see
27+ [ input coercion] ). There are a couple things to note about this.
28+
29+ - Strings are not allowed to be coerced in this position, even if they are
30+ numeric.
31+ - Ints can only be converted to Float when they are "representable by finite
32+ IEEE 754" floating point numbers.
33+
34+ Since an IEEE 754 floating point double (f64) has 53 bits of precision, it can
35+ safely represent up to the value 2^53 - 1 as a finite value. Beyond that, the
36+ round trip from integer to float and back will lose information. This is
37+ represented with a new ` MAX_SAFE_INT ` constant which is often included in
38+ other languages like JavaScript's ` Number.MAX_SAFE_INT ` . When, we encounter an
39+ Int variable in a Float position, we ensure that its value is finitely
40+ representable.
41+
42+ There is some nuance in that the spec does not say all floats have to be
43+ within this range. So, this implementation allows explicitly passed floats
44+ which are greater than that bound, only applying the integer conversion limit
45+ when coercing a value.
46+
47+ ## Fixes
48+
49+ - ** Validate missing fragments when parsing standalone executable documents - [ Abdel-Monaam-Aouini] , [ pull/1003] **
50+
51+ When validating standalone executable documents, the use of undefined fragment
52+ definitions will return a validation error. Previously, executable documents
53+ like the following would pass validation without errors, despite
54+ ` CompanyFragment ` being undefined.
55+
56+ ``` graphql
57+ query {
58+ company {
59+ user {
60+ ... UserFragment
61+ }
62+ ... CompanyFragment
63+ }
64+ }
65+ fragment UserFragment on User {
66+ id
67+ name
68+ }
69+ ```
70+
71+ ## Maintenance
72+
73+ - ** Add benchmark for parsing and validation when a type has many extensions [ tninesling] , [ pull/1011] **
74+
75+ Introduces a new benchmark for query parsing and validation when a type has
76+ many extensions. We made an update in
` [email protected] ` to expose
77+ ` .iter_origins() ` for AST nodes, and we reimplemented ` .extensions() ` in
78+ terms of ` .iter_origins() ` . We were concerned that this may have caused a
79+ performance regression in parsing, but running this new benchmark against
80+ ` main ` with ` 1.28.0 ` as the base indicates no change in performance.
81+
82+ [ Abdel-Monaam-Aouini ] : https://github.com/Abdel-Monaam-Aouini
83+ [ tninesling ] : https://github.com/tninesling
84+ [ input coercion ] : https://spec.graphql.org/September2025/#sec-Float.Input-Coercion
85+ [ pull/1000 ] : https://github.com/apollographql/apollo-rs/pull/1000
86+ [ pull/1003 ] : https://github.com/apollographql/apollo-rs/pull/1003
87+ [ pull/1011 ] : https://github.com/apollographql/apollo-rs/pull/1011
88+
89+ # [ 1.30.0] ( https://crates.io/crates/apollo-compiler/1.30.0 ) - 2025-08-27
2190
2291## Features
2392
@@ -70,28 +139,6 @@ This project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.htm
70139 .expect(" schema parsed successfully" );
71140 ` ` `
72141
73- - ** Allow coercing Int variables to Float - [tninesling], [pull/1011]**
74-
75- The GraphQL spec allows coercing Int values to Float in input positions (see
76- [input coercion]). There are a couple things to note about this.
77-
78- - Strings are not allowed to be coerced in this position, even if they are
79- numeric.
80- - Ints can only be converted to Float when they are " representable by finite
81- IEEE 754" floating point numbers.
82-
83- Since an IEEE 754 floating point double (f64) has 53 bits of precision, it can
84- safely represent up to the value 2^53 - 1 as a finite value. Beyond that, the
85- round trip from integer to float and back will lose information. This is
86- represented with a new ` MAX_SAFE_INT` constant which is often included in
87- other languages like JavaScript' s `Number.MAX_SAFE_INT`. When, we encounter an
88- Int variable in a Float position, we ensure that its value is finitely
89- representable.
90-
91- There is some nuance in that the spec does not say all floats have to be
92- within this range. So, this implementation allows explicitly passed floats
93- which are greater than that bound, only applying the integer conversion limit
94- when coercing a value.
95142
96143# # Fixes
97144
@@ -130,14 +177,11 @@ This project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.htm
130177
131178[dariuszkuc]: https://github.com/dariuszkuc
132179[duckki]: https://github.com/duckki
133- [tninesling]: https://github.com/tninesling
134- [input coercion]: https://spec.graphql.org/September2025/# sec-Float.Input-Coercion
135180[pull/994]: https://github.com/apollographql/apollo-rs/pull/994
136181[pull/993]: https://github.com/apollographql/apollo-rs/pull/993
137182[pull/990]: https://github.com/apollographql/apollo-rs/pull/990
138183[pull/989]: https://github.com/apollographql/apollo-rs/pull/989
139184[pull/987]: https://github.com/apollographql/apollo-rs/pull/987
140- [pull/1011]: https://github.com/apollographql/apollo-rs/pull/1011
141185
142186
143187# [1.29.0](https://crates.io/crates/apollo-compiler/1.29.0) - 2025-08-08
0 commit comments