import type { OperationContext } from '@commerce/api/operations' import type { GetProductOperation } from '../../types/product' import type { CommercejsConfig, Provider } from '../index' import { normalizeProduct } from '../../utils/normalize-product' export default function getProductOperation({ commerce, }: OperationContext) { async function getProduct({ config, variables, }: { query?: string variables?: T['variables'] config?: Partial preview?: boolean } = {}): Promise { const { sdkFetch } = commerce.getConfig(config) // Fetch a product by its permalink. const product = await sdkFetch( 'products', 'retrieve', variables?.slug || '', { type: 'permalink', } ) const { data: variants } = await sdkFetch( 'products', 'getVariants', product.id ) const productFormatted = normalizeProduct(product, variants) return { product: productFormatted, } } return getProduct }