@shopify/graphql-client
Version:
Shopify GraphQL Client - A lightweight generic GraphQL JS client to interact with Shopify GraphQL APIs
48 lines (41 loc) • 1.24 kB
text/typescript
import {RequestParams} from '../graphql-client/types';
import {
AllOperations,
ApiClient,
ApiClientConfig,
ApiClientRequestOptions,
} from './types';
export function generateGetHeaders(
config: ApiClientConfig,
): ApiClient['getHeaders'] {
return (customHeaders) => {
return {...(customHeaders ?? {}), ...config.headers};
};
}
export function generateGetGQLClientParams<
Operations extends AllOperations = AllOperations,
>({getHeaders, getApiUrl}: Pick<ApiClient, 'getHeaders' | 'getApiUrl'>) {
return <Operation extends keyof Operations>(
operation: Operation,
options?: ApiClientRequestOptions<Operation, Operations>,
): RequestParams => {
const props: RequestParams = [operation as string];
if (options && Object.keys(options).length > 0) {
const {
variables,
apiVersion: propApiVersion,
headers,
retries,
signal,
} = options as any;
props.push({
...(variables ? {variables} : {}),
...(headers ? {headers: getHeaders(headers)} : {}),
...(propApiVersion ? {url: getApiUrl(propApiVersion)} : {}),
...(retries ? {retries} : {}),
...(signal ? {signal} : {}),
});
}
return props;
};
}