Moved method

This commit is contained in:
Luis Alvarez 2021-05-04 14:42:25 -05:00
parent beccca8eaf
commit 722f4cee23
2 changed files with 37 additions and 32 deletions

View File

@ -1,19 +1,15 @@
import type { NextApiHandler } from 'next' import type { NextApiHandler } from 'next'
import type { RequestInit } from '@vercel/fetch' import type { RequestInit } from '@vercel/fetch'
import { CommerceAPI, CommerceAPIConfig } from '@commerce/api' import {
CommerceAPIConfig,
getCommerceApi as commerceApi,
getEndpoint,
} from '@commerce/api'
import fetchGraphqlApi from './utils/fetch-graphql-api' import fetchGraphqlApi from './utils/fetch-graphql-api'
import fetchStoreApi from './utils/fetch-store-api' import fetchStoreApi from './utils/fetch-store-api'
import type { CartAPI } from './cart' import type { CartAPI } from './cart'
import login from './operations/login' import login from './operations/login'
import {
Operations,
defaultOperations,
AllowedOperations,
OPERATIONS,
getOperations,
APIOperations,
} from '@commerce/api/operations'
export interface BigcommerceConfig extends CommerceAPIConfig { export interface BigcommerceConfig extends CommerceAPIConfig {
// Indicates if the returned metadata with translations should be applied to the // Indicates if the returned metadata with translations should be applied to the
@ -119,17 +115,16 @@ export type APIs = CartAPI
export function getCommerceApi<P extends Provider>( export function getCommerceApi<P extends Provider>(
customProvider: P = provider as any customProvider: P = provider as any
) { ) {
const commerce = new CommerceAPI(customProvider) const api = commerceApi(customProvider)
const operations = getOperations(customProvider.operations, { commerce })
return Object.assign(commerce, operations, { return Object.assign(api, {
endpoint<E extends APIs>( endpoint<E extends APIs>(
context: E['endpoint'] & { context: E['endpoint'] & {
config?: P['config'] config?: P['config']
options?: E['schema']['endpoint']['options'] options?: E['schema']['endpoint']['options']
} }
): NextApiHandler { ): NextApiHandler {
return super.endpoint(context) return getEndpoint(api, context)
}, },
}) })
} }

View File

@ -2,7 +2,7 @@ import type { NextApiHandler } from 'next'
import type { RequestInit, Response } from '@vercel/fetch' import type { RequestInit, Response } from '@vercel/fetch'
import type { APIEndpoint, APIHandler } from './utils/types' import type { APIEndpoint, APIHandler } from './utils/types'
import type { CartSchema } from '../types/cart' import type { CartSchema } from '../types/cart'
import { APIOperations } from './operations' import { APIOperations, getOperations } from './operations'
export type APISchemas = CartSchema export type APISchemas = CartSchema
@ -65,26 +65,36 @@ export class CommerceAPI<P extends APIProvider = APIProvider> {
setConfig(newConfig: Partial<P['config']>) { setConfig(newConfig: Partial<P['config']>) {
Object.assign(this.provider.config, newConfig) Object.assign(this.provider.config, newConfig)
} }
}
endpoint<T extends GetAPISchema<any, any>>( export function getCommerceApi<P extends APIProvider>(customProvider: P) {
context: T['endpoint'] & { const commerce = new CommerceAPI(customProvider)
config?: P['config'] const operations = getOperations(customProvider.operations, { commerce })
options?: T['schema']['endpoint']['options']
}
): NextApiHandler {
const commerce = this
const cfg = this.getConfig(context.config)
return function apiHandler(req, res) { return Object.assign(commerce, operations)
return context.handler({ }
req,
res, export function getEndpoint<
commerce, P extends APIProvider,
config: cfg, T extends GetAPISchema<any, any>
operations: context.operations, >(
options: context.options ?? {}, commerce: CommerceAPI<P>,
}) context: T['endpoint'] & {
} config?: P['config']
options?: T['schema']['endpoint']['options']
}
): NextApiHandler {
const cfg = commerce.getConfig(context.config)
return function apiHandler(req, res) {
return context.handler({
req,
res,
commerce,
config: cfg,
operations: context.operations,
options: context.options ?? {},
})
} }
} }