
Security News
Crates.io Users Targeted by Phishing Emails
The Rust Security Response WG is warning of phishing emails from rustfoundation.dev targeting crates.io users.
Wrap your functions to cache their results. Supports any storage, such as Redis, MongoDB, Vercel KV, Cloudflare KV, localStorage, and even your file system.
Like a trashcan, but for your cache.
Wrap functions to cache results. Supports any storage, such as Redis, MongoDB, Cloudflare KV, localStorage, and even your file system.
npm i cachecan
# or
pnpm i cachecan
import { createCache } from 'cachecan'
const [cache] = createCache({
storage,
})
// Usage
const cacheGetData = cache(getData, { key: "data" })
const data = await cacheGetData()
const cacheGetData = cache(
async () => { ... },
{ key: "data", maxAge: 60, }
)
const data = await cacheGetOtherData()
cachecan
is a tiny cache wrapper. It does not actually include a cache.
If you want to get started quickly. You should read on to learn how to customize your cache first.
npm i cachecan seroval unstorage
# or
pnpm i cachecan seroval unstorage
import { createCache } from "cachecan";
import { deserialize, serialize } from "seroval";
import { createStorage } from "unstorage";
import fsDriver from "unstorage/drivers/fs";
const storage = createStorage({
driver: fsDriver({ base: "./tmp" }),
});
const [cache] = createCache({
storage,
serialize,
deserialize,
defaults: {
maxAge: 60,
},
});
The cache storage is powered by unstorage
, which allows you to use any of their drivers.
File system storage is useful for dev environments, easily transition to a hosted storage when moving to production.
import { Storage, createStorage } from "unstorage";
import cloudflareKVHTTPDriver from "unstorage/drivers/cloudflare-kv-http";
import fsDriver from "unstorage/drivers/fs";
const isProduction = process.env.NODE_ENV === "production";
const storage = createStorage({
driver: isProduction
? cloudflareKVHTTPDriver({
accountId: "my-account-id",
namespaceId: "my-kv-namespace-id",
apiToken: "supersecret-api-token",
})
: fsDriver({ base: "./tmp" }),
});
To keep library small it does not ship with any serializers, defaulting to JSON.stringify
and JSON.parse
. This is not sufficient for all use cases, so you can provide your own serializer.
I use seroval
, here's a list of more serializers.
import { deserialize, serialize } from "seroval";
const [cache] = createCache({
storage,
serialize,
deserialize,
});
The created cache has a purge
method that can be used to clear the cache storage.
import { createCache } from "cachecan";
const [cache, { purge }] = createCache({
storage,
});
await purge("users");
await purge(["user", 1]);
// Purge all cached items
await purge();
The created cache has a store
method that can be used to populate the cache storage. Useful to hydrate the cache with pre-existing data.
const users = [
{
hello: "populated",
},
];
const [cache, { store }] = createCache();
await store(
// Key
"users",
// Value
users,
{
// Optional, override cache default maxAge
// 60 seconds
maxAge: 60,
},
);
Published under MIT License.
FAQs
Wrap your functions to cache their results. Supports any storage, such as Redis, MongoDB, Vercel KV, Cloudflare KV, localStorage, and even your file system.
We found that cachecan demonstrated a not healthy version release cadence and project activity because the last version was released 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.
Security News
The Rust Security Response WG is warning of phishing emails from rustfoundation.dev targeting crates.io users.
Product
Socket now lets you customize pull request alert headers, helping security teams share clear guidance right in PRs to speed reviews and reduce back-and-forth.
Product
Socket's Rust support is moving to Beta: all users can scan Cargo projects and generate SBOMs, including Cargo.toml-only crates, with Rust-aware supply chain checks.