@@ -141,7 +141,14 @@ export interface WritableContainer<
141
141
* @param name The "name" of the dependency (can be a symbol).
142
142
* @param dependency An already instantiated value.
143
143
*/
144
- registerValue < TName extends ContainerKey , TDependency > (
144
+ registerValue <
145
+ TName extends ContainerKey ,
146
+ TDependency extends TName extends keyof TSyncDependencies
147
+ ? TSyncDependencies [ TName ]
148
+ : TName extends keyof TAsyncDependencies
149
+ ? never
150
+ : unknown ,
151
+ > (
145
152
name : TName ,
146
153
dependency : TDependency ,
147
154
) : Container <
@@ -280,13 +287,21 @@ function __createContainer<
280
287
Container < TSyncDependencies , { } >
281
288
> ,
282
289
) : ContainerWithNewSyncDep < TName , TDependency > {
283
- return __createContainer (
284
- {
285
- ...syncDependencies ,
286
- [ name ] : dependency ,
287
- } ,
288
- asyncDependencies ,
289
- ) as ContainerWithNewSyncDep < TName , TDependency >
290
+ if ( name in syncDependencies ) {
291
+ return __createContainer (
292
+ {
293
+ ...syncDependencies ,
294
+ [ name ] : dependency ,
295
+ } ,
296
+ asyncDependencies ,
297
+ ) as ContainerWithNewSyncDep < TName , TDependency >
298
+ } else {
299
+ ; ( syncDependencies as Record < TName , unknown > ) [ name ] = dependency
300
+ return __createContainer (
301
+ syncDependencies ,
302
+ asyncDependencies ,
303
+ ) as ContainerWithNewSyncDep < TName , TDependency >
304
+ }
290
305
} ,
291
306
292
307
registerAsync < TName extends ContainerKey , TDependency > (
@@ -296,23 +311,39 @@ function __createContainer<
296
311
Container < TSyncDependencies , TAsyncDependencies >
297
312
> ,
298
313
) : ContainerWithNewAsyncDep < TName , TDependency > {
299
- return __createContainer ( syncDependencies , {
300
- ...asyncDependencies ,
301
- [ name ] : dependency ,
302
- } ) as ContainerWithNewAsyncDep < TName , TDependency >
314
+ if ( name in asyncDependencies ) {
315
+ return __createContainer ( syncDependencies , {
316
+ ...asyncDependencies ,
317
+ [ name ] : dependency ,
318
+ } ) as ContainerWithNewAsyncDep < TName , TDependency >
319
+ } else {
320
+ ; ( asyncDependencies as Record < TName , unknown > ) [ name ] = dependency
321
+ return __createContainer (
322
+ syncDependencies ,
323
+ asyncDependencies ,
324
+ ) as ContainerWithNewAsyncDep < TName , TDependency >
325
+ }
303
326
} ,
304
327
305
328
registerValue < TName extends ContainerKey , TDependency > (
306
329
name : TName ,
307
330
dependency : TDependency ,
308
331
) : ContainerWithNewSyncDep < TName , TDependency > {
309
- return __createContainer (
310
- {
311
- ...syncDependencies ,
312
- [ name ] : ( ) => dependency ,
313
- } ,
314
- asyncDependencies ,
315
- ) as ContainerWithNewSyncDep < TName , TDependency >
332
+ if ( name in syncDependencies ) {
333
+ return __createContainer (
334
+ {
335
+ ...syncDependencies ,
336
+ [ name ] : ( ) => dependency ,
337
+ } ,
338
+ asyncDependencies ,
339
+ ) as ContainerWithNewSyncDep < TName , TDependency >
340
+ } else {
341
+ ; ( syncDependencies as Record < TName , unknown > ) [ name ] = ( ) => dependency
342
+ return __createContainer (
343
+ syncDependencies ,
344
+ asyncDependencies ,
345
+ ) as ContainerWithNewSyncDep < TName , TDependency >
346
+ }
316
347
} ,
317
348
318
349
resolve < TName extends keyof TSyncDependencies > (
0 commit comments