Closes #4300. The TypeScript `BlobFile` only had `size()`, `read()` and `readRange()`, while the Rust `BlobFile` behind it also has `seek`, `tell`, `read_up_to`, `read_ranges` and `close`. This exposes those on the Node binding: - `read(maxBytes?)` reads at most `maxBytes` from the cursor (Rust `read_up_to`). Without the argument it reads to the end, as before. - `readRanges([{ start, end }, ...])` reads several half-open ranges and returns one buffer per range, in order. Like `readRange`, it does not move the cursor. - `seek(position)` and `tell()` move and report the cursor. - `close()` releases the handle, and `isClosed()` reports it. Every read, `seek` and `tell` after `close()` fails with "blob file is already closed". A second `close()` does nothing. The binding keeps its own `closed` flag, the same way the Python `BlobFile` does. Offsets and lengths are `bigint`, like `readRange` and `size()`. `BlobRange` is exported as a type. The new tests in `table.test.ts` cover chunked reads with `read(maxBytes)`, `seek` and `tell`, a negative seek position, `readRanges` order and cursor, a `readRanges` end past the blob size, and reads after `close()`. The Node docs under `docs/src/js` are regenerated with `pnpm run docs`. I left the `ReadableStream`/async iterator idea from the issue out of this PR. The AbortSignal work in #4288 touches the same methods, so it can follow on top of this.
2.0 KiB
@lancedb/lancedb • Docs
@lancedb/lancedb / BlobFile
Class: BlobFile
A lazy handle to blob bytes. Create one with Table.fetchBlobFiles.
Methods
close()
close(): Promise<void>
Releases the handle. Reads after close() fail. Calling it again does
nothing.
Returns
Promise<void>
isClosed()
isClosed(): boolean
Returns true after BlobFile.close.
Returns
boolean
read()
read(maxBytes?): Promise<Buffer>
Reads from the cursor and advances the cursor.
Reads to the end when maxBytes is omitted, or at most maxBytes bytes
otherwise. Returns an empty buffer at the end of the blob.
BlobFile.readRange does not move the cursor.
Parameters
- maxBytes?:
bigint
Returns
Promise<Buffer>
readRange()
readRange(start, end): Promise<Buffer>
Reads the half-open byte range [start, end).
Fails when end is past the blob size. Does not move the cursor.
Parameters
-
start:
bigint -
end:
bigint
Returns
Promise<Buffer>
readRanges()
readRanges(ranges): Promise<Buffer[]>
Reads several half-open byte ranges. Returns one buffer per range, in the order given.
Fails when any end is past the blob size. Does not move the cursor.
Parameters
- ranges:
BlobRange[]
Returns
Promise<Buffer[]>
seek()
seek(position): Promise<void>
Moves the cursor to position, in bytes from the start of the blob.
Parameters
- position:
bigint
Returns
Promise<void>
size()
size(): bigint
Returns the blob size in bytes.
Returns
bigint
tell()
tell(): Promise<bigint>
Returns the cursor position in bytes.
Returns
Promise<bigint>