# The details of a specific product category within the Shopify product taxonomy.
type ProductCategory {
    # The product taxonomy node associated with the product category.
    productTaxonomyNode: ProductTaxonomyNode
}

# Properties used by customers to select a product variant.
# Products can have multiple options, like different sizes or colors.
type SelectedOption {
    # The product option’s name.
    name: String!

    # The product option’s value.
    value: String!
}

# The price of a product variant in a specific country.
# Prices vary between countries.
type ProductVariantContextualPricing {
    # The final compare-at price after all adjustments are applied.
    compareAtPrice: MoneyV2

    # The final price after all adjustments are applied.
    price: MoneyV2!
}

# The context data that determines the pricing of a variant.
input ContextualPricingContext {
    # The country code used to fetch country-specific prices.
    country: CountryCode

    # The CompanyLocation ID used to fetch company location specific prices.
    companyLocationId: ID
}

# The set of rules that are used to determine which products are included in the collection.
type CollectionRuleSet {
    # Whether products must match any or all of the rules to be included in the collection.
    # If true, then products must match at least one of the rules to be included in the collection.
    # If false, then products must match all of the rules to be included in the collection.
    appliedDisjunctively: Boolean!

    # The rules used to assign products to the collection.
    rules: [CollectionRule!]!
}

# The set of rules that are used to determine which products are included in the collection.
type CollectionRule {
    # Whether products must match any or all of the rules to be included in the collection.
    # If true, then products must match at least one of the rules to be included in the collection.
    # If false, then products must match all of the rules to be included in the collection.
    appliedDisjunctively: Boolean!

    # The rules used to assign products to the collection.
    rules: [CollectionRule!]!
}

# The price of a product in a specific country.
# Prices vary between countries.
type ProductContextualPricing {
    # The pricing of the variant with the highest price in the given context.
    maxVariantPricing: ProductVariantContextualPricing

    # The pricing of the variant with the lowest price in the given context.
    minVariantPricing: ProductVariantContextualPricing

    # The price range of the product with prices formatted as decimals.
    priceRange: ProductPriceRangeV2!
}

# The price range of the product.
type ProductPriceRangeV2 {
    # The highest variant's price.
    maxVariantPrice: MoneyV2!

    # The lowest variant's price.
    minVariantPrice: MoneyV2!
}

# Represents a Shopify product taxonomy node.
type ProductTaxonomyNode implements Node {
    # The full name of the product taxonomy node.
    # For example, Animals & Pet Supplies > Pet Supplies > Dog Supplies > Dog Beds.
    fullName: String!

    # The ID of the product taxonomy node.
    id: ID!

    # Whether the node is a leaf node.
    isLeaf: Boolean!

    # Whether the node is a root node.
    isRoot: Boolean!

    # The name of the product taxonomy node. For example, Dog Beds.
    name: String!
}

# An auto-generated type for paginating through multiple InventoryLevels.
type InventoryLevelConnection {
    # A list of edges.
    edges: [InventoryLevelEdge!]!

    # A list of the nodes contained in InventoryLevelEdge.
    nodes: [InventoryLevel!]!

    # Information to aid in pagination.
    pageInfo: PageInfo!
}

# An auto-generated type which holds one InventoryLevel and a cursor during pagination.
type InventoryLevelEdge {
    # A cursor for use in pagination.
    cursor: String!

    # The item at the end of InventoryLevelEdge.
    node: InventoryLevel!
}

# An auto-generated type for paginating through multiple Products.
type ProductConnection {
    # A list of edges.
    edges: [ProductEdge!]!

    # A list of the nodes contained in ProductEdge.
    nodes: [Product!]!

    # Information to aid in pagination.
    pageInfo: PageInfo!
}

# An auto-generated type which holds one Product and a cursor during pagination.
type ProductEdge {
    # A cursor for use in pagination.
    cursor: String!

    # The item at the end of ProductEdge.
    node: Product!
}

# An auto-generated type for paginating through multiple Collections.
type CollectionConnection {
    # A list of edges.
    edges: [CollectionEdge!]!

    # A list of the nodes contained in CollectionEdge.
    nodes: [Collection!]!

    # Information to aid in pagination.
    pageInfo: PageInfo!
}

# An auto-generated type which holds one Collection and a cursor during pagination.
type CollectionEdge {
    # A cursor for use in pagination.
    cursor: String!

    # The item at the end of CollectionEdge.
    node: Collection!
}

# An auto-generated type for paginating through multiple ProductVariants.
type ProductVariantConnection {
    # A list of edges.
    edges: [ProductVariantEdge!]!

    # A list of the nodes contained in ProductVariantEdge.
    nodes: [ProductVariant!]!

    # Information to aid in pagination.
    pageInfo: PageInfo!
}

# An auto-generated type which holds one ProductVariant and a cursor during pagination.
type ProductVariantEdge {
    # A cursor for use in pagination.
    cursor: String!

    # The item at the end of ProductVariantEdge.
    node: ProductVariant!
}

# An auto-generated type for paginating through multiple SavedSearches.
type SavedSearchConnection {
    # A list of edges.
    edges: [SavedSearchEdge!]!

    # A list of the nodes contained in SavedSearchEdge.
    nodes: [SavedSearch!]!

    # Information to aid in pagination.
    pageInfo: PageInfo!
}

# An auto-generated type which holds one SavedSearch and a cursor during pagination.
type SavedSearchEdge {
    # A cursor for use in pagination.
    cursor: String!

    # The item at the end of SavedSearchEdge.
    node: SavedSearch!
}

# An auto-generated type for paginating through multiple Images.
type ImageConnection {
    # A list of edges.
    edges: [ImageEdge!]!

    # A list of the nodes contained in ImageEdge.
    nodes: [Image!]!

    # Information to aid in pagination.
    pageInfo: PageInfo!
}

# An auto-generated type which holds one Image and a cursor during pagination.
type ImageEdge {
    # A cursor for use in pagination.
    cursor: String!

    # The item at the end of ImageEdge.
    node: Image!
}

# An auto-generated type for paginating through multiple Media.
type MediaConnection {
    # A list of edges.
    edges: [MediaEdge!]!

    # A list of the nodes contained in MediaEdge.
    nodes: [Media!]!

    # Information to aid in pagination.
    pageInfo: PageInfo!
}

# An auto-generated type which holds one Media and a cursor during pagination.
type MediaEdge {
    # A cursor for use in pagination.
    cursor: String!

    # The item at the end of MediaEdge.
    node: Media!
}
