@prexjs/etag
v1.0.0
Published
Generate HTTP ETags from strings, Buffers, and fs.Stats objects.
Readme
@prexjs/etag
Generate HTTP ETags from strings, Buffers, and fs.Stats objects.
@prexjs/etag generates HTTP entity tags (ETags) for web servers and caching layers. It supports strong and weak entity tags and integrates directly with Node.js fs.Stats objects for ultra-fast static file caching without reading file bodies.
Features
- Generates strong ETags from strings and Buffers using SHA-1 digest + byte length.
- Generates weak ETags directly from
fs.Stats(mtimeandsize) without reading disk contents. - Fast-path for empty bodies.
- Dual ES Module (
.mjs) and CommonJS (.cjs) support with TypeScript definitions. - Zero external runtime dependencies.
Installation
Install using your preferred package manager:
# npm
npm install @prexjs/etag
# pnpm
pnpm add @prexjs/etag
# Yarn
yarn add @prexjs/etag
# Bun
bun add @prexjs/etagQuick start
import etag from '@prexjs/etag';
import http from 'node:http';
const server = http.createServer((req, res) => {
const body = 'Hello World';
const tag = etag(body);
if (req.headers['if-none-match'] === tag) {
res.statusCode = 304;
res.end();
return;
}
res.setHeader('ETag', tag);
res.end(body);
});Both default and named exports are supported:
import etag, { etag as namedEtag, type EtagOptions } from '@prexjs/etag';Examples
Generating strong and weak tags
import etag from '@prexjs/etag';
// Strong ETag for string
console.log(etag('hello'));
// '"5-qvTGHdzF6KLavt4PO0gs2a6pQ00"'
// Force weak ETag
console.log(etag('hello', { weak: true }));
// 'W/"5-qvTGHdzF6KLavt4PO0gs2a6pQ00"'Static file stats caching
import fs from 'node:fs';
import etag from '@prexjs/etag';
fs.stat('package.json', (err, stats) => {
if (err) return;
// Automatically creates weak ETag based on mtime and size
const tag = etag(stats);
console.log(tag); // 'W/"..."'
});Compatibility
@prexjs/etag is designed for JavaScript and TypeScript projects running on Node.js, Deno, or Bun with node:crypto and node:fs support.
License
This project is licensed under the MIT License. See LICENSE for the full license text.
Related projects
- prex.js — prex.js monorepo and ecosystem.
