diff --git a/packages/bigcommerce/src/lib/normalize.ts b/packages/bigcommerce/src/lib/normalize.ts index 36e6646b6..4db1fea0e 100644 --- a/packages/bigcommerce/src/lib/normalize.ts +++ b/packages/bigcommerce/src/lib/normalize.ts @@ -12,7 +12,7 @@ function normalizeProductOption(productOption: any) { } = productOption return { - id: entityId, + id: String(entityId), values: edges?.map(({ node }: any) => node), ...rest, } @@ -41,7 +41,7 @@ export function normalizeProduct(productNode: any): Product { variants: { $apply: ({ edges }: any) => edges?.map(({ node: { entityId, productOptions, ...rest } }: any) => ({ - id: entityId, + id: String(entityId), options: productOptions?.edges ? productOptions.edges.map(normalizeProductOption) : [], diff --git a/packages/commerce/src/api/utils/errors.ts b/packages/commerce/src/api/utils/errors.ts index 3e56bd8c4..bd98ff0fd 100644 --- a/packages/commerce/src/api/utils/errors.ts +++ b/packages/commerce/src/api/utils/errors.ts @@ -32,7 +32,7 @@ export const getErrorMessage = (error: unknown) => { export const getOperationError = (operation: string, error: unknown) => { if (error instanceof ZodError) { - error = new CommerceError({ + return new CommerceError({ code: 'SCHEMA_VALIDATION_ERROR', message: `The ${operation} operation returned invalid data and has ${ @@ -49,12 +49,5 @@ export const getOperationError = (operation: string, error: unknown) => { }) } - if (error instanceof Error) { - return new CommerceError({ - code: 'OPERATION_ERROR', - message: `An unexpected error ocurred with the ${operation} operation: ${error.message}`, - }) - } - return error } diff --git a/packages/commerce/src/api/utils/with-schema-parser.ts b/packages/commerce/src/api/utils/with-schema-parser.ts index fad918141..41af1987e 100644 --- a/packages/commerce/src/api/utils/with-schema-parser.ts +++ b/packages/commerce/src/api/utils/with-schema-parser.ts @@ -1,6 +1,7 @@ import type { AllowedOperations, OperationsData } from '../operations' import { z } from 'zod' + import { getOperationError } from './errors' import { pageSchema } from '../../schemas/page' import { siteInfoSchema } from '../../schemas/site' @@ -12,13 +13,15 @@ export const withSchemaParser = fn: (...args: any[]) => Promise ) => async (...args: any[]) => { + const result = await fn(...args) + try { - const result = await fn(...args) parse(operation, result) - return result } catch (error) { - return Promise.reject(getOperationError(operation, error)) + throw getOperationError(operation, error) } + + return result } const parse = (operation: AllowedOperations, data: OperationsData) => { diff --git a/packages/kibocommerce/src/api/operations/get-all-products.ts b/packages/kibocommerce/src/api/operations/get-all-products.ts index bddafbffa..3808ce860 100644 --- a/packages/kibocommerce/src/api/operations/get-all-products.ts +++ b/packages/kibocommerce/src/api/operations/get-all-products.ts @@ -2,7 +2,7 @@ import { Product } from '@vercel/commerce/types/product' import { GetAllProductsOperation } from '@vercel/commerce/types/product' import type { OperationContext } from '@vercel/commerce/api/operations' import type { KiboCommerceConfig } from '../index' -import { getAllProductsQuery } from '../queries/get-all-products-query'; +import { getAllProductsQuery } from '../queries/get-all-products-query' import { normalizeProduct } from '../../lib/normalize' export default function getAllProductsOperation({ @@ -18,11 +18,12 @@ export default function getAllProductsOperation({ config?: Partial preview?: boolean } = {}): Promise<{ products: Product[] | any[] }> { - const cfg = commerce.getConfig(config) - const { data } = await cfg.fetch(query); + const { data } = await cfg.fetch(query) - let normalizedProducts = data.products.items ? data.products.items.map( (item:any) => normalizeProduct(item, cfg)) : []; + let normalizedProducts = data.products.items + ? data.products.items.map((item: any) => normalizeProduct(item, cfg)) + : [] return { products: normalizedProducts, diff --git a/packages/kibocommerce/src/api/operations/get-site-info.ts b/packages/kibocommerce/src/api/operations/get-site-info.ts index 6b72d3b47..bb4b8bddf 100644 --- a/packages/kibocommerce/src/api/operations/get-site-info.ts +++ b/packages/kibocommerce/src/api/operations/get-site-info.ts @@ -1,7 +1,7 @@ import { OperationContext } from '@vercel/commerce/api/operations' import { Category } from '@vercel/commerce/types/site' import { KiboCommerceConfig } from '../index' -import {categoryTreeQuery} from '../queries/get-categories-tree-query' +import { categoryTreeQuery } from '../queries/get-categories-tree-query' import { normalizeCategory } from '../../lib/normalize' export type GetSiteInfoResult< @@ -11,9 +11,11 @@ export type GetSiteInfoResult< } > = T -export default function getSiteInfoOperation({commerce}: OperationContext) { +export default function getSiteInfoOperation({ + commerce, +}: OperationContext) { async function getSiteInfo({ - query= categoryTreeQuery, + query = categoryTreeQuery, variables, config, }: { @@ -23,12 +25,13 @@ export default function getSiteInfoOperation({commerce}: OperationContext) preview?: boolean } = {}): Promise { const cfg = commerce.getConfig(config) - const { data } = await cfg.fetch(query); - const categories= data.categories.items.map(normalizeCategory); - return Promise.resolve({ + const { data } = await cfg.fetch(query) + const categories = data.categories.items.map(normalizeCategory) + + return { categories: categories ?? [], brands: [], - }) + } } return getSiteInfo diff --git a/packages/kibocommerce/src/lib/normalize.ts b/packages/kibocommerce/src/lib/normalize.ts index 0401e831e..21a7bf1ec 100644 --- a/packages/kibocommerce/src/lib/normalize.ts +++ b/packages/kibocommerce/src/lib/normalize.ts @@ -43,7 +43,6 @@ export function normalizeProduct(productNode: any, config: any): any { displayName: o.attributeDetail.name, values: o.values.map((v: any) => ({ label: v.value.toString(), - hexColors: '', })), })) || [], } diff --git a/packages/swell/src/api/operations/get-page.ts b/packages/swell/src/api/operations/get-page.ts index 7e71f7575..76d7eb7f9 100644 --- a/packages/swell/src/api/operations/get-page.ts +++ b/packages/swell/src/api/operations/get-page.ts @@ -48,6 +48,7 @@ export default function getPageOperation({ ? { ...page, url: `/${locale}/${page.slug}`, + body: page.body ?? '', } : null, } diff --git a/packages/vendure/src/api/utils/fetch-graphql-api.ts b/packages/vendure/src/api/utils/fetch-graphql-api.ts index 7c0fbc792..97aaba178 100644 --- a/packages/vendure/src/api/utils/fetch-graphql-api.ts +++ b/packages/vendure/src/api/utils/fetch-graphql-api.ts @@ -9,6 +9,7 @@ const fetchGraphqlApi: GraphQLFetcher = async ( fetchOptions ) => { const config = getCommerceApi().getConfig() + const res = await fetch(config.commerceUrl, { ...fetchOptions, method: 'POST', @@ -23,6 +24,7 @@ const fetchGraphqlApi: GraphQLFetcher = async ( }) const json = await res.json() + if (json.errors) { throw new FetcherError({ errors: json.errors ?? [{ message: 'Failed to fetch Vendure API' }], diff --git a/packages/vendure/src/fetcher.ts b/packages/vendure/src/fetcher.ts index ad0d4bc66..e98b25c4e 100644 --- a/packages/vendure/src/fetcher.ts +++ b/packages/vendure/src/fetcher.ts @@ -44,7 +44,7 @@ export const fetcher: Fetcher = async ({ if (res.ok) { const { data, errors } = await res.json() if (errors) { - throw await new FetcherError({ status: res.status, errors }) + throw new FetcherError({ status: res.status, errors }) } return data } diff --git a/packages/vendure/src/utils/normalize.ts b/packages/vendure/src/utils/normalize.ts index 58df8faeb..9275ec2bf 100644 --- a/packages/vendure/src/utils/normalize.ts +++ b/packages/vendure/src/utils/normalize.ts @@ -8,7 +8,7 @@ export function normalizeSearchResult(item: SearchResultFragment): Product { name: item.productName, description: item.description, slug: item.slug, - path: `${item.slug}`, + path: `/${item.slug}`, images: [ { url: item.productAsset?.preview diff --git a/site/lib/search.tsx b/site/lib/search.tsx index eae2fac3f..98ec2d06c 100644 --- a/site/lib/search.tsx +++ b/site/lib/search.tsx @@ -44,7 +44,7 @@ export const getCategoryPath = (path: string, brand?: string) => { } export const getDesignerPath = (path: string, category?: string) => { - return `/search${path ? `/designers/${path}` : ''}${ + return `/search${path ? `/designers${path}` : ''}${ category ? `/${category}` : '' }` } diff --git a/site/pages/product/[slug].tsx b/site/pages/product/[slug].tsx index bb1ecbee3..439de6d1d 100644 --- a/site/pages/product/[slug].tsx +++ b/site/pages/product/[slug].tsx @@ -28,6 +28,7 @@ export async function getStaticProps({ config, preview, }) + const { pages } = await pagesPromise const { categories } = await siteInfoPromise const { product } = await productPromise diff --git a/site/tsconfig.json b/site/tsconfig.json index 7f4d46619..2de809a44 100644 --- a/site/tsconfig.json +++ b/site/tsconfig.json @@ -23,8 +23,8 @@ "@components/*": ["components/*"], "@commerce": ["../packages/commerce/src"], "@commerce/*": ["../packages/commerce/src/*"], - "@framework": ["../packages/vendure/src"], - "@framework/*": ["../packages/vendure/src/*"] + "@framework": ["../packages/shopify/src"], + "@framework/*": ["../packages/shopify/src/*"] } }, "include": ["next-env.d.ts", "**/*.d.ts", "**/*.ts", "**/*.tsx", "**/*.js"],