From 2e30281e6950b3a54dd4d7bec1aef8301f9f5941 Mon Sep 17 00:00:00 2001 From: DuvCharles Date: Fri, 30 Sep 2022 13:42:14 +0200 Subject: [PATCH] feat: mock api routes --- .../sylius/src/api/endpoints/cart/index.ts | 1 + .../sylius/src/api/endpoints/catalog/index.ts | 1 + .../src/api/endpoints/catalog/products.ts | 1 + .../src/api/endpoints/checkout/index.ts | 1 + .../src/api/endpoints/customer/address.ts | 1 + .../sylius/src/api/endpoints/customer/card.ts | 1 + .../src/api/endpoints/customer/index.ts | 1 + .../sylius/src/api/endpoints/login/index.ts | 1 + .../sylius/src/api/endpoints/logout/index.ts | 1 + .../sylius/src/api/endpoints/signup/index.ts | 1 + .../src/api/endpoints/wishlist/index.tsx | 1 + packages/sylius/src/api/index.ts | 42 ++++++++++++++++++ .../src/api/operations/get-all-pages.ts | 19 ++++++++ .../api/operations/get-all-product-paths.ts | 13 ++++++ .../src/api/operations/get-all-products.ts | 24 +++++++++++ .../api/operations/get-customer-wishlist.ts | 6 +++ .../sylius/src/api/operations/get-page.ts | 13 ++++++ .../sylius/src/api/operations/get-product.ts | 25 +++++++++++ .../src/api/operations/get-site-info.ts | 43 +++++++++++++++++++ packages/sylius/src/api/operations/index.ts | 6 +++ packages/sylius/src/api/utils/fetch-local.ts | 34 +++++++++++++++ packages/sylius/src/api/utils/fetch.ts | 3 ++ site/tsconfig.json | 4 +- 23 files changed, 241 insertions(+), 2 deletions(-) create mode 100644 packages/sylius/src/api/endpoints/cart/index.ts create mode 100644 packages/sylius/src/api/endpoints/catalog/index.ts create mode 100644 packages/sylius/src/api/endpoints/catalog/products.ts create mode 100644 packages/sylius/src/api/endpoints/checkout/index.ts create mode 100644 packages/sylius/src/api/endpoints/customer/address.ts create mode 100644 packages/sylius/src/api/endpoints/customer/card.ts create mode 100644 packages/sylius/src/api/endpoints/customer/index.ts create mode 100644 packages/sylius/src/api/endpoints/login/index.ts create mode 100644 packages/sylius/src/api/endpoints/logout/index.ts create mode 100644 packages/sylius/src/api/endpoints/signup/index.ts create mode 100644 packages/sylius/src/api/endpoints/wishlist/index.tsx create mode 100644 packages/sylius/src/api/index.ts create mode 100644 packages/sylius/src/api/operations/get-all-pages.ts create mode 100644 packages/sylius/src/api/operations/get-all-product-paths.ts create mode 100644 packages/sylius/src/api/operations/get-all-products.ts create mode 100644 packages/sylius/src/api/operations/get-customer-wishlist.ts create mode 100644 packages/sylius/src/api/operations/get-page.ts create mode 100644 packages/sylius/src/api/operations/get-product.ts create mode 100644 packages/sylius/src/api/operations/get-site-info.ts create mode 100644 packages/sylius/src/api/operations/index.ts create mode 100644 packages/sylius/src/api/utils/fetch-local.ts create mode 100644 packages/sylius/src/api/utils/fetch.ts diff --git a/packages/sylius/src/api/endpoints/cart/index.ts b/packages/sylius/src/api/endpoints/cart/index.ts new file mode 100644 index 000000000..491bf0ac9 --- /dev/null +++ b/packages/sylius/src/api/endpoints/cart/index.ts @@ -0,0 +1 @@ +export default function noopApi(...args: any[]): void {} diff --git a/packages/sylius/src/api/endpoints/catalog/index.ts b/packages/sylius/src/api/endpoints/catalog/index.ts new file mode 100644 index 000000000..491bf0ac9 --- /dev/null +++ b/packages/sylius/src/api/endpoints/catalog/index.ts @@ -0,0 +1 @@ +export default function noopApi(...args: any[]): void {} diff --git a/packages/sylius/src/api/endpoints/catalog/products.ts b/packages/sylius/src/api/endpoints/catalog/products.ts new file mode 100644 index 000000000..491bf0ac9 --- /dev/null +++ b/packages/sylius/src/api/endpoints/catalog/products.ts @@ -0,0 +1 @@ +export default function noopApi(...args: any[]): void {} diff --git a/packages/sylius/src/api/endpoints/checkout/index.ts b/packages/sylius/src/api/endpoints/checkout/index.ts new file mode 100644 index 000000000..491bf0ac9 --- /dev/null +++ b/packages/sylius/src/api/endpoints/checkout/index.ts @@ -0,0 +1 @@ +export default function noopApi(...args: any[]): void {} diff --git a/packages/sylius/src/api/endpoints/customer/address.ts b/packages/sylius/src/api/endpoints/customer/address.ts new file mode 100644 index 000000000..491bf0ac9 --- /dev/null +++ b/packages/sylius/src/api/endpoints/customer/address.ts @@ -0,0 +1 @@ +export default function noopApi(...args: any[]): void {} diff --git a/packages/sylius/src/api/endpoints/customer/card.ts b/packages/sylius/src/api/endpoints/customer/card.ts new file mode 100644 index 000000000..491bf0ac9 --- /dev/null +++ b/packages/sylius/src/api/endpoints/customer/card.ts @@ -0,0 +1 @@ +export default function noopApi(...args: any[]): void {} diff --git a/packages/sylius/src/api/endpoints/customer/index.ts b/packages/sylius/src/api/endpoints/customer/index.ts new file mode 100644 index 000000000..491bf0ac9 --- /dev/null +++ b/packages/sylius/src/api/endpoints/customer/index.ts @@ -0,0 +1 @@ +export default function noopApi(...args: any[]): void {} diff --git a/packages/sylius/src/api/endpoints/login/index.ts b/packages/sylius/src/api/endpoints/login/index.ts new file mode 100644 index 000000000..491bf0ac9 --- /dev/null +++ b/packages/sylius/src/api/endpoints/login/index.ts @@ -0,0 +1 @@ +export default function noopApi(...args: any[]): void {} diff --git a/packages/sylius/src/api/endpoints/logout/index.ts b/packages/sylius/src/api/endpoints/logout/index.ts new file mode 100644 index 000000000..491bf0ac9 --- /dev/null +++ b/packages/sylius/src/api/endpoints/logout/index.ts @@ -0,0 +1 @@ +export default function noopApi(...args: any[]): void {} diff --git a/packages/sylius/src/api/endpoints/signup/index.ts b/packages/sylius/src/api/endpoints/signup/index.ts new file mode 100644 index 000000000..491bf0ac9 --- /dev/null +++ b/packages/sylius/src/api/endpoints/signup/index.ts @@ -0,0 +1 @@ +export default function noopApi(...args: any[]): void {} diff --git a/packages/sylius/src/api/endpoints/wishlist/index.tsx b/packages/sylius/src/api/endpoints/wishlist/index.tsx new file mode 100644 index 000000000..491bf0ac9 --- /dev/null +++ b/packages/sylius/src/api/endpoints/wishlist/index.tsx @@ -0,0 +1 @@ +export default function noopApi(...args: any[]): void {} diff --git a/packages/sylius/src/api/index.ts b/packages/sylius/src/api/index.ts new file mode 100644 index 000000000..3b24a3045 --- /dev/null +++ b/packages/sylius/src/api/index.ts @@ -0,0 +1,42 @@ +import type { CommerceAPI, CommerceAPIConfig } from '@vercel/commerce/api' +import { getCommerceApi as commerceApi } from '@vercel/commerce/api' +import createFetcher from './utils/fetch-local' + +import getAllPages from './operations/get-all-pages' +import getPage from './operations/get-page' +import getSiteInfo from './operations/get-site-info' +import getCustomerWishlist from './operations/get-customer-wishlist' +import getAllProductPaths from './operations/get-all-product-paths' +import getAllProducts from './operations/get-all-products' +import getProduct from './operations/get-product' + +export interface LocalConfig extends CommerceAPIConfig {} +const config: LocalConfig = { + commerceUrl: '', + apiToken: '', + cartCookie: '', + customerCookie: '', + cartCookieMaxAge: 2592000, + fetch: createFetcher(() => getCommerceApi().getConfig()), +} + +const operations = { + getAllPages, + getPage, + getSiteInfo, + getCustomerWishlist, + getAllProductPaths, + getAllProducts, + getProduct, +} + +export const provider = { config, operations } + +export type Provider = typeof provider +export type LocalAPI

= CommerceAPI

+ +export function getCommerceApi

( + customProvider: P = provider as any +): LocalAPI

{ + return commerceApi(customProvider as any) +} diff --git a/packages/sylius/src/api/operations/get-all-pages.ts b/packages/sylius/src/api/operations/get-all-pages.ts new file mode 100644 index 000000000..b258fe70a --- /dev/null +++ b/packages/sylius/src/api/operations/get-all-pages.ts @@ -0,0 +1,19 @@ +export type Page = { url: string } +export type GetAllPagesResult = { pages: Page[] } +import type { LocalConfig } from '../index' + +export default function getAllPagesOperation() { + function getAllPages({ + config, + preview, + }: { + url?: string + config?: Partial + preview?: boolean + }): Promise { + return Promise.resolve({ + pages: [], + }) + } + return getAllPages +} diff --git a/packages/sylius/src/api/operations/get-all-product-paths.ts b/packages/sylius/src/api/operations/get-all-product-paths.ts new file mode 100644 index 000000000..d8c56cd83 --- /dev/null +++ b/packages/sylius/src/api/operations/get-all-product-paths.ts @@ -0,0 +1,13 @@ +export type GetAllProductPathsResult = { + products: Array<{ path: string }> +} + +export default function getAllProductPathsOperation() { + function getAllProductPaths(): Promise { + return Promise.resolve({ + products: [], + }) + } + + return getAllProductPaths +} diff --git a/packages/sylius/src/api/operations/get-all-products.ts b/packages/sylius/src/api/operations/get-all-products.ts new file mode 100644 index 000000000..57893dea6 --- /dev/null +++ b/packages/sylius/src/api/operations/get-all-products.ts @@ -0,0 +1,24 @@ +import { Product } from '@vercel/commerce/types/product' +import { GetAllProductsOperation } from '@vercel/commerce/types/product' +import type { OperationContext } from '@vercel/commerce/api/operations' +import type { LocalConfig, Provider } from '../index' + +export default function getAllProductsOperation({ + commerce, +}: OperationContext) { + async function getAllProducts({ + query = '', + variables, + config, + }: { + query?: string + variables?: T['variables'] + config?: Partial + preview?: boolean + } = {}): Promise<{ products: Product[] | any[] }> { + return { + products: [], + } + } + return getAllProducts +} diff --git a/packages/sylius/src/api/operations/get-customer-wishlist.ts b/packages/sylius/src/api/operations/get-customer-wishlist.ts new file mode 100644 index 000000000..8c34b9e87 --- /dev/null +++ b/packages/sylius/src/api/operations/get-customer-wishlist.ts @@ -0,0 +1,6 @@ +export default function getCustomerWishlistOperation() { + function getCustomerWishlist(): any { + return { wishlist: {} } + } + return getCustomerWishlist +} diff --git a/packages/sylius/src/api/operations/get-page.ts b/packages/sylius/src/api/operations/get-page.ts new file mode 100644 index 000000000..b0cfdf58f --- /dev/null +++ b/packages/sylius/src/api/operations/get-page.ts @@ -0,0 +1,13 @@ +export type Page = any +export type GetPageResult = { page?: Page } + +export type PageVariables = { + id: number +} + +export default function getPageOperation() { + function getPage(): Promise { + return Promise.resolve({}) + } + return getPage +} diff --git a/packages/sylius/src/api/operations/get-product.ts b/packages/sylius/src/api/operations/get-product.ts new file mode 100644 index 000000000..309d48ed5 --- /dev/null +++ b/packages/sylius/src/api/operations/get-product.ts @@ -0,0 +1,25 @@ +import type { LocalConfig } from '../index' +import { Product } from '@vercel/commerce/types/product' +import { GetProductOperation } from '@vercel/commerce/types/product' +import type { OperationContext } from '@vercel/commerce/api/operations' + +export default function getProductOperation({ + commerce, +}: OperationContext) { + async function getProduct({ + query = '', + variables, + config, + }: { + query?: string + variables?: T['variables'] + config?: Partial + preview?: boolean + } = {}): Promise { + return { + product: {}, + } + } + + return getProduct +} diff --git a/packages/sylius/src/api/operations/get-site-info.ts b/packages/sylius/src/api/operations/get-site-info.ts new file mode 100644 index 000000000..c07a479cb --- /dev/null +++ b/packages/sylius/src/api/operations/get-site-info.ts @@ -0,0 +1,43 @@ +import { OperationContext } from '@vercel/commerce/api/operations' +import { Category } from '@vercel/commerce/types/site' +import { LocalConfig } from '../index' + +export type GetSiteInfoResult< + T extends { categories: any[]; brands: any[] } = { + categories: Category[] + brands: any[] + } +> = T + +export default function getSiteInfoOperation({}: OperationContext) { + function getSiteInfo({ + query, + variables, + config: cfg, + }: { + query?: string + variables?: any + config?: Partial + preview?: boolean + } = {}): Promise { + return Promise.resolve({ + categories: [ + { + id: 'new-arrivals', + name: 'New Arrivals', + slug: 'new-arrivals', + path: '/new-arrivals', + }, + { + id: 'featured', + name: 'Featured', + slug: 'featured', + path: '/featured', + }, + ], + brands: [], + }) + } + + return getSiteInfo +} diff --git a/packages/sylius/src/api/operations/index.ts b/packages/sylius/src/api/operations/index.ts new file mode 100644 index 000000000..086fdf83a --- /dev/null +++ b/packages/sylius/src/api/operations/index.ts @@ -0,0 +1,6 @@ +export { default as getPage } from './get-page' +export { default as getSiteInfo } from './get-site-info' +export { default as getAllPages } from './get-all-pages' +export { default as getProduct } from './get-product' +export { default as getAllProducts } from './get-all-products' +export { default as getAllProductPaths } from './get-all-product-paths' diff --git a/packages/sylius/src/api/utils/fetch-local.ts b/packages/sylius/src/api/utils/fetch-local.ts new file mode 100644 index 000000000..ae84fff8b --- /dev/null +++ b/packages/sylius/src/api/utils/fetch-local.ts @@ -0,0 +1,34 @@ +import { FetcherError } from '@vercel/commerce/utils/errors' +import type { GraphQLFetcher } from '@vercel/commerce/api' +import type { LocalConfig } from '../index' +import fetch from './fetch' + +const fetchGraphqlApi: (getConfig: () => LocalConfig) => GraphQLFetcher = + (getConfig) => + async (query: string, { variables, preview } = {}, fetchOptions) => { + const config = getConfig() + const res = await fetch(config.commerceUrl, { + ...fetchOptions, + method: 'POST', + headers: { + ...fetchOptions?.headers, + 'Content-Type': 'application/json', + }, + body: JSON.stringify({ + query, + variables, + }), + }) + + const json = await res.json() + if (json.errors) { + throw new FetcherError({ + errors: json.errors ?? [{ message: 'Failed to fetch for API' }], + status: res.status, + }) + } + + return { data: json.data, res } + } + +export default fetchGraphqlApi diff --git a/packages/sylius/src/api/utils/fetch.ts b/packages/sylius/src/api/utils/fetch.ts new file mode 100644 index 000000000..9d9fff3ed --- /dev/null +++ b/packages/sylius/src/api/utils/fetch.ts @@ -0,0 +1,3 @@ +import zeitFetch from '@vercel/fetch' + +export default zeitFetch() diff --git a/site/tsconfig.json b/site/tsconfig.json index 7ed3983f0..7c91afd6f 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/sylius/src"], - "@framework/*": ["../packages/sylius/src/*"] + "@framework": ["../packages/local/src"], + "@framework/*": ["../packages/local/src/*"] } }, "include": ["next-env.d.ts", "**/*.d.ts", "**/*.ts", "**/*.tsx", "**/*.js"],