@quadnix/octo 0.0.29 → 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (362) hide show
  1. package/LICENSE +661 -0
  2. package/README.md +25 -3
  3. package/dist/app.type.d.ts +143 -4
  4. package/dist/app.type.js +80 -9
  5. package/dist/app.type.js.map +1 -1
  6. package/dist/decorators/action.decorator.d.ts +10 -6
  7. package/dist/decorators/action.decorator.js +19 -6
  8. package/dist/decorators/action.decorator.js.map +1 -1
  9. package/dist/decorators/anchor.decorator.d.ts +12 -5
  10. package/dist/decorators/anchor.decorator.js +12 -5
  11. package/dist/decorators/anchor.decorator.js.map +1 -1
  12. package/dist/decorators/enable-hook.decorator.d.ts +1 -1
  13. package/dist/decorators/enable-hook.decorator.js +1 -1
  14. package/dist/decorators/factory.decorator.d.ts +18 -34
  15. package/dist/decorators/factory.decorator.js +18 -34
  16. package/dist/decorators/factory.decorator.js.map +1 -1
  17. package/dist/decorators/model.decorator.d.ts +1 -1
  18. package/dist/decorators/model.decorator.js +1 -1
  19. package/dist/decorators/module.decorator.d.ts +16 -10
  20. package/dist/decorators/module.decorator.js +16 -10
  21. package/dist/decorators/module.decorator.js.map +1 -1
  22. package/dist/decorators/on-event.decorator.d.ts +5 -0
  23. package/dist/decorators/on-event.decorator.js +5 -0
  24. package/dist/decorators/on-event.decorator.js.map +1 -1
  25. package/dist/decorators/validate.decorator.d.ts +15 -1
  26. package/dist/decorators/validate.decorator.js +15 -1
  27. package/dist/decorators/validate.decorator.js.map +1 -1
  28. package/dist/errors/container.error.d.ts +18 -0
  29. package/dist/errors/container.error.js +18 -0
  30. package/dist/errors/container.error.js.map +1 -1
  31. package/dist/errors/index.d.ts +1 -0
  32. package/dist/errors/index.js +1 -0
  33. package/dist/errors/index.js.map +1 -1
  34. package/dist/errors/module.error.d.ts +6 -0
  35. package/dist/errors/module.error.js +6 -0
  36. package/dist/errors/module.error.js.map +1 -1
  37. package/dist/errors/node.error.d.ts +56 -0
  38. package/dist/errors/node.error.js +56 -0
  39. package/dist/errors/node.error.js.map +1 -1
  40. package/dist/errors/schema.error.d.ts +6 -0
  41. package/dist/errors/schema.error.js +6 -0
  42. package/dist/errors/schema.error.js.map +1 -1
  43. package/dist/errors/terraform.error.d.ts +19 -0
  44. package/dist/errors/terraform.error.js +23 -0
  45. package/dist/errors/terraform.error.js.map +1 -0
  46. package/dist/errors/transaction.error.d.ts +77 -0
  47. package/dist/errors/transaction.error.js +83 -0
  48. package/dist/errors/transaction.error.js.map +1 -1
  49. package/dist/events/action.event.d.ts +0 -2
  50. package/dist/events/action.event.js +0 -2
  51. package/dist/events/action.event.js.map +1 -1
  52. package/dist/events/event.model.d.ts +21 -5
  53. package/dist/events/event.model.js +11 -5
  54. package/dist/events/event.model.js.map +1 -1
  55. package/dist/events/hook/commit.hook.event.d.ts +0 -6
  56. package/dist/events/hook/commit.hook.event.js +0 -6
  57. package/dist/events/hook/commit.hook.event.js.map +1 -1
  58. package/dist/events/hook/hook.event.d.ts +0 -2
  59. package/dist/events/hook/hook.event.js +0 -2
  60. package/dist/events/hook/hook.event.js.map +1 -1
  61. package/dist/events/hook/model.hook.event.d.ts +0 -6
  62. package/dist/events/hook/model.hook.event.js +0 -6
  63. package/dist/events/hook/model.hook.event.js.map +1 -1
  64. package/dist/events/hook/resource.hook.event.d.ts +0 -6
  65. package/dist/events/hook/resource.hook.event.js +0 -6
  66. package/dist/events/hook/resource.hook.event.js.map +1 -1
  67. package/dist/events/index.d.ts +3 -0
  68. package/dist/events/index.js +3 -0
  69. package/dist/events/index.js.map +1 -1
  70. package/dist/events/mode-result.event.d.ts +57 -0
  71. package/dist/events/mode-result.event.js +24 -0
  72. package/dist/events/mode-result.event.js.map +1 -0
  73. package/dist/events/mode.event.d.ts +57 -0
  74. package/dist/events/mode.event.js +32 -0
  75. package/dist/events/mode.event.js.map +1 -0
  76. package/dist/events/module.event.d.ts +0 -2
  77. package/dist/events/module.event.js +0 -2
  78. package/dist/events/module.event.js.map +1 -1
  79. package/dist/events/registration.event.d.ts +18 -14
  80. package/dist/events/registration.event.js +18 -14
  81. package/dist/events/registration.event.js.map +1 -1
  82. package/dist/events/serialization.event.d.ts +15 -12
  83. package/dist/events/serialization.event.js +15 -12
  84. package/dist/events/serialization.event.js.map +1 -1
  85. package/dist/events/terraform.event.d.ts +42 -0
  86. package/dist/events/terraform.event.js +31 -0
  87. package/dist/events/terraform.event.js.map +1 -0
  88. package/dist/events/transaction.event.d.ts +0 -37
  89. package/dist/events/transaction.event.js +0 -28
  90. package/dist/events/transaction.event.js.map +1 -1
  91. package/dist/functions/container/container.d.ts +54 -13
  92. package/dist/functions/container/container.js +63 -18
  93. package/dist/functions/container/container.js.map +1 -1
  94. package/dist/functions/container/test-container.d.ts +43 -29
  95. package/dist/functions/container/test-container.js +71 -43
  96. package/dist/functions/container/test-container.js.map +1 -1
  97. package/dist/functions/dependency/dependency.d.ts +82 -8
  98. package/dist/functions/dependency/dependency.js +80 -14
  99. package/dist/functions/dependency/dependency.js.map +1 -1
  100. package/dist/functions/diff/aggregate-resource-actions.d.ts +19 -0
  101. package/dist/functions/diff/aggregate-resource-actions.js +41 -0
  102. package/dist/functions/diff/aggregate-resource-actions.js.map +1 -0
  103. package/dist/functions/diff/diff-metadata.d.ts +21 -3
  104. package/dist/functions/diff/diff-metadata.js +18 -0
  105. package/dist/functions/diff/diff-metadata.js.map +1 -1
  106. package/dist/functions/diff/diff.d.ts +55 -1
  107. package/dist/functions/diff/diff.js +44 -3
  108. package/dist/functions/diff/diff.js.map +1 -1
  109. package/dist/functions/diff/diff.utility.d.ts +17 -2
  110. package/dist/functions/diff/diff.utility.js +53 -38
  111. package/dist/functions/diff/diff.utility.js.map +1 -1
  112. package/dist/functions/hook/commit.hook.d.ts +16 -1
  113. package/dist/functions/hook/commit.hook.js +21 -6
  114. package/dist/functions/hook/commit.hook.js.map +1 -1
  115. package/dist/functions/hook/model-action.hook.d.ts +16 -1
  116. package/dist/functions/hook/model-action.hook.js +21 -6
  117. package/dist/functions/hook/model-action.hook.js.map +1 -1
  118. package/dist/functions/hook/resource-action.hook.d.ts +16 -1
  119. package/dist/functions/hook/resource-action.hook.js +21 -6
  120. package/dist/functions/hook/resource-action.hook.js.map +1 -1
  121. package/dist/functions/node/node-action.abstract.d.ts +23 -0
  122. package/dist/functions/node/node-action.abstract.js +20 -0
  123. package/dist/functions/node/node-action.abstract.js.map +1 -1
  124. package/dist/functions/node/node.abstract.d.ts +56 -5
  125. package/dist/functions/node/node.abstract.js +85 -12
  126. package/dist/functions/node/node.abstract.js.map +1 -1
  127. package/dist/functions/node/node.interface.d.ts +1 -0
  128. package/dist/functions/schema/schema.d.ts +7 -0
  129. package/dist/functions/schema/schema.js +9 -0
  130. package/dist/functions/schema/schema.js.map +1 -1
  131. package/dist/index.d.ts +5 -1
  132. package/dist/index.js +4 -1
  133. package/dist/index.js.map +1 -1
  134. package/dist/main.d.ts +244 -14
  135. package/dist/main.js +361 -72
  136. package/dist/main.js.map +1 -1
  137. package/dist/models/account/account.model.d.ts +37 -7
  138. package/dist/models/account/account.model.js +40 -8
  139. package/dist/models/account/account.model.js.map +1 -1
  140. package/dist/models/account/account.schema.d.ts +13 -1
  141. package/dist/models/account/account.schema.js +12 -0
  142. package/dist/models/account/account.schema.js.map +1 -1
  143. package/dist/models/app/app.model.d.ts +16 -1
  144. package/dist/models/app/app.model.js +19 -4
  145. package/dist/models/app/app.model.js.map +1 -1
  146. package/dist/models/app/app.schema.d.ts +6 -0
  147. package/dist/models/app/app.schema.js +6 -0
  148. package/dist/models/app/app.schema.js.map +1 -1
  149. package/dist/models/deployment/deployment.model.d.ts +13 -1
  150. package/dist/models/deployment/deployment.model.js +16 -4
  151. package/dist/models/deployment/deployment.model.js.map +1 -1
  152. package/dist/models/deployment/deployment.schema.d.ts +2 -0
  153. package/dist/models/deployment/deployment.schema.js +2 -0
  154. package/dist/models/deployment/deployment.schema.js.map +1 -1
  155. package/dist/models/environment/environment.model.d.ts +13 -1
  156. package/dist/models/environment/environment.model.js +20 -8
  157. package/dist/models/environment/environment.model.js.map +1 -1
  158. package/dist/models/environment/environment.schema.d.ts +2 -0
  159. package/dist/models/environment/environment.schema.js +2 -0
  160. package/dist/models/environment/environment.schema.js.map +1 -1
  161. package/dist/models/execution/execution.model.d.ts +20 -2
  162. package/dist/models/execution/execution.model.js +46 -28
  163. package/dist/models/execution/execution.model.js.map +1 -1
  164. package/dist/models/execution/execution.schema.d.ts +11 -0
  165. package/dist/models/execution/execution.schema.js +11 -0
  166. package/dist/models/execution/execution.schema.js.map +1 -1
  167. package/dist/models/filesystem/filesystem.model.d.ts +27 -1
  168. package/dist/models/filesystem/filesystem.model.js +30 -4
  169. package/dist/models/filesystem/filesystem.model.js.map +1 -1
  170. package/dist/models/filesystem/filesystem.schema.d.ts +5 -0
  171. package/dist/models/filesystem/filesystem.schema.js +5 -0
  172. package/dist/models/filesystem/filesystem.schema.js.map +1 -1
  173. package/dist/models/image/image.model.d.ts +17 -4
  174. package/dist/models/image/image.model.js +20 -7
  175. package/dist/models/image/image.model.js.map +1 -1
  176. package/dist/models/image/image.schema.d.ts +8 -0
  177. package/dist/models/image/image.schema.js +8 -0
  178. package/dist/models/image/image.schema.js.map +1 -1
  179. package/dist/models/model-action.interface.d.ts +17 -4
  180. package/dist/models/model.abstract.d.ts +96 -1
  181. package/dist/models/model.abstract.js +106 -7
  182. package/dist/models/model.abstract.js.map +1 -1
  183. package/dist/models/model.interface.d.ts +3 -0
  184. package/dist/models/pipeline/pipeline.model.d.ts +13 -1
  185. package/dist/models/pipeline/pipeline.model.js +18 -6
  186. package/dist/models/pipeline/pipeline.model.js.map +1 -1
  187. package/dist/models/pipeline/pipeline.schema.d.ts +8 -0
  188. package/dist/models/pipeline/pipeline.schema.js +8 -0
  189. package/dist/models/pipeline/pipeline.schema.js.map +1 -1
  190. package/dist/models/region/region.model.d.ts +16 -1
  191. package/dist/models/region/region.model.js +19 -4
  192. package/dist/models/region/region.model.js.map +1 -1
  193. package/dist/models/region/region.schema.d.ts +6 -0
  194. package/dist/models/region/region.schema.js +6 -0
  195. package/dist/models/region/region.schema.js.map +1 -1
  196. package/dist/models/server/server.model.d.ts +13 -1
  197. package/dist/models/server/server.model.js +16 -4
  198. package/dist/models/server/server.model.js.map +1 -1
  199. package/dist/models/server/server.schema.d.ts +3 -1
  200. package/dist/models/server/server.schema.js +3 -1
  201. package/dist/models/server/server.schema.js.map +1 -1
  202. package/dist/models/service/service.model.d.ts +15 -1
  203. package/dist/models/service/service.model.js +15 -1
  204. package/dist/models/service/service.model.js.map +1 -1
  205. package/dist/models/service/service.schema.d.ts +4 -1
  206. package/dist/models/service/service.schema.js +4 -1
  207. package/dist/models/service/service.schema.js.map +1 -1
  208. package/dist/models/subnet/subnet.model.d.ts +27 -3
  209. package/dist/models/subnet/subnet.model.js +40 -16
  210. package/dist/models/subnet/subnet.model.js.map +1 -1
  211. package/dist/models/subnet/subnet.schema.d.ts +9 -0
  212. package/dist/models/subnet/subnet.schema.js +9 -0
  213. package/dist/models/subnet/subnet.schema.js.map +1 -1
  214. package/dist/modes/apply-transaction.d.ts +23 -0
  215. package/dist/modes/apply-transaction.js +25 -0
  216. package/dist/modes/apply-transaction.js.map +1 -0
  217. package/dist/modes/commit.mode.d.ts +54 -0
  218. package/dist/modes/commit.mode.js +235 -0
  219. package/dist/modes/commit.mode.js.map +1 -0
  220. package/dist/modes/generate.mode.d.ts +29 -0
  221. package/dist/modes/generate.mode.js +49 -0
  222. package/dist/modes/generate.mode.js.map +1 -0
  223. package/dist/modes/run-action.mode.d.ts +30 -0
  224. package/dist/modes/run-action.mode.js +140 -0
  225. package/dist/modes/run-action.mode.js.map +1 -0
  226. package/dist/modes/validate.mode.d.ts +162 -0
  227. package/dist/modes/validate.mode.js +480 -0
  228. package/dist/modes/validate.mode.js.map +1 -0
  229. package/dist/modules/module.abstract.d.ts +51 -0
  230. package/dist/modules/module.abstract.js +36 -0
  231. package/dist/modules/module.abstract.js.map +1 -1
  232. package/dist/modules/module.container.d.ts +36 -0
  233. package/dist/modules/module.container.js +36 -0
  234. package/dist/modules/module.container.js.map +1 -1
  235. package/dist/modules/test-module.container.d.ts +139 -24
  236. package/dist/modules/test-module.container.js +410 -163
  237. package/dist/modules/test-module.container.js.map +1 -1
  238. package/dist/overlays/anchor.abstract.d.ts +32 -1
  239. package/dist/overlays/anchor.abstract.js +42 -11
  240. package/dist/overlays/anchor.abstract.js.map +1 -1
  241. package/dist/overlays/anchor.schema.d.ts +21 -0
  242. package/dist/overlays/anchor.schema.js +21 -0
  243. package/dist/overlays/anchor.schema.js.map +1 -1
  244. package/dist/overlays/overlay-data.repository.d.ts +18 -0
  245. package/dist/overlays/overlay-data.repository.js +18 -0
  246. package/dist/overlays/overlay-data.repository.js.map +1 -1
  247. package/dist/overlays/overlay.abstract.d.ts +56 -1
  248. package/dist/overlays/overlay.abstract.js +79 -20
  249. package/dist/overlays/overlay.abstract.js.map +1 -1
  250. package/dist/overlays/overlay.schema.d.ts +20 -0
  251. package/dist/overlays/overlay.schema.js +20 -0
  252. package/dist/overlays/overlay.schema.js.map +1 -1
  253. package/dist/resources/resource-action.interface.d.ts +26 -2
  254. package/dist/resources/resource-data.repository.d.ts +63 -1
  255. package/dist/resources/resource-data.repository.js +94 -4
  256. package/dist/resources/resource-data.repository.js.map +1 -1
  257. package/dist/resources/resource.abstract.d.ts +118 -3
  258. package/dist/resources/resource.abstract.js +166 -33
  259. package/dist/resources/resource.abstract.js.map +1 -1
  260. package/dist/resources/resource.schema.d.ts +29 -1
  261. package/dist/resources/resource.schema.js +28 -0
  262. package/dist/resources/resource.schema.js.map +1 -1
  263. package/dist/resources/terraform-resource.abstract.d.ts +44 -0
  264. package/dist/resources/terraform-resource.abstract.js +45 -0
  265. package/dist/resources/terraform-resource.abstract.js.map +1 -0
  266. package/dist/services/event/event.service.d.ts +30 -3
  267. package/dist/services/event/event.service.js +58 -16
  268. package/dist/services/event/event.service.js.map +1 -1
  269. package/dist/services/input/input.service.d.ts +52 -3
  270. package/dist/services/input/input.service.js +72 -8
  271. package/dist/services/input/input.service.js.map +1 -1
  272. package/dist/services/schema-translation/schema-translation.service.d.ts +9 -0
  273. package/dist/services/schema-translation/schema-translation.service.js +9 -0
  274. package/dist/services/schema-translation/schema-translation.service.js.map +1 -1
  275. package/dist/services/serialization/model/model-serialization.service.d.ts +26 -2
  276. package/dist/services/serialization/model/model-serialization.service.js +110 -62
  277. package/dist/services/serialization/model/model-serialization.service.js.map +1 -1
  278. package/dist/services/serialization/resource/resource-serialization.service.d.ts +33 -4
  279. package/dist/services/serialization/resource/resource-serialization.service.js +64 -28
  280. package/dist/services/serialization/resource/resource-serialization.service.js.map +1 -1
  281. package/dist/services/state-management/file-app-lock.utility.d.ts +43 -0
  282. package/dist/services/state-management/file-app-lock.utility.js +124 -0
  283. package/dist/services/state-management/file-app-lock.utility.js.map +1 -0
  284. package/dist/services/state-management/local-encryption.state-provider.d.ts +53 -2
  285. package/dist/services/state-management/local-encryption.state-provider.js +75 -49
  286. package/dist/services/state-management/local-encryption.state-provider.js.map +1 -1
  287. package/dist/services/state-management/local.state-provider.d.ts +49 -2
  288. package/dist/services/state-management/local.state-provider.js +70 -49
  289. package/dist/services/state-management/local.state-provider.js.map +1 -1
  290. package/dist/services/state-management/state-management.service.d.ts +141 -6
  291. package/dist/services/state-management/state-management.service.js +149 -4
  292. package/dist/services/state-management/state-management.service.js.map +1 -1
  293. package/dist/services/state-management/state-provider.interface.d.ts +55 -1
  294. package/dist/services/state-management/terraform-state.service.d.ts +76 -0
  295. package/dist/services/state-management/terraform-state.service.js +154 -0
  296. package/dist/services/state-management/terraform-state.service.js.map +1 -0
  297. package/dist/services/state-management/test.state-provider.d.ts +38 -1
  298. package/dist/services/state-management/test.state-provider.js +52 -21
  299. package/dist/services/state-management/test.state-provider.js.map +1 -1
  300. package/dist/services/terraform/terraform.service.d.ts +426 -0
  301. package/dist/services/terraform/terraform.service.js +995 -0
  302. package/dist/services/terraform/terraform.service.js.map +1 -0
  303. package/dist/services/terraform/terraform.type.d.ts +387 -0
  304. package/dist/services/terraform/terraform.type.js +579 -0
  305. package/dist/services/terraform/terraform.type.js.map +1 -0
  306. package/dist/services/transaction/transaction.service.d.ts +86 -10
  307. package/dist/services/transaction/transaction.service.js +387 -232
  308. package/dist/services/transaction/transaction.service.js.map +1 -1
  309. package/dist/services/validation/validation.service.d.ts +13 -1
  310. package/dist/services/validation/validation.service.js +12 -0
  311. package/dist/services/validation/validation.service.js.map +1 -1
  312. package/dist/utilities/array/array.utility.d.ts +3 -0
  313. package/dist/utilities/array/array.utility.js +3 -0
  314. package/dist/utilities/array/array.utility.js.map +1 -1
  315. package/dist/utilities/file/file.utility.d.ts +15 -0
  316. package/dist/utilities/file/file.utility.js +18 -1
  317. package/dist/utilities/file/file.utility.js.map +1 -1
  318. package/dist/utilities/hcl/hcl.utility.d.ts +61 -0
  319. package/dist/utilities/hcl/hcl.utility.js +229 -0
  320. package/dist/utilities/hcl/hcl.utility.js.map +1 -0
  321. package/dist/utilities/node/node.utility.d.ts +3 -0
  322. package/dist/utilities/node/node.utility.js +3 -0
  323. package/dist/utilities/node/node.utility.js.map +1 -1
  324. package/dist/utilities/object/object.utility.d.ts +12 -0
  325. package/dist/utilities/object/object.utility.js +12 -0
  326. package/dist/utilities/object/object.utility.js.map +1 -1
  327. package/dist/utilities/project/project.utility.d.ts +28 -0
  328. package/dist/utilities/project/project.utility.js +35 -0
  329. package/dist/utilities/project/project.utility.js.map +1 -0
  330. package/dist/utilities/string/string.utility.d.ts +21 -0
  331. package/dist/utilities/string/string.utility.js +39 -0
  332. package/dist/utilities/string/string.utility.js.map +1 -0
  333. package/dist/utilities/terraform/terraform.utility.d.ts +227 -0
  334. package/dist/utilities/terraform/terraform.utility.js +434 -0
  335. package/dist/utilities/terraform/terraform.utility.js.map +1 -0
  336. package/dist/utilities/test-helpers/test-classes.d.ts +18 -31
  337. package/dist/utilities/test-helpers/test-classes.js +18 -41
  338. package/dist/utilities/test-helpers/test-classes.js.map +1 -1
  339. package/dist/utilities/test-helpers/test-models.js +12 -0
  340. package/dist/utilities/test-helpers/test-models.js.map +1 -1
  341. package/dist/utilities/test-helpers/test-modes.d.ts +315 -0
  342. package/dist/utilities/test-helpers/test-modes.js +463 -0
  343. package/dist/utilities/test-helpers/test-modes.js.map +1 -0
  344. package/dist/utilities/test-helpers/test-modules.d.ts +41 -0
  345. package/dist/utilities/test-helpers/test-modules.js +79 -0
  346. package/dist/utilities/test-helpers/test-modules.js.map +1 -0
  347. package/dist/utilities/test-helpers/test-overlays.d.ts +17 -1
  348. package/dist/utilities/test-helpers/test-overlays.js +49 -5
  349. package/dist/utilities/test-helpers/test-overlays.js.map +1 -1
  350. package/dist/utilities/test-helpers/test-resources.d.ts +19 -1
  351. package/dist/utilities/test-helpers/test-resources.js +61 -3
  352. package/dist/utilities/test-helpers/test-resources.js.map +1 -1
  353. package/dist/utilities/validation/validation.utility.d.ts +24 -0
  354. package/dist/utilities/validation/validation.utility.js +24 -0
  355. package/dist/utilities/validation/validation.utility.js.map +1 -1
  356. package/package.json +6 -5
  357. package/dist/services/capture/capture.service.d.ts +0 -19
  358. package/dist/services/capture/capture.service.js +0 -43
  359. package/dist/services/capture/capture.service.js.map +0 -1
  360. package/dist/utilities/cidr/cidr.utility.d.ts +0 -10
  361. package/dist/utilities/cidr/cidr.utility.js +0 -51
  362. package/dist/utilities/cidr/cidr.utility.js.map +0 -1
@@ -12,11 +12,26 @@ import { DiffUtility } from '../diff/diff.utility.js';
12
12
  * @group Functions/Container
13
13
  */
14
14
  export class Container {
15
+ /**
16
+ * @internal
17
+ */
15
18
  constructor() {
16
- this.FACTORY_TIMEOUT_IN_MS = 3000;
17
19
  this.factories = {};
20
+ this.FACTORY_TIMEOUT_IN_MS = 3000;
18
21
  this.startupUnhandledPromises = [];
19
22
  }
23
+ /**
24
+ * The Container is a singleton - this is how you reach it.
25
+ */
26
+ static getInstance() {
27
+ if (!this.instance) {
28
+ this.instance = new Container();
29
+ }
30
+ return this.instance;
31
+ }
32
+ /**
33
+ * @internal
34
+ */
20
35
  copyFactories() {
21
36
  const newFactoriesCopy = {};
22
37
  for (const [type, factoryContainers] of Object.entries(this.factories)) {
@@ -31,8 +46,9 @@ export class Container {
31
46
  return newFactoriesCopy;
32
47
  }
33
48
  /**
34
- * `container.get()` allows to get an instance of a class using its factory.
35
- * If the factory is not yet registered, it places a blocking promise in the queue to wait for the registration.
49
+ * To get an instance of a class from its factory.
50
+ * If the factory is not registered yet, this waits for it, and times out - see
51
+ * {@link Container.setFactoryTimeout}.
36
52
  *
37
53
  * @param type The type or name of the class to get.
38
54
  * @param options Allows selection of a specific factory to use to get the instance.
@@ -76,12 +92,9 @@ export class Container {
76
92
  }
77
93
  return factory.create(...args);
78
94
  }
79
- static getInstance() {
80
- if (!this.instance) {
81
- this.instance = new Container();
82
- }
83
- return this.instance;
84
- }
95
+ /**
96
+ * Whether a factory is registered for the class.
97
+ */
85
98
  has(type, options) {
86
99
  const metadata = options?.metadata || {};
87
100
  const name = typeof type === 'string' ? type : type.name;
@@ -91,7 +104,8 @@ export class Container {
91
104
  return this.factories[name].some((f) => DiffUtility.isObjectDeepEquals(f.metadata, metadata));
92
105
  }
93
106
  /**
94
- * `Container.registerFactory()` allows to register a factory for a class.
107
+ * To register a factory for a class. Prefer the {@link Factory} decorator; call this directly only
108
+ * when the factory is built at runtime.
95
109
  *
96
110
  * @param type The type or name of the class for which the factory is registered.
97
111
  * @param factory The factory class being registered.
@@ -118,18 +132,41 @@ export class Container {
118
132
  }
119
133
  this.factories[name].push({ factory, metadata });
120
134
  }
135
+ /**
136
+ * @internal
137
+ */
138
+ registerStartupUnhandledPromise(promise) {
139
+ this.startupUnhandledPromises.push(promise);
140
+ }
141
+ /**
142
+ * To register a ready-made instance, instead of a factory that builds one.
143
+ */
121
144
  registerValue(type, value, options) {
122
145
  this.registerFactory(type, class {
146
+ /**
147
+ * @internal
148
+ */
123
149
  static async create() {
124
150
  return value;
125
151
  }
126
152
  }, options);
127
153
  }
128
- registerStartupUnhandledPromise(promise) {
129
- this.startupUnhandledPromises.push(promise);
154
+ /**
155
+ * To register a ready-made instance over whatever is already registered under the same type and
156
+ * metadata, rather than refusing as {@link Container.registerValue} does.
157
+ *
158
+ * Registering once is the right default - two factories for one type is usually a mistake. This is
159
+ * for the callers that legitimately register the same thing more than once: a module whose
160
+ * `onInit` runs on every `compose()`, and a test replacing a factory with a mock.
161
+ */
162
+ replaceValue(type, value, options) {
163
+ if (this.has(type, options)) {
164
+ this.unRegisterFactory(type, options);
165
+ }
166
+ this.registerValue(type, value, options);
130
167
  }
131
168
  /**
132
- * `Container.reset()` clears all registered factories and empties the container. This is mostly used in testing.
169
+ * To clear every registered factory and empty the container. Mostly used in testing.
133
170
  */
134
171
  reset() {
135
172
  this.FACTORY_TIMEOUT_IN_MS = 3000;
@@ -138,6 +175,9 @@ export class Container {
138
175
  }
139
176
  this.startupUnhandledPromises.splice(0, this.startupUnhandledPromises.length);
140
177
  }
178
+ /**
179
+ * @internal
180
+ */
141
181
  setFactories(factories) {
142
182
  for (const [type, factoryContainers] of Object.entries(factories)) {
143
183
  this.factories[type] = [];
@@ -150,19 +190,21 @@ export class Container {
150
190
  }
151
191
  }
152
192
  /**
153
- * The Container, by default, will wait a maximum of 5 seconds for a factory to resolve and provide an instance.
154
- * This method allows to change that timeout.
193
+ * To change how long `get()` waits for a factory to be registered.
155
194
  *
195
+ * @defaultValue `3000`
156
196
  * @param timeoutInMs The timeout in milliseconds.
197
+ *
157
198
  */
158
199
  setFactoryTimeout(timeoutInMs) {
159
200
  this.FACTORY_TIMEOUT_IN_MS = timeoutInMs;
160
201
  }
161
202
  /**
162
- * `Container.unRegisterFactory()` will unregister all factories of a class.
203
+ * To unregister a class's factories, so that your own can take their place.
163
204
  *
164
- * @param type The type or name of the class for which all factory is unregistered.
165
- * @param options
205
+ * @param type The type or name of the class whose factories are unregistered.
206
+ * @param options Pass `metadata` to unregister one specific factory. Without it, all of the
207
+ * class's factories are unregistered.
166
208
  */
167
209
  unRegisterFactory(type, options) {
168
210
  const name = typeof type === 'string' ? type : type.name;
@@ -176,6 +218,9 @@ export class Container {
176
218
  this.factories[name].splice(index, 1);
177
219
  }
178
220
  }
221
+ /**
222
+ * @internal
223
+ */
179
224
  async waitToResolveAllFactories() {
180
225
  const promiseToResolveAllFactories = [];
181
226
  for (const name of Object.keys(this.factories)) {
@@ -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":"AACA,OAAO,EAAE,0BAA0B,EAAE,wBAAwB,EAAE,MAAM,uBAAuB,CAAC;AAC7F,OAAO,EAAE,WAAW,EAAE,MAAM,yBAAyB,CAAC;AAMtD;;;;;;;;;;GAUG;AACH,MAAM,OAAO,SAAS;IASpB;;OAEG;IACH;QATiB,cAAS,GAAmD,EAAE,CAAC;QAExE,0BAAqB,GAAG,IAAI,CAAC;QAEpB,6BAAwB,GAAuB,EAAE,CAAC;IAK5C,CAAC;IAExB;;OAEG;IACH,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;;OAEG;IACH,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;;;;;;;;;;OAUG;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;;OAEG;IACH,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;;;;;;;;OAQG;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;;OAEG;IACH,+BAA+B,CAAI,OAAmB;QACpD,IAAI,CAAC,wBAAwB,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;IAC9C,CAAC;IAED;;OAEG;IACH,aAAa,CACX,IAA+B,EAC/B,KAAQ,EACR,OAEC;QAED,IAAI,CAAC,eAAe,CAClB,IAAI,EACJ;YACE;;eAEG;YACH,MAAM,CAAC,KAAK,CAAC,MAAM;gBACjB,OAAO,KAAK,CAAC;YACf,CAAC;SACF,EACD,OAAO,CACR,CAAC;IACJ,CAAC;IAED;;;;;;;OAOG;IACH,YAAY,CACV,IAA+B,EAC/B,KAAQ,EACR,OAEC;QAED,IAAI,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,OAAO,CAAC,EAAE,CAAC;YAC5B,IAAI,CAAC,iBAAiB,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;QACxC,CAAC;QACD,IAAI,CAAC,aAAa,CAAC,IAAI,EAAE,KAAK,EAAE,OAAO,CAAC,CAAC;IAC3C,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;;OAEG;IACH,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;;;;;;OAMG;IACH,iBAAiB,CAAC,WAAmB;QACnC,IAAI,CAAC,qBAAqB,GAAG,WAAW,CAAC;IAC3C,CAAC;IAED;;;;;;OAMG;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;;OAEG;IACH,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"}
@@ -12,40 +12,46 @@ type TestContainerSubjects = {
12
12
  };
13
13
  type TestContainerOptions = {
14
14
  factoryTimeoutInMs?: number;
15
+ force?: boolean;
15
16
  };
16
17
  /**
17
- * The TestContainer class is an isolated {@link Container} for tests.
18
+ * An isolated {@link Container} for tests.
19
+ *
20
+ * The Container is a process-wide singleton, which makes it awkward to mock. TestContainer solves
21
+ * that: create one in `beforeEach()` and it takes over the Container for that test, letting you
22
+ * replace any factory with a stub. `reset()` in `afterEach()` puts it back.
18
23
  *
19
24
  * :::info Info
20
- * A test framework like Jest, supports parallel test executions in different cores of the machine.
21
- * Each test is a single test file, whose `it()` blocks are executed serially.
25
+ * A test framework like Jest runs test *files* in parallel across cores, and the `it()` blocks
26
+ * within a file serially. So a TestContainer never leaks into a test running in parallel.
22
27
  * :::
23
28
  *
24
- * TestContainer is created with testing framework's parallel execution in mind.
25
- * A TestContainer should be created in the `beforeAll()` block of your test,
26
- * which modifies the Container for the duration of the test.
27
- * This TestContainer does not affect other tests in parallel since they are on a separate machine core.
28
- * Once tests are done executing, the `afterAll()` block cleans up the Container.
29
+ * @example
30
+ * ```ts
31
+ * beforeEach(async () => {
32
+ * container = await TestContainer.create({ mocks: [] }, { factoryTimeoutInMs: 500 });
33
+ * });
34
+ *
35
+ * afterEach(async () => {
36
+ * await TestContainer.reset();
37
+ * });
38
+ * ```
29
39
  *
30
40
  * @group Functions/Container
31
41
  */
32
42
  export declare class TestContainer {
33
43
  private static originalFactories;
34
- private static bootstrap;
35
44
  /**
36
- * The `TestContainer.create()` method allows you to mock factories.
45
+ * To take over the Container for one test, replacing the factories you name.
37
46
  *
38
47
  * @example
39
48
  * ```ts
40
- * beforeAll(async () => {
41
- * await TestContainer.create({
42
- * mocks: [
43
- * { type: MyClass, value: jest.fn() },
44
- * { metadata: { key: 'value' }, type: AnotherClass, value: new AnotherClass() },
45
- * ],
46
- * }, { factoryTimeoutInMs: 500 });
47
- * });
48
- *
49
+ * await TestContainer.create({
50
+ * mocks: [
51
+ * { type: MyClass, value: jest.fn() },
52
+ * { metadata: { key: 'value' }, type: AnotherClass, value: new AnotherClass() },
53
+ * ],
54
+ * }, { factoryTimeoutInMs: 500 });
49
55
  * ```
50
56
  * @param subjects The subjects being mocked.
51
57
  * - `mocks` is an array of objects, to override the default factories.
@@ -54,20 +60,28 @@ export declare class TestContainer {
54
60
  * - Use `value: T` to provide the mocked value.
55
61
  * @param options Options to configure TestContainer.
56
62
  * - `factoryTimeoutInMs?: number` is to override the default container timeout.
63
+ * - `force?: boolean` performs a complete container reset.
57
64
  */
58
65
  static create(subjects: TestContainerSubjects, options?: TestContainerOptions): Promise<Container>;
59
66
  /**
60
- * The `TestContainer.reset()` method will completely destroy all factories from the Container.
61
- * Because the entire Container is destroyed, and not just the mocks,
62
- * it must always be called in your `afterAll()` block.
63
- *
64
- * @example
65
- * ```ts
66
- * afterAll(async () => {
67
- * await TestContainer.reset();
68
- * });
69
- * ```
67
+ * To destroy every factory in the Container. Because it destroys the whole Container and not only
68
+ * the mocks, it must always be called in your teardown block - otherwise the next test starts
69
+ * against a Container this test left behind.
70
70
  */
71
71
  static reset(): Promise<void>;
72
+ /**
73
+ * Bootstrap the Container with the necessary factories internal to Octo.
74
+ * Between test runs, when the container is reset, many of Octo's internal classes must be reset as well.
75
+ * Since these classes are not exposed outside of Octo, we must bootstrap them.
76
+ *
77
+ * Some factories defined in Octo using `@Factory` must be placed here,
78
+ * the exact criteria being any factory that needs to reset its state.
79
+ *
80
+ * Exceptions:
81
+ * - {@link ModelSerializationService}: We do not want to loose class mapping already instantiated via decorators.
82
+ * - {@link ResourceSerializationService}: We do not want to loose class mapping already instantiated via decorators.
83
+ * - {@link TransactionService}: We do not want to loose action mapping already instantiated via decorators.
84
+ */
85
+ private static bootstrap;
72
86
  }
73
87
  export {};
@@ -1,51 +1,50 @@
1
1
  import { ModuleContainer } from '../../modules/module.container.js';
2
2
  import { OverlayDataRepository } from '../../overlays/overlay-data.repository.js';
3
3
  import { ResourceDataRepository, } from '../../resources/resource-data.repository.js';
4
- import { CaptureService } from '../../services/capture/capture.service.js';
4
+ import { EventService } from '../../services/event/event.service.js';
5
5
  import { InputService } from '../../services/input/input.service.js';
6
+ import { ModelSerializationService } from '../../services/serialization/model/model-serialization.service.js';
7
+ import { ResourceSerializationService } from '../../services/serialization/resource/resource-serialization.service.js';
8
+ import { TerraformService } from '../../services/terraform/terraform.service.js';
9
+ import { TransactionService } from '../../services/transaction/transaction.service.js';
6
10
  import { Container } from './container.js';
7
11
  /**
8
- * The TestContainer class is an isolated {@link Container} for tests.
12
+ * An isolated {@link Container} for tests.
13
+ *
14
+ * The Container is a process-wide singleton, which makes it awkward to mock. TestContainer solves
15
+ * that: create one in `beforeEach()` and it takes over the Container for that test, letting you
16
+ * replace any factory with a stub. `reset()` in `afterEach()` puts it back.
9
17
  *
10
18
  * :::info Info
11
- * A test framework like Jest, supports parallel test executions in different cores of the machine.
12
- * Each test is a single test file, whose `it()` blocks are executed serially.
19
+ * A test framework like Jest runs test *files* in parallel across cores, and the `it()` blocks
20
+ * within a file serially. So a TestContainer never leaks into a test running in parallel.
13
21
  * :::
14
22
  *
15
- * TestContainer is created with testing framework's parallel execution in mind.
16
- * A TestContainer should be created in the `beforeAll()` block of your test,
17
- * which modifies the Container for the duration of the test.
18
- * This TestContainer does not affect other tests in parallel since they are on a separate machine core.
19
- * Once tests are done executing, the `afterAll()` block cleans up the Container.
23
+ * @example
24
+ * ```ts
25
+ * beforeEach(async () => {
26
+ * container = await TestContainer.create({ mocks: [] }, { factoryTimeoutInMs: 500 });
27
+ * });
28
+ *
29
+ * afterEach(async () => {
30
+ * await TestContainer.reset();
31
+ * });
32
+ * ```
20
33
  *
21
34
  * @group Functions/Container
22
35
  */
23
36
  export class TestContainer {
24
- static async bootstrap(container) {
25
- await container.get(OverlayDataRepository, {
26
- args: [true, []],
27
- });
28
- await container.get(ResourceDataRepository, {
29
- args: [true, [], [], []],
30
- });
31
- await container.get(CaptureService, { args: [true] });
32
- await container.get(InputService, { args: [true] });
33
- await container.get(ModuleContainer, { args: [true] });
34
- }
35
37
  /**
36
- * The `TestContainer.create()` method allows you to mock factories.
38
+ * To take over the Container for one test, replacing the factories you name.
37
39
  *
38
40
  * @example
39
41
  * ```ts
40
- * beforeAll(async () => {
41
- * await TestContainer.create({
42
- * mocks: [
43
- * { type: MyClass, value: jest.fn() },
44
- * { metadata: { key: 'value' }, type: AnotherClass, value: new AnotherClass() },
45
- * ],
46
- * }, { factoryTimeoutInMs: 500 });
47
- * });
48
- *
42
+ * await TestContainer.create({
43
+ * mocks: [
44
+ * { type: MyClass, value: jest.fn() },
45
+ * { metadata: { key: 'value' }, type: AnotherClass, value: new AnotherClass() },
46
+ * ],
47
+ * }, { factoryTimeoutInMs: 500 });
49
48
  * ```
50
49
  * @param subjects The subjects being mocked.
51
50
  * - `mocks` is an array of objects, to override the default factories.
@@ -54,6 +53,7 @@ export class TestContainer {
54
53
  * - Use `value: T` to provide the mocked value.
55
54
  * @param options Options to configure TestContainer.
56
55
  * - `factoryTimeoutInMs?: number` is to override the default container timeout.
56
+ * - `force?: boolean` performs a complete container reset.
57
57
  */
58
58
  static async create(subjects, options) {
59
59
  if (!TestContainer.originalFactories) {
@@ -64,31 +64,59 @@ export class TestContainer {
64
64
  container.setFactories(this.originalFactories);
65
65
  // Reset state of eligible factories.
66
66
  // A factory is eligible if it has an internal structure and should be reset on every test.
67
- await this.bootstrap(container);
67
+ await this.bootstrap(container, options?.force ?? false);
68
68
  if (options?.factoryTimeoutInMs) {
69
69
  container.setFactoryTimeout(options.factoryTimeoutInMs);
70
70
  }
71
71
  // Override new container with mock factories as instructed.
72
72
  for (const mock of subjects.mocks || []) {
73
- container.unRegisterFactory(mock.type, { metadata: mock.metadata });
74
- container.registerValue(mock.type, mock.value, { metadata: mock.metadata });
73
+ container.replaceValue(mock.type, mock.value, { metadata: mock.metadata });
75
74
  }
76
75
  return container;
77
76
  }
78
77
  /**
79
- * The `TestContainer.reset()` method will completely destroy all factories from the Container.
80
- * Because the entire Container is destroyed, and not just the mocks,
81
- * it must always be called in your `afterAll()` block.
82
- *
83
- * @example
84
- * ```ts
85
- * afterAll(async () => {
86
- * await TestContainer.reset();
87
- * });
88
- * ```
78
+ * To destroy every factory in the Container. Because it destroys the whole Container and not only
79
+ * the mocks, it must always be called in your teardown block - otherwise the next test starts
80
+ * against a Container this test left behind.
89
81
  */
90
82
  static async reset() {
91
83
  Container.getInstance().reset();
92
84
  }
85
+ /**
86
+ * Bootstrap the Container with the necessary factories internal to Octo.
87
+ * Between test runs, when the container is reset, many of Octo's internal classes must be reset as well.
88
+ * Since these classes are not exposed outside of Octo, we must bootstrap them.
89
+ *
90
+ * Some factories defined in Octo using `@Factory` must be placed here,
91
+ * the exact criteria being any factory that needs to reset its state.
92
+ *
93
+ * Exceptions:
94
+ * - {@link ModelSerializationService}: We do not want to loose class mapping already instantiated via decorators.
95
+ * - {@link ResourceSerializationService}: We do not want to loose class mapping already instantiated via decorators.
96
+ * - {@link TransactionService}: We do not want to loose action mapping already instantiated via decorators.
97
+ */
98
+ static async bootstrap(container, force = false) {
99
+ const overlayDataRepository = await container.get(OverlayDataRepository, { args: [true, []] });
100
+ const resourceDataRepository = await container.get(ResourceDataRepository, { args: [true, [], [], []] });
101
+ const inputService = await container.get(InputService, { args: [true] });
102
+ const moduleContainer = await container.get(ModuleContainer, {
103
+ args: [true],
104
+ });
105
+ const terraformService = await container.get(TerraformService, {
106
+ args: [{}, true],
107
+ });
108
+ if (force) {
109
+ const eventService = await container.get(EventService);
110
+ const modelSerializationService = new ModelSerializationService(inputService);
111
+ container.unRegisterFactory(ModelSerializationService);
112
+ container.registerValue(ModelSerializationService, modelSerializationService);
113
+ const resourceSerializationService = new ResourceSerializationService(resourceDataRepository, inputService);
114
+ container.unRegisterFactory(ResourceSerializationService);
115
+ container.registerValue(ResourceSerializationService, resourceSerializationService);
116
+ const transactionService = new TransactionService(eventService, inputService, moduleContainer, overlayDataRepository, resourceDataRepository, terraformService);
117
+ container.unRegisterFactory(TransactionService);
118
+ container.registerValue(TransactionService, transactionService);
119
+ }
120
+ }
93
121
  }
94
122
  //# sourceMappingURL=test-container.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"test-container.js","sourceRoot":"","sources":["../../../src/functions/container/test-container.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,eAAe,EAA+B,MAAM,mCAAmC,CAAC;AACjG,OAAO,EAAE,qBAAqB,EAAqC,MAAM,2CAA2C,CAAC;AACrH,OAAO,EACL,sBAAsB,GAEvB,MAAM,6CAA6C,CAAC;AACrD,OAAO,EAAE,cAAc,EAA8B,MAAM,2CAA2C,CAAC;AACvG,OAAO,EAAE,YAAY,EAA4B,MAAM,uCAAuC,CAAC;AAC/F,OAAO,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAa3C;;;;;;;;;;;;;;;GAeG;AACH,MAAM,OAAO,aAAa;IAGhB,MAAM,CAAC,KAAK,CAAC,SAAS,CAAC,SAAoB;QACjD,MAAM,SAAS,CAAC,GAAG,CAA6D,qBAAqB,EAAE;YACrG,IAAI,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC;SACjB,CAAC,CAAC;QAEH,MAAM,SAAS,CAAC,GAAG,CAA+D,sBAAsB,EAAE;YACxG,IAAI,EAAE,CAAC,IAAI,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC;SACzB,CAAC,CAAC;QAEH,MAAM,SAAS,CAAC,GAAG,CAA+C,cAAc,EAAE,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QAEpG,MAAM,SAAS,CAAC,GAAG,CAA2C,YAAY,EAAE,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QAE9F,MAAM,SAAS,CAAC,GAAG,CAAiD,eAAe,EAAE,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACzG,CAAC;IAED;;;;;;;;;;;;;;;;;;;;;;OAsBG;IACH,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,QAA+B,EAAE,OAA8B;QACjF,IAAI,CAAC,aAAa,CAAC,iBAAiB,EAAE,CAAC;YACrC,aAAa,CAAC,iBAAiB,GAAG,SAAS,CAAC,WAAW,EAAE,CAAC,aAAa,EAAE,CAAC;QAC5E,CAAC;QACD,MAAM,SAAS,GAAG,SAAS,CAAC,WAAW,EAAE,CAAC;QAE1C,0CAA0C;QAC1C,SAAS,CAAC,YAAY,CAAC,IAAI,CAAC,iBAAiB,CAAC,CAAC;QAC/C,qCAAqC;QACrC,2FAA2F;QAC3F,MAAM,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,CAAC;QAEhC,IAAI,OAAO,EAAE,kBAAkB,EAAE,CAAC;YAChC,SAAS,CAAC,iBAAiB,CAAC,OAAO,CAAC,kBAAkB,CAAC,CAAC;QAC1D,CAAC;QAED,4DAA4D;QAC5D,KAAK,MAAM,IAAI,IAAI,QAAQ,CAAC,KAAK,IAAI,EAAE,EAAE,CAAC;YACxC,SAAS,CAAC,iBAAiB,CAAC,IAAI,CAAC,IAAI,EAAE,EAAE,QAAQ,EAAE,IAAI,CAAC,QAAQ,EAAE,CAAC,CAAC;YACpE,SAAS,CAAC,aAAa,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,KAAK,EAAE,EAAE,QAAQ,EAAE,IAAI,CAAC,QAAQ,EAAE,CAAC,CAAC;QAC9E,CAAC;QAED,OAAO,SAAS,CAAC;IACnB,CAAC;IAED;;;;;;;;;;;OAWG;IACH,MAAM,CAAC,KAAK,CAAC,KAAK;QAChB,SAAS,CAAC,WAAW,EAAE,CAAC,KAAK,EAAE,CAAC;IAClC,CAAC;CACF"}
1
+ {"version":3,"file":"test-container.js","sourceRoot":"","sources":["../../../src/functions/container/test-container.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,eAAe,EAA+B,MAAM,mCAAmC,CAAC;AACjG,OAAO,EAAE,qBAAqB,EAAqC,MAAM,2CAA2C,CAAC;AACrH,OAAO,EACL,sBAAsB,GAEvB,MAAM,6CAA6C,CAAC;AACrD,OAAO,EAAE,YAAY,EAAE,MAAM,uCAAuC,CAAC;AACrE,OAAO,EAAE,YAAY,EAA4B,MAAM,uCAAuC,CAAC;AAC/F,OAAO,EAAE,yBAAyB,EAAE,MAAM,mEAAmE,CAAC;AAC9G,OAAO,EAAE,4BAA4B,EAAE,MAAM,yEAAyE,CAAC;AACvH,OAAO,EAAE,gBAAgB,EAAgC,MAAM,+CAA+C,CAAC;AAC/G,OAAO,EAAE,kBAAkB,EAAE,MAAM,mDAAmD,CAAC;AACvF,OAAO,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAa3C;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AACH,MAAM,OAAO,aAAa;IAGxB;;;;;;;;;;;;;;;;;;;;OAoBG;IACH,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,QAA+B,EAAE,OAA8B;QACjF,IAAI,CAAC,aAAa,CAAC,iBAAiB,EAAE,CAAC;YACrC,aAAa,CAAC,iBAAiB,GAAG,SAAS,CAAC,WAAW,EAAE,CAAC,aAAa,EAAE,CAAC;QAC5E,CAAC;QACD,MAAM,SAAS,GAAG,SAAS,CAAC,WAAW,EAAE,CAAC;QAE1C,0CAA0C;QAC1C,SAAS,CAAC,YAAY,CAAC,IAAI,CAAC,iBAAiB,CAAC,CAAC;QAC/C,qCAAqC;QACrC,2FAA2F;QAC3F,MAAM,IAAI,CAAC,SAAS,CAAC,SAAS,EAAE,OAAO,EAAE,KAAK,IAAI,KAAK,CAAC,CAAC;QAEzD,IAAI,OAAO,EAAE,kBAAkB,EAAE,CAAC;YAChC,SAAS,CAAC,iBAAiB,CAAC,OAAO,CAAC,kBAAkB,CAAC,CAAC;QAC1D,CAAC;QAED,4DAA4D;QAC5D,KAAK,MAAM,IAAI,IAAI,QAAQ,CAAC,KAAK,IAAI,EAAE,EAAE,CAAC;YACxC,SAAS,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,KAAK,EAAE,EAAE,QAAQ,EAAE,IAAI,CAAC,QAAQ,EAAE,CAAC,CAAC;QAC7E,CAAC;QAED,OAAO,SAAS,CAAC;IACnB,CAAC;IAED;;;;OAIG;IACH,MAAM,CAAC,KAAK,CAAC,KAAK;QAChB,SAAS,CAAC,WAAW,EAAE,CAAC,KAAK,EAAE,CAAC;IAClC,CAAC;IAED;;;;;;;;;;;;OAYG;IACK,MAAM,CAAC,KAAK,CAAC,SAAS,CAAC,SAAoB,EAAE,QAAiB,KAAK;QACzE,MAAM,qBAAqB,GAAG,MAAM,SAAS,CAAC,GAAG,CAC/C,qBAAqB,EACrB,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,EAAE,CACrB,CAAC;QAEF,MAAM,sBAAsB,GAAG,MAAM,SAAS,CAAC,GAAG,CAChD,sBAAsB,EACtB,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAC7B,CAAC;QAEF,MAAM,YAAY,GAAG,MAAM,SAAS,CAAC,GAAG,CAA2C,YAAY,EAAE,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QAEnH,MAAM,eAAe,GAAG,MAAM,SAAS,CAAC,GAAG,CAAiD,eAAe,EAAE;YAC3G,IAAI,EAAE,CAAC,IAAI,CAAC;SACb,CAAC,CAAC;QAEH,MAAM,gBAAgB,GAAG,MAAM,SAAS,CAAC,GAAG,CAAmD,gBAAgB,EAAE;YAC/G,IAAI,EAAE,CAAC,EAAE,EAAE,IAAI,CAAC;SACjB,CAAC,CAAC;QAEH,IAAI,KAAK,EAAE,CAAC;YACV,MAAM,YAAY,GAAG,MAAM,SAAS,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC;YAEvD,MAAM,yBAAyB,GAAG,IAAI,yBAAyB,CAAC,YAAY,CAAC,CAAC;YAC9E,SAAS,CAAC,iBAAiB,CAAC,yBAAyB,CAAC,CAAC;YACvD,SAAS,CAAC,aAAa,CAAC,yBAAyB,EAAE,yBAAyB,CAAC,CAAC;YAE9E,MAAM,4BAA4B,GAAG,IAAI,4BAA4B,CAAC,sBAAsB,EAAE,YAAY,CAAC,CAAC;YAC5G,SAAS,CAAC,iBAAiB,CAAC,4BAA4B,CAAC,CAAC;YAC1D,SAAS,CAAC,aAAa,CAAC,4BAA4B,EAAE,4BAA4B,CAAC,CAAC;YAEpF,MAAM,kBAAkB,GAAG,IAAI,kBAAkB,CAC/C,YAAY,EACZ,YAAY,EACZ,eAAe,EACf,qBAAqB,EACrB,sBAAsB,EACtB,gBAAgB,CACjB,CAAC;YACF,SAAS,CAAC,iBAAiB,CAAC,kBAAkB,CAAC,CAAC;YAChD,SAAS,CAAC,aAAa,CAAC,kBAAkB,EAAE,kBAAkB,CAAC,CAAC;QAClE,CAAC;IACH,CAAC;CACF"}
@@ -1,13 +1,21 @@
1
1
  import type { UnknownNode } from '../../app.type.js';
2
2
  import type { DiffAction } from '../diff/diff.js';
3
+ /**
4
+ * @internal
5
+ */
3
6
  declare class DependencyBehavior {
4
7
  forAction: DiffAction;
5
8
  onAction: DiffAction;
6
9
  onField: string;
7
10
  toField: string;
11
+ /**
12
+ * @internal
13
+ */
8
14
  constructor(onField: string, onAction: DiffAction, toField: string, forAction: DiffAction);
9
15
  }
10
16
  /**
17
+ * How two nodes are related. A parent exists before its child, and outlives it.
18
+ *
11
19
  * @group Functions/Dependency
12
20
  */
13
21
  export declare enum DependencyRelationship {
@@ -15,6 +23,8 @@ export declare enum DependencyRelationship {
15
23
  PARENT = "parent"
16
24
  }
17
25
  /**
26
+ * The serialized form of a {@link Dependency}, as it is written to state.
27
+ *
18
28
  * @group Functions/Dependency
19
29
  */
20
30
  export interface IDependency {
@@ -33,29 +43,93 @@ export interface IDependency {
33
43
  to: string;
34
44
  }
35
45
  /**
46
+ * The edge between two nodes in Octo's graph.
47
+ *
48
+ * A dependency is directed, and carries two things: an optional parent/child relationship, and a set
49
+ * of *behaviors*. A behavior states an ordering rule - "when this field of `from` is added, the
50
+ * matching action on `to` must have run first" - and it is those rules that let Octo order a
51
+ * transaction correctly instead of guessing.
52
+ *
53
+ * Models create dependencies through `addChild()` and `addRelationship()`; you rarely construct one.
54
+ *
36
55
  * @group Functions/Dependency
56
+ *
57
+ * @see Definition of [Dependencies](/docs/fundamentals/dependencies).
37
58
  */
38
59
  export declare class Dependency {
39
- private readonly behaviors;
60
+ /**
61
+ * The node this dependency points from.
62
+ */
40
63
  readonly from: UnknownNode;
41
- private relationship;
64
+ /**
65
+ * The node this dependency points to.
66
+ */
42
67
  readonly to: UnknownNode;
68
+ private readonly behaviors;
69
+ private relationship;
70
+ /**
71
+ * @param from The node this dependency points from.
72
+ * @param to The node this dependency points to.
73
+ */
43
74
  constructor(from: UnknownNode, to: UnknownNode);
44
- private getBehaviorIndex;
75
+ /**
76
+ * @internal
77
+ */
78
+ static unSynth(from: UnknownNode, to: UnknownNode, dependency: IDependency): Dependency;
79
+ /**
80
+ * To declare an ordering rule: when `onAction` happens to `onField` of `from`, then `forAction`
81
+ * on `toField` of `to` must have been applied first. Adding the same behavior twice is a no-op.
82
+ */
45
83
  addBehavior(onField: string, onAction: DiffAction, toField: string, forAction: DiffAction): void;
84
+ /**
85
+ * To mark `to` as the child of `from`.
86
+ *
87
+ * @throws {@link DependencyError} If this dependency already has a relationship.
88
+ */
46
89
  addChildRelationship(onField: string, toField: string): void;
90
+ /**
91
+ * To mark `to` as the parent of `from`.
92
+ *
93
+ * @throws {@link DependencyError} If this dependency already has a relationship.
94
+ */
47
95
  addParentRelationship(onField: string, toField: string): void;
48
- hasMatchingBehavior(onField?: string, onAction?: DiffAction, toField?: string, forAction?: DiffAction): boolean;
49
- isChildRelationship(): boolean;
50
- isEqual(dependency: Dependency): boolean;
51
- isParentRelationship(): boolean;
96
+ /**
97
+ * The relationship between the two nodes, if one was declared.
98
+ */
52
99
  getRelationship(): {
53
100
  onField: string;
54
101
  toField: string;
55
102
  type: DependencyRelationship;
56
103
  } | undefined;
104
+ /**
105
+ * Whether any behavior matches every argument given. Arguments left out match anything.
106
+ */
107
+ hasMatchingBehavior(onField?: string, onAction?: DiffAction, toField?: string, forAction?: DiffAction): boolean;
108
+ /**
109
+ * Whether `to` is a child of `from`.
110
+ */
111
+ isChildRelationship(): boolean;
112
+ /**
113
+ * Whether both dependencies connect the same two nodes, in the same direction.
114
+ */
115
+ isEqual(dependency: Dependency): boolean;
116
+ /**
117
+ * Whether `to` is a parent of `from`.
118
+ */
119
+ isParentRelationship(): boolean;
120
+ /**
121
+ * To drop an ordering rule.
122
+ *
123
+ * @throws {@link DependencyError} If no such behavior exists.
124
+ */
57
125
  removeBehavior(onField: string, onAction: DiffAction, toField: string, forAction: DiffAction): void;
126
+ /**
127
+ * @internal
128
+ */
58
129
  synth(): IDependency;
59
- static unSynth(from: UnknownNode, to: UnknownNode, dependency: IDependency): Dependency;
130
+ /**
131
+ * The position of a matching behavior, or `-1`.
132
+ */
133
+ private getBehaviorIndex;
60
134
  }
61
135
  export {};