@shopify/graphql-client
Version:
Shopify GraphQL Client - A lightweight generic GraphQL JS client to interact with Shopify GraphQL APIs
1 lines • 23.2 kB
Source Map (JSON)
{"version":3,"file":"graphql-client.mjs","sources":["../../src/graphql-client/graphql-client.ts"],"sourcesContent":["import {generateHttpFetch} from './http-fetch';\nimport {\n ClientOptions,\n CustomFetchApi,\n GraphQLClient,\n ClientResponse,\n ClientConfig,\n Logger,\n LogContentTypes,\n DataChunk,\n} from './types';\nimport {\n CLIENT,\n GQL_API_ERROR,\n UNEXPECTED_CONTENT_TYPE_ERROR,\n NO_DATA_OR_ERRORS_ERROR,\n CONTENT_TYPES,\n RETRY_WAIT_TIME,\n HEADER_SEPARATOR,\n DEFER_OPERATION_REGEX,\n BOUNDARY_HEADER_REGEX,\n SDK_VARIANT_HEADER,\n SDK_VERSION_HEADER,\n DEFAULT_SDK_VARIANT,\n DEFAULT_CLIENT_VERSION,\n} from './constants';\nimport {\n formatErrorMessage,\n getErrorMessage,\n validateRetries,\n getKeyValueIfValid,\n buildDataObjectByPath,\n buildCombinedDataObject,\n getErrorCause,\n combineErrors,\n} from './utilities';\n\nexport function createGraphQLClient({\n headers,\n url,\n customFetchApi = fetch,\n retries = 0,\n logger,\n}: ClientOptions): GraphQLClient {\n validateRetries({client: CLIENT, retries});\n\n const config: ClientConfig = {\n headers,\n url,\n retries,\n };\n\n const clientLogger = generateClientLogger(logger);\n const httpFetch = generateHttpFetch({\n customFetchApi,\n clientLogger,\n defaultRetryWaitTime: RETRY_WAIT_TIME,\n });\n const fetchFn = generateFetch(httpFetch, config);\n const request = generateRequest(fetchFn);\n const requestStream = generateRequestStream(fetchFn);\n\n return {\n config,\n fetch: fetchFn,\n request,\n requestStream,\n };\n}\n\nexport function generateClientLogger(logger?: Logger): Logger {\n return (logContent: LogContentTypes) => {\n if (logger) {\n logger(logContent);\n }\n };\n}\n\nasync function processJSONResponse<TData = any>(\n response: Response,\n): Promise<ClientResponse<TData>> {\n const {errors, data, extensions} = await response.json<any>();\n\n return {\n ...getKeyValueIfValid('data', data),\n ...getKeyValueIfValid('extensions', extensions),\n headers: response.headers,\n\n ...(errors || !data\n ? {\n errors: {\n networkStatusCode: response.status,\n message: formatErrorMessage(\n errors ? GQL_API_ERROR : NO_DATA_OR_ERRORS_ERROR,\n ),\n ...getKeyValueIfValid('graphQLErrors', errors),\n response,\n },\n }\n : {}),\n };\n}\n\nfunction generateFetch(\n httpFetch: ReturnType<typeof generateHttpFetch>,\n {url, headers, retries}: ClientConfig,\n): GraphQLClient['fetch'] {\n return async (operation, options = {}) => {\n const {\n variables,\n headers: overrideHeaders,\n url: overrideUrl,\n retries: overrideRetries,\n keepalive,\n signal,\n } = options;\n\n const body = JSON.stringify({\n query: operation,\n variables,\n });\n\n validateRetries({client: CLIENT, retries: overrideRetries});\n\n const flatHeaders = Object.entries({\n ...headers,\n ...overrideHeaders,\n }).reduce((headers: Record<string, string>, [key, value]) => {\n headers[key] = Array.isArray(value) ? value.join(', ') : value.toString();\n return headers;\n }, {});\n\n if (!flatHeaders[SDK_VARIANT_HEADER] && !flatHeaders[SDK_VERSION_HEADER]) {\n flatHeaders[SDK_VARIANT_HEADER] = DEFAULT_SDK_VARIANT;\n flatHeaders[SDK_VERSION_HEADER] = DEFAULT_CLIENT_VERSION;\n }\n\n const fetchParams: Parameters<CustomFetchApi> = [\n overrideUrl ?? url,\n {\n method: 'POST',\n headers: flatHeaders,\n body,\n signal,\n keepalive,\n },\n ];\n\n return httpFetch(fetchParams, 1, overrideRetries ?? retries);\n };\n}\n\nfunction generateRequest(\n fetchFn: ReturnType<typeof generateFetch>,\n): GraphQLClient['request'] {\n return async (...props) => {\n if (DEFER_OPERATION_REGEX.test(props[0])) {\n throw new Error(\n formatErrorMessage(\n 'This operation will result in a streamable response - use requestStream() instead.',\n ),\n );\n }\n\n let response: Response | null = null;\n try {\n response = await fetchFn(...props);\n const {status, statusText} = response;\n const contentType = response.headers.get('content-type') || '';\n\n if (!response.ok) {\n return {\n errors: {\n networkStatusCode: status,\n message: formatErrorMessage(statusText),\n response,\n },\n };\n }\n\n if (!contentType.includes(CONTENT_TYPES.json)) {\n return {\n errors: {\n networkStatusCode: status,\n message: formatErrorMessage(\n `${UNEXPECTED_CONTENT_TYPE_ERROR} ${contentType}`,\n ),\n response,\n },\n };\n }\n\n return await processJSONResponse(response);\n } catch (error) {\n return {\n errors: {\n message: getErrorMessage(error),\n ...(response == null\n ? {}\n : {\n networkStatusCode: response.status,\n response,\n }),\n },\n };\n }\n };\n}\n\nasync function* getStreamBodyIterator(\n response: Response,\n): AsyncIterableIterator<string> {\n const decoder = new TextDecoder();\n\n // Response body is an async iterator\n if ((response.body as any)![Symbol.asyncIterator]) {\n for await (const chunk of response.body! as any) {\n yield decoder.decode(chunk);\n }\n } else {\n const reader = response.body!.getReader();\n\n let readResult: ReadableStreamReadResult<DataChunk>;\n try {\n while (!(readResult = await reader.read()).done) {\n yield decoder.decode(readResult.value);\n }\n } finally {\n reader.cancel();\n }\n }\n}\n\nfunction readStreamChunk(\n streamBodyIterator: AsyncIterableIterator<string>,\n boundary: string,\n) {\n return {\n async *[Symbol.asyncIterator]() {\n try {\n let buffer = '';\n\n for await (const textChunk of streamBodyIterator) {\n buffer += textChunk;\n\n if (buffer.indexOf(boundary) > -1) {\n const lastBoundaryIndex = buffer.lastIndexOf(boundary);\n const fullResponses = buffer.slice(0, lastBoundaryIndex);\n\n const chunkBodies = fullResponses\n .split(boundary)\n .filter((chunk) => chunk.trim().length > 0)\n .map((chunk) => {\n const body = chunk\n .slice(\n chunk.indexOf(HEADER_SEPARATOR) + HEADER_SEPARATOR.length,\n )\n .trim();\n return body;\n });\n\n if (chunkBodies.length > 0) {\n yield chunkBodies;\n }\n\n buffer = buffer.slice(lastBoundaryIndex + boundary.length);\n\n if (buffer.trim() === `--`) {\n buffer = '';\n }\n }\n }\n } catch (error) {\n throw new Error(\n `Error occured while processing stream payload - ${getErrorMessage(\n error,\n )}`,\n );\n }\n },\n };\n}\n\nfunction createJsonResponseAsyncIterator(response: Response) {\n return {\n async *[Symbol.asyncIterator]() {\n const processedResponse = await processJSONResponse(response);\n\n yield {\n ...processedResponse,\n hasNext: false,\n };\n },\n };\n}\n\nfunction getResponseDataFromChunkBodies(chunkBodies: string[]): {\n data: any;\n errors?: any;\n extensions?: any;\n hasNext: boolean;\n}[] {\n return chunkBodies\n .map((value) => {\n try {\n return JSON.parse(value);\n } catch (error) {\n throw new Error(\n `Error in parsing multipart response - ${getErrorMessage(error)}`,\n );\n }\n })\n .map((payload) => {\n const {data, incremental, hasNext, extensions, errors} = payload;\n\n // initial data chunk\n if (!incremental) {\n return {\n data: data || {},\n ...getKeyValueIfValid('errors', errors),\n ...getKeyValueIfValid('extensions', extensions),\n hasNext,\n };\n }\n\n // subsequent data chunks\n const incrementalArray: {data: any; errors?: any}[] = incremental.map(\n ({data, path, errors}: any) => {\n return {\n data: data && path ? buildDataObjectByPath(path, data) : {},\n ...getKeyValueIfValid('errors', errors),\n };\n },\n );\n\n return {\n data:\n incrementalArray.length === 1\n ? incrementalArray[0].data\n : buildCombinedDataObject([\n ...incrementalArray.map(({data}) => data),\n ]),\n ...getKeyValueIfValid('errors', combineErrors(incrementalArray)),\n hasNext,\n };\n });\n}\n\nfunction validateResponseData(\n responseErrors: any[],\n combinedData: ReturnType<typeof buildCombinedDataObject>,\n) {\n if (responseErrors.length > 0) {\n throw new Error(GQL_API_ERROR, {\n cause: {\n graphQLErrors: responseErrors,\n },\n });\n }\n\n if (Object.keys(combinedData).length === 0) {\n throw new Error(NO_DATA_OR_ERRORS_ERROR);\n }\n}\n\nfunction createMultipartResponseAsyncInterator(\n response: Response,\n responseContentType: string,\n) {\n const boundaryHeader = (responseContentType ?? '').match(\n BOUNDARY_HEADER_REGEX,\n );\n const boundary = `--${boundaryHeader ? boundaryHeader[1] : '-'}`;\n\n if (\n !response.body?.getReader &&\n !(response.body as any)?.[Symbol.asyncIterator]\n ) {\n throw new Error('API multipart response did not return an iterable body', {\n cause: response,\n });\n }\n\n const streamBodyIterator = getStreamBodyIterator(response);\n\n let combinedData: Record<string, any> = {};\n let responseExtensions: Record<string, any> | undefined;\n\n return {\n async *[Symbol.asyncIterator]() {\n try {\n let streamHasNext = true;\n\n for await (const chunkBodies of readStreamChunk(\n streamBodyIterator,\n boundary,\n )) {\n const responseData = getResponseDataFromChunkBodies(chunkBodies);\n\n responseExtensions =\n responseData.find((datum) => datum.extensions)?.extensions ??\n responseExtensions;\n\n const responseErrors = combineErrors(responseData);\n\n combinedData = buildCombinedDataObject([\n combinedData,\n ...responseData.map(({data}) => data),\n ]);\n\n streamHasNext = responseData.slice(-1)[0].hasNext;\n\n validateResponseData(responseErrors, combinedData);\n\n yield {\n ...getKeyValueIfValid('data', combinedData),\n ...getKeyValueIfValid('extensions', responseExtensions),\n hasNext: streamHasNext,\n };\n }\n\n if (streamHasNext) {\n throw new Error(`Response stream terminated unexpectedly`);\n }\n } catch (error) {\n const cause = getErrorCause(error);\n\n yield {\n ...getKeyValueIfValid('data', combinedData),\n ...getKeyValueIfValid('extensions', responseExtensions),\n errors: {\n message: formatErrorMessage(getErrorMessage(error)),\n networkStatusCode: response.status,\n ...getKeyValueIfValid('graphQLErrors', cause?.graphQLErrors),\n response,\n },\n hasNext: false,\n };\n }\n },\n };\n}\n\nfunction generateRequestStream(\n fetchFn: ReturnType<typeof generateFetch>,\n): GraphQLClient['requestStream'] {\n return async (...props) => {\n if (!DEFER_OPERATION_REGEX.test(props[0])) {\n throw new Error(\n formatErrorMessage(\n 'This operation does not result in a streamable response - use request() instead.',\n ),\n );\n }\n\n try {\n const response = await fetchFn(...props);\n\n const {statusText} = response;\n\n if (!response.ok) {\n throw new Error(statusText, {cause: response});\n }\n\n const responseContentType = response.headers.get('content-type') || '';\n\n switch (true) {\n case responseContentType.includes(CONTENT_TYPES.json):\n return createJsonResponseAsyncIterator(response);\n case responseContentType.includes(CONTENT_TYPES.multipart):\n return createMultipartResponseAsyncInterator(\n response,\n responseContentType,\n );\n default:\n throw new Error(\n `${UNEXPECTED_CONTENT_TYPE_ERROR} ${responseContentType}`,\n {cause: response},\n );\n }\n } catch (error) {\n return {\n async *[Symbol.asyncIterator]() {\n const response = getErrorCause(error);\n\n yield {\n errors: {\n message: formatErrorMessage(getErrorMessage(error)),\n ...getKeyValueIfValid('networkStatusCode', response?.status),\n ...getKeyValueIfValid('response', response),\n },\n hasNext: false,\n };\n },\n };\n }\n };\n}\n"],"names":[],"mappings":"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"}