Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
22 changes: 11 additions & 11 deletions Cargo.lock
Original file line number Diff line number Diff line change
Expand Up @@ -198,9 +198,9 @@ dependencies = [

[[package]]
name = "apollo-compiler"
version = "2.0.0-beta.0"
version = "2.0.0-beta.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "f5f6d0efa38a950a9429c90ccb422a68f4a382e5b67abd5ff9a6b8885d787c84"
checksum = "031ad1ba5d073dc231b63bfac51cea2f180f4280c41b766f4d6db0f57474841f"
dependencies = [
"ahash",
"apollo-parser 0.9.0-beta.0",
Expand Down Expand Up @@ -298,7 +298,7 @@ name = "apollo-federation"
version = "2.17.0"
dependencies = [
"ahash",
"apollo-compiler 2.0.0-beta.0",
"apollo-compiler 2.0.0-beta.1",
"apollo-federation",
"apollo-parser 0.9.0-beta.0",
"clap",
Expand Down Expand Up @@ -350,7 +350,7 @@ name = "apollo-federation-cli"
version = "0.1.0"
dependencies = [
"anyhow",
"apollo-compiler 2.0.0-beta.0",
"apollo-compiler 2.0.0-beta.1",
"apollo-federation",
"clap",
"insta",
Expand Down Expand Up @@ -481,7 +481,7 @@ dependencies = [
"addr2line 0.27.1",
"ahash",
"anyhow",
"apollo-compiler 2.0.0-beta.0",
"apollo-compiler 2.0.0-beta.1",
"apollo-environment-detector",
"apollo-errors",
"apollo-federation",
Expand Down Expand Up @@ -693,11 +693,11 @@ dependencies = [

[[package]]
name = "apollo-smith"
version = "0.17.0-beta.0"
version = "0.17.0-beta.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "c75e0aa74f34bd906db5b991ef9e4d8ea5c85011f333affd2ca11684366395b7"
checksum = "431d7e72bc8589eccda45efffff858332e5cde5f19d104662f4cbdbaa1246532"
dependencies = [
"apollo-compiler 2.0.0-beta.0",
"apollo-compiler 2.0.0-beta.1",
"apollo-parser 0.9.0-beta.0",
"arbitrary",
"indexmap 2.14.0",
Expand Down Expand Up @@ -7231,11 +7231,11 @@ dependencies = [

[[package]]
name = "shape"
version = "0.9.0-preview.0"
version = "0.9.0-preview.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "0ac234112195c859e0acdd79d080ff8359e84d91025a0ecb802a548295f16168"
checksum = "a6c933a5d2297ebd7891f4b84f26c62283380bd641814c34812b7f4385c07d32"
dependencies = [
"apollo-compiler 2.0.0-beta.0",
"apollo-compiler 2.0.0-beta.1",
"indexmap 2.14.0",
"serde_json",
"serde_json_bytes",
Expand Down
4 changes: 2 additions & 2 deletions Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -48,9 +48,9 @@ debug = 1
# https://doc.rust-lang.org/cargo/reference/workspaces.html#the-dependencies-table
[workspace.dependencies]
ahash = "0.8.11"
apollo-compiler = "=2.0.0-beta.0"
apollo-compiler = "=2.0.0-beta.1"
apollo-parser = "=0.9.0-beta.0"
apollo-smith = "=0.17.0-beta.0"
apollo-smith = "=0.17.0-beta.1"
async-trait = "0.1.77"
encoding_rs = "0.8"
heck = "0.5.0"
Expand Down
2 changes: 1 addition & 1 deletion apollo-federation/Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -59,7 +59,7 @@ url = "2"
either = "1.13.0"
tracing = "0.1.40"
ron = { version = "0.12.0", optional = true }
shape = "=0.9.0-preview.0"
shape = "=0.9.0-preview.1"
form_urlencoded = "1.2.1"
parking_lot = "0.12.4"
mime = "0.3.17"
Expand Down
7 changes: 4 additions & 3 deletions apollo-federation/src/api_schema.rs
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
//! Implements API schema generation.
use apollo_compiler::Node;
use apollo_compiler::collections::IndexSet;
use apollo_compiler::name;
use apollo_compiler::schema::DirectiveDefinition;
use apollo_compiler::schema::DirectiveLocation;
Expand Down Expand Up @@ -176,10 +177,10 @@ fn defer_definition() -> Node<DirectiveDefinition> {
}),
],
repeatable: false,
locations: vec![
locations: IndexSet::from_iter([
DirectiveLocation::FragmentSpread,
DirectiveLocation::InlineFragment,
],
]),
})
}

Expand Down Expand Up @@ -211,6 +212,6 @@ fn stream_definition() -> Node<DirectiveDefinition> {
}),
],
repeatable: false,
locations: vec![DirectiveLocation::Field],
locations: IndexSet::from_iter([DirectiveLocation::Field]),
})
}
79 changes: 20 additions & 59 deletions apollo-federation/src/compat.rs
Original file line number Diff line number Diff line change
Expand Up @@ -64,7 +64,7 @@ fn standardize_deprecated(directive: &mut Directive) {
}
}

/// Retain only semantic directives in a directive list from the high-level schema representation.
/// Retain only semantic directives in a directive list.
fn retain_semantic_directives(directives: &mut schema::DirectiveList) {
directives
.0
Expand All @@ -75,17 +75,6 @@ fn retain_semantic_directives(directives: &mut schema::DirectiveList) {
}
}

/// Retain only semantic directives in a directive list from the AST-level schema representation.
fn retain_semantic_directives_ast(directives: &mut apollo_compiler::ast::DirectiveList) {
directives
.0
.retain(|directive| is_semantic_directive_application(directive));

for directive in directives {
standardize_deprecated(directive.make_mut());
}
}

/// Remove non-semantic directive applications from the schema representation.
/// This only keeps directive applications that are observable in introspection.
pub(crate) fn remove_non_semantic_directives(schema: &mut Schema) {
Expand All @@ -99,10 +88,10 @@ pub(crate) fn remove_non_semantic_directives(schema: &mut Schema) {
retain_semantic_directives(&mut object.directives);
for field in object.fields.values_mut() {
let field = field.make_mut();
retain_semantic_directives_ast(&mut field.directives);
retain_semantic_directives(&mut field.directives);
for arg in &mut field.arguments {
let arg = arg.make_mut();
retain_semantic_directives_ast(&mut arg.directives);
retain_semantic_directives(&mut arg.directives);
}
}
}
Expand All @@ -111,10 +100,10 @@ pub(crate) fn remove_non_semantic_directives(schema: &mut Schema) {
retain_semantic_directives(&mut interface.directives);
for field in interface.fields.values_mut() {
let field = field.make_mut();
retain_semantic_directives_ast(&mut field.directives);
retain_semantic_directives(&mut field.directives);
for arg in &mut field.arguments {
let arg = arg.make_mut();
retain_semantic_directives_ast(&mut arg.directives);
retain_semantic_directives(&mut arg.directives);
}
}
}
Expand All @@ -123,7 +112,7 @@ pub(crate) fn remove_non_semantic_directives(schema: &mut Schema) {
retain_semantic_directives(&mut input_object.directives);
for field in input_object.fields.values_mut() {
let field = field.make_mut();
retain_semantic_directives_ast(&mut field.directives);
retain_semantic_directives(&mut field.directives);
}
}
ExtendedType::Union(union_) => {
Expand All @@ -139,7 +128,7 @@ pub(crate) fn remove_non_semantic_directives(schema: &mut Schema) {
retain_semantic_directives(&mut enum_.directives);
for value in enum_.values.values_mut() {
let value = value.make_mut();
retain_semantic_directives_ast(&mut value.directives);
retain_semantic_directives(&mut value.directives);
}
}
}
Expand All @@ -149,7 +138,7 @@ pub(crate) fn remove_non_semantic_directives(schema: &mut Schema) {
let directive = directive.make_mut();
for arg in &mut directive.arguments {
let arg = arg.make_mut();
retain_semantic_directives_ast(&mut arg.directives);
retain_semantic_directives(&mut arg.directives);
}
}
}
Expand Down Expand Up @@ -427,7 +416,7 @@ pub fn coerce_and_validate_schema_values(schema: &mut Schema) -> Result<(), Fede
match ty {
ExtendedType::Object(object) => {
let object = object.make_mut();
coerce_directive_application_values_schema(
coerce_directive_application_values_in_schema(
&directive_definitions,
&types,
&mut object.directives,
Expand All @@ -446,7 +435,7 @@ pub fn coerce_and_validate_schema_values(schema: &mut Schema) -> Result<(), Fede
),
&mut errors,
);
coerce_directive_application_values_ast(
coerce_directive_application_values_in_schema(
&directive_definitions,
&types,
&mut field.directives,
Expand All @@ -460,7 +449,7 @@ pub fn coerce_and_validate_schema_values(schema: &mut Schema) -> Result<(), Fede
}
ExtendedType::Interface(interface) => {
let interface = interface.make_mut();
coerce_directive_application_values_schema(
coerce_directive_application_values_in_schema(
&directive_definitions,
&types,
&mut interface.directives,
Expand All @@ -479,7 +468,7 @@ pub fn coerce_and_validate_schema_values(schema: &mut Schema) -> Result<(), Fede
),
&mut errors,
);
coerce_directive_application_values_ast(
coerce_directive_application_values_in_schema(
&directive_definitions,
&types,
&mut field.directives,
Expand All @@ -493,7 +482,7 @@ pub fn coerce_and_validate_schema_values(schema: &mut Schema) -> Result<(), Fede
}
ExtendedType::InputObject(input_object) => {
let input_object = input_object.make_mut();
coerce_directive_application_values_schema(
coerce_directive_application_values_in_schema(
&directive_definitions,
&types,
&mut input_object.directives,
Expand All @@ -505,7 +494,7 @@ pub fn coerce_and_validate_schema_values(schema: &mut Schema) -> Result<(), Fede
field_name: field.name.clone(),
}
.to_string();
coerce_directive_application_values_ast(
coerce_directive_application_values_in_schema(
&directive_definitions,
&types,
&mut field.directives,
Expand Down Expand Up @@ -536,30 +525,30 @@ pub fn coerce_and_validate_schema_values(schema: &mut Schema) -> Result<(), Fede
}
ExtendedType::Union(union_) => {
let union_ = union_.make_mut();
coerce_directive_application_values_schema(
coerce_directive_application_values_in_schema(
&directive_definitions,
&types,
&mut union_.directives,
);
}
ExtendedType::Scalar(scalar) => {
let scalar = scalar.make_mut();
coerce_directive_application_values_schema(
coerce_directive_application_values_in_schema(
&directive_definitions,
&types,
&mut scalar.directives,
);
}
ExtendedType::Enum(enum_) => {
let enum_ = enum_.make_mut();
coerce_directive_application_values_schema(
coerce_directive_application_values_in_schema(
&directive_definitions,
&types,
&mut enum_.directives,
);
for value in enum_.values.values_mut() {
let value = value.make_mut();
coerce_directive_application_values_ast(
coerce_directive_application_values_in_schema(
&directive_definitions,
&types,
&mut value.directives,
Expand Down Expand Up @@ -622,7 +611,7 @@ fn coerce_directive_application_values(
}
}

fn coerce_directive_application_values_schema(
fn coerce_directive_application_values_in_schema(
directive_definitions: &IndexMap<Name, Node<DirectiveDefinition>>,
type_definitions: &IndexMap<Name, ExtendedType>,
directives: &mut schema::DirectiveList,
Expand Down Expand Up @@ -650,34 +639,6 @@ fn coerce_directive_application_values_schema(
}
}

fn coerce_directive_application_values_ast(
directive_definitions: &IndexMap<Name, Node<DirectiveDefinition>>,
type_definitions: &IndexMap<Name, ExtendedType>,
directives: &mut apollo_compiler::ast::DirectiveList,
) {
for directive in directives {
let Some(definition) = directive_definitions.get(&directive.name) else {
continue;
};
let directive = directive.make_mut();
for arg in &mut directive.arguments {
let Some(definition) = definition.argument_by_name(&arg.name) else {
continue;
};
let arg = arg.make_mut();
// Note that GraphQL spec validation will catch invalidities in directive application
// argument values but with nicer error messaging, so if coerce_value() fails validation
// here we just ignore it.
_ = coerce_value(
type_definitions,
&mut arg.value,
&definition.ty,
&Default::default(),
);
}
}
}

/// Coerce the values of directives applied to field arguments (the `ARGUMENT_DEFINITION` location).
/// `coerce_schema_values` already handles directives on types, fields, input fields and enum
/// values; arguments are handled here so e.g. an enum-typed directive argument given as a string
Expand All @@ -690,7 +651,7 @@ fn coerce_argument_directive_application_values(
) {
for arg in arguments {
let arg = arg.make_mut();
coerce_directive_application_values_ast(
coerce_directive_application_values_in_schema(
directive_definitions,
type_definitions,
&mut arg.directives,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -287,7 +287,7 @@ fn build_witness_field(
field_definition_position: &FieldDefinitionPosition,
) -> Result<executable::Field, FederationError> {
let field_def = field_definition_position.get(schema.schema())?;
let result = executable::Field::new(field_def.name.clone(), field_def.node.clone());
let result = executable::Field::new(field_def.name.clone(), field_def.clone());
let args = field_def
.arguments
.iter()
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -52,7 +52,7 @@ impl ValidationContext {
}
CompositeTypeDefinitionPosition::Union(union_type) => {
let union_def = union_type.get(supergraph_schema.schema())?;
type_names.extend(union_def.members.iter().map(|m| m.name.clone()));
type_names.extend(union_def.members.iter().map(|m| Name::clone(m)));
}
_ => {}
};
Expand Down
2 changes: 1 addition & 1 deletion apollo-federation/src/connectors/expand/carryover.rs
Original file line number Diff line number Diff line change
Expand Up @@ -557,7 +557,7 @@ impl CopyDirective for SchemaDefinitionPosition {
subgraph_name_replacements,
connect_directive_names,
) {
self.insert_directive(to, updated_directive.into())
self.insert_directive(to, updated_directive)
} else {
Ok(())
}
Expand Down
Loading