Releases: apollographql/apollo-rs
[email protected]
Features
-
Add
ignore_builtin_redefinitions
method toSchemaBuilder
- dariuszkuc, pull/990 and pull/994This allows input SDL to contain built-in types.
The following SDL will result in a validation error, for example:
let schema = r#" type __Directive { name: String! description: String! isRepeatable: String! args: __InputValue locations: String! } type Query { foo: String } "#; let valid = Schema::parse_and_validate(schema, "schema.graphql")?
Error:
Error: the type `__Directive` is defined multiple times in the schema ╭─[ built_in.graphql:87:6 ] │ 87 │ type __Directive { │ ─────┬───── │ ╰─────── previous definition of `__Directive` here │ ├─[ schema.graphql:2:6 ] │ 2 │ type __Directive { │ ─────┬───── │ ╰─────── `__Directive` redefined here │ │ Help: remove or rename one of the definitions, or use `extend` ────╯
However, when using the
ignore_builtin_redefinitions
method, this successfully passes validation given the same schema:let builder = SchemaBuilder::new().ignore_builtin_redefinitions(); let _ = builder .parse(schema, "schema.graphql") .build() .expect("schema parsed successfully");
Fixes
-
Fix handling of orphan root type extensions - dariuszkuc, pull/993
SchemaBuilder
'sadopt_orphan_extensions
method allows users to define type
extensions without an existing type definition. But before this fix, orphan
RootTypeOperation
extensions would result in an invalid schema despite
adopt_orphan_extensions
being enabled. Using this method now generates a
valid schema for all lone extensions. -
Fix directive definition validation with nested types arguments - dariuszkuc, pull/987
Directive definition with nested argument types resulted in a stack overflow, for example
directive @custom(input: NestedInput) on OBJECT | INTERFACE input NestedInput { name: String nested: NestedInput } type Query @custom(input: {name: "hello", nested: {name: "hello"}}) { foo: String } query myQuery { foo }
This fix ensures the above example is possible and does not result in a validation error.
-
Fix
iter_origins()
to be a pub method - duckki, pull/989Previously added
::iter_origins()
methods on Schema and Type Definitions was not madepub
.
[email protected]
[email protected]
Features
-
Reject
@skip
/@include
on subscription root fields - dariuszkuc SimonSapin and goto-bus-stop, pull/963This implements a GraphQL spec RFC, rejecting
subscriptions in validation that can be invalid during execution. -
New shorthand methods for mutable directive argument access - tninesling, pull/967
Introduces new methods:
DirectiveList::get_all_mut
DirectiveList::argument_by_name_mut
DirectiveList::specified_argument_by_name_mut
Fixes
-
Update
ariadne
trait implementations - lrlna, pull/960[email protected]
release changed their type signature forariadne::Cache
trait, which required an
update toapollo-compiler
's implementation ofariadne::Cache<FileId>
.This release also had a slight change to path formatting, so if you had any snapshots in your
tests, you can expect a change from this:Error: `typeFragment1` contains too much nesting ╭─[overflow.graphql:11:11]
to this (notice the extra white space around the file path):
Error: `typeFragment1` contains too much nesting ╭─[ overflow.graphql:11:11 ]
-
Harden stack overflow protection - goto-bus-stop, pull/966
Closes a theoretical gap in stack overflow protection when processing long fragment chains, and
significantly improves validation performance on documents with thousands of fragment definitions.
[email protected]
[email protected]
- Update apollo-parser dependency to
0.8.0
- Update apollo-compiler dependency to
=1.0.0-beta.20
[email protected]
BREAKING
This release removes the Error::new
constructor. We recommend not creating instances of
apollo_parser::Error
yourself at all.
Fixes
- add missing location information for lexer errors - PhoebeSzmucer, pull/886, issue/731
Unexpected characters now raise an error pointing to the character itself, instead of the start of the input document.
[email protected]
Fixes
- Fix variable validation in operation directives - goto-bus-stop in pull/888.
query ($var: Int) @directive(arg: $var)
is now accepted - it used to raise an unused variable error for$var
.
Maintenance
- Make unused variable validation more efficient - goto-bus-stop in pull/887.
[email protected]
1.0.0-beta.19 - 2024-07-19
BREAKING
-
Remove deprecated
Name
reexports - SimonSapin in pull/877.
apollo_compiler::Name
should now be imported instead of:apollo_compiler::ast::Name
apollo_compiler::schema::Name
apollo_compiler::executable::Name
These other paths emitted deprecation warnings in 1.0.0-beta.18 and are now removed.
-
Move operations of an
ExecutableDocument
into a new struct - SimonSapin in pull/879.doc.anonymous_operation
→doc.operations.anonymous
doc.named_operations
→doc.operations.named
doc.get_operation()
→doc.operations.get()
doc.get_operation_mut()
→doc.operations.get_mut()
doc.insert_operation()
→doc.operations.insert()
doc.all_operations()
→doc.operations.iter()
This change makesget_mut()
borrow onlydoc.operations
instead of the entire document, making it possible to also mutatedoc.fragments
during that mutable borrow.
-
Move or rename some import paths - SimonSapin in pull/885. Moved from the crate root to the new(ly public)
apollo_compiler::parser
module:Parser
SourceFile
SourceMap
FileId
Moved to the
parser
module and renamed:NodeLocation
→SourceSpan
GraphQLLocation
→LineColumn
-
Return ranges of line/column locations - dylan-apollo in pull/861.
SourceSpan
contains a file ID and a range of UTF-8 offsets within that file. Various APIs can convert offsets to line and column numbers, but often only considered the start offset. They are now changed to consider the range of start and end positions.Added, returning
Option<Range<LineColumn>>
:SourceSpan::line_column_range
Diagnostic::line_column_range
Name::line_column_range
Removed:
LineColumn::from_node
Diagnostic::get_line_column
SourceFile::get_line_column
-
Use a fast hasher - o0Ignition0o in pull/881. Configured all hash-based collections used in apollo-compiler to use
ahash
, which is faster than the default standard library hasher.apollo_compiler::collections
provides type aliases for collections configured with the same hasher as collections in various parts of the public API.
Features
- Add a few helper methods - SimonSapin in pull/885:
executable::OperationMap::from_one
schema::SchemaDefinition::iter_root_operations()
schema::ExtendedType::is_leaf
Fixes
- Fix potential hash collision bug in validation - goto-bus-stop in pull/878
- Fix validation for undefined variables nested in values - goto-bus-stop in pull/885
[email protected]
1.0.0-beta.18 - 2024-06-27
BREAKING
-
Name
representation change - SimonSapin in pull/868. The memory representation of GraphQL names is changed to useArc<str>
or&'static str
internally, and provide corresponding cheap conversions. This may also help enable string interning in a future compiler version.Name
should now be imported from the crate root. The previous paths (apollo_compiler::ast::Name
,apollo_compiler::executable::Name
, andapollo_compiler::schema::Name
) now emit a deprecation warning and will be removed in a later version.NodeStr
has been removed, with its functionality folded intoName
ast::Value::String
now contains a plainString
instead ofNodeStr
.Value
itself is in aNode<_>
that contains the same source span asNodeStr
did.- Descriptions are now represented as
Option<Node<str>>
instead ofOption<NodeStr>
.
-
Feature REMOVED:
Hash
cache inNode<T>
- SimonSapin in pull/872.Node<T>
is a reference-counted smart pointer that provides thread-safe shared ownership for atT
value together with an optional source location. In previous beta version of apollo-compiler 1.0 it contained a cache in itsHash
implementation: the hash of theT
value would be computed once and stored, thenHash for Node<T>
would hash that hash code. That functionality is now removed,Hash for Node<T>
simply forwards toHash for T
. This reduces eachNode
heap allocation by 8 bytes, and reduces code complexity.Now that apollo-compiler does not use Salsa anymore,
Hash
is much less central than it used to be. Many types stored inNode<_>
don’t implementHash
at all (because they contain anIndexMap
which doesn’t either).Programs that relied on this cache will still compile. We still consider this change breaking as they’ll need to build their own cache to maintain performance characteristics.
Fixes
- Fix validation error message for missing subselections - goto-bus-stop in pull/865. It now reports the correct coordinate for the missing subselection.
[email protected]
0.7.0 - 2024-06-20
Features
- Improve field variability in Selection Set generation - geal, pull/866.
This changes the field generation algorithm in apollo-smith to allow more
variety, because the previous implementation was the previous implementation
was too biased towards the first field specified in a type. This also adds an
example to generate a random query from a schema.