forked from crowetic/commerce
* Implement Shopify Provider * Update README.md * Update README.md * normalizations & missing files * Update index.ts * fixes * Update normalize.ts * fix: cart error on first load * shopify checkout redirect & api handler * Update get-checkout-id.ts * Fix: color option * Update normalize.ts * changes * Update next.config.js * start customer auth & signup * Update config.ts * Login, Sign Up, Log Out, and checkout & customer association * Automatic login after sign-up * Update handle-login.ts * changes * Revert "Merge branch 'agnostic' of https://github.com/vercel/commerce into agnostic" This reverts commit 23c8ed7c2d48d30e74ad94216f9910650fadf30c, reversing changes made to bf50965a39ef0b1b956461ebe62070809fbe1d63. * change readme * Revert "Merge branch 'master' of https://github.com/vercel/commerce into agnostic" This reverts commit bf50965a39ef0b1b956461ebe62070809fbe1d63, reversing changes made to 0dad4ddedbf0bff2d0b5800ca469fda0073889ea. * Revert "Revert "Merge branch 'agnostic' of https://github.com/vercel/commerce into agnostic"" This reverts commit c9a43f1bce0572d0eff41f3af893be8bdb00bedd. * align with upstream changes * query all products for vendors & paths, improve search * Update use-search.tsx * fix cart after upstream changes * fixes after upstream changes * Moved handler to each hook * Added initial version of useAddItem * Updated types * Update use-add-item.tsx * Moved auth & cart hooks + several fixes * Updated cart item, fixed deprecations * Update next.config.js * Aligned with upstream changes * Updates * Update next.config.js
59 lines
1.4 KiB
TypeScript
59 lines
1.4 KiB
TypeScript
import type { NextApiHandler, NextApiRequest, NextApiResponse } from 'next'
|
|
import { ShopifyConfig, getConfig } from '..'
|
|
|
|
export type ShopifyApiHandler<
|
|
T = any,
|
|
H extends ShopifyHandlers = {},
|
|
Options extends {} = {}
|
|
> = (
|
|
req: NextApiRequest,
|
|
res: NextApiResponse<ShopifyApiResponse<T>>,
|
|
config: ShopifyConfig,
|
|
handlers: H,
|
|
// Custom configs that may be used by a particular handler
|
|
options: Options
|
|
) => void | Promise<void>
|
|
|
|
export type ShopifyHandler<T = any, Body = null> = (options: {
|
|
req: NextApiRequest
|
|
res: NextApiResponse<ShopifyApiResponse<T>>
|
|
config: ShopifyConfig
|
|
body: Body
|
|
}) => void | Promise<void>
|
|
|
|
export type ShopifyHandlers<T = any> = {
|
|
[k: string]: ShopifyHandler<T, any>
|
|
}
|
|
|
|
export type ShopifyApiResponse<T> = {
|
|
data: T | null
|
|
errors?: { message: string; code?: string }[]
|
|
}
|
|
|
|
export default function createApiHandler<
|
|
T = any,
|
|
H extends ShopifyHandlers = {},
|
|
Options extends {} = {}
|
|
>(
|
|
handler: ShopifyApiHandler<T, H, Options>,
|
|
handlers: H,
|
|
defaultOptions: Options
|
|
) {
|
|
return function getApiHandler({
|
|
config,
|
|
operations,
|
|
options,
|
|
}: {
|
|
config?: ShopifyConfig
|
|
operations?: Partial<H>
|
|
options?: Options extends {} ? Partial<Options> : never
|
|
} = {}): NextApiHandler {
|
|
const ops = { ...operations, ...handlers }
|
|
const opts = { ...defaultOptions, ...options }
|
|
|
|
return function apiHandler(req, res) {
|
|
return handler(req, res, getConfig(config), ops, opts)
|
|
}
|
|
}
|
|
}
|