Dedupe Requests Plugin
The Dedupe Requests Plugin prevents redundant requests by deduplicating similar ones, helping to reduce the number of requests sent to the server.
Usage
ts
import { DedupeRequestsPlugin } from '@orpc/client/plugins'
const link = new RPCLink({
plugins: [
new DedupeRequestsPlugin({
filter: ({ request }) => request.method === 'GET', // Filters requests to dedupe
groups: [
{
condition: () => true,
context: {}, // Context used for the rest of the request lifecycle
},
],
}),
],
})
INFO
The link
can be any supported oRPC link, such as RPCLink, OpenAPILink, or custom implementations.
Groups
To enable deduplication, a request must match at least one defined group. Requests that fall into the same group are considered for deduplication together. Each group also requires a context
, which will be used during the remainder of the request lifecycle. Learn more about client context.
Here's an example that deduplicates requests based on the cache
control:
ts
interface ClientContext {
cache?: RequestCache
}
const link = new RPCLink<ClientContext>({
url: 'http://localhost:3000/rpc',
method: ({ context }) => {
if (context?.cache) {
return 'GET'
}
return 'POST'
},
plugins: [
new DedupeRequestsPlugin({
filter: ({ request }) => request.method === 'GET', // Filters requests to dedupe
groups: [
{
condition: ({ context }) => context?.cache === 'force-cache',
context: {
cache: 'force-cache',
},
},
{
// Fallback group – placed last to catch remaining requests
condition: () => true,
context: {},
},
],
}),
],
fetch: (request, init, { context }) => globalThis.fetch(request, {
...init,
cache: context?.cache,
}),
})
Now, calls with cache=force-cache
will be sent with cache=force-cache
, whether they're deduplicated or executed individually.