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 { 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 fetchStoreApi from './utils/fetch-store-api'
import type { CartAPI } from './cart'
import login from './operations/login'
import {
Operations,
defaultOperations,
AllowedOperations,
OPERATIONS,
getOperations,
APIOperations,
} from '@commerce/api/operations'
export interface BigcommerceConfig extends CommerceAPIConfig {
// 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>(
customProvider: P = provider as any
) {
const commerce = new CommerceAPI(customProvider)
const operations = getOperations(customProvider.operations, { commerce })
const api = commerceApi(customProvider)
return Object.assign(commerce, operations, {
return Object.assign(api, {
endpoint<E extends APIs>(
context: E['endpoint'] & {
config?: P['config']
options?: E['schema']['endpoint']['options']
}
): 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 { APIEndpoint, APIHandler } from './utils/types'
import type { CartSchema } from '../types/cart'
import { APIOperations } from './operations'
import { APIOperations, getOperations } from './operations'
export type APISchemas = CartSchema
@ -65,15 +65,26 @@ export class CommerceAPI<P extends APIProvider = APIProvider> {
setConfig(newConfig: Partial<P['config']>) {
Object.assign(this.provider.config, newConfig)
}
}
endpoint<T extends GetAPISchema<any, any>>(
export function getCommerceApi<P extends APIProvider>(customProvider: P) {
const commerce = new CommerceAPI(customProvider)
const operations = getOperations(customProvider.operations, { commerce })
return Object.assign(commerce, operations)
}
export function getEndpoint<
P extends APIProvider,
T extends GetAPISchema<any, any>
>(
commerce: CommerceAPI<P>,
context: T['endpoint'] & {
config?: P['config']
options?: T['schema']['endpoint']['options']
}
): NextApiHandler {
const commerce = this
const cfg = this.getConfig(context.config)
): NextApiHandler {
const cfg = commerce.getConfig(context.config)
return function apiHandler(req, res) {
return context.handler({
@ -85,7 +96,6 @@ export class CommerceAPI<P extends APIProvider = APIProvider> {
options: context.options ?? {},
})
}
}
}
export interface CommerceAPIConfig {