schema @link(url: "https://specs.apollo.dev/link/v1.0") @link(url: "https://specs.apollo.dev/join/v0.5", for: EXECUTION) @link(url: "https://specs.apollo.dev/context/v0.1", for: SECURITY) { query: Query } directive @context(name: String!) repeatable on INTERFACE | OBJECT | UNION directive @context__fromContext(field: String) on ARGUMENT_DEFINITION directive @join__directive( graphs: [join__Graph!] name: String! args: join__DirectiveArguments ) repeatable on SCHEMA | OBJECT | INTERFACE | FIELD_DEFINITION directive @join__enumValue(graph: join__Graph!) repeatable on ENUM_VALUE directive @join__field( graph: join__Graph requires: join__FieldSet provides: join__FieldSet type: String external: Boolean override: String usedOverridden: Boolean overrideLabel: String contextArguments: [join__ContextArgument!] ) repeatable on FIELD_DEFINITION | INPUT_FIELD_DEFINITION directive @join__graph(name: String!, url: String!) on ENUM_VALUE directive @join__implements( graph: join__Graph! interface: String! ) repeatable on OBJECT | INTERFACE directive @join__type( graph: join__Graph! key: join__FieldSet extension: Boolean! = false resolvable: Boolean! = true isInterfaceObject: Boolean! = false ) repeatable on OBJECT | INTERFACE | UNION | ENUM | INPUT_OBJECT | SCALAR directive @join__unionMember( graph: join__Graph! member: String! ) repeatable on UNION directive @link( url: String as: String for: link__Purpose import: [link__Import] ) repeatable on SCHEMA scalar context__context input join__ContextArgument { name: String! type: String! context: String! selection: join__FieldValue! } scalar join__DirectiveArguments scalar join__FieldSet scalar join__FieldValue enum join__Graph { SUBGRAPH1 @join__graph(name: "Subgraph1", url: "https://Subgraph1") SUBGRAPH2 @join__graph(name: "Subgraph2", url: "https://Subgraph2") } scalar link__Import enum link__Purpose { """ `SECURITY` features provide metadata necessary to securely resolve fields. """ SECURITY """ `EXECUTION` features provide metadata necessary for operation execution. """ EXECUTION } type Query @join__type(graph: SUBGRAPH1) @join__type(graph: SUBGRAPH2) { t: T! @join__field(graph: SUBGRAPH1) tList: [T]! @join__field(graph: SUBGRAPH1) a: Int! @join__field(graph: SUBGRAPH2) k: K! @join__field(graph: SUBGRAPH1) } union K @join__type(graph: SUBGRAPH1) @join__unionMember(graph: SUBGRAPH1, member: "A") @join__unionMember(graph: SUBGRAPH1, member: "B") @context(name: "Subgraph1__context2") = A | B type A @join__type(graph: SUBGRAPH1, key: "id") { id: ID! v: V! prop: String! } type B @join__type(graph: SUBGRAPH1, key: "id") { id: ID! v: V! prop: String! } type T @join__type(graph: SUBGRAPH1, key: "id") @context(name: "Subgraph1__context") { id: ID! u: U! uList: [U]! prop: String! } type U @join__type(graph: SUBGRAPH1, key: "id") @join__type(graph: SUBGRAPH2, key: "id") { id: ID! b: String! @join__field(graph: SUBGRAPH2) field: Int! @join__field( graph: SUBGRAPH1 contextArguments: [ { context: "Subgraph1__context" name: "a" type: "String" selection: "{ prop }" } ] ) } type V @join__type(graph: SUBGRAPH1, key: "id") @join__type(graph: SUBGRAPH2, key: "id") { id: ID! b: String! @join__field(graph: SUBGRAPH2) field: Int! @join__field( graph: SUBGRAPH1 contextArguments: [ { context: "Subgraph1__context2" name: "a" type: "String" selection: "... on A { prop } ... on B { prop }" } ] ) }