import type { Product } from '../Commerce/CommerceTypes'; import type { ReviewDetails, ReviewQuery, ReviewQuestion, ReviewStatistics, ReviewSummary, WriteReviewCommand, WriteReviewSubmission } from './ReviewTypes'; declare type ProductReviewIdMapper = (product: T) => string; declare type ProductReviewIdKey = keyof T; export interface ReviewDataSource { fetchQuestions?: (query: ReviewQuery) => Promise; fetchReviewDetails: (query: ReviewQuery) => Promise; fetchReviewSummary: (query: ReviewQuery) => Promise; fetchReviewStatistics: (query: ReviewQuery) => Promise; mergeReviewDetails: (...detailsArray: ReviewDetails[][]) => ReviewDetails[]; productIdMapper: (products: T[], idMap: ProductReviewIdKey | ProductReviewIdMapper) => string[]; } export interface WriteReviewDataSource { writeReview: (command: WriteReviewCommand) => Promise; } export declare abstract class AbstractReviewDataSource implements ReviewDataSource, WriteReviewDataSource { abstract fetchReviewDetails(query: ReviewQuery): Promise; abstract fetchReviewSummary(query: ReviewQuery): Promise; abstract fetchReviewStatistics(query: ReviewQuery): Promise; abstract writeReview(command: WriteReviewCommand): Promise; mergeReviewDetails(...detailsArray: ReviewDetails[][]): ReviewDetails[]; productIdMapper(products: T[], idMap: ProductReviewIdKey | ProductReviewIdMapper): string[]; } export {};