npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2026 – Pkg Stats / Ryan Hefner

@devxcommerce/bff-core

v2.1.0

Published

Schema-agnostic primitives shared across every brand's BFF. No Hono, no brand-specific Strapi / Shopify schema — just the infrastructure that every brand reuses unchanged.

Readme

@devxcommerce/bff-core

Schema-agnostic primitives shared across every brand's BFF. No Hono, no brand-specific Strapi / Shopify schema — just the infrastructure that every brand reuses unchanged.

Full API reference: docs/reference/core-api.md. Architecture: docs/architecture.md (core is the "read / write / invalidate" layer). Key ADRs: 0002, 0006, 0009, 0013.

What's here

  • Cache (cache.ts) — cached() with SWR + singleflight + envelope { d, r, w }; cachedWithMeta() for handlers that need { data, status, refreshedAt }. Cache presets live in docs/reference/cache-presets.md.
  • Tags (tags.ts) — tagFor, tagForSingleton, extractTags (walks response trees emitting per-entity tags on cache write).
  • Invalidation (cache.ts + Redis SETs) — invalidateTags(tags) (DEL for unpublish/delete) and markTagsStale(tags) (rewrite envelopes with r = 0 for publish, per ADR-0013).
  • Cascade engine (cascade.ts, snapshot.ts, webhook.ts) — computeCascade + handleStrapiWebhook; persistent per-entity relation snapshots (ADR-0007) power bidirectional cascade (ADR-0008) on entry.publish / entry.unpublish / entry.delete.
  • Strapi transport (strapi-client.ts) — initStrapi({ apiUrl, apiToken, concurrency }) + strapiGraphQL() with AbortController timeout + p-limit concurrency gate.
  • Shopify transport (shopify-client.ts) — initShopify(config) + shopifyGraphQL(); identifier helpers in shopify-identifiers.ts.
  • hydrateShopify (hydrate-shopify.ts) — walks a response tree and pairs Product / Collection nodes as { strapi, shopify } via the brand's registered fetchers (ADR-0009). Called by brands' ok() helpers.
  • Registry (registry.ts, types.ts) — createRegistry(BrandConfig) loads entity declarations for the cascade engine.
  • Redis singleton + Pino logger (redis.ts, logger.ts) — initRedis, getRedis, setLogger, getLogger. Tests call initRedis in their setup and FLUSHDB between each.

Using it

Brands import from @devxcommerce/bff-core:

import {
  cached, cachedWithMeta, tagFor, extractTags,
  initStrapi, strapiGraphQL, initShopify, shopifyGraphQL,
  hydrateShopify, handleStrapiWebhook, createRegistry,
  initRedis, setLogger,
} from '@devxcommerce/bff-core'

Brand-local code (Hono routes, response helpers, per-brand Strapi / Shopify queries) lives in apps/<brand>/bff/, never here.

Tests

cd packages/bff-core
bun test              # 130 tests, no env needed
bun test --coverage

Redis runs from docker compose up -d in the repo root; tests connect to localhost:6380.