@nacelle/compatibility-connector
Version:
Connect @nacelle/client-js-sdk to Nacelle's v2 back end with minimal code changes
34 lines (28 loc) • 993 B
text/typescript
import type { StorefrontResponse } from '@nacelle/storefront-sdk';
import type { StorefrontInstanceV2 } from '../connector/index';
import { StorefrontInstance } from 'storefrontSdkV1';
const isV2SdkResponse = (
response: unknown
): response is StorefrontResponse<unknown> =>
typeof (response as StorefrontResponse<unknown>).data !== 'undefined' ||
typeof (response as StorefrontResponse<unknown>).error !== 'undefined';
export async function graphqlQuery<ResponseData>(
query: string,
variables: string | Record<string, unknown>,
client: StorefrontInstanceV2 | StorefrontInstance
): Promise<ResponseData> {
const response = await client.query({
query,
variables:
typeof variables === 'object' ? JSON.stringify(variables) : variables
});
if (isV2SdkResponse(response)) {
const { data, error } = response;
if (error) {
throw new Error(error.message);
}
return data as ResponseData;
} else {
return response as ResponseData;
}
}