search-optimizer
Version:
An optimized, framework-agnostic solution for handling search-as-you-type functionality
27 lines (26 loc) • 910 B
JavaScript
export function createGraphQLExecutor(options) {
const { client, query, queryVariableName = 'query', resultExtractor = data => data, additionalVariables = {}, } = options;
return {
execute: async (searchQuery, signal) => {
const variables = {
...additionalVariables,
[queryVariableName]: searchQuery,
};
const context = signal ? { fetchOptions: { signal } } : undefined;
try {
const response = await client.query({
query,
variables,
context,
});
return resultExtractor(response.data);
}
catch (error) {
if (error instanceof Error) {
throw error;
}
throw new Error(String(error));
}
},
};
}