Skip to content

Commit a5f6247

Browse files
committed
Add slice and bytelength to make our filetypes compatible with how hyparquet is accessing files
1 parent f7f6361 commit a5f6247

File tree

4 files changed

+22
-1
lines changed

4 files changed

+22
-1
lines changed

src/files/browser.ts

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,10 @@ export class BIDSFileBrowser implements BIDSFile {
2929
return this.#file.size
3030
}
3131

32+
get size(): number {
33+
return this.#file.size
34+
}
35+
3236
get stream(): ReadableStream<Uint8Array> {
3337
return this.#file.stream()
3438
}
@@ -44,6 +48,12 @@ export class BIDSFileBrowser implements BIDSFile {
4448
async readBytes(size: number, offset = 0): Promise<Uint8Array<ArrayBuffer>> {
4549
return new Uint8Array(await this.#file.slice(offset, size).arrayBuffer())
4650
}
51+
52+
async slice(start: number, end: number): Promise<ArrayBuffer> {
53+
return (await this.readBytes(end - start, start)).buffer
54+
}
55+
56+
/**
4757
}
4858
4959
/**

src/files/deno.ts

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -45,6 +45,10 @@ export class BIDSFileDeno implements BIDSFile {
4545
return this.#fileInfo ? this.#fileInfo.size : -1
4646
}
4747

48+
get byteLength(): number {
49+
return this.#fileInfo ? this.#fileInfo.size : -1
50+
}
51+
4852
get stream(): ReadableStream<Uint8Array> {
4953
const handle = this.#openHandle()
5054
return handle.readable
@@ -87,6 +91,9 @@ export class BIDSFileDeno implements BIDSFile {
8791
return buf.subarray(0, nbytes)
8892
}
8993

94+
async slice(start: number, end: number): Promise<ArrayBuffer> {
95+
return (await this.readBytes(end - start, start)).buffer
96+
}
9097
/**
9198
* Return a Deno file handle
9299
*/

src/files/parquet.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@ import { createUTF8Stream } from './streams.ts'
66
export async function loadParquet(file: BIDSFile, maxRows: number = -1): Promise<ColumnsMap> {
77
let columnsMap = new ColumnsMap()
88
const readOpts: ParquetReadOptions = {
9-
file: (await file.readBytes(file.size)).buffer,
9+
file: file,
1010
// @ts-expect-error
1111
onChunk: (data) => columnsMap[data.columnName] = data.columnData.map(entry => String(entry)),
1212
}

src/types/filetree.ts

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,10 @@ export interface BIDSFile {
1515
text: () => Promise<string>
1616
// Read a range of bytes
1717
readBytes: (size: number, offset?: number) => Promise<Uint8Array<ArrayBuffer>>
18+
// Alternative to readBytes used for ArrayBuffer compatibility
19+
slice: (start: number, end: number) => Promise<ArrayBuffer>
20+
// Alternative to size used for ArrayBuffer compatibility
21+
byteLength: number
1822
// Access the parent directory
1923
parent: FileTree
2024
// File has been viewed

0 commit comments

Comments
 (0)