@@ -31,16 +31,15 @@ function decode(/** @type {Uint8Array} */ value) {
3131 * This ensures that we either make one 512kb initial request for the metadata,
3232 * or a second request for up to the metadata size.
3333 *
34- * @param {AsyncBuffer } asyncBuffer parquet file contents
35- * @param {MetadataOptions & { initialFetchSize?: number } } options initial fetch size in bytes (default 512kb)
34+ * @param {MetadataOptions & { file: AsyncBuffer, initialFetchSize?: number } } options parquet file and metadata options
3635 * @returns {Promise<FileMetaData> } parquet metadata object
3736 */
38- export async function parquetMetadata ( asyncBuffer , { parsers, initialFetchSize = defaultInitialFetchSize , geoparquet = true } = { } ) {
39- if ( ! asyncBuffer || ! ( asyncBuffer . byteLength >= 0 ) ) throw new Error ( 'parquet expected AsyncBuffer' )
37+ export async function parquetMetadata ( { file , parsers, initialFetchSize = defaultInitialFetchSize , geoparquet = true } ) {
38+ if ( ! file || ! ( file . byteLength >= 0 ) ) throw new Error ( 'parquet expected AsyncBuffer' )
4039
4140 // fetch last bytes (footer) of the file
42- const footerOffset = Math . max ( 0 , asyncBuffer . byteLength - initialFetchSize )
43- const footerBuffer = await asyncBuffer . slice ( footerOffset , asyncBuffer . byteLength )
41+ const footerOffset = Math . max ( 0 , file . byteLength - initialFetchSize )
42+ const footerBuffer = await file . slice ( footerOffset , file . byteLength )
4443
4544 // Check for parquet magic number "PAR1"
4645 const footerView = new DataView ( footerBuffer )
@@ -51,38 +50,36 @@ export async function parquetMetadata(asyncBuffer, { parsers, initialFetchSize =
5150 // Parquet files store metadata at the end of the file
5251 // Metadata length is 4 bytes before the last PAR1
5352 const metadataLength = footerView . getUint32 ( footerBuffer . byteLength - 8 , true )
54- if ( metadataLength > asyncBuffer . byteLength - 8 ) {
55- throw new Error ( `parquet metadata length ${ metadataLength } exceeds available buffer ${ asyncBuffer . byteLength - 8 } ` )
53+ if ( metadataLength > file . byteLength - 8 ) {
54+ throw new Error ( `parquet metadata length ${ metadataLength } exceeds available buffer ${ file . byteLength - 8 } ` )
5655 }
5756
5857 // check if metadata size fits inside the initial fetch
5958 if ( metadataLength + 8 > initialFetchSize ) {
6059 // fetch the rest of the metadata
61- const metadataOffset = asyncBuffer . byteLength - metadataLength - 8
62- const metadataBuffer = await asyncBuffer . slice ( metadataOffset , footerOffset )
60+ const metadataOffset = file . byteLength - metadataLength - 8
61+ const metadataBuffer = await file . slice ( metadataOffset , footerOffset )
6362 // combine initial fetch with the new slice
6463 const combinedBuffer = new ArrayBuffer ( metadataLength + 8 )
6564 const combinedView = new Uint8Array ( combinedBuffer )
6665 combinedView . set ( new Uint8Array ( metadataBuffer ) )
6766 combinedView . set ( new Uint8Array ( footerBuffer ) , footerOffset - metadataOffset )
68- return parquetMetadataSync ( combinedBuffer , { parsers, geoparquet } )
67+ return parquetMetadataSync ( { file : combinedBuffer , parsers, geoparquet } )
6968 } else {
7069 // parse metadata from the footer
71- return parquetMetadataSync ( footerBuffer , { parsers, geoparquet } )
70+ return parquetMetadataSync ( { file : footerBuffer , parsers, geoparquet } )
7271 }
7372}
7473
7574/**
7675 * Read parquet metadata from a buffer synchronously.
7776 *
78- * @import {KeyValue} from '../src/types.d.ts'
79- * @param {ArrayBuffer } arrayBuffer parquet file footer
80- * @param {MetadataOptions } options metadata parsing options
77+ * @param {MetadataOptions & { file: ArrayBuffer } } options parquet file and metadata options
8178 * @returns {FileMetaData } parquet metadata object
8279 */
83- export function parquetMetadataSync ( arrayBuffer , { parsers, geoparquet = true } = { } ) {
84- if ( ! ( arrayBuffer instanceof ArrayBuffer ) ) throw new Error ( 'parquet expected ArrayBuffer' )
85- const view = new DataView ( arrayBuffer )
80+ export function parquetMetadataSync ( { file , parsers, geoparquet = true } ) {
81+ if ( ! ( file instanceof ArrayBuffer ) ) throw new Error ( 'parquet expected ArrayBuffer' )
82+ const view = new DataView ( file )
8683
8784 // Use default parsers if not given
8885 parsers = { ...DEFAULT_PARSERS , ...parsers }
@@ -287,7 +284,7 @@ function timeUnit(unit) {
287284/**
288285 * Convert column statistics based on column type.
289286 *
290- * @import {AsyncBuffer, FileMetaData, LogicalType, MetadataOptions, MinMaxType, ParquetParsers, SchemaElement, SchemaTree, Statistics, TimeUnit} from '../src/types.d.ts'
287+ * @import {AsyncBuffer, FileMetaData, KeyValue, LogicalType, MetadataOptions, MinMaxType, ParquetParsers, SchemaElement, SchemaTree, Statistics, TimeUnit} from '../src/types.d.ts'
291288 * @param {any } stats
292289 * @param {SchemaElement } schema
293290 * @param {ParquetParsers } parsers
0 commit comments