UNPKG

runtime-memory-cache

Version:

A lightweight, high-performance in-memory cache for Node.js with TTL support, configurable eviction policies (FIFO/LRU), statistics tracking, and zero dependencies.

169 lines (123 loc) 7.68 kB
# Changelog All notable changes to this project will be documented in this file. The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/), and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). ## [Unreleased] <!-- No unreleased changes yet --> ## [0.3.2] - 2025-01-03 ### Fixed - **Enhanced set() Access Tracking**: The `set()` method now properly updates `lastAccessedAt` when called on existing keys, while preserving the original `createdAt` timestamp - **Cross-Policy Consistency**: Ensured consistent `lastAccessedAt` behavior across both FIFO and LRU eviction policies for set operations - **LRU Reordering**: Fixed `set()` method to properly move updated keys to the most recent position in LRU cache while preserving metadata ### Added - **Comprehensive Test Coverage**: Added dedicated tests for `set()` method access time tracking behavior across both eviction policies ### Changed - **Improved set() Logic**: When updating existing cache entries, `set()` now preserves `createdAt` and only updates `lastAccessedAt`, providing more accurate entry lifecycle tracking ## [0.3.1] - 2025-01-03 ### Changed - **Enhanced Access Tracking**: The `lastAccessedAt` property is now updated on all cache entries during `.get()` and `.has()` operations, regardless of eviction policy (FIFO/LRU) - **Improved Consistency**: Previously, `lastAccessedAt` was only updated when eviction policy was set to 'LRU', now it's consistently maintained across all eviction policies - **Future Compatibility**: This change enables future features that may depend on access time tracking - **LRU access reordering**: On `get()` and `has()` with `evictionPolicy: 'LRU'`, the accessed key is deleted and reinserted to the Map to move it to the most-recently-used position. This preserves `createdAt` and `expiresAt`, and updates only `lastAccessedAt`. - **Docs**: Updated README to clarify LRU reordering behavior and the preservation of metadata. ### Added - **Comprehensive Test Coverage**: Added specific tests to verify `lastAccessedAt` updates work correctly for FIFO caches - **Cross-Policy Verification**: Added tests to ensure consistent behavior between FIFO and LRU policies for access tracking ## [0.3.0] - 2025-07-28 ### Added - **Memory Tracking Released**: `getMemoryUsage()` method is now available in the public API, providing memory usage statistics: - `estimatedBytes`: Total estimated memory usage in bytes - `averageBytesPerEntry`: Average memory usage per cache entry - **Comprehensive Test Coverage**: All features, edge cases, validation, eviction, TTL, statistics, and utility logic are now fully covered by automated tests. ### Changed - **Documentation**: Updated README to document `getMemoryUsage` as a released feature and highlight improved test coverage. ## [0.2.0] - 2025-07-21 ### Added - **Input Validation**: Comprehensive validation for all cache operations - Empty key validation with descriptive error messages - Maximum key length validation (250 characters) - TTL validation (must be positive numbers) - Graceful error handling for invalid inputs - **Enhanced Statistics**: Memory usage tracking integrated into cache statistics - Updated `CacheStats` interface with `memoryUsage` property - Real-time memory usage calculation and tracking - **LRU (Least Recently Used) eviction policy** - New eviction option alongside existing FIFO - **Configurable eviction policies** - Choose between FIFO and LRU eviction strategies - **Access time tracking** - Tracks last access time for LRU implementation - **New API method**: `getEvictionPolicy()` - Get current eviction policy - **Enhanced playground examples** - Demonstrates both FIFO and LRU eviction policies ### Changed - **Improved cache entry structure** - Added `lastAccessedAt` field for LRU support - **Enhanced utility functions** - New `getKeyToEvict()` method for policy-based eviction - **Updated documentation** - Comprehensive eviction policy documentation in README - **Error Handling**: More robust error handling with specific error messages ### Fixed - **Better has() method** - Now properly updates access time for LRU without calling get() ## [0.1.1] - 2025-07-20 ### Changed - **Simplified publish script** - Made publishing easier with one simple command and removed extra scripts. ## [0.1.0] - 2025-07-20 ### Added - **Initial release** of runtime-memory-cache - **Core caching functionality** with Map-based storage - **TTL (Time To Live) support** for automatic expiration - **Configurable maximum cache size** with FIFO eviction - **Essential API methods**: `set()`, `get()`, `has()`, `del()` - **Statistics tracking functionality** (optional) - Track cache hits, misses, evictions - **Manual cleanup method** - `cleanup()` to remove expired entries - **Cache size management** - New methods: `size()`, `clear()`, `keys()` - **Modular architecture** - Separated into specialized modules: - `types.ts` - TypeScript interfaces and type definitions - `utils.ts` - Utility functions for cache operations - `stats.ts` - Statistics tracking functionality - `exports.ts` - Centralized exports - **Comprehensive JSDoc documentation** - Full API documentation - **Enhanced playground examples** - Real-world usage scenarios - **Detailed README** - Complete API reference with examples - **Build and publish scripts** - `prepublishOnly` and `publish` commands - **Zero dependencies** - Lightweight and self-contained - **TypeScript support** with type definitions - **MIT license** for open source usage - **Package configuration** for npm publishing ### Changed ### Fixed ### Features - **O(1) average case performance** for all operations - **Automatic cleanup** of expired entries on access - **Lightweight design** with minimal memory footprint - **Node.js and TypeScript compatibility** - **Simple and intuitive API** --- ## Release Notes ### v0.1.1 - Updated Publish Script Made publishing easier with one simple command and removed extra scripts. ### v0.1.0 - Initial Release This is the first release of runtime-memory-cache, providing a comprehensive in-memory caching solution for Node.js applications. The focus was on performance, modularity, and developer experience while maintaining zero dependencies. **🏗️ Architecture:** - Modular codebase for better maintainability - Comprehensive TypeScript definitions - Statistics tracking for performance monitoring **📊 Core Functionality:** - Fast lookups using native JavaScript Map - Automatic TTL expiration with robust handling - Size limiting with FIFO eviction policy - Cache analytics and statistics (optional) - Manual cleanup utilities - Extended API with utility methods **📚 Documentation & Examples:** - Complete API documentation - Real-world usage examples in playground - Comprehensive README with multiple use cases - Professional changelog following standards **🔧 Developer Experience:** - TypeScript support with type safety - Zero dependencies for lightweight deployment - Simple and intuitive API design --- ## Release Notes ### v0.2.0 - LRU Eviction Policy Added support for Least Recently Used (LRU) eviction policy alongside the existing FIFO policy. ### v0.1.1 - Workflow Optimization Made publishing easier with one simple command and removed extra scripts. ### v0.1.0 - Initial Release First version with all the main features - fast caching, TTL support, statistics tracking, and clean modular code.