@@ -367,13 +367,13 @@ export function ErrorBoundary(props: {
367367export interface Resource < T > {
368368 ( ) : T | undefined ;
369369 state : "unresolved" | "pending" | "ready" | "refreshing" | "errored" ;
370- loading : boolean ;
370+ _loading : boolean ;
371371 error : any ;
372372 latest : T | undefined ;
373373}
374374
375375type SuspenseContextType = {
376- resources : Map < string , { loading : boolean ; error : any } > ;
376+ resources : Map < string , { _loading : boolean ; error : any } > ;
377377 completed : ( ) => void ;
378378} ;
379379
@@ -450,34 +450,48 @@ export function createResource<T, S>(
450450 return resource . ref ;
451451 }
452452 }
453- const read = ( ) => {
453+ const prepareResource = ( ) => {
454454 if ( error ) throw error ;
455455 const resolved =
456456 options . ssrLoadFrom !== "initial" &&
457457 sharedConfig . context ! . async &&
458458 "data" in sharedConfig . context ! . resources [ id ] ;
459459 if ( ! resolved && resourceContext ) resourceContext . push ( id ) ;
460- if ( ! resolved && read . loading ) {
460+ if ( ! resolved && read . _loading ) {
461461 const ctx = useContext ( SuspenseContext ) ;
462462 if ( ctx ) {
463463 ctx . resources . set ( id , read ) ;
464464 contexts . add ( ctx ) ;
465465 }
466466 }
467- return resolved ? sharedConfig . context ! . resources [ id ] . data : value ;
467+ return resolved ;
468+ } ;
469+ const read = ( ) => {
470+ return prepareResource ( ) ? sharedConfig . context ! . resources [ id ] . data : value ;
468471 } ;
469- read . loading = false ;
472+ const loading = ( ) => {
473+ prepareResource ( ) ;
474+ return read . _loading ;
475+ } ;
476+ read . _loading = false ;
470477 read . error = undefined as any ;
471478 read . state = "initialValue" in options ? "ready" : "unresolved" ;
472- Object . defineProperty ( read , "latest" , {
473- get ( ) {
474- return read ( ) ;
479+ Object . defineProperties ( read , {
480+ latest : {
481+ get ( ) {
482+ return read ( ) ;
483+ }
484+ } ,
485+ loading : {
486+ get ( ) {
487+ return loading ( ) ;
488+ }
475489 }
476490 } ) ;
477491 function load ( ) {
478492 const ctx = sharedConfig . context ! ;
479493 if ( ! ctx . async )
480- return ( read . loading = ! ! ( typeof source === "function" ? ( source as ( ) => S ) ( ) : source ) ) ;
494+ return ( read . _loading = ! ! ( typeof source === "function" ? ( source as ( ) => S ) ( ) : source ) ) ;
481495 if ( ctx . resources && id in ctx . resources && "data" in ctx . resources [ id ] ) {
482496 value = ctx . resources [ id ] . data ;
483497 return ;
@@ -495,19 +509,19 @@ export function createResource<T, S>(
495509 p = ( fetcher as ResourceFetcher < S , T > ) ( lookup , { value } ) ;
496510 }
497511 if ( p != undefined && typeof p === "object" && "then" in p ) {
498- read . loading = true ;
512+ read . _loading = true ;
499513 read . state = "pending" ;
500514 p = p
501515 . then ( res => {
502- read . loading = false ;
516+ read . _loading = false ;
503517 read . state = "ready" ;
504518 ctx . resources [ id ] . data = res ;
505519 p = null ;
506520 notifySuspense ( contexts ) ;
507521 return res ;
508522 } )
509523 . catch ( err => {
510- read . loading = false ;
524+ read . _loading = false ;
511525 read . state = "errored" ;
512526 read . error = error = castError ( err ) ;
513527 p = null ;
@@ -550,15 +564,15 @@ export function lazy<T extends Component<any>>(
550564 else load ( id ) ;
551565 if ( p . resolved ) return p . resolved ( props ) ;
552566 const ctx = useContext ( SuspenseContext ) ;
553- const track = { loading : true , error : undefined } ;
567+ const track = { _loading : true , error : undefined } ;
554568 if ( ctx ) {
555569 ctx . resources . set ( id , track ) ;
556570 contexts . add ( ctx ) ;
557571 }
558572 if ( sharedConfig . context ! . async ) {
559573 sharedConfig . context ! . block (
560574 p . then ( ( ) => {
561- track . loading = false ;
575+ track . _loading = false ;
562576 notifySuspense ( contexts ) ;
563577 } )
564578 ) ;
@@ -571,7 +585,7 @@ export function lazy<T extends Component<any>>(
571585
572586function suspenseComplete ( c : SuspenseContextType ) {
573587 for ( const r of c . resources . values ( ) ) {
574- if ( r . loading ) return false ;
588+ if ( r . _loading ) return false ;
575589 }
576590 return true ;
577591}
@@ -642,7 +656,7 @@ export function Suspense(props: { fallback?: string; children: string }) {
642656 const value : SuspenseContextType =
643657 ctx . suspense [ id ] ||
644658 ( ctx . suspense [ id ] = {
645- resources : new Map < string , { loading : boolean ; error : any } > ( ) ,
659+ resources : new Map < string , { _loading : boolean ; error : any } > ( ) ,
646660 completed : ( ) => {
647661 const res = runSuspense ( ) ;
648662 if ( suspenseComplete ( value ) ) {
0 commit comments