@adaas/a-concept 0.0.64 → 0.1.2

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 (416) hide show
  1. package/dist/index.d.ts +24 -32
  2. package/dist/index.js +35 -52
  3. package/dist/index.js.map +1 -1
  4. package/dist/src/constants/env.constants.d.ts +15 -8
  5. package/dist/src/constants/env.constants.js +17 -10
  6. package/dist/src/constants/env.constants.js.map +1 -1
  7. package/dist/src/global/A-Abstraction/A-Abstraction-Extend.decorator.d.ts +23 -0
  8. package/dist/src/global/A-Abstraction/A-Abstraction-Extend.decorator.js +69 -0
  9. package/dist/src/global/A-Abstraction/A-Abstraction-Extend.decorator.js.map +1 -0
  10. package/dist/src/global/A-Abstraction/A-Abstraction.class.d.ts +47 -20
  11. package/dist/src/global/A-Abstraction/A-Abstraction.class.js +55 -48
  12. package/dist/src/global/A-Abstraction/A-Abstraction.class.js.map +1 -1
  13. package/dist/src/global/A-Abstraction/A-Abstraction.error.d.ts +7 -0
  14. package/dist/src/global/A-Abstraction/A-Abstraction.error.js +12 -0
  15. package/dist/src/global/A-Abstraction/A-Abstraction.error.js.map +1 -0
  16. package/dist/src/global/A-Abstraction/A-Abstraction.types.d.ts +27 -12
  17. package/dist/src/global/A-Abstraction/A-Abstraction.types.js +0 -8
  18. package/dist/src/global/A-Abstraction/A-Abstraction.types.js.map +1 -1
  19. package/dist/src/global/A-Caller/A_Caller.class.d.ts +33 -0
  20. package/dist/src/global/A-Caller/A_Caller.class.js +44 -0
  21. package/dist/src/global/A-Caller/A_Caller.class.js.map +1 -0
  22. package/dist/src/global/A-Caller/A_Caller.error.d.ts +7 -0
  23. package/dist/src/global/A-Caller/A_Caller.error.js +12 -0
  24. package/dist/src/global/A-Caller/A_Caller.error.js.map +1 -0
  25. package/dist/src/global/A-Caller/A_Caller.types.d.ts +18 -0
  26. package/dist/src/{base/A-Errors/A-Errors.types.js → global/A-Caller/A_Caller.types.js} +1 -1
  27. package/dist/src/global/A-Caller/A_Caller.types.js.map +1 -0
  28. package/dist/src/global/A-Component/A-Component.class.d.ts +20 -3
  29. package/dist/src/global/A-Component/A-Component.class.js +35 -19
  30. package/dist/src/global/A-Component/A-Component.class.js.map +1 -1
  31. package/dist/src/global/A-Component/A-Component.constants.d.ts +6 -0
  32. package/dist/src/global/A-Component/A-Component.constants.js +11 -0
  33. package/dist/src/global/A-Component/A-Component.constants.js.map +1 -0
  34. package/dist/src/global/A-Component/A-Component.meta.d.ts +4 -4
  35. package/dist/src/global/A-Component/A-Component.meta.js +6 -8
  36. package/dist/src/global/A-Component/A-Component.meta.js.map +1 -1
  37. package/dist/src/global/A-Component/A-Component.types.d.ts +40 -22
  38. package/dist/src/global/A-Component/A-Component.types.js +1 -8
  39. package/dist/src/global/A-Component/A-Component.types.js.map +1 -1
  40. package/dist/src/global/A-Concept/A-Concept.class.d.ts +153 -0
  41. package/dist/src/global/A-Concept/A-Concept.class.js +260 -0
  42. package/dist/src/global/A-Concept/A-Concept.class.js.map +1 -0
  43. package/dist/src/global/A-Concept/A-Concept.constants.d.ts +33 -0
  44. package/dist/src/global/A-Concept/A-Concept.constants.js +39 -0
  45. package/dist/src/global/A-Concept/A-Concept.constants.js.map +1 -0
  46. package/dist/src/global/A-Concept/{A_Concept.meta.js → A-Concept.meta.js} +1 -2
  47. package/dist/src/global/A-Concept/A-Concept.meta.js.map +1 -0
  48. package/dist/src/global/A-Concept/A-Concept.types.d.ts +83 -0
  49. package/dist/src/global/{A-Channel/A-Channel.types.js → A-Concept/A-Concept.types.js} +1 -1
  50. package/dist/src/global/A-Concept/A-Concept.types.js.map +1 -0
  51. package/dist/src/global/A-Container/A-Container.class.d.ts +31 -35
  52. package/dist/src/global/A-Container/A-Container.class.js +34 -55
  53. package/dist/src/global/A-Container/A-Container.class.js.map +1 -1
  54. package/dist/src/global/A-Container/A-Container.constants.d.ts +5 -0
  55. package/dist/src/global/A-Container/A-Container.constants.js +10 -0
  56. package/dist/src/global/A-Container/A-Container.constants.js.map +1 -0
  57. package/dist/src/global/A-Container/A-Container.meta.d.ts +6 -6
  58. package/dist/src/global/A-Container/A-Container.meta.js +5 -6
  59. package/dist/src/global/A-Container/A-Container.meta.js.map +1 -1
  60. package/dist/src/global/A-Container/A-Container.types.d.ts +31 -25
  61. package/dist/src/global/A-Container/A-Container.types.js +1 -7
  62. package/dist/src/global/A-Container/A-Container.types.js.map +1 -1
  63. package/dist/src/global/A-Context/A-Context.class.d.ts +302 -76
  64. package/dist/src/global/A-Context/A-Context.class.js +436 -244
  65. package/dist/src/global/A-Context/A-Context.class.js.map +1 -1
  66. package/dist/src/global/A-Context/A-Context.error.d.ts +20 -0
  67. package/dist/src/global/A-Context/A-Context.error.js +25 -0
  68. package/dist/src/global/A-Context/A-Context.error.js.map +1 -0
  69. package/dist/src/global/A-Context/A-Context.types.d.ts +5 -0
  70. package/dist/src/global/A-Context/A-Context.types.js +1 -0
  71. package/dist/src/global/A-Entity/A-Entity.class.d.ts +13 -39
  72. package/dist/src/global/A-Entity/A-Entity.class.js +30 -73
  73. package/dist/src/global/A-Entity/A-Entity.class.js.map +1 -1
  74. package/dist/src/global/A-Entity/A-Entity.constants.d.ts +11 -0
  75. package/dist/src/global/A-Entity/A-Entity.constants.js +17 -0
  76. package/dist/src/global/A-Entity/A-Entity.constants.js.map +1 -0
  77. package/dist/src/global/A-Entity/A-Entity.error.d.ts +7 -0
  78. package/dist/src/global/A-Entity/A-Entity.error.js +12 -0
  79. package/dist/src/global/A-Entity/A-Entity.error.js.map +1 -0
  80. package/dist/src/global/A-Entity/A-Entity.meta.d.ts +2 -2
  81. package/dist/src/global/A-Entity/A-Entity.meta.js +2 -2
  82. package/dist/src/global/A-Entity/A-Entity.meta.js.map +1 -1
  83. package/dist/src/global/A-Entity/A-Entity.types.d.ts +24 -29
  84. package/dist/src/global/A-Entity/A-Entity.types.js +1 -13
  85. package/dist/src/global/A-Entity/A-Entity.types.js.map +1 -1
  86. package/dist/src/global/A-Error/A_Error.class.d.ts +219 -0
  87. package/dist/src/global/A-Error/A_Error.class.js +267 -0
  88. package/dist/src/global/A-Error/A_Error.class.js.map +1 -0
  89. package/dist/src/global/A-Error/A_Error.constants.d.ts +5 -0
  90. package/dist/src/global/A-Error/A_Error.constants.js +9 -0
  91. package/dist/src/global/A-Error/A_Error.constants.js.map +1 -0
  92. package/dist/src/global/A-Error/A_Error.types.d.ts +89 -0
  93. package/dist/src/{decorators/A-Inject/A-Inject.decorator.types.js → global/A-Error/A_Error.types.js} +1 -1
  94. package/dist/src/global/A-Error/A_Error.types.js.map +1 -0
  95. package/dist/src/global/A-Feature/A-Feature-Define.decorator.d.ts +15 -0
  96. package/dist/src/{decorators → global}/A-Feature/A-Feature-Define.decorator.js +21 -27
  97. package/dist/src/global/A-Feature/A-Feature-Define.decorator.js.map +1 -0
  98. package/dist/src/{decorators → global}/A-Feature/A-Feature-Extend.decorator.d.ts +26 -3
  99. package/dist/src/global/A-Feature/A-Feature-Extend.decorator.js +97 -0
  100. package/dist/src/global/A-Feature/A-Feature-Extend.decorator.js.map +1 -0
  101. package/dist/src/global/A-Feature/A-Feature.class.d.ts +120 -30
  102. package/dist/src/global/A-Feature/A-Feature.class.js +205 -73
  103. package/dist/src/global/A-Feature/A-Feature.class.js.map +1 -1
  104. package/dist/src/global/A-Feature/A-Feature.error.d.ts +25 -0
  105. package/dist/src/global/A-Feature/A-Feature.error.js +33 -0
  106. package/dist/src/global/A-Feature/A-Feature.error.js.map +1 -0
  107. package/dist/src/global/A-Feature/A-Feature.types.d.ts +241 -18
  108. package/dist/src/global/A-Feature/A-Feature.types.js +16 -22
  109. package/dist/src/global/A-Feature/A-Feature.types.js.map +1 -1
  110. package/dist/src/global/A-Fragment/A-Fragment.class.d.ts +19 -27
  111. package/dist/src/global/A-Fragment/A-Fragment.class.js +21 -91
  112. package/dist/src/global/A-Fragment/A-Fragment.class.js.map +1 -1
  113. package/dist/src/global/A-Fragment/A-Fragment.types.d.ts +19 -1
  114. package/dist/src/global/A-Fragment/A-Fragment.types.js +3 -0
  115. package/dist/src/global/A-Fragment/A-Fragment.types.js.map +1 -1
  116. package/dist/src/global/A-Inject/A-Inject.decorator.d.ts +80 -0
  117. package/dist/src/global/A-Inject/A-Inject.decorator.js +49 -0
  118. package/dist/src/global/A-Inject/A-Inject.decorator.js.map +1 -0
  119. package/dist/src/global/A-Inject/A-Inject.error.d.ts +5 -0
  120. package/dist/src/global/A-Inject/A-Inject.error.js +10 -0
  121. package/dist/src/global/A-Inject/A-Inject.error.js.map +1 -0
  122. package/dist/src/global/A-Inject/A-Inject.types.d.ts +42 -0
  123. package/dist/src/{decorators/A-Entity/A-Entity.decorator.types.js → global/A-Inject/A-Inject.types.js} +1 -1
  124. package/dist/src/global/A-Inject/A-Inject.types.js.map +1 -0
  125. package/dist/src/global/A-Meta/A-Meta.class.d.ts +1 -1
  126. package/dist/src/global/A-Meta/A-Meta.types.d.ts +14 -0
  127. package/dist/src/global/A-Meta/A-Meta.types.js +1 -0
  128. package/dist/src/global/A-Scope/A-Scope.class.d.ts +124 -142
  129. package/dist/src/global/A-Scope/A-Scope.class.js +163 -209
  130. package/dist/src/global/A-Scope/A-Scope.class.js.map +1 -1
  131. package/dist/src/global/A-Scope/A-Scope.error.d.ts +6 -0
  132. package/dist/src/global/A-Scope/A-Scope.error.js +11 -0
  133. package/dist/src/global/A-Scope/A-Scope.error.js.map +1 -0
  134. package/dist/src/global/A-Scope/A-Scope.types.d.ts +48 -13
  135. package/dist/src/global/A-Stage/A-Stage.class.d.ts +31 -23
  136. package/dist/src/global/A-Stage/A-Stage.class.js +100 -68
  137. package/dist/src/global/A-Stage/A-Stage.class.js.map +1 -1
  138. package/dist/src/global/A-Stage/A-Stage.error.d.ts +2 -1
  139. package/dist/src/global/A-Stage/A-Stage.error.js +5 -2
  140. package/dist/src/global/A-Stage/A-Stage.error.js.map +1 -1
  141. package/dist/src/global/A-Stage/A-Stage.types.d.ts +4 -16
  142. package/dist/src/global/A-Stage/A-Stage.types.js +0 -16
  143. package/dist/src/global/A-Stage/A-Stage.types.js.map +1 -1
  144. package/dist/src/global/ASEID/ASEID.class.d.ts +130 -0
  145. package/dist/src/global/ASEID/ASEID.class.js +167 -0
  146. package/dist/src/global/ASEID/ASEID.class.js.map +1 -0
  147. package/dist/src/global/ASEID/ASEID.constants.js +2 -0
  148. package/dist/src/global/ASEID/ASEID.constants.js.map +1 -0
  149. package/dist/src/global/ASEID/ASEID.error.d.ts +5 -0
  150. package/dist/src/global/ASEID/ASEID.error.js +10 -0
  151. package/dist/src/global/ASEID/ASEID.error.js.map +1 -0
  152. package/dist/src/global/ASEID/ASEID.types.d.ts +65 -0
  153. package/dist/src/global/ASEID/ASEID.types.js +5 -0
  154. package/dist/src/global/ASEID/ASEID.types.js.map +1 -0
  155. package/dist/src/helpers/A_Common.helper.d.ts +28 -0
  156. package/dist/src/helpers/A_Common.helper.js +170 -0
  157. package/dist/src/helpers/A_Common.helper.js.map +1 -0
  158. package/dist/src/helpers/A_Formatter.helper.d.ts +35 -0
  159. package/dist/src/helpers/A_Formatter.helper.js +62 -0
  160. package/dist/src/helpers/A_Formatter.helper.js.map +1 -0
  161. package/dist/src/helpers/A_Identity.helper.d.ts +29 -0
  162. package/dist/src/helpers/A_Identity.helper.js +43 -0
  163. package/dist/src/helpers/A_Identity.helper.js.map +1 -0
  164. package/dist/src/helpers/{StepsManager.class.d.ts → A_StepsManager.class.d.ts} +4 -2
  165. package/dist/src/helpers/{StepsManager.class.js → A_StepsManager.class.js} +10 -5
  166. package/dist/src/helpers/A_StepsManager.class.js.map +1 -0
  167. package/dist/src/helpers/A_TypeGuards.helper.d.ts +205 -0
  168. package/dist/src/helpers/A_TypeGuards.helper.js +288 -0
  169. package/dist/src/helpers/A_TypeGuards.helper.js.map +1 -0
  170. package/dist/src/types/A_Common.types.d.ts +36 -0
  171. package/dist/src/types/A_Common.types.js +3 -0
  172. package/dist/src/types/A_Common.types.js.map +1 -0
  173. package/index.ts +27 -51
  174. package/jest.config.ts +1 -0
  175. package/package.json +1 -2
  176. package/src/constants/env.constants.ts +18 -11
  177. package/src/global/A-Abstraction/A-Abstraction-Extend.decorator.ts +103 -0
  178. package/src/global/A-Abstraction/A-Abstraction.class.ts +71 -65
  179. package/src/global/A-Abstraction/A-Abstraction.error.ts +9 -0
  180. package/src/global/A-Abstraction/A-Abstraction.types.ts +52 -13
  181. package/src/global/A-Caller/A_Caller.class.ts +61 -0
  182. package/src/global/A-Caller/A_Caller.error.ts +10 -0
  183. package/src/global/A-Caller/A_Caller.types.ts +25 -0
  184. package/src/global/A-Component/A-Component.class.ts +26 -15
  185. package/src/global/A-Component/A-Component.constants.ts +9 -0
  186. package/src/global/A-Component/A-Component.meta.ts +6 -16
  187. package/src/global/A-Component/A-Component.types.ts +53 -28
  188. package/src/global/A-Concept/A-Concept.class.ts +316 -0
  189. package/src/global/A-Concept/A-Concept.constants.ts +36 -0
  190. package/src/global/A-Concept/A-Concept.meta.ts +17 -0
  191. package/src/global/A-Concept/A-Concept.types.ts +100 -0
  192. package/src/global/A-Container/A-Container.class.ts +42 -83
  193. package/src/global/A-Container/A-Container.constants.ts +5 -0
  194. package/src/global/A-Container/A-Container.meta.ts +7 -11
  195. package/src/global/A-Container/A-Container.types.ts +38 -34
  196. package/src/global/A-Context/A-Context.class.ts +648 -412
  197. package/src/global/A-Context/A-Context.error.ts +44 -0
  198. package/src/global/A-Context/A-Context.types.ts +14 -0
  199. package/src/global/A-Entity/A-Entity.class.ts +33 -88
  200. package/src/global/A-Entity/A-Entity.constants.ts +12 -0
  201. package/src/global/A-Entity/A-Entity.error.ts +12 -0
  202. package/src/global/A-Entity/A-Entity.meta.ts +4 -4
  203. package/src/global/A-Entity/A-Entity.types.ts +31 -36
  204. package/src/global/A-Error/A_Error.class.ts +408 -0
  205. package/src/global/A-Error/A_Error.constants.ts +11 -0
  206. package/src/global/A-Error/A_Error.types.ts +96 -0
  207. package/src/{decorators → global}/A-Feature/A-Feature-Define.decorator.ts +31 -37
  208. package/src/global/A-Feature/A-Feature-Extend.decorator.ts +187 -0
  209. package/src/global/A-Feature/A-Feature.class.ts +279 -122
  210. package/src/global/A-Feature/A-Feature.error.ts +33 -0
  211. package/src/global/A-Feature/A-Feature.types.ts +278 -40
  212. package/src/global/A-Fragment/A-Fragment.class.ts +29 -100
  213. package/src/global/A-Fragment/A-Fragment.types.ts +25 -3
  214. package/src/global/A-Inject/A-Inject.decorator.ts +167 -0
  215. package/src/global/A-Inject/A-Inject.error.ts +8 -0
  216. package/src/global/A-Inject/A-Inject.types.ts +75 -0
  217. package/src/global/A-Meta/A-Meta.class.ts +1 -1
  218. package/src/global/A-Meta/A-Meta.types.ts +21 -0
  219. package/src/global/A-Scope/A-Scope.class.ts +288 -299
  220. package/src/global/A-Scope/A-Scope.error.ts +13 -0
  221. package/src/global/A-Scope/A-Scope.types.ts +61 -27
  222. package/src/global/A-Stage/A-Stage.class.ts +142 -80
  223. package/src/global/A-Stage/A-Stage.error.ts +4 -2
  224. package/src/global/A-Stage/A-Stage.types.ts +4 -25
  225. package/src/global/ASEID/ASEID.class.ts +275 -0
  226. package/src/global/ASEID/ASEID.error.ts +12 -0
  227. package/src/global/ASEID/ASEID.types.ts +79 -0
  228. package/src/helpers/A_Common.helper.ts +204 -0
  229. package/src/helpers/A_Formatter.helper.ts +58 -0
  230. package/src/helpers/A_Identity.helper.ts +53 -0
  231. package/src/helpers/{StepsManager.class.ts → A_StepsManager.class.ts} +19 -3
  232. package/src/helpers/A_TypeGuards.helper.ts +318 -0
  233. package/src/types/A_Common.types.ts +79 -0
  234. package/tests/A-Common.test.ts +117 -0
  235. package/tests/A-Component.test.ts +11 -6
  236. package/tests/A-Concept.test.ts +19 -22
  237. package/tests/A-Entity.test.ts +24 -24
  238. package/tests/A-Error.test.ts +129 -0
  239. package/tests/A-Feature.test.ts +34 -25
  240. package/tests/A-Scope.test.ts +50 -22
  241. package/tests/ASEID.test.ts +74 -0
  242. package/tsconfig.build.json +2 -1
  243. package/tsconfig.json +3 -2
  244. package/dist/src/base/A-Config/A-Config.container.d.ts +0 -9
  245. package/dist/src/base/A-Config/A-Config.container.js +0 -69
  246. package/dist/src/base/A-Config/A-Config.container.js.map +0 -1
  247. package/dist/src/base/A-Config/A-Config.context.d.ts +0 -30
  248. package/dist/src/base/A-Config/A-Config.context.js +0 -60
  249. package/dist/src/base/A-Config/A-Config.context.js.map +0 -1
  250. package/dist/src/base/A-Config/A-Config.types.d.ts +0 -20
  251. package/dist/src/base/A-Config/A-Config.types.js +0 -7
  252. package/dist/src/base/A-Config/A-Config.types.js.map +0 -1
  253. package/dist/src/base/A-Config/components/ConfigReader.component.d.ts +0 -29
  254. package/dist/src/base/A-Config/components/ConfigReader.component.js +0 -84
  255. package/dist/src/base/A-Config/components/ConfigReader.component.js.map +0 -1
  256. package/dist/src/base/A-Config/components/ENVConfigReader.component.d.ts +0 -10
  257. package/dist/src/base/A-Config/components/ENVConfigReader.component.js +0 -37
  258. package/dist/src/base/A-Config/components/ENVConfigReader.component.js.map +0 -1
  259. package/dist/src/base/A-Config/components/FileConfigReader.component.d.ts +0 -11
  260. package/dist/src/base/A-Config/components/FileConfigReader.component.js +0 -48
  261. package/dist/src/base/A-Config/components/FileConfigReader.component.js.map +0 -1
  262. package/dist/src/base/A-Errors/A-Error.entity.d.ts +0 -3
  263. package/dist/src/base/A-Errors/A-Error.entity.js +0 -8
  264. package/dist/src/base/A-Errors/A-Error.entity.js.map +0 -1
  265. package/dist/src/base/A-Errors/A-Errors.component.d.ts +0 -19
  266. package/dist/src/base/A-Errors/A-Errors.component.js +0 -87
  267. package/dist/src/base/A-Errors/A-Errors.component.js.map +0 -1
  268. package/dist/src/base/A-Errors/A-Errors.context.d.ts +0 -27
  269. package/dist/src/base/A-Errors/A-Errors.context.js +0 -50
  270. package/dist/src/base/A-Errors/A-Errors.context.js.map +0 -1
  271. package/dist/src/base/A-Errors/A-Errors.types.d.ts +0 -5
  272. package/dist/src/base/A-Errors/A-Errors.types.js.map +0 -1
  273. package/dist/src/base/A-Logger/A-Logger.component.d.ts +0 -31
  274. package/dist/src/base/A-Logger/A-Logger.component.js +0 -155
  275. package/dist/src/base/A-Logger/A-Logger.component.js.map +0 -1
  276. package/dist/src/base/A-Logger/A-Logger.types.js +0 -2
  277. package/dist/src/base/A-Logger/A-Logger.types.js.map +0 -1
  278. package/dist/src/base/A-Polyfill/A-Polyfill.component.d.ts +0 -5
  279. package/dist/src/base/A-Polyfill/A-Polyfill.component.js +0 -34
  280. package/dist/src/base/A-Polyfill/A-Polyfill.component.js.map +0 -1
  281. package/dist/src/decorators/A-Abstraction/A-Abstraction-Extend.decorator.d.ts +0 -14
  282. package/dist/src/decorators/A-Abstraction/A-Abstraction-Extend.decorator.js +0 -53
  283. package/dist/src/decorators/A-Abstraction/A-Abstraction-Extend.decorator.js.map +0 -1
  284. package/dist/src/decorators/A-Abstraction/A-Abstraction.decorator.types.d.ts +0 -2
  285. package/dist/src/decorators/A-Abstraction/A-Abstraction.decorator.types.js +0 -3
  286. package/dist/src/decorators/A-Abstraction/A-Abstraction.decorator.types.js.map +0 -1
  287. package/dist/src/decorators/A-Connect/A-Connect.decorator.d.ts +0 -19
  288. package/dist/src/decorators/A-Connect/A-Connect.decorator.js +0 -31
  289. package/dist/src/decorators/A-Connect/A-Connect.decorator.js.map +0 -1
  290. package/dist/src/decorators/A-Connect/A-Connect.decorator.types.d.ts +0 -1
  291. package/dist/src/decorators/A-Connect/A-Connect.decorator.types.js +0 -3
  292. package/dist/src/decorators/A-Connect/A-Connect.decorator.types.js.map +0 -1
  293. package/dist/src/decorators/A-Entity/A-Entity-List.decorator.d.ts +0 -1
  294. package/dist/src/decorators/A-Entity/A-Entity-List.decorator.js +0 -8
  295. package/dist/src/decorators/A-Entity/A-Entity-List.decorator.js.map +0 -1
  296. package/dist/src/decorators/A-Entity/A-Entity.decorator.types.d.ts +0 -14
  297. package/dist/src/decorators/A-Entity/A-Entity.decorator.types.js.map +0 -1
  298. package/dist/src/decorators/A-Feature/A-Feature-Define.decorator.d.ts +0 -19
  299. package/dist/src/decorators/A-Feature/A-Feature-Define.decorator.js.map +0 -1
  300. package/dist/src/decorators/A-Feature/A-Feature-Extend.decorator.js +0 -81
  301. package/dist/src/decorators/A-Feature/A-Feature-Extend.decorator.js.map +0 -1
  302. package/dist/src/decorators/A-Feature/A-Feature.decorator.types.d.ts +0 -96
  303. package/dist/src/decorators/A-Feature/A-Feature.decorator.types.js +0 -3
  304. package/dist/src/decorators/A-Feature/A-Feature.decorator.types.js.map +0 -1
  305. package/dist/src/decorators/A-Inject/A-Inject.decorator.d.ts +0 -30
  306. package/dist/src/decorators/A-Inject/A-Inject.decorator.js +0 -47
  307. package/dist/src/decorators/A-Inject/A-Inject.decorator.js.map +0 -1
  308. package/dist/src/decorators/A-Inject/A-Inject.decorator.types.d.ts +0 -48
  309. package/dist/src/decorators/A-Inject/A-Inject.decorator.types.js.map +0 -1
  310. package/dist/src/global/A-Channel/A-Channel.class.d.ts +0 -16
  311. package/dist/src/global/A-Channel/A-Channel.class.js +0 -59
  312. package/dist/src/global/A-Channel/A-Channel.class.js.map +0 -1
  313. package/dist/src/global/A-Channel/A-Channel.types.d.ts +0 -68
  314. package/dist/src/global/A-Channel/A-Channel.types.js.map +0 -1
  315. package/dist/src/global/A-Command/A-Command.class.d.ts +0 -187
  316. package/dist/src/global/A-Command/A-Command.class.js +0 -349
  317. package/dist/src/global/A-Command/A-Command.class.js.map +0 -1
  318. package/dist/src/global/A-Command/A-Command.constants.d.ts +0 -17
  319. package/dist/src/global/A-Command/A-Command.constants.js +0 -22
  320. package/dist/src/global/A-Command/A-Command.constants.js.map +0 -1
  321. package/dist/src/global/A-Command/A-Command.meta.d.ts +0 -11
  322. package/dist/src/global/A-Command/A-Command.meta.js +0 -18
  323. package/dist/src/global/A-Command/A-Command.meta.js.map +0 -1
  324. package/dist/src/global/A-Command/A-Command.types.d.ts +0 -43
  325. package/dist/src/global/A-Command/A-Command.types.js +0 -10
  326. package/dist/src/global/A-Command/A-Command.types.js.map +0 -1
  327. package/dist/src/global/A-Command/context/A_Command.context.d.ts +0 -64
  328. package/dist/src/global/A-Command/context/A_Command.context.js +0 -85
  329. package/dist/src/global/A-Command/context/A_Command.context.js.map +0 -1
  330. package/dist/src/global/A-Concept/A_Concept.class.d.ts +0 -104
  331. package/dist/src/global/A-Concept/A_Concept.class.js +0 -217
  332. package/dist/src/global/A-Concept/A_Concept.class.js.map +0 -1
  333. package/dist/src/global/A-Concept/A_Concept.meta.js.map +0 -1
  334. package/dist/src/global/A-Concept/A_Concept.types.d.ts +0 -103
  335. package/dist/src/global/A-Concept/A_Concept.types.js +0 -28
  336. package/dist/src/global/A-Concept/A_Concept.types.js.map +0 -1
  337. package/dist/src/global/A-Feature/A-FeatureCaller.class.d.ts +0 -22
  338. package/dist/src/global/A-Feature/A-FeatureCaller.class.js +0 -26
  339. package/dist/src/global/A-Feature/A-FeatureCaller.class.js.map +0 -1
  340. package/dist/src/global/A-Scope/A-Scope.constants.d.ts +0 -2
  341. package/dist/src/global/A-Scope/A-Scope.constants.js +0 -11
  342. package/dist/src/global/A-Scope/A-Scope.constants.js.map +0 -1
  343. package/dist/src/helpers/StepsManager.class.js.map +0 -1
  344. package/dist/src/types/A_Module.types.d.ts +0 -17
  345. package/dist/src/types/A_Module.types.js +0 -22
  346. package/dist/src/types/A_Module.types.js.map +0 -1
  347. package/examples/entity/concept.ts +0 -68
  348. package/examples/entity/entities/Task.entity.ts +0 -110
  349. package/examples/entity/entities/User.entity.ts +0 -62
  350. package/examples/fe-be/channels/Test.channel.ts +0 -27
  351. package/examples/fe-be/components/BE-Controller.component.ts +0 -20
  352. package/examples/fe-be/components/FE.component.ts +0 -13
  353. package/examples/fe-be/containers/ServerApp.container.ts +0 -8
  354. package/examples/fe-be/containers/WebApp.container.ts +0 -13
  355. package/examples/multi-container/channels/Direct.channel.ts +0 -39
  356. package/examples/multi-container/concept.ts +0 -0
  357. package/examples/multi-container/containers/Command.container.ts +0 -41
  358. package/examples/multi-container/containers/Schedule.container.ts +0 -52
  359. package/examples/simple/components/A.component.ts +0 -71
  360. package/examples/simple/components/B.component.ts +0 -68
  361. package/examples/simple/concept.ts +0 -87
  362. package/examples/simple/containers/Main.container.ts +0 -88
  363. package/examples/simple/containers/Secondary.container.ts +0 -26
  364. package/examples/simple/context/Fragment_A.context.ts +0 -25
  365. package/examples/simple/context/Fragment_B.context.ts +0 -19
  366. package/examples/simple/entities/EntityA.entity.ts +0 -32
  367. package/examples/simple-http-server/components/http-error-handler.component.ts +0 -47
  368. package/examples/simple-http-server/components/http-request-handler.component.ts +0 -13
  369. package/examples/simple-http-server/concept.ts +0 -35
  370. package/examples/simple-http-server/containers/http-server.container.ts +0 -57
  371. package/examples/simple-http-server/contexts/http-request.context.ts +0 -59
  372. package/examples/simple-http-server/contexts/http-server.context.types.ts +0 -0
  373. package/examples/simple-http-server/controllers/orders.controller.ts +0 -20
  374. package/examples/simple-http-server/controllers/users.controller.ts +0 -104
  375. package/examples/simple-http-server/test.ts +0 -290
  376. package/src/base/A-Config/A-Config.container.ts +0 -68
  377. package/src/base/A-Config/A-Config.context.ts +0 -114
  378. package/src/base/A-Config/A-Config.types.ts +0 -28
  379. package/src/base/A-Config/components/ConfigReader.component.ts +0 -68
  380. package/src/base/A-Config/components/ENVConfigReader.component.ts +0 -31
  381. package/src/base/A-Config/components/FileConfigReader.component.ts +0 -41
  382. package/src/base/A-Errors/A-Error.entity.ts +0 -10
  383. package/src/base/A-Errors/A-Errors.component.ts +0 -103
  384. package/src/base/A-Errors/A-Errors.context.ts +0 -90
  385. package/src/base/A-Errors/A-Errors.types.ts +0 -6
  386. package/src/base/A-Logger/A-Logger.component.ts +0 -192
  387. package/src/base/A-Logger/A-Logger.types.ts +0 -0
  388. package/src/base/A-Polyfill/A-Polyfill.component.ts +0 -18
  389. package/src/decorators/A-Abstraction/A-Abstraction-Extend.decorator.ts +0 -81
  390. package/src/decorators/A-Abstraction/A-Abstraction.decorator.types.ts +0 -21
  391. package/src/decorators/A-Connect/A-Connect.decorator.ts +0 -71
  392. package/src/decorators/A-Connect/A-Connect.decorator.types.ts +0 -6
  393. package/src/decorators/A-Entity/A-Entity-List.decorator.ts +0 -12
  394. package/src/decorators/A-Entity/A-Entity.decorator.types.ts +0 -18
  395. package/src/decorators/A-Feature/A-Feature-Extend.decorator.ts +0 -151
  396. package/src/decorators/A-Feature/A-Feature.decorator.types.ts +0 -142
  397. package/src/decorators/A-Inject/A-Inject.decorator.ts +0 -119
  398. package/src/decorators/A-Inject/A-Inject.decorator.types.ts +0 -85
  399. package/src/global/A-Channel/A-Channel.class.ts +0 -111
  400. package/src/global/A-Channel/A-Channel.types.ts +0 -114
  401. package/src/global/A-Command/A-Command.class.ts +0 -419
  402. package/src/global/A-Command/A-Command.constants.ts +0 -27
  403. package/src/global/A-Command/A-Command.meta.ts +0 -22
  404. package/src/global/A-Command/A-Command.types.ts +0 -73
  405. package/src/global/A-Command/context/A_Command.context.ts +0 -114
  406. package/src/global/A-Concept/A_Concept.class.ts +0 -298
  407. package/src/global/A-Concept/A_Concept.meta.ts +0 -32
  408. package/src/global/A-Concept/A_Concept.types.ts +0 -143
  409. package/src/global/A-Feature/A-FeatureCaller.class.ts +0 -38
  410. package/src/global/A-Scope/A-Scope.constants.ts +0 -9
  411. package/src/types/A_Module.types.ts +0 -23
  412. package/tests/A-Command.test.ts +0 -133
  413. package/tests/A-Config.test.ts +0 -172
  414. /package/dist/src/global/A-Concept/{A_Concept.meta.d.ts → A-Concept.meta.d.ts} +0 -0
  415. /package/dist/src/{base/A-Logger/A-Logger.types.d.ts → global/ASEID/ASEID.constants.d.ts} +0 -0
  416. /package/{examples/fe-be/concept.ts → src/global/ASEID/ASEID.constants.ts} +0 -0
@@ -1,14 +1,22 @@
1
- import { A_Context } from "../A-Context/A-Context.class";
2
- import { A_Feature_Define } from "@adaas/a-concept/decorators/A-Feature/A-Feature-Define.decorator";
3
- import { A_Feature_Extend } from "@adaas/a-concept/decorators/A-Feature/A-Feature-Extend.decorator";
4
- import { A_TYPES__FeatureConstructor, A_TYPES__FeatureState, } from "./A-Feature.types";
5
- import { A_Error, A_TYPES__Required } from "@adaas/a-utils";
6
- import { A_TYPES__A_Feature_Extend } from "@adaas/a-concept/decorators/A-Feature/A-Feature.decorator.types";
1
+ import {
2
+ A_TYPES__Feature_Init,
3
+ A_TYPES__Feature_InitWithComponent,
4
+ A_TYPES__Feature_InitWithTemplate,
5
+ A_TYPES__FeatureAvailableComponents,
6
+ A_TYPES__FeatureState,
7
+ } from "./A-Feature.types";
8
+ import { A_Feature_Define } from "@adaas/a-concept/global/A-Feature/A-Feature-Define.decorator";
9
+ import { A_Feature_Extend } from "@adaas/a-concept/global/A-Feature/A-Feature-Extend.decorator";
7
10
  import { A_Stage } from "../A-Stage/A-Stage.class";
8
- import { StepsManager } from "@adaas/a-concept/helpers/StepsManager.class";
9
- import { A_Scope } from "../A-Scope/A-Scope.class";
11
+ import { A_StepsManager } from "@adaas/a-concept/helpers/A_StepsManager.class";
10
12
  import { A_StageError } from "../A-Stage/A-Stage.error";
11
- import { A_FeatureCaller } from "./A-FeatureCaller.class";
13
+ import { A_TypeGuards } from "@adaas/a-concept/helpers/A_TypeGuards.helper";
14
+ import { A_FeatureError } from "./A-Feature.error";
15
+ import { A_Context } from "../A-Context/A-Context.class";
16
+ import { A_Caller } from "../A-Caller/A_Caller.class";
17
+ import { A_Scope } from "../A-Scope/A-Scope.class";
18
+ import { A_Component } from "../A-Component/A-Component.class";
19
+
12
20
 
13
21
  /**
14
22
  * A_Feature is representing a feature that can be executed across multiple components
@@ -18,9 +26,11 @@ import { A_FeatureCaller } from "./A-FeatureCaller.class";
18
26
  * across the different, distributed components
19
27
  *
20
28
  */
21
- export class A_Feature {
22
-
29
+ export class A_Feature<T extends A_TYPES__FeatureAvailableComponents = A_TYPES__FeatureAvailableComponents> {
23
30
 
31
+ // =============================================================================
32
+ // --------------------------- Static Methods ---------------------------------
33
+ // =============================================================================
24
34
  /**
25
35
  * Define a new A-Feature
26
36
  */
@@ -28,80 +38,131 @@ export class A_Feature {
28
38
  return A_Feature_Define;
29
39
  }
30
40
 
31
-
32
41
  /**
33
42
  * Extend an existing A-Feature
34
43
  */
35
- static get Extend(): A_TYPES__A_Feature_Extend {
44
+ static get Extend(): typeof A_Feature_Extend {
36
45
  return A_Feature_Extend;
37
46
  }
38
-
39
-
40
- // protected scope: A_Scope
41
- protected stages: Array<A_Stage> = [];
47
+ // =============================================================================
48
+ // --------------------------- Internal Properties ----------------------------
49
+ // =============================================================================
50
+ /**
51
+ * The name of the Feature
52
+ */
53
+ protected _name!: string;
54
+ /**
55
+ * List of stages that are part of this Feature
56
+ */
57
+ protected _stages: Array<A_Stage> = [];
58
+ /**
59
+ * The Stage currently being processed
60
+ */
42
61
  protected _current?: A_Stage;
43
- protected _caller!: A_FeatureCaller;
62
+ /**
63
+ * Actual Index of the current Stage being processed
64
+ */
44
65
  protected _index: number = 0;
45
- protected SM: StepsManager;
46
-
47
- state: A_TYPES__FeatureState = A_TYPES__FeatureState.INITIALIZED;
48
-
49
- result?: any
50
- error?: A_Error
66
+ /**
67
+ * Steps Manager to organize the steps into stages
68
+ */
69
+ protected _SM!: A_StepsManager;
70
+ /**
71
+ * The Caller that initiated the Feature call
72
+ */
73
+ protected _caller!: A_Caller<T>;
74
+ /**
75
+ * The current state of the Feature
76
+ */
77
+ protected _state: A_TYPES__FeatureState = A_TYPES__FeatureState.INITIALIZED;
78
+ /**
79
+ * The error that caused the Feature to be interrupted
80
+ */
81
+ protected _error?: A_FeatureError
51
82
 
52
- readonly name: string;
53
- readonly Scope!: A_Scope;
54
83
 
55
84
 
85
+ /**
86
+ * A-Feature is a pipeline distributed by multiple components that can be easily attached or detached from the scope.
87
+ * Feature itself does not have scope, but attached to the caller who dictates how feature should be processed.
88
+ *
89
+ * Comparing to A-Command Feature does not store any state except statuses for better analysis.
90
+ *
91
+ * [!] Note: If A-Feature should have result use A-Fragment
92
+ *
93
+ * @param params
94
+ */
56
95
  constructor(
57
- params: A_TYPES__FeatureConstructor
96
+ /**
97
+ * Feature Initialization parameters
98
+ */
99
+ params: A_TYPES__Feature_Init<T>
58
100
  ) {
59
- this.name = params.name || this.constructor.name;
60
- this.Scope = params.scope
101
+ this.validateParams(params);
61
102
 
62
- this.SM = new StepsManager(params.steps);
63
-
64
- this.stages = this.SM.toStages(this);
65
-
66
- this._current = this.stages[0];
67
-
68
- this._caller = new A_FeatureCaller(params.caller);
103
+ const initializer = this.getInitializer(params);
104
+ // the returned initializer is already bound to `this` (we used .bind(this)),
105
+ // so calling it will run the appropriate logic on this instance:
106
+ initializer.call(this, params);
69
107
  }
70
108
 
71
109
 
110
+ /**
111
+ * The name of the Feature
112
+ */
113
+ get name(): string { return this._name; }
114
+ /**
115
+ * The error that caused the Feature to be interrupted
116
+ */
117
+ get error(): A_FeatureError | undefined { return this._error; }
118
+ /**
119
+ * The current state of the Feature
120
+ */
121
+ get state(): A_TYPES__FeatureState { return this._state; }
122
+ /**
123
+ * Sets the current state of the Feature
124
+ */
125
+ get index(): number { return this._index; }
72
126
  /**
73
127
  * Returns the current A-Feature Stage
74
- *
75
128
  */
76
- get stage(): A_Stage | undefined {
77
- return this._current;
78
- }
79
-
129
+ get stage(): A_Stage | undefined { return this._current; }
130
+ /**
131
+ * The Caller that initiated the Feature call
132
+ */
133
+ get caller(): A_Caller<T> { return this._caller; }
134
+ /**
135
+ * The Scope allocated for the Feature Execution
136
+ */
137
+ get scope(): A_Scope { return A_Context.scope(this); }
80
138
 
81
- get Caller(): A_FeatureCaller {
82
- return this._caller;
139
+ /**
140
+ * This method checks if the A-Feature is done
141
+ *
142
+ * @returns
143
+ */
144
+ get isDone(): boolean {
145
+ return !this.stage
146
+ || this._index >= this._stages.length
147
+ || this.state === A_TYPES__FeatureState.COMPLETED
148
+ || this.state === A_TYPES__FeatureState.INTERRUPTED;
83
149
  }
84
-
85
-
86
150
  /**
87
- * Custom iterator to iterate over the steps of the feature
151
+ * Iterator to iterate over the steps of the feature
88
152
  *
89
153
  * @returns
90
154
  */
91
155
  [Symbol.iterator](): Iterator<A_Stage, any> {
92
156
  return {
93
- // Custom next method
94
157
  next: (): IteratorResult<A_Stage, any> => {
95
- if (!this.isDone()) {
96
-
97
- this._current = this.stages[this._index];
158
+ if (!this.isDone) {
159
+ this._current = this._stages[this._index];
98
160
 
99
161
  return {
100
162
  value: this._current,
101
163
  done: false
102
164
  };
103
165
  } else {
104
-
105
166
  this._current = undefined; // Reset current on end
106
167
 
107
168
  return {
@@ -113,122 +174,218 @@ export class A_Feature {
113
174
  };
114
175
  }
115
176
 
116
-
117
-
118
-
177
+ // ============================================================================
178
+ // ------------------------ Initialization Methods ----------------------------
179
+ // ============================================================================
119
180
  /**
120
- * This method checks if the A-Feature is done
181
+ * Validates the provided parameters for A-Feature initialization
121
182
  *
122
- * @returns
183
+ * @param params
123
184
  */
124
- isDone(): boolean {
125
- return !this.stage
126
- || this._index >= this.stages.length
127
- || this.state === A_TYPES__FeatureState.COMPLETED
128
- || this.state === A_TYPES__FeatureState.FAILED;
185
+ protected validateParams(
186
+ params: A_TYPES__Feature_Init<T>
187
+ ) {
188
+ if (!params || typeof params !== 'object') {
189
+ throw new A_FeatureError(
190
+ A_FeatureError.FeatureInitializationError,
191
+ `Invalid A-Feature initialization parameters of type: ${typeof params} with value: ${JSON.stringify(params).slice(0, 100)}...`
192
+ );
193
+ }
129
194
  }
130
-
131
-
132
-
133
195
  /**
134
- * This method moves the feature to the next stage
196
+ * Returns the appropriate initializer method based on the provided parameters
135
197
  *
136
- * @param stage
198
+ * @param params
199
+ * @returns
137
200
  */
138
- next(stage) {
139
- const stageIndex = this.stages.indexOf(stage);
201
+ protected getInitializer(
202
+ params: A_TYPES__Feature_Init<T>
203
+ ): (param1: any) => void | (() => void) {
140
204
 
141
- this._index = stageIndex + 1;
205
+ switch (true) {
206
+ case 'component' in params:
207
+ return this.fromComponent;
142
208
 
143
- if (this._index >= this.stages.length) {
144
- this.completed();
209
+ case 'template' in params:
210
+ return this.fromTemplate;
211
+ default:
212
+ throw new A_FeatureError(
213
+ A_FeatureError.FeatureInitializationError,
214
+ `Invalid A-Feature initialization parameters of type: ${typeof params} with value: ${JSON.stringify(params).slice(0, 100)}...`
215
+ );
145
216
  }
146
217
  }
147
-
148
-
149
218
  /**
150
- * This method marks the feature as completed and returns the result
151
- * Uses to interrupt or end the feature processing
152
- *
153
- * The result of the feature is a Scope Fragments
219
+ * Initializes the A-Feature from the provided template
154
220
  *
155
- * @param result
156
- * @returns
221
+ * @param params
157
222
  */
158
- async completed<T extends any>(): Promise<T> {
223
+ protected fromTemplate(
224
+ params: A_TYPES__Feature_InitWithTemplate
225
+ ) {
226
+ if (!params.template || !Array.isArray(params.template)) {
227
+ throw new A_FeatureError(
228
+ A_FeatureError.FeatureInitializationError,
229
+ `Invalid A-Feature template provided of type: ${typeof params.template} with value: ${JSON.stringify(params.template).slice(0, 100)}...`
230
+ );
231
+ }
159
232
 
160
- this.result = this.Scope.toJSON();
233
+ if (!params.scope || !(params.scope instanceof A_Scope)) {
234
+ throw new A_FeatureError(
235
+ A_FeatureError.FeatureInitializationError,
236
+ `Invalid A-Feature scope provided of type: ${typeof params.scope} with value: ${JSON.stringify(params.scope).slice(0, 100)}...`
237
+ );
238
+ }
161
239
 
162
- this.state = A_TYPES__FeatureState.COMPLETED;
240
+ // 1) save feature name
241
+ this._name = params.name;
163
242
 
164
- return this.result;
165
- }
243
+ // 2) get scope from where feature is called
244
+ const componentScope = params.scope;
166
245
 
246
+ // 3) create caller wrapper for the simple injection of the caller component
247
+ // - Just to prevent issues with undefined caller in features without component
248
+ // - TODO: maybe would be better to allow passing caller in params?
249
+ this._caller = new A_Caller<T>(new A_Component() as T);
167
250
 
168
- /**
169
- * This method marks the feature as failed and throws an error
170
- * Uses to interrupt or end the feature processing
171
- *
172
- * @param error
173
- */
174
- async failed(
175
- error: Error | A_Error | unknown
176
- ) {
177
- this.error = error as A_Error;
178
- this.state = A_TYPES__FeatureState.FAILED;
251
+ // 4) allocate new scope for the feature
252
+ const scope = A_Context.allocate(this);
179
253
 
254
+ // 5) ensure that the scope of the caller component is inherited by the feature scope
255
+ scope.inherit(componentScope);
180
256
 
181
- await this.errorHandler(error);
182
- }
257
+ // 6) create steps manager to organize steps into stages
258
+ this._SM = new A_StepsManager(params.template);
183
259
 
260
+ // 7) create stages from the steps
261
+ this._stages = this._SM.toStages(this);
184
262
 
263
+ // 8) set the first stage as current
264
+ this._current = this._stages[0];
265
+ }
185
266
  /**
186
- * This method processes the feature by executing all the stages
267
+ * Initializes the A-Feature from the provided component
187
268
  *
269
+ * @param params
188
270
  */
189
- async process(
190
- scope?: A_Scope
271
+ protected fromComponent(
272
+ params: A_TYPES__Feature_InitWithComponent<T>
191
273
  ) {
192
- // console.log('Processing feature:', this.name);
193
-
194
- if (this.isDone()) {
195
- return this.result;
274
+ if (!params.component || !A_TypeGuards.isAllowedForFeatureDefinition(params.component)) {
275
+ throw new A_FeatureError(
276
+ A_FeatureError.FeatureInitializationError,
277
+ `Invalid A-Feature component provided of type: ${typeof params.component} with value: ${JSON.stringify(params.component).slice(0, 100)}...`
278
+ );
196
279
  }
197
280
 
198
- try {
199
- this.state = A_TYPES__FeatureState.PROCESSING;
281
+ // 1) save feature name
282
+ this._name = params.name;
200
283
 
201
- for (const stage of this.stages) {
202
- // console.log('Processing stage:', stage.name);
284
+ // 2) get scope from where feature is called
285
+ const componentScope = A_Context.scope(params.component);
203
286
 
204
- await stage.process();
287
+ // 3) create caller wrapper for the simple injection of the caller component
288
+ this._caller = new A_Caller<T>(params.component);
205
289
 
206
- // console.log('Stage processed:', stage.name, 'Status:', stage.status);
207
- }
290
+ // 4) allocate new scope for the feature
291
+ const scope = A_Context.allocate(this);
292
+
293
+ // 5) ensure that the scope of the caller component is inherited by the feature scope
294
+ scope.inherit(componentScope);
295
+
296
+ // 6) retrieve the template from the context
297
+ const template = A_Context.featureTemplate(this._name, this._caller.component, scope);
298
+
299
+ // 7) create steps manager to organize steps into stages
300
+ this._SM = new A_StepsManager(template);
208
301
 
302
+ // 8) create stages from the steps
303
+ this._stages = this._SM.toStages(this);
209
304
 
210
- return await this.completed();
305
+ // 9) set the first stage as current
306
+ this._current = this._stages[0];
307
+ }
211
308
 
212
309
 
213
- } catch (error) {
310
+ // ============================================================================
311
+ // ----------------------- Main Processing Methods ----------------------------
312
+ // ============================================================================
313
+ /**
314
+ * This method processes the feature by executing all the stages
315
+ *
316
+ */
317
+ async process(
318
+ /**
319
+ * Optional scope to be used to resolve the steps dependencies
320
+ * If not provided, the scope of the caller component will be used
321
+ */
322
+ scope?: A_Scope,
323
+ ) {
324
+ if (this.isDone)
325
+ return;
214
326
 
215
- return await this.failed(error);
327
+ this._state = A_TYPES__FeatureState.PROCESSING;
328
+
329
+ for (const stage of this._stages) {
330
+ await stage.process(scope);
216
331
  }
217
332
 
333
+ return await this.completed();
218
334
  }
335
+ /**
336
+ * This method moves the feature to the next stage
337
+ *
338
+ * @param stage
339
+ */
340
+ next(stage) {
341
+ const stageIndex = this._stages.indexOf(stage);
219
342
 
343
+ this._index = stageIndex + 1;
220
344
 
221
- protected async errorHandler(error: Error | A_Error | unknown) {
222
-
345
+ if (this._index >= this._stages.length) {
346
+ this.completed();
347
+ }
348
+ }
349
+ /**
350
+ * This method marks the feature as completed and returns the result
351
+ * Uses to interrupt or end the feature processing
352
+ *
353
+ * @param result
354
+ * @returns
355
+ */
356
+ async completed(): Promise<void> {
357
+ this._state = A_TYPES__FeatureState.COMPLETED;
358
+ }
359
+ /**
360
+ * This method marks the feature as failed and throws an error
361
+ * Uses to interrupt or end the feature processing
362
+ *
363
+ * @param error
364
+ */
365
+ async interrupt(
366
+ /**
367
+ * The reason of feature interruption
368
+ */
369
+ reason?: string | A_StageError | Error
370
+ ) {
223
371
  switch (true) {
224
- case error instanceof A_StageError:
225
- return; // Do nothing, already handled in the stage
226
-
227
- case error instanceof A_Error:
228
- throw error;
372
+ case A_TypeGuards.isString(reason):
373
+ this._error = new A_FeatureError(A_FeatureError.Interruption, reason);
374
+ break;
375
+
376
+ case A_TypeGuards.isErrorInstance(reason):
377
+ this._error = new A_FeatureError({
378
+ code: A_FeatureError.Interruption,
379
+ message: reason.message,
380
+ description: reason.description,
381
+ originalError: reason
382
+ });
383
+ break;
229
384
 
230
385
  default:
231
- throw error;
386
+ break;
232
387
  }
388
+
389
+ this._state = A_TYPES__FeatureState.INTERRUPTED;
233
390
  }
234
391
  }
@@ -0,0 +1,33 @@
1
+ import { A_Error } from "../A-Error/A_Error.class";
2
+
3
+
4
+
5
+ export class A_FeatureError extends A_Error {
6
+
7
+ /**
8
+ * Indicates that the Feature has been interrupted
9
+ */
10
+ static readonly Interruption = 'Feature Interrupted';
11
+ /**
12
+ * Indicates that there was an error initializing the Feature
13
+ *
14
+ * Failed during the A-Feature initialization process
15
+ */
16
+ static readonly FeatureInitializationError = 'Unable to initialize A-Feature';
17
+
18
+ // =======================================================================
19
+ // ---------------------- Decorator Errors -----------------------------
20
+ // =======================================================================
21
+ /**
22
+ * Indicates that there was an error defining the Feature
23
+ *
24
+ * Failed during the @A_Feature.Define() decorator execution
25
+ */
26
+ static readonly FeatureDefinitionError = 'Unable to define A-Feature';
27
+ /**
28
+ * Indicates that there was an error extending the Feature
29
+ *
30
+ * Failed during the @A_Feature.Extend() decorator execution
31
+ */
32
+ static readonly FeatureExtensionError = 'Unable to extend A-Feature';
33
+ }