@quadnix/octo 0.0.22 → 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 (347) hide show
  1. package/dist/app.type.d.ts +121 -26
  2. package/dist/app.type.js +71 -1
  3. package/dist/app.type.js.map +1 -1
  4. package/dist/decorators/action.decorator.d.ts +4 -5
  5. package/dist/decorators/action.decorator.js +42 -41
  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 +14 -2
  16. package/dist/decorators/factory.decorator.js +12 -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 -75
  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/functions/container/container.d.ts +54 -9
  94. package/dist/functions/container/container.js +106 -19
  95. package/dist/functions/container/container.js.map +1 -1
  96. package/dist/functions/container/test-container.d.ts +9 -13
  97. package/dist/functions/container/test-container.js +33 -38
  98. package/dist/functions/container/test-container.js.map +1 -1
  99. package/dist/functions/dependency/dependency.js +4 -3
  100. package/dist/functions/dependency/dependency.js.map +1 -1
  101. package/dist/functions/diff/diff-metadata.d.ts +3 -5
  102. package/dist/functions/diff/diff-metadata.js +3 -2
  103. package/dist/functions/diff/diff-metadata.js.map +1 -1
  104. package/dist/functions/diff/diff.d.ts +10 -5
  105. package/dist/functions/diff/diff.js +5 -4
  106. package/dist/functions/diff/diff.js.map +1 -1
  107. package/dist/functions/diff/diff.utility.d.ts +2 -2
  108. package/dist/functions/diff/diff.utility.js +23 -2
  109. package/dist/functions/diff/diff.utility.js.map +1 -1
  110. package/dist/functions/hook/commit.hook.d.ts +14 -3
  111. package/dist/functions/hook/commit.hook.js +16 -16
  112. package/dist/functions/hook/commit.hook.js.map +1 -1
  113. package/dist/functions/hook/hook.interface.d.ts +7 -6
  114. package/dist/functions/hook/model-action.hook.d.ts +17 -5
  115. package/dist/functions/hook/model-action.hook.js +20 -39
  116. package/dist/functions/hook/model-action.hook.js.map +1 -1
  117. package/dist/functions/hook/resource-action.hook.d.ts +17 -5
  118. package/dist/functions/hook/resource-action.hook.js +18 -18
  119. package/dist/functions/hook/resource-action.hook.js.map +1 -1
  120. package/dist/functions/node/node-action.abstract.d.ts +7 -0
  121. package/dist/functions/node/node-action.abstract.js +20 -0
  122. package/dist/functions/node/node-action.abstract.js.map +1 -0
  123. package/dist/functions/node/node.abstract.d.ts +18 -9
  124. package/dist/functions/node/node.abstract.js +99 -32
  125. package/dist/functions/node/node.abstract.js.map +1 -1
  126. package/dist/functions/node/node.interface.d.ts +18 -18
  127. package/dist/functions/schema/schema.d.ts +4 -0
  128. package/dist/functions/schema/schema.js +38 -0
  129. package/dist/functions/schema/schema.js.map +1 -0
  130. package/dist/index.d.ts +31 -32
  131. package/dist/index.js +29 -12
  132. package/dist/index.js.map +1 -1
  133. package/dist/main.d.ts +29 -15
  134. package/dist/main.js +62 -50
  135. package/dist/main.js.map +1 -1
  136. package/dist/models/account/account.model.d.ts +23 -0
  137. package/dist/models/account/account.model.js +67 -0
  138. package/dist/models/account/account.model.js.map +1 -0
  139. package/dist/models/account/account.schema.d.ts +7 -0
  140. package/dist/models/account/account.schema.js +12 -0
  141. package/dist/models/account/account.schema.js.map +1 -0
  142. package/dist/models/app/app.model.d.ts +6 -13
  143. package/dist/models/app/app.model.js +24 -26
  144. package/dist/models/app/app.model.js.map +1 -1
  145. package/dist/models/app/app.schema.d.ts +3 -0
  146. package/dist/models/app/app.schema.js +21 -0
  147. package/dist/models/app/app.schema.js.map +1 -0
  148. package/dist/models/deployment/deployment.model.d.ts +6 -11
  149. package/dist/models/deployment/deployment.model.js +8 -10
  150. package/dist/models/deployment/deployment.model.js.map +1 -1
  151. package/dist/models/deployment/deployment.schema.d.ts +7 -0
  152. package/dist/models/deployment/deployment.schema.js +25 -0
  153. package/dist/models/deployment/deployment.schema.js.map +1 -0
  154. package/dist/models/environment/environment.model.d.ts +5 -13
  155. package/dist/models/environment/environment.model.js +7 -21
  156. package/dist/models/environment/environment.model.js.map +1 -1
  157. package/dist/models/environment/environment.schema.d.ts +13 -0
  158. package/dist/models/environment/environment.schema.js +38 -0
  159. package/dist/models/environment/environment.schema.js.map +1 -0
  160. package/dist/models/execution/execution.model.d.ts +6 -12
  161. package/dist/models/execution/execution.model.js +15 -24
  162. package/dist/models/execution/execution.model.js.map +1 -1
  163. package/dist/models/execution/execution.schema.d.ts +14 -0
  164. package/dist/models/execution/execution.schema.js +34 -0
  165. package/dist/models/execution/execution.schema.js.map +1 -0
  166. package/dist/models/filesystem/filesystem.model.d.ts +10 -0
  167. package/dist/models/filesystem/filesystem.model.js +43 -0
  168. package/dist/models/filesystem/filesystem.model.js.map +1 -0
  169. package/dist/models/filesystem/filesystem.schema.d.ts +3 -0
  170. package/dist/models/filesystem/filesystem.schema.js +21 -0
  171. package/dist/models/filesystem/filesystem.schema.js.map +1 -0
  172. package/dist/models/image/image.model.d.ts +7 -39
  173. package/dist/models/image/image.model.js +14 -26
  174. package/dist/models/image/image.model.js.map +1 -1
  175. package/dist/models/image/image.schema.d.ts +9 -0
  176. package/dist/models/image/image.schema.js +31 -0
  177. package/dist/models/image/image.schema.js.map +1 -0
  178. package/dist/models/model-action.interface.d.ts +3 -13
  179. package/dist/models/model.abstract.d.ts +25 -13
  180. package/dist/models/model.abstract.js +176 -13
  181. package/dist/models/model.abstract.js.map +1 -1
  182. package/dist/models/model.interface.d.ts +12 -6
  183. package/dist/models/pipeline/pipeline.model.d.ts +5 -6
  184. package/dist/models/pipeline/pipeline.model.js +7 -9
  185. package/dist/models/pipeline/pipeline.model.js.map +1 -1
  186. package/dist/models/pipeline/pipeline.schema.d.ts +4 -0
  187. package/dist/models/pipeline/pipeline.schema.js +22 -0
  188. package/dist/models/pipeline/pipeline.schema.js.map +1 -0
  189. package/dist/models/region/region.model.d.ts +8 -7
  190. package/dist/models/region/region.model.js +22 -11
  191. package/dist/models/region/region.model.js.map +1 -1
  192. package/dist/models/region/region.schema.d.ts +3 -0
  193. package/dist/models/region/region.schema.js +21 -0
  194. package/dist/models/region/region.schema.js.map +1 -0
  195. package/dist/models/server/server.model.d.ts +5 -9
  196. package/dist/models/server/server.model.js +10 -10
  197. package/dist/models/server/server.model.js.map +1 -1
  198. package/dist/models/server/server.schema.d.ts +6 -0
  199. package/dist/models/server/server.schema.js +24 -0
  200. package/dist/models/server/server.schema.js.map +1 -0
  201. package/dist/models/service/service.model.d.ts +4 -8
  202. package/dist/models/service/service.model.js +12 -12
  203. package/dist/models/service/service.model.js.map +1 -1
  204. package/dist/models/service/service.schema.d.ts +6 -0
  205. package/dist/models/service/service.schema.js +24 -0
  206. package/dist/models/service/service.schema.js.map +1 -0
  207. package/dist/models/subnet/subnet.model.d.ts +8 -32
  208. package/dist/models/subnet/subnet.model.js +11 -33
  209. package/dist/models/subnet/subnet.model.js.map +1 -1
  210. package/dist/models/subnet/subnet.schema.d.ts +33 -0
  211. package/dist/models/subnet/subnet.schema.js +48 -0
  212. package/dist/models/subnet/subnet.schema.js.map +1 -0
  213. package/dist/modules/module.abstract.d.ts +21 -0
  214. package/dist/modules/module.abstract.js +14 -0
  215. package/dist/modules/module.abstract.js.map +1 -0
  216. package/dist/modules/module.container.d.ts +32 -18
  217. package/dist/modules/module.container.js +134 -81
  218. package/dist/modules/module.container.js.map +1 -1
  219. package/dist/modules/module.interface.d.ts +15 -2
  220. package/dist/modules/test-module.container.d.ts +33 -15
  221. package/dist/modules/test-module.container.js +257 -26
  222. package/dist/modules/test-module.container.js.map +1 -1
  223. package/dist/overlays/anchor.abstract.d.ts +13 -8
  224. package/dist/overlays/anchor.abstract.js.map +1 -1
  225. package/dist/overlays/anchor.interface.d.ts +5 -8
  226. package/dist/overlays/anchor.schema.d.ts +8 -0
  227. package/dist/overlays/anchor.schema.js +9 -0
  228. package/dist/overlays/anchor.schema.js.map +1 -0
  229. package/dist/overlays/overlay-data.repository.d.ts +3 -4
  230. package/dist/overlays/overlay-data.repository.js +14 -10
  231. package/dist/overlays/overlay-data.repository.js.map +1 -1
  232. package/dist/overlays/overlay.abstract.d.ts +12 -13
  233. package/dist/overlays/overlay.abstract.js +16 -8
  234. package/dist/overlays/overlay.abstract.js.map +1 -1
  235. package/dist/overlays/overlay.interface.d.ts +3 -7
  236. package/dist/overlays/overlay.schema.d.ts +8 -0
  237. package/dist/overlays/overlay.schema.js +9 -0
  238. package/dist/overlays/overlay.schema.js.map +1 -0
  239. package/dist/resources/resource-action.interface.d.ts +4 -3
  240. package/dist/resources/resource-data.repository.d.ts +2 -3
  241. package/dist/resources/resource-data.repository.js +58 -82
  242. package/dist/resources/resource-data.repository.js.map +1 -1
  243. package/dist/resources/resource.abstract.d.ts +50 -27
  244. package/dist/resources/resource.abstract.js +230 -57
  245. package/dist/resources/resource.abstract.js.map +1 -1
  246. package/dist/resources/resource.interface.d.ts +39 -8
  247. package/dist/resources/resource.schema.d.ts +14 -0
  248. package/dist/resources/resource.schema.js +11 -0
  249. package/dist/resources/resource.schema.js.map +1 -0
  250. package/dist/services/capture/capture.service.d.ts +6 -6
  251. package/dist/services/capture/capture.service.js +8 -5
  252. package/dist/services/capture/capture.service.js.map +1 -1
  253. package/dist/services/event/event.service.d.ts +3 -4
  254. package/dist/services/event/event.service.js +7 -9
  255. package/dist/services/event/event.service.js.map +1 -1
  256. package/dist/services/input/input.service.d.ts +62 -6
  257. package/dist/services/input/input.service.js +290 -14
  258. package/dist/services/input/input.service.js.map +1 -1
  259. package/dist/services/schema-translation/schema-translation.service.d.ts +13 -0
  260. package/dist/services/schema-translation/schema-translation.service.js +42 -0
  261. package/dist/services/schema-translation/schema-translation.service.js.map +1 -0
  262. package/dist/services/serialization/model/model-serialization.service.d.ts +1 -4
  263. package/dist/services/serialization/model/model-serialization.service.js +36 -25
  264. package/dist/services/serialization/model/model-serialization.service.js.map +1 -1
  265. package/dist/services/serialization/resource/resource-serialization.service.d.ts +1 -1
  266. package/dist/services/serialization/resource/resource-serialization.service.js +58 -80
  267. package/dist/services/serialization/resource/resource-serialization.service.js.map +1 -1
  268. package/dist/services/state-management/local.state-provider.d.ts +0 -1
  269. package/dist/services/state-management/local.state-provider.js +5 -7
  270. package/dist/services/state-management/local.state-provider.js.map +1 -1
  271. package/dist/services/state-management/state-management.service.d.ts +2 -3
  272. package/dist/services/state-management/state-management.service.js +19 -8
  273. package/dist/services/state-management/state-management.service.js.map +1 -1
  274. package/dist/services/state-management/state-provider.interface.d.ts +0 -1
  275. package/dist/services/state-management/test.state-provider.d.ts +0 -1
  276. package/dist/services/state-management/test.state-provider.js +2 -1
  277. package/dist/services/state-management/test.state-provider.js.map +1 -1
  278. package/dist/services/transaction/transaction.service.d.ts +16 -11
  279. package/dist/services/transaction/transaction.service.js +197 -66
  280. package/dist/services/transaction/transaction.service.js.map +1 -1
  281. package/dist/services/validation/validation.service.d.ts +2 -3
  282. package/dist/services/validation/validation.service.js +27 -12
  283. package/dist/services/validation/validation.service.js.map +1 -1
  284. package/dist/utilities/node/node.utility.d.ts +4 -0
  285. package/dist/utilities/node/node.utility.js +22 -0
  286. package/dist/utilities/node/node.utility.js.map +1 -0
  287. package/dist/utilities/object/object.utility.d.ts +3 -0
  288. package/dist/utilities/object/object.utility.js +33 -0
  289. package/dist/utilities/object/object.utility.js.map +1 -1
  290. package/dist/utilities/test-helpers/test-classes.d.ts +57 -0
  291. package/dist/utilities/test-helpers/test-classes.js +76 -0
  292. package/dist/utilities/test-helpers/test-classes.js.map +1 -0
  293. package/dist/utilities/test-helpers/test-models.d.ts +41 -0
  294. package/dist/utilities/test-helpers/test-models.js +224 -0
  295. package/dist/utilities/test-helpers/test-models.js.map +1 -0
  296. package/dist/utilities/test-helpers/test-overlays.d.ts +10 -0
  297. package/dist/utilities/test-helpers/test-overlays.js +53 -0
  298. package/dist/utilities/test-helpers/test-overlays.js.map +1 -0
  299. package/dist/utilities/test-helpers/test-resources.d.ts +22 -0
  300. package/dist/utilities/test-helpers/test-resources.js +162 -0
  301. package/dist/utilities/test-helpers/test-resources.js.map +1 -0
  302. package/dist/utilities/validation/validation.utility.d.ts +31 -3
  303. package/dist/utilities/validation/validation.utility.js +121 -2
  304. package/dist/utilities/validation/validation.utility.js.map +1 -1
  305. package/package.json +6 -6
  306. package/dist/events/error.event.d.ts +0 -35
  307. package/dist/events/error.event.js +0 -36
  308. package/dist/events/error.event.js.map +0 -1
  309. package/dist/events/hook.event.d.ts +0 -194
  310. package/dist/events/hook.event.js +0 -195
  311. package/dist/events/hook.event.js.map +0 -1
  312. package/dist/models/app/app.interface.d.ts +0 -9
  313. package/dist/models/app/app.interface.js +0 -2
  314. package/dist/models/app/app.interface.js.map +0 -1
  315. package/dist/models/deployment/deployment.interface.d.ts +0 -9
  316. package/dist/models/deployment/deployment.interface.js +0 -2
  317. package/dist/models/deployment/deployment.interface.js.map +0 -1
  318. package/dist/models/environment/environment.interface.d.ts +0 -12
  319. package/dist/models/environment/environment.interface.js +0 -2
  320. package/dist/models/environment/environment.interface.js.map +0 -1
  321. package/dist/models/execution/execution.interface.d.ts +0 -14
  322. package/dist/models/execution/execution.interface.js +0 -2
  323. package/dist/models/execution/execution.interface.js.map +0 -1
  324. package/dist/models/image/image.interface.d.ts +0 -12
  325. package/dist/models/image/image.interface.js +0 -2
  326. package/dist/models/image/image.interface.js.map +0 -1
  327. package/dist/models/pipeline/pipeline.interface.d.ts +0 -10
  328. package/dist/models/pipeline/pipeline.interface.js +0 -2
  329. package/dist/models/pipeline/pipeline.interface.js.map +0 -1
  330. package/dist/models/region/region.interface.d.ts +0 -9
  331. package/dist/models/region/region.interface.js +0 -2
  332. package/dist/models/region/region.interface.js.map +0 -1
  333. package/dist/models/server/server.interface.d.ts +0 -9
  334. package/dist/models/server/server.interface.js +0 -2
  335. package/dist/models/server/server.interface.js.map +0 -1
  336. package/dist/models/service/service.interface.d.ts +0 -9
  337. package/dist/models/service/service.interface.js +0 -2
  338. package/dist/models/service/service.interface.js.map +0 -1
  339. package/dist/models/subnet/subnet.interface.d.ts +0 -13
  340. package/dist/models/subnet/subnet.interface.js +0 -2
  341. package/dist/models/subnet/subnet.interface.js.map +0 -1
  342. package/dist/overlays/overlay.service.d.ts +0 -17
  343. package/dist/overlays/overlay.service.js +0 -41
  344. package/dist/overlays/overlay.service.js.map +0 -1
  345. package/dist/resources/shared-resource.abstract.d.ts +0 -13
  346. package/dist/resources/shared-resource.abstract.js +0 -47
  347. 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"}
@@ -2,6 +2,13 @@ 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,42 +19,80 @@ 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.
22
36
  * - The `args` option supplies arguments to the factory.
37
+ * - The `metadata` option identifies the factory.
23
38
  * @returns The instance of the class.
24
39
  */
25
- static get<T>(type: Constructable<T> | string, options?: {
26
- args?: unknown[];
40
+ get<T, F extends Factory<T> = never>(type: Constructable<T> | string, options?: {
41
+ args?: Parameters<F['create']>;
42
+ metadata?: {
43
+ [key: string]: string;
44
+ };
27
45
  }): Promise<T>;
46
+ static getInstance(): Container;
47
+ has<T>(type: Constructable<T> | string, options?: {
48
+ metadata?: {
49
+ [key: string]: string;
50
+ };
51
+ }): boolean;
28
52
  /**
29
53
  * `Container.registerFactory()` allows to register a factory for a class.
30
54
  *
31
55
  * @param type The type or name of the class for which the factory is registered.
32
56
  * @param factory The factory class being registered.
57
+ * @param options Distinguishes between different factories of the same class.
58
+ * - The `metadata` attaches custom metadata to the factory.
33
59
  */
34
- static registerFactory<T>(type: Constructable<T> | string, factory: Factory<T>): void;
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?: {
66
+ metadata?: {
67
+ [key: string]: string;
68
+ };
69
+ }): void;
70
+ registerStartupUnhandledPromise<T>(promise: Promise<T>): void;
35
71
  /**
36
72
  * `Container.reset()` clears all registered factories and empties the container. This is mostly used in testing.
37
73
  */
38
- static reset(): void;
74
+ reset(): void;
75
+ setFactories(factories: {
76
+ [key: string]: FactoryContainer<unknown>[];
77
+ }): void;
39
78
  /**
40
79
  * The Container, by default, will wait a maximum of 5 seconds for a factory to resolve and provide an instance.
41
80
  * This method allows to change that timeout.
42
81
  *
43
82
  * @param timeoutInMs The timeout in milliseconds.
44
83
  */
45
- static setFactoryTimeout(timeoutInMs: number): void;
84
+ setFactoryTimeout(timeoutInMs: number): void;
46
85
  /**
47
86
  * `Container.unRegisterFactory()` will unregister all factories of a class.
48
87
  *
49
88
  * @param type The type or name of the class for which all factory is unregistered.
89
+ * @param options
50
90
  */
51
- 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>;
52
97
  }
53
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,20 +10,42 @@
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.
18
37
  * - The `args` option supplies arguments to the factory.
38
+ * - The `metadata` option identifies the factory.
19
39
  * @returns The instance of the class.
20
40
  */
21
- static async get(type, options) {
41
+ async get(type, options) {
22
42
  const args = options?.args || [];
43
+ const metadata = options?.metadata || {};
23
44
  const name = typeof type === 'string' ? type : type.name;
24
- const factoryContainer = this.factories[name];
45
+ if (!(name in this.factories)) {
46
+ this.factories[name] = [];
47
+ }
48
+ const factoryContainer = this.factories[name].find((f) => DiffUtility.isObjectDeepEquals(f.metadata, metadata));
25
49
  if (factoryContainer?.factory) {
26
50
  if (!Array.isArray(factoryContainer.factory)) {
27
51
  return factoryContainer.factory.create(...args);
@@ -31,13 +55,15 @@ export class Container {
31
55
  return factory.create(...args);
32
56
  }
33
57
  }
34
- const newFactoryContainer = {};
35
- this.factories[name] = newFactoryContainer;
58
+ const newFactoryContainer = {
59
+ metadata,
60
+ };
61
+ this.factories[name].push(newFactoryContainer);
36
62
  let promiseResolver;
37
63
  let promiseTimeout;
38
64
  const promise = new Promise((resolve, reject) => {
39
65
  promiseTimeout = setTimeout(() => {
40
- reject(new Error(`Timed out waiting for factory ${name} to resolve!`));
66
+ reject(new ContainerResolutionError('Timed out waiting for factory to resolve!', type));
41
67
  }, this.FACTORY_TIMEOUT_IN_MS);
42
68
  promiseResolver = resolve;
43
69
  });
@@ -48,37 +74,78 @@ export class Container {
48
74
  }
49
75
  return factory.create(...args);
50
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
+ }
51
91
  /**
52
92
  * `Container.registerFactory()` allows to register a factory for a class.
53
93
  *
54
94
  * @param type The type or name of the class for which the factory is registered.
55
95
  * @param factory The factory class being registered.
96
+ * @param options Distinguishes between different factories of the same class.
97
+ * - The `metadata` attaches custom metadata to the factory.
56
98
  */
57
- static registerFactory(type, factory) {
99
+ registerFactory(type, factory, options) {
100
+ const metadata = options?.metadata || {};
58
101
  const name = typeof type === 'string' ? type : type.name;
59
- const factoryContainer = this.factories[name];
102
+ if (!(name in this.factories)) {
103
+ this.factories[name] = [];
104
+ }
105
+ const factoryContainer = this.factories[name].find((f) => DiffUtility.isObjectDeepEquals(f.metadata, metadata));
60
106
  if (factoryContainer?.factory) {
61
107
  // If factory is not a promise set by get() above, it has already been registered.
62
108
  if (!Array.isArray(factoryContainer.factory)) {
63
- return;
109
+ throw new ContainerRegistrationError('Factory has already been registered!', type);
64
110
  }
111
+ factoryContainer.metadata = metadata;
65
112
  const resolve = factoryContainer.factory[1];
66
113
  resolve(factory);
67
114
  factoryContainer.factory = factory;
68
115
  return;
69
116
  }
70
- else {
71
- this.factories[name] = { factory };
72
- }
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);
73
128
  }
74
129
  /**
75
130
  * `Container.reset()` clears all registered factories and empties the container. This is mostly used in testing.
76
131
  */
77
- static reset() {
78
- this.FACTORY_TIMEOUT_IN_MS = 5000;
132
+ reset() {
133
+ this.FACTORY_TIMEOUT_IN_MS = 3000;
79
134
  for (const name in this.factories) {
80
135
  delete this.factories[name];
81
136
  }
137
+ this.startupUnhandledPromises.splice(0, this.startupUnhandledPromises.length);
138
+ }
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
+ }
82
149
  }
83
150
  /**
84
151
  * The Container, by default, will wait a maximum of 5 seconds for a factory to resolve and provide an instance.
@@ -86,17 +153,37 @@ export class Container {
86
153
  *
87
154
  * @param timeoutInMs The timeout in milliseconds.
88
155
  */
89
- static setFactoryTimeout(timeoutInMs) {
156
+ setFactoryTimeout(timeoutInMs) {
90
157
  this.FACTORY_TIMEOUT_IN_MS = timeoutInMs;
91
158
  }
92
159
  /**
93
160
  * `Container.unRegisterFactory()` will unregister all factories of a class.
94
161
  *
95
162
  * @param type The type or name of the class for which all factory is unregistered.
163
+ * @param options
96
164
  */
97
- static unRegisterFactory(type) {
165
+ unRegisterFactory(type, options) {
98
166
  const name = typeof type === 'string' ? type : type.name;
99
- 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]);
100
187
  }
101
188
  }
102
189
  //# sourceMappingURL=container.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"container.js","sourceRoot":"","sources":["../../../src/functions/container/container.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"container.js","sourceRoot":"","sources":["../../../src/functions/container/container.ts"],"names":[],"mappings":"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"}
@@ -1,20 +1,18 @@
1
1
  import type { Constructable } from '../../app.type.js';
2
+ import { Container } from './container.js';
2
3
  type FactoryMock<T> = {
4
+ metadata?: {
5
+ [key: string]: string;
6
+ };
3
7
  type: Constructable<T> | string;
4
8
  value: T;
5
9
  };
6
10
  type TestContainerSubjects = {
7
- importFrom?: Constructable<IPackageMock>[];
8
11
  mocks?: FactoryMock<unknown>[];
9
12
  };
10
13
  type TestContainerOptions = {
11
14
  factoryTimeoutInMs?: number;
12
15
  };
13
- export interface IPackageMock {
14
- destroy: () => Promise<void>;
15
- getMocks: () => FactoryMock<unknown>[];
16
- init(): Promise<void>;
17
- }
18
16
  /**
19
17
  * The TestContainer class is an isolated {@link Container} for tests.
20
18
  *
@@ -30,8 +28,8 @@ export interface IPackageMock {
30
28
  * Once tests are done executing, the `afterAll()` block cleans up the Container.
31
29
  */
32
30
  export declare class TestContainer {
33
- private static packageMocks;
34
- private static createTestFactory;
31
+ private static originalFactories;
32
+ private static bootstrap;
35
33
  /**
36
34
  * The `TestContainer.create()` method allows you to mock factories.
37
35
  *
@@ -39,25 +37,23 @@ export declare class TestContainer {
39
37
  * ```ts
40
38
  * beforeAll(async () => {
41
39
  * await TestContainer.create({
42
- * importFrom: [OctoAwsCdkPackageMock],
43
40
  * mocks: [
44
41
  * { type: MyClass, value: jest.fn() },
45
- * { type: AnotherClass, value: new AnotherClass() },
42
+ * { metadata: { key: 'value' }, type: AnotherClass, value: new AnotherClass() },
46
43
  * ],
47
44
  * }, { factoryTimeoutInMs: 500 });
48
45
  * });
49
46
  *
50
47
  * ```
51
48
  * @param subjects The subjects being mocked.
52
- * - `importFrom` is an array of {@link IPackageMock} classes, to import custom mocks,
53
- * such as from octo-aws-cdk package - [OctoAwsCdkPackageMock](/api/octo-aws-cdk/class/OctoAwsCdkPackageMock).
54
49
  * - `mocks` is an array of objects, to override the default factories.
50
+ * - Use `metadata?: { [key: string]: string }` to identify the factory being mocked.
55
51
  * - Use `type: Constructable<T> | string` to identify the class being mocked.
56
52
  * - Use `value: T` to provide the mocked value.
57
53
  * @param options Options to configure TestContainer.
58
54
  * - `factoryTimeoutInMs?: number` is to override the default container timeout.
59
55
  */
60
- static create(subjects: TestContainerSubjects, options?: TestContainerOptions): Promise<void>;
56
+ static create(subjects: TestContainerSubjects, options?: TestContainerOptions): Promise<Container>;
61
57
  /**
62
58
  * The `TestContainer.reset()` method will completely destroy all factories from the Container.
63
59
  * Because the entire Container is destroyed, and not just the mocks,