1.2.2 • Published 8 months ago

@j-o-r/cache v1.2.2

Weekly downloads
-
License
Apache-2.0
Repository
-
Last release
8 months ago

@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/cache

Usage

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 not json or ndjson, 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 the ndjson extension, it throws an error.

  • read(key): Reads a value from the cache with the given key. If async, use await. Returns undefined if no file exists.

  • writeStream(key): Returns a writable stream. For writing large amounts of data

  • readStream(key): Returns a readable stream for reading large file.

  • file(key): Returns a CacheFile object 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.

1.2.0

10 months ago

1.0.2

11 months ago

1.1.0

10 months ago

1.0.1

11 months ago

1.0.0

1 year ago

1.0.8

10 months ago

1.0.7

11 months ago

1.0.6

11 months ago

1.0.5

11 months ago

1.2.2

8 months ago

1.0.4

11 months ago

1.2.1

10 months ago

1.0.3

11 months ago

0.1.8

1 year ago

0.1.7

1 year ago

0.1.4

1 year ago

0.1.6

1 year ago

0.1.5

1 year ago

0.1.2

1 year ago

0.1.1

2 years ago

0.1.0

2 years ago

0.0.3

2 years ago

0.0.2

2 years ago

0.0.1

2 years ago