// This file has been auto generated. using System; using System.Collections; using System.Collections.Generic; using System.ComponentModel; using System.Globalization; using System.Linq; using System.Reflection; using System.Runtime.Serialization; using System.Text; using System.Text.RegularExpressions; #if !GRAPHQL_GENERATOR_DISABLE_NEWTONSOFT_JSON using Newtonsoft.Json; using Newtonsoft.Json.Linq; #endif namespace Dagger { #region base classes public struct GraphQlFieldMetadata { public string Name { get; set; } public string DefaultAlias { get; set; } public bool IsComplex { get; set; } public Type QueryBuilderType { get; set; } } public enum Formatting { None, Indented } public class GraphQlObjectTypeAttribute : global::System.Attribute { public string TypeName { get; } public GraphQlObjectTypeAttribute(string typeName) => TypeName = typeName; } #if !GRAPHQL_GENERATOR_DISABLE_NEWTONSOFT_JSON public class QueryBuilderParameterConverter : global::Newtonsoft.Json.JsonConverter { public override object ReadJson(JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer) { switch (reader.TokenType) { case JsonToken.Null: return null; default: return (QueryBuilderParameter)(T)serializer.Deserialize(reader, typeof(T)); } } public override void WriteJson(JsonWriter writer, object value, JsonSerializer serializer) { if (value == null) writer.WriteNull(); else serializer.Serialize(writer, ((QueryBuilderParameter)value).Value, typeof(T)); } public override bool CanConvert(Type objectType) => objectType.IsSubclassOf(typeof(QueryBuilderParameter)); } public class GraphQlInterfaceJsonConverter : global::Newtonsoft.Json.JsonConverter { private const string FieldNameType = "__typename"; private static readonly Dictionary InterfaceTypeMapping = typeof(GraphQlInterfaceJsonConverter).Assembly.GetTypes() .Select(t => new { Type = t, Attribute = t.GetCustomAttribute() }) .Where(x => x.Attribute != null && x.Type.Namespace == typeof(GraphQlInterfaceJsonConverter).Namespace) .ToDictionary(x => x.Attribute.TypeName, x => x.Type); public override bool CanConvert(Type objectType) => objectType.IsInterface || objectType.IsArray; public override object ReadJson(JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer) { while (reader.TokenType == JsonToken.Comment) reader.Read(); switch (reader.TokenType) { case JsonToken.Null: return null; case JsonToken.StartObject: var jObject = JObject.Load(reader); if (!jObject.TryGetValue(FieldNameType, out var token) || token.Type != JTokenType.String) throw CreateJsonReaderException(reader, $"\"{GetType().FullName}\" requires JSON object to contain \"{FieldNameType}\" field with type name"); var typeName = token.Value(); if (!InterfaceTypeMapping.TryGetValue(typeName, out var type)) throw CreateJsonReaderException(reader, $"type \"{typeName}\" not found"); using (reader = CloneReader(jObject, reader)) return serializer.Deserialize(reader, type); case JsonToken.StartArray: var elementType = GetElementType(objectType); if (elementType == null) throw CreateJsonReaderException(reader, $"array element type could not be resolved for type \"{objectType.FullName}\""); return ReadArray(reader, objectType, elementType, serializer); default: throw CreateJsonReaderException(reader, $"unrecognized token: {reader.TokenType}"); } } public override void WriteJson(JsonWriter writer, object value, JsonSerializer serializer) => serializer.Serialize(writer, value); private static JsonReader CloneReader(JToken jToken, JsonReader reader) { var jObjectReader = jToken.CreateReader(); jObjectReader.Culture = reader.Culture; jObjectReader.CloseInput = reader.CloseInput; jObjectReader.SupportMultipleContent = reader.SupportMultipleContent; jObjectReader.DateTimeZoneHandling = reader.DateTimeZoneHandling; jObjectReader.FloatParseHandling = reader.FloatParseHandling; jObjectReader.DateFormatString = reader.DateFormatString; jObjectReader.DateParseHandling = reader.DateParseHandling; return jObjectReader; } private static JsonReaderException CreateJsonReaderException(JsonReader reader, string message) { if (reader is IJsonLineInfo lineInfo && lineInfo.HasLineInfo()) return new JsonReaderException(message, reader.Path, lineInfo.LineNumber, lineInfo.LinePosition, null); return new JsonReaderException(message); } private static Type GetElementType(Type arrayOrGenericContainer) => arrayOrGenericContainer.IsArray ? arrayOrGenericContainer.GetElementType() : arrayOrGenericContainer.GenericTypeArguments.FirstOrDefault(); private IList ReadArray(JsonReader reader, Type targetType, Type elementType, JsonSerializer serializer) { var list = CreateCompatibleList(targetType, elementType); while (reader.Read() && reader.TokenType != JsonToken.EndArray) list.Add(ReadJson(reader, elementType, null, serializer)); if (!targetType.IsArray) return list; var array = Array.CreateInstance(elementType, list.Count); list.CopyTo(array, 0); return array; } private static IList CreateCompatibleList(Type targetContainerType, Type elementType) => (IList)Activator.CreateInstance(targetContainerType.IsArray || targetContainerType.IsAbstract ? typeof(List<>).MakeGenericType(elementType) : targetContainerType); } #endif internal static class GraphQlQueryHelper { private static readonly Regex RegexWhiteSpace = new Regex(@"\s", RegexOptions.Compiled); private static readonly Regex RegexGraphQlIdentifier = new Regex(@"^[_A-Za-z][_0-9A-Za-z]*$", RegexOptions.Compiled); public static string GetIndentation(int level, byte indentationSize) { return new String(' ', level * indentationSize); } public static string BuildArgumentValue(object value, string formatMask, Formatting formatting, int level, byte indentationSize) { if (value is null) return "null"; #if !GRAPHQL_GENERATOR_DISABLE_NEWTONSOFT_JSON if (value is JValue jValue) { switch (jValue.Type) { case JTokenType.Null: return "null"; case JTokenType.Integer: case JTokenType.Float: case JTokenType.Boolean: return BuildArgumentValue(jValue.Value, null, formatting, level, indentationSize); case JTokenType.String: return "\"" + ((string)jValue.Value).Replace("\"", "\\\"") + "\""; default: return "\"" + jValue.Value + "\""; } } if (value is JProperty jProperty) { if (RegexWhiteSpace.IsMatch(jProperty.Name)) throw new ArgumentException($"JSON object keys used as GraphQL arguments must not contain whitespace; key: {jProperty.Name}"); return $"{jProperty.Name}:{(formatting == Formatting.Indented ? " " : null)}{BuildArgumentValue(jProperty.Value, null, formatting, level, indentationSize)}"; } if (value is JObject jObject) return BuildEnumerableArgument(jObject, null, formatting, level + 1, indentationSize, '{', '}'); #endif var enumerable = value as IEnumerable; if (!String.IsNullOrEmpty(formatMask) && enumerable == null) return value is IFormattable formattable ? "\"" + formattable.ToString(formatMask, CultureInfo.InvariantCulture) + "\"" : throw new ArgumentException($"Value must implement {nameof(IFormattable)} interface to use a format mask. ", nameof(value)); if (value is Enum @enum) return ConvertEnumToString(@enum); if (value is bool @bool) return @bool ? "true" : "false"; if (value is DateTime dateTime) return "\"" + dateTime.ToString("O") + "\""; if (value is DateTimeOffset dateTimeOffset) return "\"" + dateTimeOffset.ToString("O") + "\""; if (value is IGraphQlInputObject inputObject) return BuildInputObject(inputObject, formatting, level + 2, indentationSize); if (value is Guid) return "\"" + value + "\""; if (value is String @string) return "\"" + @string.Replace("\"", "\\\"") + "\""; if (enumerable != null) return BuildEnumerableArgument(enumerable, formatMask, formatting, level, indentationSize, '[', ']'); if (value is short || value is ushort || value is byte || value is int || value is uint || value is long || value is ulong || value is float || value is double || value is decimal) return Convert.ToString(value, CultureInfo.InvariantCulture); var argumentValue = Convert.ToString(value, CultureInfo.InvariantCulture); return "\"" + argumentValue + "\""; } private static string BuildEnumerableArgument(IEnumerable enumerable, string formatMask, Formatting formatting, int level, byte indentationSize, char openingSymbol, char closingSymbol) { var builder = new StringBuilder(); builder.Append(openingSymbol); var delimiter = String.Empty; foreach (var item in enumerable) { builder.Append(delimiter); if (formatting == Formatting.Indented) { builder.AppendLine(); builder.Append(GetIndentation(level + 1, indentationSize)); } builder.Append(BuildArgumentValue(item, formatMask, formatting, level, indentationSize)); delimiter = ","; } builder.Append(closingSymbol); return builder.ToString(); } public static string BuildInputObject(IGraphQlInputObject inputObject, Formatting formatting, int level, byte indentationSize) { var builder = new StringBuilder(); builder.Append("{"); var isIndentedFormatting = formatting == Formatting.Indented; string valueSeparator; if (isIndentedFormatting) { builder.AppendLine(); valueSeparator = ": "; } else valueSeparator = ":"; var separator = String.Empty; foreach (var propertyValue in inputObject.GetPropertyValues()) { var queryBuilderParameter = propertyValue.Value as QueryBuilderParameter; var value = queryBuilderParameter?.Name != null ? "$" + queryBuilderParameter.Name : BuildArgumentValue(queryBuilderParameter == null ? propertyValue.Value : queryBuilderParameter.Value, propertyValue.FormatMask, formatting, level, indentationSize); builder.Append(isIndentedFormatting ? GetIndentation(level, indentationSize) : separator); builder.Append(propertyValue.Name); builder.Append(valueSeparator); builder.Append(value); separator = ","; if (isIndentedFormatting) builder.AppendLine(); } if (isIndentedFormatting) builder.Append(GetIndentation(level - 1, indentationSize)); builder.Append("}"); return builder.ToString(); } public static string BuildDirective(GraphQlDirective directive, Formatting formatting, int level, byte indentationSize) { if (directive == null) return String.Empty; var isIndentedFormatting = formatting == Formatting.Indented; var indentationSpace = isIndentedFormatting ? " " : String.Empty; var builder = new StringBuilder(); builder.Append(indentationSpace); builder.Append("@"); builder.Append(directive.Name); builder.Append("("); string separator = null; foreach (var kvp in directive.Arguments) { var argumentName = kvp.Key; var argument = kvp.Value; builder.Append(separator); builder.Append(argumentName); builder.Append(":"); builder.Append(indentationSpace); if (argument.Name == null) builder.Append(BuildArgumentValue(argument.Value, null, formatting, level, indentationSize)); else { builder.Append("$"); builder.Append(argument.Name); } separator = isIndentedFormatting ? ", " : ","; } builder.Append(")"); return builder.ToString(); } public static void ValidateGraphQlIdentifier(string name, string identifier) { if (identifier != null && !RegexGraphQlIdentifier.IsMatch(identifier)) throw new ArgumentException("value must match " + RegexGraphQlIdentifier, name); } private static string ConvertEnumToString(Enum @enum) { var enumMember = @enum.GetType().GetField(@enum.ToString()); if (enumMember == null) throw new InvalidOperationException("enum member resolution failed"); var enumMemberAttribute = (EnumMemberAttribute)enumMember.GetCustomAttribute(typeof(EnumMemberAttribute)); return enumMemberAttribute == null ? @enum.ToString() : enumMemberAttribute.Value; } } internal struct InputPropertyInfo { public string Name { get; set; } public object Value { get; set; } public string FormatMask { get; set; } } internal interface IGraphQlInputObject { IEnumerable GetPropertyValues(); } public interface IGraphQlQueryBuilder { void Clear(); void IncludeAllFields(); string Build(Formatting formatting = Formatting.None, byte indentationSize = 2); } public struct QueryBuilderArgumentInfo { public string ArgumentName { get; set; } public QueryBuilderParameter ArgumentValue { get; set; } public string FormatMask { get; set; } } public abstract class QueryBuilderParameter { private string _name; internal string GraphQlTypeName { get; } internal object Value { get; set; } public string Name { get => _name; set { GraphQlQueryHelper.ValidateGraphQlIdentifier(nameof(Name), value); _name = value; } } protected QueryBuilderParameter(string name, string graphQlTypeName, object value) { Name = name?.Trim(); GraphQlTypeName = graphQlTypeName?.Replace(" ", null).Replace("\t", null).Replace("\n", null).Replace("\r", null); Value = value; } protected QueryBuilderParameter(object value) => Value = value; } public class QueryBuilderParameter : QueryBuilderParameter { public new T Value { get => base.Value == null ? default : (T)base.Value; set => base.Value = value; } protected QueryBuilderParameter(string name, string graphQlTypeName, T value) : base(name, graphQlTypeName, value) { EnsureGraphQlTypeName(graphQlTypeName); } protected QueryBuilderParameter(string name, string graphQlTypeName) : base(name, graphQlTypeName, null) { EnsureGraphQlTypeName(graphQlTypeName); } private QueryBuilderParameter(T value) : base(value) { } public void ResetValue() => base.Value = null; public static implicit operator QueryBuilderParameter(T value) => new QueryBuilderParameter(value); public static implicit operator T(QueryBuilderParameter parameter) => parameter.Value; private static void EnsureGraphQlTypeName(string graphQlTypeName) { if (String.IsNullOrWhiteSpace(graphQlTypeName)) throw new ArgumentException("value required", nameof(graphQlTypeName)); } } public class GraphQlQueryParameter : QueryBuilderParameter { private string _formatMask; public string FormatMask { get => _formatMask; set => _formatMask = typeof(IFormattable).IsAssignableFrom(typeof(T)) ? value : throw new InvalidOperationException($"Value must be of {nameof(IFormattable)} type. "); } public GraphQlQueryParameter(string name, string graphQlTypeName = null) : base(name, graphQlTypeName ?? GetGraphQlTypeName(typeof(T))) { } public GraphQlQueryParameter(string name, string graphQlTypeName, T defaultValue) : base(name, graphQlTypeName, defaultValue) { } public GraphQlQueryParameter(string name, T defaultValue, bool isNullable = true) : base(name, GetGraphQlTypeName(typeof(T), isNullable), defaultValue) { } private static string GetGraphQlTypeName(Type valueType, bool isNullable) { var graphQlTypeName = GetGraphQlTypeName(valueType); if (!isNullable) graphQlTypeName += "!"; return graphQlTypeName; } private static string GetGraphQlTypeName(Type valueType) { var nullableUnderlyingType = Nullable.GetUnderlyingType(valueType); valueType = nullableUnderlyingType ?? valueType; if (valueType.IsArray) { var arrayItemType = GetGraphQlTypeName(valueType.GetElementType()); return arrayItemType == null ? null : "[" + arrayItemType + "]"; } if (typeof(IEnumerable).IsAssignableFrom(valueType)) { var genericArguments = valueType.GetGenericArguments(); if (genericArguments.Length == 1) { var listItemType = GetGraphQlTypeName(valueType.GetGenericArguments()[0]); return listItemType == null ? null : "[" + listItemType + "]"; } } if (GraphQlTypes.ReverseMapping.TryGetValue(valueType, out var graphQlTypeName)) return graphQlTypeName; if (valueType == typeof(string)) return "String"; var nullableSuffix = nullableUnderlyingType == null ? null : "?"; graphQlTypeName = GetValueTypeGraphQlTypeName(valueType); return graphQlTypeName == null ? null : graphQlTypeName + nullableSuffix; } private static string GetValueTypeGraphQlTypeName(Type valueType) { if (valueType == typeof(bool)) return "Boolean"; if (valueType == typeof(float) || valueType == typeof(double) || valueType == typeof(decimal)) return "Float"; if (valueType == typeof(Guid)) return "ID"; if (valueType == typeof(sbyte) || valueType == typeof(byte) || valueType == typeof(short) || valueType == typeof(ushort) || valueType == typeof(int) || valueType == typeof(uint) || valueType == typeof(long) || valueType == typeof(ulong)) return "Int"; return null; } } public abstract class GraphQlDirective { private readonly Dictionary _arguments = new Dictionary(); internal IEnumerable> Arguments => _arguments; public string Name { get; } protected GraphQlDirective(string name) { GraphQlQueryHelper.ValidateGraphQlIdentifier(nameof(name), name); Name = name; } protected void AddArgument(string name, QueryBuilderParameter value) { if (value != null) _arguments[name] = value; } } public abstract class GraphQlQueryBuilder : IGraphQlQueryBuilder { private readonly Dictionary _fieldCriteria = new Dictionary(); private readonly string _operationType; private readonly string _operationName; private Dictionary _fragments; private List _queryParameters; protected abstract string TypeName { get; } public abstract IReadOnlyList AllFields { get; } protected GraphQlQueryBuilder(string operationType, string operationName) { GraphQlQueryHelper.ValidateGraphQlIdentifier(nameof(operationName), operationName); _operationType = operationType; _operationName = operationName; } public virtual void Clear() { _fieldCriteria.Clear(); _fragments?.Clear(); _queryParameters?.Clear(); } void IGraphQlQueryBuilder.IncludeAllFields() { IncludeAllFields(); } public string Build(Formatting formatting = Formatting.None, byte indentationSize = 2) { return Build(formatting, 1, indentationSize); } protected void IncludeAllFields() { IncludeFields(AllFields); } protected virtual string Build(Formatting formatting, int level, byte indentationSize) { var isIndentedFormatting = formatting == Formatting.Indented; var separator = String.Empty; var indentationSpace = isIndentedFormatting ? " " : String.Empty; var builder = new StringBuilder(); if (!String.IsNullOrEmpty(_operationType)) { builder.Append(_operationType); if (!String.IsNullOrEmpty(_operationName)) { builder.Append(" "); builder.Append(_operationName); } if (_queryParameters?.Count > 0) { builder.Append(indentationSpace); builder.Append("("); foreach (var queryParameterInfo in _queryParameters) { if (isIndentedFormatting) { builder.AppendLine(separator); builder.Append(GraphQlQueryHelper.GetIndentation(level, indentationSize)); } else builder.Append(separator); builder.Append("$"); builder.Append(queryParameterInfo.ArgumentValue.Name); builder.Append(":"); builder.Append(indentationSpace); builder.Append(queryParameterInfo.ArgumentValue.GraphQlTypeName); if (!queryParameterInfo.ArgumentValue.GraphQlTypeName.EndsWith("!") && queryParameterInfo.ArgumentValue.Value is not null) { builder.Append(indentationSpace); builder.Append("="); builder.Append(indentationSpace); builder.Append(GraphQlQueryHelper.BuildArgumentValue(queryParameterInfo.ArgumentValue.Value, queryParameterInfo.FormatMask, formatting, 0, indentationSize)); } separator = ","; } builder.Append(")"); } } builder.Append(indentationSpace); builder.Append("{"); if (isIndentedFormatting) builder.AppendLine(); separator = String.Empty; foreach (var criteria in _fieldCriteria.Values.Concat(_fragments?.Values ?? Enumerable.Empty())) { var fieldCriteria = criteria.Build(formatting, level, indentationSize); if (isIndentedFormatting) builder.AppendLine(fieldCriteria); else if (!String.IsNullOrEmpty(fieldCriteria)) { builder.Append(separator); builder.Append(fieldCriteria); } separator = ","; } if (isIndentedFormatting) builder.Append(GraphQlQueryHelper.GetIndentation(level - 1, indentationSize)); builder.Append("}"); return builder.ToString(); } protected void IncludeScalarField(string fieldName, string alias, IList args, GraphQlDirective[] directives) { _fieldCriteria[alias ?? fieldName] = new GraphQlScalarFieldCriteria(fieldName, alias, args, directives); } protected void IncludeObjectField(string fieldName, string alias, GraphQlQueryBuilder objectFieldQueryBuilder, IList args, GraphQlDirective[] directives) { _fieldCriteria[alias ?? fieldName] = new GraphQlObjectFieldCriteria(fieldName, alias, objectFieldQueryBuilder, args, directives); } protected void IncludeFragment(GraphQlQueryBuilder objectFieldQueryBuilder, GraphQlDirective[] directives) { _fragments = _fragments ?? new Dictionary(); _fragments[objectFieldQueryBuilder.TypeName] = new GraphQlFragmentCriteria(objectFieldQueryBuilder, directives); } protected void ExcludeField(string fieldName) { if (fieldName == null) throw new ArgumentNullException(nameof(fieldName)); _fieldCriteria.Remove(fieldName); } protected void IncludeFields(IEnumerable fields) { IncludeFields(fields, null); } private void IncludeFields(IEnumerable fields, List parentTypes) { foreach (var field in fields) { if (field.QueryBuilderType == null) IncludeScalarField(field.Name, field.DefaultAlias, null, null); else { var builderType = GetType(); if (parentTypes != null && parentTypes.Any(t => t.IsAssignableFrom(field.QueryBuilderType))) continue; parentTypes?.Add(builderType); var queryBuilder = InitializeChildBuilder(builderType, field.QueryBuilderType, parentTypes); var includeFragmentMethods = field.QueryBuilderType.GetMethods().Where(IsIncludeFragmentMethod); foreach (var includeFragmentMethod in includeFragmentMethods) includeFragmentMethod.Invoke(queryBuilder, new object[] { InitializeChildBuilder(builderType, includeFragmentMethod.GetParameters()[0].ParameterType, parentTypes) }); IncludeObjectField(field.Name, field.DefaultAlias, queryBuilder, null, null); } } } private static GraphQlQueryBuilder InitializeChildBuilder(Type parentQueryBuilderType, Type queryBuilderType, List parentTypes) { var queryBuilder = (GraphQlQueryBuilder)Activator.CreateInstance(queryBuilderType); queryBuilder.IncludeFields(queryBuilder.AllFields, parentTypes ?? new List { parentQueryBuilderType }); return queryBuilder; } private static bool IsIncludeFragmentMethod(MethodInfo methodInfo) { if (!methodInfo.Name.StartsWith("With") || !methodInfo.Name.EndsWith("Fragment")) return false; var parameters = methodInfo.GetParameters(); return parameters.Length == 1 && parameters[0].ParameterType.IsSubclassOf(typeof(GraphQlQueryBuilder)); } protected void AddParameter(GraphQlQueryParameter parameter) { if (_queryParameters == null) _queryParameters = new List(); _queryParameters.Add(new QueryBuilderArgumentInfo { ArgumentValue = parameter, FormatMask = parameter.FormatMask }); } private abstract class GraphQlFieldCriteria { private readonly IList _args; private readonly GraphQlDirective[] _directives; protected readonly string FieldName; protected readonly string Alias; protected static string GetIndentation(Formatting formatting, int level, byte indentationSize) => formatting == Formatting.Indented ? GraphQlQueryHelper.GetIndentation(level, indentationSize) : null; protected GraphQlFieldCriteria(string fieldName, string alias, IList args, GraphQlDirective[] directives) { GraphQlQueryHelper.ValidateGraphQlIdentifier(nameof(alias), alias); FieldName = fieldName; Alias = alias; _args = args; _directives = directives; } public abstract string Build(Formatting formatting, int level, byte indentationSize); protected string BuildArgumentClause(Formatting formatting, int level, byte indentationSize) { var separator = formatting == Formatting.Indented ? " " : null; var argumentCount = _args?.Count ?? 0; if (argumentCount == 0) return String.Empty; var arguments = _args.Select( a => $"{a.ArgumentName}:{separator}{(a.ArgumentValue.Name == null ? GraphQlQueryHelper.BuildArgumentValue(a.ArgumentValue.Value, a.FormatMask, formatting, level, indentationSize) : "$" + a.ArgumentValue.Name)}"); return $"({String.Join($",{separator}", arguments)})"; } protected string BuildDirectiveClause(Formatting formatting, int level, byte indentationSize) => _directives == null ? null : String.Concat(_directives.Select(d => d == null ? null : GraphQlQueryHelper.BuildDirective(d, formatting, level, indentationSize))); protected static string BuildAliasPrefix(string alias, Formatting formatting) { var separator = formatting == Formatting.Indented ? " " : String.Empty; return String.IsNullOrWhiteSpace(alias) ? null : alias + ':' + separator; } } private class GraphQlScalarFieldCriteria : GraphQlFieldCriteria { public GraphQlScalarFieldCriteria(string fieldName, string alias, IList args, GraphQlDirective[] directives) : base(fieldName, alias, args, directives) { } public override string Build(Formatting formatting, int level, byte indentationSize) => GetIndentation(formatting, level, indentationSize) + BuildAliasPrefix(Alias, formatting) + FieldName + BuildArgumentClause(formatting, level, indentationSize) + BuildDirectiveClause(formatting, level, indentationSize); } private class GraphQlObjectFieldCriteria : GraphQlFieldCriteria { private readonly GraphQlQueryBuilder _objectQueryBuilder; public GraphQlObjectFieldCriteria(string fieldName, string alias, GraphQlQueryBuilder objectQueryBuilder, IList args, GraphQlDirective[] directives) : base(fieldName, alias, args, directives) { _objectQueryBuilder = objectQueryBuilder; } public override string Build(Formatting formatting, int level, byte indentationSize) => _objectQueryBuilder._fieldCriteria.Count > 0 || _objectQueryBuilder._fragments?.Count > 0 ? GetIndentation(formatting, level, indentationSize) + BuildAliasPrefix(Alias, formatting) + FieldName + BuildArgumentClause(formatting, level, indentationSize) + BuildDirectiveClause(formatting, level, indentationSize) + _objectQueryBuilder.Build(formatting, level + 1, indentationSize) : null; } private class GraphQlFragmentCriteria : GraphQlFieldCriteria { private readonly GraphQlQueryBuilder _objectQueryBuilder; public GraphQlFragmentCriteria(GraphQlQueryBuilder objectQueryBuilder, GraphQlDirective[] directives) : base(objectQueryBuilder.TypeName, null, null, directives) { _objectQueryBuilder = objectQueryBuilder; } public override string Build(Formatting formatting, int level, byte indentationSize) => _objectQueryBuilder._fieldCriteria.Count == 0 ? null : GetIndentation(formatting, level, indentationSize) + "..." + (formatting == Formatting.Indented ? " " : null) + "on " + FieldName + BuildArgumentClause(formatting, level, indentationSize) + BuildDirectiveClause(formatting, level, indentationSize) + _objectQueryBuilder.Build(formatting, level + 1, indentationSize); } } public abstract class GraphQlQueryBuilder : GraphQlQueryBuilder where TQueryBuilder : GraphQlQueryBuilder { protected GraphQlQueryBuilder(string operationType = null, string operationName = null) : base(operationType, operationName) { } public TQueryBuilder WithAllFields() { IncludeAllFields(); return (TQueryBuilder)this; } public TQueryBuilder WithAllScalarFields() { IncludeFields(AllFields.Where(f => !f.IsComplex)); return (TQueryBuilder)this; } public TQueryBuilder ExceptField(string fieldName) { ExcludeField(fieldName); return (TQueryBuilder)this; } public TQueryBuilder WithTypeName(string alias = null, params GraphQlDirective[] directives) { IncludeScalarField("__typename", alias, null, directives); return (TQueryBuilder)this; } protected TQueryBuilder WithScalarField(string fieldName, string alias, GraphQlDirective[] directives, IList args = null) { IncludeScalarField(fieldName, alias, args, directives); return (TQueryBuilder)this; } protected TQueryBuilder WithObjectField(string fieldName, string alias, GraphQlQueryBuilder queryBuilder, GraphQlDirective[] directives, IList args = null) { IncludeObjectField(fieldName, alias, queryBuilder, args, directives); return (TQueryBuilder)this; } protected TQueryBuilder WithFragment(GraphQlQueryBuilder queryBuilder, GraphQlDirective[] directives) { IncludeFragment(queryBuilder, directives); return (TQueryBuilder)this; } protected TQueryBuilder WithParameterInternal(GraphQlQueryParameter parameter) { AddParameter(parameter); return (TQueryBuilder)this; } } public abstract class GraphQlResponse { public TDataContract Data { get; set; } public ICollection Errors { get; set; } } public class GraphQlQueryError { public string Message { get; set; } public ICollection Locations { get; set; } } public class GraphQlErrorLocation { public int Line { get; set; } public int Column { get; set; } } #endregion #region GraphQL type helpers public static class GraphQlTypes { public const string Boolean = "Boolean"; public const string CacheId = "CacheID"; public const string ContainerId = "ContainerID"; public const string DateTime = "DateTime"; public const string DirectoryId = "DirectoryID"; public const string FileId = "FileID"; public const string Float = "Float"; public const string Id = "ID"; public const string Int = "Int"; public const string Platform = "Platform"; public const string SecretId = "SecretID"; public const string String = "String"; public const string CacheVolume = "CacheVolume"; public const string Container = "Container"; public const string Directory = "Directory"; public const string EnvVariable = "EnvVariable"; public const string File = "File"; public const string GitRef = "GitRef"; public const string GitRepository = "GitRepository"; public const string Host = "Host"; public const string HostVariable = "HostVariable"; public const string Project = "Project"; public const string Query = "Query"; public const string Secret = "Secret"; public static readonly IReadOnlyDictionary ReverseMapping = new Dictionary { { typeof(string), "String" }, { typeof(int), "Int" }, { typeof(bool), "Boolean" } }; } #endregion #region directives public class SkipDirective : GraphQlDirective { public SkipDirective(QueryBuilderParameter @if) : base("skip") { AddArgument("if", @if); } } public class IncludeDirective : GraphQlDirective { public IncludeDirective(QueryBuilderParameter @if) : base("include") { AddArgument("if", @if); } } #endregion #region builder classes public class ProjectQueryBuilder : GraphQlQueryBuilder { private static readonly GraphQlFieldMetadata[] AllFieldMetadata = new [] { new GraphQlFieldMetadata { Name = "extensions", IsComplex = true, QueryBuilderType = typeof(ProjectQueryBuilder) }, new GraphQlFieldMetadata { Name = "generatedCode", IsComplex = true, QueryBuilderType = typeof(DirectoryQueryBuilder) }, new GraphQlFieldMetadata { Name = "install" }, new GraphQlFieldMetadata { Name = "name" }, new GraphQlFieldMetadata { Name = "schema" }, new GraphQlFieldMetadata { Name = "sdk" } }; protected override string TypeName { get { return "Project"; } } public override IReadOnlyList AllFields { get { return AllFieldMetadata; } } public ProjectQueryBuilder WithExtensions(ProjectQueryBuilder projectQueryBuilder, string alias = null, SkipDirective skip = null, IncludeDirective include = null) { return WithObjectField("extensions", alias, projectQueryBuilder, new GraphQlDirective[] { skip, include }); } public ProjectQueryBuilder ExceptExtensions() { return ExceptField("extensions"); } public ProjectQueryBuilder WithGeneratedCode(DirectoryQueryBuilder directoryQueryBuilder, string alias = null, SkipDirective skip = null, IncludeDirective include = null) { return WithObjectField("generatedCode", alias, directoryQueryBuilder, new GraphQlDirective[] { skip, include }); } public ProjectQueryBuilder ExceptGeneratedCode() { return ExceptField("generatedCode"); } public ProjectQueryBuilder WithInstall(string alias = null, SkipDirective skip = null, IncludeDirective include = null) { return WithScalarField("install", alias, new GraphQlDirective[] { skip, include }); } public ProjectQueryBuilder ExceptInstall() { return ExceptField("install"); } public ProjectQueryBuilder WithName(string alias = null, SkipDirective skip = null, IncludeDirective include = null) { return WithScalarField("name", alias, new GraphQlDirective[] { skip, include }); } public ProjectQueryBuilder ExceptName() { return ExceptField("name"); } public ProjectQueryBuilder WithSchema(string alias = null, SkipDirective skip = null, IncludeDirective include = null) { return WithScalarField("schema", alias, new GraphQlDirective[] { skip, include }); } public ProjectQueryBuilder ExceptSchema() { return ExceptField("schema"); } public ProjectQueryBuilder WithSdk(string alias = null, SkipDirective skip = null, IncludeDirective include = null) { return WithScalarField("sdk", alias, new GraphQlDirective[] { skip, include }); } public ProjectQueryBuilder ExceptSdk() { return ExceptField("sdk"); } } public class DirectoryQueryBuilder : GraphQlQueryBuilder { private static readonly GraphQlFieldMetadata[] AllFieldMetadata = new [] { new GraphQlFieldMetadata { Name = "diff", IsComplex = true, QueryBuilderType = typeof(DirectoryQueryBuilder) }, new GraphQlFieldMetadata { Name = "directory", IsComplex = true, QueryBuilderType = typeof(DirectoryQueryBuilder) }, new GraphQlFieldMetadata { Name = "entries", IsComplex = true }, new GraphQlFieldMetadata { Name = "export" }, new GraphQlFieldMetadata { Name = "file", IsComplex = true, QueryBuilderType = typeof(FileQueryBuilder) }, new GraphQlFieldMetadata { Name = "id", IsComplex = true }, new GraphQlFieldMetadata { Name = "loadProject", IsComplex = true, QueryBuilderType = typeof(ProjectQueryBuilder) }, new GraphQlFieldMetadata { Name = "withDirectory", IsComplex = true, QueryBuilderType = typeof(DirectoryQueryBuilder) }, new GraphQlFieldMetadata { Name = "withFile", IsComplex = true, QueryBuilderType = typeof(DirectoryQueryBuilder) }, new GraphQlFieldMetadata { Name = "withNewDirectory", IsComplex = true, QueryBuilderType = typeof(DirectoryQueryBuilder) }, new GraphQlFieldMetadata { Name = "withNewFile", IsComplex = true, QueryBuilderType = typeof(DirectoryQueryBuilder) }, new GraphQlFieldMetadata { Name = "withoutDirectory", IsComplex = true, QueryBuilderType = typeof(DirectoryQueryBuilder) }, new GraphQlFieldMetadata { Name = "withoutFile", IsComplex = true, QueryBuilderType = typeof(DirectoryQueryBuilder) } }; protected override string TypeName { get { return "Directory"; } } public override IReadOnlyList AllFields { get { return AllFieldMetadata; } } public DirectoryQueryBuilder WithDiff(DirectoryQueryBuilder directoryQueryBuilder, QueryBuilderParameter other, string alias = null, SkipDirective skip = null, IncludeDirective include = null) { var args = new List(); args.Add(new QueryBuilderArgumentInfo { ArgumentName = "other", ArgumentValue = other} ); return WithObjectField("diff", alias, directoryQueryBuilder, new GraphQlDirective[] { skip, include }, args); } public DirectoryQueryBuilder ExceptDiff() { return ExceptField("diff"); } public DirectoryQueryBuilder WithDirectory(DirectoryQueryBuilder directoryQueryBuilder, QueryBuilderParameter path, string alias = null, SkipDirective skip = null, IncludeDirective include = null) { var args = new List(); args.Add(new QueryBuilderArgumentInfo { ArgumentName = "path", ArgumentValue = path} ); return WithObjectField("directory", alias, directoryQueryBuilder, new GraphQlDirective[] { skip, include }, args); } public DirectoryQueryBuilder ExceptDirectory() { return ExceptField("directory"); } public DirectoryQueryBuilder WithEntries(QueryBuilderParameter path = null, string alias = null, SkipDirective skip = null, IncludeDirective include = null) { var args = new List(); if (path != null) args.Add(new QueryBuilderArgumentInfo { ArgumentName = "path", ArgumentValue = path} ); return WithScalarField("entries", alias, new GraphQlDirective[] { skip, include }, args); } public DirectoryQueryBuilder ExceptEntries() { return ExceptField("entries"); } public DirectoryQueryBuilder WithExport(QueryBuilderParameter path, string alias = null, SkipDirective skip = null, IncludeDirective include = null) { var args = new List(); args.Add(new QueryBuilderArgumentInfo { ArgumentName = "path", ArgumentValue = path} ); return WithScalarField("export", alias, new GraphQlDirective[] { skip, include }, args); } public DirectoryQueryBuilder ExceptExport() { return ExceptField("export"); } public DirectoryQueryBuilder WithFile(FileQueryBuilder fileQueryBuilder, QueryBuilderParameter path, string alias = null, SkipDirective skip = null, IncludeDirective include = null) { var args = new List(); args.Add(new QueryBuilderArgumentInfo { ArgumentName = "path", ArgumentValue = path} ); return WithObjectField("file", alias, fileQueryBuilder, new GraphQlDirective[] { skip, include }, args); } public DirectoryQueryBuilder ExceptFile() { return ExceptField("file"); } public DirectoryQueryBuilder WithId(string alias = null, SkipDirective skip = null, IncludeDirective include = null) { return WithScalarField("id", alias, new GraphQlDirective[] { skip, include }); } public DirectoryQueryBuilder ExceptId() { return ExceptField("id"); } public DirectoryQueryBuilder WithLoadProject(ProjectQueryBuilder projectQueryBuilder, QueryBuilderParameter configPath, string alias = null, SkipDirective skip = null, IncludeDirective include = null) { var args = new List(); args.Add(new QueryBuilderArgumentInfo { ArgumentName = "configPath", ArgumentValue = configPath} ); return WithObjectField("loadProject", alias, projectQueryBuilder, new GraphQlDirective[] { skip, include }, args); } public DirectoryQueryBuilder ExceptLoadProject() { return ExceptField("loadProject"); } public DirectoryQueryBuilder WithWithDirectory(DirectoryQueryBuilder directoryQueryBuilder, QueryBuilderParameter path, QueryBuilderParameter directory, QueryBuilderParameter> exclude = null, QueryBuilderParameter> include = null, string alias = null, SkipDirective skip = null, IncludeDirective includeDirective = null) { var args = new List(); args.Add(new QueryBuilderArgumentInfo { ArgumentName = "path", ArgumentValue = path} ); args.Add(new QueryBuilderArgumentInfo { ArgumentName = "directory", ArgumentValue = directory} ); if (exclude != null) args.Add(new QueryBuilderArgumentInfo { ArgumentName = "exclude", ArgumentValue = exclude} ); if (include != null) args.Add(new QueryBuilderArgumentInfo { ArgumentName = "include", ArgumentValue = include} ); return WithObjectField("withDirectory", alias, directoryQueryBuilder, new GraphQlDirective[] { skip, includeDirective }, args); } public DirectoryQueryBuilder ExceptWithDirectory() { return ExceptField("withDirectory"); } public DirectoryQueryBuilder WithWithFile(DirectoryQueryBuilder directoryQueryBuilder, QueryBuilderParameter path, QueryBuilderParameter source, string alias = null, SkipDirective skip = null, IncludeDirective include = null) { var args = new List(); args.Add(new QueryBuilderArgumentInfo { ArgumentName = "path", ArgumentValue = path} ); args.Add(new QueryBuilderArgumentInfo { ArgumentName = "source", ArgumentValue = source} ); return WithObjectField("withFile", alias, directoryQueryBuilder, new GraphQlDirective[] { skip, include }, args); } public DirectoryQueryBuilder ExceptWithFile() { return ExceptField("withFile"); } public DirectoryQueryBuilder WithWithNewDirectory(DirectoryQueryBuilder directoryQueryBuilder, QueryBuilderParameter path, string alias = null, SkipDirective skip = null, IncludeDirective include = null) { var args = new List(); args.Add(new QueryBuilderArgumentInfo { ArgumentName = "path", ArgumentValue = path} ); return WithObjectField("withNewDirectory", alias, directoryQueryBuilder, new GraphQlDirective[] { skip, include }, args); } public DirectoryQueryBuilder ExceptWithNewDirectory() { return ExceptField("withNewDirectory"); } public DirectoryQueryBuilder WithWithNewFile(DirectoryQueryBuilder directoryQueryBuilder, QueryBuilderParameter path, QueryBuilderParameter contents = null, string alias = null, SkipDirective skip = null, IncludeDirective include = null) { var args = new List(); args.Add(new QueryBuilderArgumentInfo { ArgumentName = "path", ArgumentValue = path} ); if (contents != null) args.Add(new QueryBuilderArgumentInfo { ArgumentName = "contents", ArgumentValue = contents} ); return WithObjectField("withNewFile", alias, directoryQueryBuilder, new GraphQlDirective[] { skip, include }, args); } public DirectoryQueryBuilder ExceptWithNewFile() { return ExceptField("withNewFile"); } public DirectoryQueryBuilder WithWithoutDirectory(DirectoryQueryBuilder directoryQueryBuilder, QueryBuilderParameter path, string alias = null, SkipDirective skip = null, IncludeDirective include = null) { var args = new List(); args.Add(new QueryBuilderArgumentInfo { ArgumentName = "path", ArgumentValue = path} ); return WithObjectField("withoutDirectory", alias, directoryQueryBuilder, new GraphQlDirective[] { skip, include }, args); } public DirectoryQueryBuilder ExceptWithoutDirectory() { return ExceptField("withoutDirectory"); } public DirectoryQueryBuilder WithWithoutFile(DirectoryQueryBuilder directoryQueryBuilder, QueryBuilderParameter path, string alias = null, SkipDirective skip = null, IncludeDirective include = null) { var args = new List(); args.Add(new QueryBuilderArgumentInfo { ArgumentName = "path", ArgumentValue = path} ); return WithObjectField("withoutFile", alias, directoryQueryBuilder, new GraphQlDirective[] { skip, include }, args); } public DirectoryQueryBuilder ExceptWithoutFile() { return ExceptField("withoutFile"); } } public class HostQueryBuilder : GraphQlQueryBuilder { private static readonly GraphQlFieldMetadata[] AllFieldMetadata = new [] { new GraphQlFieldMetadata { Name = "directory", IsComplex = true, QueryBuilderType = typeof(DirectoryQueryBuilder) }, new GraphQlFieldMetadata { Name = "envVariable", IsComplex = true, QueryBuilderType = typeof(HostVariableQueryBuilder) }, new GraphQlFieldMetadata { Name = "workdir", IsComplex = true, QueryBuilderType = typeof(DirectoryQueryBuilder) } }; protected override string TypeName { get { return "Host"; } } public override IReadOnlyList AllFields { get { return AllFieldMetadata; } } public HostQueryBuilder WithDirectory(DirectoryQueryBuilder directoryQueryBuilder, QueryBuilderParameter path, QueryBuilderParameter> exclude = null, QueryBuilderParameter> include = null, string alias = null, SkipDirective skip = null, IncludeDirective includeDirective = null) { var args = new List(); args.Add(new QueryBuilderArgumentInfo { ArgumentName = "path", ArgumentValue = path} ); if (exclude != null) args.Add(new QueryBuilderArgumentInfo { ArgumentName = "exclude", ArgumentValue = exclude} ); if (include != null) args.Add(new QueryBuilderArgumentInfo { ArgumentName = "include", ArgumentValue = include} ); return WithObjectField("directory", alias, directoryQueryBuilder, new GraphQlDirective[] { skip, includeDirective }, args); } public HostQueryBuilder ExceptDirectory() { return ExceptField("directory"); } public HostQueryBuilder WithEnvVariable(HostVariableQueryBuilder hostVariableQueryBuilder, QueryBuilderParameter name, string alias = null, SkipDirective skip = null, IncludeDirective include = null) { var args = new List(); args.Add(new QueryBuilderArgumentInfo { ArgumentName = "name", ArgumentValue = name} ); return WithObjectField("envVariable", alias, hostVariableQueryBuilder, new GraphQlDirective[] { skip, include }, args); } public HostQueryBuilder ExceptEnvVariable() { return ExceptField("envVariable"); } public HostQueryBuilder WithWorkdir(DirectoryQueryBuilder directoryQueryBuilder, QueryBuilderParameter> exclude = null, QueryBuilderParameter> include = null, string alias = null, SkipDirective skip = null, IncludeDirective includeDirective = null) { var args = new List(); if (exclude != null) args.Add(new QueryBuilderArgumentInfo { ArgumentName = "exclude", ArgumentValue = exclude} ); if (include != null) args.Add(new QueryBuilderArgumentInfo { ArgumentName = "include", ArgumentValue = include} ); return WithObjectField("workdir", alias, directoryQueryBuilder, new GraphQlDirective[] { skip, includeDirective }, args); } public HostQueryBuilder ExceptWorkdir() { return ExceptField("workdir"); } } public class HostVariableQueryBuilder : GraphQlQueryBuilder { private static readonly GraphQlFieldMetadata[] AllFieldMetadata = new [] { new GraphQlFieldMetadata { Name = "secret", IsComplex = true, QueryBuilderType = typeof(SecretQueryBuilder) }, new GraphQlFieldMetadata { Name = "value" } }; protected override string TypeName { get { return "HostVariable"; } } public override IReadOnlyList AllFields { get { return AllFieldMetadata; } } public HostVariableQueryBuilder WithSecret(SecretQueryBuilder secretQueryBuilder, string alias = null, SkipDirective skip = null, IncludeDirective include = null) { return WithObjectField("secret", alias, secretQueryBuilder, new GraphQlDirective[] { skip, include }); } public HostVariableQueryBuilder ExceptSecret() { return ExceptField("secret"); } public HostVariableQueryBuilder WithValue(string alias = null, SkipDirective skip = null, IncludeDirective include = null) { return WithScalarField("value", alias, new GraphQlDirective[] { skip, include }); } public HostVariableQueryBuilder ExceptValue() { return ExceptField("value"); } } public class ContainerQueryBuilder : GraphQlQueryBuilder { private static readonly GraphQlFieldMetadata[] AllFieldMetadata = new [] { new GraphQlFieldMetadata { Name = "build", IsComplex = true, QueryBuilderType = typeof(ContainerQueryBuilder) }, new GraphQlFieldMetadata { Name = "defaultArgs", IsComplex = true }, new GraphQlFieldMetadata { Name = "directory", IsComplex = true, QueryBuilderType = typeof(DirectoryQueryBuilder) }, new GraphQlFieldMetadata { Name = "entrypoint", IsComplex = true }, new GraphQlFieldMetadata { Name = "envVariable" }, new GraphQlFieldMetadata { Name = "envVariables", IsComplex = true, QueryBuilderType = typeof(EnvVariableQueryBuilder) }, new GraphQlFieldMetadata { Name = "exec", IsComplex = true, QueryBuilderType = typeof(ContainerQueryBuilder) }, new GraphQlFieldMetadata { Name = "exitCode" }, new GraphQlFieldMetadata { Name = "export" }, new GraphQlFieldMetadata { Name = "file", IsComplex = true, QueryBuilderType = typeof(FileQueryBuilder) }, new GraphQlFieldMetadata { Name = "from", IsComplex = true, QueryBuilderType = typeof(ContainerQueryBuilder) }, new GraphQlFieldMetadata { Name = "fs", IsComplex = true, QueryBuilderType = typeof(DirectoryQueryBuilder) }, new GraphQlFieldMetadata { Name = "id", IsComplex = true }, new GraphQlFieldMetadata { Name = "mounts", IsComplex = true }, new GraphQlFieldMetadata { Name = "platform", IsComplex = true }, new GraphQlFieldMetadata { Name = "publish" }, new GraphQlFieldMetadata { Name = "stderr", IsComplex = true, QueryBuilderType = typeof(FileQueryBuilder) }, new GraphQlFieldMetadata { Name = "stdout", IsComplex = true, QueryBuilderType = typeof(FileQueryBuilder) }, new GraphQlFieldMetadata { Name = "user" }, new GraphQlFieldMetadata { Name = "withDefaultArgs", IsComplex = true, QueryBuilderType = typeof(ContainerQueryBuilder) }, new GraphQlFieldMetadata { Name = "withEntrypoint", IsComplex = true, QueryBuilderType = typeof(ContainerQueryBuilder) }, new GraphQlFieldMetadata { Name = "withEnvVariable", IsComplex = true, QueryBuilderType = typeof(ContainerQueryBuilder) }, new GraphQlFieldMetadata { Name = "withFS", IsComplex = true, QueryBuilderType = typeof(ContainerQueryBuilder) }, new GraphQlFieldMetadata { Name = "withMountedCache", IsComplex = true, QueryBuilderType = typeof(ContainerQueryBuilder) }, new GraphQlFieldMetadata { Name = "withMountedDirectory", IsComplex = true, QueryBuilderType = typeof(ContainerQueryBuilder) }, new GraphQlFieldMetadata { Name = "withMountedFile", IsComplex = true, QueryBuilderType = typeof(ContainerQueryBuilder) }, new GraphQlFieldMetadata { Name = "withMountedSecret", IsComplex = true, QueryBuilderType = typeof(ContainerQueryBuilder) }, new GraphQlFieldMetadata { Name = "withMountedTemp", IsComplex = true, QueryBuilderType = typeof(ContainerQueryBuilder) }, new GraphQlFieldMetadata { Name = "withSecretVariable", IsComplex = true, QueryBuilderType = typeof(ContainerQueryBuilder) }, new GraphQlFieldMetadata { Name = "withUser", IsComplex = true, QueryBuilderType = typeof(ContainerQueryBuilder) }, new GraphQlFieldMetadata { Name = "withWorkdir", IsComplex = true, QueryBuilderType = typeof(ContainerQueryBuilder) }, new GraphQlFieldMetadata { Name = "withoutEnvVariable", IsComplex = true, QueryBuilderType = typeof(ContainerQueryBuilder) }, new GraphQlFieldMetadata { Name = "withoutMount", IsComplex = true, QueryBuilderType = typeof(ContainerQueryBuilder) }, new GraphQlFieldMetadata { Name = "workdir" } }; protected override string TypeName { get { return "Container"; } } public override IReadOnlyList AllFields { get { return AllFieldMetadata; } } public ContainerQueryBuilder WithBuild(ContainerQueryBuilder containerQueryBuilder, QueryBuilderParameter context, QueryBuilderParameter dockerfile = null, string alias = null, SkipDirective skip = null, IncludeDirective include = null) { var args = new List(); args.Add(new QueryBuilderArgumentInfo { ArgumentName = "context", ArgumentValue = context} ); if (dockerfile != null) args.Add(new QueryBuilderArgumentInfo { ArgumentName = "dockerfile", ArgumentValue = dockerfile} ); return WithObjectField("build", alias, containerQueryBuilder, new GraphQlDirective[] { skip, include }, args); } public ContainerQueryBuilder ExceptBuild() { return ExceptField("build"); } public ContainerQueryBuilder WithDefaultArgs(string alias = null, SkipDirective skip = null, IncludeDirective include = null) { return WithScalarField("defaultArgs", alias, new GraphQlDirective[] { skip, include }); } public ContainerQueryBuilder ExceptDefaultArgs() { return ExceptField("defaultArgs"); } public ContainerQueryBuilder WithDirectory(DirectoryQueryBuilder directoryQueryBuilder, QueryBuilderParameter path, string alias = null, SkipDirective skip = null, IncludeDirective include = null) { var args = new List(); args.Add(new QueryBuilderArgumentInfo { ArgumentName = "path", ArgumentValue = path} ); return WithObjectField("directory", alias, directoryQueryBuilder, new GraphQlDirective[] { skip, include }, args); } public ContainerQueryBuilder ExceptDirectory() { return ExceptField("directory"); } public ContainerQueryBuilder WithEntrypoint(string alias = null, SkipDirective skip = null, IncludeDirective include = null) { return WithScalarField("entrypoint", alias, new GraphQlDirective[] { skip, include }); } public ContainerQueryBuilder ExceptEntrypoint() { return ExceptField("entrypoint"); } public ContainerQueryBuilder WithEnvVariable(QueryBuilderParameter name, string alias = null, SkipDirective skip = null, IncludeDirective include = null) { var args = new List(); args.Add(new QueryBuilderArgumentInfo { ArgumentName = "name", ArgumentValue = name} ); return WithScalarField("envVariable", alias, new GraphQlDirective[] { skip, include }, args); } public ContainerQueryBuilder ExceptEnvVariable() { return ExceptField("envVariable"); } public ContainerQueryBuilder WithEnvVariables(EnvVariableQueryBuilder envVariableQueryBuilder, string alias = null, SkipDirective skip = null, IncludeDirective include = null) { return WithObjectField("envVariables", alias, envVariableQueryBuilder, new GraphQlDirective[] { skip, include }); } public ContainerQueryBuilder ExceptEnvVariables() { return ExceptField("envVariables"); } public ContainerQueryBuilder WithExec(ContainerQueryBuilder containerQueryBuilder, QueryBuilderParameter> args = null, QueryBuilderParameter stdin = null, QueryBuilderParameter redirectStdout = null, QueryBuilderParameter redirectStderr = null, QueryBuilderParameter experimentalPrivilegedNesting = null, string alias = null, SkipDirective skip = null, IncludeDirective include = null) { var inputArgs = new List(); if (args != null) inputArgs.Add(new QueryBuilderArgumentInfo { ArgumentName = "args", ArgumentValue = args} ); if (stdin != null) inputArgs.Add(new QueryBuilderArgumentInfo { ArgumentName = "stdin", ArgumentValue = stdin} ); if (redirectStdout != null) inputArgs.Add(new QueryBuilderArgumentInfo { ArgumentName = "redirectStdout", ArgumentValue = redirectStdout} ); if (redirectStderr != null) inputArgs.Add(new QueryBuilderArgumentInfo { ArgumentName = "redirectStderr", ArgumentValue = redirectStderr} ); if (experimentalPrivilegedNesting != null) inputArgs.Add(new QueryBuilderArgumentInfo { ArgumentName = "experimentalPrivilegedNesting", ArgumentValue = experimentalPrivilegedNesting} ); return WithObjectField("exec", alias, containerQueryBuilder, new GraphQlDirective[] { skip, include }, inputArgs); } public ContainerQueryBuilder ExceptExec() { return ExceptField("exec"); } public ContainerQueryBuilder WithExitCode(string alias = null, SkipDirective skip = null, IncludeDirective include = null) { return WithScalarField("exitCode", alias, new GraphQlDirective[] { skip, include }); } public ContainerQueryBuilder ExceptExitCode() { return ExceptField("exitCode"); } public ContainerQueryBuilder WithExport(QueryBuilderParameter path, QueryBuilderParameter> platformVariants = null, string alias = null, SkipDirective skip = null, IncludeDirective include = null) { var args = new List(); args.Add(new QueryBuilderArgumentInfo { ArgumentName = "path", ArgumentValue = path} ); if (platformVariants != null) args.Add(new QueryBuilderArgumentInfo { ArgumentName = "platformVariants", ArgumentValue = platformVariants} ); return WithScalarField("export", alias, new GraphQlDirective[] { skip, include }, args); } public ContainerQueryBuilder ExceptExport() { return ExceptField("export"); } public ContainerQueryBuilder WithFile(FileQueryBuilder fileQueryBuilder, QueryBuilderParameter path, string alias = null, SkipDirective skip = null, IncludeDirective include = null) { var args = new List(); args.Add(new QueryBuilderArgumentInfo { ArgumentName = "path", ArgumentValue = path} ); return WithObjectField("file", alias, fileQueryBuilder, new GraphQlDirective[] { skip, include }, args); } public ContainerQueryBuilder ExceptFile() { return ExceptField("file"); } public ContainerQueryBuilder WithFrom(ContainerQueryBuilder containerQueryBuilder, QueryBuilderParameter address, string alias = null, SkipDirective skip = null, IncludeDirective include = null) { var args = new List(); args.Add(new QueryBuilderArgumentInfo { ArgumentName = "address", ArgumentValue = address} ); return WithObjectField("from", alias, containerQueryBuilder, new GraphQlDirective[] { skip, include }, args); } public ContainerQueryBuilder ExceptFrom() { return ExceptField("from"); } public ContainerQueryBuilder WithFs(DirectoryQueryBuilder directoryQueryBuilder, string alias = null, SkipDirective skip = null, IncludeDirective include = null) { return WithObjectField("fs", alias, directoryQueryBuilder, new GraphQlDirective[] { skip, include }); } public ContainerQueryBuilder ExceptFs() { return ExceptField("fs"); } public ContainerQueryBuilder WithId(string alias = null, SkipDirective skip = null, IncludeDirective include = null) { return WithScalarField("id", alias, new GraphQlDirective[] { skip, include }); } public ContainerQueryBuilder ExceptId() { return ExceptField("id"); } public ContainerQueryBuilder WithMounts(string alias = null, SkipDirective skip = null, IncludeDirective include = null) { return WithScalarField("mounts", alias, new GraphQlDirective[] { skip, include }); } public ContainerQueryBuilder ExceptMounts() { return ExceptField("mounts"); } public ContainerQueryBuilder WithPlatform(string alias = null, SkipDirective skip = null, IncludeDirective include = null) { return WithScalarField("platform", alias, new GraphQlDirective[] { skip, include }); } public ContainerQueryBuilder ExceptPlatform() { return ExceptField("platform"); } public ContainerQueryBuilder WithPublish(QueryBuilderParameter address, QueryBuilderParameter> platformVariants = null, string alias = null, SkipDirective skip = null, IncludeDirective include = null) { var args = new List(); args.Add(new QueryBuilderArgumentInfo { ArgumentName = "address", ArgumentValue = address} ); if (platformVariants != null) args.Add(new QueryBuilderArgumentInfo { ArgumentName = "platformVariants", ArgumentValue = platformVariants} ); return WithScalarField("publish", alias, new GraphQlDirective[] { skip, include }, args); } public ContainerQueryBuilder ExceptPublish() { return ExceptField("publish"); } public ContainerQueryBuilder WithStderr(FileQueryBuilder fileQueryBuilder, string alias = null, SkipDirective skip = null, IncludeDirective include = null) { return WithObjectField("stderr", alias, fileQueryBuilder, new GraphQlDirective[] { skip, include }); } public ContainerQueryBuilder ExceptStderr() { return ExceptField("stderr"); } public ContainerQueryBuilder WithStdout(FileQueryBuilder fileQueryBuilder, string alias = null, SkipDirective skip = null, IncludeDirective include = null) { return WithObjectField("stdout", alias, fileQueryBuilder, new GraphQlDirective[] { skip, include }); } public ContainerQueryBuilder ExceptStdout() { return ExceptField("stdout"); } public ContainerQueryBuilder WithUser(string alias = null, SkipDirective skip = null, IncludeDirective include = null) { return WithScalarField("user", alias, new GraphQlDirective[] { skip, include }); } public ContainerQueryBuilder ExceptUser() { return ExceptField("user"); } public ContainerQueryBuilder WithWithDefaultArgs(ContainerQueryBuilder containerQueryBuilder, QueryBuilderParameter> args = null, string alias = null, SkipDirective skip = null, IncludeDirective include = null) { var inputArgs = new List(); if (args != null) inputArgs.Add(new QueryBuilderArgumentInfo { ArgumentName = "args", ArgumentValue = args} ); return WithObjectField("withDefaultArgs", alias, containerQueryBuilder, new GraphQlDirective[] { skip, include }, inputArgs); } public ContainerQueryBuilder ExceptWithDefaultArgs() { return ExceptField("withDefaultArgs"); } public ContainerQueryBuilder WithWithEntrypoint(ContainerQueryBuilder containerQueryBuilder, QueryBuilderParameter> args, string alias = null, SkipDirective skip = null, IncludeDirective include = null) { var inputArgs = new List(); inputArgs.Add(new QueryBuilderArgumentInfo { ArgumentName = "args", ArgumentValue = args} ); return WithObjectField("withEntrypoint", alias, containerQueryBuilder, new GraphQlDirective[] { skip, include }, inputArgs); } public ContainerQueryBuilder ExceptWithEntrypoint() { return ExceptField("withEntrypoint"); } public ContainerQueryBuilder WithWithEnvVariable(ContainerQueryBuilder containerQueryBuilder, QueryBuilderParameter name, QueryBuilderParameter value, string alias = null, SkipDirective skip = null, IncludeDirective include = null) { var args = new List(); args.Add(new QueryBuilderArgumentInfo { ArgumentName = "name", ArgumentValue = name} ); args.Add(new QueryBuilderArgumentInfo { ArgumentName = "value", ArgumentValue = value} ); return WithObjectField("withEnvVariable", alias, containerQueryBuilder, new GraphQlDirective[] { skip, include }, args); } public ContainerQueryBuilder ExceptWithEnvVariable() { return ExceptField("withEnvVariable"); } public ContainerQueryBuilder WithWithFs(ContainerQueryBuilder containerQueryBuilder, QueryBuilderParameter id, string alias = null, SkipDirective skip = null, IncludeDirective include = null) { var args = new List(); args.Add(new QueryBuilderArgumentInfo { ArgumentName = "id", ArgumentValue = id} ); return WithObjectField("withFS", alias, containerQueryBuilder, new GraphQlDirective[] { skip, include }, args); } public ContainerQueryBuilder ExceptWithFs() { return ExceptField("withFS"); } public ContainerQueryBuilder WithWithMountedCache(ContainerQueryBuilder containerQueryBuilder, QueryBuilderParameter path, QueryBuilderParameter cache, QueryBuilderParameter source = null, string alias = null, SkipDirective skip = null, IncludeDirective include = null) { var args = new List(); args.Add(new QueryBuilderArgumentInfo { ArgumentName = "path", ArgumentValue = path} ); args.Add(new QueryBuilderArgumentInfo { ArgumentName = "cache", ArgumentValue = cache} ); if (source != null) args.Add(new QueryBuilderArgumentInfo { ArgumentName = "source", ArgumentValue = source} ); return WithObjectField("withMountedCache", alias, containerQueryBuilder, new GraphQlDirective[] { skip, include }, args); } public ContainerQueryBuilder ExceptWithMountedCache() { return ExceptField("withMountedCache"); } public ContainerQueryBuilder WithWithMountedDirectory(ContainerQueryBuilder containerQueryBuilder, QueryBuilderParameter path, QueryBuilderParameter source, string alias = null, SkipDirective skip = null, IncludeDirective include = null) { var args = new List(); args.Add(new QueryBuilderArgumentInfo { ArgumentName = "path", ArgumentValue = path} ); args.Add(new QueryBuilderArgumentInfo { ArgumentName = "source", ArgumentValue = source} ); return WithObjectField("withMountedDirectory", alias, containerQueryBuilder, new GraphQlDirective[] { skip, include }, args); } public ContainerQueryBuilder ExceptWithMountedDirectory() { return ExceptField("withMountedDirectory"); } public ContainerQueryBuilder WithWithMountedFile(ContainerQueryBuilder containerQueryBuilder, QueryBuilderParameter path, QueryBuilderParameter source, string alias = null, SkipDirective skip = null, IncludeDirective include = null) { var args = new List(); args.Add(new QueryBuilderArgumentInfo { ArgumentName = "path", ArgumentValue = path} ); args.Add(new QueryBuilderArgumentInfo { ArgumentName = "source", ArgumentValue = source} ); return WithObjectField("withMountedFile", alias, containerQueryBuilder, new GraphQlDirective[] { skip, include }, args); } public ContainerQueryBuilder ExceptWithMountedFile() { return ExceptField("withMountedFile"); } public ContainerQueryBuilder WithWithMountedSecret(ContainerQueryBuilder containerQueryBuilder, QueryBuilderParameter path, QueryBuilderParameter source, string alias = null, SkipDirective skip = null, IncludeDirective include = null) { var args = new List(); args.Add(new QueryBuilderArgumentInfo { ArgumentName = "path", ArgumentValue = path} ); args.Add(new QueryBuilderArgumentInfo { ArgumentName = "source", ArgumentValue = source} ); return WithObjectField("withMountedSecret", alias, containerQueryBuilder, new GraphQlDirective[] { skip, include }, args); } public ContainerQueryBuilder ExceptWithMountedSecret() { return ExceptField("withMountedSecret"); } public ContainerQueryBuilder WithWithMountedTemp(ContainerQueryBuilder containerQueryBuilder, QueryBuilderParameter path, string alias = null, SkipDirective skip = null, IncludeDirective include = null) { var args = new List(); args.Add(new QueryBuilderArgumentInfo { ArgumentName = "path", ArgumentValue = path} ); return WithObjectField("withMountedTemp", alias, containerQueryBuilder, new GraphQlDirective[] { skip, include }, args); } public ContainerQueryBuilder ExceptWithMountedTemp() { return ExceptField("withMountedTemp"); } public ContainerQueryBuilder WithWithSecretVariable(ContainerQueryBuilder containerQueryBuilder, QueryBuilderParameter name, QueryBuilderParameter secret, string alias = null, SkipDirective skip = null, IncludeDirective include = null) { var args = new List(); args.Add(new QueryBuilderArgumentInfo { ArgumentName = "name", ArgumentValue = name} ); args.Add(new QueryBuilderArgumentInfo { ArgumentName = "secret", ArgumentValue = secret} ); return WithObjectField("withSecretVariable", alias, containerQueryBuilder, new GraphQlDirective[] { skip, include }, args); } public ContainerQueryBuilder ExceptWithSecretVariable() { return ExceptField("withSecretVariable"); } public ContainerQueryBuilder WithWithUser(ContainerQueryBuilder containerQueryBuilder, QueryBuilderParameter name, string alias = null, SkipDirective skip = null, IncludeDirective include = null) { var args = new List(); args.Add(new QueryBuilderArgumentInfo { ArgumentName = "name", ArgumentValue = name} ); return WithObjectField("withUser", alias, containerQueryBuilder, new GraphQlDirective[] { skip, include }, args); } public ContainerQueryBuilder ExceptWithUser() { return ExceptField("withUser"); } public ContainerQueryBuilder WithWithWorkdir(ContainerQueryBuilder containerQueryBuilder, QueryBuilderParameter path, string alias = null, SkipDirective skip = null, IncludeDirective include = null) { var args = new List(); args.Add(new QueryBuilderArgumentInfo { ArgumentName = "path", ArgumentValue = path} ); return WithObjectField("withWorkdir", alias, containerQueryBuilder, new GraphQlDirective[] { skip, include }, args); } public ContainerQueryBuilder ExceptWithWorkdir() { return ExceptField("withWorkdir"); } public ContainerQueryBuilder WithWithoutEnvVariable(ContainerQueryBuilder containerQueryBuilder, QueryBuilderParameter name, string alias = null, SkipDirective skip = null, IncludeDirective include = null) { var args = new List(); args.Add(new QueryBuilderArgumentInfo { ArgumentName = "name", ArgumentValue = name} ); return WithObjectField("withoutEnvVariable", alias, containerQueryBuilder, new GraphQlDirective[] { skip, include }, args); } public ContainerQueryBuilder ExceptWithoutEnvVariable() { return ExceptField("withoutEnvVariable"); } public ContainerQueryBuilder WithWithoutMount(ContainerQueryBuilder containerQueryBuilder, QueryBuilderParameter path, string alias = null, SkipDirective skip = null, IncludeDirective include = null) { var args = new List(); args.Add(new QueryBuilderArgumentInfo { ArgumentName = "path", ArgumentValue = path} ); return WithObjectField("withoutMount", alias, containerQueryBuilder, new GraphQlDirective[] { skip, include }, args); } public ContainerQueryBuilder ExceptWithoutMount() { return ExceptField("withoutMount"); } public ContainerQueryBuilder WithWorkdir(string alias = null, SkipDirective skip = null, IncludeDirective include = null) { return WithScalarField("workdir", alias, new GraphQlDirective[] { skip, include }); } public ContainerQueryBuilder ExceptWorkdir() { return ExceptField("workdir"); } } public class SecretQueryBuilder : GraphQlQueryBuilder { private static readonly GraphQlFieldMetadata[] AllFieldMetadata = new [] { new GraphQlFieldMetadata { Name = "id", IsComplex = true }, new GraphQlFieldMetadata { Name = "plaintext" } }; protected override string TypeName { get { return "Secret"; } } public override IReadOnlyList AllFields { get { return AllFieldMetadata; } } public SecretQueryBuilder WithId(string alias = null, SkipDirective skip = null, IncludeDirective include = null) { return WithScalarField("id", alias, new GraphQlDirective[] { skip, include }); } public SecretQueryBuilder ExceptId() { return ExceptField("id"); } public SecretQueryBuilder WithPlaintext(string alias = null, SkipDirective skip = null, IncludeDirective include = null) { return WithScalarField("plaintext", alias, new GraphQlDirective[] { skip, include }); } public SecretQueryBuilder ExceptPlaintext() { return ExceptField("plaintext"); } } public class EnvVariableQueryBuilder : GraphQlQueryBuilder { private static readonly GraphQlFieldMetadata[] AllFieldMetadata = new [] { new GraphQlFieldMetadata { Name = "name" }, new GraphQlFieldMetadata { Name = "value" } }; protected override string TypeName { get { return "EnvVariable"; } } public override IReadOnlyList AllFields { get { return AllFieldMetadata; } } public EnvVariableQueryBuilder WithName(string alias = null, SkipDirective skip = null, IncludeDirective include = null) { return WithScalarField("name", alias, new GraphQlDirective[] { skip, include }); } public EnvVariableQueryBuilder ExceptName() { return ExceptField("name"); } public EnvVariableQueryBuilder WithValue(string alias = null, SkipDirective skip = null, IncludeDirective include = null) { return WithScalarField("value", alias, new GraphQlDirective[] { skip, include }); } public EnvVariableQueryBuilder ExceptValue() { return ExceptField("value"); } } public class QueryQueryBuilder : GraphQlQueryBuilder { private static readonly GraphQlFieldMetadata[] AllFieldMetadata = new [] { new GraphQlFieldMetadata { Name = "cacheVolume", IsComplex = true, QueryBuilderType = typeof(CacheVolumeQueryBuilder) }, new GraphQlFieldMetadata { Name = "container", IsComplex = true, QueryBuilderType = typeof(ContainerQueryBuilder) }, new GraphQlFieldMetadata { Name = "defaultPlatform", IsComplex = true }, new GraphQlFieldMetadata { Name = "directory", IsComplex = true, QueryBuilderType = typeof(DirectoryQueryBuilder) }, new GraphQlFieldMetadata { Name = "file", IsComplex = true, QueryBuilderType = typeof(FileQueryBuilder) }, new GraphQlFieldMetadata { Name = "git", IsComplex = true, QueryBuilderType = typeof(GitRepositoryQueryBuilder) }, new GraphQlFieldMetadata { Name = "host", IsComplex = true, QueryBuilderType = typeof(HostQueryBuilder) }, new GraphQlFieldMetadata { Name = "http", IsComplex = true, QueryBuilderType = typeof(FileQueryBuilder) }, new GraphQlFieldMetadata { Name = "project", IsComplex = true, QueryBuilderType = typeof(ProjectQueryBuilder) }, new GraphQlFieldMetadata { Name = "secret", IsComplex = true, QueryBuilderType = typeof(SecretQueryBuilder) } }; protected override string TypeName { get { return "Query"; } } public override IReadOnlyList AllFields { get { return AllFieldMetadata; } } public QueryQueryBuilder(string operationName = null) : base("query", operationName) { } public QueryQueryBuilder WithParameter(GraphQlQueryParameter parameter) { return WithParameterInternal(parameter); } public QueryQueryBuilder WithCacheVolume(CacheVolumeQueryBuilder cacheVolumeQueryBuilder, QueryBuilderParameter key, string alias = null, SkipDirective skip = null, IncludeDirective include = null) { var args = new List(); args.Add(new QueryBuilderArgumentInfo { ArgumentName = "key", ArgumentValue = key} ); return WithObjectField("cacheVolume", alias, cacheVolumeQueryBuilder, new GraphQlDirective[] { skip, include }, args); } public QueryQueryBuilder ExceptCacheVolume() { return ExceptField("cacheVolume"); } public QueryQueryBuilder WithContainer(ContainerQueryBuilder containerQueryBuilder, QueryBuilderParameter id = null, QueryBuilderParameter platform = null, string alias = null, SkipDirective skip = null, IncludeDirective include = null) { var args = new List(); if (id != null) args.Add(new QueryBuilderArgumentInfo { ArgumentName = "id", ArgumentValue = id} ); if (platform != null) args.Add(new QueryBuilderArgumentInfo { ArgumentName = "platform", ArgumentValue = platform} ); return WithObjectField("container", alias, containerQueryBuilder, new GraphQlDirective[] { skip, include }, args); } public QueryQueryBuilder ExceptContainer() { return ExceptField("container"); } public QueryQueryBuilder WithDefaultPlatform(string alias = null, SkipDirective skip = null, IncludeDirective include = null) { return WithScalarField("defaultPlatform", alias, new GraphQlDirective[] { skip, include }); } public QueryQueryBuilder ExceptDefaultPlatform() { return ExceptField("defaultPlatform"); } public QueryQueryBuilder WithDirectory(DirectoryQueryBuilder directoryQueryBuilder, QueryBuilderParameter id = null, string alias = null, SkipDirective skip = null, IncludeDirective include = null) { var args = new List(); if (id != null) args.Add(new QueryBuilderArgumentInfo { ArgumentName = "id", ArgumentValue = id} ); return WithObjectField("directory", alias, directoryQueryBuilder, new GraphQlDirective[] { skip, include }, args); } public QueryQueryBuilder ExceptDirectory() { return ExceptField("directory"); } public QueryQueryBuilder WithFile(FileQueryBuilder fileQueryBuilder, QueryBuilderParameter id, string alias = null, SkipDirective skip = null, IncludeDirective include = null) { var args = new List(); args.Add(new QueryBuilderArgumentInfo { ArgumentName = "id", ArgumentValue = id} ); return WithObjectField("file", alias, fileQueryBuilder, new GraphQlDirective[] { skip, include }, args); } public QueryQueryBuilder ExceptFile() { return ExceptField("file"); } public QueryQueryBuilder WithGit(GitRepositoryQueryBuilder gitRepositoryQueryBuilder, QueryBuilderParameter url, QueryBuilderParameter keepGitDir = null, string alias = null, SkipDirective skip = null, IncludeDirective include = null) { var args = new List(); args.Add(new QueryBuilderArgumentInfo { ArgumentName = "url", ArgumentValue = url} ); if (keepGitDir != null) args.Add(new QueryBuilderArgumentInfo { ArgumentName = "keepGitDir", ArgumentValue = keepGitDir} ); return WithObjectField("git", alias, gitRepositoryQueryBuilder, new GraphQlDirective[] { skip, include }, args); } public QueryQueryBuilder ExceptGit() { return ExceptField("git"); } public QueryQueryBuilder WithHost(HostQueryBuilder hostQueryBuilder, string alias = null, SkipDirective skip = null, IncludeDirective include = null) { return WithObjectField("host", alias, hostQueryBuilder, new GraphQlDirective[] { skip, include }); } public QueryQueryBuilder ExceptHost() { return ExceptField("host"); } public QueryQueryBuilder WithHttp(FileQueryBuilder fileQueryBuilder, QueryBuilderParameter url, string alias = null, SkipDirective skip = null, IncludeDirective include = null) { var args = new List(); args.Add(new QueryBuilderArgumentInfo { ArgumentName = "url", ArgumentValue = url} ); return WithObjectField("http", alias, fileQueryBuilder, new GraphQlDirective[] { skip, include }, args); } public QueryQueryBuilder ExceptHttp() { return ExceptField("http"); } public QueryQueryBuilder WithProject(ProjectQueryBuilder projectQueryBuilder, QueryBuilderParameter name, string alias = null, SkipDirective skip = null, IncludeDirective include = null) { var args = new List(); args.Add(new QueryBuilderArgumentInfo { ArgumentName = "name", ArgumentValue = name} ); return WithObjectField("project", alias, projectQueryBuilder, new GraphQlDirective[] { skip, include }, args); } public QueryQueryBuilder ExceptProject() { return ExceptField("project"); } public QueryQueryBuilder WithSecret(SecretQueryBuilder secretQueryBuilder, QueryBuilderParameter id, string alias = null, SkipDirective skip = null, IncludeDirective include = null) { var args = new List(); args.Add(new QueryBuilderArgumentInfo { ArgumentName = "id", ArgumentValue = id} ); return WithObjectField("secret", alias, secretQueryBuilder, new GraphQlDirective[] { skip, include }, args); } public QueryQueryBuilder ExceptSecret() { return ExceptField("secret"); } } public class FileQueryBuilder : GraphQlQueryBuilder { private static readonly GraphQlFieldMetadata[] AllFieldMetadata = new [] { new GraphQlFieldMetadata { Name = "contents" }, new GraphQlFieldMetadata { Name = "export" }, new GraphQlFieldMetadata { Name = "id", IsComplex = true }, new GraphQlFieldMetadata { Name = "secret", IsComplex = true, QueryBuilderType = typeof(SecretQueryBuilder) }, new GraphQlFieldMetadata { Name = "size" } }; protected override string TypeName { get { return "File"; } } public override IReadOnlyList AllFields { get { return AllFieldMetadata; } } public FileQueryBuilder WithContents(string alias = null, SkipDirective skip = null, IncludeDirective include = null) { return WithScalarField("contents", alias, new GraphQlDirective[] { skip, include }); } public FileQueryBuilder ExceptContents() { return ExceptField("contents"); } public FileQueryBuilder WithExport(QueryBuilderParameter path, string alias = null, SkipDirective skip = null, IncludeDirective include = null) { var args = new List(); args.Add(new QueryBuilderArgumentInfo { ArgumentName = "path", ArgumentValue = path} ); return WithScalarField("export", alias, new GraphQlDirective[] { skip, include }, args); } public FileQueryBuilder ExceptExport() { return ExceptField("export"); } public FileQueryBuilder WithId(string alias = null, SkipDirective skip = null, IncludeDirective include = null) { return WithScalarField("id", alias, new GraphQlDirective[] { skip, include }); } public FileQueryBuilder ExceptId() { return ExceptField("id"); } public FileQueryBuilder WithSecret(SecretQueryBuilder secretQueryBuilder, string alias = null, SkipDirective skip = null, IncludeDirective include = null) { return WithObjectField("secret", alias, secretQueryBuilder, new GraphQlDirective[] { skip, include }); } public FileQueryBuilder ExceptSecret() { return ExceptField("secret"); } public FileQueryBuilder WithSize(string alias = null, SkipDirective skip = null, IncludeDirective include = null) { return WithScalarField("size", alias, new GraphQlDirective[] { skip, include }); } public FileQueryBuilder ExceptSize() { return ExceptField("size"); } } public class GitRepositoryQueryBuilder : GraphQlQueryBuilder { private static readonly GraphQlFieldMetadata[] AllFieldMetadata = new [] { new GraphQlFieldMetadata { Name = "branch", IsComplex = true, QueryBuilderType = typeof(GitRefQueryBuilder) }, new GraphQlFieldMetadata { Name = "branches", IsComplex = true }, new GraphQlFieldMetadata { Name = "commit", IsComplex = true, QueryBuilderType = typeof(GitRefQueryBuilder) }, new GraphQlFieldMetadata { Name = "tag", IsComplex = true, QueryBuilderType = typeof(GitRefQueryBuilder) }, new GraphQlFieldMetadata { Name = "tags", IsComplex = true } }; protected override string TypeName { get { return "GitRepository"; } } public override IReadOnlyList AllFields { get { return AllFieldMetadata; } } public GitRepositoryQueryBuilder WithBranch(GitRefQueryBuilder gitRefQueryBuilder, QueryBuilderParameter name, string alias = null, SkipDirective skip = null, IncludeDirective include = null) { var args = new List(); args.Add(new QueryBuilderArgumentInfo { ArgumentName = "name", ArgumentValue = name} ); return WithObjectField("branch", alias, gitRefQueryBuilder, new GraphQlDirective[] { skip, include }, args); } public GitRepositoryQueryBuilder ExceptBranch() { return ExceptField("branch"); } public GitRepositoryQueryBuilder WithBranches(string alias = null, SkipDirective skip = null, IncludeDirective include = null) { return WithScalarField("branches", alias, new GraphQlDirective[] { skip, include }); } public GitRepositoryQueryBuilder ExceptBranches() { return ExceptField("branches"); } public GitRepositoryQueryBuilder WithCommit(GitRefQueryBuilder gitRefQueryBuilder, QueryBuilderParameter id, string alias = null, SkipDirective skip = null, IncludeDirective include = null) { var args = new List(); args.Add(new QueryBuilderArgumentInfo { ArgumentName = "id", ArgumentValue = id} ); return WithObjectField("commit", alias, gitRefQueryBuilder, new GraphQlDirective[] { skip, include }, args); } public GitRepositoryQueryBuilder ExceptCommit() { return ExceptField("commit"); } public GitRepositoryQueryBuilder WithTag(GitRefQueryBuilder gitRefQueryBuilder, QueryBuilderParameter name, string alias = null, SkipDirective skip = null, IncludeDirective include = null) { var args = new List(); args.Add(new QueryBuilderArgumentInfo { ArgumentName = "name", ArgumentValue = name} ); return WithObjectField("tag", alias, gitRefQueryBuilder, new GraphQlDirective[] { skip, include }, args); } public GitRepositoryQueryBuilder ExceptTag() { return ExceptField("tag"); } public GitRepositoryQueryBuilder WithTags(string alias = null, SkipDirective skip = null, IncludeDirective include = null) { return WithScalarField("tags", alias, new GraphQlDirective[] { skip, include }); } public GitRepositoryQueryBuilder ExceptTags() { return ExceptField("tags"); } } public class GitRefQueryBuilder : GraphQlQueryBuilder { private static readonly GraphQlFieldMetadata[] AllFieldMetadata = new [] { new GraphQlFieldMetadata { Name = "digest" }, new GraphQlFieldMetadata { Name = "tree", IsComplex = true, QueryBuilderType = typeof(DirectoryQueryBuilder) } }; protected override string TypeName { get { return "GitRef"; } } public override IReadOnlyList AllFields { get { return AllFieldMetadata; } } public GitRefQueryBuilder WithDigest(string alias = null, SkipDirective skip = null, IncludeDirective include = null) { return WithScalarField("digest", alias, new GraphQlDirective[] { skip, include }); } public GitRefQueryBuilder ExceptDigest() { return ExceptField("digest"); } public GitRefQueryBuilder WithTree(DirectoryQueryBuilder directoryQueryBuilder, string alias = null, SkipDirective skip = null, IncludeDirective include = null) { return WithObjectField("tree", alias, directoryQueryBuilder, new GraphQlDirective[] { skip, include }); } public GitRefQueryBuilder ExceptTree() { return ExceptField("tree"); } } public class CacheVolumeQueryBuilder : GraphQlQueryBuilder { private static readonly GraphQlFieldMetadata[] AllFieldMetadata = new [] { new GraphQlFieldMetadata { Name = "id", IsComplex = true } }; protected override string TypeName { get { return "CacheVolume"; } } public override IReadOnlyList AllFields { get { return AllFieldMetadata; } } public CacheVolumeQueryBuilder WithId(string alias = null, SkipDirective skip = null, IncludeDirective include = null) { return WithScalarField("id", alias, new GraphQlDirective[] { skip, include }); } public CacheVolumeQueryBuilder ExceptId() { return ExceptField("id"); } } #endregion #region data classes public class Project { public ICollection Extensions { get; set; } public DirectoryData GeneratedCode { get; set; } public bool? Install { get; set; } public string Name { get; set; } public string Schema { get; set; } public string Sdk { get; set; } } public class DirectoryData { public DirectoryData Diff { get; set; } public DirectoryData Directory { get; set; } public ICollection Entries { get; set; } public bool? Export { get; set; } public File File { get; set; } public object Id { get; set; } public Project LoadProject { get; set; } public DirectoryData WithDirectory { get; set; } public DirectoryData WithFile { get; set; } public DirectoryData WithNewDirectory { get; set; } public DirectoryData WithNewFile { get; set; } public DirectoryData WithoutDirectory { get; set; } public DirectoryData WithoutFile { get; set; } } public class Host { public DirectoryData Directory { get; set; } public HostVariable EnvVariable { get; set; } public DirectoryData Workdir { get; set; } } public class HostVariable { public Secret Secret { get; set; } public string Value { get; set; } } public class Container { public Container Build { get; set; } public ICollection DefaultArgs { get; set; } public DirectoryData Directory { get; set; } public ICollection Entrypoint { get; set; } public string EnvVariable { get; set; } public ICollection EnvVariables { get; set; } public Container Exec { get; set; } public int? ExitCode { get; set; } public bool? Export { get; set; } public File File { get; set; } public Container From { get; set; } public DirectoryData Fs { get; set; } public object Id { get; set; } public ICollection Mounts { get; set; } public object Platform { get; set; } public string Publish { get; set; } public File Stderr { get; set; } public File Stdout { get; set; } public string User { get; set; } public Container WithDefaultArgs { get; set; } public Container WithEntrypoint { get; set; } public Container WithEnvVariable { get; set; } public Container WithFs { get; set; } public Container WithMountedCache { get; set; } public Container WithMountedDirectory { get; set; } public Container WithMountedFile { get; set; } public Container WithMountedSecret { get; set; } public Container WithMountedTemp { get; set; } public Container WithSecretVariable { get; set; } public Container WithUser { get; set; } public Container WithWorkdir { get; set; } public Container WithoutEnvVariable { get; set; } public Container WithoutMount { get; set; } public string Workdir { get; set; } } public class Secret { public object Id { get; set; } public string Plaintext { get; set; } } public class EnvVariable { public string Name { get; set; } public string Value { get; set; } } public class Query { public CacheVolume CacheVolume { get; set; } public Container Container { get; set; } public object DefaultPlatform { get; set; } public DirectoryData Directory { get; set; } public File File { get; set; } public GitRepository Git { get; set; } public Host Host { get; set; } public File Http { get; set; } public Project Project { get; set; } public Secret Secret { get; set; } } public class File { public string Contents { get; set; } public bool? Export { get; set; } public object Id { get; set; } public Secret Secret { get; set; } public int? Size { get; set; } } public class GitRepository { public GitRef Branch { get; set; } public ICollection Branches { get; set; } public GitRef Commit { get; set; } public GitRef Tag { get; set; } public ICollection Tags { get; set; } } public class GitRef { public string Digest { get; set; } public DirectoryData Tree { get; set; } } public class CacheVolume { public object Id { get; set; } } #endregion }