11import type { ColumnData } from 'hyparquet'
2- import { AsyncBuffer , asyncBufferFromUrl , cachedAsyncBuffer , parquetRead } from 'hyparquet'
2+ import { AsyncBuffer , parquetRead } from 'hyparquet'
33import { compressors } from 'hyparquet-compressors'
4- import type { AsyncBufferFrom , ChunkMessage , ClientMessage , ErrorMessage , ResultMessage } from './types.js'
4+ import type { ChunkMessage , ClientMessage , ErrorMessage , ResultMessage } from './types.js'
5+ import { fromToAsyncBuffer } from './utils.js'
56
67const cache = new Map < string , Promise < AsyncBuffer > > ( )
78
8- export function asyncBufferFrom ( from : AsyncBufferFrom ) : Promise < AsyncBuffer > {
9- if ( 'url' in from ) {
10- // Cached asyncBuffer for urls only
11- const key = JSON . stringify ( from )
12- const cached = cache . get ( key )
13- if ( cached ) return cached
14- const asyncBuffer = asyncBufferFromUrl ( from ) . then ( cachedAsyncBuffer )
15- cache . set ( key , asyncBuffer )
16- return asyncBuffer
17- } else {
18- return from . file . arrayBuffer ( )
19- }
20- }
21-
229function postChunkMessage ( { chunk, queryId } : ChunkMessage ) {
2310 self . postMessage ( { chunk, queryId } )
2411}
@@ -31,7 +18,7 @@ function postErrorMessage ({ error, queryId }: ErrorMessage) {
3118
3219self . onmessage = async ( { data } : { data : ClientMessage } ) => {
3320 const { rowStart, rowEnd, columns, metadata, from, queryId } = data
34- const file = await asyncBufferFrom ( from )
21+ const file = await fromToAsyncBuffer ( from , cache )
3522 try {
3623 await parquetRead ( { metadata, file, rowStart, rowEnd, columns, compressors, onChunk } )
3724 postResultMessage ( { queryId } )
0 commit comments