import type { Cart, LineItem, CommercejsCart, CommercejsLineItem, } from '../types/cart' type CommercejsLineItemType = CommercejsLineItem & { image: { url: string } } const normalizeLineItem = ( commercejsLineItem: CommercejsLineItemType ): LineItem => { const { id, sku, quantity, price, product_id, product_name, permalink, variant, image, selected_options, } = commercejsLineItem return { id, variantId: variant?.id ?? '', productId: product_id, name: product_name, quantity, discounts: [], path: permalink, options: selected_options?.map(({ group_name, option_name }) => ({ name: group_name, value: option_name, })), variant: { id: variant?.id ?? id, sku: variant?.sku ?? sku, name: product_name, requiresShipping: false, price: variant?.price?.raw ?? price.raw, listPrice: variant?.price?.raw ?? price.raw, image: { url: image?.url, }, }, } } export const normalizeCart = (commercejsCart: CommercejsCart): Cart => { const { id, created, subtotal: { raw: rawPrice }, currency, line_items, } = commercejsCart return { id, createdAt: new Date(created * 1000).toISOString(), currency: { code: currency.code, }, taxesIncluded: false, lineItems: line_items.map((item) => { return normalizeLineItem(item as CommercejsLineItemType) }), lineItemsSubtotalPrice: rawPrice, subtotalPrice: rawPrice, totalPrice: rawPrice, } }