@navios/di 0.4.1 → 0.5.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (128) hide show
  1. package/README.md +211 -1
  2. package/coverage/clover.xml +1912 -1277
  3. package/coverage/coverage-final.json +37 -28
  4. package/coverage/docs/examples/basic-usage.mts.html +1 -1
  5. package/coverage/docs/examples/factory-pattern.mts.html +1 -1
  6. package/coverage/docs/examples/index.html +1 -1
  7. package/coverage/docs/examples/injection-tokens.mts.html +1 -1
  8. package/coverage/docs/examples/request-scope-example.mts.html +1 -1
  9. package/coverage/docs/examples/service-lifecycle.mts.html +1 -1
  10. package/coverage/index.html +71 -41
  11. package/coverage/lib/_tsup-dts-rollup.d.mts.html +682 -43
  12. package/coverage/lib/index.d.mts.html +7 -4
  13. package/coverage/lib/index.html +5 -5
  14. package/coverage/lib/testing/index.d.mts.html +91 -0
  15. package/coverage/lib/testing/index.html +116 -0
  16. package/coverage/src/base-instance-holder-manager.mts.html +589 -0
  17. package/coverage/src/container.mts.html +257 -74
  18. package/coverage/src/decorators/factory.decorator.mts.html +1 -1
  19. package/coverage/src/decorators/index.html +1 -1
  20. package/coverage/src/decorators/index.mts.html +1 -1
  21. package/coverage/src/decorators/injectable.decorator.mts.html +20 -20
  22. package/coverage/src/enums/index.html +1 -1
  23. package/coverage/src/enums/index.mts.html +1 -1
  24. package/coverage/src/enums/injectable-scope.enum.mts.html +1 -1
  25. package/coverage/src/enums/injectable-type.enum.mts.html +1 -1
  26. package/coverage/src/errors/di-error.mts.html +292 -0
  27. package/coverage/src/errors/errors.enum.mts.html +30 -21
  28. package/coverage/src/errors/factory-not-found.mts.html +31 -22
  29. package/coverage/src/errors/factory-token-not-resolved.mts.html +29 -26
  30. package/coverage/src/errors/index.html +56 -41
  31. package/coverage/src/errors/index.mts.html +15 -9
  32. package/coverage/src/errors/instance-destroying.mts.html +31 -22
  33. package/coverage/src/errors/instance-expired.mts.html +31 -22
  34. package/coverage/src/errors/instance-not-found.mts.html +31 -22
  35. package/coverage/src/errors/unknown-error.mts.html +31 -43
  36. package/coverage/src/event-emitter.mts.html +14 -14
  37. package/coverage/src/factory-context.mts.html +1 -1
  38. package/coverage/src/index.html +121 -46
  39. package/coverage/src/index.mts.html +7 -4
  40. package/coverage/src/injection-token.mts.html +28 -28
  41. package/coverage/src/injector.mts.html +1 -1
  42. package/coverage/src/instance-resolver.mts.html +1762 -0
  43. package/coverage/src/interfaces/factory.interface.mts.html +1 -1
  44. package/coverage/src/interfaces/index.html +1 -1
  45. package/coverage/src/interfaces/index.mts.html +1 -1
  46. package/coverage/src/interfaces/on-service-destroy.interface.mts.html +1 -1
  47. package/coverage/src/interfaces/on-service-init.interface.mts.html +1 -1
  48. package/coverage/src/registry.mts.html +28 -28
  49. package/coverage/src/request-context-holder.mts.html +183 -102
  50. package/coverage/src/request-context-manager.mts.html +532 -0
  51. package/coverage/src/service-instantiator.mts.html +49 -49
  52. package/coverage/src/service-invalidator.mts.html +1372 -0
  53. package/coverage/src/service-locator-event-bus.mts.html +48 -48
  54. package/coverage/src/service-locator-instance-holder.mts.html +2 -14
  55. package/coverage/src/service-locator-manager.mts.html +71 -335
  56. package/coverage/src/service-locator.mts.html +240 -2328
  57. package/coverage/src/symbols/index.html +1 -1
  58. package/coverage/src/symbols/index.mts.html +1 -1
  59. package/coverage/src/symbols/injectable-token.mts.html +1 -1
  60. package/coverage/src/testing/index.html +131 -0
  61. package/coverage/src/testing/index.mts.html +88 -0
  62. package/coverage/src/testing/test-container.mts.html +445 -0
  63. package/coverage/src/token-processor.mts.html +607 -0
  64. package/coverage/src/utils/defer.mts.html +28 -214
  65. package/coverage/src/utils/get-injectable-token.mts.html +7 -7
  66. package/coverage/src/utils/get-injectors.mts.html +99 -99
  67. package/coverage/src/utils/index.html +15 -15
  68. package/coverage/src/utils/index.mts.html +4 -7
  69. package/coverage/src/utils/types.mts.html +1 -1
  70. package/docs/injectable.md +51 -11
  71. package/docs/scopes.md +63 -29
  72. package/lib/_tsup-dts-rollup.d.mts +447 -212
  73. package/lib/_tsup-dts-rollup.d.ts +447 -212
  74. package/lib/chunk-44F3LXW5.mjs +2043 -0
  75. package/lib/chunk-44F3LXW5.mjs.map +1 -0
  76. package/lib/index.d.mts +6 -4
  77. package/lib/index.d.ts +6 -4
  78. package/lib/index.js +1199 -773
  79. package/lib/index.js.map +1 -1
  80. package/lib/index.mjs +4 -1599
  81. package/lib/index.mjs.map +1 -1
  82. package/lib/testing/index.d.mts +2 -0
  83. package/lib/testing/index.d.ts +2 -0
  84. package/lib/testing/index.js +2060 -0
  85. package/lib/testing/index.js.map +1 -0
  86. package/lib/testing/index.mjs +73 -0
  87. package/lib/testing/index.mjs.map +1 -0
  88. package/package.json +11 -1
  89. package/src/__tests__/container.spec.mts +47 -13
  90. package/src/__tests__/errors.spec.mts +53 -27
  91. package/src/__tests__/injectable.spec.mts +73 -0
  92. package/src/__tests__/request-scope.spec.mts +0 -2
  93. package/src/__tests__/service-locator-manager.spec.mts +12 -82
  94. package/src/__tests__/service-locator.spec.mts +1009 -1
  95. package/src/__type-tests__/inject.spec-d.mts +30 -7
  96. package/src/__type-tests__/injectable.spec-d.mts +76 -37
  97. package/src/base-instance-holder-manager.mts +2 -9
  98. package/src/container.mts +70 -10
  99. package/src/decorators/injectable.decorator.mts +29 -5
  100. package/src/errors/di-error.mts +69 -0
  101. package/src/errors/index.mts +9 -7
  102. package/src/injection-token.mts +1 -0
  103. package/src/injector.mts +2 -0
  104. package/src/instance-resolver.mts +559 -0
  105. package/src/request-context-holder.mts +0 -2
  106. package/src/request-context-manager.mts +149 -0
  107. package/src/service-invalidator.mts +429 -0
  108. package/src/service-locator-instance-holder.mts +0 -4
  109. package/src/service-locator-manager.mts +10 -40
  110. package/src/service-locator.mts +86 -782
  111. package/src/testing/README.md +80 -0
  112. package/src/testing/__tests__/test-container.spec.mts +173 -0
  113. package/src/testing/index.mts +1 -0
  114. package/src/testing/test-container.mts +120 -0
  115. package/src/token-processor.mts +174 -0
  116. package/src/utils/get-injectors.mts +161 -24
  117. package/src/utils/index.mts +0 -1
  118. package/src/utils/types.mts +12 -8
  119. package/tsup.config.mts +1 -1
  120. package/src/__tests__/defer.spec.mts +0 -166
  121. package/src/errors/errors.enum.mts +0 -8
  122. package/src/errors/factory-not-found.mts +0 -8
  123. package/src/errors/factory-token-not-resolved.mts +0 -10
  124. package/src/errors/instance-destroying.mts +0 -8
  125. package/src/errors/instance-expired.mts +0 -8
  126. package/src/errors/instance-not-found.mts +0 -8
  127. package/src/errors/unknown-error.mts +0 -15
  128. package/src/utils/defer.mts +0 -73
@@ -970,7 +970,433 @@
970
970
  <a name='L905'></a><a href='#L905'>905</a>
971
971
  <a name='L906'></a><a href='#L906'>906</a>
972
972
  <a name='L907'></a><a href='#L907'>907</a>
973
- <a name='L908'></a><a href='#L908'>908</a></td><td class="line-coverage quiet"><span class="cline-any cline-no">&nbsp;</span>
973
+ <a name='L908'></a><a href='#L908'>908</a>
974
+ <a name='L909'></a><a href='#L909'>909</a>
975
+ <a name='L910'></a><a href='#L910'>910</a>
976
+ <a name='L911'></a><a href='#L911'>911</a>
977
+ <a name='L912'></a><a href='#L912'>912</a>
978
+ <a name='L913'></a><a href='#L913'>913</a>
979
+ <a name='L914'></a><a href='#L914'>914</a>
980
+ <a name='L915'></a><a href='#L915'>915</a>
981
+ <a name='L916'></a><a href='#L916'>916</a>
982
+ <a name='L917'></a><a href='#L917'>917</a>
983
+ <a name='L918'></a><a href='#L918'>918</a>
984
+ <a name='L919'></a><a href='#L919'>919</a>
985
+ <a name='L920'></a><a href='#L920'>920</a>
986
+ <a name='L921'></a><a href='#L921'>921</a>
987
+ <a name='L922'></a><a href='#L922'>922</a>
988
+ <a name='L923'></a><a href='#L923'>923</a>
989
+ <a name='L924'></a><a href='#L924'>924</a>
990
+ <a name='L925'></a><a href='#L925'>925</a>
991
+ <a name='L926'></a><a href='#L926'>926</a>
992
+ <a name='L927'></a><a href='#L927'>927</a>
993
+ <a name='L928'></a><a href='#L928'>928</a>
994
+ <a name='L929'></a><a href='#L929'>929</a>
995
+ <a name='L930'></a><a href='#L930'>930</a>
996
+ <a name='L931'></a><a href='#L931'>931</a>
997
+ <a name='L932'></a><a href='#L932'>932</a>
998
+ <a name='L933'></a><a href='#L933'>933</a>
999
+ <a name='L934'></a><a href='#L934'>934</a>
1000
+ <a name='L935'></a><a href='#L935'>935</a>
1001
+ <a name='L936'></a><a href='#L936'>936</a>
1002
+ <a name='L937'></a><a href='#L937'>937</a>
1003
+ <a name='L938'></a><a href='#L938'>938</a>
1004
+ <a name='L939'></a><a href='#L939'>939</a>
1005
+ <a name='L940'></a><a href='#L940'>940</a>
1006
+ <a name='L941'></a><a href='#L941'>941</a>
1007
+ <a name='L942'></a><a href='#L942'>942</a>
1008
+ <a name='L943'></a><a href='#L943'>943</a>
1009
+ <a name='L944'></a><a href='#L944'>944</a>
1010
+ <a name='L945'></a><a href='#L945'>945</a>
1011
+ <a name='L946'></a><a href='#L946'>946</a>
1012
+ <a name='L947'></a><a href='#L947'>947</a>
1013
+ <a name='L948'></a><a href='#L948'>948</a>
1014
+ <a name='L949'></a><a href='#L949'>949</a>
1015
+ <a name='L950'></a><a href='#L950'>950</a>
1016
+ <a name='L951'></a><a href='#L951'>951</a>
1017
+ <a name='L952'></a><a href='#L952'>952</a>
1018
+ <a name='L953'></a><a href='#L953'>953</a>
1019
+ <a name='L954'></a><a href='#L954'>954</a>
1020
+ <a name='L955'></a><a href='#L955'>955</a>
1021
+ <a name='L956'></a><a href='#L956'>956</a>
1022
+ <a name='L957'></a><a href='#L957'>957</a>
1023
+ <a name='L958'></a><a href='#L958'>958</a>
1024
+ <a name='L959'></a><a href='#L959'>959</a>
1025
+ <a name='L960'></a><a href='#L960'>960</a>
1026
+ <a name='L961'></a><a href='#L961'>961</a>
1027
+ <a name='L962'></a><a href='#L962'>962</a>
1028
+ <a name='L963'></a><a href='#L963'>963</a>
1029
+ <a name='L964'></a><a href='#L964'>964</a>
1030
+ <a name='L965'></a><a href='#L965'>965</a>
1031
+ <a name='L966'></a><a href='#L966'>966</a>
1032
+ <a name='L967'></a><a href='#L967'>967</a>
1033
+ <a name='L968'></a><a href='#L968'>968</a>
1034
+ <a name='L969'></a><a href='#L969'>969</a>
1035
+ <a name='L970'></a><a href='#L970'>970</a>
1036
+ <a name='L971'></a><a href='#L971'>971</a>
1037
+ <a name='L972'></a><a href='#L972'>972</a>
1038
+ <a name='L973'></a><a href='#L973'>973</a>
1039
+ <a name='L974'></a><a href='#L974'>974</a>
1040
+ <a name='L975'></a><a href='#L975'>975</a>
1041
+ <a name='L976'></a><a href='#L976'>976</a>
1042
+ <a name='L977'></a><a href='#L977'>977</a>
1043
+ <a name='L978'></a><a href='#L978'>978</a>
1044
+ <a name='L979'></a><a href='#L979'>979</a>
1045
+ <a name='L980'></a><a href='#L980'>980</a>
1046
+ <a name='L981'></a><a href='#L981'>981</a>
1047
+ <a name='L982'></a><a href='#L982'>982</a>
1048
+ <a name='L983'></a><a href='#L983'>983</a>
1049
+ <a name='L984'></a><a href='#L984'>984</a>
1050
+ <a name='L985'></a><a href='#L985'>985</a>
1051
+ <a name='L986'></a><a href='#L986'>986</a>
1052
+ <a name='L987'></a><a href='#L987'>987</a>
1053
+ <a name='L988'></a><a href='#L988'>988</a>
1054
+ <a name='L989'></a><a href='#L989'>989</a>
1055
+ <a name='L990'></a><a href='#L990'>990</a>
1056
+ <a name='L991'></a><a href='#L991'>991</a>
1057
+ <a name='L992'></a><a href='#L992'>992</a>
1058
+ <a name='L993'></a><a href='#L993'>993</a>
1059
+ <a name='L994'></a><a href='#L994'>994</a>
1060
+ <a name='L995'></a><a href='#L995'>995</a>
1061
+ <a name='L996'></a><a href='#L996'>996</a>
1062
+ <a name='L997'></a><a href='#L997'>997</a>
1063
+ <a name='L998'></a><a href='#L998'>998</a>
1064
+ <a name='L999'></a><a href='#L999'>999</a>
1065
+ <a name='L1000'></a><a href='#L1000'>1000</a>
1066
+ <a name='L1001'></a><a href='#L1001'>1001</a>
1067
+ <a name='L1002'></a><a href='#L1002'>1002</a>
1068
+ <a name='L1003'></a><a href='#L1003'>1003</a>
1069
+ <a name='L1004'></a><a href='#L1004'>1004</a>
1070
+ <a name='L1005'></a><a href='#L1005'>1005</a>
1071
+ <a name='L1006'></a><a href='#L1006'>1006</a>
1072
+ <a name='L1007'></a><a href='#L1007'>1007</a>
1073
+ <a name='L1008'></a><a href='#L1008'>1008</a>
1074
+ <a name='L1009'></a><a href='#L1009'>1009</a>
1075
+ <a name='L1010'></a><a href='#L1010'>1010</a>
1076
+ <a name='L1011'></a><a href='#L1011'>1011</a>
1077
+ <a name='L1012'></a><a href='#L1012'>1012</a>
1078
+ <a name='L1013'></a><a href='#L1013'>1013</a>
1079
+ <a name='L1014'></a><a href='#L1014'>1014</a>
1080
+ <a name='L1015'></a><a href='#L1015'>1015</a>
1081
+ <a name='L1016'></a><a href='#L1016'>1016</a>
1082
+ <a name='L1017'></a><a href='#L1017'>1017</a>
1083
+ <a name='L1018'></a><a href='#L1018'>1018</a>
1084
+ <a name='L1019'></a><a href='#L1019'>1019</a>
1085
+ <a name='L1020'></a><a href='#L1020'>1020</a>
1086
+ <a name='L1021'></a><a href='#L1021'>1021</a>
1087
+ <a name='L1022'></a><a href='#L1022'>1022</a>
1088
+ <a name='L1023'></a><a href='#L1023'>1023</a>
1089
+ <a name='L1024'></a><a href='#L1024'>1024</a>
1090
+ <a name='L1025'></a><a href='#L1025'>1025</a>
1091
+ <a name='L1026'></a><a href='#L1026'>1026</a>
1092
+ <a name='L1027'></a><a href='#L1027'>1027</a>
1093
+ <a name='L1028'></a><a href='#L1028'>1028</a>
1094
+ <a name='L1029'></a><a href='#L1029'>1029</a>
1095
+ <a name='L1030'></a><a href='#L1030'>1030</a>
1096
+ <a name='L1031'></a><a href='#L1031'>1031</a>
1097
+ <a name='L1032'></a><a href='#L1032'>1032</a>
1098
+ <a name='L1033'></a><a href='#L1033'>1033</a>
1099
+ <a name='L1034'></a><a href='#L1034'>1034</a>
1100
+ <a name='L1035'></a><a href='#L1035'>1035</a>
1101
+ <a name='L1036'></a><a href='#L1036'>1036</a>
1102
+ <a name='L1037'></a><a href='#L1037'>1037</a>
1103
+ <a name='L1038'></a><a href='#L1038'>1038</a>
1104
+ <a name='L1039'></a><a href='#L1039'>1039</a>
1105
+ <a name='L1040'></a><a href='#L1040'>1040</a>
1106
+ <a name='L1041'></a><a href='#L1041'>1041</a>
1107
+ <a name='L1042'></a><a href='#L1042'>1042</a>
1108
+ <a name='L1043'></a><a href='#L1043'>1043</a>
1109
+ <a name='L1044'></a><a href='#L1044'>1044</a>
1110
+ <a name='L1045'></a><a href='#L1045'>1045</a>
1111
+ <a name='L1046'></a><a href='#L1046'>1046</a>
1112
+ <a name='L1047'></a><a href='#L1047'>1047</a>
1113
+ <a name='L1048'></a><a href='#L1048'>1048</a>
1114
+ <a name='L1049'></a><a href='#L1049'>1049</a>
1115
+ <a name='L1050'></a><a href='#L1050'>1050</a>
1116
+ <a name='L1051'></a><a href='#L1051'>1051</a>
1117
+ <a name='L1052'></a><a href='#L1052'>1052</a>
1118
+ <a name='L1053'></a><a href='#L1053'>1053</a>
1119
+ <a name='L1054'></a><a href='#L1054'>1054</a>
1120
+ <a name='L1055'></a><a href='#L1055'>1055</a>
1121
+ <a name='L1056'></a><a href='#L1056'>1056</a>
1122
+ <a name='L1057'></a><a href='#L1057'>1057</a>
1123
+ <a name='L1058'></a><a href='#L1058'>1058</a>
1124
+ <a name='L1059'></a><a href='#L1059'>1059</a>
1125
+ <a name='L1060'></a><a href='#L1060'>1060</a>
1126
+ <a name='L1061'></a><a href='#L1061'>1061</a>
1127
+ <a name='L1062'></a><a href='#L1062'>1062</a>
1128
+ <a name='L1063'></a><a href='#L1063'>1063</a>
1129
+ <a name='L1064'></a><a href='#L1064'>1064</a>
1130
+ <a name='L1065'></a><a href='#L1065'>1065</a>
1131
+ <a name='L1066'></a><a href='#L1066'>1066</a>
1132
+ <a name='L1067'></a><a href='#L1067'>1067</a>
1133
+ <a name='L1068'></a><a href='#L1068'>1068</a>
1134
+ <a name='L1069'></a><a href='#L1069'>1069</a>
1135
+ <a name='L1070'></a><a href='#L1070'>1070</a>
1136
+ <a name='L1071'></a><a href='#L1071'>1071</a>
1137
+ <a name='L1072'></a><a href='#L1072'>1072</a>
1138
+ <a name='L1073'></a><a href='#L1073'>1073</a>
1139
+ <a name='L1074'></a><a href='#L1074'>1074</a>
1140
+ <a name='L1075'></a><a href='#L1075'>1075</a>
1141
+ <a name='L1076'></a><a href='#L1076'>1076</a>
1142
+ <a name='L1077'></a><a href='#L1077'>1077</a>
1143
+ <a name='L1078'></a><a href='#L1078'>1078</a>
1144
+ <a name='L1079'></a><a href='#L1079'>1079</a>
1145
+ <a name='L1080'></a><a href='#L1080'>1080</a>
1146
+ <a name='L1081'></a><a href='#L1081'>1081</a>
1147
+ <a name='L1082'></a><a href='#L1082'>1082</a>
1148
+ <a name='L1083'></a><a href='#L1083'>1083</a>
1149
+ <a name='L1084'></a><a href='#L1084'>1084</a>
1150
+ <a name='L1085'></a><a href='#L1085'>1085</a>
1151
+ <a name='L1086'></a><a href='#L1086'>1086</a>
1152
+ <a name='L1087'></a><a href='#L1087'>1087</a>
1153
+ <a name='L1088'></a><a href='#L1088'>1088</a>
1154
+ <a name='L1089'></a><a href='#L1089'>1089</a>
1155
+ <a name='L1090'></a><a href='#L1090'>1090</a>
1156
+ <a name='L1091'></a><a href='#L1091'>1091</a>
1157
+ <a name='L1092'></a><a href='#L1092'>1092</a>
1158
+ <a name='L1093'></a><a href='#L1093'>1093</a>
1159
+ <a name='L1094'></a><a href='#L1094'>1094</a>
1160
+ <a name='L1095'></a><a href='#L1095'>1095</a>
1161
+ <a name='L1096'></a><a href='#L1096'>1096</a>
1162
+ <a name='L1097'></a><a href='#L1097'>1097</a>
1163
+ <a name='L1098'></a><a href='#L1098'>1098</a>
1164
+ <a name='L1099'></a><a href='#L1099'>1099</a>
1165
+ <a name='L1100'></a><a href='#L1100'>1100</a>
1166
+ <a name='L1101'></a><a href='#L1101'>1101</a>
1167
+ <a name='L1102'></a><a href='#L1102'>1102</a>
1168
+ <a name='L1103'></a><a href='#L1103'>1103</a>
1169
+ <a name='L1104'></a><a href='#L1104'>1104</a>
1170
+ <a name='L1105'></a><a href='#L1105'>1105</a>
1171
+ <a name='L1106'></a><a href='#L1106'>1106</a>
1172
+ <a name='L1107'></a><a href='#L1107'>1107</a>
1173
+ <a name='L1108'></a><a href='#L1108'>1108</a>
1174
+ <a name='L1109'></a><a href='#L1109'>1109</a>
1175
+ <a name='L1110'></a><a href='#L1110'>1110</a>
1176
+ <a name='L1111'></a><a href='#L1111'>1111</a>
1177
+ <a name='L1112'></a><a href='#L1112'>1112</a>
1178
+ <a name='L1113'></a><a href='#L1113'>1113</a>
1179
+ <a name='L1114'></a><a href='#L1114'>1114</a>
1180
+ <a name='L1115'></a><a href='#L1115'>1115</a>
1181
+ <a name='L1116'></a><a href='#L1116'>1116</a>
1182
+ <a name='L1117'></a><a href='#L1117'>1117</a>
1183
+ <a name='L1118'></a><a href='#L1118'>1118</a>
1184
+ <a name='L1119'></a><a href='#L1119'>1119</a>
1185
+ <a name='L1120'></a><a href='#L1120'>1120</a>
1186
+ <a name='L1121'></a><a href='#L1121'>1121</a></td><td class="line-coverage quiet"><span class="cline-any cline-no">&nbsp;</span>
1187
+ <span class="cline-any cline-neutral">&nbsp;</span>
1188
+ <span class="cline-any cline-neutral">&nbsp;</span>
1189
+ <span class="cline-any cline-neutral">&nbsp;</span>
1190
+ <span class="cline-any cline-neutral">&nbsp;</span>
1191
+ <span class="cline-any cline-neutral">&nbsp;</span>
1192
+ <span class="cline-any cline-neutral">&nbsp;</span>
1193
+ <span class="cline-any cline-neutral">&nbsp;</span>
1194
+ <span class="cline-any cline-neutral">&nbsp;</span>
1195
+ <span class="cline-any cline-neutral">&nbsp;</span>
1196
+ <span class="cline-any cline-neutral">&nbsp;</span>
1197
+ <span class="cline-any cline-neutral">&nbsp;</span>
1198
+ <span class="cline-any cline-neutral">&nbsp;</span>
1199
+ <span class="cline-any cline-neutral">&nbsp;</span>
1200
+ <span class="cline-any cline-neutral">&nbsp;</span>
1201
+ <span class="cline-any cline-neutral">&nbsp;</span>
1202
+ <span class="cline-any cline-neutral">&nbsp;</span>
1203
+ <span class="cline-any cline-neutral">&nbsp;</span>
1204
+ <span class="cline-any cline-neutral">&nbsp;</span>
1205
+ <span class="cline-any cline-neutral">&nbsp;</span>
1206
+ <span class="cline-any cline-neutral">&nbsp;</span>
1207
+ <span class="cline-any cline-neutral">&nbsp;</span>
1208
+ <span class="cline-any cline-neutral">&nbsp;</span>
1209
+ <span class="cline-any cline-neutral">&nbsp;</span>
1210
+ <span class="cline-any cline-neutral">&nbsp;</span>
1211
+ <span class="cline-any cline-neutral">&nbsp;</span>
1212
+ <span class="cline-any cline-neutral">&nbsp;</span>
1213
+ <span class="cline-any cline-neutral">&nbsp;</span>
1214
+ <span class="cline-any cline-neutral">&nbsp;</span>
1215
+ <span class="cline-any cline-neutral">&nbsp;</span>
1216
+ <span class="cline-any cline-neutral">&nbsp;</span>
1217
+ <span class="cline-any cline-neutral">&nbsp;</span>
1218
+ <span class="cline-any cline-neutral">&nbsp;</span>
1219
+ <span class="cline-any cline-neutral">&nbsp;</span>
1220
+ <span class="cline-any cline-neutral">&nbsp;</span>
1221
+ <span class="cline-any cline-neutral">&nbsp;</span>
1222
+ <span class="cline-any cline-neutral">&nbsp;</span>
1223
+ <span class="cline-any cline-neutral">&nbsp;</span>
1224
+ <span class="cline-any cline-neutral">&nbsp;</span>
1225
+ <span class="cline-any cline-neutral">&nbsp;</span>
1226
+ <span class="cline-any cline-neutral">&nbsp;</span>
1227
+ <span class="cline-any cline-neutral">&nbsp;</span>
1228
+ <span class="cline-any cline-neutral">&nbsp;</span>
1229
+ <span class="cline-any cline-neutral">&nbsp;</span>
1230
+ <span class="cline-any cline-neutral">&nbsp;</span>
1231
+ <span class="cline-any cline-neutral">&nbsp;</span>
1232
+ <span class="cline-any cline-neutral">&nbsp;</span>
1233
+ <span class="cline-any cline-neutral">&nbsp;</span>
1234
+ <span class="cline-any cline-neutral">&nbsp;</span>
1235
+ <span class="cline-any cline-neutral">&nbsp;</span>
1236
+ <span class="cline-any cline-neutral">&nbsp;</span>
1237
+ <span class="cline-any cline-neutral">&nbsp;</span>
1238
+ <span class="cline-any cline-neutral">&nbsp;</span>
1239
+ <span class="cline-any cline-neutral">&nbsp;</span>
1240
+ <span class="cline-any cline-neutral">&nbsp;</span>
1241
+ <span class="cline-any cline-neutral">&nbsp;</span>
1242
+ <span class="cline-any cline-neutral">&nbsp;</span>
1243
+ <span class="cline-any cline-neutral">&nbsp;</span>
1244
+ <span class="cline-any cline-neutral">&nbsp;</span>
1245
+ <span class="cline-any cline-neutral">&nbsp;</span>
1246
+ <span class="cline-any cline-neutral">&nbsp;</span>
1247
+ <span class="cline-any cline-neutral">&nbsp;</span>
1248
+ <span class="cline-any cline-neutral">&nbsp;</span>
1249
+ <span class="cline-any cline-neutral">&nbsp;</span>
1250
+ <span class="cline-any cline-neutral">&nbsp;</span>
1251
+ <span class="cline-any cline-neutral">&nbsp;</span>
1252
+ <span class="cline-any cline-neutral">&nbsp;</span>
1253
+ <span class="cline-any cline-neutral">&nbsp;</span>
1254
+ <span class="cline-any cline-neutral">&nbsp;</span>
1255
+ <span class="cline-any cline-neutral">&nbsp;</span>
1256
+ <span class="cline-any cline-neutral">&nbsp;</span>
1257
+ <span class="cline-any cline-neutral">&nbsp;</span>
1258
+ <span class="cline-any cline-neutral">&nbsp;</span>
1259
+ <span class="cline-any cline-neutral">&nbsp;</span>
1260
+ <span class="cline-any cline-neutral">&nbsp;</span>
1261
+ <span class="cline-any cline-neutral">&nbsp;</span>
1262
+ <span class="cline-any cline-neutral">&nbsp;</span>
1263
+ <span class="cline-any cline-neutral">&nbsp;</span>
1264
+ <span class="cline-any cline-neutral">&nbsp;</span>
1265
+ <span class="cline-any cline-neutral">&nbsp;</span>
1266
+ <span class="cline-any cline-neutral">&nbsp;</span>
1267
+ <span class="cline-any cline-neutral">&nbsp;</span>
1268
+ <span class="cline-any cline-neutral">&nbsp;</span>
1269
+ <span class="cline-any cline-neutral">&nbsp;</span>
1270
+ <span class="cline-any cline-neutral">&nbsp;</span>
1271
+ <span class="cline-any cline-neutral">&nbsp;</span>
1272
+ <span class="cline-any cline-neutral">&nbsp;</span>
1273
+ <span class="cline-any cline-neutral">&nbsp;</span>
1274
+ <span class="cline-any cline-neutral">&nbsp;</span>
1275
+ <span class="cline-any cline-neutral">&nbsp;</span>
1276
+ <span class="cline-any cline-neutral">&nbsp;</span>
1277
+ <span class="cline-any cline-neutral">&nbsp;</span>
1278
+ <span class="cline-any cline-neutral">&nbsp;</span>
1279
+ <span class="cline-any cline-neutral">&nbsp;</span>
1280
+ <span class="cline-any cline-neutral">&nbsp;</span>
1281
+ <span class="cline-any cline-neutral">&nbsp;</span>
1282
+ <span class="cline-any cline-neutral">&nbsp;</span>
1283
+ <span class="cline-any cline-neutral">&nbsp;</span>
1284
+ <span class="cline-any cline-neutral">&nbsp;</span>
1285
+ <span class="cline-any cline-neutral">&nbsp;</span>
1286
+ <span class="cline-any cline-neutral">&nbsp;</span>
1287
+ <span class="cline-any cline-neutral">&nbsp;</span>
1288
+ <span class="cline-any cline-neutral">&nbsp;</span>
1289
+ <span class="cline-any cline-neutral">&nbsp;</span>
1290
+ <span class="cline-any cline-neutral">&nbsp;</span>
1291
+ <span class="cline-any cline-neutral">&nbsp;</span>
1292
+ <span class="cline-any cline-neutral">&nbsp;</span>
1293
+ <span class="cline-any cline-neutral">&nbsp;</span>
1294
+ <span class="cline-any cline-neutral">&nbsp;</span>
1295
+ <span class="cline-any cline-neutral">&nbsp;</span>
1296
+ <span class="cline-any cline-neutral">&nbsp;</span>
1297
+ <span class="cline-any cline-neutral">&nbsp;</span>
1298
+ <span class="cline-any cline-neutral">&nbsp;</span>
1299
+ <span class="cline-any cline-neutral">&nbsp;</span>
1300
+ <span class="cline-any cline-neutral">&nbsp;</span>
1301
+ <span class="cline-any cline-neutral">&nbsp;</span>
1302
+ <span class="cline-any cline-neutral">&nbsp;</span>
1303
+ <span class="cline-any cline-neutral">&nbsp;</span>
1304
+ <span class="cline-any cline-neutral">&nbsp;</span>
1305
+ <span class="cline-any cline-neutral">&nbsp;</span>
1306
+ <span class="cline-any cline-neutral">&nbsp;</span>
1307
+ <span class="cline-any cline-neutral">&nbsp;</span>
1308
+ <span class="cline-any cline-neutral">&nbsp;</span>
1309
+ <span class="cline-any cline-neutral">&nbsp;</span>
1310
+ <span class="cline-any cline-neutral">&nbsp;</span>
1311
+ <span class="cline-any cline-neutral">&nbsp;</span>
1312
+ <span class="cline-any cline-neutral">&nbsp;</span>
1313
+ <span class="cline-any cline-neutral">&nbsp;</span>
1314
+ <span class="cline-any cline-neutral">&nbsp;</span>
1315
+ <span class="cline-any cline-neutral">&nbsp;</span>
1316
+ <span class="cline-any cline-neutral">&nbsp;</span>
1317
+ <span class="cline-any cline-neutral">&nbsp;</span>
1318
+ <span class="cline-any cline-neutral">&nbsp;</span>
1319
+ <span class="cline-any cline-neutral">&nbsp;</span>
1320
+ <span class="cline-any cline-neutral">&nbsp;</span>
1321
+ <span class="cline-any cline-neutral">&nbsp;</span>
1322
+ <span class="cline-any cline-neutral">&nbsp;</span>
1323
+ <span class="cline-any cline-neutral">&nbsp;</span>
1324
+ <span class="cline-any cline-neutral">&nbsp;</span>
1325
+ <span class="cline-any cline-neutral">&nbsp;</span>
1326
+ <span class="cline-any cline-neutral">&nbsp;</span>
1327
+ <span class="cline-any cline-neutral">&nbsp;</span>
1328
+ <span class="cline-any cline-neutral">&nbsp;</span>
1329
+ <span class="cline-any cline-neutral">&nbsp;</span>
1330
+ <span class="cline-any cline-neutral">&nbsp;</span>
1331
+ <span class="cline-any cline-neutral">&nbsp;</span>
1332
+ <span class="cline-any cline-neutral">&nbsp;</span>
1333
+ <span class="cline-any cline-neutral">&nbsp;</span>
1334
+ <span class="cline-any cline-neutral">&nbsp;</span>
1335
+ <span class="cline-any cline-neutral">&nbsp;</span>
1336
+ <span class="cline-any cline-neutral">&nbsp;</span>
1337
+ <span class="cline-any cline-neutral">&nbsp;</span>
1338
+ <span class="cline-any cline-neutral">&nbsp;</span>
1339
+ <span class="cline-any cline-neutral">&nbsp;</span>
1340
+ <span class="cline-any cline-neutral">&nbsp;</span>
1341
+ <span class="cline-any cline-neutral">&nbsp;</span>
1342
+ <span class="cline-any cline-neutral">&nbsp;</span>
1343
+ <span class="cline-any cline-neutral">&nbsp;</span>
1344
+ <span class="cline-any cline-neutral">&nbsp;</span>
1345
+ <span class="cline-any cline-neutral">&nbsp;</span>
1346
+ <span class="cline-any cline-neutral">&nbsp;</span>
1347
+ <span class="cline-any cline-neutral">&nbsp;</span>
1348
+ <span class="cline-any cline-neutral">&nbsp;</span>
1349
+ <span class="cline-any cline-neutral">&nbsp;</span>
1350
+ <span class="cline-any cline-neutral">&nbsp;</span>
1351
+ <span class="cline-any cline-neutral">&nbsp;</span>
1352
+ <span class="cline-any cline-neutral">&nbsp;</span>
1353
+ <span class="cline-any cline-neutral">&nbsp;</span>
1354
+ <span class="cline-any cline-neutral">&nbsp;</span>
1355
+ <span class="cline-any cline-neutral">&nbsp;</span>
1356
+ <span class="cline-any cline-neutral">&nbsp;</span>
1357
+ <span class="cline-any cline-neutral">&nbsp;</span>
1358
+ <span class="cline-any cline-neutral">&nbsp;</span>
1359
+ <span class="cline-any cline-neutral">&nbsp;</span>
1360
+ <span class="cline-any cline-neutral">&nbsp;</span>
1361
+ <span class="cline-any cline-neutral">&nbsp;</span>
1362
+ <span class="cline-any cline-neutral">&nbsp;</span>
1363
+ <span class="cline-any cline-neutral">&nbsp;</span>
1364
+ <span class="cline-any cline-neutral">&nbsp;</span>
1365
+ <span class="cline-any cline-neutral">&nbsp;</span>
1366
+ <span class="cline-any cline-neutral">&nbsp;</span>
1367
+ <span class="cline-any cline-neutral">&nbsp;</span>
1368
+ <span class="cline-any cline-neutral">&nbsp;</span>
1369
+ <span class="cline-any cline-neutral">&nbsp;</span>
1370
+ <span class="cline-any cline-neutral">&nbsp;</span>
1371
+ <span class="cline-any cline-neutral">&nbsp;</span>
1372
+ <span class="cline-any cline-neutral">&nbsp;</span>
1373
+ <span class="cline-any cline-neutral">&nbsp;</span>
1374
+ <span class="cline-any cline-neutral">&nbsp;</span>
1375
+ <span class="cline-any cline-neutral">&nbsp;</span>
1376
+ <span class="cline-any cline-neutral">&nbsp;</span>
1377
+ <span class="cline-any cline-neutral">&nbsp;</span>
1378
+ <span class="cline-any cline-neutral">&nbsp;</span>
1379
+ <span class="cline-any cline-neutral">&nbsp;</span>
1380
+ <span class="cline-any cline-neutral">&nbsp;</span>
1381
+ <span class="cline-any cline-neutral">&nbsp;</span>
1382
+ <span class="cline-any cline-neutral">&nbsp;</span>
1383
+ <span class="cline-any cline-neutral">&nbsp;</span>
1384
+ <span class="cline-any cline-neutral">&nbsp;</span>
1385
+ <span class="cline-any cline-neutral">&nbsp;</span>
1386
+ <span class="cline-any cline-neutral">&nbsp;</span>
1387
+ <span class="cline-any cline-neutral">&nbsp;</span>
1388
+ <span class="cline-any cline-neutral">&nbsp;</span>
1389
+ <span class="cline-any cline-neutral">&nbsp;</span>
1390
+ <span class="cline-any cline-neutral">&nbsp;</span>
1391
+ <span class="cline-any cline-neutral">&nbsp;</span>
1392
+ <span class="cline-any cline-neutral">&nbsp;</span>
1393
+ <span class="cline-any cline-neutral">&nbsp;</span>
1394
+ <span class="cline-any cline-neutral">&nbsp;</span>
1395
+ <span class="cline-any cline-neutral">&nbsp;</span>
1396
+ <span class="cline-any cline-neutral">&nbsp;</span>
1397
+ <span class="cline-any cline-neutral">&nbsp;</span>
1398
+ <span class="cline-any cline-neutral">&nbsp;</span>
1399
+ <span class="cline-any cline-neutral">&nbsp;</span>
974
1400
  <span class="cline-any cline-neutral">&nbsp;</span>
975
1401
  <span class="cline-any cline-neutral">&nbsp;</span>
976
1402
  <span class="cline-any cline-neutral">&nbsp;</span>
@@ -1895,6 +2321,93 @@ declare type BaseInjectionTokenSchemaType = ZodObject | ZodRecord;
1895
2321
  export { BaseInjectionTokenSchemaType }
1896
2322
  export { BaseInjectionTokenSchemaType as BaseInjectionTokenSchemaType_alias_1 }
1897
2323
  &nbsp;
2324
+ /**
2325
+ * Abstract base class that provides common functionality for managing ServiceLocatorInstanceHolder objects.
2326
+ * This class contains shared patterns used by both RequestContextHolder and ServiceLocatorManager.
2327
+ */
2328
+ declare abstract class BaseInstanceHolderManager {
2329
+ protected readonly logger: Console | null;
2330
+ protected readonly _holders: Map&lt;string, ServiceLocatorInstanceHolder&gt;;
2331
+ constructor(logger?: Console | null);
2332
+ /**
2333
+ * Protected getter for accessing the holders map from subclasses.
2334
+ */
2335
+ protected get holders(): Map&lt;string, ServiceLocatorInstanceHolder&gt;;
2336
+ /**
2337
+ * Abstract method to get a holder by name. Each implementation defines its own return type
2338
+ * based on their specific error handling and validation needs.
2339
+ */
2340
+ abstract get(name: string): any;
2341
+ /**
2342
+ * Abstract method to set a holder by name. Each implementation may have different validation logic.
2343
+ */
2344
+ abstract set(name: string, holder: ServiceLocatorInstanceHolder): void;
2345
+ /**
2346
+ * Abstract method to check if a holder exists. Each implementation may have different validation logic.
2347
+ */
2348
+ abstract has(name: string): any;
2349
+ /**
2350
+ * Deletes a holder by name.
2351
+ * @param name The name of the holder to delete
2352
+ * @returns true if the holder was deleted, false if it didn't exist
2353
+ */
2354
+ delete(name: string): boolean;
2355
+ /**
2356
+ * Filters holders based on a predicate function.
2357
+ * @param predicate Function to test each holder
2358
+ * @returns A new Map containing only the holders that match the predicate
2359
+ */
2360
+ filter(predicate: (value: ServiceLocatorInstanceHolder&lt;any&gt;, key: string) =&gt; boolean): Map&lt;string, ServiceLocatorInstanceHolder&gt;;
2361
+ /**
2362
+ * Clears all holders from this manager.
2363
+ */
2364
+ clear(): void;
2365
+ /**
2366
+ * Gets the number of holders currently managed.
2367
+ */
2368
+ size(): number;
2369
+ /**
2370
+ * Creates a new holder with Creating status and a deferred creation promise.
2371
+ * This is useful for creating placeholder holders that can be fulfilled later.
2372
+ * @param name The name of the instance
2373
+ * @param type The injectable type
2374
+ * @param scope The injectable scope
2375
+ * @param deps Optional set of dependencies
2376
+ * @param ttl Optional time-to-live in milliseconds (defaults to Infinity)
2377
+ * @returns A tuple containing the deferred promise and the holder
2378
+ */
2379
+ createCreatingHolder&lt;Instance&gt;(name: string, type: InjectableType, scope: InjectableScope, deps?: Set&lt;string&gt;, ttl?: number): [
2380
+ ReturnType&lt;typeof createDeferred&lt;[undefined, Instance]&gt;&gt;,
2381
+ ServiceLocatorInstanceHolder&lt;Instance&gt;
2382
+ ];
2383
+ /**
2384
+ * Creates a new holder with Created status and an actual instance.
2385
+ * This is useful for creating holders that already have their instance ready.
2386
+ * @param name The name of the instance
2387
+ * @param instance The actual instance to store
2388
+ * @param type The injectable type
2389
+ * @param scope The injectable scope
2390
+ * @param deps Optional set of dependencies
2391
+ * @param ttl Optional time-to-live in milliseconds (defaults to Infinity)
2392
+ * @returns The created holder
2393
+ */
2394
+ protected createCreatedHolder&lt;Instance&gt;(name: string, instance: Instance, type: InjectableType, scope: InjectableScope, deps?: Set&lt;string&gt;, ttl?: number): ServiceLocatorInstanceHolder&lt;Instance&gt;;
2395
+ /**
2396
+ * Gets all holder names currently managed.
2397
+ */
2398
+ getAllNames(): string[];
2399
+ /**
2400
+ * Gets all holders currently managed.
2401
+ */
2402
+ getAllHolders(): ServiceLocatorInstanceHolder[];
2403
+ /**
2404
+ * Checks if this manager has any holders.
2405
+ */
2406
+ isEmpty(): boolean;
2407
+ }
2408
+ export { BaseInstanceHolderManager }
2409
+ export { BaseInstanceHolderManager as BaseInstanceHolderManager_alias_1 }
2410
+ &nbsp;
1898
2411
  declare class BoundInjectionToken&lt;T, S extends InjectionTokenSchemaType&gt; {
1899
2412
  readonly token: InjectionToken&lt;T, S&gt;;
1900
2413
  readonly value: z.input&lt;S&gt;;
@@ -1942,6 +2455,9 @@ export { ClassTypeWithOptionalArgument as ClassTypeWithOptionalArgument_alias_1
1942
2455
  * It wraps a ServiceLocator instance and provides convenient methods for getting instances.
1943
2456
  */
1944
2457
  declare class Container {
2458
+ protected readonly registry: Registry;
2459
+ protected readonly logger: Console | null;
2460
+ protected readonly injectors: Injectors;
1945
2461
  private readonly serviceLocator;
1946
2462
  constructor(registry?: Registry, logger?: Console | null, injectors?: Injectors);
1947
2463
  private registerSelf;
@@ -1990,6 +2506,11 @@ declare class Container {
1990
2506
  * @param requestId The request ID to set as current
1991
2507
  */
1992
2508
  setCurrentRequestContext(requestId: string): void;
2509
+ /**
2510
+ * Clears all instances and bindings from the container.
2511
+ * This is useful for testing or resetting the container state.
2512
+ */
2513
+ clear(): void;
1993
2514
  }
1994
2515
  export { Container }
1995
2516
  export { Container as Container_alias_1 }
@@ -2017,18 +2538,29 @@ export { defaultInjectors as defaultInjectors_alias_1 }
2017
2538
  /**
2018
2539
  * Default implementation of RequestContextHolder.
2019
2540
  */
2020
- declare class DefaultRequestContextHolder implements RequestContextHolder {
2541
+ declare class DefaultRequestContextHolder extends BaseInstanceHolderManager implements RequestContextHolder {
2021
2542
  readonly requestId: string;
2022
2543
  readonly priority: number;
2023
- readonly instances: Map&lt;string, any&gt;;
2024
- readonly holders: Map&lt;string, ServiceLocatorInstanceHolder&gt;;
2025
2544
  readonly metadata: Map&lt;string, any&gt;;
2026
2545
  readonly createdAt: number;
2027
2546
  constructor(requestId: string, priority?: number, initialMetadata?: Record&lt;string, any&gt;);
2547
+ /**
2548
+ * Public getter for holders to maintain interface compatibility.
2549
+ */
2550
+ get holders(): Map&lt;string, ServiceLocatorInstanceHolder&gt;;
2551
+ /**
2552
+ * Gets a holder by name. For RequestContextHolder, this is a simple lookup.
2553
+ */
2554
+ get(name: string): ServiceLocatorInstanceHolder | undefined;
2555
+ /**
2556
+ * Sets a holder by name.
2557
+ */
2558
+ set(name: string, holder: ServiceLocatorInstanceHolder): void;
2559
+ /**
2560
+ * Checks if a holder exists by name.
2561
+ */
2562
+ has(name: string): boolean;
2028
2563
  addInstance(instanceName: string | InjectionToken&lt;any, undefined&gt;, instance: any, holder?: ServiceLocatorInstanceHolder): void;
2029
- getInstance(instanceName: string): any | undefined;
2030
- getHolder(instanceName: string): ServiceLocatorInstanceHolder | undefined;
2031
- hasInstance(instanceName: string): boolean;
2032
2564
  clear(): void;
2033
2565
  getMetadata(key: string): any | undefined;
2034
2566
  setMetadata(key: string, value: any): void;
@@ -2090,17 +2622,17 @@ export { ErrorsEnum as ErrorsEnum_alias_2 }
2090
2622
  &nbsp;
2091
2623
  declare class EventEmitter&lt;Events extends EventsConfig = {}&gt; implements EventEmitterInterface&lt;Events&gt; {
2092
2624
  private listeners;
2093
- on&lt;E extends EventsNames&lt;Events&gt;, Args extends EventsArgs&lt;Events, E&gt;&gt;(event: E, listener: (...args: Args) =&gt; void): () =&gt; void;
2094
- off&lt;E extends EventsNames&lt;Events&gt;, Args extends EventsArgs&lt;Events, E&gt;&gt;(event: E, listener: (...args: Args) =&gt; void): void;
2095
- once&lt;E extends EventsNames&lt;Events&gt;, Args extends EventsArgs&lt;Events, E&gt;&gt;(event: E, listener: (...args: Args) =&gt; void): () =&gt; void;
2625
+ on&lt;E extends EventsNames&lt;Events&gt;, Args extends EventsArgs&lt;Events, E&gt;&gt;(event: E, listener: (...args: Args) =&gt; void | Promise&lt;void&gt;): () =&gt; void;
2626
+ off&lt;E extends EventsNames&lt;Events&gt;, Args extends EventsArgs&lt;Events, E&gt;&gt;(event: E, listener: (...args: Args) =&gt; void | Promise&lt;void&gt;): void;
2627
+ once&lt;E extends EventsNames&lt;Events&gt;, Args extends EventsArgs&lt;Events, E&gt;&gt;(event: E, listener: (...args: Args) =&gt; void | Promise&lt;void&gt;): () =&gt; void;
2096
2628
  emit&lt;E extends EventsNames&lt;Events&gt;, Args extends EventsArgs&lt;Events, E&gt;&gt;(event: E, ...args: Args): Promise&lt;any&gt;;
2097
2629
  }
2098
2630
  export { EventEmitter }
2099
2631
  export { EventEmitter as EventEmitter_alias_1 }
2100
2632
  &nbsp;
2101
2633
  declare interface EventEmitterInterface&lt;Events extends EventsConfig&gt; {
2102
- on&lt;E extends EventsNames&lt;Events&gt;, Args extends EventsArgs&lt;Events, E&gt;&gt;(event: E, listener: (...args: Args) =&gt; void): () =&gt; void;
2103
- emit&lt;E extends EventsNames&lt;Events&gt;, Args extends EventsArgs&lt;Events, E&gt;&gt;(event: E, ...args: Args): void;
2634
+ on&lt;E extends EventsNames&lt;Events&gt;, Args extends EventsArgs&lt;Events, E&gt;&gt;(event: E, listener: (...args: Args) =&gt; void | Promise&lt;void&gt;): () =&gt; void;
2635
+ emit&lt;E extends EventsNames&lt;Events&gt;, Args extends EventsArgs&lt;Events, E&gt;&gt;(event: E, ...args: Args): void | Promise&lt;void&gt;;
2104
2636
  }
2105
2637
  export { EventEmitterInterface }
2106
2638
  export { EventEmitterInterface as EventEmitterInterface_alias_1 }
@@ -2434,10 +2966,6 @@ declare interface RequestContextHolder {
2434
2966
  * Unique identifier for this request context.
2435
2967
  */
2436
2968
  readonly requestId: string;
2437
- /**
2438
- * Pre-prepared instances for this request, keyed by instance name.
2439
- */
2440
- readonly instances: Map&lt;string, any&gt;;
2441
2969
  /**
2442
2970
  * Instance holders for request-scoped services.
2443
2971
  */
@@ -2463,18 +2991,14 @@ declare interface RequestContextHolder {
2463
2991
  * Adds a pre-prepared instance to this context.
2464
2992
  */
2465
2993
  addInstance(token: InjectionToken&lt;any, undefined&gt;, instance: any): void;
2466
- /**
2467
- * Gets a pre-prepared instance from this context.
2468
- */
2469
- getInstance(instanceName: string): any | undefined;
2470
2994
  /**
2471
2995
  * Gets an instance holder from this context.
2472
2996
  */
2473
- getHolder(instanceName: string): ServiceLocatorInstanceHolder | undefined;
2997
+ get(instanceName: string): ServiceLocatorInstanceHolder | undefined;
2474
2998
  /**
2475
2999
  * Checks if this context has a pre-prepared instance.
2476
3000
  */
2477
- hasInstance(instanceName: string): boolean;
3001
+ has(instanceName: string): boolean;
2478
3002
  /**
2479
3003
  * Clears all instances and holders from this context.
2480
3004
  */
@@ -2487,6 +3011,22 @@ declare interface RequestContextHolder {
2487
3011
  * Sets metadata value by key.
2488
3012
  */
2489
3013
  setMetadata(key: string, value: any): void;
3014
+ /**
3015
+ * Filters holders based on a predicate function.
3016
+ */
3017
+ filter(predicate: (value: ServiceLocatorInstanceHolder&lt;any&gt;, key: string) =&gt; boolean): Map&lt;string, ServiceLocatorInstanceHolder&gt;;
3018
+ /**
3019
+ * Deletes a holder by name.
3020
+ */
3021
+ delete(name: string): boolean;
3022
+ /**
3023
+ * Gets the number of holders currently managed.
3024
+ */
3025
+ size(): number;
3026
+ /**
3027
+ * Checks if this manager has any holders.
3028
+ */
3029
+ isEmpty(): boolean;
2490
3030
  }
2491
3031
  export { RequestContextHolder }
2492
3032
  export { RequestContextHolder as RequestContextHolder_alias_1 }
@@ -2547,7 +3087,19 @@ declare class ServiceLocator {
2547
3087
  getOrThrowInstance&lt;Instance&gt;(token: AnyInjectableType, args: any): Promise&lt;Instance&gt;;
2548
3088
  getSyncInstance&lt;Instance, Schema extends InjectionTokenSchemaType | undefined&gt;(token: AnyInjectableType, args: Schema extends ZodObject ? z.input&lt;Schema&gt; : Schema extends ZodOptional&lt;ZodObject&gt; ? z.input&lt;Schema&gt; | undefined : undefined): Instance | null;
2549
3089
  invalidate(service: string, round?: number): Promise&lt;any&gt;;
2550
- ready(): Promise&lt;null&gt;;
3090
+ /**
3091
+ * Invalidates a single holder based on its current status.
3092
+ */
3093
+ private invalidateHolder;
3094
+ /**
3095
+ * Destroys a holder and cleans up its resources.
3096
+ */
3097
+ private destroyHolder;
3098
+ ready(): Promise&lt;void&gt;;
3099
+ /**
3100
+ * Waits for a holder to settle (either created, destroyed, or error state).
3101
+ */
3102
+ private waitForHolderToSettle;
2551
3103
  /**
2552
3104
  * Begins a new request context with the given parameters.
2553
3105
  * @param requestId Unique identifier for this request
@@ -2584,6 +3136,23 @@ declare class ServiceLocator {
2584
3136
  * Gets an instance by its instance name, handling all the logic after instance name creation.
2585
3137
  */
2586
3138
  private retrieveOrCreateInstanceByInstanceName;
3139
+ /**
3140
+ * Attempts to retrieve an existing instance, handling request-scoped and singleton instances.
3141
+ * Returns null if no instance exists and a new one should be created.
3142
+ */
3143
+ private tryGetExistingInstance;
3144
+ /**
3145
+ * Attempts to get a request-scoped instance if applicable.
3146
+ */
3147
+ private tryGetRequestScopedInstance;
3148
+ /**
3149
+ * Attempts to get a singleton instance from the manager.
3150
+ */
3151
+ private tryGetSingletonInstance;
3152
+ /**
3153
+ * Waits for an instance holder to be ready and returns the appropriate result.
3154
+ */
3155
+ private waitForInstanceReady;
2587
3156
  /**
2588
3157
  * Emits events to listeners for instance lifecycle events.
2589
3158
  */
@@ -2596,6 +3165,26 @@ declare class ServiceLocator {
2596
3165
  * Instantiates a service from the registry using the service instantiator.
2597
3166
  */
2598
3167
  private instantiateServiceFromRegistry;
3168
+ /**
3169
+ * Handles the result of service instantiation.
3170
+ */
3171
+ private handleInstantiationResult;
3172
+ /**
3173
+ * Handles successful service instantiation.
3174
+ */
3175
+ private handleInstantiationSuccess;
3176
+ /**
3177
+ * Handles service instantiation errors.
3178
+ */
3179
+ private handleInstantiationError;
3180
+ /**
3181
+ * Stores an instance holder based on its scope.
3182
+ */
3183
+ private storeInstanceByScope;
3184
+ /**
3185
+ * Tries to get a pre-prepared instance from request contexts.
3186
+ */
3187
+ private tryGetPrePreparedInstance;
2599
3188
  /**
2600
3189
  * Creates a factory context for dependency injection during service instantiation.
2601
3190
  * @param contextHolder Optional request context holder for priority-based resolution
@@ -2605,6 +3194,10 @@ declare class ServiceLocator {
2605
3194
  * Generates a unique instance name based on token and arguments.
2606
3195
  */
2607
3196
  private generateInstanceName;
3197
+ /**
3198
+ * Formats a single argument value for instance name generation.
3199
+ */
3200
+ private formatArgValue;
2608
3201
  }
2609
3202
  export { ServiceLocator }
2610
3203
  export { ServiceLocator as ServiceLocator_alias_1 }
@@ -2704,29 +3297,11 @@ declare enum ServiceLocatorInstanceHolderStatus {
2704
3297
  export { ServiceLocatorInstanceHolderStatus }
2705
3298
  export { ServiceLocatorInstanceHolderStatus as ServiceLocatorInstanceHolderStatus_alias_1 }
2706
3299
  &nbsp;
2707
- declare class ServiceLocatorManager {
2708
- private readonly logger;
2709
- private readonly instancesHolders;
3300
+ declare class ServiceLocatorManager extends BaseInstanceHolderManager {
2710
3301
  constructor(logger?: Console | null);
2711
3302
  get(name: string): [InstanceExpired | InstanceDestroying, ServiceLocatorInstanceHolder] | [InstanceNotFound] | [undefined, ServiceLocatorInstanceHolder];
2712
3303
  set(name: string, holder: ServiceLocatorInstanceHolder): void;
2713
3304
  has(name: string): [InstanceExpired | InstanceDestroying] | [undefined, boolean];
2714
- delete(name: string): boolean;
2715
- filter(predicate: (value: ServiceLocatorInstanceHolder&lt;any&gt;, key: string) =&gt; boolean): Map&lt;string, ServiceLocatorInstanceHolder&gt;;
2716
- /**
2717
- * Creates a new holder with Creating status and a deferred creation promise.
2718
- * This is useful for creating placeholder holders that can be fulfilled later.
2719
- * @param name The name of the instance
2720
- * @param type The injectable type
2721
- * @param scope The injectable scope
2722
- * @param deps Optional set of dependencies
2723
- * @param ttl Optional time-to-live in milliseconds (defaults to Infinity)
2724
- * @returns A tuple containing the deferred promise and the holder
2725
- */
2726
- createCreatingHolder&lt;Instance&gt;(name: string, type: InjectableType, scope: InjectableScope, deps?: Set&lt;string&gt;, ttl?: number): [
2727
- ReturnType&lt;typeof createDeferred&lt;[undefined, Instance]&gt;&gt;,
2728
- ServiceLocatorInstanceHolder&lt;Instance&gt;
2729
- ];
2730
3305
  /**
2731
3306
  * Creates a new holder with Created status and an actual instance.
2732
3307
  * This is useful for creating holders that already have their instance ready.
@@ -2755,6 +3330,70 @@ export declare const test4: {
2755
3330
  &nbsp;
2756
3331
  export declare const test5: object;
2757
3332
  &nbsp;
3333
+ /**
3334
+ * A binding builder for the TestContainer that allows chaining binding operations.
3335
+ */
3336
+ declare class TestBindingBuilder&lt;T&gt; {
3337
+ private readonly container;
3338
+ private readonly token;
3339
+ constructor(container: TestContainer, token: InjectionToken&lt;T, any&gt;);
3340
+ /**
3341
+ * Binds the token to a specific value.
3342
+ * This is useful for testing with mock values or constants.
3343
+ * @param value The value to bind to the token
3344
+ */
3345
+ toValue(value: T): TestContainer;
3346
+ /**
3347
+ * Binds the token to a class constructor.
3348
+ * @param target The class constructor to bind to
3349
+ */
3350
+ toClass(target: ClassType): TestContainer;
3351
+ }
3352
+ export { TestBindingBuilder }
3353
+ export { TestBindingBuilder as TestBindingBuilder_alias_1 }
3354
+ &nbsp;
3355
+ /**
3356
+ * TestContainer extends the base Container with additional methods useful for testing.
3357
+ * It provides a simplified API for binding values and classes during test setup.
3358
+ */
3359
+ declare class TestContainer extends Container {
3360
+ constructor(registry?: Registry, logger?: Console | null, injectors?: Injectors);
3361
+ /**
3362
+ * Creates a binding builder for the given token.
3363
+ * This allows chaining binding operations like bind(Token).toValue(value).
3364
+ * @param token The injection token to bind
3365
+ * @returns A TestBindingBuilder for chaining binding operations
3366
+ */
3367
+ bind&lt;T&gt;(token: ClassType): TestBindingBuilder&lt;T&gt;;
3368
+ bind&lt;T&gt;(token: InjectionToken&lt;T, any&gt;): TestBindingBuilder&lt;T&gt;;
3369
+ /**
3370
+ * Binds a value directly to a token.
3371
+ * This is a convenience method equivalent to bind(token).toValue(value).
3372
+ * @param token The injection token to bind
3373
+ * @param value The value to bind to the token
3374
+ * @returns The TestContainer instance for chaining
3375
+ */
3376
+ bindValue&lt;T&gt;(token: ClassType, value: T): TestContainer;
3377
+ bindValue&lt;T&gt;(token: InjectionToken&lt;T, any&gt;, value: T): TestContainer;
3378
+ /**
3379
+ * Binds a class to a token.
3380
+ * This is a convenience method equivalent to bind(token).toClass(target).
3381
+ * @param token The injection token to bind
3382
+ * @param target The class constructor to bind to
3383
+ * @returns The TestContainer instance for chaining
3384
+ */
3385
+ bindClass(token: ClassType, target: ClassType): TestContainer;
3386
+ bindClass&lt;T&gt;(token: InjectionToken&lt;T, any&gt;, target: ClassType): TestContainer;
3387
+ /**
3388
+ * Creates a new TestContainer instance with the same configuration.
3389
+ * This is useful for creating isolated test containers.
3390
+ * @returns A new TestContainer instance
3391
+ */
3392
+ createChild(): TestContainer;
3393
+ }
3394
+ export { TestContainer }
3395
+ export { TestContainer as TestContainer_alias_1 }
3396
+ &nbsp;
2758
3397
  declare type UnionToArray&lt;T, A extends unknown[] = []&gt; = IsUnion&lt;T&gt; extends true ? UnionToArray&lt;Exclude&lt;T, PopUnion&lt;T&gt;&gt;, [PopUnion&lt;T&gt;, ...A]&gt; : [T, ...A];
2759
3398
  export { UnionToArray }
2760
3399
  export { UnionToArray as UnionToArray_alias_1 }
@@ -2791,7 +3430,7 @@ export { }
2791
3430
  <div class='footer quiet pad2 space-top1 center small'>
2792
3431
  Code coverage generated by
2793
3432
  <a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a>
2794
- at 2025-09-19T12:38:51.382Z
3433
+ at 2025-09-21T17:47:07.632Z
2795
3434
  </div>
2796
3435
  <script src="../prettify.js"></script>
2797
3436
  <script>