Registry / storage / graphql-deduplicator

graphql-deduplicator

JSON →
library2.0.6jsnpmunverified

A GraphQL response deduplicator that removes duplicate entities from GraphQL responses to reduce payload size. Version 2.0.6 is the latest stable release; maintenance is sporadic. It works by using __typename and id fields to identify duplicate resources and strips the body of duplicates. It differentiates from other compression techniques by being lossless for normalized caches like Apollo Client. Requires Node >6.0.0.

npm install graphql-deduplicator
INSTALL
IMPORT
SIG · GRAPHQL-DEDUPLICAT
G
graphql-deduplicator
storagejavascriptv2.0.6
harness data pending
Install & Compatibility
Where this runs

No compatibility data collected yet for this library.

Code
Verified usage

Verified import paths — ran on the pinned version, not inferred.

deduplicate
import { deduplicate } from 'graphql-deduplicator'
const deduplicate = require('graphql-deduplicator')
The package exports a named function, not a default export. Use named import.
decompress
import { decompress } from 'graphql-deduplicator'
import compress from 'graphql-deduplicator'
decompress is a named export for client-side use. No default export exists.
compress
const { compress } = require('graphql-deduplicator')
import compress from 'graphql-deduplicator'
compress is a named export for server-side. CommonJS require works, but default import is incorrect.

Server-side usage: intercept the GraphQL response and apply compress() before sending to client.

import { compress } from 'graphql-deduplicator'; import express from 'express'; import { graphqlHTTP } from 'express-graphql'; import schema from './schema'; const app = express(); app.use('/graphql', graphqlHTTP((req, res, params) => ({ schema, rootValue: null, graphiql: false, customFormatErrorFn: (error) => ({ message: error.message, locations: error.locations, stack: error.stack ? error.stack.split('\n') : [], path: error.path }) }))); // Wrap the response to deduplicate const originalSend = res.send.bind(res); if (res.locals && res.locals.data) { const data = res.locals.data; const deduplicatedData = compress(data); res.send = (body) => { return originalSend(deduplicatedData); }; } app.listen(4000); console.log('Running a GraphQL API server at http://localhost:4000/graphql');
Debug
Known issues
gotchaRequires __typename and id fields in every query. If client does not automatically request them, deduplication will not work correctly.
fix
Ensure all queries include __typename and id fields, or configure Apollo Client's addTypename: true.
affects: >=0.0.0
deprecatedMaintenance mode: No active development since 2019. May not support new Apollo Client versions.
fix
Consider alternatives like apollo-link-compression or manual deduplication.
affects: >=2.0.0
gotchaPackage uses ES modules but does not specify in package.json; bundlers may have issues.
fix
Use a bundler that supports commonjs or add 'type: module' to your project.
affects: >=2.0.0
Errors
Common errors & fixes
Cannot find module 'graphql-deduplicator'
Package not installed or not in node_modules
fix
Run 'npm install graphql-deduplicator' or 'yarn add graphql-deduplicator'
TypeError: compress is not a function
Incorrect import: default import used instead of named import
fix
Use 'import { compress } from 'graphql-deduplicator'' instead of 'import compress from ...'
ReferenceError: __typename is not defined
Missing __typename field in the query
fix
Add __typename to your query or enable Apollo Client's addTypename: true
Upgrade
Version history
2.0.6latest on npm
Audit
Dependencies

No dependency data recorded yet.

Agent activity
19 hits · last 30 days
node
18
OpenAI (training)
1
Resources
graphql-deduplicator — npm install graphql-deduplicator · libregistry