@techsio/storefront-data
Version:
Medusa-first storefront data layer built on TanStack Query.
75 lines • 3.3 kB
TypeScript
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