Research
Security News
Quasar RAT Disguised as an npm Package for Detecting Vulnerabilities in Ethereum Smart Contracts
Socket researchers uncover a malicious npm package posing as a tool for detecting vulnerabilities in Etherium smart contracts.
apollo-cache-persist-compressed
Advanced tools
🗜️ Compressed cache persistence for Apollo Client
Exposes wrappers built on top of apollo3-cache-persist
, but leverages compression via GZip (powered by fflate
) to reduce the size of the stored cache.
Currently, the only wrapper exposed is CompressedLocalForageWrapper
, which is a drop-in replacement for LocalForageWrapper
from apollo3-cache-persist
, but persists the cache in a compressed format. localForage
supports all sorts of JavaScript objects, including binary data (Uint8Array
), so it's a good choice for persisting compressed data as binary, which saves us from having to convert the compressed binary to a base64 string.
Compressing strings, especially Apollo Client's cache is quite efficient because a cache (even a normalized one) will have a lot of repeated tokens, which can be compressed quite well. The GZip compression is powered by fflate
.
Compresses a cache of 1 MB into 60 KB in 22ms 🔥 (Tested on an M1 Pro).
By default, apollo3-cache-persist
only persists a stringified version of the cache up to 1,048,576 characters (1 MB), which can be quickly reached with a cache of a few hundred entities. This library allows you to compress the cache before persisting it, which can save a lot of space while ensuring you can leverage the full power of Apollo Client's cache rather than purging the cache every few interactions.
[!WARNING]
apollo3-cache-persist-compressed
is meant to be used on top ofapollo3-cache-persist
, make sure to install both!
npm install --save apollo3-cache-persist apollo3-cache-persist-compressed
or
yarn add apollo3-cache-persist apollo3-cache-persist-compressed
Finally, use CompressedLocalForageWrapper
as a drop-in replacement for LocalForageWrapper
:
[!CAUTION] The compressed storage doesn't support migrating from a string-based cache. Therefore, it's really important to version your localForage via the
name
config!
[!IMPORTANT] Ensure the
serialize
option onpersistCache
isn't turned off, as the compression expects to receive a serialized version of the cache to compress it as a string.serialize
defaults totrue
.
import { InMemoryCache } from '@apollo/client/core';
import { persistCache } from 'apollo3-cache-persist';
import { CompressedLocalForageWrapper } from 'apollo3-cache-persist-compressed';
import localforage from 'localforage';
const cache = new InMemoryCache({...});
localforage.config({
driver: localforage.INDEXEDDB,
name: 'apollo-cache-v2',
});
// await before instantiating ApolloClient, else queries might run before the cache is persisted
await persistCache({
cache,
storage: new CompressedLocalForageWrapper(localforage),
serialize: true,
});
// Continue setting up Apollo as usual.
const client = new ApolloClient({
cache,
...
});
merge-drivers is MIT licensed.
FAQs
🗜️ Compressed cache persistence for Apollo Client
We found that apollo-cache-persist-compressed demonstrated a healthy version release cadence and project activity because the last version was released less than a year ago. It has 1 open source maintainer collaborating on the project.
Did you know?
Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.
Research
Security News
Socket researchers uncover a malicious npm package posing as a tool for detecting vulnerabilities in Etherium smart contracts.
Security News
Research
A supply chain attack on Rspack's npm packages injected cryptomining malware, potentially impacting thousands of developers.
Research
Security News
Socket researchers discovered a malware campaign on npm delivering the Skuld infostealer via typosquatted packages, exposing sensitive data.