@@ -680,15 +680,15 @@ class RNTupleDescriptorBuilder {
680680async function readHeaderFooter ( tuple ) {
681681 // if already read - return immediately, make possible to call several times
682682 if ( tuple ?. builder )
683- return true ;
683+ return tuple . builder ;
684684
685- if ( ! tuple . $file )
686- return false ;
685+ if ( ! tuple ? .$file )
686+ return null ;
687687
688688 // request header and footer buffers from the file
689689 return tuple . $file . readBuffer ( [ tuple . fSeekHeader , tuple . fNBytesHeader , tuple . fSeekFooter , tuple . fNBytesFooter ] ) . then ( blobs => {
690690 if ( blobs ?. length !== 2 )
691- return false ;
691+ throw new Error ( 'Failure reading header or footer blobs' ) ;
692692
693693 // Handle both compressed and uncompressed cases
694694 const processBlob = ( blob , uncompressedSize ) => {
@@ -701,47 +701,47 @@ async function readHeaderFooter(tuple) {
701701 return Promise . all ( [
702702 processBlob ( blobs [ 0 ] , tuple . fLenHeader ) ,
703703 processBlob ( blobs [ 1 ] , tuple . fLenFooter )
704- ] ) . then ( unzip_blobs => {
705- const [ header_blob , footer_blob ] = unzip_blobs ;
706- if ( ! header_blob || ! footer_blob )
707- return false ;
708-
709- tuple . builder = new RNTupleDescriptorBuilder ;
710- tuple . builder . deserializeHeader ( header_blob ) ;
711- tuple . builder . deserializeFooter ( footer_blob ) ;
712-
713- // Deserialize Page List
714- const group = tuple . builder . clusterGroups ?. [ 0 ] ;
715- if ( ! group || ! group . pageListLocator )
716- throw new Error ( 'No valid cluster group or page list locator found' ) ;
717-
718- const offset = Number ( group . pageListLocator . offset ) ,
719- size = Number ( group . pageListLocator . size ) ,
720- uncompressedSize = Number ( group . pageListLength ) ;
721-
722- return tuple . $file . readBuffer ( [ offset , size ] ) . then ( page_list_blob => {
723- if ( ! ( page_list_blob instanceof DataView ) )
724- throw new Error ( `Expected DataView from readBuffer, got ${ Object . prototype . toString . call ( page_list_blob ) } ` ) ;
725-
726- // Check if page list data is uncompressed
727- if ( page_list_blob . byteLength === uncompressedSize ) {
728- // Data is uncompressed, use directly
729- tuple . builder . deserializePageList ( page_list_blob ) ;
730- return true ;
731- }
732- // Attempt to decompress the page list
733- return R__unzip ( page_list_blob , uncompressedSize ) . then ( unzipped_blob => {
734- if ( ! ( unzipped_blob instanceof DataView ) )
735- throw new Error ( `Unzipped page list is not a DataView, got ${ Object . prototype . toString . call ( unzipped_blob ) } ` ) ;
736-
737- tuple . builder . deserializePageList ( unzipped_blob ) ;
738- return true ;
739- } ) ;
740- } ) ;
741- } ) ;
704+ ] ) ;
705+ } ) . then ( unzip_blobs => {
706+ const [ header_blob , footer_blob ] = unzip_blobs ;
707+ if ( ! header_blob || ! footer_blob )
708+ throw new Error ( 'Failure when uncompress header and footer blobs' ) ;
709+
710+ tuple . builder = new RNTupleDescriptorBuilder ;
711+ tuple . builder . deserializeHeader ( header_blob ) ;
712+ tuple . builder . deserializeFooter ( footer_blob ) ;
713+
714+ // Deserialize Page List
715+ const group = tuple . builder . clusterGroups ?. [ 0 ] ;
716+ if ( ! group || ! group . pageListLocator )
717+ throw new Error ( 'No valid cluster group or page list locator found' ) ;
718+
719+ const offset = Number ( group . pageListLocator . offset ) ,
720+ size = Number ( group . pageListLocator . size ) ;
721+
722+ return tuple . $file . readBuffer ( [ offset , size ] ) ;
723+ } ) . then ( page_list_blob => {
724+ if ( ! ( page_list_blob instanceof DataView ) )
725+ throw new Error ( `Expected DataView from readBuffer, got ${ Object . prototype . toString . call ( page_list_blob ) } ` ) ;
726+
727+ const group = tuple . builder . clusterGroups ?. [ 0 ] ,
728+ uncompressedSize = Number ( group . pageListLength ) ;
729+
730+ // Check if page list data is uncompressed
731+ if ( page_list_blob . byteLength === uncompressedSize )
732+ return page_list_blob ;
733+
734+ // Attempt to decompress the page list
735+ return R__unzip ( page_list_blob , uncompressedSize ) ;
736+ } ) . then ( unzipped_blob => {
737+ if ( ! ( unzipped_blob instanceof DataView ) )
738+ throw new Error ( `Unzipped page list is not a DataView, got ${ Object . prototype . toString . call ( unzipped_blob ) } ` ) ;
739+
740+ tuple . builder . deserializePageList ( unzipped_blob ) ;
741+ return tuple . builder ;
742742 } ) . catch ( err => {
743743 console . error ( 'Error during readHeaderFooter execution:' , err ) ;
744- throw err ;
744+ return null ;
745745 } ) ;
746746}
747747
0 commit comments