@quadnix/octo 0.0.21 → 0.0.23

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 (352) hide show
  1. package/dist/app.type.d.ts +124 -27
  2. package/dist/app.type.js +77 -7
  3. package/dist/app.type.js.map +1 -1
  4. package/dist/decorators/action.decorator.d.ts +7 -8
  5. package/dist/decorators/action.decorator.js +45 -44
  6. package/dist/decorators/action.decorator.js.map +1 -1
  7. package/dist/decorators/anchor.decorator.d.ts +2 -2
  8. package/dist/decorators/anchor.decorator.js +16 -11
  9. package/dist/decorators/anchor.decorator.js.map +1 -1
  10. package/dist/decorators/enable-hook.decorator.js +2 -2
  11. package/dist/decorators/enable-hook.decorator.js.map +1 -1
  12. package/dist/decorators/event-source.decorator.d.ts +1 -1
  13. package/dist/decorators/event-source.decorator.js +7 -2
  14. package/dist/decorators/event-source.decorator.js.map +1 -1
  15. package/dist/decorators/factory.decorator.d.ts +32 -1
  16. package/dist/decorators/factory.decorator.js +35 -3
  17. package/dist/decorators/factory.decorator.js.map +1 -1
  18. package/dist/decorators/model.decorator.d.ts +3 -2
  19. package/dist/decorators/model.decorator.js +24 -11
  20. package/dist/decorators/model.decorator.js.map +1 -1
  21. package/dist/decorators/module.decorator.d.ts +4 -71
  22. package/dist/decorators/module.decorator.js +18 -58
  23. package/dist/decorators/module.decorator.js.map +1 -1
  24. package/dist/decorators/on-event.decorator.d.ts +1 -1
  25. package/dist/decorators/on-event.decorator.js +7 -2
  26. package/dist/decorators/on-event.decorator.js.map +1 -1
  27. package/dist/decorators/overlay.decorator.d.ts +3 -2
  28. package/dist/decorators/overlay.decorator.js +23 -11
  29. package/dist/decorators/overlay.decorator.js.map +1 -1
  30. package/dist/decorators/resource.decorator.d.ts +3 -2
  31. package/dist/decorators/resource.decorator.js +23 -11
  32. package/dist/decorators/resource.decorator.js.map +1 -1
  33. package/dist/decorators/validate.decorator.d.ts +4 -4
  34. package/dist/decorators/validate.decorator.js +16 -2
  35. package/dist/decorators/validate.decorator.js.map +1 -1
  36. package/dist/errors/container.error.d.ts +11 -0
  37. package/dist/errors/container.error.js +20 -0
  38. package/dist/errors/container.error.js.map +1 -0
  39. package/dist/errors/index.d.ts +6 -0
  40. package/dist/errors/index.js +7 -0
  41. package/dist/errors/index.js.map +1 -0
  42. package/dist/errors/input.error.d.ts +11 -0
  43. package/dist/errors/input.error.js +21 -0
  44. package/dist/errors/input.error.js.map +1 -0
  45. package/dist/errors/module.error.d.ts +4 -0
  46. package/dist/errors/module.error.js +8 -0
  47. package/dist/errors/module.error.js.map +1 -0
  48. package/dist/errors/node.error.d.ts +36 -0
  49. package/dist/errors/node.error.js +60 -0
  50. package/dist/errors/node.error.js.map +1 -0
  51. package/dist/errors/schema.error.d.ts +4 -0
  52. package/dist/errors/schema.error.js +8 -0
  53. package/dist/errors/schema.error.js.map +1 -0
  54. package/dist/errors/transaction.error.d.ts +35 -0
  55. package/dist/errors/transaction.error.js +58 -0
  56. package/dist/errors/transaction.error.js.map +1 -0
  57. package/dist/events/action.event.d.ts +13 -0
  58. package/dist/events/action.event.js +11 -0
  59. package/dist/events/action.event.js.map +1 -0
  60. package/dist/events/event.model.d.ts +6 -12
  61. package/dist/events/event.model.js +5 -11
  62. package/dist/events/event.model.js.map +1 -1
  63. package/dist/events/hook/commit.hook.event.d.ts +25 -0
  64. package/dist/events/hook/commit.hook.event.js +26 -0
  65. package/dist/events/hook/commit.hook.event.js.map +1 -0
  66. package/dist/events/hook/hook.event.d.ts +9 -0
  67. package/dist/events/hook/hook.event.js +10 -0
  68. package/dist/events/hook/hook.event.js.map +1 -0
  69. package/dist/events/hook/index.d.ts +4 -0
  70. package/dist/events/hook/index.js +5 -0
  71. package/dist/events/hook/index.js.map +1 -0
  72. package/dist/events/hook/model.hook.event.d.ts +25 -0
  73. package/dist/events/hook/model.hook.event.js +26 -0
  74. package/dist/events/hook/model.hook.event.js.map +1 -0
  75. package/dist/events/hook/resource.hook.event.d.ts +25 -0
  76. package/dist/events/hook/resource.hook.event.js +26 -0
  77. package/dist/events/hook/resource.hook.event.js.map +1 -0
  78. package/dist/events/index.d.ts +7 -0
  79. package/dist/events/index.js +8 -0
  80. package/dist/events/index.js.map +1 -0
  81. package/dist/events/module.event.d.ts +1 -6
  82. package/dist/events/module.event.js +0 -5
  83. package/dist/events/module.event.js.map +1 -1
  84. package/dist/events/registration.event.d.ts +9 -51
  85. package/dist/events/registration.event.js +16 -64
  86. package/dist/events/registration.event.js.map +1 -1
  87. package/dist/events/serialization.event.d.ts +24 -37
  88. package/dist/events/serialization.event.js +49 -33
  89. package/dist/events/serialization.event.js.map +1 -1
  90. package/dist/events/transaction.event.d.ts +45 -26
  91. package/dist/events/transaction.event.js +43 -25
  92. package/dist/events/transaction.event.js.map +1 -1
  93. package/dist/{decorators → functions/container}/container.d.ts +45 -31
  94. package/dist/{decorators → functions/container}/container.js +90 -58
  95. package/dist/functions/container/container.js.map +1 -0
  96. package/dist/{decorators → functions/container}/test-container.d.ts +5 -13
  97. package/dist/{decorators → functions/container}/test-container.js +31 -43
  98. package/dist/functions/container/test-container.js.map +1 -0
  99. package/dist/functions/dependency/dependency.d.ts +6 -6
  100. package/dist/functions/dependency/dependency.js +4 -3
  101. package/dist/functions/dependency/dependency.js.map +1 -1
  102. package/dist/functions/diff/diff-metadata.d.ts +4 -6
  103. package/dist/functions/diff/diff-metadata.js +4 -3
  104. package/dist/functions/diff/diff-metadata.js.map +1 -1
  105. package/dist/functions/diff/diff.d.ts +12 -7
  106. package/dist/functions/diff/diff.js +9 -12
  107. package/dist/functions/diff/diff.js.map +1 -1
  108. package/dist/functions/diff/diff.utility.d.ts +24 -24
  109. package/dist/functions/diff/diff.utility.js +46 -25
  110. package/dist/functions/diff/diff.utility.js.map +1 -1
  111. package/dist/functions/hook/commit.hook.d.ts +14 -3
  112. package/dist/functions/hook/commit.hook.js +16 -16
  113. package/dist/functions/hook/commit.hook.js.map +1 -1
  114. package/dist/functions/hook/hook.interface.d.ts +7 -6
  115. package/dist/functions/hook/model-action.hook.d.ts +17 -5
  116. package/dist/functions/hook/model-action.hook.js +20 -39
  117. package/dist/functions/hook/model-action.hook.js.map +1 -1
  118. package/dist/functions/hook/resource-action.hook.d.ts +17 -5
  119. package/dist/functions/hook/resource-action.hook.js +18 -18
  120. package/dist/functions/hook/resource-action.hook.js.map +1 -1
  121. package/dist/functions/node/node-action.abstract.d.ts +7 -0
  122. package/dist/functions/node/node-action.abstract.js +20 -0
  123. package/dist/functions/node/node-action.abstract.js.map +1 -0
  124. package/dist/functions/node/node.abstract.d.ts +93 -0
  125. package/dist/functions/node/node.abstract.js +342 -0
  126. package/dist/functions/node/node.abstract.js.map +1 -0
  127. package/dist/functions/node/node.interface.d.ts +176 -0
  128. package/dist/functions/node/node.interface.js +2 -0
  129. package/dist/functions/node/node.interface.js.map +1 -0
  130. package/dist/functions/schema/schema.d.ts +4 -0
  131. package/dist/functions/schema/schema.js +38 -0
  132. package/dist/functions/schema/schema.js.map +1 -0
  133. package/dist/index.d.ts +31 -33
  134. package/dist/index.js +32 -16
  135. package/dist/index.js.map +1 -1
  136. package/dist/main.d.ts +34 -22
  137. package/dist/main.js +92 -53
  138. package/dist/main.js.map +1 -1
  139. package/dist/models/account/account.model.d.ts +23 -0
  140. package/dist/models/account/account.model.js +67 -0
  141. package/dist/models/account/account.model.js.map +1 -0
  142. package/dist/models/account/account.schema.d.ts +7 -0
  143. package/dist/models/account/account.schema.js +12 -0
  144. package/dist/models/account/account.schema.js.map +1 -0
  145. package/dist/models/app/app.model.d.ts +6 -15
  146. package/dist/models/app/app.model.js +26 -31
  147. package/dist/models/app/app.model.js.map +1 -1
  148. package/dist/models/app/app.schema.d.ts +3 -0
  149. package/dist/models/app/app.schema.js +21 -0
  150. package/dist/models/app/app.schema.js.map +1 -0
  151. package/dist/models/deployment/deployment.model.d.ts +6 -13
  152. package/dist/models/deployment/deployment.model.js +11 -16
  153. package/dist/models/deployment/deployment.model.js.map +1 -1
  154. package/dist/models/deployment/deployment.schema.d.ts +7 -0
  155. package/dist/models/deployment/deployment.schema.js +25 -0
  156. package/dist/models/deployment/deployment.schema.js.map +1 -0
  157. package/dist/models/environment/environment.model.d.ts +5 -15
  158. package/dist/models/environment/environment.model.js +10 -28
  159. package/dist/models/environment/environment.model.js.map +1 -1
  160. package/dist/models/environment/environment.schema.d.ts +13 -0
  161. package/dist/models/environment/environment.schema.js +38 -0
  162. package/dist/models/environment/environment.schema.js.map +1 -0
  163. package/dist/models/execution/execution.model.d.ts +6 -14
  164. package/dist/models/execution/execution.model.js +15 -28
  165. package/dist/models/execution/execution.model.js.map +1 -1
  166. package/dist/models/execution/execution.schema.d.ts +14 -0
  167. package/dist/models/execution/execution.schema.js +34 -0
  168. package/dist/models/execution/execution.schema.js.map +1 -0
  169. package/dist/models/filesystem/filesystem.model.d.ts +10 -0
  170. package/dist/models/filesystem/filesystem.model.js +43 -0
  171. package/dist/models/filesystem/filesystem.model.js.map +1 -0
  172. package/dist/models/filesystem/filesystem.schema.d.ts +3 -0
  173. package/dist/models/filesystem/filesystem.schema.js +21 -0
  174. package/dist/models/filesystem/filesystem.schema.js.map +1 -0
  175. package/dist/models/image/image.model.d.ts +7 -41
  176. package/dist/models/image/image.model.js +17 -32
  177. package/dist/models/image/image.model.js.map +1 -1
  178. package/dist/models/image/image.schema.d.ts +9 -0
  179. package/dist/models/image/image.schema.js +31 -0
  180. package/dist/models/image/image.schema.js.map +1 -0
  181. package/dist/models/model-action.interface.d.ts +5 -19
  182. package/dist/models/model.abstract.d.ts +28 -316
  183. package/dist/models/model.abstract.js +180 -557
  184. package/dist/models/model.abstract.js.map +1 -1
  185. package/dist/models/model.interface.d.ts +42 -21
  186. package/dist/models/pipeline/pipeline.model.d.ts +5 -8
  187. package/dist/models/pipeline/pipeline.model.js +10 -16
  188. package/dist/models/pipeline/pipeline.model.js.map +1 -1
  189. package/dist/models/pipeline/pipeline.schema.d.ts +4 -0
  190. package/dist/models/pipeline/pipeline.schema.js +22 -0
  191. package/dist/models/pipeline/pipeline.schema.js.map +1 -0
  192. package/dist/models/region/region.model.d.ts +8 -9
  193. package/dist/models/region/region.model.js +25 -17
  194. package/dist/models/region/region.model.js.map +1 -1
  195. package/dist/models/region/region.schema.d.ts +3 -0
  196. package/dist/models/region/region.schema.js +21 -0
  197. package/dist/models/region/region.schema.js.map +1 -0
  198. package/dist/models/server/server.model.d.ts +5 -11
  199. package/dist/models/server/server.model.js +13 -16
  200. package/dist/models/server/server.model.js.map +1 -1
  201. package/dist/models/server/server.schema.d.ts +6 -0
  202. package/dist/models/server/server.schema.js +24 -0
  203. package/dist/models/server/server.schema.js.map +1 -0
  204. package/dist/models/service/service.model.d.ts +4 -10
  205. package/dist/models/service/service.model.js +12 -16
  206. package/dist/models/service/service.model.js.map +1 -1
  207. package/dist/models/service/service.schema.d.ts +6 -0
  208. package/dist/models/service/service.schema.js +24 -0
  209. package/dist/models/service/service.schema.js.map +1 -0
  210. package/dist/models/subnet/subnet.model.d.ts +10 -35
  211. package/dist/models/subnet/subnet.model.js +16 -47
  212. package/dist/models/subnet/subnet.model.js.map +1 -1
  213. package/dist/models/subnet/subnet.schema.d.ts +33 -0
  214. package/dist/models/subnet/subnet.schema.js +48 -0
  215. package/dist/models/subnet/subnet.schema.js.map +1 -0
  216. package/dist/modules/module.abstract.d.ts +21 -0
  217. package/dist/modules/module.abstract.js +14 -0
  218. package/dist/modules/module.abstract.js.map +1 -0
  219. package/dist/modules/module.container.d.ts +32 -18
  220. package/dist/modules/module.container.js +134 -81
  221. package/dist/modules/module.container.js.map +1 -1
  222. package/dist/modules/module.interface.d.ts +15 -2
  223. package/dist/modules/test-module.container.d.ts +33 -15
  224. package/dist/modules/test-module.container.js +264 -35
  225. package/dist/modules/test-module.container.js.map +1 -1
  226. package/dist/overlays/anchor.abstract.d.ts +13 -8
  227. package/dist/overlays/anchor.abstract.js.map +1 -1
  228. package/dist/overlays/anchor.interface.d.ts +5 -8
  229. package/dist/overlays/anchor.schema.d.ts +8 -0
  230. package/dist/overlays/anchor.schema.js +9 -0
  231. package/dist/overlays/anchor.schema.js.map +1 -0
  232. package/dist/overlays/overlay-data.repository.d.ts +3 -6
  233. package/dist/overlays/overlay-data.repository.js +17 -38
  234. package/dist/overlays/overlay-data.repository.js.map +1 -1
  235. package/dist/overlays/overlay.abstract.d.ts +15 -17
  236. package/dist/overlays/overlay.abstract.js +30 -44
  237. package/dist/overlays/overlay.abstract.js.map +1 -1
  238. package/dist/overlays/overlay.interface.d.ts +3 -7
  239. package/dist/overlays/overlay.schema.d.ts +8 -0
  240. package/dist/overlays/overlay.schema.js +9 -0
  241. package/dist/overlays/overlay.schema.js.map +1 -0
  242. package/dist/resources/resource-action.interface.d.ts +4 -3
  243. package/dist/resources/resource-data.repository.d.ts +16 -7
  244. package/dist/resources/resource-data.repository.js +118 -42
  245. package/dist/resources/resource-data.repository.js.map +1 -1
  246. package/dist/resources/resource.abstract.d.ts +56 -16
  247. package/dist/resources/resource.abstract.js +326 -19
  248. package/dist/resources/resource.abstract.js.map +1 -1
  249. package/dist/resources/resource.interface.d.ts +39 -8
  250. package/dist/resources/resource.schema.d.ts +14 -0
  251. package/dist/resources/resource.schema.js +11 -0
  252. package/dist/resources/resource.schema.js.map +1 -0
  253. package/dist/services/capture/capture.service.d.ts +6 -7
  254. package/dist/services/capture/capture.service.js +8 -5
  255. package/dist/services/capture/capture.service.js.map +1 -1
  256. package/dist/services/event/event.service.d.ts +3 -4
  257. package/dist/services/event/event.service.js +7 -9
  258. package/dist/services/event/event.service.js.map +1 -1
  259. package/dist/services/input/input.service.d.ts +62 -6
  260. package/dist/services/input/input.service.js +290 -14
  261. package/dist/services/input/input.service.js.map +1 -1
  262. package/dist/services/schema-translation/schema-translation.service.d.ts +13 -0
  263. package/dist/services/schema-translation/schema-translation.service.js +42 -0
  264. package/dist/services/schema-translation/schema-translation.service.js.map +1 -0
  265. package/dist/services/serialization/model/model-serialization.service.d.ts +1 -4
  266. package/dist/services/serialization/model/model-serialization.service.js +37 -33
  267. package/dist/services/serialization/model/model-serialization.service.js.map +1 -1
  268. package/dist/services/serialization/resource/resource-serialization.service.d.ts +5 -5
  269. package/dist/services/serialization/resource/resource-serialization.service.js +71 -96
  270. package/dist/services/serialization/resource/resource-serialization.service.js.map +1 -1
  271. package/dist/services/state-management/local.state-provider.d.ts +0 -1
  272. package/dist/services/state-management/local.state-provider.js +5 -7
  273. package/dist/services/state-management/local.state-provider.js.map +1 -1
  274. package/dist/services/state-management/state-management.service.d.ts +2 -3
  275. package/dist/services/state-management/state-management.service.js +19 -9
  276. package/dist/services/state-management/state-management.service.js.map +1 -1
  277. package/dist/services/state-management/state-provider.interface.d.ts +0 -1
  278. package/dist/services/state-management/test.state-provider.d.ts +0 -1
  279. package/dist/services/state-management/test.state-provider.js +2 -1
  280. package/dist/services/state-management/test.state-provider.js.map +1 -1
  281. package/dist/services/transaction/transaction.service.d.ts +18 -14
  282. package/dist/services/transaction/transaction.service.js +261 -132
  283. package/dist/services/transaction/transaction.service.js.map +1 -1
  284. package/dist/services/validation/validation.service.d.ts +2 -3
  285. package/dist/services/validation/validation.service.js +27 -12
  286. package/dist/services/validation/validation.service.js.map +1 -1
  287. package/dist/utilities/node/node.utility.d.ts +4 -0
  288. package/dist/utilities/node/node.utility.js +22 -0
  289. package/dist/utilities/node/node.utility.js.map +1 -0
  290. package/dist/utilities/object/object.utility.d.ts +3 -0
  291. package/dist/utilities/object/object.utility.js +33 -0
  292. package/dist/utilities/object/object.utility.js.map +1 -1
  293. package/dist/utilities/test-helpers/test-classes.d.ts +57 -0
  294. package/dist/utilities/test-helpers/test-classes.js +76 -0
  295. package/dist/utilities/test-helpers/test-classes.js.map +1 -0
  296. package/dist/utilities/test-helpers/test-models.d.ts +41 -0
  297. package/dist/utilities/test-helpers/test-models.js +224 -0
  298. package/dist/utilities/test-helpers/test-models.js.map +1 -0
  299. package/dist/utilities/test-helpers/test-overlays.d.ts +10 -0
  300. package/dist/utilities/test-helpers/test-overlays.js +53 -0
  301. package/dist/utilities/test-helpers/test-overlays.js.map +1 -0
  302. package/dist/utilities/test-helpers/test-resources.d.ts +22 -0
  303. package/dist/utilities/test-helpers/test-resources.js +162 -0
  304. package/dist/utilities/test-helpers/test-resources.js.map +1 -0
  305. package/dist/utilities/validation/validation.utility.d.ts +31 -3
  306. package/dist/utilities/validation/validation.utility.js +121 -2
  307. package/dist/utilities/validation/validation.utility.js.map +1 -1
  308. package/package.json +6 -6
  309. package/dist/decorators/container.js.map +0 -1
  310. package/dist/decorators/test-container.js.map +0 -1
  311. package/dist/events/error.event.d.ts +0 -35
  312. package/dist/events/error.event.js +0 -36
  313. package/dist/events/error.event.js.map +0 -1
  314. package/dist/events/hook.event.d.ts +0 -194
  315. package/dist/events/hook.event.js +0 -195
  316. package/dist/events/hook.event.js.map +0 -1
  317. package/dist/models/app/app.interface.d.ts +0 -9
  318. package/dist/models/app/app.interface.js +0 -2
  319. package/dist/models/app/app.interface.js.map +0 -1
  320. package/dist/models/deployment/deployment.interface.d.ts +0 -9
  321. package/dist/models/deployment/deployment.interface.js +0 -2
  322. package/dist/models/deployment/deployment.interface.js.map +0 -1
  323. package/dist/models/environment/environment.interface.d.ts +0 -12
  324. package/dist/models/environment/environment.interface.js +0 -2
  325. package/dist/models/environment/environment.interface.js.map +0 -1
  326. package/dist/models/execution/execution.interface.d.ts +0 -14
  327. package/dist/models/execution/execution.interface.js +0 -2
  328. package/dist/models/execution/execution.interface.js.map +0 -1
  329. package/dist/models/image/image.interface.d.ts +0 -12
  330. package/dist/models/image/image.interface.js +0 -2
  331. package/dist/models/image/image.interface.js.map +0 -1
  332. package/dist/models/pipeline/pipeline.interface.d.ts +0 -10
  333. package/dist/models/pipeline/pipeline.interface.js +0 -2
  334. package/dist/models/pipeline/pipeline.interface.js.map +0 -1
  335. package/dist/models/region/region.interface.d.ts +0 -9
  336. package/dist/models/region/region.interface.js +0 -2
  337. package/dist/models/region/region.interface.js.map +0 -1
  338. package/dist/models/server/server.interface.d.ts +0 -9
  339. package/dist/models/server/server.interface.js +0 -2
  340. package/dist/models/server/server.interface.js.map +0 -1
  341. package/dist/models/service/service.interface.d.ts +0 -9
  342. package/dist/models/service/service.interface.js +0 -2
  343. package/dist/models/service/service.interface.js.map +0 -1
  344. package/dist/models/subnet/subnet.interface.d.ts +0 -13
  345. package/dist/models/subnet/subnet.interface.js +0 -2
  346. package/dist/models/subnet/subnet.interface.js.map +0 -1
  347. package/dist/overlays/overlay.service.d.ts +0 -18
  348. package/dist/overlays/overlay.service.js +0 -45
  349. package/dist/overlays/overlay.service.js.map +0 -1
  350. package/dist/resources/shared-resource.abstract.d.ts +0 -13
  351. package/dist/resources/shared-resource.abstract.js +0 -47
  352. package/dist/resources/shared-resource.abstract.js.map +0 -1
@@ -1,48 +1,67 @@
1
+ import type { DiffMetadata } from '../functions/diff/diff-metadata.js';
1
2
  import { Event } from './event.model.js';
2
3
  /**
3
4
  * The TransactionEvent class is the superclass for all events in relation to transactions.
4
5
  * A transaction processes actions generated from model and resource diffs.
5
- * Thus, the events are usually in relation with these actions.
6
6
  *
7
- * :::warning Warning
8
- * It is not a good practice to create an event from this class directly,
9
- * but should rather create one from one of the subclasses.
10
- * This promotes a more accurate classification of events.
11
- * :::
7
+ * @group Events
8
+ * @returns The Event instance.
9
+ */
10
+ export declare class TransactionEvent<T> extends Event<T> {
11
+ }
12
+ /**
13
+ * This event is emitted when a model action in a transaction is done executing.
12
14
  *
13
- * @example
14
- * ```ts
15
- * const myEvent = new TransactionEvent('MyActionName');
16
- * EventService.getInstance().emit(myEvent);
17
- * ```
18
15
  * @group Events
19
16
  * @returns The Event instance.
20
17
  */
21
- export declare class TransactionEvent extends Event<string> {
18
+ export declare class ModelActionTransactionEvent extends TransactionEvent<void> {
22
19
  }
23
20
  /**
24
- * This event is emitted when a model action is done executing.
21
+ * This event is emitted when transaction prepares a model diff.
22
+
23
+ * @group Events
24
+ * @returns The Event instance.
25
+ */
26
+ export declare class ModelDiffsTransactionEvent extends TransactionEvent<DiffMetadata[][]> {
27
+ }
28
+ /**
29
+ * This event is emitted when transaction prepares a model transaction.
30
+
31
+ * @group Events
32
+ * @returns The Event instance.
33
+ */
34
+ export declare class ModelTransactionTransactionEvent extends TransactionEvent<DiffMetadata[][]> {
35
+ }
36
+ /**
37
+ * This event is emitted when a resource action in a transaction is done executing.
25
38
  *
26
- * @example
27
- * ```ts
28
- * const myEvent = new ModelActionTransactionEvent('MyActionName');
29
- * EventService.getInstance().emit(myEvent);
30
- * ```
31
39
  * @group Events
32
40
  * @returns The Event instance.
33
41
  */
34
- export declare class ModelActionTransactionEvent extends TransactionEvent {
42
+ export declare class ResourceActionCompletedTransactionEvent extends TransactionEvent<string> {
35
43
  }
36
44
  /**
37
- * This event is emitted when a resource action is done executing.
45
+ * This event is emitted when a resource action in a transaction begins executing.
38
46
  *
39
- * @example
40
- * ```ts
41
- * const myEvent = new ResourceActionTransactionEvent('MyActionName');
42
- * EventService.getInstance().emit(myEvent);
43
- * ```
44
47
  * @group Events
45
48
  * @returns The Event instance.
46
49
  */
47
- export declare class ResourceActionTransactionEvent extends TransactionEvent {
50
+ export declare class ResourceActionInitiatedTransactionEvent extends TransactionEvent<string> {
51
+ }
52
+ /**
53
+ * This event is emitted when transaction prepares a resource diff.
54
+
55
+ * @group Events
56
+ * @returns The Event instance.
57
+ */
58
+ export declare class ResourceDiffsTransactionEvent extends TransactionEvent<[DiffMetadata[][], DiffMetadata[][]]> {
59
+ }
60
+ /**
61
+ * This event is emitted when transaction prepares a resource transaction.
62
+
63
+ * @group Events
64
+ * @returns The Event instance.
65
+ */
66
+ export declare class ResourceTransactionTransactionEvent extends TransactionEvent<[DiffMetadata[][], DiffMetadata[][]]> {
48
67
  }
@@ -2,48 +2,66 @@ import { Event } from './event.model.js';
2
2
  /**
3
3
  * The TransactionEvent class is the superclass for all events in relation to transactions.
4
4
  * A transaction processes actions generated from model and resource diffs.
5
- * Thus, the events are usually in relation with these actions.
6
5
  *
7
- * :::warning Warning
8
- * It is not a good practice to create an event from this class directly,
9
- * but should rather create one from one of the subclasses.
10
- * This promotes a more accurate classification of events.
11
- * :::
12
- *
13
- * @example
14
- * ```ts
15
- * const myEvent = new TransactionEvent('MyActionName');
16
- * EventService.getInstance().emit(myEvent);
17
- * ```
18
6
  * @group Events
19
7
  * @returns The Event instance.
20
8
  */
21
9
  export class TransactionEvent extends Event {
22
10
  }
23
11
  /**
24
- * This event is emitted when a model action is done executing.
12
+ * This event is emitted when a model action in a transaction is done executing.
25
13
  *
26
- * @example
27
- * ```ts
28
- * const myEvent = new ModelActionTransactionEvent('MyActionName');
29
- * EventService.getInstance().emit(myEvent);
30
- * ```
31
14
  * @group Events
32
15
  * @returns The Event instance.
33
16
  */
34
17
  export class ModelActionTransactionEvent extends TransactionEvent {
35
18
  }
36
19
  /**
37
- * This event is emitted when a resource action is done executing.
20
+ * This event is emitted when transaction prepares a model diff.
21
+
22
+ * @group Events
23
+ * @returns The Event instance.
24
+ */
25
+ export class ModelDiffsTransactionEvent extends TransactionEvent {
26
+ }
27
+ /**
28
+ * This event is emitted when transaction prepares a model transaction.
29
+
30
+ * @group Events
31
+ * @returns The Event instance.
32
+ */
33
+ export class ModelTransactionTransactionEvent extends TransactionEvent {
34
+ }
35
+ /**
36
+ * This event is emitted when a resource action in a transaction is done executing.
38
37
  *
39
- * @example
40
- * ```ts
41
- * const myEvent = new ResourceActionTransactionEvent('MyActionName');
42
- * EventService.getInstance().emit(myEvent);
43
- * ```
44
38
  * @group Events
45
39
  * @returns The Event instance.
46
40
  */
47
- export class ResourceActionTransactionEvent extends TransactionEvent {
41
+ export class ResourceActionCompletedTransactionEvent extends TransactionEvent {
42
+ }
43
+ /**
44
+ * This event is emitted when a resource action in a transaction begins executing.
45
+ *
46
+ * @group Events
47
+ * @returns The Event instance.
48
+ */
49
+ export class ResourceActionInitiatedTransactionEvent extends TransactionEvent {
50
+ }
51
+ /**
52
+ * This event is emitted when transaction prepares a resource diff.
53
+
54
+ * @group Events
55
+ * @returns The Event instance.
56
+ */
57
+ export class ResourceDiffsTransactionEvent extends TransactionEvent {
58
+ }
59
+ /**
60
+ * This event is emitted when transaction prepares a resource transaction.
61
+
62
+ * @group Events
63
+ * @returns The Event instance.
64
+ */
65
+ export class ResourceTransactionTransactionEvent extends TransactionEvent {
48
66
  }
49
67
  //# sourceMappingURL=transaction.event.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"transaction.event.js","sourceRoot":"","sources":["../../src/events/transaction.event.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,kBAAkB,CAAC;AAEzC;;;;;;;;;;;;;;;;;;GAkBG;AACH,MAAM,OAAO,gBAAiB,SAAQ,KAAa;CAAG;AAEtD;;;;;;;;;;GAUG;AACH,MAAM,OAAO,2BAA4B,SAAQ,gBAAgB;CAAG;AAEpE;;;;;;;;;;GAUG;AACH,MAAM,OAAO,8BAA+B,SAAQ,gBAAgB;CAAG"}
1
+ {"version":3,"file":"transaction.event.js","sourceRoot":"","sources":["../../src/events/transaction.event.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,KAAK,EAAE,MAAM,kBAAkB,CAAC;AAEzC;;;;;;GAMG;AACH,MAAM,OAAO,gBAAoB,SAAQ,KAAQ;CAAG;AAEpD;;;;;GAKG;AACH,MAAM,OAAO,2BAA4B,SAAQ,gBAAsB;CAAG;AAE1E;;;;;GAKG;AACH,MAAM,OAAO,0BAA2B,SAAQ,gBAAkC;CAAG;AAErF;;;;;GAKG;AACH,MAAM,OAAO,gCAAiC,SAAQ,gBAAkC;CAAG;AAE3F;;;;;GAKG;AACH,MAAM,OAAO,uCAAwC,SAAQ,gBAAwB;CAAG;AAExF;;;;;GAKG;AACH,MAAM,OAAO,uCAAwC,SAAQ,gBAAwB;CAAG;AAExF;;;;;GAKG;AACH,MAAM,OAAO,6BAA8B,SAAQ,gBAAsD;CAAG;AAE5G;;;;;GAKG;AACH,MAAM,OAAO,mCAAoC,SAAQ,gBAAsD;CAAG"}
@@ -1,7 +1,14 @@
1
- import type { Constructable } from '../app.type.js';
1
+ import type { Constructable } from '../../app.type.js';
2
2
  type Factory<T> = {
3
3
  create: (...args: unknown[]) => Promise<T>;
4
4
  };
5
+ type FactoryValue<T> = Factory<T> | [Promise<Factory<T>>, (factory: Factory<T>) => void];
6
+ type FactoryContainer<T> = {
7
+ factory: FactoryValue<T>;
8
+ metadata: {
9
+ [key: string]: string;
10
+ };
11
+ };
5
12
  /**
6
13
  * The Container class is a box to hold all registered factories.
7
14
  *
@@ -12,10 +19,17 @@ type Factory<T> = {
12
19
  * It is an incredibly powerful tool to customize implementation.
13
20
  */
14
21
  export declare class Container {
15
- private static FACTORY_TIMEOUT_IN_MS;
16
- private static readonly factories;
22
+ private FACTORY_TIMEOUT_IN_MS;
23
+ private readonly factories;
24
+ private static instance;
25
+ private readonly startupUnhandledPromises;
26
+ private constructor();
27
+ copyFactories(): {
28
+ [key: string]: FactoryContainer<unknown>[];
29
+ };
17
30
  /**
18
- * `Container.get()` allows to get an instance of a class using its factory.
31
+ * `container.get()` allows to get an instance of a class using its factory.
32
+ * If the factory is not yet registered, it places a blocking promise in the queue to wait for the registration.
19
33
  *
20
34
  * @param type The type or name of the class to get.
21
35
  * @param options Allows selection of a specific factory to use to get the instance.
@@ -23,12 +37,18 @@ export declare class Container {
23
37
  * - The `metadata` option identifies the factory.
24
38
  * @returns The instance of the class.
25
39
  */
26
- static get<T>(type: Constructable<T> | string, options?: {
27
- args?: unknown[];
40
+ get<T, F extends Factory<T> = never>(type: Constructable<T> | string, options?: {
41
+ args?: Parameters<F['create']>;
28
42
  metadata?: {
29
43
  [key: string]: string;
30
44
  };
31
45
  }): Promise<T>;
46
+ static getInstance(): Container;
47
+ has<T>(type: Constructable<T> | string, options?: {
48
+ metadata?: {
49
+ [key: string]: string;
50
+ };
51
+ }): boolean;
32
52
  /**
33
53
  * `Container.registerFactory()` allows to register a factory for a class.
34
54
  *
@@ -37,48 +57,42 @@ export declare class Container {
37
57
  * @param options Distinguishes between different factories of the same class.
38
58
  * - The `metadata` attaches custom metadata to the factory.
39
59
  */
40
- static registerFactory<T>(type: Constructable<T> | string, factory: Factory<T>, options?: {
60
+ registerFactory<T>(type: Constructable<T> | string, factory: Factory<T>, options?: {
61
+ metadata?: {
62
+ [key: string]: string;
63
+ };
64
+ }): void;
65
+ registerValue<T>(type: Constructable<T> | string, value: T, options?: {
41
66
  metadata?: {
42
67
  [key: string]: string;
43
68
  };
44
69
  }): void;
70
+ registerStartupUnhandledPromise<T>(promise: Promise<T>): void;
45
71
  /**
46
72
  * `Container.reset()` clears all registered factories and empties the container. This is mostly used in testing.
47
73
  */
48
- static reset(): void;
49
- /**
50
- * `Container.setDefault()` sets a default factory for the class.
51
- *
52
- * @example
53
- * ```ts
54
- * // Register a factory.
55
- * Container.registerFactory(MyClass, MyClassFactory, { metadata: { key: 'value' } });
56
- *
57
- * // Without default.
58
- * Container.get(MyClass, { metadata: { key: 'value' } });
59
- *
60
- * // Set default.
61
- * Container.setDefault(MyClass, MyClassFactory);
62
- *
63
- * // With default.
64
- * Container.get(MyClass);
65
- * ```
66
- * @param type The type or name of the class for which the default factory is set.
67
- * @param factory The factory class being set as default.
68
- */
69
- static setDefault<T>(type: Constructable<T> | string, factory: Factory<T>): void;
74
+ reset(): void;
75
+ setFactories(factories: {
76
+ [key: string]: FactoryContainer<unknown>[];
77
+ }): void;
70
78
  /**
71
79
  * The Container, by default, will wait a maximum of 5 seconds for a factory to resolve and provide an instance.
72
80
  * This method allows to change that timeout.
73
81
  *
74
82
  * @param timeoutInMs The timeout in milliseconds.
75
83
  */
76
- static setFactoryTimeout(timeoutInMs: number): void;
84
+ setFactoryTimeout(timeoutInMs: number): void;
77
85
  /**
78
86
  * `Container.unRegisterFactory()` will unregister all factories of a class.
79
87
  *
80
88
  * @param type The type or name of the class for which all factory is unregistered.
89
+ * @param options
81
90
  */
82
- static unRegisterFactory<T>(type: Constructable<T> | string): void;
91
+ unRegisterFactory<T>(type: Constructable<T> | string, options?: {
92
+ metadata?: {
93
+ [key: string]: string;
94
+ };
95
+ }): void;
96
+ waitToResolveAllFactories(): Promise<void>;
83
97
  }
84
98
  export {};
@@ -1,3 +1,5 @@
1
+ import { ContainerRegistrationError, ContainerResolutionError } from '../../errors/index.js';
2
+ import { DiffUtility } from '../diff/diff.utility.js';
1
3
  /**
2
4
  * The Container class is a box to hold all registered factories.
3
5
  *
@@ -8,10 +10,27 @@
8
10
  * It is an incredibly powerful tool to customize implementation.
9
11
  */
10
12
  export class Container {
11
- static { this.FACTORY_TIMEOUT_IN_MS = 5000; }
12
- static { this.factories = {}; }
13
+ constructor() {
14
+ this.FACTORY_TIMEOUT_IN_MS = 3000;
15
+ this.factories = {};
16
+ this.startupUnhandledPromises = [];
17
+ }
18
+ copyFactories() {
19
+ const newFactoriesCopy = {};
20
+ for (const [type, factoryContainers] of Object.entries(this.factories)) {
21
+ newFactoriesCopy[type] = [];
22
+ for (const factoryContainer of factoryContainers) {
23
+ newFactoriesCopy[type].push({
24
+ factory: factoryContainer.factory,
25
+ metadata: { ...factoryContainer.metadata },
26
+ });
27
+ }
28
+ }
29
+ return newFactoriesCopy;
30
+ }
13
31
  /**
14
- * `Container.get()` allows to get an instance of a class using its factory.
32
+ * `container.get()` allows to get an instance of a class using its factory.
33
+ * If the factory is not yet registered, it places a blocking promise in the queue to wait for the registration.
15
34
  *
16
35
  * @param type The type or name of the class to get.
17
36
  * @param options Allows selection of a specific factory to use to get the instance.
@@ -19,24 +38,14 @@ export class Container {
19
38
  * - The `metadata` option identifies the factory.
20
39
  * @returns The instance of the class.
21
40
  */
22
- static async get(type, options) {
41
+ async get(type, options) {
23
42
  const args = options?.args || [];
24
- const metadata = options?.metadata;
43
+ const metadata = options?.metadata || {};
25
44
  const name = typeof type === 'string' ? type : type.name;
26
45
  if (!(name in this.factories)) {
27
46
  this.factories[name] = [];
28
47
  }
29
- let factoryContainer;
30
- if (!metadata) {
31
- factoryContainer = this.factories[name].find((f) => f.default);
32
- }
33
- else {
34
- const filters = [];
35
- for (const key in metadata) {
36
- filters.push({ key, value: metadata[key] });
37
- }
38
- factoryContainer = this.factories[name].find((f) => filters.every((c) => f.metadata[c.key] === c.value));
39
- }
48
+ const factoryContainer = this.factories[name].find((f) => DiffUtility.isObjectDeepEquals(f.metadata, metadata));
40
49
  if (factoryContainer?.factory) {
41
50
  if (!Array.isArray(factoryContainer.factory)) {
42
51
  return factoryContainer.factory.create(...args);
@@ -47,7 +56,6 @@ export class Container {
47
56
  }
48
57
  }
49
58
  const newFactoryContainer = {
50
- default: true,
51
59
  metadata,
52
60
  };
53
61
  this.factories[name].push(newFactoryContainer);
@@ -55,7 +63,7 @@ export class Container {
55
63
  let promiseTimeout;
56
64
  const promise = new Promise((resolve, reject) => {
57
65
  promiseTimeout = setTimeout(() => {
58
- reject(new Error(`Timed out waiting for factory ${name} to resolve!`));
66
+ reject(new ContainerResolutionError('Timed out waiting for factory to resolve!', type));
59
67
  }, this.FACTORY_TIMEOUT_IN_MS);
60
68
  promiseResolver = resolve;
61
69
  });
@@ -66,6 +74,20 @@ export class Container {
66
74
  }
67
75
  return factory.create(...args);
68
76
  }
77
+ static getInstance() {
78
+ if (!this.instance) {
79
+ this.instance = new Container();
80
+ }
81
+ return this.instance;
82
+ }
83
+ has(type, options) {
84
+ const metadata = options?.metadata || {};
85
+ const name = typeof type === 'string' ? type : type.name;
86
+ if (!(name in this.factories)) {
87
+ return false;
88
+ }
89
+ return this.factories[name].some((f) => DiffUtility.isObjectDeepEquals(f.metadata, metadata));
90
+ }
69
91
  /**
70
92
  * `Container.registerFactory()` allows to register a factory for a class.
71
93
  *
@@ -74,66 +96,56 @@ export class Container {
74
96
  * @param options Distinguishes between different factories of the same class.
75
97
  * - The `metadata` attaches custom metadata to the factory.
76
98
  */
77
- static registerFactory(type, factory, options) {
99
+ registerFactory(type, factory, options) {
78
100
  const metadata = options?.metadata || {};
79
101
  const name = typeof type === 'string' ? type : type.name;
80
102
  if (!(name in this.factories)) {
81
103
  this.factories[name] = [];
82
104
  }
83
- const filters = [];
84
- for (const key in metadata) {
85
- filters.push({ key, value: metadata[key] });
86
- }
87
- const factoryContainer = this.factories[name].find((f) => filters.every((c) => f.metadata[c.key] === c.value));
105
+ const factoryContainer = this.factories[name].find((f) => DiffUtility.isObjectDeepEquals(f.metadata, metadata));
88
106
  if (factoryContainer?.factory) {
89
107
  // If factory is not a promise set by get() above, it has already been registered.
90
108
  if (!Array.isArray(factoryContainer.factory)) {
91
- return;
109
+ throw new ContainerRegistrationError('Factory has already been registered!', type);
92
110
  }
93
111
  factoryContainer.metadata = metadata;
94
112
  const resolve = factoryContainer.factory[1];
95
113
  resolve(factory);
96
114
  factoryContainer.factory = factory;
97
- this.setDefault(type, factory);
98
115
  return;
99
116
  }
100
- this.factories[name].push({ default: false, factory, metadata });
101
- this.setDefault(type, factory);
117
+ this.factories[name].push({ factory, metadata });
118
+ }
119
+ registerValue(type, value, options) {
120
+ this.registerFactory(type, class {
121
+ static async create() {
122
+ return value;
123
+ }
124
+ }, options);
125
+ }
126
+ registerStartupUnhandledPromise(promise) {
127
+ this.startupUnhandledPromises.push(promise);
102
128
  }
103
129
  /**
104
130
  * `Container.reset()` clears all registered factories and empties the container. This is mostly used in testing.
105
131
  */
106
- static reset() {
107
- this.FACTORY_TIMEOUT_IN_MS = 5000;
132
+ reset() {
133
+ this.FACTORY_TIMEOUT_IN_MS = 3000;
108
134
  for (const name in this.factories) {
109
135
  delete this.factories[name];
110
136
  }
137
+ this.startupUnhandledPromises.splice(0, this.startupUnhandledPromises.length);
111
138
  }
112
- /**
113
- * `Container.setDefault()` sets a default factory for the class.
114
- *
115
- * @example
116
- * ```ts
117
- * // Register a factory.
118
- * Container.registerFactory(MyClass, MyClassFactory, { metadata: { key: 'value' } });
119
- *
120
- * // Without default.
121
- * Container.get(MyClass, { metadata: { key: 'value' } });
122
- *
123
- * // Set default.
124
- * Container.setDefault(MyClass, MyClassFactory);
125
- *
126
- * // With default.
127
- * Container.get(MyClass);
128
- * ```
129
- * @param type The type or name of the class for which the default factory is set.
130
- * @param factory The factory class being set as default.
131
- */
132
- static setDefault(type, factory) {
133
- const name = typeof type === 'string' ? type : type.name;
134
- this.factories[name]?.forEach((f) => {
135
- f.default = f.factory.name === factory.name;
136
- });
139
+ setFactories(factories) {
140
+ for (const [type, factoryContainers] of Object.entries(factories)) {
141
+ this.factories[type] = [];
142
+ for (const factoryContainer of factoryContainers) {
143
+ this.factories[type].push({
144
+ factory: factoryContainer.factory,
145
+ metadata: { ...factoryContainer.metadata },
146
+ });
147
+ }
148
+ }
137
149
  }
138
150
  /**
139
151
  * The Container, by default, will wait a maximum of 5 seconds for a factory to resolve and provide an instance.
@@ -141,17 +153,37 @@ export class Container {
141
153
  *
142
154
  * @param timeoutInMs The timeout in milliseconds.
143
155
  */
144
- static setFactoryTimeout(timeoutInMs) {
156
+ setFactoryTimeout(timeoutInMs) {
145
157
  this.FACTORY_TIMEOUT_IN_MS = timeoutInMs;
146
158
  }
147
159
  /**
148
160
  * `Container.unRegisterFactory()` will unregister all factories of a class.
149
161
  *
150
162
  * @param type The type or name of the class for which all factory is unregistered.
163
+ * @param options
151
164
  */
152
- static unRegisterFactory(type) {
165
+ unRegisterFactory(type, options) {
153
166
  const name = typeof type === 'string' ? type : type.name;
154
- delete this.factories[name];
167
+ if (!options) {
168
+ delete this.factories[name];
169
+ return;
170
+ }
171
+ const metadata = options?.metadata || {};
172
+ const index = this.factories[name]?.findIndex((f) => DiffUtility.isObjectDeepEquals(f.metadata, metadata));
173
+ if (index > -1) {
174
+ this.factories[name].splice(index, 1);
175
+ }
176
+ }
177
+ async waitToResolveAllFactories() {
178
+ const promiseToResolveAllFactories = [];
179
+ for (const name of Object.keys(this.factories)) {
180
+ for (const factoryContainer of this.factories[name]) {
181
+ if (factoryContainer?.factory && Array.isArray(factoryContainer.factory)) {
182
+ promiseToResolveAllFactories.push(factoryContainer.factory[0]);
183
+ }
184
+ }
185
+ }
186
+ await Promise.all([...promiseToResolveAllFactories, ...this.startupUnhandledPromises]);
155
187
  }
156
188
  }
157
189
  //# sourceMappingURL=container.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"container.js","sourceRoot":"","sources":["../../../src/functions/container/container.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,0BAA0B,EAAE,wBAAwB,EAAE,MAAM,uBAAuB,CAAC;AAC7F,OAAO,EAAE,WAAW,EAAE,MAAM,yBAAyB,CAAC;AAMtD;;;;;;;;GAQG;AACH,MAAM,OAAO,SAAS;IASpB;QARQ,0BAAqB,GAAG,IAAI,CAAC;QAEpB,cAAS,GAAmD,EAAE,CAAC;QAI/D,6BAAwB,GAAuB,EAAE,CAAC;IAE5C,CAAC;IAExB,aAAa;QACX,MAAM,gBAAgB,GAAmD,EAAE,CAAC;QAE5E,KAAK,MAAM,CAAC,IAAI,EAAE,iBAAiB,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,CAAC;YACvE,gBAAgB,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC;YAC5B,KAAK,MAAM,gBAAgB,IAAI,iBAAiB,EAAE,CAAC;gBACjD,gBAAgB,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC;oBAC1B,OAAO,EAAE,gBAAgB,CAAC,OAAO;oBACjC,QAAQ,EAAE,EAAE,GAAG,gBAAgB,CAAC,QAAQ,EAAE;iBAC3C,CAAC,CAAC;YACL,CAAC;QACH,CAAC;QAED,OAAO,gBAAgB,CAAC;IAC1B,CAAC;IAED;;;;;;;;;OASG;IACH,KAAK,CAAC,GAAG,CACP,IAA+B,EAC/B,OAGC;QAED,MAAM,IAAI,GAAG,OAAO,EAAE,IAAI,IAAI,EAAE,CAAC;QACjC,MAAM,QAAQ,GAAG,OAAO,EAAE,QAAQ,IAAI,EAAE,CAAC;QACzC,MAAM,IAAI,GAAG,OAAO,IAAI,KAAK,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC;QAEzD,IAAI,CAAC,CAAC,IAAI,IAAI,IAAI,CAAC,SAAS,CAAC,EAAE,CAAC;YAC9B,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC;QAC5B,CAAC;QAED,MAAM,gBAAgB,GAAG,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,WAAW,CAAC,kBAAkB,CAAC,CAAC,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC,CAAC;QAChH,IAAI,gBAAgB,EAAE,OAAO,EAAE,CAAC;YAC9B,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,gBAAgB,CAAC,OAAO,CAAC,EAAE,CAAC;gBAC7C,OAAQ,gBAAgB,CAAC,OAAsB,CAAC,MAAM,CAAC,GAAG,IAAI,CAAC,CAAC;YAClE,CAAC;iBAAM,CAAC;gBACN,MAAM,OAAO,GAAG,MAAO,gBAAgB,CAAC,OAAO,CAAC,CAAC,CAAyB,CAAC;gBAC3E,OAAO,OAAO,CAAC,MAAM,CAAC,GAAG,IAAI,CAAC,CAAC;YACjC,CAAC;QACH,CAAC;QAED,MAAM,mBAAmB,GAAwB;YAC/C,QAAQ;SACc,CAAC;QACzB,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,mBAAmB,CAAC,CAAC;QAE/C,IAAI,eAAuD,CAAC;QAC5D,IAAI,cAA0C,CAAC;QAC/C,MAAM,OAAO,GAAG,IAAI,OAAO,CAAa,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;YAC1D,cAAc,GAAG,UAAU,CAAC,GAAG,EAAE;gBAC/B,MAAM,CAAC,IAAI,wBAAwB,CAAC,2CAA2C,EAAE,IAAI,CAAC,CAAC,CAAC;YAC1F,CAAC,EAAE,IAAI,CAAC,qBAAqB,CAAC,CAAC;YAC/B,eAAe,GAAG,OAAO,CAAC;QAC5B,CAAC,CAAC,CAAC;QACH,mBAAmB,CAAC,OAAO,GAAG,CAAC,OAAO,EAAE,eAAgB,CAAC,CAAC;QAE1D,MAAM,OAAO,GAAG,MAAM,OAAO,CAAC;QAC9B,IAAI,cAAc,EAAE,CAAC;YACnB,YAAY,CAAC,cAAc,CAAC,CAAC;QAC/B,CAAC;QACD,OAAO,OAAO,CAAC,MAAM,CAAC,GAAG,IAAI,CAAC,CAAC;IACjC,CAAC;IAED,MAAM,CAAC,WAAW;QAChB,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC;YACnB,IAAI,CAAC,QAAQ,GAAG,IAAI,SAAS,EAAE,CAAC;QAClC,CAAC;QACD,OAAO,IAAI,CAAC,QAAQ,CAAC;IACvB,CAAC;IAED,GAAG,CACD,IAA+B,EAC/B,OAEC;QAED,MAAM,QAAQ,GAAG,OAAO,EAAE,QAAQ,IAAI,EAAE,CAAC;QACzC,MAAM,IAAI,GAAG,OAAO,IAAI,KAAK,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC;QAEzD,IAAI,CAAC,CAAC,IAAI,IAAI,IAAI,CAAC,SAAS,CAAC,EAAE,CAAC;YAC9B,OAAO,KAAK,CAAC;QACf,CAAC;QAED,OAAO,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,WAAW,CAAC,kBAAkB,CAAC,CAAC,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC,CAAC;IAChG,CAAC;IAED;;;;;;;OAOG;IACH,eAAe,CACb,IAA+B,EAC/B,OAAmB,EACnB,OAEC;QAED,MAAM,QAAQ,GAAG,OAAO,EAAE,QAAQ,IAAI,EAAE,CAAC;QACzC,MAAM,IAAI,GAAG,OAAO,IAAI,KAAK,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC;QAEzD,IAAI,CAAC,CAAC,IAAI,IAAI,IAAI,CAAC,SAAS,CAAC,EAAE,CAAC;YAC9B,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC;QAC5B,CAAC;QAED,MAAM,gBAAgB,GAAG,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,WAAW,CAAC,kBAAkB,CAAC,CAAC,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC,CAAC;QAChH,IAAI,gBAAgB,EAAE,OAAO,EAAE,CAAC;YAC9B,kFAAkF;YAClF,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,gBAAgB,CAAC,OAAO,CAAC,EAAE,CAAC;gBAC7C,MAAM,IAAI,0BAA0B,CAAC,sCAAsC,EAAE,IAAI,CAAC,CAAC;YACrF,CAAC;YAED,gBAAgB,CAAC,QAAQ,GAAG,QAAQ,CAAC;YACrC,MAAM,OAAO,GAAG,gBAAgB,CAAC,OAAO,CAAC,CAAC,CAAkC,CAAC;YAC7E,OAAO,CAAC,OAAO,CAAC,CAAC;YACjB,gBAAgB,CAAC,OAAO,GAAG,OAAO,CAAC;YAEnC,OAAO;QACT,CAAC;QAED,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,EAAE,OAAO,EAAE,QAAQ,EAAE,CAAC,CAAC;IACnD,CAAC;IAED,aAAa,CACX,IAA+B,EAC/B,KAAQ,EACR,OAEC;QAED,IAAI,CAAC,eAAe,CAClB,IAAI,EACJ;YACE,MAAM,CAAC,KAAK,CAAC,MAAM;gBACjB,OAAO,KAAK,CAAC;YACf,CAAC;SACF,EACD,OAAO,CACR,CAAC;IACJ,CAAC;IAED,+BAA+B,CAAI,OAAmB;QACpD,IAAI,CAAC,wBAAwB,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;IAC9C,CAAC;IAED;;OAEG;IACH,KAAK;QACH,IAAI,CAAC,qBAAqB,GAAG,IAAI,CAAC;QAElC,KAAK,MAAM,IAAI,IAAI,IAAI,CAAC,SAAS,EAAE,CAAC;YAClC,OAAO,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;QAC9B,CAAC;QAED,IAAI,CAAC,wBAAwB,CAAC,MAAM,CAAC,CAAC,EAAE,IAAI,CAAC,wBAAwB,CAAC,MAAM,CAAC,CAAC;IAChF,CAAC;IAED,YAAY,CAAC,SAAyD;QACpE,KAAK,MAAM,CAAC,IAAI,EAAE,iBAAiB,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,SAAS,CAAC,EAAE,CAAC;YAClE,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC;YAC1B,KAAK,MAAM,gBAAgB,IAAI,iBAAiB,EAAE,CAAC;gBACjD,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC;oBACxB,OAAO,EAAE,gBAAgB,CAAC,OAAO;oBACjC,QAAQ,EAAE,EAAE,GAAG,gBAAgB,CAAC,QAAQ,EAAE;iBAC3C,CAAC,CAAC;YACL,CAAC;QACH,CAAC;IACH,CAAC;IAED;;;;;OAKG;IACH,iBAAiB,CAAC,WAAmB;QACnC,IAAI,CAAC,qBAAqB,GAAG,WAAW,CAAC;IAC3C,CAAC;IAED;;;;;OAKG;IACH,iBAAiB,CAAI,IAA+B,EAAE,OAAkD;QACtG,MAAM,IAAI,GAAG,OAAO,IAAI,KAAK,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC;QAEzD,IAAI,CAAC,OAAO,EAAE,CAAC;YACb,OAAO,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;YAC5B,OAAO;QACT,CAAC;QAED,MAAM,QAAQ,GAAG,OAAO,EAAE,QAAQ,IAAI,EAAE,CAAC;QACzC,MAAM,KAAK,GAAG,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,EAAE,SAAS,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,WAAW,CAAC,kBAAkB,CAAC,CAAC,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC,CAAC;QAC3G,IAAI,KAAK,GAAG,CAAC,CAAC,EAAE,CAAC;YACf,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;QACxC,CAAC;IACH,CAAC;IAED,KAAK,CAAC,yBAAyB;QAC7B,MAAM,4BAA4B,GAAgC,EAAE,CAAC;QAErE,KAAK,MAAM,IAAI,IAAI,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,CAAC;YAC/C,KAAK,MAAM,gBAAgB,IAAI,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,EAAE,CAAC;gBACpD,IAAI,gBAAgB,EAAE,OAAO,IAAI,KAAK,CAAC,OAAO,CAAC,gBAAgB,CAAC,OAAO,CAAC,EAAE,CAAC;oBACzE,4BAA4B,CAAC,IAAI,CAAC,gBAAgB,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC;gBACjE,CAAC;YACH,CAAC;QACH,CAAC;QAED,MAAM,OAAO,CAAC,GAAG,CAAC,CAAC,GAAG,4BAA4B,EAAE,GAAG,IAAI,CAAC,wBAAwB,CAAC,CAAC,CAAC;IACzF,CAAC;CACF"}
@@ -1,4 +1,5 @@
1
- import type { Constructable } from '../app.type.js';
1
+ import type { Constructable } from '../../app.type.js';
2
+ import { Container } from './container.js';
2
3
  type FactoryMock<T> = {
3
4
  metadata?: {
4
5
  [key: string]: string;
@@ -7,17 +8,11 @@ type FactoryMock<T> = {
7
8
  value: T;
8
9
  };
9
10
  type TestContainerSubjects = {
10
- importFrom?: Constructable<IPackageMock>[];
11
11
  mocks?: FactoryMock<unknown>[];
12
12
  };
13
13
  type TestContainerOptions = {
14
14
  factoryTimeoutInMs?: number;
15
15
  };
16
- export interface IPackageMock {
17
- destroy: () => Promise<void>;
18
- getMocks: () => FactoryMock<unknown>[];
19
- init(): Promise<void>;
20
- }
21
16
  /**
22
17
  * The TestContainer class is an isolated {@link Container} for tests.
23
18
  *
@@ -33,8 +28,8 @@ export interface IPackageMock {
33
28
  * Once tests are done executing, the `afterAll()` block cleans up the Container.
34
29
  */
35
30
  export declare class TestContainer {
36
- private static packageMocks;
37
- private static createTestFactory;
31
+ private static originalFactories;
32
+ private static bootstrap;
38
33
  /**
39
34
  * The `TestContainer.create()` method allows you to mock factories.
40
35
  *
@@ -42,7 +37,6 @@ export declare class TestContainer {
42
37
  * ```ts
43
38
  * beforeAll(async () => {
44
39
  * await TestContainer.create({
45
- * importFrom: [OctoAwsCdkPackageMock],
46
40
  * mocks: [
47
41
  * { type: MyClass, value: jest.fn() },
48
42
  * { metadata: { key: 'value' }, type: AnotherClass, value: new AnotherClass() },
@@ -52,8 +46,6 @@ export declare class TestContainer {
52
46
  *
53
47
  * ```
54
48
  * @param subjects The subjects being mocked.
55
- * - `importFrom` is an array of {@link IPackageMock} classes, to import custom mocks,
56
- * such as from octo-aws-cdk package - [OctoAwsCdkPackageMock](/api/octo-aws-cdk/class/OctoAwsCdkPackageMock).
57
49
  * - `mocks` is an array of objects, to override the default factories.
58
50
  * - Use `metadata?: { [key: string]: string }` to identify the factory being mocked.
59
51
  * - Use `type: Constructable<T> | string` to identify the class being mocked.
@@ -61,7 +53,7 @@ export declare class TestContainer {
61
53
  * @param options Options to configure TestContainer.
62
54
  * - `factoryTimeoutInMs?: number` is to override the default container timeout.
63
55
  */
64
- static create(subjects: TestContainerSubjects, options?: TestContainerOptions): Promise<void>;
56
+ static create(subjects: TestContainerSubjects, options?: TestContainerOptions): Promise<Container>;
65
57
  /**
66
58
  * The `TestContainer.reset()` method will completely destroy all factories from the Container.
67
59
  * Because the entire Container is destroyed, and not just the mocks,