@@ -71,13 +71,11 @@ export function resource<T, R>(options: ResourceOptions<T, R>): ResourceRef<T |
7171 options as ResourceOptions < T , R > & { request : ResourceOptions < T , R > [ 'params' ] }
7272 ) . request ;
7373 const params = ( options . params ?? oldNameForParams ?? ( ( ) => null ) ) as ( ) => R ;
74-
7574 return new ResourceImpl < T | undefined , R > (
7675 params ,
7776 getLoader ( options ) ,
7877 options . defaultValue ,
7978 options . equal ? wrapEqualityFn ( options . equal ) : undefined ,
80- options . debugName ,
8179 options . injector ?? inject ( Injector ) ,
8280 RESOURCE_VALUE_THROWS_ERRORS_DEFAULT ,
8381 ) ;
@@ -113,18 +111,11 @@ abstract class BaseWritableResource<T> implements WritableResource<T> {
113111
114112 abstract reload ( ) : boolean ;
115113
116- readonly isLoading : Signal < boolean > ;
117-
118- constructor ( value : Signal < T > , debugName : string | undefined ) {
114+ constructor ( value : Signal < T > ) {
119115 this . value = value as WritableSignal < T > ;
120116 this . value . set = this . set . bind ( this ) ;
121117 this . value . update = this . update . bind ( this ) ;
122118 this . value . asReadonly = signalAsReadonlyFn ;
123-
124- this . isLoading = computed (
125- ( ) => this . status ( ) === 'loading' || this . status ( ) === 'reloading' ,
126- ngDevMode ? createDebugNameObject ( debugName , 'isLoading' ) : undefined ,
127- ) ;
128119 }
129120
130121 abstract set ( value : T ) : void ;
@@ -135,6 +126,8 @@ abstract class BaseWritableResource<T> implements WritableResource<T> {
135126 this . set ( updateFn ( untracked ( this . value ) ) ) ;
136127 }
137128
129+ readonly isLoading = computed ( ( ) => this . status ( ) === 'loading' || this . status ( ) === 'reloading' ) ;
130+
138131 // Use a computed here to avoid triggering reactive consumers if the value changes while staying
139132 // either defined or undefined.
140133 private readonly isValueDefined = computed ( ( ) => {
@@ -178,15 +171,11 @@ export class ResourceImpl<T, R> extends BaseWritableResource<T> implements Resou
178171 private destroyed = false ;
179172 private unregisterOnDestroy : ( ) => void ;
180173
181- override readonly status : Signal < ResourceStatus > ;
182- override readonly error : Signal < Error | undefined > ;
183-
184174 constructor (
185175 request : ( ) => R ,
186176 private readonly loaderFn : ResourceStreamingLoader < T , R > ,
187177 defaultValue : T ,
188178 private readonly equal : ValueEqualityFn < T > | undefined ,
189- private readonly debugName : string | undefined ,
190179 injector : Injector ,
191180 throwErrorsFromValue : boolean = RESOURCE_VALUE_THROWS_ERRORS_DEFAULT ,
192181 ) {
@@ -216,16 +205,14 @@ export class ResourceImpl<T, R> extends BaseWritableResource<T> implements Resou
216205
217206 return streamValue . value ;
218207 } ,
219- { equal, ... ( ngDevMode ? createDebugNameObject ( debugName , 'value' ) : undefined ) } ,
208+ { equal} ,
220209 ) ,
221- debugName ,
222210 ) ;
223211
224212 // Extend `request()` to include a writable reload signal.
225213 this . extRequest = linkedSignal ( {
226214 source : request ,
227215 computation : ( request ) => ( { request, reload : 0 } ) ,
228- ...( ngDevMode ? createDebugNameObject ( debugName , 'extRequest' ) : undefined ) ,
229216 } ) ;
230217
231218 // The main resource state is managed in a `linkedSignal`, which allows the resource to change
@@ -256,33 +243,25 @@ export class ResourceImpl<T, R> extends BaseWritableResource<T> implements Resou
256243 } ;
257244 }
258245 } ,
259- ...( ngDevMode ? createDebugNameObject ( debugName , 'state' ) : undefined ) ,
260246 } ) ;
261247
262248 this . effectRef = effect ( this . loadEffect . bind ( this ) , {
263249 injector,
264250 manualCleanup : true ,
265- ...( ngDevMode ? createDebugNameObject ( debugName , 'loadEffect' ) : undefined ) ,
266251 } ) ;
267252
268253 this . pendingTasks = injector . get ( PendingTasks ) ;
269254
270255 // Cancel any pending request when the resource itself is destroyed.
271256 this . unregisterOnDestroy = injector . get ( DestroyRef ) . onDestroy ( ( ) => this . destroy ( ) ) ;
257+ }
272258
273- this . status = computed (
274- ( ) => projectStatusOfState ( this . state ( ) ) ,
275- ngDevMode ? createDebugNameObject ( debugName , 'status' ) : undefined ,
276- ) ;
259+ override readonly status = computed ( ( ) => projectStatusOfState ( this . state ( ) ) ) ;
277260
278- this . error = computed (
279- ( ) => {
280- const stream = this . state ( ) . stream ?.( ) ;
281- return stream && ! isResolved ( stream ) ? stream . error : undefined ;
282- } ,
283- ngDevMode ? createDebugNameObject ( debugName , 'error' ) : undefined ,
284- ) ;
285- }
261+ override readonly error = computed ( ( ) => {
262+ const stream = this . state ( ) . stream ?.( ) ;
263+ return stream && ! isResolved ( stream ) ? stream . error : undefined ;
264+ } ) ;
286265
287266 /**
288267 * Called either directly via `WritableResource.set` or via `.value.set()`.
@@ -310,10 +289,7 @@ export class ResourceImpl<T, R> extends BaseWritableResource<T> implements Resou
310289 extRequest : state . extRequest ,
311290 status : 'local' ,
312291 previousStatus : 'local' ,
313- stream : signal (
314- { value} ,
315- ngDevMode ? createDebugNameObject ( this . debugName , 'stream' ) : undefined ,
316- ) ,
292+ stream : signal ( { value} ) ,
317293 } ) ;
318294
319295 // We're departing from whatever state the resource was in previously, so cancel any in-progress
@@ -417,10 +393,7 @@ export class ResourceImpl<T, R> extends BaseWritableResource<T> implements Resou
417393 extRequest,
418394 status : 'resolved' ,
419395 previousStatus : 'error' ,
420- stream : signal (
421- { error : encapsulateResourceError ( err ) } ,
422- ngDevMode ? createDebugNameObject ( this . debugName , 'stream' ) : undefined ,
423- ) ,
396+ stream : signal ( { error : encapsulateResourceError ( err ) } ) ,
424397 } ) ;
425398 } finally {
426399 // Resolve the pending task now that the resource has a value.
@@ -453,15 +426,9 @@ function getLoader<T, R>(options: ResourceOptions<T, R>): ResourceStreamingLoade
453426
454427 return async ( params ) => {
455428 try {
456- return signal (
457- { value : await options . loader ( params ) } ,
458- ngDevMode ? createDebugNameObject ( options . debugName , 'stream' ) : undefined ,
459- ) ;
429+ return signal ( { value : await options . loader ( params ) } ) ;
460430 } catch ( err ) {
461- return signal (
462- { error : encapsulateResourceError ( err ) } ,
463- ngDevMode ? createDebugNameObject ( options . debugName , 'stream' ) : undefined ,
464- ) ;
431+ return signal ( { error : encapsulateResourceError ( err ) } ) ;
465432 }
466433 } ;
467434}
@@ -490,18 +457,6 @@ function isResolved<T>(state: ResourceStreamItem<T>): state is {value: T} {
490457 return ( state as { error : unknown } ) . error === undefined ;
491458}
492459
493- /**
494- * Creates a debug name object for an internal signal.
495- */
496- function createDebugNameObject (
497- resourceDebugName : string | undefined ,
498- internalSignalDebugName : string ,
499- ) : { debugName ?: string } {
500- return {
501- debugName : `Resource${ resourceDebugName ? '#' + resourceDebugName : '' } .${ internalSignalDebugName } ` ,
502- } ;
503- }
504-
505460export function encapsulateResourceError ( error : unknown ) : Error {
506461 if ( error instanceof Error ) {
507462 return error ;
0 commit comments