@@ -2405,6 +2405,8 @@ class WorkerTransport {
24052405
24062406 #passwordCapability = null ;
24072407
2408+ #copiedPageInfo = null ;
2409+
24082410 constructor (
24092411 messageHandler ,
24102412 loadingTask ,
@@ -2464,11 +2466,42 @@ class WorkerTransport {
24642466 }
24652467 }
24662468
2467- #updateCaches( ) {
2469+ #updateCaches( { type, pageNumbers } ) {
2470+ if ( type === "copy" ) {
2471+ this . #copiedPageInfo = new Map ( ) ;
2472+ for ( const pageNum of pageNumbers ) {
2473+ this . #copiedPageInfo. set ( pageNum , {
2474+ proxy : this . #pageCache. get ( pageNum - 1 ) || null ,
2475+ promise : this . #pagePromises. get ( pageNum - 1 ) || null ,
2476+ } ) ;
2477+ }
2478+ return ;
2479+ }
2480+
2481+ if ( type === "delete" ) {
2482+ for ( const pageNum of pageNumbers ) {
2483+ this . #pageCache. delete ( pageNum - 1 ) ;
2484+ this . #pagePromises. delete ( pageNum - 1 ) ;
2485+ }
2486+ }
2487+
24682488 const newPageCache = new Map ( ) ;
24692489 const newPromiseCache = new Map ( ) ;
2470- for ( let i = 0 , ii = this . pagesMapper . pagesNumber ; i < ii ; i ++ ) {
2471- const prevPageIndex = this . pagesMapper . getPrevPageNumber ( i + 1 ) - 1 ;
2490+ const { pagesMapper } = this ;
2491+ for ( let i = 0 , ii = pagesMapper . pagesNumber ; i < ii ; i ++ ) {
2492+ const prevPageNumber = pagesMapper . getPrevPageNumber ( i + 1 ) ;
2493+ if ( prevPageNumber < 0 ) {
2494+ const { proxy, promise } =
2495+ this . #copiedPageInfo?. get ( - prevPageNumber ) || { } ;
2496+ if ( proxy ) {
2497+ newPageCache . set ( i , proxy ) ;
2498+ }
2499+ if ( promise ) {
2500+ newPromiseCache . set ( i , promise ) ;
2501+ }
2502+ continue ;
2503+ }
2504+ const prevPageIndex = prevPageNumber - 1 ;
24722505 const page = this . #pageCache. get ( prevPageIndex ) ;
24732506 if ( page ) {
24742507 newPageCache . set ( i , page ) ;
@@ -3001,7 +3034,11 @@ class WorkerTransport {
30013034 num : ref . num ,
30023035 gen : ref . gen ,
30033036 } ) ;
3004- return this . pagesMapper . getPageNumber ( index + 1 ) - 1 ;
3037+ const pageNumber = this . pagesMapper . getPageNumber ( index + 1 ) ;
3038+ if ( pageNumber === 0 ) {
3039+ throw new Error ( "GetPageIndex: page has been removed." ) ;
3040+ }
3041+ return pageNumber - 1 ;
30053042 }
30063043
30073044 getAnnotations ( pageIndex , intent ) {
@@ -3150,9 +3187,13 @@ class WorkerTransport {
31503187 }
31513188 const refStr = ref . gen === 0 ? `${ ref . num } R` : `${ ref . num } R${ ref . gen } ` ;
31523189 const pageIndex = this . #pageRefCache. get ( refStr ) ;
3153- return pageIndex >= 0
3154- ? this . pagesMapper . getPageNumber ( pageIndex + 1 )
3155- : null ;
3190+ if ( pageIndex >= 0 ) {
3191+ const pageNumber = this . pagesMapper . getPageNumber ( pageIndex + 1 ) ;
3192+ if ( pageNumber !== 0 ) {
3193+ return pageNumber ;
3194+ }
3195+ }
3196+ return null ;
31563197 }
31573198}
31583199
0 commit comments