From 722f4cee230f4e2053cc6e343e1cded42cab51ea Mon Sep 17 00:00:00 2001 From: Luis Alvarez Date: Tue, 4 May 2021 14:42:25 -0500 Subject: [PATCH] Moved method --- framework/bigcommerce/api/index.ts | 21 +++++-------- framework/commerce/api/index.ts | 48 ++++++++++++++++++------------ 2 files changed, 37 insertions(+), 32 deletions(-) diff --git a/framework/bigcommerce/api/index.ts b/framework/bigcommerce/api/index.ts index 9d30b1f2c..bd4d368f7 100644 --- a/framework/bigcommerce/api/index.ts +++ b/framework/bigcommerce/api/index.ts @@ -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

( 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( context: E['endpoint'] & { config?: P['config'] options?: E['schema']['endpoint']['options'] } ): NextApiHandler { - return super.endpoint(context) + return getEndpoint(api, context) }, }) } diff --git a/framework/commerce/api/index.ts b/framework/commerce/api/index.ts index 6d45bfa0c..569d0f4a4 100644 --- a/framework/commerce/api/index.ts +++ b/framework/commerce/api/index.ts @@ -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,26 +65,36 @@ export class CommerceAPI

{ setConfig(newConfig: Partial) { Object.assign(this.provider.config, newConfig) } +} - endpoint>( - context: T['endpoint'] & { - config?: P['config'] - options?: T['schema']['endpoint']['options'] - } - ): NextApiHandler { - const commerce = this - const cfg = this.getConfig(context.config) +export function getCommerceApi

(customProvider: P) { + const commerce = new CommerceAPI(customProvider) + const operations = getOperations(customProvider.operations, { commerce }) - return function apiHandler(req, res) { - return context.handler({ - req, - res, - commerce, - config: cfg, - operations: context.operations, - options: context.options ?? {}, - }) - } + return Object.assign(commerce, operations) +} + +export function getEndpoint< + P extends APIProvider, + T extends GetAPISchema +>( + commerce: CommerceAPI

, + 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 ?? {}, + }) } }