@nexus-ioc/core 0.4.2 → 0.6.1

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 (373) hide show
  1. package/README.md +20 -9
  2. package/dist/cjs/browser.js.map +1 -0
  3. package/dist/cjs/core/graph/analyze-module.js.map +1 -0
  4. package/dist/cjs/core/graph/analyze-provider.js.map +1 -0
  5. package/dist/cjs/core/graph/helpers/index.js.map +1 -0
  6. package/dist/{core → cjs/core}/graph/module-graph.js +28 -21
  7. package/dist/cjs/core/graph/module-graph.js.map +1 -0
  8. package/dist/cjs/core/graph/providers/analyze-class-provider.js.map +1 -0
  9. package/dist/cjs/core/graph/providers/analyze-factory-provider.js.map +1 -0
  10. package/dist/cjs/core/graph/providers/analyze-function-provider.js.map +1 -0
  11. package/dist/cjs/core/graph/providers/analyze-value-provider.js.map +1 -0
  12. package/dist/cjs/core/graph/providers/provider-factory.js.map +1 -0
  13. package/dist/cjs/core/modules/container.js +182 -0
  14. package/dist/cjs/core/modules/container.js.map +1 -0
  15. package/dist/cjs/core/modules/module-container-factory.js.map +1 -0
  16. package/dist/{core → cjs/core}/modules/module-container.js +0 -1
  17. package/dist/cjs/core/modules/module-container.js.map +1 -0
  18. package/dist/cjs/core/modules/module-token-factory.js.map +1 -0
  19. package/dist/cjs/core/modules/modules-container.js.map +1 -0
  20. package/dist/{core → cjs/core}/nexus-applications.browser.js +19 -2
  21. package/dist/cjs/core/nexus-applications.browser.js.map +1 -0
  22. package/dist/cjs/core/nexus-applications.js +204 -0
  23. package/dist/cjs/core/nexus-applications.js.map +1 -0
  24. package/dist/{core → cjs/core}/nexus-applications.server.js +19 -2
  25. package/dist/cjs/core/nexus-applications.server.js.map +1 -0
  26. package/dist/{core → cjs/core}/resolver/providers-container.js +1 -1
  27. package/dist/cjs/core/resolver/providers-container.js.map +1 -0
  28. package/dist/{core → cjs/core}/resolver/resolver.js +53 -14
  29. package/dist/cjs/core/resolver/resolver.js.map +1 -0
  30. package/dist/{decorators → cjs/decorators}/global.js +1 -1
  31. package/dist/cjs/decorators/global.js.map +1 -0
  32. package/dist/{decorators → cjs/decorators}/inject.js +39 -0
  33. package/dist/cjs/decorators/inject.js.map +1 -0
  34. package/dist/cjs/decorators/injectable.js +46 -0
  35. package/dist/cjs/decorators/injectable.js.map +1 -0
  36. package/dist/cjs/decorators/nsModule.js +57 -0
  37. package/dist/cjs/decorators/nsModule.js.map +1 -0
  38. package/dist/cjs/decorators/optional.js +60 -0
  39. package/dist/cjs/decorators/optional.js.map +1 -0
  40. package/dist/{index.js → cjs/index.js} +13 -6
  41. package/dist/cjs/index.js.map +1 -0
  42. package/dist/cjs/interfaces/abstract.interface.js.map +1 -0
  43. package/dist/cjs/interfaces/constants.js.map +1 -0
  44. package/dist/cjs/interfaces/dynamic-module.interface.js.map +1 -0
  45. package/dist/{interfaces → cjs/interfaces}/index.js +6 -6
  46. package/dist/cjs/interfaces/index.js.map +1 -0
  47. package/dist/cjs/interfaces/injectable.interface.js.map +1 -0
  48. package/dist/cjs/interfaces/injection-token.interface.js.map +1 -0
  49. package/dist/cjs/interfaces/module-metadata.interface.js.map +1 -0
  50. package/dist/cjs/interfaces/module-types.interface.js.map +1 -0
  51. package/dist/cjs/interfaces/modules/container.interface.js.map +1 -0
  52. package/dist/{interfaces → cjs/interfaces}/modules/index.js +1 -1
  53. package/dist/cjs/interfaces/modules/index.js.map +1 -0
  54. package/dist/cjs/interfaces/modules/module-container-factory.interface.js.map +1 -0
  55. package/dist/cjs/interfaces/modules/module-container.interface.js.map +1 -0
  56. package/dist/cjs/interfaces/modules/module-graph.interface.js.map +1 -0
  57. package/dist/cjs/interfaces/modules/module-token-factory.interface.js.map +1 -0
  58. package/dist/cjs/interfaces/modules/modules-container.interface.js.map +1 -0
  59. package/dist/cjs/interfaces/modules/provider-token-factory.interface.js.map +1 -0
  60. package/dist/cjs/interfaces/nexus-application.interface.js.map +1 -0
  61. package/dist/cjs/interfaces/on-module-init.interface.js.map +1 -0
  62. package/dist/{interfaces → cjs/interfaces}/plugins/index.js +1 -1
  63. package/dist/cjs/interfaces/plugins/index.js.map +1 -0
  64. package/dist/cjs/interfaces/plugins/module-plugin.interface.js.map +1 -0
  65. package/dist/cjs/interfaces/plugins/scanner-plugin.interface.js.map +1 -0
  66. package/dist/cjs/interfaces/scope.interface.js +59 -0
  67. package/dist/cjs/interfaces/scope.interface.js.map +1 -0
  68. package/dist/cjs/interfaces/type.interface.js.map +1 -0
  69. package/dist/cjs/interfaces/utils/hash-utils.interface.js.map +1 -0
  70. package/dist/cjs/interfaces/utils/index.js.map +1 -0
  71. package/dist/{interfaces → cjs/interfaces}/validate-module-keys.js +1 -1
  72. package/dist/cjs/interfaces/validate-module-keys.js.map +1 -0
  73. package/dist/cjs/server.js.map +1 -0
  74. package/dist/cjs/utils/hash-utils.browser.js.map +1 -0
  75. package/dist/cjs/utils/hash-utils.js +25 -0
  76. package/dist/cjs/utils/hash-utils.js.map +1 -0
  77. package/dist/cjs/utils/hash-utils.server.js.map +1 -0
  78. package/dist/{utils → cjs/utils}/helpers.js +2 -1
  79. package/dist/cjs/utils/helpers.js.map +1 -0
  80. package/dist/{utils → cjs/utils}/shared.utils.js +15 -16
  81. package/dist/cjs/utils/shared.utils.js.map +1 -0
  82. package/dist/esm/browser.js +2 -0
  83. package/dist/esm/browser.js.map +1 -0
  84. package/dist/esm/core/graph/analyze-module.js +78 -0
  85. package/dist/esm/core/graph/analyze-module.js.map +1 -0
  86. package/dist/esm/core/graph/analyze-provider.js +53 -0
  87. package/dist/esm/core/graph/analyze-provider.js.map +1 -0
  88. package/dist/esm/core/graph/helpers/index.js +17 -0
  89. package/dist/esm/core/graph/helpers/index.js.map +1 -0
  90. package/dist/esm/core/graph/module-graph.js +402 -0
  91. package/dist/esm/core/graph/module-graph.js.map +1 -0
  92. package/dist/esm/core/graph/providers/analyze-class-provider.js +13 -0
  93. package/dist/esm/core/graph/providers/analyze-class-provider.js.map +1 -0
  94. package/dist/esm/core/graph/providers/analyze-factory-provider.js +13 -0
  95. package/dist/esm/core/graph/providers/analyze-factory-provider.js.map +1 -0
  96. package/dist/esm/core/graph/providers/analyze-function-provider.js +7 -0
  97. package/dist/esm/core/graph/providers/analyze-function-provider.js.map +1 -0
  98. package/dist/esm/core/graph/providers/analyze-value-provider.js +13 -0
  99. package/dist/esm/core/graph/providers/analyze-value-provider.js.map +1 -0
  100. package/dist/esm/core/graph/providers/provider-factory.js +21 -0
  101. package/dist/esm/core/graph/providers/provider-factory.js.map +1 -0
  102. package/dist/esm/core/modules/container.js +178 -0
  103. package/dist/esm/core/modules/container.js.map +1 -0
  104. package/dist/esm/core/modules/module-container-factory.js +21 -0
  105. package/dist/esm/core/modules/module-container-factory.js.map +1 -0
  106. package/dist/esm/core/modules/module-container.js +58 -0
  107. package/dist/esm/core/modules/module-container.js.map +1 -0
  108. package/dist/esm/core/modules/module-token-factory.js +43 -0
  109. package/dist/esm/core/modules/module-token-factory.js.map +1 -0
  110. package/dist/esm/core/modules/modules-container.js +39 -0
  111. package/dist/esm/core/modules/modules-container.js.map +1 -0
  112. package/dist/esm/core/nexus-applications.browser.js +49 -0
  113. package/dist/esm/core/nexus-applications.browser.js.map +1 -0
  114. package/dist/esm/core/nexus-applications.js +200 -0
  115. package/dist/esm/core/nexus-applications.js.map +1 -0
  116. package/dist/esm/core/nexus-applications.server.js +49 -0
  117. package/dist/esm/core/nexus-applications.server.js.map +1 -0
  118. package/dist/esm/core/resolver/providers-container.js +4 -0
  119. package/dist/esm/core/resolver/providers-container.js.map +1 -0
  120. package/dist/esm/core/resolver/resolver.js +161 -0
  121. package/dist/esm/core/resolver/resolver.js.map +1 -0
  122. package/dist/esm/decorators/global.js +9 -0
  123. package/dist/esm/decorators/global.js.map +1 -0
  124. package/dist/esm/decorators/inject.js +63 -0
  125. package/dist/esm/decorators/inject.js.map +1 -0
  126. package/dist/esm/decorators/injectable.js +43 -0
  127. package/dist/esm/decorators/injectable.js.map +1 -0
  128. package/dist/esm/decorators/nsModule.js +54 -0
  129. package/dist/esm/decorators/nsModule.js.map +1 -0
  130. package/dist/esm/decorators/optional.js +57 -0
  131. package/dist/esm/decorators/optional.js.map +1 -0
  132. package/dist/esm/index.js +12 -0
  133. package/dist/esm/index.js.map +1 -0
  134. package/dist/esm/interfaces/abstract.interface.js +2 -0
  135. package/dist/esm/interfaces/abstract.interface.js.map +1 -0
  136. package/dist/esm/interfaces/constants.js +13 -0
  137. package/dist/esm/interfaces/constants.js.map +1 -0
  138. package/dist/esm/interfaces/dynamic-module.interface.js +2 -0
  139. package/dist/esm/interfaces/dynamic-module.interface.js.map +1 -0
  140. package/dist/esm/interfaces/index.js +16 -0
  141. package/dist/esm/interfaces/index.js.map +1 -0
  142. package/dist/esm/interfaces/injectable.interface.js +2 -0
  143. package/dist/esm/interfaces/injectable.interface.js.map +1 -0
  144. package/dist/esm/interfaces/injection-token.interface.js +2 -0
  145. package/dist/esm/interfaces/injection-token.interface.js.map +1 -0
  146. package/dist/esm/interfaces/module-metadata.interface.js +2 -0
  147. package/dist/esm/interfaces/module-metadata.interface.js.map +1 -0
  148. package/dist/esm/interfaces/module-types.interface.js +2 -0
  149. package/dist/esm/interfaces/module-types.interface.js.map +1 -0
  150. package/dist/esm/interfaces/modules/container.interface.js +2 -0
  151. package/dist/esm/interfaces/modules/container.interface.js.map +1 -0
  152. package/dist/esm/interfaces/modules/index.js +8 -0
  153. package/dist/esm/interfaces/modules/index.js.map +1 -0
  154. package/dist/esm/interfaces/modules/module-container-factory.interface.js +2 -0
  155. package/dist/esm/interfaces/modules/module-container-factory.interface.js.map +1 -0
  156. package/dist/esm/interfaces/modules/module-container.interface.js +2 -0
  157. package/dist/esm/interfaces/modules/module-container.interface.js.map +1 -0
  158. package/dist/esm/interfaces/modules/module-graph.interface.js +13 -0
  159. package/dist/esm/interfaces/modules/module-graph.interface.js.map +1 -0
  160. package/dist/esm/interfaces/modules/module-token-factory.interface.js +2 -0
  161. package/dist/esm/interfaces/modules/module-token-factory.interface.js.map +1 -0
  162. package/dist/esm/interfaces/modules/modules-container.interface.js +2 -0
  163. package/dist/esm/interfaces/modules/modules-container.interface.js.map +1 -0
  164. package/dist/esm/interfaces/modules/provider-token-factory.interface.js +2 -0
  165. package/dist/esm/interfaces/modules/provider-token-factory.interface.js.map +1 -0
  166. package/dist/esm/interfaces/nexus-application.interface.js +2 -0
  167. package/dist/esm/interfaces/nexus-application.interface.js.map +1 -0
  168. package/dist/esm/interfaces/on-module-init.interface.js +2 -0
  169. package/dist/esm/interfaces/on-module-init.interface.js.map +1 -0
  170. package/dist/esm/interfaces/plugins/index.js +3 -0
  171. package/dist/esm/interfaces/plugins/index.js.map +1 -0
  172. package/dist/esm/interfaces/plugins/module-plugin.interface.js +2 -0
  173. package/dist/esm/interfaces/plugins/module-plugin.interface.js.map +1 -0
  174. package/dist/esm/interfaces/plugins/scanner-plugin.interface.js +2 -0
  175. package/dist/esm/interfaces/plugins/scanner-plugin.interface.js.map +1 -0
  176. package/dist/esm/interfaces/scope.interface.js +56 -0
  177. package/dist/esm/interfaces/scope.interface.js.map +1 -0
  178. package/dist/esm/interfaces/type.interface.js +2 -0
  179. package/dist/esm/interfaces/type.interface.js.map +1 -0
  180. package/dist/esm/interfaces/utils/hash-utils.interface.js +2 -0
  181. package/dist/esm/interfaces/utils/hash-utils.interface.js.map +1 -0
  182. package/dist/esm/interfaces/utils/index.js +2 -0
  183. package/dist/esm/interfaces/utils/index.js.map +1 -0
  184. package/dist/esm/interfaces/validate-module-keys.js +21 -0
  185. package/dist/esm/interfaces/validate-module-keys.js.map +1 -0
  186. package/dist/esm/package.json +1 -0
  187. package/dist/esm/server.js +2 -0
  188. package/dist/esm/server.js.map +1 -0
  189. package/dist/esm/utils/hash-utils.browser.js +20 -0
  190. package/dist/esm/utils/hash-utils.browser.js.map +1 -0
  191. package/dist/esm/utils/hash-utils.js +21 -0
  192. package/dist/esm/utils/hash-utils.js.map +1 -0
  193. package/dist/esm/utils/hash-utils.server.js +17 -0
  194. package/dist/esm/utils/hash-utils.server.js.map +1 -0
  195. package/dist/esm/utils/helpers.js +63 -0
  196. package/dist/esm/utils/helpers.js.map +1 -0
  197. package/dist/esm/utils/shared.utils.js +49 -0
  198. package/dist/esm/utils/shared.utils.js.map +1 -0
  199. package/dist/tsconfig.cjs.tsbuildinfo +1 -0
  200. package/dist/tsconfig.esm.tsbuildinfo +1 -0
  201. package/dist/{core → types/core}/graph/analyze-module.d.ts +4 -4
  202. package/dist/{core → types/core}/graph/analyze-provider.d.ts +4 -4
  203. package/dist/{core → types/core}/graph/module-graph.d.ts +1 -1
  204. package/dist/{core → types/core}/graph/providers/analyze-class-provider.d.ts +2 -2
  205. package/dist/{core → types/core}/graph/providers/analyze-factory-provider.d.ts +2 -2
  206. package/dist/{core → types/core}/graph/providers/analyze-value-provider.d.ts +1 -1
  207. package/dist/{core → types/core}/graph/providers/provider-factory.d.ts +1 -1
  208. package/dist/types/core/modules/container.d.ts +154 -0
  209. package/dist/{core → types/core}/modules/module-container.d.ts +1 -1
  210. package/dist/{core → types/core}/nexus-applications.browser.d.ts +9 -1
  211. package/dist/types/core/nexus-applications.d.ts +160 -0
  212. package/dist/{core → types/core}/nexus-applications.server.d.ts +9 -1
  213. package/dist/types/decorators/inject.d.ts +42 -0
  214. package/dist/types/decorators/injectable.d.ts +37 -0
  215. package/dist/types/decorators/nsModule.d.ts +44 -0
  216. package/dist/types/decorators/optional.d.ts +42 -0
  217. package/dist/{index.d.ts → types/index.d.ts} +6 -3
  218. package/dist/types/interfaces/module-types.interface.d.ts +158 -0
  219. package/dist/types/interfaces/modules/container.interface.d.ts +8 -0
  220. package/dist/types/interfaces/modules/module-container.interface.d.ts +1 -0
  221. package/dist/{interfaces → types/interfaces}/modules/module-graph.interface.d.ts +3 -23
  222. package/dist/{interfaces → types/interfaces}/nexus-application.interface.d.ts +2 -0
  223. package/dist/types/interfaces/on-module-init.interface.d.ts +51 -0
  224. package/dist/types/interfaces/scope.interface.d.ts +54 -0
  225. package/dist/types/interfaces/utils/hash-utils.interface.d.ts +1 -0
  226. package/dist/{interfaces → types/interfaces}/validate-module-keys.d.ts +1 -1
  227. package/dist/types/utils/hash-utils.d.ts +7 -0
  228. package/package.json +83 -60
  229. package/dist/browser.js.map +0 -1
  230. package/dist/core/graph/analyze-module.js.map +0 -1
  231. package/dist/core/graph/analyze-provider.js.map +0 -1
  232. package/dist/core/graph/helpers/index.js.map +0 -1
  233. package/dist/core/graph/module-graph.js.map +0 -1
  234. package/dist/core/graph/providers/analyze-class-provider.js.map +0 -1
  235. package/dist/core/graph/providers/analyze-factory-provider.js.map +0 -1
  236. package/dist/core/graph/providers/analyze-function-provider.js.map +0 -1
  237. package/dist/core/graph/providers/analyze-value-provider.js.map +0 -1
  238. package/dist/core/graph/providers/provider-factory.js.map +0 -1
  239. package/dist/core/modules/container.d.ts +0 -15
  240. package/dist/core/modules/container.js +0 -40
  241. package/dist/core/modules/container.js.map +0 -1
  242. package/dist/core/modules/module-container-factory.js.map +0 -1
  243. package/dist/core/modules/module-container.js.map +0 -1
  244. package/dist/core/modules/module-token-factory.js.map +0 -1
  245. package/dist/core/modules/modules-container.js.map +0 -1
  246. package/dist/core/nexus-applications.browser.js.map +0 -1
  247. package/dist/core/nexus-applications.server.js.map +0 -1
  248. package/dist/core/resolver/providers-container.js.map +0 -1
  249. package/dist/core/resolver/resolver.js.map +0 -1
  250. package/dist/decorators/global.js.map +0 -1
  251. package/dist/decorators/inject.d.ts +0 -3
  252. package/dist/decorators/inject.js.map +0 -1
  253. package/dist/decorators/injectable.d.ts +0 -3
  254. package/dist/decorators/injectable.js +0 -12
  255. package/dist/decorators/injectable.js.map +0 -1
  256. package/dist/decorators/nsModule.d.ts +0 -3
  257. package/dist/decorators/nsModule.js +0 -16
  258. package/dist/decorators/nsModule.js.map +0 -1
  259. package/dist/decorators/optional.d.ts +0 -2
  260. package/dist/decorators/optional.js +0 -20
  261. package/dist/decorators/optional.js.map +0 -1
  262. package/dist/errors/container-not-compiled.error.d.ts +0 -3
  263. package/dist/errors/container-not-compiled.error.js +0 -12
  264. package/dist/errors/container-not-compiled.error.js.map +0 -1
  265. package/dist/index.js.map +0 -1
  266. package/dist/interfaces/abstract.interface.js.map +0 -1
  267. package/dist/interfaces/constants.js.map +0 -1
  268. package/dist/interfaces/dynamic-module.interface.js.map +0 -1
  269. package/dist/interfaces/index.js.map +0 -1
  270. package/dist/interfaces/injectable.interface.js.map +0 -1
  271. package/dist/interfaces/injection-token.interface.js.map +0 -1
  272. package/dist/interfaces/module-metadata.interface.js.map +0 -1
  273. package/dist/interfaces/module-types.interface.d.ts +0 -20
  274. package/dist/interfaces/module-types.interface.js.map +0 -1
  275. package/dist/interfaces/modules/container.interface.d.ts +0 -16
  276. package/dist/interfaces/modules/container.interface.js.map +0 -1
  277. package/dist/interfaces/modules/index.js.map +0 -1
  278. package/dist/interfaces/modules/module-container-factory.interface.js.map +0 -1
  279. package/dist/interfaces/modules/module-container.interface.d.ts +0 -13
  280. package/dist/interfaces/modules/module-container.interface.js.map +0 -1
  281. package/dist/interfaces/modules/module-graph.interface.js.map +0 -1
  282. package/dist/interfaces/modules/module-token-factory.interface.js.map +0 -1
  283. package/dist/interfaces/modules/modules-container.interface.js.map +0 -1
  284. package/dist/interfaces/modules/provider-token-factory.interface.js.map +0 -1
  285. package/dist/interfaces/nexus-application.interface.js.map +0 -1
  286. package/dist/interfaces/on-module-init.interface.d.ts +0 -3
  287. package/dist/interfaces/on-module-init.interface.js.map +0 -1
  288. package/dist/interfaces/plugins/index.js.map +0 -1
  289. package/dist/interfaces/plugins/module-plugin.interface.js.map +0 -1
  290. package/dist/interfaces/plugins/scanner-plugin.interface.js.map +0 -1
  291. package/dist/interfaces/scope.interface.d.ts +0 -4
  292. package/dist/interfaces/scope.interface.js +0 -9
  293. package/dist/interfaces/scope.interface.js.map +0 -1
  294. package/dist/interfaces/type.interface.js.map +0 -1
  295. package/dist/interfaces/utils/hash-utils.interface.d.ts +0 -5
  296. package/dist/interfaces/utils/hash-utils.interface.js.map +0 -1
  297. package/dist/interfaces/utils/index.js.map +0 -1
  298. package/dist/interfaces/validate-module-keys.js.map +0 -1
  299. package/dist/server.js.map +0 -1
  300. package/dist/utils/hash-utils.browser.js.map +0 -1
  301. package/dist/utils/hash-utils.server.js.map +0 -1
  302. package/dist/utils/helpers.js.map +0 -1
  303. package/dist/utils/random-string-generator.util.d.ts +0 -1
  304. package/dist/utils/random-string-generator.util.js +0 -7
  305. package/dist/utils/random-string-generator.util.js.map +0 -1
  306. package/dist/utils/shared.utils.js.map +0 -1
  307. package/dist/{browser.js → cjs/browser.js} +0 -0
  308. package/dist/{core → cjs/core}/graph/analyze-module.js +0 -0
  309. package/dist/{core → cjs/core}/graph/analyze-provider.js +0 -0
  310. package/dist/{core → cjs/core}/graph/helpers/index.js +0 -0
  311. package/dist/{core → cjs/core}/graph/providers/analyze-class-provider.js +0 -0
  312. package/dist/{core → cjs/core}/graph/providers/analyze-factory-provider.js +0 -0
  313. package/dist/{core → cjs/core}/graph/providers/analyze-function-provider.js +0 -0
  314. package/dist/{core → cjs/core}/graph/providers/analyze-value-provider.js +0 -0
  315. package/dist/{core → cjs/core}/graph/providers/provider-factory.js +0 -0
  316. package/dist/{core → cjs/core}/modules/module-container-factory.js +0 -0
  317. package/dist/{core → cjs/core}/modules/module-token-factory.js +0 -0
  318. package/dist/{core → cjs/core}/modules/modules-container.js +0 -0
  319. package/dist/{interfaces → cjs/interfaces}/abstract.interface.js +0 -0
  320. package/dist/{interfaces → cjs/interfaces}/constants.js +0 -0
  321. package/dist/{interfaces → cjs/interfaces}/dynamic-module.interface.js +0 -0
  322. package/dist/{interfaces → cjs/interfaces}/injectable.interface.js +0 -0
  323. package/dist/{interfaces → cjs/interfaces}/injection-token.interface.js +0 -0
  324. package/dist/{interfaces → cjs/interfaces}/module-metadata.interface.js +0 -0
  325. package/dist/{interfaces → cjs/interfaces}/module-types.interface.js +0 -0
  326. package/dist/{interfaces → cjs/interfaces}/modules/container.interface.js +0 -0
  327. package/dist/{interfaces → cjs/interfaces}/modules/module-container-factory.interface.js +0 -0
  328. package/dist/{interfaces → cjs/interfaces}/modules/module-container.interface.js +0 -0
  329. package/dist/{interfaces → cjs/interfaces}/modules/module-graph.interface.js +0 -0
  330. package/dist/{interfaces → cjs/interfaces}/modules/module-token-factory.interface.js +0 -0
  331. package/dist/{interfaces → cjs/interfaces}/modules/modules-container.interface.js +0 -0
  332. package/dist/{interfaces → cjs/interfaces}/modules/provider-token-factory.interface.js +0 -0
  333. package/dist/{interfaces → cjs/interfaces}/nexus-application.interface.js +0 -0
  334. package/dist/{interfaces → cjs/interfaces}/on-module-init.interface.js +0 -0
  335. package/dist/{interfaces → cjs/interfaces}/plugins/module-plugin.interface.js +0 -0
  336. package/dist/{interfaces → cjs/interfaces}/plugins/scanner-plugin.interface.js +0 -0
  337. package/dist/{interfaces → cjs/interfaces}/type.interface.js +0 -0
  338. package/dist/{interfaces → cjs/interfaces}/utils/hash-utils.interface.js +0 -0
  339. package/dist/{interfaces → cjs/interfaces}/utils/index.js +0 -0
  340. package/dist/{server.js → cjs/server.js} +0 -0
  341. package/dist/{utils → cjs/utils}/hash-utils.browser.js +0 -0
  342. package/dist/{utils → cjs/utils}/hash-utils.server.js +0 -0
  343. package/dist/{browser.d.ts → types/browser.d.ts} +0 -0
  344. package/dist/{core → types/core}/graph/helpers/index.d.ts +0 -0
  345. package/dist/{core → types/core}/graph/providers/analyze-function-provider.d.ts +0 -0
  346. package/dist/{core → types/core}/modules/module-container-factory.d.ts +0 -0
  347. package/dist/{core → types/core}/modules/module-token-factory.d.ts +0 -0
  348. package/dist/{core → types/core}/modules/modules-container.d.ts +0 -0
  349. package/dist/{core → types/core}/resolver/providers-container.d.ts +0 -0
  350. package/dist/{core → types/core}/resolver/resolver.d.ts +0 -0
  351. package/dist/{decorators → types/decorators}/global.d.ts +0 -0
  352. package/dist/{interfaces → types/interfaces}/abstract.interface.d.ts +0 -0
  353. package/dist/{interfaces → types/interfaces}/constants.d.ts +0 -0
  354. package/dist/{interfaces → types/interfaces}/dynamic-module.interface.d.ts +0 -0
  355. package/dist/{interfaces → types/interfaces}/index.d.ts +6 -6
  356. package/dist/{interfaces → types/interfaces}/injectable.interface.d.ts +0 -0
  357. package/dist/{interfaces → types/interfaces}/injection-token.interface.d.ts +0 -0
  358. package/dist/{interfaces → types/interfaces}/module-metadata.interface.d.ts +0 -0
  359. package/dist/{interfaces → types/interfaces}/modules/index.d.ts +1 -1
  360. package/dist/{interfaces → types/interfaces}/modules/module-container-factory.interface.d.ts +0 -0
  361. package/dist/{interfaces → types/interfaces}/modules/module-token-factory.interface.d.ts +0 -0
  362. package/dist/{interfaces → types/interfaces}/modules/modules-container.interface.d.ts +0 -0
  363. package/dist/{interfaces → types/interfaces}/modules/provider-token-factory.interface.d.ts +0 -0
  364. package/dist/{interfaces → types/interfaces}/plugins/index.d.ts +1 -1
  365. /package/dist/{interfaces → types/interfaces}/plugins/module-plugin.interface.d.ts +0 -0
  366. /package/dist/{interfaces → types/interfaces}/plugins/scanner-plugin.interface.d.ts +0 -0
  367. /package/dist/{interfaces → types/interfaces}/type.interface.d.ts +0 -0
  368. /package/dist/{interfaces → types/interfaces}/utils/index.d.ts +0 -0
  369. /package/dist/{server.d.ts → types/server.d.ts} +0 -0
  370. /package/dist/{utils → types/utils}/hash-utils.browser.d.ts +0 -0
  371. /package/dist/{utils → types/utils}/hash-utils.server.d.ts +0 -0
  372. /package/dist/{utils → types/utils}/helpers.d.ts +0 -0
  373. /package/dist/{utils → types/utils}/shared.utils.d.ts +0 -0
@@ -0,0 +1,204 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.NexusApplications = void 0;
4
+ const interfaces_1 = require("../interfaces");
5
+ const hash_utils_1 = require("../utils/hash-utils");
6
+ const container_1 = require("./modules/container");
7
+ /**
8
+ * NexusApplications is the main application class that provides a high-level
9
+ * API for creating and managing IoC containers.
10
+ *
11
+ * This class wraps the Container and provides additional features:
12
+ * - Automatic singleton initialization
13
+ * - Scanner plugin support for custom metadata processing
14
+ * - Parent-child container hierarchies
15
+ * - Async/sync container modes
16
+ *
17
+ * @example
18
+ * ```typescript
19
+ * const app = NexusApplications.create(AppModule);
20
+ * await app.bootstrap();
21
+ * const service = await app.get(MyService);
22
+ * ```
23
+ */
24
+ class NexusApplications {
25
+ /**
26
+ * Creates a new NexusApplications instance.
27
+ *
28
+ * @param rootModule - The root module of the application
29
+ * @param options - Optional configuration
30
+ * @param options.hashFn - Custom hash function for module identification
31
+ */
32
+ constructor(rootModule, options) {
33
+ this.rootModule = rootModule;
34
+ this.hashUtil = new hash_utils_1.HashUtil();
35
+ this.isAsyncContainer = false;
36
+ this.container = new container_1.Container(this.hashUtil);
37
+ this.scannerPlugins = [];
38
+ this._parentContainer = null;
39
+ if (options?.hashFn && typeof options?.hashFn === "function") {
40
+ this.hashUtil = new options.hashFn();
41
+ }
42
+ }
43
+ /**
44
+ * Creates a new NexusApplications instance.
45
+ *
46
+ * This is the main entry point for creating an application.
47
+ *
48
+ * @param rootModule - The root module of the application
49
+ * @param options - Optional configuration
50
+ * @param options.hashFn - Custom hash function for module identification
51
+ * @returns A new NexusApplications instance
52
+ *
53
+ * @example
54
+ * ```typescript
55
+ * const app = NexusApplications.create(AppModule);
56
+ * await app.bootstrap();
57
+ * ```
58
+ */
59
+ static create(rootModule, options) {
60
+ return new NexusApplications(rootModule, options);
61
+ }
62
+ /**
63
+ * Bootstraps the application by initializing the container and all providers.
64
+ *
65
+ * This method:
66
+ * 1. Runs the container with the root module
67
+ * 2. Executes all registered scanner plugins
68
+ * 3. Pre-instantiates all singleton providers (unless async mode is enabled)
69
+ *
70
+ * @returns A promise that resolves to this instance for method chaining
71
+ * @throws {Error} If there are circular dependencies or missing providers
72
+ *
73
+ * @example
74
+ * ```typescript
75
+ * const app = NexusApplications.create(AppModule);
76
+ * await app.bootstrap();
77
+ * // Application is now ready to use
78
+ * ```
79
+ */
80
+ async bootstrap() {
81
+ await this.container.run(this.rootModule);
82
+ for (const scannerPlugin of this.scannerPlugins) {
83
+ await scannerPlugin.scan(this.container.graph);
84
+ }
85
+ if (!this.isAsyncContainer) {
86
+ for (const [token, node] of this.container.graph.nodes) {
87
+ if (node.type === interfaces_1.NodeTypeEnum.PROVIDER &&
88
+ node.scope === interfaces_1.Scope.Singleton) {
89
+ await this.container.get(token);
90
+ }
91
+ }
92
+ }
93
+ return this;
94
+ }
95
+ /**
96
+ * Adds one or more scanner plugins to the application.
97
+ *
98
+ * Scanner plugins are executed after the dependency graph is built
99
+ * and can be used to process custom metadata, validate the graph,
100
+ * or perform other initialization tasks.
101
+ *
102
+ * @param scanner - A single scanner plugin or an array of scanner plugins
103
+ * @returns This instance for method chaining
104
+ *
105
+ * @example
106
+ * ```typescript
107
+ * const app = NexusApplications.create(AppModule)
108
+ * .addScannerPlugin(new CustomScanner())
109
+ * .addScannerPlugin([new Scanner1(), new Scanner2()]);
110
+ * await app.bootstrap();
111
+ * ```
112
+ */
113
+ addScannerPlugin(scanner) {
114
+ const plugins = Array.isArray(scanner) ? scanner : [scanner];
115
+ this.scannerPlugins.push(...plugins);
116
+ return this;
117
+ }
118
+ /**
119
+ * Resolves and returns an instance of a provider by its injection token.
120
+ *
121
+ * If the provider is not found in this container, it will attempt to
122
+ * resolve it from the parent container (if set).
123
+ *
124
+ * @template T - The type of the provider to resolve
125
+ * @param token - The injection token (class, string, or symbol)
126
+ * @returns A promise that resolves to the provider instance, or undefined if not found
127
+ *
128
+ * @example
129
+ * ```typescript
130
+ * const app = await NexusApplications.create(AppModule).bootstrap();
131
+ * const userService = await app.get(UserService);
132
+ * const config = await app.get('CONFIG');
133
+ * ```
134
+ */
135
+ async get(token) {
136
+ const dependency = await this.container.get(token);
137
+ // Check for undefined specifically, not falsy values (null, 0, false, etc. are valid)
138
+ if (dependency === undefined) {
139
+ return this._parentContainer?.get(token);
140
+ }
141
+ return dependency;
142
+ }
143
+ /**
144
+ * Gets all errors that occurred during graph compilation.
145
+ *
146
+ * @returns An array of graph errors
147
+ *
148
+ * @example
149
+ * ```typescript
150
+ * const app = await NexusApplications.create(AppModule).bootstrap();
151
+ * if (app.errors.length > 0) {
152
+ * console.error('Application errors:', app.errors);
153
+ * }
154
+ * ```
155
+ */
156
+ get errors() {
157
+ return this.container.errors;
158
+ }
159
+ /**
160
+ * Enables async mode for the container.
161
+ *
162
+ * In async mode, singleton providers are NOT pre-instantiated during
163
+ * bootstrap. They will be created lazily on first access via get().
164
+ * This can improve startup time for large applications.
165
+ *
166
+ * @returns This instance for method chaining
167
+ *
168
+ * @example
169
+ * ```typescript
170
+ * const app = NexusApplications.create(AppModule)
171
+ * .async();
172
+ * await app.bootstrap(); // Singletons are NOT created yet
173
+ * const service = await app.get(MyService); // Created on first access
174
+ * ```
175
+ */
176
+ async() {
177
+ this.isAsyncContainer = true;
178
+ return this;
179
+ }
180
+ /**
181
+ * Sets a parent container for this application.
182
+ *
183
+ * When a provider is not found in this container, it will be looked up
184
+ * in the parent container. This enables hierarchical container structures.
185
+ *
186
+ * @param parentContainer - The parent container
187
+ * @returns This instance for method chaining
188
+ *
189
+ * @example
190
+ * ```typescript
191
+ * const parentApp = await NexusApplications.create(ParentModule).bootstrap();
192
+ * const childApp = await NexusApplications.create(ChildModule)
193
+ * .setParent(parentApp)
194
+ * .bootstrap();
195
+ * // childApp can access providers from parentApp
196
+ * ```
197
+ */
198
+ setParent(parentContainer) {
199
+ this._parentContainer = parentContainer;
200
+ return this;
201
+ }
202
+ }
203
+ exports.NexusApplications = NexusApplications;
204
+ //# sourceMappingURL=nexus-applications.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"nexus-applications.js","sourceRoot":"","sources":["../../../src/core/nexus-applications.ts"],"names":[],"mappings":"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"}
@@ -3,12 +3,18 @@ Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.NexusApplicationsServer = void 0;
4
4
  const hash_utils_server_1 = require("../utils/hash-utils.server");
5
5
  const container_1 = require("./modules/container");
6
+ /**
7
+ * @deprecated
8
+ * It will be removed in version 1.0.0.
9
+ * these classes work the same way. For the new behavior, use @NexusApplications
10
+ */
6
11
  class NexusApplicationsServer {
7
12
  constructor(rootModule) {
8
13
  this.rootModule = rootModule;
9
14
  this.hashUtil = new hash_utils_server_1.HashUtilsServer();
10
15
  this.container = new container_1.Container(this.hashUtil);
11
16
  this.scannerPlugins = [];
17
+ this._parentContainer = null;
12
18
  }
13
19
  static create(rootModule) {
14
20
  return new NexusApplicationsServer(rootModule);
@@ -25,12 +31,23 @@ class NexusApplicationsServer {
25
31
  this.scannerPlugins.push(...plugins);
26
32
  return this;
27
33
  }
28
- get(token) {
29
- return this.container.get(token);
34
+ async get(token) {
35
+ const dependency = await this.container.get(token);
36
+ if (!dependency) {
37
+ return this._parentContainer?.get(token);
38
+ }
39
+ return dependency;
30
40
  }
31
41
  get errors() {
32
42
  return this.container.errors;
33
43
  }
44
+ async() {
45
+ return this;
46
+ }
47
+ setParent(parentContainer) {
48
+ this._parentContainer = parentContainer;
49
+ return this;
50
+ }
34
51
  }
35
52
  exports.NexusApplicationsServer = NexusApplicationsServer;
36
53
  //# sourceMappingURL=nexus-applications.server.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"nexus-applications.server.js","sourceRoot":"","sources":["../../../src/core/nexus-applications.server.ts"],"names":[],"mappings":";;;AAMA,kEAA6D;AAC7D,mDAAgD;AAEhD;;;;GAIG;AACH,MAAa,uBAAuB;IAMnC,YAAqC,UAAkB;QAAlB,eAAU,GAAV,UAAU,CAAQ;QALtC,aAAQ,GAAG,IAAI,mCAAe,EAAE,CAAC;QACjC,cAAS,GAAG,IAAI,qBAAS,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QACzC,mBAAc,GAA6B,EAAE,CAAC;QACvD,qBAAgB,GAAqC,IAAI,CAAC;IAER,CAAC;IAE3D,MAAM,CAAC,MAAM,CAAC,UAAkB;QAC/B,OAAO,IAAI,uBAAuB,CAAC,UAAU,CAAC,CAAC;IAChD,CAAC;IAEM,KAAK,CAAC,SAAS;QACrB,MAAM,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;QAE1C,KAAK,MAAM,aAAa,IAAI,IAAI,CAAC,cAAc,EAAE,CAAC;YACjD,MAAM,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;QAChD,CAAC;QAED,OAAO,IAAI,CAAC;IACb,CAAC;IAEM,gBAAgB,CACtB,OAA0D;QAE1D,MAAM,OAAO,GAAG,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC;QAC7D,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,GAAG,OAAO,CAAC,CAAC;QACrC,OAAO,IAAI,CAAC;IACb,CAAC;IAEM,KAAK,CAAC,GAAG,CAAI,KAAqB;QACxC,MAAM,UAAU,GAAG,MAAM,IAAI,CAAC,SAAS,CAAC,GAAG,CAAI,KAAK,CAAC,CAAC;QAEtD,IAAI,CAAC,UAAU,EAAE,CAAC;YACjB,OAAO,IAAI,CAAC,gBAAgB,EAAE,GAAG,CAAI,KAAK,CAAC,CAAC;QAC7C,CAAC;QAED,OAAO,UAAU,CAAC;IACnB,CAAC;IAED,IAAW,MAAM;QAChB,OAAO,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC;IAC9B,CAAC;IAED,KAAK;QACJ,OAAO,IAAI,CAAC;IACb,CAAC;IAEM,SAAS,CAAC,eAA0C;QAC1D,IAAI,CAAC,gBAAgB,GAAG,eAAe,CAAC;QACxC,OAAO,IAAI,CAAC;IACb,CAAC;CACD;AApDD,0DAoDC"}
@@ -1,7 +1,7 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.ProvidersContainer = void 0;
4
- // biome-ignore lint/suspicious/noExplicitAny: <explanation>
4
+ // biome-ignore lint/suspicious/noExplicitAny: providers container
5
5
  class ProvidersContainer extends Map {
6
6
  }
7
7
  exports.ProvidersContainer = ProvidersContainer;
@@ -0,0 +1 @@
1
+ {"version":3,"file":"providers-container.js","sourceRoot":"","sources":["../../../../src/core/resolver/providers-container.ts"],"names":[],"mappings":";;;AAEA,kEAAkE;AAClE,MAAa,kBAAmB,SAAQ,GAAwB;CAAG;AAAnE,gDAAmE"}
@@ -14,18 +14,32 @@ class Resolver {
14
14
  this.providersContainer = new providers_container_1.ProvidersContainer();
15
15
  }
16
16
  async resolveProvider(token, resolveCache = new providers_container_1.ProvidersContainer(), isCircularDependency = false) {
17
- if (this.providersContainer.has(token)) {
18
- return this.providersContainer.get(token);
19
- }
20
17
  const node = this.graph.getNode(token);
21
18
  if (!node) {
22
- throw new Error(`Provider not found: ${token.toString()}`);
19
+ return undefined;
20
+ }
21
+ // Get the scope of the provider
22
+ const scope = node.scope;
23
+ // For Transient scope, always create a new instance (no caching at all)
24
+ if (scope === interfaces_1.Scope.Transient) {
25
+ const [instance] = await this.createInstance(node, resolveCache, isCircularDependency);
26
+ return instance;
23
27
  }
28
+ // For Singleton scope, check global cache first
29
+ if (scope === interfaces_1.Scope.Singleton && this.providersContainer.has(token)) {
30
+ return this.providersContainer.get(token);
31
+ }
32
+ // For Request and Singleton scopes, check resolve cache (within current resolution tree)
24
33
  if (resolveCache.has(token)) {
25
34
  return resolveCache.get(token);
26
35
  }
27
36
  const [instance, saveInCache] = await this.createInstance(node, resolveCache, isCircularDependency);
28
- resolveCache.set(token, instance);
37
+ // Add to resolve cache for current resolution context (for Request and Singleton)
38
+ // This ensures same instance is used within a single dependency resolution tree
39
+ if (scope === interfaces_1.Scope.Singleton || scope === interfaces_1.Scope.Request) {
40
+ resolveCache.set(token, instance);
41
+ }
42
+ // Only save to global cache for Singleton scope
29
43
  if (saveInCache) {
30
44
  this.providersContainer.set(token, instance);
31
45
  }
@@ -61,23 +75,21 @@ class Resolver {
61
75
  prev[1].push(depToken);
62
76
  return prev;
63
77
  }, [[], []]);
64
- // biome-ignore lint/suspicious/noExplicitAny: <explanation>
78
+ // biome-ignore lint/suspicious/noExplicitAny: dependency resolution
65
79
  let resolvedDependencies = [];
66
80
  for (const depToken of dependencies) {
67
81
  if (isCircularDependencyFn(depToken)) {
68
- // @ts-ignore
69
82
  if (isCircularDependency) {
70
83
  resolvedDependencies.push(depToken);
71
84
  continue;
72
85
  }
73
86
  const instance = await this.resolveProvider(
74
- // @ts-ignore
87
+ // @ts-expect-error
75
88
  depToken.dependencyName, resolveCache, true);
76
89
  resolvedDependencies.push(instance);
77
90
  continue;
78
91
  }
79
92
  const instance = await this.resolveProvider(depToken, resolveCache);
80
- this.providersContainer.set(depToken, instance);
81
93
  resolvedDependencies.push(instance);
82
94
  }
83
95
  resolvedDependencies = resolvedDependencies.map((dependency, index) => {
@@ -86,28 +98,55 @@ class Resolver {
86
98
  }
87
99
  return dependency;
88
100
  });
89
- // biome-ignore lint/suspicious/noExplicitAny: <explanation>
101
+ // biome-ignore lint/suspicious/noExplicitAny: instance creation
90
102
  let instance;
91
103
  let saveInCache = true;
92
104
  const deps = resolvedDependencies.map((depToken) => isCircularDependencyFn(depToken) ? depToken() : depToken);
93
105
  if ((0, helpers_1.isClassProvider)(provider)) {
94
106
  instance = new provider.useClass(...deps);
95
107
  await this.injectPropertyDependencies(instance, node, resolveCache);
96
- if (node.scope === interfaces_1.Scope.Request) {
97
- saveInCache = false;
98
- }
108
+ // Determine caching strategy based on scope
109
+ const scope = node.scope;
110
+ saveInCache = scope === interfaces_1.Scope.Singleton;
99
111
  }
100
112
  else if ((0, helpers_1.isValueProvider)(provider)) {
101
113
  instance = provider.useValue;
114
+ // Value providers are always singleton
115
+ saveInCache = true;
102
116
  }
103
117
  else if ((0, helpers_1.isFactoryProvider)(provider)) {
104
118
  instance = await provider.useFactory(...deps);
119
+ // Check scope for factory providers
120
+ const scope = node.scope;
121
+ saveInCache = scope === interfaces_1.Scope.Singleton;
105
122
  }
106
123
  else {
107
124
  instance = new provider(...deps);
108
125
  await this.injectPropertyDependencies(instance, node, resolveCache);
126
+ // Check scope for function providers
127
+ const scope = node.scope;
128
+ saveInCache = scope === interfaces_1.Scope.Singleton;
129
+ }
130
+ // Call lifecycle hook with error handling
131
+ if (instance?.onModuleInit) {
132
+ try {
133
+ await instance.onModuleInit();
134
+ }
135
+ catch (error) {
136
+ // Re-throw with additional context about which provider failed
137
+ const providerName = typeof provider === "function"
138
+ ? provider.name
139
+ : provider.provide?.toString() ||
140
+ "Unknown";
141
+ const errorMessage = `Failed to initialize provider "${providerName}": ${error instanceof Error ? error.message : String(error)}`;
142
+ const wrappedError = new Error(errorMessage);
143
+ // Preserve original error stack if available
144
+ if (error instanceof Error && error.stack) {
145
+ wrappedError.stack = `${wrappedError.stack}\nCaused by: ${error.stack}`;
146
+ }
147
+ throw wrappedError;
148
+ }
109
149
  }
110
- instance?.onModuleInit?.();
111
150
  return [instance, saveInCache];
112
151
  }
113
152
  async injectPropertyDependencies(instance, node, resolveCache) {
@@ -0,0 +1 @@
1
+ {"version":3,"file":"resolver.js","sourceRoot":"","sources":["../../../../src/core/resolver/resolver.ts"],"names":[],"mappings":"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"}
@@ -4,7 +4,7 @@ exports.Global = Global;
4
4
  require("reflect-metadata");
5
5
  const interfaces_1 = require("../interfaces");
6
6
  function Global() {
7
- // biome-ignore lint/complexity/noBannedTypes: <explanation>
7
+ // biome-ignore lint/complexity/noBannedTypes: Function type needed for decorator
8
8
  return (target) => {
9
9
  Reflect.defineMetadata(interfaces_1.MODULE_GLOBAL_WATERMARK, true, target);
10
10
  };
@@ -0,0 +1 @@
1
+ {"version":3,"file":"global.js","sourceRoot":"","sources":["../../../src/decorators/global.ts"],"names":[],"mappings":";;AAGA,wBAKC;AARD,4BAA0B;AAC1B,8CAAwD;AAExD,SAAgB,MAAM;IACrB,iFAAiF;IACjF,OAAO,CAAC,MAAgB,EAAE,EAAE;QAC3B,OAAO,CAAC,cAAc,CAAC,oCAAuB,EAAE,IAAI,EAAE,MAAM,CAAC,CAAC;IAC/D,CAAC,CAAC;AACH,CAAC"}
@@ -3,6 +3,45 @@ Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.Inject = Inject;
4
4
  require("reflect-metadata");
5
5
  const interfaces_1 = require("../interfaces");
6
+ /**
7
+ * Explicitly specifies the injection token for a constructor parameter or property.
8
+ *
9
+ * This decorator is used when:
10
+ * - You need to inject a provider by a string or symbol token
11
+ * - TypeScript's reflection cannot determine the type (e.g., interfaces, circular dependencies)
12
+ * - You want to inject a different implementation than the declared type
13
+ *
14
+ * @param token - The injection token (class, string, or symbol)
15
+ * @returns A decorator that can be applied to constructor parameters or properties
16
+ * @throws {Error} If the token is undefined (often due to circular dependencies)
17
+ *
18
+ * @example
19
+ * ```typescript
20
+ * // Constructor parameter injection
21
+ * @Injectable()
22
+ * class UserService {
23
+ * constructor(
24
+ * @Inject('DATABASE_CONFIG') private config: DatabaseConfig,
25
+ * @Inject(Logger) private logger: Logger
26
+ * ) {}
27
+ * }
28
+ *
29
+ * // Property injection
30
+ * @Injectable()
31
+ * class ProductService {
32
+ * @Inject('CACHE_MANAGER')
33
+ * private cache: CacheManager;
34
+ * }
35
+ *
36
+ * // Resolving circular dependencies
37
+ * @Injectable()
38
+ * class ServiceA {
39
+ * constructor(
40
+ * @Inject(forwardRef(() => ServiceB)) private serviceB: ServiceB
41
+ * ) {}
42
+ * }
43
+ * ```
44
+ */
6
45
  function Inject(token) {
7
46
  return (target, propertyKey, parameterIndex) => {
8
47
  Reflect.defineMetadata(interfaces_1.INJECT_WATERMARK, true, target);
@@ -0,0 +1 @@
1
+ {"version":3,"file":"inject.js","sourceRoot":"","sources":["../../../src/decorators/inject.ts"],"names":[],"mappings":";;AA+CA,wBAuCC;AAtFD,4BAA0B;AAC1B,8CAKuB;AAEvB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAsCG;AACH,SAAgB,MAAM,CACrB,KAA6B;IAE7B,OAAO,CACN,MAAc,EACd,WAA6B,EAC7B,cAAuB,EACtB,EAAE;QACH,OAAO,CAAC,cAAc,CAAC,6BAAgB,EAAE,IAAI,EAAE,MAAM,CAAC,CAAC;QAEvD,MAAM,IAAI,GACT,KAAK;YACL,OAAO,CAAC,WAAW,CAAC,aAAa,EAAE,MAAM,EAAE,WAAqB,CAAC,CAAC;QAEnE,IAAI,CAAC,IAAI,EAAE,CAAC;YACX,MAAM,IAAI,KAAK,CAAC;mCACgB,cAAc;yEACwB,CAAC,CAAC;QACzE,CAAC;QAED,IAAI,cAAc,KAAK,SAAS,EAAE,CAAC;YAClC,IAAI,UAAU,GACb,OAAO,CAAC,WAAW,CAAC,mCAAsB,EAAE,MAAM,CAAC,IAAI,EAAE,CAAC;YAE3D,UAAU,GAAG,CAAC,GAAG,UAAU,EAAE,EAAE,GAAG,EAAE,WAAW,EAAE,IAAI,EAAE,CAAC,CAAC;YACzD,OAAO,CAAC,cAAc,CACrB,mCAAsB,EACtB,UAAU,EACV,MAAM,CAAC,WAAW,CAClB,CAAC;YACF,OAAO;QACR,CAAC;QAED,IAAI,YAAY,GACf,OAAO,CAAC,WAAW,CAAC,wCAA2B,EAAE,MAAM,CAAC,IAAI,EAAE,CAAC;QAEhE,YAAY,GAAG,CAAC,GAAG,YAAY,EAAE,EAAE,KAAK,EAAE,cAAc,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;QACzE,OAAO,CAAC,cAAc,CAAC,wCAA2B,EAAE,YAAY,EAAE,MAAM,CAAC,CAAC;IAC3E,CAAC,CAAC;AACH,CAAC"}
@@ -0,0 +1,46 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.Injectable = Injectable;
4
+ require("reflect-metadata");
5
+ const interfaces_1 = require("../interfaces");
6
+ /**
7
+ * Marks a class as injectable, making it available for dependency injection.
8
+ *
9
+ * This decorator must be applied to any class that you want to use as a provider
10
+ * in the IoC container. It configures the scope and other options for the provider.
11
+ *
12
+ * @param options - Configuration options for the injectable
13
+ * @param options.scope - The lifecycle scope of the provider:
14
+ * - `Scope.Singleton` (default): One instance shared across the entire application
15
+ * - `Scope.Request`: New instance for each container.get() call
16
+ * - `Scope.Transient`: New instance every time, even within the same dependency tree
17
+ * @returns A class decorator
18
+ *
19
+ * @example
20
+ * ```typescript
21
+ * // Singleton scope (default)
22
+ * @Injectable()
23
+ * class UserService {
24
+ * constructor(private db: Database) {}
25
+ * }
26
+ *
27
+ * // Request scope
28
+ * @Injectable({ scope: Scope.Request })
29
+ * class RequestContext {
30
+ * requestId = Math.random();
31
+ * }
32
+ *
33
+ * // Transient scope
34
+ * @Injectable({ scope: Scope.Transient })
35
+ * class Logger {
36
+ * timestamp = Date.now();
37
+ * }
38
+ * ```
39
+ */
40
+ function Injectable(options = { scope: interfaces_1.Scope.Singleton }) {
41
+ return (target) => {
42
+ Reflect.defineMetadata(interfaces_1.INJECTABLE_OPTIONS, options, target);
43
+ Reflect.defineMetadata(interfaces_1.INJECTABLE_WATERMARK, true, target);
44
+ };
45
+ }
46
+ //# sourceMappingURL=injectable.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"injectable.js","sourceRoot":"","sources":["../../../src/decorators/injectable.ts"],"names":[],"mappings":";;AAsCA,gCAOC;AA7CD,4BAA0B;AAE1B,8CAAgF;AAEhF;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAiCG;AACH,SAAgB,UAAU,CACzB,UAA6B,EAAE,KAAK,EAAE,kBAAK,CAAC,SAAS,EAAE;IAEvD,OAAO,CAAC,MAAM,EAAE,EAAE;QACjB,OAAO,CAAC,cAAc,CAAC,+BAAkB,EAAE,OAAO,EAAE,MAAM,CAAC,CAAC;QAC5D,OAAO,CAAC,cAAc,CAAC,iCAAoB,EAAE,IAAI,EAAE,MAAM,CAAC,CAAC;IAC5D,CAAC,CAAC;AACH,CAAC"}
@@ -0,0 +1,57 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.NsModule = NsModule;
4
+ require("reflect-metadata");
5
+ const interfaces_1 = require("../interfaces");
6
+ /**
7
+ * Defines a module in the application.
8
+ *
9
+ * A module is a class annotated with @NsModule() decorator that organizes
10
+ * the application structure. Modules can:
11
+ * - Declare providers that will be instantiated by the container
12
+ * - Import other modules to use their exported providers
13
+ * - Export providers to make them available to other modules
14
+ *
15
+ * @param metadata - Module configuration
16
+ * @param metadata.imports - Modules whose exported providers should be available in this module
17
+ * @param metadata.providers - Providers that belong to this module
18
+ * @param metadata.exports - Providers or modules to export (make available to importing modules)
19
+ * @returns A class decorator
20
+ * @throws {Error} If invalid metadata keys are provided
21
+ *
22
+ * @example
23
+ * ```typescript
24
+ * // Basic module
25
+ * @NsModule({
26
+ * providers: [UserService, UserRepository],
27
+ * exports: [UserService]
28
+ * })
29
+ * class UserModule {}
30
+ *
31
+ * // Module with imports
32
+ * @NsModule({
33
+ * imports: [DatabaseModule, LoggerModule],
34
+ * providers: [ProductService],
35
+ * exports: [ProductService]
36
+ * })
37
+ * class ProductModule {}
38
+ *
39
+ * // Root module
40
+ * @NsModule({
41
+ * imports: [UserModule, ProductModule],
42
+ * providers: [AppService]
43
+ * })
44
+ * class AppModule {}
45
+ * ```
46
+ */
47
+ function NsModule(metadata) {
48
+ const propsKeys = Object.keys(metadata);
49
+ (0, interfaces_1.validateModuleKeys)(propsKeys);
50
+ return (target) => {
51
+ Reflect.defineMetadata(interfaces_1.MODULE_WATERMARK, true, target);
52
+ Reflect.defineMetadata(interfaces_1.MODULE_METADATA.IMPORTS, metadata.imports || [], target);
53
+ Reflect.defineMetadata(interfaces_1.MODULE_METADATA.EXPORTS, metadata.exports || [], target);
54
+ Reflect.defineMetadata(interfaces_1.MODULE_METADATA.PROVIDERS, metadata.providers || [], target);
55
+ };
56
+ }
57
+ //# sourceMappingURL=nsModule.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"nsModule.js","sourceRoot":"","sources":["../../../src/decorators/nsModule.ts"],"names":[],"mappings":";;AAiDA,4BAsBC;AAvED,4BAA0B;AAE1B,8CAIuB;AAEvB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAwCG;AACH,SAAgB,QAAQ,CAAC,QAAwB;IAChD,MAAM,SAAS,GAAG,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;IACxC,IAAA,+BAAkB,EAAC,SAAS,CAAC,CAAC;IAE9B,OAAO,CAAC,MAAM,EAAE,EAAE;QACjB,OAAO,CAAC,cAAc,CAAC,6BAAgB,EAAE,IAAI,EAAE,MAAM,CAAC,CAAC;QACvD,OAAO,CAAC,cAAc,CACrB,4BAAe,CAAC,OAAO,EACvB,QAAQ,CAAC,OAAO,IAAI,EAAE,EACtB,MAAM,CACN,CAAC;QACF,OAAO,CAAC,cAAc,CACrB,4BAAe,CAAC,OAAO,EACvB,QAAQ,CAAC,OAAO,IAAI,EAAE,EACtB,MAAM,CACN,CAAC;QACF,OAAO,CAAC,cAAc,CACrB,4BAAe,CAAC,SAAS,EACzB,QAAQ,CAAC,SAAS,IAAI,EAAE,EACxB,MAAM,CACN,CAAC;IACH,CAAC,CAAC;AACH,CAAC"}
@@ -0,0 +1,60 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.Optional = Optional;
4
+ require("reflect-metadata");
5
+ const interfaces_1 = require("../interfaces");
6
+ /**
7
+ * Marks a dependency as optional.
8
+ *
9
+ * When a dependency is marked as optional, the container will not throw an error
10
+ * if the provider is not found. Instead, it will inject `undefined`.
11
+ *
12
+ * This is useful for:
13
+ * - Optional features that may not be available in all configurations
14
+ * - Graceful degradation when certain services are not registered
15
+ * - Testing scenarios where you want to omit certain dependencies
16
+ *
17
+ * @returns A decorator that can be applied to constructor parameters or properties
18
+ *
19
+ * @example
20
+ * ```typescript
21
+ * // Optional constructor parameter
22
+ * @Injectable()
23
+ * class UserService {
24
+ * constructor(
25
+ * private db: Database,
26
+ * @Optional() private cache?: CacheService
27
+ * ) {
28
+ * // cache will be undefined if CacheService is not registered
29
+ * }
30
+ * }
31
+ *
32
+ * // Optional property injection
33
+ * @Injectable()
34
+ * class ProductService {
35
+ * @Optional()
36
+ * @Inject('ANALYTICS')
37
+ * private analytics?: AnalyticsService;
38
+ *
39
+ * trackEvent(event: string) {
40
+ * // Only track if analytics service is available
41
+ * this.analytics?.track(event);
42
+ * }
43
+ * }
44
+ * ```
45
+ */
46
+ function Optional() {
47
+ return (target, propertyKey, parameterIndex) => {
48
+ Reflect.defineMetadata(interfaces_1.OPTIONAL_WATERMARK, true, target);
49
+ if (parameterIndex === undefined) {
50
+ let properties = Reflect.getMetadata(interfaces_1.PROPERTY_OPTIONAL_DEPS_METADATA, target) || [];
51
+ properties = [...properties, { key: propertyKey }];
52
+ Reflect.defineMetadata(interfaces_1.PROPERTY_OPTIONAL_DEPS_METADATA, properties, target.constructor);
53
+ return;
54
+ }
55
+ let properties = Reflect.getMetadata(interfaces_1.SELF_DECLARED_OPTIONAL_DEPS_METADATA, target) || [];
56
+ properties = [...properties, { index: parameterIndex }];
57
+ Reflect.defineMetadata(interfaces_1.SELF_DECLARED_OPTIONAL_DEPS_METADATA, properties, target);
58
+ };
59
+ }
60
+ //# sourceMappingURL=optional.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"optional.js","sourceRoot":"","sources":["../../../src/decorators/optional.ts"],"names":[],"mappings":";;AA+CA,4BA+BC;AA9ED,4BAA0B;AAC1B,8CAIuB;AAEvB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAuCG;AACH,SAAgB,QAAQ;IACvB,OAAO,CACN,MAAc,EACd,WAA6B,EAC7B,cAAuB,EACtB,EAAE;QACH,OAAO,CAAC,cAAc,CAAC,+BAAkB,EAAE,IAAI,EAAE,MAAM,CAAC,CAAC;QAEzD,IAAI,cAAc,KAAK,SAAS,EAAE,CAAC;YAClC,IAAI,UAAU,GACb,OAAO,CAAC,WAAW,CAAC,4CAA+B,EAAE,MAAM,CAAC,IAAI,EAAE,CAAC;YAEpE,UAAU,GAAG,CAAC,GAAG,UAAU,EAAE,EAAE,GAAG,EAAE,WAAW,EAAE,CAAC,CAAC;YACnD,OAAO,CAAC,cAAc,CACrB,4CAA+B,EAC/B,UAAU,EACV,MAAM,CAAC,WAAW,CAClB,CAAC;YACF,OAAO;QACR,CAAC;QAED,IAAI,UAAU,GACb,OAAO,CAAC,WAAW,CAAC,iDAAoC,EAAE,MAAM,CAAC,IAAI,EAAE,CAAC;QAEzE,UAAU,GAAG,CAAC,GAAG,UAAU,EAAE,EAAE,KAAK,EAAE,cAAc,EAAE,CAAC,CAAC;QACxD,OAAO,CAAC,cAAc,CACrB,iDAAoC,EACpC,UAAU,EACV,MAAM,CACN,CAAC;IACH,CAAC,CAAC;AACH,CAAC"}