@j-o-r/cache v1.2.2
@j-o-r/cache
Introduction
The @j-o-r/cache package provides utilities for creating a key-value storage system that respects typed arrays. It offers both synchronous (CacheSync) and asynchronous (CacheAsync) versions for managing cache entries.
Installation
To use the @j-o-r/cache package, install it via npm:
npm install @j-o-r/cacheUsage
Synchronous Version (CacheSync)
Use CacheSync for immediate file operations:
import { CacheSync } from '@j-o-r/cache';
const cache = new CacheSync('storage/tmp', true, 'log', 'ascii');Asynchronous Version (CacheAsync)
Use CacheAsync for non-blocking file operations:
import { CacheAsync } from '@j-o-r/cache';
const cache = new CacheAsync('storage/tmp', true, 'log', 'ascii');Use typed arrays
import { CacheAsync, JSONEXT } from '@j-o-r/cache';
const cache = new CacheAsync('storage/tmp', true);
cache.jsonEncoder = JSONEXT;
const data = new Uint32Array([1, 2, 3, 4, 5]);
// write a typed array 
await c.write('typed_array', data);Methods
Both CacheSync and CacheAsync provide the following methods:
list(): Returns an array of all keys in the cache folder.write(key, value): Writes a value to the cache with the given key. If the value is not a string and the extension is notjsonorndjson, it throws an error.append(key, value): Appends a value to the cache with the given key. If the value is not a string or if JSON is used without thendjsonextension, it throws an error.read(key): Reads a value from the cache with the given key. If async, useawait. Returnsundefinedif no file exists.writeStream(key): Returns a writable stream. For writing large amounts of datareadStream(key): Returns a readable stream for reading large file.file(key): Returns aCacheFileobject with details about file path, encoding, and existence status.delete(key): Deletes a file from the cache with the given key.empty(): Empties all files in the cache folder.expire(time): Deletes files older than specified time (in milliseconds).secret = [string]Encrypt the content written to the files with this 'secret'.encoding = [string]Force an encoding (for binaries e.g.) default 'uft-8'.`sanitizeKey(key)`** returns a valid key. Make sure a key is valid as a storage location (filename).
`md5Key(key)`** returns a valid key in the form of a MD5 hash.
expire(value)Delete all keys who are older (last changed) then the number of MS given as value.
Example
Synchronous Example:
const syncCache = new CacheSync('storage/tmp');
syncCache.write('key', 'value');
const syncValue = syncCache.read('key');
syncCache.delete('key');
syncCache.empty();Asynchronous Example:
const asyncCache = new CacheAsync('storage/tmp');
await asyncCache.write('key', 'value');
const asyncValue = await asyncCache.read('key');
await asyncCache.delete('key');
await asyncCache.empty();Read/Write streams
Writing Data with Streams:
const writable = cache.writeStream('large_key_file'); writable.write('Some large data...'); writable.end();Reading Data with Streams:
const readable = cache.readStream('large_key_file'); readable.on('data', (chunk) => { console.log(`Received ${chunk.length} bytes of data.`); });
Encryption Example
To enable encryption for both versions:
// For both Sync and Async:
cache.secret = 'mySecretKey';
// Write encrypted data:
cache.write('key', 'sensitive data');
// Read and decrypt data:
let decryptedValue;
if (cache instanceof CacheSync) {
    decryptedValue = cache.read('key'); // Synchronous read
} else {
    decryptedValue = await cache.read('key'); // Asynchronous read with await
}
console.log(decryptedValue); // Outputs: 'sensitive data'Features
- Supports typed arrays when stored as JSON.
 - Custom file extensions are allowed.
 - Methods for listing, writing, reading, appending, deleting, emptying caches.
 
License
This project is licensed under APACHE 2.0 License. See LICENSE file for details.
7 months ago
8 months ago
7 months ago
8 months ago
10 months ago
7 months ago
7 months ago
7 months ago
8 months ago
5 months ago
8 months ago
7 months ago
8 months ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago