import type { OperationContext, OperationOptions, } from '@commerce/api/operations' import { GetProductOperation } from '../../types/product' import { normalizeProduct, getProductQuery } from '../../utils' import type { ShopifyConfig, Provider } from '..' import { GetProductBySlugQuery, Product as ShopifyProduct } from '../../schema' export default function getProductOperation({ commerce, }: OperationContext) { async function getProduct(opts: { variables: T['variables'] config?: Partial preview?: boolean }): Promise async function getProduct( opts: { variables: T['variables'] config?: Partial preview?: boolean } & OperationOptions ): Promise async function getProduct({ query = getProductQuery, variables, config: cfg, }: { query?: string variables: T['variables'] config?: Partial preview?: boolean }): Promise { const { fetch, locale } = commerce.getConfig(cfg) const { data: { productByHandle }, } = await fetch( query, { variables, }, { ...(locale && { headers: { 'Accept-Language': locale, }, }), } ) return { ...(productByHandle && { product: normalizeProduct(productByHandle as ShopifyProduct), }), } } return getProduct }