<NME> testschema.graphql
<BEF> # Copyright (c) Meta Platforms, Inc. and affiliates. All Rights Reserved.

schema {
  query: Query
  mutation: Mutation
  subscription: Subscription
}

directive @live_query(polling_interval: Int, config_id: String) on QUERY

directive @customDirective(level: Int!) on FIELD | FRAGMENT_SPREAD

directive @fixme_fat_interface on FIELD

directive @configurable on VARIABLE_DEFINITION

directive @_auto_hoisted on VARIABLE_DEFINITION

directive @fb_actor_change on FIELD

directive @defer(
  label: String!
  if: Boolean = true
) on FRAGMENT_SPREAD | INLINE_FRAGMENT

directive @stream(
  label: String!
  initial_count: Int!
  if: Boolean = true
  use_customized_batch: Boolean = false
) on FIELD

directive @fetchable(field_name: String!) on OBJECT

type Query {
  checkinSearchQuery(query: CheckinSearchInput): CheckinSearchResult
  defaultSettings: Settings
  route(waypoints: [WayPoint!]!): Route
  items(filter: ItemFilterInput): ItemFilterResult
  maybeNodeInterface: MaybeNodeInterface
  maybeNode: MaybeNode
  neverNode: NeverNode
  named: Named
  me: User
  node(id: ID): Node
  node_id_required(id: ID!): Node
  nodes(ids: [ID!]): [Node]
  settings(environment: Environment): Settings
  story: Story
  task(number: Int): Task
  username(name: String!): Actor
  usernames(names: [String!]!): [Actor]
  viewer: Viewer
  _mutation: Mutation
  fetch__User(id: ID!): User
  fetch__NonNodeStory(input_fetch_id: ID!): NonNodeStory
  nonNodeStory(id: ID!): NonNodeStory
  wrongViewer: WithWrongViewer
}

interface MaybeNodeInterface {
  name: String
}

scalar JSON

directive @react_flight(
  components: [String!]!
) on QUERY | MUTATION | SUBSCRIPTION

scalar ReactFlightComponent

scalar ReactFlightProps

directive @relay_client_component_server(module_id: String!) on FRAGMENT_SPREAD

union MaybeNode = Story | FakeNode | NonNode

type FakeNode {
  id: ID!
}

type NonNode {
  id: String
  name: String
}

type NonNodeNoID implements MaybeNodeInterface {
  name: String
}

union NeverNode = FakeNode | NonNode

interface AllConcreteTypesImplementNode {
  count: Int
}

type Task {
  title: String
}

input WayPoint {
  lat: String
  lon: String
}

type Route {
  steps: [RouteStep]
}

type RouteStep {
  lat: String
  lon: String
  note: String
}

type Mutation {
  actorSubscribe(input: ActorSubscribeInput): ActorSubscribeResponsePayload
  actorNameChange(input: ActorNameChangeInput): ActorNameChangePayload
  applicationRequestDeleteAll(
    input: ApplicationRequestDeleteAllInput
  ): ApplicationRequestDeleteAllResponsePayload
  commentCreate(input: CommentCreateInput): CommentCreateResponsePayload
  commentDelete(input: CommentDeleteInput): CommentDeleteResponsePayload
  commentsDelete(input: CommentsDeleteInput): CommentsDeleteResponsePayload
  feedbackLike(input: FeedbackLikeInput): FeedbackLikeResponsePayload
  feedbackLikeStrict(
    input: FeedbackLikeInputStrict!
  ): FeedbackLikeResponsePayload
  feedbackLikeSubscribe(input: FeedbackLikeInput): FeedbackLikeResponsePayload
  nodeSavedState(input: NodeSaveStateInput): NodeSavedStateResponsePayload
  unfriend(input: UnfriendInput): UnfriendResponsePayload
  viewerNotificationsUpdateAllSeenState(
    input: UpdateAllSeenStateInput
  ): ViewerNotificationsUpdateAllSeenStateResponsePayload
  setLocation(input: LocationInput): setLocationResponsePayload
  setName(name: String!): User
}

type Subscription {
  feedbackLikeSubscribe(input: FeedbackLikeInput): FeedbackLikeResponsePayload
  commentCreateSubscribe(
    input: CommentCreateSubscriptionInput
  ): CommentCreateResponsePayload
}

input ActorSubscribeInput {
  subscribeeId: ID
}

input ActorNameChangeInput {
  newName: String
}

input ApplicationRequestDeleteAllInput {
  deletedRequestIds: [ID]
}

input CommentCreateInput {
  client_mutation_id: String!
  feedbackId: ID
  feedback: CommentfeedbackFeedback
}

input CommentsCreateInput {
  feedbackId: ID
  feedback: [CommentfeedbackFeedback]
}

input CommentfeedbackFeedback {
  comment: FeedbackcommentComment
}

input FeedbackcommentComment {
  feedback: CommentfeedbackFeedback
}

input CommentCreateSubscriptionInput {
  feedbackId: ID
  text: String
}

input CommentDeleteInput {
  commentId: ID
}

input CommentsDeleteInput {
  commentIds: [ID]
}

input FeedbackLikeInput {
  feedbackId: ID
}

input FeedbackLikeInputStrict {
  userID: ID!
  feedbackId: ID!
  description: String
}

input NodeSaveStateInput {
  nodeId: ID
}

input UpdateAllSeenStateInput {
  storyIds: [ID]
}

input LocationInput {
  longitude: Float
  latitude: Float
}

type setLocationResponsePayload {
  viewer: Viewer
}

type ActorSubscribeResponsePayload {
  subscribee: Actor
}

type ActorNameChangePayload {
  actor: Actor
}

type ApplicationRequestDeleteAllResponsePayload {
  deletedRequestIds: [ID]
}

type CheckinSearchResult {
  query: String
}

input CheckinSearchInput {
  query: String
  inputs: [CheckinSearchInput]
}

type PlainCommentBody {
  text: Text
}

type MarkdownCommentBody {
  text: Text
}

union CommentBody = PlainCommentBody | MarkdownCommentBody

type Comment implements Node {
  actor: Actor
  actors: [Actor]
  actorCount: Int
  address: StreetAddress
  allPhones: [Phone]
  author: User
  backgroundImage: Image
  birthdate: Date
  body: Text
  canViewerComment: Boolean
  canViewerLike: Boolean
  commentBody(supported: [String!]!): CommentBody
  comments(
    after: ID
    before: ID
    first: Int
    last: Int
    orderby: String
  ): CommentsConnection
  doesViewerLike: Boolean
  emailAddresses: [String]
  feedback: Feedback
  firstName(if: Boolean, unless: Boolean): String
  friends(
    after: ID
    before: ID
    first: Int
    last: Int
    orderby: [String]
    find: String
    isViewerFriend: Boolean
    if: Boolean
    unless: Boolean
    traits: [PersonalityTraits]
  ): FriendsConnection
  hometown: Page
  id: ID!
  lastName: String
  likers(first: Int): LikersOfContentConnection
  likeSentence: Text
  message: Text
  name: String
  profilePicture(size: [Int], preset: PhotoSize): Image
  # This is added in TestSchema.js
  #
  # profilePicture2(
  #   size: [Int],
  #   preset: PhotoSize,
  #   cropPosition: CropPosition,
  #   fileExtension: FileExtension,
  #   additionalParameters: JSON
  # ): Image
  segments(first: Int): Segments
  screennames: [Screenname]
  subscribeStatus: String
  subscribers(first: Int): SubscribersConnection
  topLevelComments(first: Int): TopLevelCommentsConnection
  tracking: String
  url(relative: Boolean, site: String): String
  websites: [String]
  username: String
  viewerSavedState: String
}

type CommentCreateResponsePayload {
  comment: Comment
  feedback: Feedback
  feedbackCommentEdge: CommentsEdge
  feedbackCommentEdgeUsingInterface: CommentsEdgeInterface
  viewer: Viewer
  js: JSDependency
}

type CommentsCreateResponsePayload {
  comments: [Comment]
  feedback: [Feedback]
  feedbackCommentEdges: [CommentsEdge]
  viewer: Viewer
}

type CommentDeleteResponsePayload {
  deletedCommentId: ID
  feedback: Feedback
}

type CommentsDeleteResponsePayload {
  deletedCommentIds: [ID]
  feedback: Feedback
}

type CommentsConnection {
  count: Int
  edges: [CommentsEdge]
  pageInfo: PageInfo
}

interface CommentsEdgeInterface {
  cursor: String
  node: Comment
  source: Feedback
}

type CommentsEdge implements CommentsEdgeInterface {
  cursor: String
  node: Comment
}

type CommentBodiesConnection {
  count: Int
  edges: [CommentBodiesEdge]
  pageInfo: PageInfo
}

type CommentBodiesEdge {
  cursor: String
  node: CommentBody # union type
  source: Feedback
}

type ConfigsConnection {
  edges: [ConfigsConnectionEdge]
  pageInfo: PageInfo
}

type ConfigsConnectionEdge {
  node: Config
}

type Config {
  name: String
  isEnabled: Boolean
}

type Date {
  day: Int
  month: Int
  year: Int
}

type Feedback implements Node {
  actor: Actor
  actors: [Actor]
  actorCount: Int
  address: StreetAddress
  allPhones: [Phone]
  author: User
  backgroundImage: Image
  birthdate: Date
  body: Text
  canViewerComment: Boolean
  canViewerLike: Boolean
  comments(
    after: ID
    before: ID
    first: Int
    last: Int
    orderby: String
  ): CommentsConnection
  commentBodies(
    after: ID
    before: ID
    first: Int
    last: Int
    orderby: String
  ): CommentBodiesConnection
  doesViewerLike: Boolean
  emailAddresses: [String]
  feedback: Feedback
  firstName(if: Boolean, unless: Boolean): String
  friends(
    after: ID
    before: ID
    first: Int
    last: Int
    orderby: [String]
    find: String
    isViewerFriend: Boolean
    if: Boolean
    unless: Boolean
    traits: [PersonalityTraits]
  ): FriendsConnection
  hometown: Page
  id: ID!
  lastName: String
  likers(first: Int): LikersOfContentConnection
  likeSentence: Text
  message: Text
  name: String
  profilePicture(size: [Int], preset: PhotoSize): Image
  segments(first: Int): Segments
  screennames: [Screenname]
  subscribeStatus: String
  subscribers(first: Int): SubscribersConnection
  topLevelComments(
    orderBy: [TopLevelCommentsOrdering]
    first: Int
  ): TopLevelCommentsConnection
  tracking: String
  url(relative: Boolean, site: String): String
  websites: [String]
  username: String
  viewedBy: [Actor]
  viewerSavedState: String
}

type FeedbackLikeResponsePayload {
  feedback: Feedback
}

interface FeedUnit {
  actor: Actor
  actorCount: Int
  feedback: Feedback
  id: ID!
  message: Text
  tracking: String
}

type FriendsConnection {
  count: Int
  edges: [FriendsEdge]
  pageInfo: PageInfo
}

type FriendsEdge {
  cursor: String
  node: User
  source: User
}

type Image {
  "URI where the image can be found"
  uri: String
  """
  Width in pixels
  """
  width: Int
  """
  Height in pixels
  """
  height: Int
  test_enums: TestEnums
}

type LikersOfContentConnection {
  count: Int
  edges: [LikersEdge]
  pageInfo: PageInfo
}

type LikersEdge {
  cursor: String
  node: Actor
}

interface Named {
  name: String
}

type SimpleNamed implements Named {
  name: String
}

type NewsFeedConnection {
  edges: [NewsFeedEdge]
  pageInfo: PageInfo
}

type NewsFeedEdge {
  cursor: String
  node: FeedUnit
  sortKey: String
  showBeeper: Boolean
}

interface Node {
  actor: Actor
  actors: [Actor]
  actorCount: Int
  address: StreetAddress
  allPhones: [Phone]
  author: User
  backgroundImage: Image
  birthdate: Date
  body: Text
  canViewerComment: Boolean
  canViewerLike: Boolean
  comments(
    after: ID
    before: ID
    first: Int
    last: Int
    orderby: String
  ): CommentsConnection
  doesViewerLike: Boolean
  emailAddresses: [String]
  feedback: Feedback
  firstName(if: Boolean, unless: Boolean): String
  friends(
    after: ID
    before: ID
    first: Int
    last: Int
    orderby: [String]
    find: String
    isViewerFriend: Boolean
    if: Boolean
    unless: Boolean
    traits: [PersonalityTraits]
  ): FriendsConnection
  hometown: Page
  id: ID!
  lastName: String
  likers(first: Int): LikersOfContentConnection
  likeSentence: Text
  message: Text
  name: String
  profilePicture(size: [Int], preset: PhotoSize): Image
  segments(first: Int): Segments
  screennames: [Screenname]
  subscribeStatus: String
  subscribers(first: Int): SubscribersConnection
  topLevelComments(first: Int): TopLevelCommentsConnection
  tracking: String
  url(relative: Boolean, site: String): String
  websites: [String]
  username: String
  viewerSavedState: String
}

interface Actor {
  address: StreetAddress
  allPhones: [Phone]
  birthdate: Date
  emailAddresses: [String]
  firstName(if: Boolean, unless: Boolean): String
  friends(
    after: ID
    before: ID
    first: Int
    last: Int
    orderby: [String]
    find: String
    isViewerFriend: Boolean
    if: Boolean
    unless: Boolean
    traits: [PersonalityTraits]
  ): FriendsConnection
  hometown: Page
  id: ID!
  lastName: String
  name: String
  nameRenderer(supported: [String!]): UserNameRenderer
  nameRenderable(supported: [String!]): UserNameRenderable
  profilePicture(size: [Int], preset: PhotoSize): Image
  screennames: [Screenname]
  subscribeStatus: String
  subscribers(first: Int): SubscribersConnection
  url(relative: Boolean, site: String): String
  websites: [String]
  username: String
  actor_key: ID!
}

type NodeSavedStateResponsePayload {
  node: Node
}

type Page implements Node & Actor {
  actor: Actor
  actors: [Actor]
  actorCount: Int
  address: StreetAddress
  allPhones: [Phone]
  author: User
  backgroundImage: Image
  birthdate: Date
  body: Text
  canViewerComment: Boolean
  canViewerLike: Boolean
  comments(
    after: ID
    before: ID
    first: Int
    last: Int
    orderby: String
  ): CommentsConnection
  doesViewerLike: Boolean
  emailAddresses: [String]
  feedback: Feedback
  firstName(if: Boolean, unless: Boolean): String
  friends(
    after: ID
    before: ID
    first: Int
    last: Int
    orderby: [String]
    find: String
    isViewerFriend: Boolean
    if: Boolean
    unless: Boolean
    traits: [PersonalityTraits]
  ): FriendsConnection
  hometown: Page
  id: ID!
  lastName: String
  likers(first: Int): LikersOfContentConnection
  likeSentence: Text
  message: Text
  name: String
  nameRenderer(supported: [String!]): UserNameRenderer
  nameRenderable(supported: [String!]): UserNameRenderable
  profilePicture(size: [Int], preset: PhotoSize): Image
  segments(first: Int): Segments
  screennames: [Screenname]
  subscribeStatus: String
  subscribers(first: Int): SubscribersConnection
  topLevelComments(first: Int): TopLevelCommentsConnection
  tracking: String
  url(relative: Boolean, site: String): String
  websites: [String]
  username: String
  viewerSavedState: String
  nameWithArgs(capitalize: Boolean!): String
  nameWithDefaultArgs(capitalize: Boolean = false): String
  nameWithRequiredDefaultArgs(capitalize: Boolean! = false): String
  actor_key: ID!
}

type PageInfo {
  hasPreviousPage: Boolean
  hasNextPage: Boolean
  endCursor: String
  startCursor: String
}

type PendingPostsConnection {
  count: Int
  edges: [PendingPostsConnectionEdge]
  pageInfo: PageInfo
}

type PendingPostsConnectionEdge {
  cursor: String
  node: PendingPost
}

type PendingPost {
  text: String
}

type Phone {
  isVerified: Boolean
  phoneNumber: PhoneNumber
}

type PhoneNumber {
  displayNumber: String
  countryCode: String
}

type Screenname {
  name: String
  service: String
}

type Segments {
  edges: SegmentsEdge
}

type SegmentsEdge {
  node: String
}

type NonNodeStory implements FeedUnit @fetchable(field_name: "fetch_id") {
  actor: Actor
  actorCount: Int
  feedback: Feedback
  fetch_id: ID!
  id: ID!
  message: Text
  tracking: String
}

type PhotoStory implements FeedUnit & Node {
  # PhotoStory
  photo: Image

  # FeedUnit
  canViewerDelete: Boolean
  seenState: String

  # Node
  actor: Actor
  actors: [Actor]
  actorCount: Int
  address: StreetAddress
  allPhones: [Phone]
  author: User
  backgroundImage: Image
  birthdate: Date
  body: Text
  canViewerComment: Boolean
  canViewerLike: Boolean
  comments(
    after: ID
    before: ID
    first: Int
    last: Int
    orderby: String
  ): CommentsConnection
  doesViewerLike: Boolean
  emailAddresses: [String]
  feedback: Feedback
  firstName(if: Boolean, unless: Boolean): String
  friends(
    after: ID
    before: ID
    first: Int
    last: Int
    orderby: [String]
    find: String
    isViewerFriend: Boolean
    if: Boolean
    unless: Boolean
    traits: [PersonalityTraits]
  ): FriendsConnection
  hometown: Page
  id: ID!
  lastName: String
  likers(first: Int): LikersOfContentConnection
  likeSentence: Text
  message: Text
  name: String
  profilePicture(size: [Int], preset: PhotoSize): Image
  segments(first: Int): Segments
  screennames: [Screenname]
  subscribeStatus: String
  subscribers(first: Int): SubscribersConnection
  topLevelComments(first: Int): TopLevelCommentsConnection
  tracking: String
  url(relative: Boolean, site: String): String
  websites: [String]
  username: String
  viewerSavedState: String
}

type Story implements FeedUnit & Node & MaybeNodeInterface {
  attachments: [StoryAttachment]
  flight(component: String!, props: ReactFlightProps): ReactFlightComponent

  # FeedUnit
  canViewerDelete: Boolean
  seenState: String

  # Node
  actor: Actor
  actors: [Actor]
  actorCount: Int
  address: StreetAddress
  allPhones: [Phone]
  author: User
  backgroundImage: Image
  birthdate: Date
  body: Text
  canViewerComment: Boolean
  canViewerLike: Boolean
  comments(
    after: ID
    before: ID
    first: Int
    last: Int
    orderby: String
  ): CommentsConnection
  doesViewerLike: Boolean
  emailAddresses: [String]
  feedback: Feedback
  firstName(if: Boolean, unless: Boolean): String
  friends(
    after: ID
    before: ID
    first: Int
    last: Int
    orderby: [String]
    find: String
    isViewerFriend: Boolean
    if: Boolean
    unless: Boolean
    traits: [PersonalityTraits]
  ): FriendsConnection
  hometown: Page
  id: ID!
  lastName: String
  likers(first: Int): LikersOfContentConnection
  likeSentence: Text
  message: Text
  name: String
  profilePicture(size: [Int], preset: PhotoSize): Image
  segments(first: Int): Segments
  screennames: [Screenname]
  subscribeStatus: String
  subscribers(first: Int): SubscribersConnection
  topLevelComments(first: Int): TopLevelCommentsConnection
  tracking: String
  url(relative: Boolean, site: String): String
  websites: [String]
  username: String
  viewerSavedState: String
}

type StoryAttachment {
  cache_id: ID!
  target: Story
  styleList: [String]
}

type StreetAddress {
  city: String
  country: String
  postal_code: String
  street: String
}

type SubscribersConnection {
  count: Int
  edges: [FriendsEdge]
  pageInfo: PageInfo
}

type SubscribersEdge {
  cursor: String
  node: User
  source: User
}

type Text {
  text: String
  ranges: [String]
}

type TimezoneInfo {
  timezone: String
}

type TopLevelCommentsConnection {
  count: Int
  edges: [CommentsEdge]
  pageInfo: PageInfo
  totalCount: Int
}

input UnfriendInput {
  friendId: ID
}

type UnfriendResponsePayload {
  actor: Actor
  formerFriend: User
}

scalar JSDependency

interface HasJsField {
  js(module: String!, id: String, branch: String): JSDependency
}

type PlainUserNameRenderer implements HasJsField & UserNameRenderable {
  plaintext: String
  data: PlainUserNameData
  user: User
  js(module: String!, id: String, branch: String): JSDependency
  name: String
}

type PlainUserNameData {
  id: ID
  text: String
}

type MarkdownUserNameRenderer implements HasJsField & UserNameRenderable {
  markdown: String
  data: MarkdownUserNameData
  user: User
  js(module: String!, id: String, branch: String): JSDependency
  name: String
}

type MarkdownUserNameData {
  id: ID
  markup: String
}

type CustomNameRenderer {
  customField: String
  user: User
}

type PlainUserRenderer {
  user: User
  js(module: String!, id: String, branch: String): JSDependency
}

union UserNameRenderer =
    PlainUserNameRenderer
  | MarkdownUserNameRenderer
  | CustomNameRenderer

interface UserNameRenderable {
  name: String
}

interface ImplementsUserNameRenderable implements UserNameRenderable {
  name: String
}

type ImplementsImplementsUserNameRenderable implements ImplementsUserNameRenderable {
  name: String
}

type ImplementsImplementsUserNameRenderableAndUserNameRenderable implements ImplementsUserNameRenderable & UserNameRenderable {
  name: String
}

input ProfilePictureOptions {
  name: String
}

input ProfilePictureOptions {
  newName: String
}
  canViewerLike: Boolean
  checkins(environments: [Environment!]!): CheckinSearchResult
  comments(
    after: ID
    before: ID
    first: Int
    last: Int
    orderby: String
  ): CommentsConnection
  doesViewerLike: Boolean
  emailAddresses: [String]
  environment: Environment
  feedback: Feedback
  firstName(if: Boolean, unless: Boolean): String
  friends(
    after: ID
    before: ID
    first: Int
    last: Int
    orderby: [String]
    named: String
    scale: Float
    find: String
    isViewerFriend: Boolean
    if: Boolean
    unless: Boolean
    traits: [PersonalityTraits]
  ): FriendsConnection
  hometown: Page
  id: ID!
  js(module: String!, id: String, branch: String): JSDependency
  lastName: String
  likers(first: Int): LikersOfContentConnection
  likeSentence: Text
  message: Text
  """
  The user's name (first, last)
  """
  name: String
  alternate_name: String
  nameRenderable(supported: [String!]): UserNameRenderable
  nameRenderer(supported: [String!]): UserNameRenderer
  nameRendererForContext(
    context: NameRendererContext
    supported: [String!]!
  ): UserNameRenderer
  nameRenderers(supported: [String!]): [UserNameRenderer]
  storySearch(query: StorySearchInput): [Story]
  storyCommentSearch(query: StoryCommentSearchInput): [Comment]
  profilePicture(size: [Int], preset: PhotoSize): Image
  profile_picture(scale: Float, media_type: String): Image
  segments(first: Int): Segments
  screennames: [Screenname]
  subscribeStatus: String
  subscribers(first: Int): SubscribersConnection
  tasks: [Task]
  topLevelComments(first: Int): TopLevelCommentsConnection
  tracking: String
  traits: [PersonalityTraits]
  url(relative: Boolean, site: String): String
  websites: [String]
  username: String
  viewerSavedState: String
  plainUserRenderer: PlainUserRenderer
  profilePicture2(
    size: [Int]
    preset: PhotoSize
    cropPosition: CropPosition
    fileExtension: FileExtension
    additionalParameters: JSON
    options: ProfilePictureOptions
  ): Image
  neighbors: [User!]
  nearest_neighbor: User!
  parents: [User!]!
  actor_key: ID!
}

enum NameRendererContext {
  HEADER
  OTHER
}

input StorySearchInput {
  text: String
  limit: Int
  offset: Int
  type: StoryType
}

input StoryCommentSearchInput {
  text: String
  limit: Int
  offset: Int
}

type ItemFilterResult {
  date: String
}

input ItemFilterInput {
  date: String
}

type Viewer {
  configs(named: [String]): ConfigsConnection
  account_user: User
  actor: Actor
  allTimezones: [TimezoneInfo]
  isFbEmployee: Boolean
  newsFeed(after: ID, first: Int, find: ID): NewsFeedConnection
  notificationStories(after: ID, first: Int): NewsFeedConnection
  pendingPosts(first: Int): PendingPostsConnection
  primaryEmail: String
  timezoneEstimate: TimezoneInfo
  marketplace_explore(
    marketplace_browse_context: MarketplaceBrowseContext
    with_price_between: [Float]
  ): MarketplaceExploreConnection
  marketplace_settings: MarketPlaceSettings
}

type MarketPlaceSettings {
  location: MarketPlaceSellLocation
  categories: [String]
}

type MarketPlaceSellLocation {
  longitude: Float
  latitude: Float
}

type MarketplaceExploreConnection {
  count: Int
}

type ViewerNotificationsUpdateAllSeenStateResponsePayload {
  stories: [Story]
}

enum Environment {
  WEB
  MOBILE
}

enum MarketplaceBrowseContext {
  BROWSE_FEED
  CATEGORY_FEED
}

enum PhotoSize {
  SMALL
  LARGE
}

enum PersonalityTraits {
  CHEERFUL
  DERISIVE
  HELPFUL
  SNARKY
}

enum StoryType {
  DIRECTED
  UNDIRECTED
}

enum TopLevelCommentsOrdering {
  chronological
  ranked_threaded
  recent_activity
  toplevel
}

enum CropPosition {
  TOP
  CENTER
  BOTTOM
  LEFT
  RIGHT
}

enum FileExtension {
  JPG
  PNG
}

enum TestEnums {
  mark
  zuck
}

type Settings {
  cache_id: ID
  notificationSounds: Boolean
  notifications(environment: Environment): Boolean
}

type WithWrongViewer {
  actor_key: Viewer
}

<MSG> Add interface that implements interface to test schema

Reviewed By: mofeiZ

Differential Revision: D34433508

fbshipit-source-id: 13dc9c52926d29eb66b8828d4eb99e353f8df332

<DFF> @@ -974,6 +974,14 @@ interface UserNameRenderable {
   name: String
 }
 
+interface ImplementsUserNameRenderable implements UserNameRenderable {
+  name: String
+}
+
+type ImplementsImplementsUserNameRenderable implements ImplementsUserNameRenderable {
+  name: String
+}
+
 input ProfilePictureOptions {
   newName: String
 }

{'commit': 'diff --git a/compiler/crates/graphql-ir/tests/parse/fixtures/argument_definitions.expected b/compiler/crates/graphql-ir/tests/parse/fixtures/argument_definitions.expected\nindex e24edb3ef80f..bfa6a8721093 100644\n--- a/compiler/crates/graphql-ir/tests/parse/fixtures/argument_definitions.expected\n+++ b/compiler/crates/graphql-ir/tests/parse/fixtures/argument_definitions.expected\n@@ -61,7 +61,7 @@ fragment TestFragment on User\n                 },\n             ],\n             used_global_variables: [],\n-            type_condition: Object(67),\n+            type_condition: Object(68),\n             directives: [\n                 Directive {\n                     name: WithLocation {\n@@ -77,7 +77,7 @@ fragment TestFragment on User\n                     alias: None,\n                     definition: WithLocation {\n                         location: argument_definitions.graphql:161:171,\n-                        item: FieldID(521),\n+                        item: FieldID(523),\n                     },\n                     arguments: [],\n                     directives: [],\ndiff --git a/compiler/crates/graphql-ir/tests/parse/fixtures/directive-generic.expected b/compiler/crates/graphql-ir/tests/parse/fixtures/directive-generic.expected\nindex 18ebda5b0e86..633f1dc4f704 100644\n--- a/compiler/crates/graphql-ir/tests/parse/fixtures/directive-generic.expected\n+++ b/compiler/crates/graphql-ir/tests/parse/fixtures/directive-generic.expected\n@@ -12,14 +12,14 @@ fragment TestFragment on User {\n             },\n             variable_definitions: [],\n             used_global_variables: [],\n-            type_condition: Object(67),\n+            type_condition: Object(68),\n             directives: [],\n             selections: [\n                 ScalarField {\n                     alias: None,\n                     definition: WithLocation {\n                         location: directive-generic.graphql:34:36,\n-                        item: FieldID(464),\n+                        item: FieldID(466),\n                     },\n                     arguments: [],\n                     directives: [\ndiff --git a/compiler/crates/graphql-ir/tests/parse/fixtures/directive-include.expected b/compiler/crates/graphql-ir/tests/parse/fixtures/directive-include.expected\nindex 1f7648891001..fc8b73bd8517 100644\n--- a/compiler/crates/graphql-ir/tests/parse/fixtures/directive-include.expected\n+++ b/compiler/crates/graphql-ir/tests/parse/fixtures/directive-include.expected\n@@ -34,7 +34,7 @@ fragment Foo on User {\n                     directives: [],\n                 },\n             ],\n-            type_condition: Object(67),\n+            type_condition: Object(68),\n             directives: [],\n             selections: [\n                 Condition {\n@@ -43,7 +43,7 @@ fragment Foo on User {\n                             alias: None,\n                             definition: WithLocation {\n                                 location: directive-include.graphql:34:36,\n-                                item: FieldID(464),\n+                                item: FieldID(466),\n                             },\n                             arguments: [],\n                             directives: [],\n@@ -68,7 +68,7 @@ fragment Foo on User {\n                     selections: [\n                         InlineFragment {\n                             type_condition: Some(\n-                                Object(67),\n+                                Object(68),\n                             ),\n                             directives: [],\n                             selections: [\n@@ -76,7 +76,7 @@ fragment Foo on User {\n                                     alias: None,\n                                     definition: WithLocation {\n                                         location: directive-include.graphql:97:106,\n-                                        item: FieldID(461),\n+                                        item: FieldID(463),\n                                     },\n                                     arguments: [],\n                                     directives: [],\n@@ -136,14 +136,14 @@ fragment Foo on User {\n             },\n             variable_definitions: [],\n             used_global_variables: [],\n-            type_condition: Object(67),\n+            type_condition: Object(68),\n             directives: [],\n             selections: [\n                 ScalarField {\n                     alias: None,\n                     definition: WithLocation {\n                         location: directive-include.graphql:168:170,\n-                        item: FieldID(464),\n+                        item: FieldID(466),\n                     },\n                     arguments: [],\n                     directives: [],\ndiff --git a/compiler/crates/graphql-ir/tests/parse/fixtures/enum-values.expected b/compiler/crates/graphql-ir/tests/parse/fixtures/enum-values.expected\nindex f9e632ed368a..4f61d19ea56d 100644\n--- a/compiler/crates/graphql-ir/tests/parse/fixtures/enum-values.expected\n+++ b/compiler/crates/graphql-ir/tests/parse/fixtures/enum-values.expected\n@@ -32,7 +32,7 @@ query EnumValueQuery {\n                             alias: None,\n                             definition: WithLocation {\n                                 location: enum-values.graphql:34:48,\n-                                item: FieldID(478),\n+                                item: FieldID(480),\n                             },\n                             arguments: [\n                                 Argument {\ndiff --git a/compiler/crates/graphql-ir/tests/parse/fixtures/field-arguments.expected b/compiler/crates/graphql-ir/tests/parse/fixtures/field-arguments.expected\nindex f8b9729601e9..a6abb6f74a04 100644\n--- a/compiler/crates/graphql-ir/tests/parse/fixtures/field-arguments.expected\n+++ b/compiler/crates/graphql-ir/tests/parse/fixtures/field-arguments.expected\n@@ -86,7 +86,7 @@ query TestQuery {\n                             alias: None,\n                             definition: WithLocation {\n                                 location: field-arguments.graphql:89:107,\n-                                item: FieldID(518),\n+                                item: FieldID(520),\n                             },\n                             arguments: [],\n                             directives: [],\ndiff --git a/compiler/crates/graphql-ir/tests/parse/fixtures/fragment-with-arguments.expected b/compiler/crates/graphql-ir/tests/parse/fixtures/fragment-with-arguments.expected\nindex 5ea5d352a7a4..edb78748ffd1 100644\n--- a/compiler/crates/graphql-ir/tests/parse/fixtures/fragment-with-arguments.expected\n+++ b/compiler/crates/graphql-ir/tests/parse/fixtures/fragment-with-arguments.expected\n@@ -78,7 +78,7 @@ fragment Foo on User @argumentDefinitions(localId: {type: "ID!"}) {\n                     directives: [],\n                 },\n             ],\n-            type_condition: Object(67),\n+            type_condition: Object(68),\n             directives: [\n                 Directive {\n                     name: WithLocation {\n@@ -94,7 +94,7 @@ fragment Foo on User @argumentDefinitions(localId: {type: "ID!"}) {\n                     alias: None,\n                     definition: WithLocation {\n                         location: fragment-with-arguments.graphql:131:145,\n-                        item: FieldID(478),\n+                        item: FieldID(480),\n                     },\n                     arguments: [\n                         Argument {\n@@ -142,7 +142,7 @@ fragment Foo on User @argumentDefinitions(localId: {type: "ID!"}) {\n                     ),\n                     definition: WithLocation {\n                         location: fragment-with-arguments.graphql:198:212,\n-                        item: FieldID(478),\n+                        item: FieldID(480),\n                     },\n                     arguments: [\n                         Argument {\n@@ -237,7 +237,7 @@ fragment Foo on User @argumentDefinitions(localId: {type: "ID!"}) {\n                 },\n             ],\n             used_global_variables: [],\n-            type_condition: Object(67),\n+            type_condition: Object(68),\n             directives: [\n                 Directive {\n                     name: WithLocation {\n@@ -253,7 +253,7 @@ fragment Foo on User @argumentDefinitions(localId: {type: "ID!"}) {\n                     alias: None,\n                     definition: WithLocation {\n                         location: fragment-with-arguments.graphql:347:349,\n-                        item: FieldID(464),\n+                        item: FieldID(466),\n                     },\n                     arguments: [],\n                     directives: [],\ndiff --git a/compiler/crates/graphql-ir/tests/parse/fixtures/fragment-with-literal-arguments.expected b/compiler/crates/graphql-ir/tests/parse/fixtures/fragment-with-literal-arguments.expected\nindex 96d71e08e8c8..b4b7eb35a2ba 100644\n--- a/compiler/crates/graphql-ir/tests/parse/fixtures/fragment-with-literal-arguments.expected\n+++ b/compiler/crates/graphql-ir/tests/parse/fixtures/fragment-with-literal-arguments.expected\n@@ -19,7 +19,7 @@ fragment ChildFragment on User\n             },\n             variable_definitions: [],\n             used_global_variables: [],\n-            type_condition: Object(67),\n+            type_condition: Object(68),\n             directives: [],\n             selections: [\n                 FragmentSpread {\n@@ -74,7 +74,7 @@ fragment ChildFragment on User\n                 },\n             ],\n             used_global_variables: [],\n-            type_condition: Object(67),\n+            type_condition: Object(68),\n             directives: [\n                 Directive {\n                     name: WithLocation {\n@@ -90,7 +90,7 @@ fragment ChildFragment on User\n                     alias: None,\n                     definition: WithLocation {\n                         location: fragment-with-literal-arguments.graphql:174:188,\n-                        item: FieldID(478),\n+                        item: FieldID(480),\n                     },\n                     arguments: [\n                         Argument {\ndiff --git a/compiler/crates/graphql-ir/tests/parse/fixtures/fragment-with-literal-enum-arguments-into-enum-list.expected b/compiler/crates/graphql-ir/tests/parse/fixtures/fragment-with-literal-enum-arguments-into-enum-list.expected\nindex 86ceefd07823..cce0be60534e 100644\n--- a/compiler/crates/graphql-ir/tests/parse/fixtures/fragment-with-literal-enum-arguments-into-enum-list.expected\n+++ b/compiler/crates/graphql-ir/tests/parse/fixtures/fragment-with-literal-enum-arguments-into-enum-list.expected\n@@ -22,7 +22,7 @@ fragment ChildFragment on User\n             },\n             variable_definitions: [],\n             used_global_variables: [],\n-            type_condition: Object(67),\n+            type_condition: Object(68),\n             directives: [],\n             selections: [\n                 LinkedField {\n@@ -34,7 +34,7 @@ fragment ChildFragment on User\n                     ),\n                     definition: WithLocation {\n                         location: fragment-with-literal-enum-arguments-into-enum-list.graphql:53:61,\n-                        item: FieldID(455),\n+                        item: FieldID(457),\n                     },\n                     arguments: [\n                         Argument {\n@@ -121,7 +121,7 @@ fragment ChildFragment on User\n                 },\n             ],\n             used_global_variables: [],\n-            type_condition: Object(67),\n+            type_condition: Object(68),\n             directives: [\n                 Directive {\n                     name: WithLocation {\n@@ -137,7 +137,7 @@ fragment ChildFragment on User\n                     alias: None,\n                     definition: WithLocation {\n                         location: fragment-with-literal-enum-arguments-into-enum-list.graphql:253:261,\n-                        item: FieldID(455),\n+                        item: FieldID(457),\n                     },\n                     arguments: [\n                         Argument {\ndiff --git a/compiler/crates/graphql-ir/tests/parse/fixtures/fragment-with-literal-enum-arguments.expected b/compiler/crates/graphql-ir/tests/parse/fixtures/fragment-with-literal-enum-arguments.expected\nindex c7cec7abddf6..d4c93719e70f 100644\n--- a/compiler/crates/graphql-ir/tests/parse/fixtures/fragment-with-literal-enum-arguments.expected\n+++ b/compiler/crates/graphql-ir/tests/parse/fixtures/fragment-with-literal-enum-arguments.expected\n@@ -58,7 +58,7 @@ fragment ChildFragment on Query\n                             alias: None,\n                             definition: WithLocation {\n                                 location: fragment-with-literal-enum-arguments.graphql:90:98,\n-                                item: FieldID(517),\n+                                item: FieldID(519),\n                             },\n                             arguments: [],\n                             directives: [],\n@@ -159,7 +159,7 @@ fragment ChildFragment on Query\n                             alias: None,\n                             definition: WithLocation {\n                                 location: fragment-with-literal-enum-arguments.graphql:292:300,\n-                                item: FieldID(517),\n+                                item: FieldID(519),\n                             },\n                             arguments: [],\n                             directives: [],\ndiff --git a/compiler/crates/graphql-ir/tests/parse/fixtures/fragment-with-literal-enum-list-arguments.expected b/compiler/crates/graphql-ir/tests/parse/fixtures/fragment-with-literal-enum-list-arguments.expected\nindex e31ee4483003..81b49107e61a 100644\n--- a/compiler/crates/graphql-ir/tests/parse/fixtures/fragment-with-literal-enum-list-arguments.expected\n+++ b/compiler/crates/graphql-ir/tests/parse/fixtures/fragment-with-literal-enum-list-arguments.expected\n@@ -22,7 +22,7 @@ fragment ChildFragment on User\n             },\n             variable_definitions: [],\n             used_global_variables: [],\n-            type_condition: Object(67),\n+            type_condition: Object(68),\n             directives: [],\n             selections: [\n                 LinkedField {\n@@ -34,7 +34,7 @@ fragment ChildFragment on User\n                     ),\n                     definition: WithLocation {\n                         location: fragment-with-literal-enum-list-arguments.graphql:53:61,\n-                        item: FieldID(455),\n+                        item: FieldID(457),\n                     },\n                     arguments: [\n                         Argument {\n@@ -125,7 +125,7 @@ fragment ChildFragment on User\n                 },\n             ],\n             used_global_variables: [],\n-            type_condition: Object(67),\n+            type_condition: Object(68),\n             directives: [\n                 Directive {\n                     name: WithLocation {\n@@ -141,7 +141,7 @@ fragment ChildFragment on User\n                     alias: None,\n                     definition: WithLocation {\n                         location: fragment-with-literal-enum-list-arguments.graphql:255:263,\n-                        item: FieldID(455),\n+                        item: FieldID(457),\n                     },\n                     arguments: [\n                         Argument {\ndiff --git a/compiler/crates/graphql-ir/tests/parse/fixtures/fragment-with-variable-definitions-syntax.expected b/compiler/crates/graphql-ir/tests/parse/fixtures/fragment-with-variable-definitions-syntax.expected\nindex a0e300f36fc9..87b2113f1202 100644\n--- a/compiler/crates/graphql-ir/tests/parse/fixtures/fragment-with-variable-definitions-syntax.expected\n+++ b/compiler/crates/graphql-ir/tests/parse/fixtures/fragment-with-variable-definitions-syntax.expected\n@@ -78,7 +78,7 @@ fragment Foo($localId: ID!) on User {\n                     directives: [],\n                 },\n             ],\n-            type_condition: Object(67),\n+            type_condition: Object(68),\n             directives: [\n                 Directive {\n                     name: WithLocation {\n@@ -94,7 +94,7 @@ fragment Foo($localId: ID!) on User {\n                     alias: None,\n                     definition: WithLocation {\n                         location: fragment-with-variable-definitions-syntax.graphql:131:145,\n-                        item: FieldID(478),\n+                        item: FieldID(480),\n                     },\n                     arguments: [\n                         Argument {\n@@ -142,7 +142,7 @@ fragment Foo($localId: ID!) on User {\n                     ),\n                     definition: WithLocation {\n                         location: fragment-with-variable-definitions-syntax.graphql:198:212,\n-                        item: FieldID(478),\n+                        item: FieldID(480),\n                     },\n                     arguments: [\n                         Argument {\n@@ -237,14 +237,14 @@ fragment Foo($localId: ID!) on User {\n                 },\n             ],\n             used_global_variables: [],\n-            type_condition: Object(67),\n+            type_condition: Object(68),\n             directives: [],\n             selections: [\n                 ScalarField {\n                     alias: None,\n                     definition: WithLocation {\n                         location: fragment-with-variable-definitions-syntax.graphql:317:319,\n-                        item: FieldID(464),\n+                        item: FieldID(466),\n                     },\n                     arguments: [],\n                     directives: [],\ndiff --git a/compiler/crates/graphql-ir/tests/parse/fixtures/fragment_with_arguments_defaulting.expected b/compiler/crates/graphql-ir/tests/parse/fixtures/fragment_with_arguments_defaulting.expected\nindex f048544f57a4..fab12dc64e93 100644\n--- a/compiler/crates/graphql-ir/tests/parse/fixtures/fragment_with_arguments_defaulting.expected\n+++ b/compiler/crates/graphql-ir/tests/parse/fixtures/fragment_with_arguments_defaulting.expected\n@@ -158,7 +158,7 @@ fragment F2 on Query @argumentDefinitions(\n                             alias: None,\n                             definition: WithLocation {\n                                 location: fragment_with_arguments_defaulting.graphql:342:352,\n-                                item: FieldID(521),\n+                                item: FieldID(523),\n                             },\n                             arguments: [],\n                             directives: [],\ndiff --git a/compiler/crates/graphql-ir/tests/parse/fixtures/inline-untyped-fragment.expected b/compiler/crates/graphql-ir/tests/parse/fixtures/inline-untyped-fragment.expected\nindex da90742554d1..d774c9224a91 100644\n--- a/compiler/crates/graphql-ir/tests/parse/fixtures/inline-untyped-fragment.expected\n+++ b/compiler/crates/graphql-ir/tests/parse/fixtures/inline-untyped-fragment.expected\n@@ -14,7 +14,7 @@ fragment InlineUntypedFragment on User {\n             },\n             variable_definitions: [],\n             used_global_variables: [],\n-            type_condition: Object(67),\n+            type_condition: Object(68),\n             directives: [],\n             selections: [\n                 InlineFragment {\n@@ -25,7 +25,7 @@ fragment InlineUntypedFragment on User {\n                             alias: None,\n                             definition: WithLocation {\n                                 location: inline-untyped-fragment.graphql:53:57,\n-                                item: FieldID(470),\n+                                item: FieldID(472),\n                             },\n                             arguments: [],\n                             directives: [],\ndiff --git a/compiler/crates/graphql-ir/tests/parse/fixtures/linked-handle-field-with-filters.expected b/compiler/crates/graphql-ir/tests/parse/fixtures/linked-handle-field-with-filters.expected\nindex 0c7795485f7a..419d0ebef214 100644\n--- a/compiler/crates/graphql-ir/tests/parse/fixtures/linked-handle-field-with-filters.expected\n+++ b/compiler/crates/graphql-ir/tests/parse/fixtures/linked-handle-field-with-filters.expected\n@@ -29,14 +29,14 @@ fragment LinkedHandleField on User {\n                     directives: [],\n                 },\n             ],\n-            type_condition: Object(67),\n+            type_condition: Object(68),\n             directives: [],\n             selections: [\n                 LinkedField {\n                     alias: None,\n                     definition: WithLocation {\n                         location: linked-handle-field-with-filters.graphql:39:46,\n-                        item: FieldID(462),\n+                        item: FieldID(464),\n                     },\n                     arguments: [\n                         Argument {\ndiff --git a/compiler/crates/graphql-ir/tests/parse/fixtures/linked-handle-field-with-key.expected b/compiler/crates/graphql-ir/tests/parse/fixtures/linked-handle-field-with-key.expected\nindex eec5b6cac4bd..5c84517e5e31 100644\n--- a/compiler/crates/graphql-ir/tests/parse/fixtures/linked-handle-field-with-key.expected\n+++ b/compiler/crates/graphql-ir/tests/parse/fixtures/linked-handle-field-with-key.expected\n@@ -15,14 +15,14 @@ fragment LinkedHandleField on User {\n             },\n             variable_definitions: [],\n             used_global_variables: [],\n-            type_condition: Object(67),\n+            type_condition: Object(68),\n             directives: [],\n             selections: [\n                 LinkedField {\n                     alias: None,\n                     definition: WithLocation {\n                         location: linked-handle-field-with-key.graphql:39:46,\n-                        item: FieldID(462),\n+                        item: FieldID(464),\n                     },\n                     arguments: [\n                         Argument {\ndiff --git a/compiler/crates/graphql-ir/tests/parse/fixtures/linked-handle-field.expected b/compiler/crates/graphql-ir/tests/parse/fixtures/linked-handle-field.expected\nindex 86334de620ac..c9500cd97fa5 100644\n--- a/compiler/crates/graphql-ir/tests/parse/fixtures/linked-handle-field.expected\n+++ b/compiler/crates/graphql-ir/tests/parse/fixtures/linked-handle-field.expected\n@@ -16,14 +16,14 @@ fragment LinkedHandleField on User {\n             },\n             variable_definitions: [],\n             used_global_variables: [],\n-            type_condition: Object(67),\n+            type_condition: Object(68),\n             directives: [],\n             selections: [\n                 LinkedField {\n                     alias: None,\n                     definition: WithLocation {\n                         location: linked-handle-field.graphql:39:46,\n-                        item: FieldID(462),\n+                        item: FieldID(464),\n                     },\n                     arguments: [\n                         Argument {\ndiff --git a/compiler/crates/graphql-ir/tests/parse/fixtures/linked-handle-filter.expected b/compiler/crates/graphql-ir/tests/parse/fixtures/linked-handle-filter.expected\nindex 5134a8675b07..6aefc6b706cd 100644\n--- a/compiler/crates/graphql-ir/tests/parse/fixtures/linked-handle-filter.expected\n+++ b/compiler/crates/graphql-ir/tests/parse/fixtures/linked-handle-filter.expected\n@@ -16,14 +16,14 @@ fragment LinkedHandleField on User {\n             },\n             variable_definitions: [],\n             used_global_variables: [],\n-            type_condition: Object(67),\n+            type_condition: Object(68),\n             directives: [],\n             selections: [\n                 LinkedField {\n                     alias: None,\n                     definition: WithLocation {\n                         location: linked-handle-filter.graphql:39:46,\n-                        item: FieldID(462),\n+                        item: FieldID(464),\n                     },\n                     arguments: [\n                         Argument {\ndiff --git a/compiler/crates/graphql-ir/tests/parse/fixtures/list-of-enums.expected b/compiler/crates/graphql-ir/tests/parse/fixtures/list-of-enums.expected\nindex 8f312947cb2c..3fa5941d4e83 100644\n--- a/compiler/crates/graphql-ir/tests/parse/fixtures/list-of-enums.expected\n+++ b/compiler/crates/graphql-ir/tests/parse/fixtures/list-of-enums.expected\n@@ -12,14 +12,14 @@ fragment TestFragment on User {\n             },\n             variable_definitions: [],\n             used_global_variables: [],\n-            type_condition: Object(67),\n+            type_condition: Object(68),\n             directives: [],\n             selections: [\n                 ScalarField {\n                     alias: None,\n                     definition: WithLocation {\n                         location: list-of-enums.graphql:34:40,\n-                        item: FieldID(487),\n+                        item: FieldID(489),\n                     },\n                     arguments: [],\n                     directives: [],\ndiff --git a/compiler/crates/graphql-ir/tests/parse/fixtures/null-values.expected b/compiler/crates/graphql-ir/tests/parse/fixtures/null-values.expected\nindex d3df25305f59..6e2c3c14e8ca 100644\n--- a/compiler/crates/graphql-ir/tests/parse/fixtures/null-values.expected\n+++ b/compiler/crates/graphql-ir/tests/parse/fixtures/null-values.expected\n@@ -56,7 +56,7 @@ query NullValuesQuery {\n                             alias: None,\n                             definition: WithLocation {\n                                 location: null-values.graphql:60:64,\n-                                item: FieldID(498),\n+                                item: FieldID(500),\n                             },\n                             arguments: [],\n                             directives: [],\ndiff --git a/compiler/crates/graphql-ir/tests/parse/fixtures/scalar-handle-field.expected b/compiler/crates/graphql-ir/tests/parse/fixtures/scalar-handle-field.expected\nindex b5d5e5dee5f5..d627c5d880ed 100644\n--- a/compiler/crates/graphql-ir/tests/parse/fixtures/scalar-handle-field.expected\n+++ b/compiler/crates/graphql-ir/tests/parse/fixtures/scalar-handle-field.expected\n@@ -14,14 +14,14 @@ fragment ScalarHandleField on User {\n             },\n             variable_definitions: [],\n             used_global_variables: [],\n-            type_condition: Object(67),\n+            type_condition: Object(68),\n             directives: [],\n             selections: [\n                 ScalarField {\n                     alias: None,\n                     definition: WithLocation {\n                         location: scalar-handle-field.graphql:39:43,\n-                        item: FieldID(470),\n+                        item: FieldID(472),\n                     },\n                     arguments: [],\n                     directives: [\ndiff --git a/compiler/crates/graphql-ir/tests/parse/fixtures/simple-fragment.expected b/compiler/crates/graphql-ir/tests/parse/fixtures/simple-fragment.expected\nindex 03ae33f5a57b..1eeae2d25c5d 100644\n--- a/compiler/crates/graphql-ir/tests/parse/fixtures/simple-fragment.expected\n+++ b/compiler/crates/graphql-ir/tests/parse/fixtures/simple-fragment.expected\n@@ -12,14 +12,14 @@ fragment TestFragment on User {\n             },\n             variable_definitions: [],\n             used_global_variables: [],\n-            type_condition: Object(67),\n+            type_condition: Object(68),\n             directives: [],\n             selections: [\n                 ScalarField {\n                     alias: None,\n                     definition: WithLocation {\n                         location: simple-fragment.graphql:34:36,\n-                        item: FieldID(464),\n+                        item: FieldID(466),\n                     },\n                     arguments: [],\n                     directives: [],\ndiff --git a/compiler/crates/graphql-ir/tests/parse_with_extensions/fixtures/client-fields.expected b/compiler/crates/graphql-ir/tests/parse_with_extensions/fixtures/client-fields.expected\nindex c99ba4bdfd63..429a2135c8c3 100644\n--- a/compiler/crates/graphql-ir/tests/parse_with_extensions/fixtures/client-fields.expected\n+++ b/compiler/crates/graphql-ir/tests/parse_with_extensions/fixtures/client-fields.expected\n@@ -123,14 +123,14 @@ type Foo {\n             },\n             variable_definitions: [],\n             used_global_variables: [],\n-            type_condition: Object(67),\n+            type_condition: Object(68),\n             directives: [],\n             selections: [\n                 ScalarField {\n                     alias: None,\n                     definition: WithLocation {\n                         location: client-fields.graphql:171:173,\n-                        item: FieldID(464),\n+                        item: FieldID(466),\n                     },\n                     arguments: [],\n                     directives: [],\n@@ -139,7 +139,7 @@ type Foo {\n                     alias: None,\n                     definition: WithLocation {\n                         location: client-fields.graphql:226:238,\n-                        item: FieldID(521),\n+                        item: FieldID(523),\n                     },\n                     arguments: [],\n                     directives: [],\n@@ -175,7 +175,7 @@ type Foo {\n                                             alias: None,\n                                             definition: WithLocation {\n                                                 location: client-fields.graphql:287:289,\n-                                                item: FieldID(464),\n+                                                item: FieldID(466),\n                                             },\n                                             arguments: [],\n                                             directives: [],\n@@ -208,7 +208,7 @@ type Foo {\n                 },\n                 InlineFragment {\n                     type_condition: Some(\n-                        Object(67),\n+                        Object(68),\n                     ),\n                     directives: [],\n                     selections: [\n@@ -216,7 +216,7 @@ type Foo {\n                             alias: None,\n                             definition: WithLocation {\n                                 location: client-fields.graphql:367:370,\n-                                item: FieldID(522),\n+                                item: FieldID(524),\n                             },\n                             arguments: [],\n                             directives: [],\n@@ -231,7 +231,7 @@ type Foo {\n                                 },\n                                 InlineFragment {\n                                     type_condition: Some(\n-                                        Object(76),\n+                                        Object(77),\n                                     ),\n                                     directives: [],\n                                     selections: [\n@@ -239,7 +239,7 @@ type Foo {\n                                             alias: None,\n                                             definition: WithLocation {\n                                                 location: client-fields.graphql:470:472,\n-                                                item: FieldID(523),\n+                                                item: FieldID(525),\n                                             },\n                                             arguments: [],\n                                             directives: [],\n@@ -261,14 +261,14 @@ type Foo {\n             },\n             variable_definitions: [],\n             used_global_variables: [],\n-            type_condition: Object(76),\n+            type_condition: Object(77),\n             directives: [],\n             selections: [\n                 ScalarField {\n                     alias: None,\n                     definition: WithLocation {\n                         location: client-fields.graphql:526:528,\n-                        item: FieldID(523),\n+                        item: FieldID(525),\n                     },\n                     arguments: [],\n                     directives: [],\ndiff --git a/compiler/crates/graphql-ir/tests/parse_with_provider/fixtures/fragment_with_valid_provider.expected b/compiler/crates/graphql-ir/tests/parse_with_provider/fixtures/fragment_with_valid_provider.expected\nindex 10555eb8a262..1a6bf9131e63 100644\n--- a/compiler/crates/graphql-ir/tests/parse_with_provider/fixtures/fragment_with_valid_provider.expected\n+++ b/compiler/crates/graphql-ir/tests/parse_with_provider/fixtures/fragment_with_valid_provider.expected\n@@ -95,7 +95,7 @@ fragment TestFragment on User\n                     directives: [],\n                 },\n             ],\n-            type_condition: Object(67),\n+            type_condition: Object(68),\n             directives: [\n                 Directive {\n                     name: WithLocation {\n@@ -111,7 +111,7 @@ fragment TestFragment on User\n                     alias: None,\n                     definition: WithLocation {\n                         location: fragment_with_valid_provider.graphql:210:224,\n-                        item: FieldID(478),\n+                        item: FieldID(480),\n                     },\n                     arguments: [\n                         Argument {\ndiff --git a/compiler/crates/graphql-ir/tests/parse_with_provider/fixtures/use_fragment_spread_with_provider.expected b/compiler/crates/graphql-ir/tests/parse_with_provider/fixtures/use_fragment_spread_with_provider.expected\nindex e87abbff653a..e612ee6a931a 100644\n--- a/compiler/crates/graphql-ir/tests/parse_with_provider/fixtures/use_fragment_spread_with_provider.expected\n+++ b/compiler/crates/graphql-ir/tests/parse_with_provider/fixtures/use_fragment_spread_with_provider.expected\n@@ -32,7 +32,7 @@ fragment ChildFragment2 on User\n             },\n             variable_definitions: [],\n             used_global_variables: [],\n-            type_condition: Object(67),\n+            type_condition: Object(68),\n             directives: [],\n             selections: [\n                 FragmentSpread {\n@@ -121,7 +121,7 @@ fragment ChildFragment2 on User\n                 },\n             ],\n             used_global_variables: [],\n-            type_condition: Object(67),\n+            type_condition: Object(68),\n             directives: [\n                 Directive {\n                     name: WithLocation {\n@@ -137,7 +137,7 @@ fragment ChildFragment2 on User\n                     alias: None,\n                     definition: WithLocation {\n                         location: use_fragment_spread_with_provider.graphql:286:300,\n-                        item: FieldID(478),\n+                        item: FieldID(480),\n                     },\n                     arguments: [\n                         Argument {\n@@ -232,7 +232,7 @@ fragment ChildFragment2 on User\n                 },\n             ],\n             used_global_variables: [],\n-            type_condition: Object(67),\n+            type_condition: Object(68),\n             directives: [\n                 Directive {\n                     name: WithLocation {\n@@ -250,7 +250,7 @@ fragment ChildFragment2 on User\n                             alias: None,\n                             definition: WithLocation {\n                                 location: use_fragment_spread_with_provider.graphql:526:532,\n-                                item: FieldID(487),\n+                                item: FieldID(489),\n                             },\n                             arguments: [],\n                             directives: [],\ndiff --git a/compiler/crates/relay-test-schema/src/testschema.graphql b/compiler/crates/relay-test-schema/src/testschema.graphql\nindex 841eb1c0418e..a388e7f78633 100644\n--- a/compiler/crates/relay-test-schema/src/testschema.graphql\n+++ b/compiler/crates/relay-test-schema/src/testschema.graphql\n@@ -974,6 +974,14 @@ interface UserNameRenderable {\n   name: String\n }\n \n+interface ImplementsUserNameRenderable implements UserNameRenderable {\n+  name: String\n+}\n+\n+type ImplementsImplementsUserNameRenderable implements ImplementsUserNameRenderable {\n+  name: String\n+}\n+\n input ProfilePictureOptions {\n   newName: String\n }\n', 'commit_subject': 'Add interface that implements interface to test schema', 'repo_name': 'facebook/relay', 'committer': {'name': 'Facebook GitHub Bot', 'email': 'f08905f3496a7b7d60e0da97307f6ad7594abc92@users.noreply.github.com', 'time_sec': '1646068597', 'tz_offset': '-480', 'date': {'seconds': '1646068597'}}, 'commit_tree': 'f5af7d6d092e25e02ff509ebc37abd987985439e', 'commit_message': 'Add interface that implements interface to test schema\n\nReviewed By: mofeiZ\n\nDifferential Revision: D34433508\n\nfbshipit-source-id: 13dc9c52926d29eb66b8828d4eb99e353f8df332\n', 'language_name': 'Shell', 'license': 'mit', 'hunks': '@@ -974,6 +974,14 @@ interface UserNameRenderable {\n   name: String\n }\n \n+interface ImplementsUserNameRenderable implements UserNameRenderable {\n+  name: String\n+}\n+\n+type ImplementsImplementsUserNameRenderable implements ImplementsUserNameRenderable {\n+  name: String\n+}\n+\n input ProfilePictureOptions {\n   newName: String\n }\n', 'addition_count': 8, 'deletion_count': 0, 'src_file': 'a/compiler/crates/relay-test-schema/src/testschema.graphql', 'tgt_file': 'b/compiler/crates/relay-test-schema/src/testschema.graphql', 'file_extension': '.graphql', 'before_file': '# Copyright (c) Meta Platforms, Inc. and affiliates. All Rights Reserved.\n\nschema {\n  query: Query\n  mutation: Mutation\n  subscription: Subscription\n}\n\ndirective @live_query(polling_interval: Int, config_id: String) on QUERY\n\ndirective @customDirective(level: Int!) on FIELD | FRAGMENT_SPREAD\n\ndirective @fixme_fat_interface on FIELD\n\ndirective @configurable on VARIABLE_DEFINITION\n\ndirective @_auto_hoisted on VARIABLE_DEFINITION\n\ndirective @fb_actor_change on FIELD\n\ndirective @defer(\n  label: String!\n  if: Boolean = true\n) on FRAGMENT_SPREAD | INLINE_FRAGMENT\n\ndirective @stream(\n  label: String!\n  initial_count: Int!\n  if: Boolean = true\n  use_customized_batch: Boolean = false\n) on FIELD\n\ndirective @fetchable(field_name: String!) on OBJECT\n\ntype Query {\n  checkinSearchQuery(query: CheckinSearchInput): CheckinSearchResult\n  defaultSettings: Settings\n  route(waypoints: [WayPoint!]!): Route\n  items(filter: ItemFilterInput): ItemFilterResult\n  maybeNodeInterface: MaybeNodeInterface\n  maybeNode: MaybeNode\n  neverNode: NeverNode\n  named: Named\n  me: User\n  node(id: ID): Node\n  node_id_required(id: ID!): Node\n  nodes(ids: [ID!]): [Node]\n  settings(environment: Environment): Settings\n  story: Story\n  task(number: Int): Task\n  username(name: String!): Actor\n  usernames(names: [String!]!): [Actor]\n  viewer: Viewer\n  _mutation: Mutation\n  fetch__User(id: ID!): User\n  fetch__NonNodeStory(input_fetch_id: ID!): NonNodeStory\n  nonNodeStory(id: ID!): NonNodeStory\n  wrongViewer: WithWrongViewer\n}\n\ninterface MaybeNodeInterface {\n  name: String\n}\n\nscalar JSON\n\ndirective @react_flight(\n  components: [String!]!\n) on QUERY | MUTATION | SUBSCRIPTION\n\nscalar ReactFlightComponent\n\nscalar ReactFlightProps\n\ndirective @relay_client_component_server(module_id: String!) on FRAGMENT_SPREAD\n\nunion MaybeNode = Story | FakeNode | NonNode\n\ntype FakeNode {\n  id: ID!\n}\n\ntype NonNode {\n  id: String\n  name: String\n}\n\ntype NonNodeNoID implements MaybeNodeInterface {\n  name: String\n}\n\nunion NeverNode = FakeNode | NonNode\n\ninterface AllConcreteTypesImplementNode {\n  count: Int\n}\n\ntype Task {\n  title: String\n}\n\ninput WayPoint {\n  lat: String\n  lon: String\n}\n\ntype Route {\n  steps: [RouteStep]\n}\n\ntype RouteStep {\n  lat: String\n  lon: String\n  note: String\n}\n\ntype Mutation {\n  actorSubscribe(input: ActorSubscribeInput): ActorSubscribeResponsePayload\n  actorNameChange(input: ActorNameChangeInput): ActorNameChangePayload\n  applicationRequestDeleteAll(\n    input: ApplicationRequestDeleteAllInput\n  ): ApplicationRequestDeleteAllResponsePayload\n  commentCreate(input: CommentCreateInput): CommentCreateResponsePayload\n  commentDelete(input: CommentDeleteInput): CommentDeleteResponsePayload\n  commentsDelete(input: CommentsDeleteInput): CommentsDeleteResponsePayload\n  feedbackLike(input: FeedbackLikeInput): FeedbackLikeResponsePayload\n  feedbackLikeStrict(\n    input: FeedbackLikeInputStrict!\n  ): FeedbackLikeResponsePayload\n  feedbackLikeSubscribe(input: FeedbackLikeInput): FeedbackLikeResponsePayload\n  nodeSavedState(input: NodeSaveStateInput): NodeSavedStateResponsePayload\n  unfriend(input: UnfriendInput): UnfriendResponsePayload\n  viewerNotificationsUpdateAllSeenState(\n    input: UpdateAllSeenStateInput\n  ): ViewerNotificationsUpdateAllSeenStateResponsePayload\n  setLocation(input: LocationInput): setLocationResponsePayload\n  setName(name: String!): User\n}\n\ntype Subscription {\n  feedbackLikeSubscribe(input: FeedbackLikeInput): FeedbackLikeResponsePayload\n  commentCreateSubscribe(\n    input: CommentCreateSubscriptionInput\n  ): CommentCreateResponsePayload\n}\n\ninput ActorSubscribeInput {\n  subscribeeId: ID\n}\n\ninput ActorNameChangeInput {\n  newName: String\n}\n\ninput ApplicationRequestDeleteAllInput {\n  deletedRequestIds: [ID]\n}\n\ninput CommentCreateInput {\n  client_mutation_id: String!\n  feedbackId: ID\n  feedback: CommentfeedbackFeedback\n}\n\ninput CommentsCreateInput {\n  feedbackId: ID\n  feedback: [CommentfeedbackFeedback]\n}\n\ninput CommentfeedbackFeedback {\n  comment: FeedbackcommentComment\n}\n\ninput FeedbackcommentComment {\n  feedback: CommentfeedbackFeedback\n}\n\ninput CommentCreateSubscriptionInput {\n  feedbackId: ID\n  text: String\n}\n\ninput CommentDeleteInput {\n  commentId: ID\n}\n\ninput CommentsDeleteInput {\n  commentIds: [ID]\n}\n\ninput FeedbackLikeInput {\n  feedbackId: ID\n}\n\ninput FeedbackLikeInputStrict {\n  userID: ID!\n  feedbackId: ID!\n  description: String\n}\n\ninput NodeSaveStateInput {\n  nodeId: ID\n}\n\ninput UpdateAllSeenStateInput {\n  storyIds: [ID]\n}\n\ninput LocationInput {\n  longitude: Float\n  latitude: Float\n}\n\ntype setLocationResponsePayload {\n  viewer: Viewer\n}\n\ntype ActorSubscribeResponsePayload {\n  subscribee: Actor\n}\n\ntype ActorNameChangePayload {\n  actor: Actor\n}\n\ntype ApplicationRequestDeleteAllResponsePayload {\n  deletedRequestIds: [ID]\n}\n\ntype CheckinSearchResult {\n  query: String\n}\n\ninput CheckinSearchInput {\n  query: String\n  inputs: [CheckinSearchInput]\n}\n\ntype PlainCommentBody {\n  text: Text\n}\n\ntype MarkdownCommentBody {\n  text: Text\n}\n\nunion CommentBody = PlainCommentBody | MarkdownCommentBody\n\ntype Comment implements Node {\n  actor: Actor\n  actors: [Actor]\n  actorCount: Int\n  address: StreetAddress\n  allPhones: [Phone]\n  author: User\n  backgroundImage: Image\n  birthdate: Date\n  body: Text\n  canViewerComment: Boolean\n  canViewerLike: Boolean\n  commentBody(supported: [String!]!): CommentBody\n  comments(\n    after: ID\n    before: ID\n    first: Int\n    last: Int\n    orderby: String\n  ): CommentsConnection\n  doesViewerLike: Boolean\n  emailAddresses: [String]\n  feedback: Feedback\n  firstName(if: Boolean, unless: Boolean): String\n  friends(\n    after: ID\n    before: ID\n    first: Int\n    last: Int\n    orderby: [String]\n    find: String\n    isViewerFriend: Boolean\n    if: Boolean\n    unless: Boolean\n    traits: [PersonalityTraits]\n  ): FriendsConnection\n  hometown: Page\n  id: ID!\n  lastName: String\n  likers(first: Int): LikersOfContentConnection\n  likeSentence: Text\n  message: Text\n  name: String\n  profilePicture(size: [Int], preset: PhotoSize): Image\n  # This is added in TestSchema.js\n  #\n  # profilePicture2(\n  #   size: [Int],\n  #   preset: PhotoSize,\n  #   cropPosition: CropPosition,\n  #   fileExtension: FileExtension,\n  #   additionalParameters: JSON\n  # ): Image\n  segments(first: Int): Segments\n  screennames: [Screenname]\n  subscribeStatus: String\n  subscribers(first: Int): SubscribersConnection\n  topLevelComments(first: Int): TopLevelCommentsConnection\n  tracking: String\n  url(relative: Boolean, site: String): String\n  websites: [String]\n  username: String\n  viewerSavedState: String\n}\n\ntype CommentCreateResponsePayload {\n  comment: Comment\n  feedback: Feedback\n  feedbackCommentEdge: CommentsEdge\n  feedbackCommentEdgeUsingInterface: CommentsEdgeInterface\n  viewer: Viewer\n  js: JSDependency\n}\n\ntype CommentsCreateResponsePayload {\n  comments: [Comment]\n  feedback: [Feedback]\n  feedbackCommentEdges: [CommentsEdge]\n  viewer: Viewer\n}\n\ntype CommentDeleteResponsePayload {\n  deletedCommentId: ID\n  feedback: Feedback\n}\n\ntype CommentsDeleteResponsePayload {\n  deletedCommentIds: [ID]\n  feedback: Feedback\n}\n\ntype CommentsConnection {\n  count: Int\n  edges: [CommentsEdge]\n  pageInfo: PageInfo\n}\n\ninterface CommentsEdgeInterface {\n  cursor: String\n  node: Comment\n  source: Feedback\n}\n\ntype CommentsEdge implements CommentsEdgeInterface {\n  cursor: String\n  node: Comment\n}\n\ntype CommentBodiesConnection {\n  count: Int\n  edges: [CommentBodiesEdge]\n  pageInfo: PageInfo\n}\n\ntype CommentBodiesEdge {\n  cursor: String\n  node: CommentBody # union type\n  source: Feedback\n}\n\ntype ConfigsConnection {\n  edges: [ConfigsConnectionEdge]\n  pageInfo: PageInfo\n}\n\ntype ConfigsConnectionEdge {\n  node: Config\n}\n\ntype Config {\n  name: String\n  isEnabled: Boolean\n}\n\ntype Date {\n  day: Int\n  month: Int\n  year: Int\n}\n\ntype Feedback implements Node {\n  actor: Actor\n  actors: [Actor]\n  actorCount: Int\n  address: StreetAddress\n  allPhones: [Phone]\n  author: User\n  backgroundImage: Image\n  birthdate: Date\n  body: Text\n  canViewerComment: Boolean\n  canViewerLike: Boolean\n  comments(\n    after: ID\n    before: ID\n    first: Int\n    last: Int\n    orderby: String\n  ): CommentsConnection\n  commentBodies(\n    after: ID\n    before: ID\n    first: Int\n    last: Int\n    orderby: String\n  ): CommentBodiesConnection\n  doesViewerLike: Boolean\n  emailAddresses: [String]\n  feedback: Feedback\n  firstName(if: Boolean, unless: Boolean): String\n  friends(\n    after: ID\n    before: ID\n    first: Int\n    last: Int\n    orderby: [String]\n    find: String\n    isViewerFriend: Boolean\n    if: Boolean\n    unless: Boolean\n    traits: [PersonalityTraits]\n  ): FriendsConnection\n  hometown: Page\n  id: ID!\n  lastName: String\n  likers(first: Int): LikersOfContentConnection\n  likeSentence: Text\n  message: Text\n  name: String\n  profilePicture(size: [Int], preset: PhotoSize): Image\n  segments(first: Int): Segments\n  screennames: [Screenname]\n  subscribeStatus: String\n  subscribers(first: Int): SubscribersConnection\n  topLevelComments(\n    orderBy: [TopLevelCommentsOrdering]\n    first: Int\n  ): TopLevelCommentsConnection\n  tracking: String\n  url(relative: Boolean, site: String): String\n  websites: [String]\n  username: String\n  viewedBy: [Actor]\n  viewerSavedState: String\n}\n\ntype FeedbackLikeResponsePayload {\n  feedback: Feedback\n}\n\ninterface FeedUnit {\n  actor: Actor\n  actorCount: Int\n  feedback: Feedback\n  id: ID!\n  message: Text\n  tracking: String\n}\n\ntype FriendsConnection {\n  count: Int\n  edges: [FriendsEdge]\n  pageInfo: PageInfo\n}\n\ntype FriendsEdge {\n  cursor: String\n  node: User\n  source: User\n}\n\ntype Image {\n  "URI where the image can be found"\n  uri: String\n  """\n  Width in pixels\n  """\n  width: Int\n  """\n  Height in pixels\n  """\n  height: Int\n  test_enums: TestEnums\n}\n\ntype LikersOfContentConnection {\n  count: Int\n  edges: [LikersEdge]\n  pageInfo: PageInfo\n}\n\ntype LikersEdge {\n  cursor: String\n  node: Actor\n}\n\ninterface Named {\n  name: String\n}\n\ntype SimpleNamed implements Named {\n  name: String\n}\n\ntype NewsFeedConnection {\n  edges: [NewsFeedEdge]\n  pageInfo: PageInfo\n}\n\ntype NewsFeedEdge {\n  cursor: String\n  node: FeedUnit\n  sortKey: String\n  showBeeper: Boolean\n}\n\ninterface Node {\n  actor: Actor\n  actors: [Actor]\n  actorCount: Int\n  address: StreetAddress\n  allPhones: [Phone]\n  author: User\n  backgroundImage: Image\n  birthdate: Date\n  body: Text\n  canViewerComment: Boolean\n  canViewerLike: Boolean\n  comments(\n    after: ID\n    before: ID\n    first: Int\n    last: Int\n    orderby: String\n  ): CommentsConnection\n  doesViewerLike: Boolean\n  emailAddresses: [String]\n  feedback: Feedback\n  firstName(if: Boolean, unless: Boolean): String\n  friends(\n    after: ID\n    before: ID\n    first: Int\n    last: Int\n    orderby: [String]\n    find: String\n    isViewerFriend: Boolean\n    if: Boolean\n    unless: Boolean\n    traits: [PersonalityTraits]\n  ): FriendsConnection\n  hometown: Page\n  id: ID!\n  lastName: String\n  likers(first: Int): LikersOfContentConnection\n  likeSentence: Text\n  message: Text\n  name: String\n  profilePicture(size: [Int], preset: PhotoSize): Image\n  segments(first: Int): Segments\n  screennames: [Screenname]\n  subscribeStatus: String\n  subscribers(first: Int): SubscribersConnection\n  topLevelComments(first: Int): TopLevelCommentsConnection\n  tracking: String\n  url(relative: Boolean, site: String): String\n  websites: [String]\n  username: String\n  viewerSavedState: String\n}\n\ninterface Actor {\n  address: StreetAddress\n  allPhones: [Phone]\n  birthdate: Date\n  emailAddresses: [String]\n  firstName(if: Boolean, unless: Boolean): String\n  friends(\n    after: ID\n    before: ID\n    first: Int\n    last: Int\n    orderby: [String]\n    find: String\n    isViewerFriend: Boolean\n    if: Boolean\n    unless: Boolean\n    traits: [PersonalityTraits]\n  ): FriendsConnection\n  hometown: Page\n  id: ID!\n  lastName: String\n  name: String\n  nameRenderer(supported: [String!]): UserNameRenderer\n  nameRenderable(supported: [String!]): UserNameRenderable\n  profilePicture(size: [Int], preset: PhotoSize): Image\n  screennames: [Screenname]\n  subscribeStatus: String\n  subscribers(first: Int): SubscribersConnection\n  url(relative: Boolean, site: String): String\n  websites: [String]\n  username: String\n  actor_key: ID!\n}\n\ntype NodeSavedStateResponsePayload {\n  node: Node\n}\n\ntype Page implements Node & Actor {\n  actor: Actor\n  actors: [Actor]\n  actorCount: Int\n  address: StreetAddress\n  allPhones: [Phone]\n  author: User\n  backgroundImage: Image\n  birthdate: Date\n  body: Text\n  canViewerComment: Boolean\n  canViewerLike: Boolean\n  comments(\n    after: ID\n    before: ID\n    first: Int\n    last: Int\n    orderby: String\n  ): CommentsConnection\n  doesViewerLike: Boolean\n  emailAddresses: [String]\n  feedback: Feedback\n  firstName(if: Boolean, unless: Boolean): String\n  friends(\n    after: ID\n    before: ID\n    first: Int\n    last: Int\n    orderby: [String]\n    find: String\n    isViewerFriend: Boolean\n    if: Boolean\n    unless: Boolean\n    traits: [PersonalityTraits]\n  ): FriendsConnection\n  hometown: Page\n  id: ID!\n  lastName: String\n  likers(first: Int): LikersOfContentConnection\n  likeSentence: Text\n  message: Text\n  name: String\n  nameRenderer(supported: [String!]): UserNameRenderer\n  nameRenderable(supported: [String!]): UserNameRenderable\n  profilePicture(size: [Int], preset: PhotoSize): Image\n  segments(first: Int): Segments\n  screennames: [Screenname]\n  subscribeStatus: String\n  subscribers(first: Int): SubscribersConnection\n  topLevelComments(first: Int): TopLevelCommentsConnection\n  tracking: String\n  url(relative: Boolean, site: String): String\n  websites: [String]\n  username: String\n  viewerSavedState: String\n  nameWithArgs(capitalize: Boolean!): String\n  nameWithDefaultArgs(capitalize: Boolean = false): String\n  nameWithRequiredDefaultArgs(capitalize: Boolean! = false): String\n  actor_key: ID!\n}\n\ntype PageInfo {\n  hasPreviousPage: Boolean\n  hasNextPage: Boolean\n  endCursor: String\n  startCursor: String\n}\n\ntype PendingPostsConnection {\n  count: Int\n  edges: [PendingPostsConnectionEdge]\n  pageInfo: PageInfo\n}\n\ntype PendingPostsConnectionEdge {\n  cursor: String\n  node: PendingPost\n}\n\ntype PendingPost {\n  text: String\n}\n\ntype Phone {\n  isVerified: Boolean\n  phoneNumber: PhoneNumber\n}\n\ntype PhoneNumber {\n  displayNumber: String\n  countryCode: String\n}\n\ntype Screenname {\n  name: String\n  service: String\n}\n\ntype Segments {\n  edges: SegmentsEdge\n}\n\ntype SegmentsEdge {\n  node: String\n}\n\ntype NonNodeStory implements FeedUnit @fetchable(field_name: "fetch_id") {\n  actor: Actor\n  actorCount: Int\n  feedback: Feedback\n  fetch_id: ID!\n  id: ID!\n  message: Text\n  tracking: String\n}\n\ntype PhotoStory implements FeedUnit & Node {\n  # PhotoStory\n  photo: Image\n\n  # FeedUnit\n  canViewerDelete: Boolean\n  seenState: String\n\n  # Node\n  actor: Actor\n  actors: [Actor]\n  actorCount: Int\n  address: StreetAddress\n  allPhones: [Phone]\n  author: User\n  backgroundImage: Image\n  birthdate: Date\n  body: Text\n  canViewerComment: Boolean\n  canViewerLike: Boolean\n  comments(\n    after: ID\n    before: ID\n    first: Int\n    last: Int\n    orderby: String\n  ): CommentsConnection\n  doesViewerLike: Boolean\n  emailAddresses: [String]\n  feedback: Feedback\n  firstName(if: Boolean, unless: Boolean): String\n  friends(\n    after: ID\n    before: ID\n    first: Int\n    last: Int\n    orderby: [String]\n    find: String\n    isViewerFriend: Boolean\n    if: Boolean\n    unless: Boolean\n    traits: [PersonalityTraits]\n  ): FriendsConnection\n  hometown: Page\n  id: ID!\n  lastName: String\n  likers(first: Int): LikersOfContentConnection\n  likeSentence: Text\n  message: Text\n  name: String\n  profilePicture(size: [Int], preset: PhotoSize): Image\n  segments(first: Int): Segments\n  screennames: [Screenname]\n  subscribeStatus: String\n  subscribers(first: Int): SubscribersConnection\n  topLevelComments(first: Int): TopLevelCommentsConnection\n  tracking: String\n  url(relative: Boolean, site: String): String\n  websites: [String]\n  username: String\n  viewerSavedState: String\n}\n\ntype Story implements FeedUnit & Node & MaybeNodeInterface {\n  attachments: [StoryAttachment]\n  flight(component: String!, props: ReactFlightProps): ReactFlightComponent\n\n  # FeedUnit\n  canViewerDelete: Boolean\n  seenState: String\n\n  # Node\n  actor: Actor\n  actors: [Actor]\n  actorCount: Int\n  address: StreetAddress\n  allPhones: [Phone]\n  author: User\n  backgroundImage: Image\n  birthdate: Date\n  body: Text\n  canViewerComment: Boolean\n  canViewerLike: Boolean\n  comments(\n    after: ID\n    before: ID\n    first: Int\n    last: Int\n    orderby: String\n  ): CommentsConnection\n  doesViewerLike: Boolean\n  emailAddresses: [String]\n  feedback: Feedback\n  firstName(if: Boolean, unless: Boolean): String\n  friends(\n    after: ID\n    before: ID\n    first: Int\n    last: Int\n    orderby: [String]\n    find: String\n    isViewerFriend: Boolean\n    if: Boolean\n    unless: Boolean\n    traits: [PersonalityTraits]\n  ): FriendsConnection\n  hometown: Page\n  id: ID!\n  lastName: String\n  likers(first: Int): LikersOfContentConnection\n  likeSentence: Text\n  message: Text\n  name: String\n  profilePicture(size: [Int], preset: PhotoSize): Image\n  segments(first: Int): Segments\n  screennames: [Screenname]\n  subscribeStatus: String\n  subscribers(first: Int): SubscribersConnection\n  topLevelComments(first: Int): TopLevelCommentsConnection\n  tracking: String\n  url(relative: Boolean, site: String): String\n  websites: [String]\n  username: String\n  viewerSavedState: String\n}\n\ntype StoryAttachment {\n  cache_id: ID!\n  target: Story\n  styleList: [String]\n}\n\ntype StreetAddress {\n  city: String\n  country: String\n  postal_code: String\n  street: String\n}\n\ntype SubscribersConnection {\n  count: Int\n  edges: [FriendsEdge]\n  pageInfo: PageInfo\n}\n\ntype SubscribersEdge {\n  cursor: String\n  node: User\n  source: User\n}\n\ntype Text {\n  text: String\n  ranges: [String]\n}\n\ntype TimezoneInfo {\n  timezone: String\n}\n\ntype TopLevelCommentsConnection {\n  count: Int\n  edges: [CommentsEdge]\n  pageInfo: PageInfo\n  totalCount: Int\n}\n\ninput UnfriendInput {\n  friendId: ID\n}\n\ntype UnfriendResponsePayload {\n  actor: Actor\n  formerFriend: User\n}\n\nscalar JSDependency\n\ninterface HasJsField {\n  js(module: String!, id: String, branch: String): JSDependency\n}\n\ntype PlainUserNameRenderer implements HasJsField & UserNameRenderable {\n  plaintext: String\n  data: PlainUserNameData\n  user: User\n  js(module: String!, id: String, branch: String): JSDependency\n  name: String\n}\n\ntype PlainUserNameData {\n  id: ID\n  text: String\n}\n\ntype MarkdownUserNameRenderer implements HasJsField & UserNameRenderable {\n  markdown: String\n  data: MarkdownUserNameData\n  user: User\n  js(module: String!, id: String, branch: String): JSDependency\n  name: String\n}\n\ntype MarkdownUserNameData {\n  id: ID\n  markup: String\n}\n\ntype CustomNameRenderer {\n  customField: String\n  user: User\n}\n\ntype PlainUserRenderer {\n  user: User\n  js(module: String!, id: String, branch: String): JSDependency\n}\n\nunion UserNameRenderer =\n    PlainUserNameRenderer\n  | MarkdownUserNameRenderer\n  | CustomNameRenderer\n\ninterface UserNameRenderable {\n  name: String\n}\n\ninterface ImplementsUserNameRenderable implements UserNameRenderable {\n  name: String\n}\n\ntype ImplementsImplementsUserNameRenderable implements ImplementsUserNameRenderable {\n  name: String\n}\n\ntype ImplementsImplementsUserNameRenderableAndUserNameRenderable implements ImplementsUserNameRenderable & UserNameRenderable {\n  name: String\n}\n\ninput ProfilePictureOptions {\n  name: String\n}\n\ninput ProfilePictureOptions {\n  newName: String\n}\n  canViewerLike: Boolean\n  checkins(environments: [Environment!]!): CheckinSearchResult\n  comments(\n    after: ID\n    before: ID\n    first: Int\n    last: Int\n    orderby: String\n  ): CommentsConnection\n  doesViewerLike: Boolean\n  emailAddresses: [String]\n  environment: Environment\n  feedback: Feedback\n  firstName(if: Boolean, unless: Boolean): String\n  friends(\n    after: ID\n    before: ID\n    first: Int\n    last: Int\n    orderby: [String]\n    named: String\n    scale: Float\n    find: String\n    isViewerFriend: Boolean\n    if: Boolean\n    unless: Boolean\n    traits: [PersonalityTraits]\n  ): FriendsConnection\n  hometown: Page\n  id: ID!\n  js(module: String!, id: String, branch: String): JSDependency\n  lastName: String\n  likers(first: Int): LikersOfContentConnection\n  likeSentence: Text\n  message: Text\n  """\n  The user\'s name (first, last)\n  """\n  name: String\n  alternate_name: String\n  nameRenderable(supported: [String!]): UserNameRenderable\n  nameRenderer(supported: [String!]): UserNameRenderer\n  nameRendererForContext(\n    context: NameRendererContext\n    supported: [String!]!\n  ): UserNameRenderer\n  nameRenderers(supported: [String!]): [UserNameRenderer]\n  storySearch(query: StorySearchInput): [Story]\n  storyCommentSearch(query: StoryCommentSearchInput): [Comment]\n  profilePicture(size: [Int], preset: PhotoSize): Image\n  profile_picture(scale: Float, media_type: String): Image\n  segments(first: Int): Segments\n  screennames: [Screenname]\n  subscribeStatus: String\n  subscribers(first: Int): SubscribersConnection\n  tasks: [Task]\n  topLevelComments(first: Int): TopLevelCommentsConnection\n  tracking: String\n  traits: [PersonalityTraits]\n  url(relative: Boolean, site: String): String\n  websites: [String]\n  username: String\n  viewerSavedState: String\n  plainUserRenderer: PlainUserRenderer\n  profilePicture2(\n    size: [Int]\n    preset: PhotoSize\n    cropPosition: CropPosition\n    fileExtension: FileExtension\n    additionalParameters: JSON\n    options: ProfilePictureOptions\n  ): Image\n  neighbors: [User!]\n  nearest_neighbor: User!\n  parents: [User!]!\n  actor_key: ID!\n}\n\nenum NameRendererContext {\n  HEADER\n  OTHER\n}\n\ninput StorySearchInput {\n  text: String\n  limit: Int\n  offset: Int\n  type: StoryType\n}\n\ninput StoryCommentSearchInput {\n  text: String\n  limit: Int\n  offset: Int\n}\n\ntype ItemFilterResult {\n  date: String\n}\n\ninput ItemFilterInput {\n  date: String\n}\n\ntype Viewer {\n  configs(named: [String]): ConfigsConnection\n  account_user: User\n  actor: Actor\n  allTimezones: [TimezoneInfo]\n  isFbEmployee: Boolean\n  newsFeed(after: ID, first: Int, find: ID): NewsFeedConnection\n  notificationStories(after: ID, first: Int): NewsFeedConnection\n  pendingPosts(first: Int): PendingPostsConnection\n  primaryEmail: String\n  timezoneEstimate: TimezoneInfo\n  marketplace_explore(\n    marketplace_browse_context: MarketplaceBrowseContext\n    with_price_between: [Float]\n  ): MarketplaceExploreConnection\n  marketplace_settings: MarketPlaceSettings\n}\n\ntype MarketPlaceSettings {\n  location: MarketPlaceSellLocation\n  categories: [String]\n}\n\ntype MarketPlaceSellLocation {\n  longitude: Float\n  latitude: Float\n}\n\ntype MarketplaceExploreConnection {\n  count: Int\n}\n\ntype ViewerNotificationsUpdateAllSeenStateResponsePayload {\n  stories: [Story]\n}\n\nenum Environment {\n  WEB\n  MOBILE\n}\n\nenum MarketplaceBrowseContext {\n  BROWSE_FEED\n  CATEGORY_FEED\n}\n\nenum PhotoSize {\n  SMALL\n  LARGE\n}\n\nenum PersonalityTraits {\n  CHEERFUL\n  DERISIVE\n  HELPFUL\n  SNARKY\n}\n\nenum StoryType {\n  DIRECTED\n  UNDIRECTED\n}\n\nenum TopLevelCommentsOrdering {\n  chronological\n  ranked_threaded\n  recent_activity\n  toplevel\n}\n\nenum CropPosition {\n  TOP\n  CENTER\n  BOTTOM\n  LEFT\n  RIGHT\n}\n\nenum FileExtension {\n  JPG\n  PNG\n}\n\nenum TestEnums {\n  mark\n  zuck\n}\n\ntype Settings {\n  cache_id: ID\n  notificationSounds: Boolean\n  notifications(environment: Environment): Boolean\n}\n\ntype WithWrongViewer {\n  actor_key: Viewer\n}\n', 'message': 'Add interface that implements interface to test schema\n\nReviewed By: mofeiZ\n\nDifferential Revision: D34433508\n\nfbshipit-source-id: 13dc9c52926d29eb66b8828d4eb99e353f8df332\n', 'author_name': 'Facebook GitHub Bot', 'lang': 'graphql'}