Provides a uniform interface for accessing binary data from local files, remote HTTP resources, and Blob data in the browser.
import { LocalFile, RemoteFile, BlobFile } from 'generic-filehandle2'
const local = new LocalFile('/some/file/path/file.txt')
const remote = new RemoteFile('http://somesite.com/file.txt')
const blobfile = new BlobFile(new Blob([some_data], { type: 'text/plain' }))
const buf1 = await remote.read(/* length */ 10, /* position */ 10) // range request
const buf2 = await remote.readFile()If you are reading a remote file through an indexed parser, put
@gmod/range-cache-filehandle
underneath it. Its RemoteFileWithRangeCache is a drop-in replacement for
RemoteFile that caches byte ranges in chunks, so that a query's many small
reads turn into a few requests.
Every filehandle has the same four methods:
await file.read(length, position, opts) // the bytes at a byte offset
await file.readFile(opts) // the whole file, as bytes or as a string
await file.stat() // the file size, as { size }
await file.close() // close the file descriptor, if one is opendocs/api.md covers their options, shared behavior, and how to
extend RemoteFile.
LocalFile's constructor also takes cacheFd and fdIdleTimeoutMs, which
control its file descriptor; see docs/local-files.md.
- docs/api.md: every method, option and type
- docs/optimizations.md: why reads, requests and buffers work the way they do, with measurements
- docs/local-files.md:
LocalFile's open descriptor, and its browser stub
The original generic-filehandle library: https://github.com/GMOD/generic-filehandle
Trusted publishing via GitHub Actions.
pnpm version patch # or minor/major