@@ -19,8 +19,10 @@ import type {
1919 ShadowObjectConstructor ,
2020 ShadowObjectType ,
2121 SyncEvent ,
22+ Maybe ,
2223} from '../types.js' ;
2324import { ConsoleLogger } from '../utils/ConsoleLogger.js' ;
25+ import { toMaybe } from '../utils/toMaybe.js' ;
2426import { Entity } from './Entity.js' ;
2527import { type OnCreate , onCreate , type OnDestroy , onDestroy , onParentChanged } from './events.js' ;
2628import { Registry } from './Registry.js' ;
@@ -486,12 +488,16 @@ export class Kernel {
486488 return result ;
487489 } ,
488490
489- createResource < T > ( factory : ( ) => T | undefined , cleanup ?: ( resource : T ) => void ) : Signal < T | undefined > {
490- const resourceSignal = createSignal < T | undefined > ( undefined ) ;
491- unsubscribeSecondary . add ( ( ) => destroySignal ( resourceSignal ) ) ;
491+ createResource < T > ( factory : ( ) => T | undefined , cleanup ?: ( resource : NonNullable < T > ) => any ) : Signal < Maybe < T > > {
492+ const resourceSignal = createSignal < Maybe < T > > ( ) ;
493+
494+ unsubscribeSecondary . add ( ( ) => {
495+ resourceSignal . set ( undefined ) ;
496+ destroySignal ( resourceSignal ) ;
497+ } ) ;
492498
493499 const effect = createEffect ( ( ) => {
494- const resource = factory ( ) ;
500+ const resource = toMaybe ( factory ( ) ) ;
495501 resourceSignal . set ( resource ) ;
496502
497503 if ( resource !== undefined && cleanup ) {
@@ -504,6 +510,7 @@ export class Kernel {
504510 resourceSignal . set ( undefined ) ;
505511 } ;
506512 } ) ;
513+
507514 unsubscribeSecondary . add ( effect . destroy ) ;
508515
509516 return resourceSignal ;
0 commit comments