4.1.2 • Published 10 months ago

@zacharygriffee/random-access-idb v4.1.2

Weekly downloads
-
License
MIT
Repository
-
Last release
10 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

10 months ago

4.1.12

10 months ago

4.1.2

10 months ago

4.0.31

10 months ago

4.1.0

10 months ago

4.0.3

10 months ago

4.1.1

10 months ago

4.0.2

10 months ago

4.0.1

11 months ago

4.0.0

11 months ago

3.1.5

12 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

2 years 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