Skip to content

Releases: apollographql/apollo-rs

[email protected]

27 Aug 15:01
e651a95
Compare
Choose a tag to compare

Features

  • Add ignore_builtin_redefinitions method to SchemaBuilder- dariuszkuc, pull/990 and pull/994

    This 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's adopt_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/989

    Previously added ::iter_origins() methods on Schema and Type Definitions was not made pub.

[email protected]

27 Aug 15:02
932c794
Compare
Choose a tag to compare

Features

Fixes

  • Fix serialization in non-standard orphan extensions mode - duckki, pull/984

[email protected]

24 Apr 08:53
b734550
Compare
Choose a tag to compare

Features

  • Reject @skip/@include on subscription root fields - dariuszkuc SimonSapin and goto-bus-stop, pull/963

    This 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 for ariadne::Cache trait, which required an
    update to apollo-compiler's implementation of ariadne::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]

20 Aug 14:28
55002fd
Compare
Choose a tag to compare

0.8.1 - 2024-08-20

Features

This makes it easier for pretty-printers, linters and the like to work with the
parser API.

[email protected]

31 Jul 10:33
b510f48
Compare
Choose a tag to compare
  • Update apollo-parser dependency to 0.8.0
  • Update apollo-compiler dependency to =1.0.0-beta.20

[email protected]

31 Jul 08:45
b37fec8
Compare
Choose a tag to compare

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]

31 Jul 10:34
3df1e62
Compare
Choose a tag to compare

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

[email protected]

19 Jul 18:15
13f4aa1
Compare
Choose a tag to compare

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_operationdoc.operations.anonymous
    • doc.named_operationsdoc.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 makes get_mut() borrow only doc.operations instead of the entire document, making it possible to also mutate doc.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:

    • NodeLocationSourceSpan
    • GraphQLLocationLineColumn
  • 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

[email protected]

27 Jun 14:23
356b702
Compare
Choose a tag to compare

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 use Arc<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, and apollo_compiler::schema::Name) now emit a deprecation warning and will be removed in a later version.
    • NodeStr has been removed, with its functionality folded into Name
    • ast::Value::String now contains a plain String instead of NodeStr. Value itself is in a Node<_> that contains the same source span as NodeStr did.
    • Descriptions are now represented as Option<Node<str>> instead of Option<NodeStr>.
  • Feature REMOVED: Hash cache in Node<T> - SimonSapin in pull/872. Node<T> is a reference-counted smart pointer that provides thread-safe shared ownership for at T value together with an optional source location. In previous beta version of apollo-compiler 1.0 it contained a cache in its Hash implementation: the hash of the T value would be computed once and stored, then Hash for Node<T> would hash that hash code. That functionality is now removed, Hash for Node<T> simply forwards to Hash for T. This reduces each Node 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 in Node<_> don’t implement Hash at all (because they contain an IndexMap 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]

20 Jun 11:28
6a4a786
Compare
Choose a tag to compare

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.