Skip to main content

๐Ÿท๏ธ GetProductVariantOptions

TypeScript interface defining all available options for the getProductVariant() function.


๐Ÿ“‹ Interface Definitionโ€‹

interface GetProductVariantOptions {
variantId: string;
productFields?: string[];
variantFields?: string[];
productMetafields?: CustomMetafieldDefinition[];
variantMetafields?: CustomMetafieldDefinition[];
options?: {
camelizeKeys?: boolean;
resolveFiles?: boolean;
renderRichTextAsHtml?: boolean;
transformProductMetafields?: MetafieldTransformFn;
transformVariantMetafields?: MetafieldTransformFn;
};
}

๐Ÿ” Core Propertiesโ€‹

variantId (required)โ€‹

  • Type: string
  • Description: The Shopify variant ID to fetch
  • Format: "gid://shopify/ProductVariant/123456789"
const options: GetProductVariantOptions = {
variantId: "gid://shopify/ProductVariant/123456789",
};

๐Ÿ“Š Field Selectionโ€‹

productFieldsโ€‹

  • Type: string[]
  • Optional: Yes
  • Default: ["id", "title", "handle"]
  • Description: Additional product fields to include beyond defaults

Available Values:

type ProductField =
| "vendor"
| "productType"
| "tags"
| "descriptionHtml"
| "description"
| "images"
| "featuredImage"
| "variants"
| "seo"
| "createdAt"
| "updatedAt";

variantFieldsโ€‹

  • Type: string[]
  • Optional: Yes
  • Default: ["id", "title"]
  • Description: Additional variant fields to include beyond defaults

Available Values:

type VariantField =
| "price"
| "compareAtPrice"
| "availableForSale"
| "selectedOptions"
| "image"
| "sku"
| "barcode"
| "weight"
| "weightUnit"
| "requiresShipping"
| "taxable"
| "inventoryQuantity"
| "inventoryPolicy";

๐Ÿท๏ธ Metafield Configurationโ€‹

productMetafieldsโ€‹

  • Type: CustomMetafieldDefinition[]
  • Optional: Yes
  • Description: Product metafields to include in results

variantMetafieldsโ€‹

  • Type: CustomMetafieldDefinition[]
  • Optional: Yes
  • Description: Variant metafields to include in results

CustomMetafieldDefinitionโ€‹

interface CustomMetafieldDefinition {
field: string;
type: MetafieldType;
}

type MetafieldType =
| "single_line_text"
| "multi_line_text"
| "rich_text"
| "number_integer"
| "number_decimal"
| "date"
| "date_time"
| "boolean"
| "url"
| "json"
| "color"
| "weight"
| "volume"
| "dimension"
| "rating"
| "file_reference"
| "page_reference"
| "product_reference"
| "variant_reference"
| "collection_reference";

๐Ÿ”ง Processing Optionsโ€‹

optionsโ€‹

  • Type: object
  • Optional: Yes
  • Description: Additional processing configuration
interface ProcessingOptions {
camelizeKeys?: boolean;
resolveFiles?: boolean;
renderRichTextAsHtml?: boolean;
transformProductMetafields?: MetafieldTransformFn;
transformVariantMetafields?: MetafieldTransformFn;
}

Processing Option Details:โ€‹

camelizeKeys

  • Type: boolean
  • Default: true
  • Description: Convert metafield keys to camelCase

resolveFiles

  • Type: boolean
  • Default: true
  • Description: Resolve file metafields to full URLs

renderRichTextAsHtml

  • Type: boolean
  • Default: false
  • Description: Convert rich text to HTML strings

transformProductMetafields

  • Type: MetafieldTransformFn
  • Description: Custom product metafield transformation

transformVariantMetafields

  • Type: MetafieldTransformFn
  • Description: Custom variant metafield transformation

MetafieldTransformFnโ€‹

type MetafieldTransformFn = (
raw: Record<string, any>,
casted: Record<string, any>
) => Record<string, any>;

๐Ÿงช Usage Examplesโ€‹

Basic Optionsโ€‹

const basicOptions: GetProductVariantOptions = {
variantId: "gid://shopify/ProductVariant/123456789",
};

With Additional Fieldsโ€‹

const withFields: GetProductVariantOptions = {
variantId: "gid://shopify/ProductVariant/123456789",
productFields: ["vendor", "productType", "images"],
variantFields: ["price", "availableForSale", "selectedOptions"],
};

With Metafieldsโ€‹

const withMetafields: GetProductVariantOptions = {
variantId: "gid://shopify/ProductVariant/123456789",
productMetafields: [
{ field: "custom.brand", type: "single_line_text" },
{ field: "custom.warranty_years", type: "number_integer" },
],
variantMetafields: [
{ field: "custom.sku", type: "single_line_text" },
{ field: "custom.weight", type: "weight" },
],
};

Complete Configurationโ€‹

const completeOptions: GetProductVariantOptions = {
variantId: "gid://shopify/ProductVariant/123456789",
productFields: [
"vendor",
"productType",
"tags",
"descriptionHtml",
"images",
"variants",
],
variantFields: [
"price",
"compareAtPrice",
"availableForSale",
"selectedOptions",
"image",
"sku",
],
productMetafields: [
{ field: "custom.brand", type: "single_line_text" },
{ field: "custom.warranty_years", type: "number_integer" },
{ field: "custom.specifications", type: "rich_text" },
],
variantMetafields: [
{ field: "custom.sku", type: "single_line_text" },
{ field: "custom.weight", type: "weight" },
{ field: "custom.color_code", type: "color" },
],
options: {
camelizeKeys: true,
resolveFiles: true,
renderRichTextAsHtml: true,
transformProductMetafields: (raw, casted) => ({
...casted,
displayBrand: casted.customBrand?.toUpperCase(),
warrantyText: `${casted.customWarrantyYears} year warranty`,
}),
transformVariantMetafields: (raw, casted) => ({
...casted,
displayWeight: `${casted.customWeight?.value} ${casted.customWeight?.unit}`,
}),
},
};

โœ… Next: Result Types โ†’