UNPKG

@techsio/storefront-data

Version:

Medusa-first storefront data layer built on TanStack Query.

75 lines • 3.3 kB
import type Medusa from "@medusajs/js-sdk"; import type { HttpTypes } from "@medusajs/types"; import type { ProductService } from "./types"; type MedusaProductListQuery = HttpTypes.StoreProductListParams & Record<string, unknown>; export type MedusaProductListInput = HttpTypes.StoreProductListParams & { locale?: string; }; export type MedusaProductDetailInput = { handle: string; region_id?: string; country_code?: string; province?: string; cart_id?: string; locale?: string; fields?: string; }; export type MedusaProductTransformListContext<TListParams extends MedusaProductListInput> = { params: TListParams; query: MedusaProductListQuery; response: HttpTypes.StoreProductListResponse; }; export type MedusaProductTransformDetailContext<TDetailParams extends MedusaProductDetailInput> = { params: TDetailParams; query: MedusaProductListQuery; response: HttpTypes.StoreProductListResponse; }; export type MedusaProductServiceConfig<TProduct, TListParams extends MedusaProductListInput, TDetailParams extends MedusaProductDetailInput> = { listPath?: string; defaultListFields?: string; defaultDetailFields?: string; /** * Custom list query builder. * * When provided, `defaultListFields` is not applied automatically. * Include desired `fields` directly in the returned query object. */ normalizeListQuery?: (params: TListParams) => MedusaProductListQuery; /** * Custom detail query builder. * * When provided, `defaultDetailFields` is not applied automatically. * Include desired `fields` directly in the returned query object. */ normalizeDetailQuery?: (params: TDetailParams) => MedusaProductListQuery; transformProduct?: (product: HttpTypes.StoreProduct) => TProduct; transformListProduct?: (product: HttpTypes.StoreProduct, context: MedusaProductTransformListContext<TListParams>) => TProduct; transformDetailProduct?: (product: HttpTypes.StoreProduct, context: MedusaProductTransformDetailContext<TDetailParams>) => TProduct; createGlobalFetcher?: boolean; }; /** * Creates a ProductService for Medusa Store API. * * Uses `/store/products` through `sdk.client.fetch` so query cancellation works * with `AbortSignal` passed by TanStack Query. * * @example * ```typescript * import { createProductHooks } from "@techsio/storefront-data/products/hooks" * import { createMedusaProductService } from "@techsio/storefront-data/products/medusa-service" * import { sdk } from "@/lib/medusa-client" * * const service = createMedusaProductService(sdk, { * defaultListFields: "id,title,handle,thumbnail", * defaultDetailFields: "id,title,handle,description,*variants.calculated_price", * }) * * const productHooks = createProductHooks({ * service, * queryKeyNamespace: "my-app", * }) * ``` */ export declare function createMedusaProductService<TProduct = HttpTypes.StoreProduct, TListParams extends MedusaProductListInput = MedusaProductListInput, TDetailParams extends MedusaProductDetailInput = MedusaProductDetailInput>(sdk: Medusa, config?: MedusaProductServiceConfig<TProduct, TListParams, TDetailParams>): ProductService<TProduct, TListParams, TDetailParams>; export {}; //# sourceMappingURL=medusa-service.d.ts.map