4.1.2 • Published 9 months ago

@zacharygriffee/random-access-idb v4.1.2

Weekly downloads
-
License
MIT
Repository
-
Last release
9 months ago

RandomAccessIdb

RandomAccessIdb is a library that provides a random-access interface for IndexedDB storage in web applications. It allows for efficient reading, writing, and management of data blocks using a chunk-based approach, similar to how traditional file systems manage files.

Features

  • Supports chunk-based random access storage on top of IndexedDB.
  • Provides functions to read, write, delete, and truncate data.
  • Automatically manages metadata and file size.
  • Supports queuing of read/write operations to ensure consistency.
  • Allows purging and reinitializing storage when needed.

Installation

You can include this library in your project by cloning the repository or importing it into your project as needed.

    npm install @zacharygriffee/random-access-idb

Usage

1. Creating a New File

To create a new RandomAccessIdb file, use the createFile function:

import { createFile } from '@zacharygriffee/random-access-idb';

const ras = createFile('myFile.txt', { chunkSize: 1024 });

2. Writing Data

Use the write method to write data to the file. The method accepts an offset, the data buffer, and a callback function:

const buffer = b4a.alloc(1024, 'Hello, World!'); // 1KB buffer

ras.write(0, buffer, (err) => {
    if (err) {
        console.error('Write failed:', err);
    } else {
        console.log('Write successful');
    }
});

3. Reading Data

To read data from the file, use the read method with the offset, size, and callback:

ras.read(0, 1024, (err, data) => {
    if (err) {
        console.error('Read failed:', err);
    } else {
        console.log('Read data:', b4a.toString(data));
    }
});

4. Truncating the File

You can truncate the file by specifying an offset:

ras.truncate(512, (err) => {
    if (err) {
        console.error('Truncate failed:', err);
    } else {
        console.log('Truncate successful');
    }
});

5. Deleting Data

To delete specific blocks of data, use the del method:

ras.del(0, 512, (err) => {
    if (err) {
        console.error('Delete failed:', err);
    } else {
        console.log('Delete successful');
    }
});

6. Purging the File

To delete the file from IndexedDB and reset its metadata, use the purge method:

ras.purge((err) => {
    if (err) {
        console.error('Purge failed:', err);
    } else {
        console.log('File purged successfully');
    }
});

7. Retrieving File Stats

To get metadata about the file (e.g., file size, chunk size), use the stat method:

ras.stat((err, stats) => {
    if (err) {
        console.error('Stat failed:', err);
    } else {
        console.log('File stats:', stats);
    }
});

Error Handling

This library mimics typical file system error codes, such as ENOENT, when trying to access a file or block that doesn’t exist. Make sure to handle errors properly in callbacks.

Example:

ras.read(0, 1024, (err, data) => {
    if (err) {
        if (err.code === 'ENOENT') {
            console.error('File not found or empty:', err);
        } else {
            console.error('Read error:', err);
        }
    } else {
        console.log('Read successful:', data);
    }
});

API

License

This project is licensed under the MIT License.


4.1.11

9 months ago

4.1.12

9 months ago

4.1.2

9 months ago

4.0.31

9 months ago

4.1.0

9 months ago

4.0.3

9 months ago

4.1.1

9 months ago

4.0.2

9 months ago

4.0.1

10 months ago

4.0.0

10 months ago

3.1.5

11 months ago

3.1.4

1 year ago

3.1.2

1 year ago

3.1.1

1 year ago

3.1.0

1 year ago

3.0.4

1 year ago

3.0.3

1 year ago

3.0.2

1 year ago

3.0.1

1 year ago

3.0.5

1 year ago

3.0.0

1 year ago

2.2.2

1 year ago

2.2.1

2 years ago

2.2.0

2 years ago

2.1.0

2 years ago

2.0.13

2 years ago

2.0.14

2 years ago

2.0.11

2 years ago

2.0.12

2 years ago

2.0.10

2 years ago

2.0.3

2 years ago

2.0.2

2 years ago

2.0.5

2 years ago

2.0.4

2 years ago

2.0.6

2 years ago

2.0.1

2 years ago

2.0.0

2 years ago

1.0.1

2 years ago

1.0.0

2 years ago

0.1.55

2 years ago

0.1.5

2 years ago

0.1.4

2 years ago

0.1.3

2 years ago

0.1.2

2 years ago

0.1.1

2 years ago

0.1.1-s

2 years ago

0.1.0

2 years ago