import { Provider, SwellConfig } from '..' import type { OperationContext } from '@commerce/api/operations' import type { Page } from '../../types/page' export type GetAllPagesResult< T extends { pages: any[] } = { pages: Page[] } > = T export default function getAllPagesOperation({ commerce, }: OperationContext<Provider>) { async function getAllPages(opts?: { config?: Partial<SwellConfig> preview?: boolean }): Promise<GetAllPagesResult> async function getAllPages<T extends { pages: any[] }>(opts: { url: string config?: Partial<SwellConfig> preview?: boolean }): Promise<GetAllPagesResult<T>> async function getAllPages({ config: cfg, preview, }: { url?: string config?: Partial<SwellConfig> preview?: boolean } = {}): Promise<GetAllPagesResult> { const config = commerce.getConfig(cfg) const { locale, fetch } = config const data = await fetch('content', 'list', ['pages']) const pages = data?.results?.map(({ slug, ...rest }: { slug: string }) => ({ url: `/${locale}/${slug}`, ...rest, })) ?? [] return { pages, } } return getAllPages }