{
  "scopeName": "source.apollo.connectors.graphql",
  "injectionSelector": "L:meta.embedded.block.directive.graphql -string -comment",
  "patterns": [
    {
      "include": "#connector-directive"
    }
  ],
  "repository": {
    "connector-directive": {
      "begin": "((@)\\s*(connect|source))",
      "end": "(?=.)",
      "applyEndPatternLast": 1,
      "beginCaptures": {
        "1": {
          "name": "entity.name.function.directive.connect.graphql"
        }
      },
      "patterns": [
        {
          "include": "#connector-arguments"
        },
        {
          "include": "source.graphql#graphql-comment"
        },
        {
          "include": "source.graphql#literal-quasi-embedded"
        },
        {
          "include": "source.graphql#graphql-skip-newlines"
        }
      ]
    },
    "connector-arguments": {
      "name": "meta.arguments.connect.graphql",
      "begin": "\\s*(\\()",
      "end": "\\s*(\\))",
      "beginCaptures": {
        "1": {
          "name": "meta.brace.round.directive.graphql"
        }
      },
      "endCaptures": {
        "1": {
          "name": "meta.brace.round.directive.graphql"
        }
      },
      "patterns": [
        {
          "include": "source.graphql#graphql-comment"
        },
        {
          "include": "#connector-connectors-mapping-argument"
        },
        {
          "include": "#connector-argument-http"
        },
        {
          "include": "#connector-string-connectors-mapping-argument"
        },
        {
          "include": "#graphql-argument"
        },
        {
          "include": "source.graphql#literal-quasi-embedded"
        }
      ]
    },
    "connector-connectors-mapping-argument": {
      "name": "meta.argument.connect.connectors.mapping.graphql",
      "begin": "\\s*(selection)\\s*(:)",
      "end": "(?=\\s*(?:([A-Z_a-z][0-9A-Z_a-z]*)\\s*(:)|\\)))|\\s*(,)",
      "beginCaptures": {
        "1": {
          "name": "variable.parameter.graphql"
        },
        "2": {
          "name": "punctuation.colon.graphql"
        }
      },
      "endCaptures": {
        "3": {
          "name": "punctuation.comma.graphql"
        }
      },
      "patterns": [
        {
          "contentName": "meta.embedded.block.connectors.mapping.graphql",
          "begin": "((\"\"\"))",
          "end": "((\"\"\"))",
          "beginCaptures": {
            "1": {
              "name": "string.quoted.double.graphql"
            },
            "2": {
              "name": "punctuation.definition.string.begin.graphql"
            }
          },
          "endCaptures": {
            "1": {
              "name": "string.quoted.double.graphql"
            },
            "2": {
              "name": "punctuation.definition.string.end.graphql"
            }
          },
          "patterns": [
            {
              "include": "source.apollo.connectors.mapping"
            }
          ]
        },
        {
          "contentName": "meta.embedded.line.connectors.mapping.graphql",
          "begin": "(?<!\")((\"))(?!\")",
          "end": "(?<!\")((\"))(?!\")",
          "beginCaptures": {
            "1": {
              "name": "string.quoted.double.graphql"
            },
            "2": {
              "name": "punctuation.definition.string.begin.graphql"
            }
          },
          "endCaptures": {
            "1": {
              "name": "string.quoted.double.graphql"
            },
            "2": {
              "name": "punctuation.definition.string.end.graphql"
            }
          },
          "patterns": [
            {
              "include": "source.apollo.connectors.mapping"
            }
          ]
        },
        {
          "include": "source.graphql#graphql-comment"
        },
        {
          "include": "source.graphql#graphql-skip-newlines"
        }
      ]
    },
    "connector-argument-http": {
      "name": "meta.argument.connect.http.graphql",
      "begin": "\\s*(http)\\s*(:)",
      "end": "(?=\\s*(?:([A-Z_a-z][0-9A-Z_a-z]*)\\s*(:)|\\)))|\\s*(,)",
      "beginCaptures": {
        "1": {
          "name": "variable.parameter.graphql"
        },
        "2": {
          "name": "punctuation.colon.graphql"
        }
      },
      "endCaptures": {
        "3": {
          "name": "punctuation.comma.graphql"
        }
      },
      "patterns": [
        {
          "include": "#http-object-value"
        },
        {
          "include": "source.graphql#graphql-comment"
        },
        {
          "include": "source.graphql#literal-quasi-embedded"
        }
      ]
    },
    "http-object-value": {
      "patterns": [
        {
          "name": "meta.objectvalues.connect.http.graphql",
          "begin": "\\s*(\\{)",
          "end": "\\s*(})",
          "beginCaptures": {
            "1": {
              "name": "meta.brace.curly.graphql"
            }
          },
          "endCaptures": {
            "1": {
              "name": "meta.brace.curly.graphql"
            }
          },
          "patterns": [
            {
              "include": "#connector-string-connectors-mapping-argument"
            },
            {
              "include": "#connector-array-connectors-mapping-headers"
            },
            {
              "include": "#http-object-connectors-mapping-property"
            },
            {
              "include": "source.graphql#graphql-object-field"
            },
            {
              "include": "source.graphql#graphql-value"
            }
          ]
        }
      ]
    },
    "http-object-connectors-mapping-property": {
      "patterns": [
        {
          "name": "meta.argument.connect.body.connectors.mapping.graphql",
          "contentName": "meta.embedded.block.connectors.mapping.graphql",
          "begin": "\\s*(body)\\s*(:)\\s*((\"\"\"))",
          "end": "((\"\"\"))",
          "beginCaptures": {
            "1": {
              "name": "variable.parameter.graphql"
            },
            "2": {
              "name": "punctuation.colon.graphql"
            },
            "3": {
              "name": "string.quoted.double.graphql"
            },
            "4": {
              "name": "punctuation.definition.string.begin.graphql"
            }
          },
          "endCaptures": {
            "1": {
              "name": "string.quoted.double.graphql"
            },
            "2": {
              "name": "punctuation.definition.string.end.graphql"
            }
          },
          "patterns": [
            {
              "include": "source.apollo.connectors.mapping"
            }
          ]
        },
        {
          "name": "meta.argument.connect.line.connectors.mapping.graphql",
          "contentName": "meta.embedded.line.connectors.mapping.graphql",
          "begin": "\\s*(body)\\s*(:)\\s*(?<!\")((\"))(?!\")",
          "end": "(?<!\")((\"))(?!\")",
          "beginCaptures": {
            "1": {
              "name": "variable.parameter.graphql"
            },
            "2": {
              "name": "punctuation.colon.graphql"
            },
            "3": {
              "name": "string.quoted.double.graphql"
            },
            "4": {
              "name": "punctuation.definition.string.begin.graphql"
            }
          },
          "endCaptures": {
            "1": {
              "name": "string.quoted.double.graphql"
            },
            "2": {
              "name": "punctuation.definition.string.end.graphql"
            }
          },
          "patterns": [
            {
              "include": "source.apollo.connectors.mapping"
            }
          ]
        }
      ]
    },
    "connector-array-connectors-mapping-headers": {
      "name": "meta.connect.headers",
      "begin": "\\s*((headers))\\s*(:)",
      "beginCaptures": {
        "1": {
          "name": "string.unquoted.graphql"
        },
        "2": {
          "name": "variable.object.key.graphql"
        }
      },
      "end": "(?<=])",
      "applyEndPatternLast": 1,
      "patterns": [
        {
          "name": "meta.listvalues.graphql",
          "begin": "(\\[)",
          "end": "(])",
          "beginCaptures": {
            "1": {
              "name": "meta.brace.square.graphql"
            }
          },
          "endCaptures": {
            "1": {
              "name": "meta.brace.square.graphql"
            }
          },
          "patterns": [
            {
              "name": "meta.objectvalues.graphql",
              "begin": "\\s*(\\{)",
              "end": "\\s*(})",
              "beginCaptures": {
                "1": {
                  "name": "meta.brace.curly.graphql"
                }
              },
              "endCaptures": {
                "1": {
                  "name": "meta.brace.curly.graphql"
                }
              },
              "patterns": [
                {
                  "begin": "(\\w+)\\s*(:)",
                  "end": "(?=\\s*(?:([A-Z_a-z][0-9A-Z_a-z]*)\\s*(:)|[)}]))|\\s*(,)",
                  "beginCaptures": {
                    "1": {
                      "name": "variable.object.key.graphql"
                    },
                    "2": {
                      "name": "punctuation.graphql"
                    }
                  },
                  "patterns": [
                    {
                      "include": "source.apollo.connectors.mapping#JSONSelectionString"
                    },
                    {
                      "include": "source.graphql#graphql-comment"
                    },
                    {
                      "include": "source.graphql#graphql-skip-newlines"
                    }
                  ]
                },
                {
                  "include": "source.graphql#graphql-comment"
                },
                {
                  "include": "source.graphql#graphql-skip-newlines"
                }
              ]
            },
            {
              "include": "source.graphql#graphql-comment"
            },
            {
              "include": "source.graphql#graphql-skip-newlines"
            }
          ]
        }
      ]
    },
    "connector-string-connectors-mapping-argument": {
      "name": "meta.argument.connect.string.connectors.mapping.graphql",
      "contentName": "meta.embedded.string.connectors.mapping.graphql",
      "begin": "\\s*(GET|POST|PUT|PATCH|DELETE)\\s*(:)",
      "end": "(?=\\s*(?:([A-Z_a-z][0-9A-Z_a-z]*)\\s*(:)|[)}]))|\\s*(,)",
      "beginCaptures": {
        "1": {
          "name": "variable.parameter.graphql"
        },
        "2": {
          "name": "punctuation.colon.graphql"
        }
      },
      "endCaptures": {
        "3": {
          "name": "punctuation.comma.graphql"
        }
      },
      "patterns": [
        {
          "include": "source.apollo.connectors.mapping#JSONSelectionString"
        },
        {
          "include": "source.graphql#graphql-comment"
        },
        {
          "include": "source.graphql#graphql-skip-newlines"
        }
      ]
    },
    "graphql-argument": {
      "begin": "\\s*([A-Z_a-z][0-9A-Z_a-z]*)\\s*(:)",
      "end": "(?=\\s*(?:([A-Z_a-z][0-9A-Z_a-z]*)\\s*(:)|\\)))|\\s*(,)",
      "beginCaptures": {
        "1": {
          "name": "variable.parameter.graphql"
        },
        "2": {
          "name": "punctuation.colon.graphql"
        }
      },
      "endCaptures": {
        "3": {
          "name": "punctuation.comma.graphql"
        }
      },
      "patterns": [
        {
          "include": "source.graphql#graphql-value"
        },
        {
          "include": "source.graphql#graphql-comment"
        },
        {
          "include": "source.graphql#graphql-skip-newlines"
        }
      ]
    }
  }
}
