@adaas/a-server 0.0.19 → 0.0.20

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 (172) hide show
  1. package/dist/index.d.mts +739 -0
  2. package/dist/index.d.ts +739 -36
  3. package/dist/index.js +1904 -102
  4. package/dist/index.js.map +1 -1
  5. package/dist/index.mjs +1862 -0
  6. package/dist/index.mjs.map +1 -0
  7. package/package.json +5 -3
  8. package/src/components/A-ServerLogger/A_ServerLogger.component.ts +1 -1
  9. package/src/index.ts +75 -0
  10. package/tsconfig.build.json +9 -43
  11. package/tsconfig.json +1 -1
  12. package/tsup.config.ts +15 -0
  13. package/dist/src/channels/A-Http/A-Http.channel.constants.d.ts +0 -5
  14. package/dist/src/channels/A-Http/A-Http.channel.constants.js +0 -10
  15. package/dist/src/channels/A-Http/A-Http.channel.constants.js.map +0 -1
  16. package/dist/src/channels/A-Http/A-Http.channel.d.ts +0 -29
  17. package/dist/src/channels/A-Http/A-Http.channel.error.d.ts +0 -4
  18. package/dist/src/channels/A-Http/A-Http.channel.error.js +0 -9
  19. package/dist/src/channels/A-Http/A-Http.channel.error.js.map +0 -1
  20. package/dist/src/channels/A-Http/A-Http.channel.js +0 -154
  21. package/dist/src/channels/A-Http/A-Http.channel.js.map +0 -1
  22. package/dist/src/channels/A-Http/A-Http.channel.types.d.ts +0 -59
  23. package/dist/src/channels/A-Http/A-Http.channel.types.js +0 -3
  24. package/dist/src/channels/A-Http/A-Http.channel.types.js.map +0 -1
  25. package/dist/src/channels/A-Websockets/A-Websockets.channel.d.ts +0 -4
  26. package/dist/src/channels/A-Websockets/A-Websockets.channel.js +0 -22
  27. package/dist/src/channels/A-Websockets/A-Websockets.channel.js.map +0 -1
  28. package/dist/src/components/A-CommandController/A-CommandController.component.d.ts +0 -8
  29. package/dist/src/components/A-CommandController/A-CommandController.component.js +0 -55
  30. package/dist/src/components/A-CommandController/A-CommandController.component.js.map +0 -1
  31. package/dist/src/components/A-Controller/A-Controller.component.d.ts +0 -9
  32. package/dist/src/components/A-Controller/A-Controller.component.js +0 -60
  33. package/dist/src/components/A-Controller/A-Controller.component.js.map +0 -1
  34. package/dist/src/components/A-Controller/A-Controller.component.types.d.ts +0 -0
  35. package/dist/src/components/A-Controller/A-Controller.component.types.js +0 -2
  36. package/dist/src/components/A-Controller/A-Controller.component.types.js.map +0 -1
  37. package/dist/src/components/A-EntityController/A-EntityController.component.d.ts +0 -26
  38. package/dist/src/components/A-EntityController/A-EntityController.component.js +0 -226
  39. package/dist/src/components/A-EntityController/A-EntityController.component.js.map +0 -1
  40. package/dist/src/components/A-EntityController/A-EntityController.component.types.d.ts +0 -0
  41. package/dist/src/components/A-EntityController/A-EntityController.component.types.js +0 -2
  42. package/dist/src/components/A-EntityController/A-EntityController.component.types.js.map +0 -1
  43. package/dist/src/components/A-EntityRepository/A-EntityRepository.component.d.ts +0 -9
  44. package/dist/src/components/A-EntityRepository/A-EntityRepository.component.js +0 -118
  45. package/dist/src/components/A-EntityRepository/A-EntityRepository.component.js.map +0 -1
  46. package/dist/src/components/A-EntityRepository/A-EntityRepository.error.d.ts +0 -0
  47. package/dist/src/components/A-EntityRepository/A-EntityRepository.error.js +0 -2
  48. package/dist/src/components/A-EntityRepository/A-EntityRepository.error.js.map +0 -1
  49. package/dist/src/components/A-EntityRepository/A-EntityRepository.types.d.ts +0 -0
  50. package/dist/src/components/A-EntityRepository/A-EntityRepository.types.js +0 -2
  51. package/dist/src/components/A-EntityRepository/A-EntityRepository.types.js.map +0 -1
  52. package/dist/src/components/A-ListingController/A-ListingController.component.d.ts +0 -10
  53. package/dist/src/components/A-ListingController/A-ListingController.component.js +0 -72
  54. package/dist/src/components/A-ListingController/A-ListingController.component.js.map +0 -1
  55. package/dist/src/components/A-ListingController/A-ListingController.component.types.d.ts +0 -0
  56. package/dist/src/components/A-ListingController/A-ListingController.component.types.js +0 -2
  57. package/dist/src/components/A-ListingController/A-ListingController.component.types.js.map +0 -1
  58. package/dist/src/components/A-Router/A-Router.component.d.ts +0 -63
  59. package/dist/src/components/A-Router/A-Router.component.js +0 -221
  60. package/dist/src/components/A-Router/A-Router.component.js.map +0 -1
  61. package/dist/src/components/A-Router/A-Router.component.types.d.ts +0 -26
  62. package/dist/src/components/A-Router/A-Router.component.types.js +0 -17
  63. package/dist/src/components/A-Router/A-Router.component.types.js.map +0 -1
  64. package/dist/src/components/A-ServerCORS/A_ServerCORS.component.d.ts +0 -9
  65. package/dist/src/components/A-ServerCORS/A_ServerCORS.component.defaults.d.ts +0 -2
  66. package/dist/src/components/A-ServerCORS/A_ServerCORS.component.defaults.js +0 -11
  67. package/dist/src/components/A-ServerCORS/A_ServerCORS.component.defaults.js.map +0 -1
  68. package/dist/src/components/A-ServerCORS/A_ServerCORS.component.js +0 -70
  69. package/dist/src/components/A-ServerCORS/A_ServerCORS.component.js.map +0 -1
  70. package/dist/src/components/A-ServerCORS/A_ServerCORS.component.types.d.ts +0 -7
  71. package/dist/src/components/A-ServerCORS/A_ServerCORS.component.types.js +0 -3
  72. package/dist/src/components/A-ServerCORS/A_ServerCORS.component.types.js.map +0 -1
  73. package/dist/src/components/A-ServerError/A-ServerError.class.d.ts +0 -7
  74. package/dist/src/components/A-ServerError/A-ServerError.class.js +0 -88
  75. package/dist/src/components/A-ServerError/A-ServerError.class.js.map +0 -1
  76. package/dist/src/components/A-ServerError/A-ServerError.constants.d.ts +0 -0
  77. package/dist/src/components/A-ServerError/A-ServerError.constants.js +0 -2
  78. package/dist/src/components/A-ServerError/A-ServerError.constants.js.map +0 -1
  79. package/dist/src/components/A-ServerError/A-ServerError.types.d.ts +0 -13
  80. package/dist/src/components/A-ServerError/A-ServerError.types.js +0 -3
  81. package/dist/src/components/A-ServerError/A-ServerError.types.js.map +0 -1
  82. package/dist/src/components/A-ServerHealthMonitor/A-ServerHealthMonitor.component.d.ts +0 -7
  83. package/dist/src/components/A-ServerHealthMonitor/A-ServerHealthMonitor.component.js +0 -81
  84. package/dist/src/components/A-ServerHealthMonitor/A-ServerHealthMonitor.component.js.map +0 -1
  85. package/dist/src/components/A-ServerHealthMonitor/A-ServerHealthMonitor.component.types.d.ts +0 -0
  86. package/dist/src/components/A-ServerHealthMonitor/A-ServerHealthMonitor.component.types.js +0 -2
  87. package/dist/src/components/A-ServerHealthMonitor/A-ServerHealthMonitor.component.types.js.map +0 -1
  88. package/dist/src/components/A-ServerLogger/A-ServerLogger.constants.d.ts +0 -22
  89. package/dist/src/components/A-ServerLogger/A-ServerLogger.constants.js +0 -31
  90. package/dist/src/components/A-ServerLogger/A-ServerLogger.constants.js.map +0 -1
  91. package/dist/src/components/A-ServerLogger/A_ServerLogger.component.d.ts +0 -43
  92. package/dist/src/components/A-ServerLogger/A_ServerLogger.component.js +0 -167
  93. package/dist/src/components/A-ServerLogger/A_ServerLogger.component.js.map +0 -1
  94. package/dist/src/components/A-ServerLogger/A_ServerLogger.component.types.d.ts +0 -9
  95. package/dist/src/components/A-ServerLogger/A_ServerLogger.component.types.js +0 -3
  96. package/dist/src/components/A-ServerLogger/A_ServerLogger.component.types.js.map +0 -1
  97. package/dist/src/components/A-ServerProxy/A-ServerProxy.component.d.ts +0 -9
  98. package/dist/src/components/A-ServerProxy/A-ServerProxy.component.js +0 -88
  99. package/dist/src/components/A-ServerProxy/A-ServerProxy.component.js.map +0 -1
  100. package/dist/src/components/A-StaticLoader/A-StaticLoader.component.d.ts +0 -12
  101. package/dist/src/components/A-StaticLoader/A-StaticLoader.component.js +0 -126
  102. package/dist/src/components/A-StaticLoader/A-StaticLoader.component.js.map +0 -1
  103. package/dist/src/components/A-StaticLoader/A-StaticLoader.component.types.d.ts +0 -10
  104. package/dist/src/components/A-StaticLoader/A-StaticLoader.component.types.js +0 -109
  105. package/dist/src/components/A-StaticLoader/A-StaticLoader.component.types.js.map +0 -1
  106. package/dist/src/constants/env.constants.d.ts +0 -10
  107. package/dist/src/constants/env.constants.js +0 -20
  108. package/dist/src/constants/env.constants.js.map +0 -1
  109. package/dist/src/containers/A-Service/A-Service.container.d.ts +0 -30
  110. package/dist/src/containers/A-Service/A-Service.container.js +0 -200
  111. package/dist/src/containers/A-Service/A-Service.container.js.map +0 -1
  112. package/dist/src/containers/A-Service/A-Service.container.types.d.ts +0 -36
  113. package/dist/src/containers/A-Service/A-Service.container.types.js +0 -27
  114. package/dist/src/containers/A-Service/A-Service.container.types.js.map +0 -1
  115. package/dist/src/context/A-EntityFactory/A-EntityFactory.context.d.ts +0 -39
  116. package/dist/src/context/A-EntityFactory/A-EntityFactory.context.js +0 -69
  117. package/dist/src/context/A-EntityFactory/A-EntityFactory.context.js.map +0 -1
  118. package/dist/src/context/A-EntityFactory/A-EntityFactory.context.types.d.ts +0 -5
  119. package/dist/src/context/A-EntityFactory/A-EntityFactory.context.types.js +0 -3
  120. package/dist/src/context/A-EntityFactory/A-EntityFactory.context.types.js.map +0 -1
  121. package/dist/src/context/A-HttpChannel/A-HttpChannel.context.d.ts +0 -12
  122. package/dist/src/context/A-HttpChannel/A-HttpChannel.context.js +0 -16
  123. package/dist/src/context/A-HttpChannel/A-HttpChannel.context.js.map +0 -1
  124. package/dist/src/context/A-ListQueryFilter/A_ListQueryFilter.context.d.ts +0 -10
  125. package/dist/src/context/A-ListQueryFilter/A_ListQueryFilter.context.js +0 -30
  126. package/dist/src/context/A-ListQueryFilter/A_ListQueryFilter.context.js.map +0 -1
  127. package/dist/src/context/A-ProxyConfig/A_ProxyConfig.constants.d.ts +0 -2
  128. package/dist/src/context/A-ProxyConfig/A_ProxyConfig.constants.js +0 -12
  129. package/dist/src/context/A-ProxyConfig/A_ProxyConfig.constants.js.map +0 -1
  130. package/dist/src/context/A-ProxyConfig/A_ProxyConfig.context.d.ts +0 -29
  131. package/dist/src/context/A-ProxyConfig/A_ProxyConfig.context.js +0 -60
  132. package/dist/src/context/A-ProxyConfig/A_ProxyConfig.context.js.map +0 -1
  133. package/dist/src/context/A-ProxyConfig/A_ProxyConfig.types.d.ts +0 -18
  134. package/dist/src/context/A-ProxyConfig/A_ProxyConfig.types.js +0 -3
  135. package/dist/src/context/A-ProxyConfig/A_ProxyConfig.types.js.map +0 -1
  136. package/dist/src/context/A-Server/A_Server.context.d.ts +0 -17
  137. package/dist/src/context/A-Server/A_Server.context.js +0 -22
  138. package/dist/src/context/A-Server/A_Server.context.js.map +0 -1
  139. package/dist/src/context/A-Server/A_Server.context.types.d.ts +0 -7
  140. package/dist/src/context/A-Server/A_Server.context.types.js +0 -3
  141. package/dist/src/context/A-Server/A_Server.context.types.js.map +0 -1
  142. package/dist/src/context/A-StaticConfig/A-StaticConfig.context.d.ts +0 -16
  143. package/dist/src/context/A-StaticConfig/A-StaticConfig.context.js +0 -28
  144. package/dist/src/context/A-StaticConfig/A-StaticConfig.context.js.map +0 -1
  145. package/dist/src/context/A-StaticConfig/A-StaticConfig.context.types.d.ts +0 -0
  146. package/dist/src/context/A-StaticConfig/A-StaticConfig.context.types.js +0 -2
  147. package/dist/src/context/A-StaticConfig/A-StaticConfig.context.types.js.map +0 -1
  148. package/dist/src/entities/A-Request/A-Request.entity.d.ts +0 -31
  149. package/dist/src/entities/A-Request/A-Request.entity.js +0 -125
  150. package/dist/src/entities/A-Request/A-Request.entity.js.map +0 -1
  151. package/dist/src/entities/A-Request/A-Request.entity.types.d.ts +0 -21
  152. package/dist/src/entities/A-Request/A-Request.entity.types.js +0 -12
  153. package/dist/src/entities/A-Request/A-Request.entity.types.js.map +0 -1
  154. package/dist/src/entities/A-Response/A-Response.entity.d.ts +0 -28
  155. package/dist/src/entities/A-Response/A-Response.entity.js +0 -141
  156. package/dist/src/entities/A-Response/A-Response.entity.js.map +0 -1
  157. package/dist/src/entities/A-Response/A-Response.entity.types.d.ts +0 -19
  158. package/dist/src/entities/A-Response/A-Response.entity.types.js +0 -12
  159. package/dist/src/entities/A-Response/A-Response.entity.types.js.map +0 -1
  160. package/dist/src/entities/A-Route/A-Route.entity.d.ts +0 -17
  161. package/dist/src/entities/A-Route/A-Route.entity.js +0 -76
  162. package/dist/src/entities/A-Route/A-Route.entity.js.map +0 -1
  163. package/dist/src/entities/A-Route/A-Route.entity.types.d.ts +0 -0
  164. package/dist/src/entities/A-Route/A-Route.entity.types.js +0 -2
  165. package/dist/src/entities/A-Route/A-Route.entity.types.js.map +0 -1
  166. package/dist/src/entities/A_EntityList/A_EntityList.entity.d.ts +0 -46
  167. package/dist/src/entities/A_EntityList/A_EntityList.entity.js +0 -91
  168. package/dist/src/entities/A_EntityList/A_EntityList.entity.js.map +0 -1
  169. package/dist/src/entities/A_EntityList/A_EntityList.entity.types.d.ts +0 -21
  170. package/dist/src/entities/A_EntityList/A_EntityList.entity.types.js +0 -8
  171. package/dist/src/entities/A_EntityList/A_EntityList.entity.types.js.map +0 -1
  172. package/index.ts +0 -75
package/dist/index.js CHANGED
@@ -1,103 +1,1905 @@
1
- "use strict";
2
- // ============================================================================
3
- // ADAAS A-Server SDK - Complete Export Manifest
4
- // ============================================================================
5
- var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
6
- if (k2 === undefined) k2 = k;
7
- var desc = Object.getOwnPropertyDescriptor(m, k);
8
- if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
9
- desc = { enumerable: true, get: function() { return m[k]; } };
10
- }
11
- Object.defineProperty(o, k2, desc);
12
- }) : (function(o, m, k, k2) {
13
- if (k2 === undefined) k2 = k;
14
- o[k2] = m[k];
15
- }));
16
- var __exportStar = (this && this.__exportStar) || function(m, exports) {
17
- for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
18
- };
19
- Object.defineProperty(exports, "__esModule", { value: true });
20
- exports.A_ServerError = exports.A_EntityRepository = exports.A_CommandController = exports.A_ListingController = exports.A_Controller = exports.A_StaticLoader = exports.A_ServerCORS = exports.A_ServerProxy = exports.A_ServerHealthMonitor = exports.A_Router = exports.A_EntityController = exports.A_ServerLogger = exports.A_EntityList = exports.A_Route = exports.A_Response = exports.A_Request = exports.A_HTTPChannel_RequestContext = exports.A_EntityFactory = exports.A_ListQueryFilter = exports.A_StaticConfig = exports.A_ProxyConfig = exports.A_Server = exports.A_Service = exports.A_HTTPChannelError = exports.A_HTTPChannel = void 0;
21
- // ============================================================================
22
- // Channels Export
23
- // ============================================================================
24
- var A_Http_channel_1 = require("./src/channels/A-Http/A-Http.channel");
25
- Object.defineProperty(exports, "A_HTTPChannel", { enumerable: true, get: function () { return A_Http_channel_1.A_HTTPChannel; } });
26
- var A_Http_channel_error_1 = require("./src/channels/A-Http/A-Http.channel.error");
27
- Object.defineProperty(exports, "A_HTTPChannelError", { enumerable: true, get: function () { return A_Http_channel_error_1.A_HTTPChannelError; } });
28
- // ============================================================================
29
- // Constants Export
30
- // ============================================================================
31
- __exportStar(require("./src/constants/env.constants"), exports);
32
- // ============================================================================
33
- // Containers Export
34
- // ============================================================================
35
- var A_Service_container_1 = require("./src/containers/A-Service/A-Service.container");
36
- Object.defineProperty(exports, "A_Service", { enumerable: true, get: function () { return A_Service_container_1.A_Service; } });
37
- // ============================================================================
38
- // Contexts Export
39
- // ============================================================================
40
- var A_Server_context_1 = require("./src/context/A-Server/A_Server.context");
41
- Object.defineProperty(exports, "A_Server", { enumerable: true, get: function () { return A_Server_context_1.A_Server; } });
42
- var A_ProxyConfig_context_1 = require("./src/context/A-ProxyConfig/A_ProxyConfig.context");
43
- Object.defineProperty(exports, "A_ProxyConfig", { enumerable: true, get: function () { return A_ProxyConfig_context_1.A_ProxyConfig; } });
44
- var A_StaticConfig_context_1 = require("./src/context/A-StaticConfig/A-StaticConfig.context");
45
- Object.defineProperty(exports, "A_StaticConfig", { enumerable: true, get: function () { return A_StaticConfig_context_1.A_StaticConfig; } });
46
- var A_ListQueryFilter_context_1 = require("./src/context/A-ListQueryFilter/A_ListQueryFilter.context");
47
- Object.defineProperty(exports, "A_ListQueryFilter", { enumerable: true, get: function () { return A_ListQueryFilter_context_1.A_ListQueryFilter; } });
48
- var A_EntityFactory_context_1 = require("./src/context/A-EntityFactory/A-EntityFactory.context");
49
- Object.defineProperty(exports, "A_EntityFactory", { enumerable: true, get: function () { return A_EntityFactory_context_1.A_EntityFactory; } });
50
- var A_HttpChannel_context_1 = require("./src/context/A-HttpChannel/A-HttpChannel.context");
51
- Object.defineProperty(exports, "A_HTTPChannel_RequestContext", { enumerable: true, get: function () { return A_HttpChannel_context_1.A_HTTPChannel_RequestContext; } });
52
- // ============================================================================
53
- // Entities Export
54
- // ============================================================================
55
- var A_Request_entity_1 = require("./src/entities/A-Request/A-Request.entity");
56
- Object.defineProperty(exports, "A_Request", { enumerable: true, get: function () { return A_Request_entity_1.A_Request; } });
57
- var A_Response_entity_1 = require("./src/entities/A-Response/A-Response.entity");
58
- Object.defineProperty(exports, "A_Response", { enumerable: true, get: function () { return A_Response_entity_1.A_Response; } });
59
- var A_Route_entity_1 = require("./src/entities/A-Route/A-Route.entity");
60
- Object.defineProperty(exports, "A_Route", { enumerable: true, get: function () { return A_Route_entity_1.A_Route; } });
61
- var A_EntityList_entity_1 = require("./src/entities/A_EntityList/A_EntityList.entity");
62
- Object.defineProperty(exports, "A_EntityList", { enumerable: true, get: function () { return A_EntityList_entity_1.A_EntityList; } });
63
- // ============================================================================
64
- // Components Export
65
- // ============================================================================
66
- var A_ServerLogger_component_1 = require("./src/components/A-ServerLogger/A_ServerLogger.component");
67
- Object.defineProperty(exports, "A_ServerLogger", { enumerable: true, get: function () { return A_ServerLogger_component_1.A_ServerLogger; } });
68
- var A_EntityController_component_1 = require("./src/components/A-EntityController/A-EntityController.component");
69
- Object.defineProperty(exports, "A_EntityController", { enumerable: true, get: function () { return A_EntityController_component_1.A_EntityController; } });
70
- var A_Router_component_1 = require("./src/components/A-Router/A-Router.component");
71
- Object.defineProperty(exports, "A_Router", { enumerable: true, get: function () { return A_Router_component_1.A_Router; } });
72
- var A_ServerHealthMonitor_component_1 = require("./src/components/A-ServerHealthMonitor/A-ServerHealthMonitor.component");
73
- Object.defineProperty(exports, "A_ServerHealthMonitor", { enumerable: true, get: function () { return A_ServerHealthMonitor_component_1.A_ServerHealthMonitor; } });
74
- var A_ServerProxy_component_1 = require("./src/components/A-ServerProxy/A-ServerProxy.component");
75
- Object.defineProperty(exports, "A_ServerProxy", { enumerable: true, get: function () { return A_ServerProxy_component_1.A_ServerProxy; } });
76
- var A_ServerCORS_component_1 = require("./src/components/A-ServerCORS/A_ServerCORS.component");
77
- Object.defineProperty(exports, "A_ServerCORS", { enumerable: true, get: function () { return A_ServerCORS_component_1.A_ServerCORS; } });
78
- var A_StaticLoader_component_1 = require("./src/components/A-StaticLoader/A-StaticLoader.component");
79
- Object.defineProperty(exports, "A_StaticLoader", { enumerable: true, get: function () { return A_StaticLoader_component_1.A_StaticLoader; } });
80
- var A_Controller_component_1 = require("./src/components/A-Controller/A-Controller.component");
81
- Object.defineProperty(exports, "A_Controller", { enumerable: true, get: function () { return A_Controller_component_1.A_Controller; } });
82
- var A_ListingController_component_1 = require("./src/components/A-ListingController/A-ListingController.component");
83
- Object.defineProperty(exports, "A_ListingController", { enumerable: true, get: function () { return A_ListingController_component_1.A_ListingController; } });
84
- var A_CommandController_component_1 = require("./src/components/A-CommandController/A-CommandController.component");
85
- Object.defineProperty(exports, "A_CommandController", { enumerable: true, get: function () { return A_CommandController_component_1.A_CommandController; } });
86
- var A_EntityRepository_component_1 = require("./src/components/A-EntityRepository/A-EntityRepository.component");
87
- Object.defineProperty(exports, "A_EntityRepository", { enumerable: true, get: function () { return A_EntityRepository_component_1.A_EntityRepository; } });
88
- var A_ServerError_class_1 = require("./src/components/A-ServerError/A-ServerError.class");
89
- Object.defineProperty(exports, "A_ServerError", { enumerable: true, get: function () { return A_ServerError_class_1.A_ServerError; } });
90
- // ============================================================================
91
- // Types Export
92
- // ============================================================================
93
- __exportStar(require("./src/containers/A-Service/A-Service.container.types"), exports);
94
- __exportStar(require("./src/context/A-ProxyConfig/A_ProxyConfig.types"), exports);
95
- __exportStar(require("./src/context/A-EntityFactory/A-EntityFactory.context.types"), exports);
96
- __exportStar(require("./src/entities/A-Request/A-Request.entity.types"), exports);
97
- __exportStar(require("./src/entities/A-Response/A-Response.entity.types"), exports);
98
- __exportStar(require("./src/components/A-ServerCORS/A_ServerCORS.component.types"), exports);
99
- __exportStar(require("./src/components/A-Router/A-Router.component.types"), exports);
100
- __exportStar(require("./src/components/A-ServerError/A-ServerError.types"), exports);
101
- __exportStar(require("./src/channels/A-Http/A-Http.channel.types"), exports);
102
- __exportStar(require("./src/channels/A-Http/A-Http.channel.constants"), exports);
1
+ 'use strict';
2
+
3
+ var aConcept = require('@adaas/a-concept');
4
+ var aUtils = require('@adaas/a-utils');
5
+ var http = require('http');
6
+ var crypto = require('crypto');
7
+ var https = require('https');
8
+ var fs = require('fs');
9
+ var path = require('path');
10
+ var url = require('url');
11
+ var AEntity_constants = require('@adaas/a-concept/dist/src/global/A-Entity/A-Entity.constants');
12
+
13
+ function _interopDefault (e) { return e && e.__esModule ? e : { default: e }; }
14
+
15
+ var http__default = /*#__PURE__*/_interopDefault(http);
16
+ var crypto__default = /*#__PURE__*/_interopDefault(crypto);
17
+ var https__default = /*#__PURE__*/_interopDefault(https);
18
+ var fs__default = /*#__PURE__*/_interopDefault(fs);
19
+ var path__default = /*#__PURE__*/_interopDefault(path);
20
+
21
+ var __defProp = Object.defineProperty;
22
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
23
+ var __decorateClass = (decorators, target, key, kind) => {
24
+ var result = __getOwnPropDesc(target, key) ;
25
+ for (var i = decorators.length - 1, decorator; i >= 0; i--)
26
+ if (decorator = decorators[i])
27
+ result = (decorator(target, key, result) ) || result;
28
+ if (result) __defProp(target, key, result);
29
+ return result;
30
+ };
31
+ var __decorateParam = (index, decorator) => (target, key) => decorator(target, key, index);
32
+
33
+ // src/containers/A-Service/A-Service.container.types.ts
34
+ var A_SERVER_TYPES__ServerFeature = /* @__PURE__ */ ((A_SERVER_TYPES__ServerFeature2) => {
35
+ A_SERVER_TYPES__ServerFeature2["beforeStart"] = "beforeStart";
36
+ A_SERVER_TYPES__ServerFeature2["afterStart"] = "afterStart";
37
+ A_SERVER_TYPES__ServerFeature2["beforeStop"] = "beforeStop";
38
+ A_SERVER_TYPES__ServerFeature2["afterStop"] = "afterStop";
39
+ A_SERVER_TYPES__ServerFeature2["beforeRequest"] = "beforeRequest";
40
+ A_SERVER_TYPES__ServerFeature2["onRequest"] = "onRequest";
41
+ A_SERVER_TYPES__ServerFeature2["afterRequest"] = "afterRequest";
42
+ return A_SERVER_TYPES__ServerFeature2;
43
+ })(A_SERVER_TYPES__ServerFeature || {});
44
+ var A_SERVER_TYPES__ServerMethod = /* @__PURE__ */ ((A_SERVER_TYPES__ServerMethod2) => {
45
+ A_SERVER_TYPES__ServerMethod2["GET"] = "GET";
46
+ A_SERVER_TYPES__ServerMethod2["POST"] = "POST";
47
+ A_SERVER_TYPES__ServerMethod2["PUT"] = "PUT";
48
+ A_SERVER_TYPES__ServerMethod2["DELETE"] = "DELETE";
49
+ A_SERVER_TYPES__ServerMethod2["PATCH"] = "PATCH";
50
+ A_SERVER_TYPES__ServerMethod2["OPTIONS"] = "OPTIONS";
51
+ A_SERVER_TYPES__ServerMethod2["HEAD"] = "HEAD";
52
+ A_SERVER_TYPES__ServerMethod2["CONNECT"] = "CONNECT";
53
+ A_SERVER_TYPES__ServerMethod2["TRACE"] = "TRACE";
54
+ A_SERVER_TYPES__ServerMethod2["DEFAULT"] = "DEFAULT";
55
+ return A_SERVER_TYPES__ServerMethod2;
56
+ })(A_SERVER_TYPES__ServerMethod || {});
57
+ var A_HTTPChannel_RequestContext = class extends aConcept.A_Fragment {
58
+ constructor(params) {
59
+ super();
60
+ const {
61
+ method,
62
+ url,
63
+ data,
64
+ config
65
+ } = params;
66
+ this.url = url;
67
+ this.method = method;
68
+ this.data = data;
69
+ this.config = config;
70
+ }
71
+ };
72
+
73
+ // src/channels/A-Http/A-Http.channel.constants.ts
74
+ var A_SERVER_CONSTANTS__A_HttpChannel_Lifecycle = /* @__PURE__ */ ((A_SERVER_CONSTANTS__A_HttpChannel_Lifecycle2) => {
75
+ A_SERVER_CONSTANTS__A_HttpChannel_Lifecycle2["onAfterRequest"] = "onAfterHttpChannelRequest";
76
+ A_SERVER_CONSTANTS__A_HttpChannel_Lifecycle2["onError"] = "onHttpChannelError";
77
+ A_SERVER_CONSTANTS__A_HttpChannel_Lifecycle2["onBeforeRequest"] = "onBeforeHttpChannelRequest";
78
+ return A_SERVER_CONSTANTS__A_HttpChannel_Lifecycle2;
79
+ })(A_SERVER_CONSTANTS__A_HttpChannel_Lifecycle || {});
80
+ var A_ServerError = class extends aConcept.A_Error {
81
+ constructor() {
82
+ super(...arguments);
83
+ this.status = 500;
84
+ }
85
+ // constructor(
86
+ // /**
87
+ // * A_Error Constructor params
88
+ // */
89
+ // params: A_SERVER_TYPES__ServerError_Init
90
+ // )
91
+ // constructor(
92
+ // /**
93
+ // * HTTP Status Code of the error
94
+ // */
95
+ // status: number,
96
+ // /**
97
+ // * Error message
98
+ // */
99
+ // message: string
100
+ // )
101
+ // constructor(
102
+ // /**
103
+ // * Original JS Error
104
+ // */
105
+ // error: Error
106
+ // )
107
+ // constructor(
108
+ // /**
109
+ // * HTTP Status Code of the error
110
+ // */
111
+ // status: number,
112
+ // /**
113
+ // * Error message
114
+ // */
115
+ // title: string,
116
+ // /**
117
+ // * Detailed description of the error
118
+ // */
119
+ // description: string
120
+ // )
121
+ // constructor(
122
+ // param1: A_SERVER_TYPES__ServerError_Init | Error | string | A_Error | number,
123
+ // param2?: string | A_Error,
124
+ // param3?: string
125
+ // ) {
126
+ // switch (true) {
127
+ // case typeof param1 === 'number':
128
+ // if (typeof param2 === 'string' && param3) {
129
+ // super({
130
+ // title: param2,
131
+ // description: param3
132
+ // });
133
+ // }
134
+ // else if (param2 instanceof A_Error) {
135
+ // super(param2);
136
+ // }
137
+ // else {
138
+ // super();
139
+ // }
140
+ // this.status = param1;
141
+ // break;
142
+ // case param1 instanceof A_Error:
143
+ // super (param1);
144
+ // break;
145
+ // case param1 instanceof Error:
146
+ // super (param1);
147
+ // break;
148
+ // default:
149
+ // break;
150
+ // }
151
+ // }
152
+ fromConstructor(params) {
153
+ super.fromConstructor(params);
154
+ if (params.status) {
155
+ this.status = params.status;
156
+ }
157
+ }
158
+ toJSON() {
159
+ return {
160
+ ...super.toJSON(),
161
+ status: this.status
162
+ };
163
+ }
164
+ };
165
+ var A_HTTPChannelError = class extends aConcept.A_Error {
166
+ };
167
+ A_HTTPChannelError.HttpRequestError = "HTTP Channel Request Error";
168
+
169
+ // src/channels/A-Http/A-Http.channel.ts
170
+ var A_HTTPChannel = class extends aUtils.A_Channel {
171
+ async connect() {
172
+ return;
173
+ }
174
+ /**
175
+ * Allows to send an HTTP request without expecting a response
176
+ *
177
+ * @param params
178
+ */
179
+ async send(params) {
180
+ this.request(params);
181
+ }
182
+ /**
183
+ * Makes an HTTP request
184
+ *
185
+ * @param params
186
+ * @returns
187
+ */
188
+ async request(params) {
189
+ const { method, url, data, config } = params;
190
+ await this.initialize;
191
+ this._processing = true;
192
+ const fullUrl = this.buildURL(url, config?.params);
193
+ const requestScope = new aConcept.A_Scope({ name: `a-http-channel-request-scope-${method}-${url}-${Date.now()}` });
194
+ const context = new A_HTTPChannel_RequestContext({
195
+ method,
196
+ url,
197
+ data,
198
+ config
199
+ });
200
+ requestScope.inherit(aConcept.A_Context.scope(this));
201
+ requestScope.register(context);
202
+ try {
203
+ await this.call("onBeforeHttpChannelRequest" /* onBeforeRequest */, requestScope);
204
+ const headers = {
205
+ "Content-Type": "application/json",
206
+ ...config?.headers
207
+ };
208
+ const options = {
209
+ method,
210
+ headers
211
+ };
212
+ if (data && method !== "GET" /* GET */) {
213
+ options.body = JSON.stringify(data);
214
+ }
215
+ const response = await fetch(fullUrl, options);
216
+ if (!response.ok) {
217
+ throw new A_ServerError({
218
+ status: response.status,
219
+ title: response.statusText,
220
+ description: `HTTP request to ${fullUrl} failed with status ${response.status}`
221
+ });
222
+ }
223
+ context.result = config?.params?.responseType === "text" ? await response.text() : config?.params?.responseType === "blob" ? await response.blob() : await response.json();
224
+ await this.call("onAfterHttpChannelRequest" /* onAfterRequest */, requestScope);
225
+ this._processing = false;
226
+ return context;
227
+ } catch (error) {
228
+ this._processing = false;
229
+ context.error = error;
230
+ await this.call("onHttpChannelError" /* onError */, requestScope);
231
+ if (config?.throwOnError === false)
232
+ return context;
233
+ else
234
+ throw error;
235
+ }
236
+ }
237
+ async post(url, body, config) {
238
+ return this.request(
239
+ {
240
+ method: "POST" /* POST */,
241
+ url,
242
+ data: body,
243
+ config
244
+ }
245
+ );
246
+ }
247
+ async get(url, params, config) {
248
+ return this.request(
249
+ {
250
+ method: "GET" /* GET */,
251
+ url,
252
+ config: {
253
+ ...config,
254
+ params
255
+ }
256
+ }
257
+ );
258
+ }
259
+ async put(url, body, config) {
260
+ return this.request({
261
+ method: "PUT" /* PUT */,
262
+ url,
263
+ data: body,
264
+ config
265
+ });
266
+ }
267
+ async delete(url, params, config) {
268
+ return this.request({
269
+ method: "DELETE" /* DELETE */,
270
+ url,
271
+ data: params,
272
+ config
273
+ });
274
+ }
275
+ buildURL(path2 = "", params = {}) {
276
+ if (!this.baseUrl)
277
+ throw new A_HTTPChannelError(
278
+ A_HTTPChannelError.HttpRequestError,
279
+ "Base URL is not set for HTTP Channel"
280
+ );
281
+ const url = new URL(`${this.baseUrl}${path2.startsWith("/") ? path2 : `/${path2}`}`);
282
+ Object.keys(params).forEach((key) => {
283
+ if (params[key] !== void 0 && params[key] !== null) {
284
+ url.searchParams.append(key, params[key]);
285
+ }
286
+ });
287
+ return url.toString();
288
+ }
289
+ };
290
+
291
+ // src/constants/env.constants.ts
292
+ var A_SERVER_CONSTANTS__DEFAULT_ENV_VARIABLES = {
293
+ // ----------------------------------------------------------
294
+ // A-Server Environment Variables
295
+ // ----------------------------------------------------------
296
+ // These environment variables are used by A-Server to configure the application
297
+ // ----------------------------------------------------------
298
+ /**
299
+ * Port for the server to listen on
300
+ * [!] Default is 3000
301
+ * @default 3000
302
+ */
303
+ A_SERVER_PORT: "A_SERVER_PORT"
304
+ };
305
+ var A_SERVER_CONSTANTS__DEFAULT_ENV_VARIABLES_ARRAY = [
306
+ A_SERVER_CONSTANTS__DEFAULT_ENV_VARIABLES.A_SERVER_PORT
307
+ ];
308
+ var A_Server = class extends aConcept.A_Fragment {
309
+ constructor(params) {
310
+ super(params);
311
+ this._routes = [];
312
+ this.port = params.port;
313
+ this.name = params.name;
314
+ this.version = params.version || "v1";
315
+ this._routes = params.routes || this._routes;
316
+ }
317
+ /**
318
+ * A list of routes that the server will listen to
319
+ */
320
+ get routes() {
321
+ return this._routes;
322
+ }
323
+ };
324
+
325
+ // src/entities/A-Request/A-Request.entity.types.ts
326
+ var A_SERVER_TYPES__RequestEvent = /* @__PURE__ */ ((A_SERVER_TYPES__RequestEvent2) => {
327
+ A_SERVER_TYPES__RequestEvent2["Error"] = "error";
328
+ A_SERVER_TYPES__RequestEvent2["Finish"] = "finish";
329
+ A_SERVER_TYPES__RequestEvent2["Data"] = "data";
330
+ A_SERVER_TYPES__RequestEvent2["End"] = "end";
331
+ A_SERVER_TYPES__RequestEvent2["Close"] = "close";
332
+ return A_SERVER_TYPES__RequestEvent2;
333
+ })(A_SERVER_TYPES__RequestEvent || {});
334
+
335
+ // src/entities/A-Route/A-Route.entity.ts
336
+ var A_Route = class {
337
+ constructor(param1, param2) {
338
+ this.url = param1 instanceof RegExp ? param1.source : param1;
339
+ this.method = param2 || "GET";
340
+ }
341
+ /**
342
+ * returns path only without query and hash
343
+ */
344
+ get path() {
345
+ const p = this.url.split("?")[0].split("#")[0];
346
+ return p.endsWith("/") ? p.slice(0, -1) : p;
347
+ }
348
+ get params() {
349
+ return this.path.match(/:([^\/]+)/g)?.map((param) => param.slice(1)) || [];
350
+ }
351
+ extractParams(url) {
352
+ const cleanUrl = url.split("?")[0];
353
+ const urlSegments = cleanUrl.split("/").filter(Boolean);
354
+ const maskSegments = this.path.split("/").filter(Boolean);
355
+ const params = {};
356
+ for (let i = 0; i < maskSegments.length; i++) {
357
+ const maskSegment = maskSegments[i];
358
+ const urlSegment = urlSegments[i];
359
+ if (maskSegment.startsWith(":")) {
360
+ const paramName = maskSegment.slice(1);
361
+ params[paramName] = urlSegment;
362
+ } else if (maskSegment !== urlSegment) {
363
+ return {};
364
+ }
365
+ }
366
+ return params;
367
+ }
368
+ extractQuery(url) {
369
+ const query = {};
370
+ const queryString = url.split("?")[1];
371
+ if (!queryString) return query;
372
+ const cleanQuery = queryString.split("#")[0];
373
+ for (const pair of cleanQuery.split("&")) {
374
+ if (!pair) continue;
375
+ const [key, value = ""] = pair.split("=");
376
+ query[decodeURIComponent(key)] = decodeURIComponent(value);
377
+ }
378
+ return query;
379
+ }
380
+ toString() {
381
+ return `${this.method}::${this.path}`;
382
+ }
383
+ toRegExp() {
384
+ return new RegExp(`^${this.method}::${this.path.replace(/\/:([^\/]+)/g, "/([^/]+)")}$`);
385
+ }
386
+ toAFeatureExtension(extensionScope = []) {
387
+ return new RegExp(`^${extensionScope.length ? `(${extensionScope.join("|")})` : ".*"}\\.${this.method}::${this.path.replace(/\/:([^\/]+)/g, "/([^/]+)")}$`);
388
+ }
389
+ };
390
+
391
+ // src/entities/A-Request/A-Request.entity.ts
392
+ var A_Request = class extends aConcept.A_Entity {
393
+ constructor() {
394
+ super(...arguments);
395
+ this.body = {};
396
+ this.params = {};
397
+ this.query = {};
398
+ /**
399
+ * Duration of the request in milliseconds
400
+ */
401
+ this.duration = 0;
402
+ }
403
+ static get namespace() {
404
+ return "a-server";
405
+ }
406
+ fromNew(newEntity) {
407
+ this.req = newEntity.request;
408
+ this.aseid = new aConcept.ASEID({
409
+ concept: aConcept.A_Context.root.name,
410
+ scope: newEntity.scope,
411
+ entity: this.constructor.entity,
412
+ id: newEntity.id
413
+ });
414
+ }
415
+ get startedAt() {
416
+ const timeId = aConcept.A_IdentityHelper.parseTimeId(this.aseid.id.split("-")[0]);
417
+ return timeId ? new Date(timeId.timestamp) : void 0;
418
+ }
419
+ // Getter for request URL
420
+ get url() {
421
+ return this.req.url;
422
+ }
423
+ // Getter for request method
424
+ get method() {
425
+ return String(this.req.method).toUpperCase() || "DEFAULT";
426
+ }
427
+ get headers() {
428
+ return this.req.headers;
429
+ }
430
+ get route() {
431
+ return new A_Route(this.url, this.method);
432
+ }
433
+ pipe(destination, options) {
434
+ return this.req.pipe(destination, options);
435
+ }
436
+ async init() {
437
+ this.req.on("error", async (err) => {
438
+ this.error = new A_ServerError(err);
439
+ await this.call("error" /* Error */);
440
+ });
441
+ this.params = this.extractParams(this.url);
442
+ this.query = this.extractQuery(this.url);
443
+ }
444
+ extractParams(url) {
445
+ const cleanUrl = url.split("?")[0];
446
+ const urlSegments = cleanUrl.split("/").filter(Boolean);
447
+ const maskSegments = this.url.split("/").filter(Boolean);
448
+ const params = {};
449
+ for (let i = 0; i < maskSegments.length; i++) {
450
+ const maskSegment = maskSegments[i];
451
+ const urlSegment = urlSegments[i];
452
+ if (maskSegment.startsWith(":")) {
453
+ const paramName = maskSegment.slice(1);
454
+ params[paramName] = urlSegment;
455
+ } else if (maskSegment !== urlSegment) {
456
+ return {};
457
+ }
458
+ }
459
+ return params;
460
+ }
461
+ extractQuery(url) {
462
+ const query = {};
463
+ const queryString = url.split("?")[1];
464
+ if (!queryString) return query;
465
+ const cleanQuery = queryString.split("#")[0];
466
+ for (const pair of cleanQuery.split("&")) {
467
+ if (!pair) continue;
468
+ const [key, value = ""] = pair.split("=");
469
+ query[decodeURIComponent(key)] = decodeURIComponent(value);
470
+ }
471
+ return query;
472
+ }
473
+ parseBody() {
474
+ return new Promise((resolve, reject) => {
475
+ let body = "";
476
+ this.req.on("data", (chunk) => body += chunk);
477
+ this.req.on("end", () => {
478
+ try {
479
+ resolve(JSON.parse(body));
480
+ } catch (err) {
481
+ reject(err);
482
+ }
483
+ });
484
+ this.req.on("error", reject);
485
+ });
486
+ }
487
+ };
488
+
489
+ // src/entities/A-Response/A-Response.entity.types.ts
490
+ var A_SERVER_TYPES__ResponseEvent = /* @__PURE__ */ ((A_SERVER_TYPES__ResponseEvent2) => {
491
+ A_SERVER_TYPES__ResponseEvent2["Error"] = "error";
492
+ A_SERVER_TYPES__ResponseEvent2["Finish"] = "finish";
493
+ A_SERVER_TYPES__ResponseEvent2["Data"] = "data";
494
+ A_SERVER_TYPES__ResponseEvent2["End"] = "end";
495
+ A_SERVER_TYPES__ResponseEvent2["Close"] = "close";
496
+ return A_SERVER_TYPES__ResponseEvent2;
497
+ })(A_SERVER_TYPES__ResponseEvent || {});
498
+ var A_Response = class extends aConcept.A_Entity {
499
+ constructor() {
500
+ super(...arguments);
501
+ /**
502
+ * Duration of the request in milliseconds
503
+ */
504
+ this.duration = 0;
505
+ this.data = /* @__PURE__ */ new Map();
506
+ }
507
+ fromNew(newEntity) {
508
+ this.res = newEntity.response;
509
+ this.aseid = new aConcept.ASEID({
510
+ concept: aConcept.A_Context.root.name,
511
+ scope: newEntity.scope,
512
+ entity: this.constructor.entity,
513
+ id: newEntity.id
514
+ });
515
+ }
516
+ get headersSent() {
517
+ return this.res.headersSent;
518
+ }
519
+ get original() {
520
+ return this.res;
521
+ }
522
+ get statusCode() {
523
+ return this.res.statusCode;
524
+ }
525
+ async init() {
526
+ const startTime = process.hrtime();
527
+ this.res.on("finish", async () => {
528
+ const elapsedTime = process.hrtime(startTime);
529
+ const elapsedMilliseconds = elapsedTime[0] * 1e3 + elapsedTime[1] / 1e6;
530
+ this.duration = elapsedMilliseconds;
531
+ await this.call("finish" /* Finish */);
532
+ });
533
+ this.res.on("close", async () => {
534
+ await this.call("close" /* Close */);
535
+ });
536
+ }
537
+ failed(error) {
538
+ switch (true) {
539
+ case error instanceof A_ServerError:
540
+ this.error = error;
541
+ break;
542
+ case error instanceof aConcept.A_Error:
543
+ this.error = new A_ServerError(error);
544
+ break;
545
+ default:
546
+ this.error = new A_ServerError(error);
547
+ break;
548
+ }
549
+ return this.status(this.error.status).json(this.error);
550
+ }
551
+ // Send a plain text or JSON response
552
+ send(data = this.toResponse()) {
553
+ const logger = aConcept.A_Context.scope(this).resolve(aUtils.A_Logger);
554
+ if (this.headersSent) {
555
+ logger.warning("Response headers already sent, cannot send response again.");
556
+ return;
557
+ }
558
+ try {
559
+ switch (true) {
560
+ case (!!data && typeof data === "object"):
561
+ return this.json(data);
562
+ case (!!data && typeof data === "string"):
563
+ this.res.setHeader("Content-Type", "text/plain");
564
+ this.res.writeHead(this.statusCode);
565
+ this.res.end(data);
566
+ return;
567
+ default:
568
+ this.res.writeHead(this.statusCode);
569
+ this.res.end(data);
570
+ return;
571
+ }
572
+ } catch (error) {
573
+ logger.warning("Response send error:", error);
574
+ }
575
+ }
576
+ destroy(error, scope) {
577
+ this.res.end();
578
+ return super.destroy(scope);
579
+ }
580
+ // Explicit JSON response
581
+ json(data = this.toResponse()) {
582
+ const logger = aConcept.A_Context.scope(this).resolve(aUtils.A_Logger);
583
+ if (this.headersSent) {
584
+ logger.warning("Response headers already sent, cannot send response again.");
585
+ return;
586
+ }
587
+ this.res.setHeader("Content-Type", "application/json");
588
+ this.res.writeHead(this.statusCode);
589
+ this.res.end(JSON.stringify(data));
590
+ }
591
+ // Set HTTP status code
592
+ status(code) {
593
+ this.res.statusCode = code;
594
+ return this;
595
+ }
596
+ writeHead(statusCode, headers) {
597
+ this.res.writeHead(statusCode, headers);
598
+ }
599
+ setHeader(key, value) {
600
+ this.res.setHeader(key, value);
601
+ }
602
+ getHeader(key) {
603
+ return this.res.getHeader(key);
604
+ }
605
+ add(key, data) {
606
+ this.data.set(key, data);
607
+ }
608
+ toResponse() {
609
+ return Array.from(this.data.entries()).reduce((acc, [key, value]) => {
610
+ if (value instanceof aConcept.A_Entity)
611
+ acc[key] = value.toJSON();
612
+ else
613
+ acc[key] = value;
614
+ return acc;
615
+ }, {});
616
+ }
617
+ };
618
+ var A_Service = class extends aConcept.A_Container {
619
+ async load() {
620
+ let config;
621
+ if (!this.scope.has(aUtils.A_Config)) {
622
+ const config2 = new aUtils.A_Config({
623
+ variables: [...Array.from(A_SERVER_CONSTANTS__DEFAULT_ENV_VARIABLES_ARRAY)],
624
+ defaults: {
625
+ A_SERVER_PORT: 3e3
626
+ }
627
+ });
628
+ this.scope.register(config2);
629
+ }
630
+ config = this.scope.resolve(aUtils.A_Config);
631
+ if (!this.scope.has(A_Server)) {
632
+ new A_Server({
633
+ port: config.get("A_SERVER_PORT"),
634
+ name: this.name,
635
+ version: "v1"
636
+ });
637
+ }
638
+ this.port = config.get("A_SERVER_PORT");
639
+ this.server = http.createServer(this.onRequest.bind(this));
640
+ }
641
+ listen() {
642
+ return new Promise((resolve, reject) => {
643
+ this.server.listen(this.port, () => {
644
+ resolve();
645
+ });
646
+ });
647
+ }
648
+ close() {
649
+ return new Promise((resolve, reject) => {
650
+ this.server.close(() => {
651
+ resolve();
652
+ });
653
+ });
654
+ }
655
+ /**
656
+ * Start the server
657
+ */
658
+ async start() {
659
+ await this.beforeStart();
660
+ await this.listen();
661
+ await this.afterStart();
662
+ }
663
+ async beforeStart() {
664
+ }
665
+ async afterStart() {
666
+ }
667
+ /**
668
+ * Stop service
669
+ */
670
+ async stop() {
671
+ await this.call("beforeStop" /* beforeStop */);
672
+ await this.server.close();
673
+ await this.call("afterStop" /* afterStop */);
674
+ }
675
+ async beforeRequest(scope) {
676
+ }
677
+ async afterRequest(scope) {
678
+ }
679
+ async onRequest(request, response) {
680
+ const scope = new aConcept.A_Scope({
681
+ name: `a-server-request::${Date.now()}`
682
+ });
683
+ const { req, res } = await this.convertToAServer(request, response);
684
+ try {
685
+ scope.register(req);
686
+ scope.register(res);
687
+ scope.inherit(this.scope);
688
+ await this.beforeRequest(scope);
689
+ await this.call("onRequest" /* onRequest */, scope);
690
+ await this.afterRequest(scope);
691
+ await res.status(200).send();
692
+ } catch (error) {
693
+ const logger = this.scope.resolve(aUtils.A_Logger);
694
+ logger.error(error);
695
+ return res.failed(error);
696
+ }
697
+ }
698
+ async convertToAServer(request, response) {
699
+ if (!request.method || !request.url)
700
+ throw new Error("Request method or url is missing");
701
+ const id = this.generateRequestId(request.method, request.url);
702
+ const req = new A_Request({ id, request, scope: this.scope.name });
703
+ const res = new A_Response({ id, response, scope: this.scope.name });
704
+ await req.init();
705
+ await res.init();
706
+ return { req, res };
707
+ }
708
+ generateRequestId(method, url) {
709
+ const hash = crypto__default.default.createHash("sha256");
710
+ const timeId = aConcept.A_IdentityHelper.generateTimeId();
711
+ const randomValue = Math.random().toString();
712
+ hash.update(`${timeId}-${method}-${url}-${randomValue}`);
713
+ return `${timeId}-${hash.digest("hex")}`;
714
+ }
715
+ async beforeStop() {
716
+ }
717
+ async afterStop() {
718
+ }
719
+ };
720
+ __decorateClass([
721
+ aConcept.A_Concept.Load()
722
+ ], A_Service.prototype, "load");
723
+ __decorateClass([
724
+ aConcept.A_Concept.Start()
725
+ ], A_Service.prototype, "start");
726
+ __decorateClass([
727
+ aConcept.A_Feature.Define({ invoke: true })
728
+ ], A_Service.prototype, "beforeStart");
729
+ __decorateClass([
730
+ aConcept.A_Feature.Define({ invoke: true })
731
+ ], A_Service.prototype, "afterStart");
732
+ __decorateClass([
733
+ aConcept.A_Concept.Stop()
734
+ ], A_Service.prototype, "stop");
735
+ __decorateClass([
736
+ aConcept.A_Feature.Define({
737
+ name: "beforeRequest" /* beforeRequest */,
738
+ invoke: true
739
+ })
740
+ ], A_Service.prototype, "beforeRequest");
741
+ __decorateClass([
742
+ aConcept.A_Feature.Define({
743
+ name: "beforeRequest" /* beforeRequest */,
744
+ invoke: true
745
+ })
746
+ ], A_Service.prototype, "afterRequest");
747
+ __decorateClass([
748
+ aConcept.A_Feature.Define({
749
+ name: "onRequest" /* onRequest */,
750
+ invoke: false
751
+ })
752
+ ], A_Service.prototype, "onRequest");
753
+ __decorateClass([
754
+ aConcept.A_Feature.Define({ invoke: true })
755
+ ], A_Service.prototype, "beforeStop");
756
+ __decorateClass([
757
+ aConcept.A_Feature.Define({ invoke: true })
758
+ ], A_Service.prototype, "afterStop");
759
+
760
+ // src/context/A-ProxyConfig/A_ProxyConfig.constants.ts
761
+ var PROXY_CONFIG_DEFAULTS = {
762
+ path: "/",
763
+ hostname: "localhost",
764
+ port: 80,
765
+ method: "GET",
766
+ headers: {},
767
+ protocol: "http"
768
+ };
769
+
770
+ // src/context/A-ProxyConfig/A_ProxyConfig.context.ts
771
+ var A_ProxyConfig = class extends aConcept.A_Fragment {
772
+ constructor(configs = {}) {
773
+ super();
774
+ this._configs = Object.entries(configs).map(([path2, config]) => {
775
+ const targetUrl = new URL(typeof config === "string" ? config : config.hostname || "");
776
+ const port = targetUrl.port || (targetUrl.protocol === "https:" ? "443" : "80");
777
+ const prepared = {
778
+ ...PROXY_CONFIG_DEFAULTS,
779
+ ...typeof config === "string" ? {
780
+ path: path2,
781
+ port: parseInt(port),
782
+ protocol: targetUrl.protocol,
783
+ hostname: targetUrl.hostname
784
+ } : config
785
+ };
786
+ return {
787
+ route: new A_Route(prepared.path, prepared.method),
788
+ hostname: prepared.hostname,
789
+ port: prepared.port,
790
+ headers: prepared.headers,
791
+ protocol: prepared.protocol
792
+ };
793
+ });
794
+ }
795
+ /**
796
+ * Returns all configured proxy configs
797
+ *
798
+ */
799
+ get configs() {
800
+ return this._configs;
801
+ }
802
+ /**
803
+ * Checks if a given path is configured in the proxy
804
+ *
805
+ * @param path
806
+ * @returns
807
+ */
808
+ has(path2) {
809
+ return this._configs.some((route) => route.route.toRegExp().test(path2));
810
+ }
811
+ /**
812
+ * Returns the proxy configuration for a given path, if exists
813
+ *
814
+ * @param path
815
+ * @returns
816
+ */
817
+ config(path2) {
818
+ return this._configs.find((route) => route.route.toRegExp().test(path2));
819
+ }
820
+ };
821
+ var A_StaticConfig = class extends aConcept.A_Fragment {
822
+ constructor(directories = []) {
823
+ super();
824
+ this.directories = directories;
825
+ }
826
+ /**
827
+ * Checks if a given path is configured in the proxy
828
+ *
829
+ * @param path
830
+ * @returns
831
+ */
832
+ has(path2) {
833
+ const found = this.directories.find((dir) => {
834
+ return new RegExp(`^/${dir.startsWith("/") ? dir.slice(1) : dir}/?.*`).test(path2);
835
+ });
836
+ return !!found && found;
837
+ }
838
+ };
839
+ var A_ListQueryFilter = class extends aConcept.A_Fragment {
840
+ constructor(_query = {}, defaults = {}) {
841
+ super();
842
+ this._query = _query;
843
+ this.defaults = defaults;
844
+ this.parsedQuery = this.parseQueryString(_query);
845
+ }
846
+ get query() {
847
+ return this._query;
848
+ }
849
+ get(property, defaultValue = "") {
850
+ return this.parsedQuery[property] || this.defaults[property] || defaultValue;
851
+ }
852
+ parseQueryString(value = {}) {
853
+ if (typeof value === "string") {
854
+ return value.split("&").reduce((acc, part) => {
855
+ const [key, val] = part.split("=");
856
+ acc[decodeURIComponent(key)] = decodeURIComponent(val || "");
857
+ return acc;
858
+ }, {});
859
+ }
860
+ return value;
861
+ }
862
+ };
863
+ var A_EntityFactory = class extends aConcept.A_Fragment {
864
+ constructor(param1, param2) {
865
+ super();
866
+ this._entities = /* @__PURE__ */ new Map();
867
+ this._setEntities(param1);
868
+ this._setEntities(param2);
869
+ }
870
+ _setEntities(entities = []) {
871
+ if (Array.isArray(entities)) {
872
+ entities.forEach((entity) => {
873
+ this._entities.set(entity.entity, entity);
874
+ });
875
+ } else {
876
+ Object.keys(entities).forEach((key) => {
877
+ this._entities.set(key, entities[key]);
878
+ });
879
+ }
880
+ }
881
+ add(param1, param2) {
882
+ switch (true) {
883
+ case (typeof param1 === "string" && !!param2):
884
+ this._entities.set(param1, param2);
885
+ break;
886
+ case typeof param1 !== "string":
887
+ this._entities.set(param1.entity, param1);
888
+ break;
889
+ }
890
+ }
891
+ has(param1) {
892
+ let name;
893
+ switch (true) {
894
+ case param1 instanceof aConcept.ASEID:
895
+ name = param1.entity;
896
+ break;
897
+ case (!(param1 instanceof aConcept.ASEID) && aConcept.ASEID.isASEID(param1)):
898
+ name = new aConcept.ASEID(param1).entity;
899
+ break;
900
+ default:
901
+ name = param1;
902
+ break;
903
+ }
904
+ return this._entities.has(name);
905
+ }
906
+ resolve(param1) {
907
+ let name;
908
+ switch (true) {
909
+ case param1 instanceof aConcept.ASEID:
910
+ name = param1.entity;
911
+ break;
912
+ case (typeof param1 === "string" && aConcept.ASEID.isASEID(param1)):
913
+ name = new aConcept.ASEID(param1).entity;
914
+ break;
915
+ default:
916
+ name = param1;
917
+ break;
918
+ }
919
+ return this._entities.get(name);
920
+ }
921
+ resolveByName(name) {
922
+ return this._entities.get(name);
923
+ }
924
+ };
925
+ var A_EntityList = class extends aConcept.A_Entity {
926
+ constructor() {
927
+ super(...arguments);
928
+ this._items = [];
929
+ this._pagination = {
930
+ total: 0,
931
+ page: 1,
932
+ pageSize: 10
933
+ };
934
+ }
935
+ static get scope() {
936
+ return "a-server";
937
+ }
938
+ /**
939
+ * Returns the entity constructor used for the list
940
+ */
941
+ get entityConstructor() {
942
+ return this._entityConstructor;
943
+ }
944
+ /**
945
+ * Returns the list of items contained in the entity list
946
+ */
947
+ get items() {
948
+ return this._items;
949
+ }
950
+ /**
951
+ * Returns pagination information about the entity list
952
+ */
953
+ get pagination() {
954
+ return this._pagination;
955
+ }
956
+ /**
957
+ * Creates a new instance of A_EntityList
958
+ *
959
+ * @param newEntity
960
+ */
961
+ fromNew(newEntity) {
962
+ this.aseid = new aConcept.ASEID({
963
+ concept: aConcept.A_Context.root.name,
964
+ scope: "default",
965
+ entity: "a-list" + (newEntity.name ? `.${newEntity.name}` : ""),
966
+ id: (/* @__PURE__ */ new Date()).getTime().toString()
967
+ });
968
+ this._entityConstructor = newEntity.constructor;
969
+ }
970
+ /**
971
+ * Allows to convert Repository Response data to EntityList instance
972
+ *
973
+ * [!] This method does not load the data from the repository, it only converts the data to the EntityList instance
974
+ *
975
+ * @param items
976
+ * @param pagination
977
+ */
978
+ fromList(items, pagination) {
979
+ this._items = items.map((item) => {
980
+ if (item instanceof aConcept.A_Entity) {
981
+ return item;
982
+ } else {
983
+ const entity = new this._entityConstructor(item);
984
+ return entity;
985
+ }
986
+ });
987
+ if (pagination) {
988
+ this._pagination = {
989
+ total: pagination.total,
990
+ page: pagination.page,
991
+ pageSize: pagination.pageSize
992
+ };
993
+ }
994
+ }
995
+ /**
996
+ * Serializes the EntityList to a JSON object
997
+ *
998
+ * @returns
999
+ */
1000
+ toJSON() {
1001
+ return {
1002
+ ...super.toJSON(),
1003
+ items: this._items.map((i) => i.toJSON()),
1004
+ pagination: this._pagination
1005
+ };
1006
+ }
1007
+ };
1008
+ var A_ServerLogger = class extends aUtils.A_Logger {
1009
+ async onRequestEnd(request, response) {
1010
+ this.route({
1011
+ method: request.method,
1012
+ url: request.url,
1013
+ status: response.statusCode,
1014
+ responseTime: response.duration
1015
+ });
1016
+ }
1017
+ async onRequestError(request) {
1018
+ }
1019
+ logStart(container) {
1020
+ this.serverReady({
1021
+ port: container.port,
1022
+ app: {
1023
+ name: container.name
1024
+ }
1025
+ });
1026
+ }
1027
+ logStop(server) {
1028
+ this.log("red", `Server ${server.name} stopped`);
1029
+ }
1030
+ metrics() {
1031
+ }
1032
+ routes(routes) {
1033
+ const time = this.getTime();
1034
+ console.log(`\x1B[36m[${this.scope.name}] |${time}| Exposed Routes:
1035
+ ${" ".repeat(this.scopeLength + 3)}|-------------------------------
1036
+ ${routes.map((route) => `${" ".repeat(this.scopeLength + 3)}| [${route.method.toUpperCase()}]${" ".repeat(7 - route.method.length)} ${route.path}`).join("\n")}
1037
+ ${" ".repeat(this.scopeLength + 3)}|-------------------------------\x1B[0m`);
1038
+ }
1039
+ /**
1040
+ * Logs the route information based on status code
1041
+ *
1042
+ * @param route
1043
+ */
1044
+ route(route) {
1045
+ switch (route.status) {
1046
+ case 200:
1047
+ this.log200(route);
1048
+ break;
1049
+ case 404:
1050
+ this.log404(route);
1051
+ break;
1052
+ case 500:
1053
+ this.log500(route);
1054
+ break;
1055
+ case 400:
1056
+ this.log400(route);
1057
+ break;
1058
+ default:
1059
+ this.logDefault(route);
1060
+ break;
1061
+ }
1062
+ }
1063
+ log200(route) {
1064
+ if (this.config.get("SERVER_IGNORE_LOG_200"))
1065
+ return;
1066
+ console.log(`\x1B[32m[${this.scope.name}] |${this.getTime()}| ${route.status} | [${route.method.toUpperCase()}]${" ".repeat(7 - route.method.length)} ${route.url} | ${route.responseTime}ms\x1B[0m`);
1067
+ }
1068
+ log404(route) {
1069
+ if (this.config.get("SERVER_IGNORE_LOG_404"))
1070
+ return;
1071
+ console.log(`\x1B[33m[${this.scope.name}] |${this.getTime()}| ${route.status} | [${route.method.toUpperCase()}]${" ".repeat(7 - route.method.length)} ${route.url} | ${route.responseTime}ms\x1B[0m`);
1072
+ }
1073
+ log500(route) {
1074
+ if (this.config.get("SERVER_IGNORE_LOG_500"))
1075
+ return;
1076
+ console.log(`\x1B[31m[${this.scope.name}] |${this.getTime()}| ${route.status} | [${route.method.toUpperCase()}]${" ".repeat(7 - route.method.length)} ${route.url} | ${route.responseTime}ms\x1B[0m`);
1077
+ }
1078
+ log400(route) {
1079
+ if (this.config.get("SERVER_IGNORE_LOG_400"))
1080
+ return;
1081
+ console.log(`\x1B[33m[${this.scope.name}] |${this.getTime()}| ${route.status} | [${route.method.toUpperCase()}]${" ".repeat(7 - route.method.length)} ${route.url} | ${route.responseTime}ms\x1B[0m`);
1082
+ }
1083
+ logDefault(route) {
1084
+ if (this.config.get("SERVER_IGNORE_LOG_DEFAULT"))
1085
+ return;
1086
+ console.log(`\x1B[36m[${this.scope.name}] |${this.getTime()}| ${route.status} | [${route.method.toUpperCase()}]${" ".repeat(7 - route.method.length)} ${route.url} | ${route.responseTime}ms\x1B[0m`);
1087
+ }
1088
+ serverReady(params) {
1089
+ const processId = process.pid;
1090
+ console.log(`\x1B[36m[${this.scope.name}] |${this.getTime()}| Server Ready:
1091
+ ${" ".repeat(this.scopeLength + 3)}|-------------------------------
1092
+ ${" ".repeat(this.scopeLength + 3)}| ${params.app.name} v${params.app.version || "0.0.1"} is running on port ${params.port}
1093
+ ${" ".repeat(this.scopeLength + 3)}| Process ID: ${processId}
1094
+ ${" ".repeat(this.scopeLength + 3)}|-------------------------------
1095
+ ${" ".repeat(this.scopeLength + 3)}| ==============================
1096
+ ${" ".repeat(this.scopeLength + 3)}| LISTENING...
1097
+ ${" ".repeat(this.scopeLength + 3)}| ==============================
1098
+ \x1B[0m`);
1099
+ }
1100
+ /**
1101
+ * Displays a proxy routes
1102
+ *
1103
+ * @param params
1104
+ */
1105
+ proxy(params) {
1106
+ console.log(`\x1B[35m[${this.scope.name}] |${this.getTime()}| Proxy:
1107
+ ${" ".repeat(this.scopeLength + 3)}| ${params.original} -> ${params.destination}
1108
+ ${" ".repeat(this.scopeLength + 3)}|-------------------------------\x1B[0m`);
1109
+ }
1110
+ };
1111
+ __decorateClass([
1112
+ aConcept.A_Feature.Extend({
1113
+ name: "finish" /* Finish */,
1114
+ scope: [A_Response]
1115
+ }),
1116
+ __decorateParam(0, aConcept.A_Inject(A_Request)),
1117
+ __decorateParam(1, aConcept.A_Inject(A_Response))
1118
+ ], A_ServerLogger.prototype, "onRequestEnd");
1119
+ __decorateClass([
1120
+ aConcept.A_Feature.Extend({
1121
+ name: "error" /* Error */
1122
+ }),
1123
+ __decorateParam(0, aConcept.A_Inject(A_Request))
1124
+ ], A_ServerLogger.prototype, "onRequestError");
1125
+ __decorateClass([
1126
+ aConcept.A_Feature.Extend({
1127
+ name: "afterStart" /* afterStart */,
1128
+ scope: [A_Service]
1129
+ }),
1130
+ __decorateParam(0, aConcept.A_Inject(A_Service))
1131
+ ], A_ServerLogger.prototype, "logStart");
1132
+ __decorateClass([
1133
+ aConcept.A_Feature.Extend({
1134
+ name: "afterStop" /* afterStop */,
1135
+ scope: [A_Service]
1136
+ }),
1137
+ __decorateParam(0, aConcept.A_Inject(A_Server))
1138
+ ], A_ServerLogger.prototype, "logStop");
1139
+
1140
+ // src/components/A-Router/A-Router.component.types.ts
1141
+ var A_SERVER_TYPES__RouterMethod = /* @__PURE__ */ ((A_SERVER_TYPES__RouterMethod2) => {
1142
+ A_SERVER_TYPES__RouterMethod2["POST"] = "POST";
1143
+ A_SERVER_TYPES__RouterMethod2["GET"] = "GET";
1144
+ A_SERVER_TYPES__RouterMethod2["PUT"] = "PUT";
1145
+ A_SERVER_TYPES__RouterMethod2["DELETE"] = "DELETE";
1146
+ A_SERVER_TYPES__RouterMethod2["PATCH"] = "PATCH";
1147
+ A_SERVER_TYPES__RouterMethod2["DEFAULT"] = "DEFAULT";
1148
+ return A_SERVER_TYPES__RouterMethod2;
1149
+ })(A_SERVER_TYPES__RouterMethod || {});
1150
+ var A_SERVER_TYPES__ARouterComponentMetaKey = /* @__PURE__ */ ((A_SERVER_TYPES__ARouterComponentMetaKey2) => {
1151
+ A_SERVER_TYPES__ARouterComponentMetaKey2["ROUTES"] = "ROUTES";
1152
+ return A_SERVER_TYPES__ARouterComponentMetaKey2;
1153
+ })(A_SERVER_TYPES__ARouterComponentMetaKey || {});
1154
+ var _A_Router = class _A_Router extends aConcept.A_Component {
1155
+ // =======================================================
1156
+ // ================ Method Definition=====================
1157
+ // =======================================================
1158
+ /**
1159
+ * Allows to define a custom route for POST requests
1160
+ *
1161
+ * @param path
1162
+ * @returns
1163
+ */
1164
+ static Post(path2) {
1165
+ return this.defineRoute({
1166
+ method: "POST" /* POST */,
1167
+ path: typeof path2 === "object" && "path" in path2 ? path2.path : path2,
1168
+ version: typeof path2 === "object" && "version" in path2 && path2.version ? path2.version : "v1",
1169
+ prefix: typeof path2 === "object" && "prefix" in path2 && path2.prefix ? path2.prefix : "api"
1170
+ });
1171
+ }
1172
+ /**
1173
+ * Allows to define a custom route for GET requests
1174
+ *
1175
+ * @param path
1176
+ * @returns
1177
+ */
1178
+ static Get(path2) {
1179
+ return this.defineRoute({
1180
+ method: "GET" /* GET */,
1181
+ path: typeof path2 === "object" && "path" in path2 ? path2.path : path2,
1182
+ version: typeof path2 === "object" && "version" in path2 && path2.version ? path2.version : "v1",
1183
+ prefix: typeof path2 === "object" && "prefix" in path2 && path2.prefix ? path2.prefix : "api"
1184
+ });
1185
+ }
1186
+ /**
1187
+ * Allows to define a custom route for PUT requests
1188
+ *
1189
+ * @param path
1190
+ * @returns
1191
+ */
1192
+ static Put(path2) {
1193
+ return this.defineRoute({
1194
+ method: "PUT" /* PUT */,
1195
+ path: typeof path2 === "object" && "path" in path2 ? path2.path : path2,
1196
+ version: typeof path2 === "object" && "version" in path2 && path2.version ? path2.version : "v1",
1197
+ prefix: typeof path2 === "object" && "prefix" in path2 && path2.prefix ? path2.prefix : "api"
1198
+ });
1199
+ }
1200
+ /**
1201
+ * Allows to define a custom route for DELETE requests
1202
+ *
1203
+ * @param path
1204
+ * @returns
1205
+ */
1206
+ static Delete(path2) {
1207
+ return this.defineRoute({
1208
+ method: "DELETE" /* DELETE */,
1209
+ path: typeof path2 === "object" && "path" in path2 ? path2.path : path2,
1210
+ version: typeof path2 === "object" && "version" in path2 && path2.version ? path2.version : "v1",
1211
+ prefix: typeof path2 === "object" && "prefix" in path2 && path2.prefix ? path2.prefix : "api"
1212
+ });
1213
+ }
1214
+ /**
1215
+ * Allows to define a custom route for PATCH requests
1216
+ *
1217
+ * @param path
1218
+ * @returns
1219
+ */
1220
+ static Patch(path2) {
1221
+ return this.defineRoute({
1222
+ method: "PATCH" /* PATCH */,
1223
+ path: typeof path2 === "object" && "path" in path2 ? path2.path : path2,
1224
+ version: typeof path2 === "object" && "version" in path2 && path2.version ? path2.version : "v1",
1225
+ prefix: typeof path2 === "object" && "prefix" in path2 && path2.prefix ? path2.prefix : "api"
1226
+ });
1227
+ }
1228
+ /**
1229
+ * Allows to define a custom route for DEFAULT requests
1230
+ *
1231
+ * @param path
1232
+ * @returns
1233
+ */
1234
+ static Default(path2) {
1235
+ return this.defineRoute({
1236
+ method: "DEFAULT" /* DEFAULT */,
1237
+ path: typeof path2 === "object" && "path" in path2 ? path2.path : path2,
1238
+ version: typeof path2 === "object" && "version" in path2 && path2.version ? path2.version : "v1",
1239
+ prefix: typeof path2 === "object" && "prefix" in path2 && path2.prefix ? path2.prefix : "api"
1240
+ });
1241
+ }
1242
+ /**
1243
+ * Private method to have the same signature for all route methods
1244
+ *
1245
+ * @param method
1246
+ * @param path
1247
+ * @returns
1248
+ */
1249
+ static defineRoute(config) {
1250
+ const route = typeof config.path === "string" || config.path instanceof RegExp ? new A_Route(
1251
+ `/${config.prefix}/${config.version}${config.path instanceof RegExp ? config.path.source : config.path.startsWith("/") ? config.path : `/${config.path}`}`,
1252
+ config.method
1253
+ ) : config.path;
1254
+ this.routes.push(route);
1255
+ return function decorator(target, propertyKey, descriptor) {
1256
+ const meta = aConcept.A_Context.meta(target);
1257
+ const routes = meta.get("ROUTES" /* ROUTES */) || /* @__PURE__ */ new Map();
1258
+ const searchKey = route.toAFeatureExtension(["A_Router", "A_Service"]);
1259
+ routes.set(searchKey.source, {
1260
+ component: target,
1261
+ handler: propertyKey,
1262
+ route
1263
+ });
1264
+ meta.set("ROUTES" /* ROUTES */, routes);
1265
+ aConcept.A_Feature_Define({
1266
+ name: searchKey.source,
1267
+ invoke: false
1268
+ })(target, propertyKey, descriptor);
1269
+ return aConcept.A_Feature_Extend(searchKey)(target, propertyKey, descriptor);
1270
+ };
1271
+ }
1272
+ async load(logger) {
1273
+ logger.routes(_A_Router.routes);
1274
+ }
1275
+ async identifyRoute(request, response, scope, config, logger) {
1276
+ const route = request.route;
1277
+ if (config.get("A_CONCEPT_ENVIRONMENT") === "development") {
1278
+ logger.log(`Incoming request: ${request.method} ${request.url}`);
1279
+ logger.log(`Identified route: ${route.toString()}`);
1280
+ }
1281
+ const feature = new aConcept.A_Feature({
1282
+ name: route.toString(),
1283
+ component: this
1284
+ });
1285
+ for (const stage of feature) {
1286
+ if (aConcept.A_TypeGuards.isComponentConstructor(stage.definition.component)) {
1287
+ const meta = aConcept.A_Context.meta(stage.definition.component);
1288
+ const routes = meta.get("ROUTES" /* ROUTES */);
1289
+ if (routes) {
1290
+ const currentRoute = routes.get(stage.definition.name || "");
1291
+ if (currentRoute) {
1292
+ request.params = {
1293
+ ...request.params,
1294
+ ...currentRoute.route.extractParams(request.url)
1295
+ };
1296
+ }
1297
+ }
1298
+ }
1299
+ const stageScope = new aConcept.A_Scope({
1300
+ name: `a-route--${aConcept.A_IdentityHelper.generateTimeId()}`,
1301
+ entities: [request]
1302
+ }, {
1303
+ parent: scope
1304
+ });
1305
+ await stage.process(stageScope);
1306
+ }
1307
+ console.log("Finished processing route for request:", request.method, request.url);
1308
+ }
1309
+ };
1310
+ _A_Router.routes = [];
1311
+ __decorateClass([
1312
+ aConcept.A_Concept.Load(),
1313
+ __decorateParam(0, aConcept.A_Inject(A_ServerLogger))
1314
+ ], _A_Router.prototype, "load");
1315
+ __decorateClass([
1316
+ aConcept.A_Feature.Extend({
1317
+ name: "onRequest" /* onRequest */,
1318
+ scope: [A_Service]
1319
+ }),
1320
+ __decorateParam(0, aConcept.A_Inject(A_Request)),
1321
+ __decorateParam(1, aConcept.A_Inject(A_Response)),
1322
+ __decorateParam(2, aConcept.A_Inject(aConcept.A_Scope)),
1323
+ __decorateParam(3, aConcept.A_Inject(aUtils.A_Config)),
1324
+ __decorateParam(4, aConcept.A_Inject(aUtils.A_Logger))
1325
+ ], _A_Router.prototype, "identifyRoute");
1326
+ var A_Router = _A_Router;
1327
+ var A_EntityController = class extends aConcept.A_Component {
1328
+ async list(request, response, factory, scope, config) {
1329
+ const constructor = factory.resolveByName(request.params.type);
1330
+ if (constructor) {
1331
+ const entityList = new A_EntityList({
1332
+ name: request.params.type,
1333
+ scope: scope.name,
1334
+ constructor
1335
+ });
1336
+ scope.register(entityList);
1337
+ const queryFilter = new A_ListQueryFilter(request.query, {
1338
+ itemsPerPage: String(config.get("A_LIST_ITEMS_PER_PAGE") || "10"),
1339
+ page: String(config.get("A_LIST_PAGE") || "1")
1340
+ });
1341
+ const queryScope = new aConcept.A_Scope({
1342
+ fragments: [queryFilter]
1343
+ }).inherit(scope);
1344
+ await entityList.load(queryScope);
1345
+ response.add("items", entityList.items);
1346
+ response.add("pagination", entityList.pagination);
1347
+ }
1348
+ }
1349
+ async load(request, response, scope) {
1350
+ if (!aConcept.ASEID.isASEID(request.params.aseid)) {
1351
+ response.add("A_EntityController.load", "Invalid ASEID");
1352
+ return;
1353
+ }
1354
+ const aseid = new aConcept.ASEID(request.params.aseid);
1355
+ const constructor = scope.resolveConstructor(aseid.entity);
1356
+ if (constructor) {
1357
+ const entity = new constructor(request.params.aseid);
1358
+ scope.register(entity);
1359
+ await entity.load();
1360
+ return response.status(200).json(entity.toJSON());
1361
+ } else
1362
+ throw new A_ServerError({
1363
+ title: "Entity Not Found",
1364
+ description: `Entity constructor for ASEID ${request.params.aseid} not found`,
1365
+ status: 404
1366
+ });
1367
+ }
1368
+ async create(request, factory, scope) {
1369
+ const constructor = factory.resolve(request.params.aseid);
1370
+ if (constructor) {
1371
+ const entity = new constructor(request.body);
1372
+ scope.register(entity);
1373
+ await entity.save();
1374
+ }
1375
+ }
1376
+ async update(request, response, factory, scope) {
1377
+ if (!aConcept.ASEID.isASEID(request.params.aseid)) {
1378
+ response.add("A_EntityController.update", "Invalid ASEID");
1379
+ return;
1380
+ }
1381
+ const constructor = factory.resolve(request.params.aseid);
1382
+ if (constructor) {
1383
+ const entity = new constructor(request.body);
1384
+ scope.register(entity);
1385
+ await entity.save();
1386
+ }
1387
+ }
1388
+ async delete(request, response, factory, scope) {
1389
+ if (!aConcept.ASEID.isASEID(request.params.aseid)) {
1390
+ response.add("A_EntityController.delete", "Invalid ASEID");
1391
+ return;
1392
+ }
1393
+ const constructor = factory.resolve(request.params.aseid);
1394
+ if (constructor) {
1395
+ const entity = new constructor(request.params.aseid);
1396
+ scope.register(entity);
1397
+ await entity.destroy();
1398
+ }
1399
+ }
1400
+ async callEntity(request, response, factory, scope) {
1401
+ if (!aConcept.ASEID.isASEID(request.params.aseid)) {
1402
+ response.add("A_EntityController.callEntity", "Invalid ASEID");
1403
+ return;
1404
+ }
1405
+ const constructor = factory.resolve(request.params.aseid);
1406
+ if (!constructor) {
1407
+ response.add("A_EntityController.callEntity", "Entity not found");
1408
+ return;
1409
+ }
1410
+ const meta = aConcept.A_Context.meta(constructor);
1411
+ const targetFeature = meta.features().find((f) => f.name === `${constructor.name}.${request.params.action}`);
1412
+ if (!targetFeature) {
1413
+ response.add("A_EntityController.callEntity", "Feature not found");
1414
+ return;
1415
+ }
1416
+ const entity = new constructor(request.params.aseid);
1417
+ scope.register(entity);
1418
+ await entity.load(scope);
1419
+ await entity[targetFeature.handler](scope);
1420
+ response.add("result", scope.toJSON());
1421
+ response.add("entity", entity);
1422
+ response.add("type", entity.aseid.entity);
1423
+ }
1424
+ };
1425
+ __decorateClass([
1426
+ A_Router.Get({
1427
+ path: "/:type",
1428
+ version: "v1",
1429
+ prefix: "a-list"
1430
+ }),
1431
+ __decorateParam(0, aConcept.A_Inject(A_Request)),
1432
+ __decorateParam(1, aConcept.A_Inject(A_Response)),
1433
+ __decorateParam(2, aConcept.A_Inject(A_EntityFactory)),
1434
+ __decorateParam(3, aConcept.A_Inject(aConcept.A_Scope)),
1435
+ __decorateParam(4, aConcept.A_Inject(aUtils.A_Config))
1436
+ ], A_EntityController.prototype, "list");
1437
+ __decorateClass([
1438
+ aConcept.A_Feature.Define({
1439
+ name: "getEntity",
1440
+ invoke: false
1441
+ }),
1442
+ A_Router.Get({
1443
+ path: "/:aseid",
1444
+ version: "v1",
1445
+ prefix: "a-entity"
1446
+ }),
1447
+ __decorateParam(0, aConcept.A_Inject(A_Request)),
1448
+ __decorateParam(1, aConcept.A_Inject(A_Response)),
1449
+ __decorateParam(2, aConcept.A_Inject(aConcept.A_Scope))
1450
+ ], A_EntityController.prototype, "load");
1451
+ __decorateClass([
1452
+ A_Router.Post({
1453
+ path: "/",
1454
+ version: "v1",
1455
+ prefix: "a-entity"
1456
+ }),
1457
+ __decorateParam(0, aConcept.A_Inject(A_Request)),
1458
+ __decorateParam(1, aConcept.A_Inject(A_EntityFactory)),
1459
+ __decorateParam(2, aConcept.A_Inject(aConcept.A_Scope))
1460
+ ], A_EntityController.prototype, "create");
1461
+ __decorateClass([
1462
+ A_Router.Put({
1463
+ path: "/:aseid",
1464
+ version: "v1",
1465
+ prefix: "a-entity"
1466
+ }),
1467
+ __decorateParam(0, aConcept.A_Inject(A_Request)),
1468
+ __decorateParam(1, aConcept.A_Inject(A_Response)),
1469
+ __decorateParam(2, aConcept.A_Inject(A_EntityFactory)),
1470
+ __decorateParam(3, aConcept.A_Inject(aConcept.A_Scope))
1471
+ ], A_EntityController.prototype, "update");
1472
+ __decorateClass([
1473
+ A_Router.Delete({
1474
+ path: "/:aseid",
1475
+ version: "v1",
1476
+ prefix: "a-entity"
1477
+ }),
1478
+ __decorateParam(0, aConcept.A_Inject(A_Request)),
1479
+ __decorateParam(1, aConcept.A_Inject(A_Response)),
1480
+ __decorateParam(2, aConcept.A_Inject(A_EntityFactory)),
1481
+ __decorateParam(3, aConcept.A_Inject(aConcept.A_Scope))
1482
+ ], A_EntityController.prototype, "delete");
1483
+ __decorateClass([
1484
+ A_Router.Post({
1485
+ path: "/:aseid/:action",
1486
+ version: "v1",
1487
+ prefix: "a-entity"
1488
+ }),
1489
+ __decorateParam(0, aConcept.A_Inject(A_Request)),
1490
+ __decorateParam(1, aConcept.A_Inject(A_Response)),
1491
+ __decorateParam(2, aConcept.A_Inject(A_EntityFactory)),
1492
+ __decorateParam(3, aConcept.A_Inject(aConcept.A_Scope))
1493
+ ], A_EntityController.prototype, "callEntity");
1494
+ var A_ServerHealthMonitor = class extends aConcept.A_Component {
1495
+ async get(config, request, response, logger) {
1496
+ logger.log("Health check requested", config.get("A_CONCEPT_ROOT_FOLDER"));
1497
+ const packageJSON = await import(`${config.get("A_CONCEPT_ROOT_FOLDER")}/package.json`);
1498
+ const exposedProperties = config.get("EXPOSED_PROPERTIES")?.split(",") || [
1499
+ "name",
1500
+ "version",
1501
+ "description"
1502
+ ];
1503
+ exposedProperties.forEach((prop) => response.add(prop, packageJSON[prop]));
1504
+ console.log(`Health check accessed: ${request.method} ${request.url}`);
1505
+ }
1506
+ };
1507
+ __decorateClass([
1508
+ A_Router.Get({
1509
+ path: "/",
1510
+ prefix: "health",
1511
+ version: "v1"
1512
+ }),
1513
+ __decorateParam(0, aConcept.A_Inject(aUtils.A_Config)),
1514
+ __decorateParam(1, aConcept.A_Inject(A_Request)),
1515
+ __decorateParam(2, aConcept.A_Inject(A_Response)),
1516
+ __decorateParam(3, aConcept.A_Inject(aUtils.A_Logger))
1517
+ ], A_ServerHealthMonitor.prototype, "get");
1518
+ var A_ServerProxy = class extends aConcept.A_Component {
1519
+ async load(logger, config) {
1520
+ logger.log(
1521
+ "pink",
1522
+ `Proxy routes configured:`,
1523
+ config.configs.map((c) => c.route).join("\n")
1524
+ );
1525
+ }
1526
+ async onRequest(req, res, proxyConfig, logger) {
1527
+ return new Promise((resolve, reject) => {
1528
+ const { method, url } = req;
1529
+ const route = new A_Route(url, method);
1530
+ const config = proxyConfig.config(route.toString());
1531
+ if (!config) {
1532
+ return resolve();
1533
+ }
1534
+ logger.log(
1535
+ "yellow",
1536
+ `Proxying request ${method} ${url} to ${config.hostname}`,
1537
+ config
1538
+ );
1539
+ const client = config.protocol === "https:" ? https__default.default : http__default.default;
1540
+ const proxyReq = client.request(
1541
+ {
1542
+ method: config.route.method,
1543
+ hostname: config.hostname,
1544
+ port: config.port,
1545
+ headers: config.headers,
1546
+ path: route.path
1547
+ },
1548
+ (proxyRes) => {
1549
+ if (!res.headersSent) {
1550
+ res.writeHead(proxyRes.statusCode || 200, proxyRes.headers);
1551
+ }
1552
+ proxyRes.on("end", () => {
1553
+ logger.log("green", `Proxy request to ${config?.hostname} completed`);
1554
+ resolve();
1555
+ });
1556
+ proxyRes.pipe(res.original);
1557
+ }
1558
+ );
1559
+ proxyReq.on("error", (err) => reject(err));
1560
+ req.pipe(proxyReq);
1561
+ });
1562
+ }
1563
+ };
1564
+ __decorateClass([
1565
+ aConcept.A_Concept.Load(),
1566
+ __decorateParam(0, aConcept.A_Inject(aUtils.A_Logger)),
1567
+ __decorateParam(1, aConcept.A_Inject(A_ProxyConfig))
1568
+ ], A_ServerProxy.prototype, "load");
1569
+ __decorateClass([
1570
+ aConcept.A_Feature.Extend({
1571
+ name: "onRequest" /* onRequest */
1572
+ }),
1573
+ __decorateParam(0, aConcept.A_Inject(A_Request)),
1574
+ __decorateParam(1, aConcept.A_Inject(A_Response)),
1575
+ __decorateParam(2, aConcept.A_Inject(A_ProxyConfig)),
1576
+ __decorateParam(3, aConcept.A_Inject(aUtils.A_Logger))
1577
+ ], A_ServerProxy.prototype, "onRequest");
1578
+
1579
+ // src/components/A-ServerCORS/A_ServerCORS.component.defaults.ts
1580
+ var A_SERVER_DEFAULTS__CorsConfig = {
1581
+ origin: "*",
1582
+ // Default to allow all origins
1583
+ methods: ["GET", "POST", "PUT", "DELETE", "OPTIONS"],
1584
+ headers: ["Content-Type"],
1585
+ credentials: false,
1586
+ maxAge: 0
1587
+ };
1588
+ var A_ServerCORS = class extends aConcept.A_Component {
1589
+ async init(config) {
1590
+ this.config = {
1591
+ origin: config.get("ORIGIN") || A_SERVER_DEFAULTS__CorsConfig.origin,
1592
+ methods: config.get("METHODS") || A_SERVER_DEFAULTS__CorsConfig.methods,
1593
+ headers: config.get("HEADERS") || A_SERVER_DEFAULTS__CorsConfig.headers,
1594
+ credentials: config.get("CREDENTIALS") || A_SERVER_DEFAULTS__CorsConfig.credentials,
1595
+ maxAge: config.get("MAX_AGE") || A_SERVER_DEFAULTS__CorsConfig.maxAge
1596
+ };
1597
+ }
1598
+ apply(aReq, aRes) {
1599
+ aRes.setHeader("Access-Control-Allow-Origin", this.config.origin);
1600
+ aRes.setHeader("Access-Control-Allow-Methods", this.config.methods.join(", "));
1601
+ aRes.setHeader("Access-Control-Allow-Headers", this.config.headers.join(", "));
1602
+ if (this.config.credentials) {
1603
+ aRes.setHeader("Access-Control-Allow-Credentials", "true");
1604
+ }
1605
+ if (this.config.maxAge) {
1606
+ aRes.setHeader("Access-Control-Max-Age", this.config.maxAge.toString());
1607
+ }
1608
+ if (aReq.req.method === "OPTIONS") {
1609
+ aRes.status(204).send();
1610
+ }
1611
+ }
1612
+ };
1613
+ __decorateClass([
1614
+ aConcept.A_Feature.Extend({
1615
+ name: "beforeStart" /* beforeStart */
1616
+ }),
1617
+ __decorateParam(0, aConcept.A_Inject(aUtils.A_Config))
1618
+ ], A_ServerCORS.prototype, "init");
1619
+ __decorateClass([
1620
+ aConcept.A_Feature.Extend({
1621
+ name: "beforeRequest" /* beforeRequest */
1622
+ }),
1623
+ __decorateParam(0, aConcept.A_Inject(A_Request)),
1624
+ __decorateParam(1, aConcept.A_Inject(A_Response))
1625
+ ], A_ServerCORS.prototype, "apply");
1626
+ var A_StaticLoader = class extends aConcept.A_Component {
1627
+ async load(logger, config) {
1628
+ logger.log(
1629
+ "pink",
1630
+ `Static directories configured:`,
1631
+ config.directories.join("\n")
1632
+ );
1633
+ }
1634
+ async onRequest(req, res, logger, config) {
1635
+ if (req.method !== "GET" && req.method !== "HEAD") {
1636
+ return;
1637
+ }
1638
+ const { method, url } = req;
1639
+ const route = new A_Route(url, method);
1640
+ const staticDirConfig = config.has(route.path);
1641
+ if (!staticDirConfig) {
1642
+ return;
1643
+ }
1644
+ const staticDir = path__default.default.resolve(process.cwd(), staticDirConfig);
1645
+ if (!fs__default.default.existsSync(staticDir) || !fs__default.default.statSync(staticDir).isDirectory()) {
1646
+ logger.log("red", `Static directory ${staticDir} does not exist or is not a directory.`);
1647
+ return;
1648
+ }
1649
+ await this.serveFile(route.path.startsWith("/") ? route.path.slice(1) : route.path, res);
1650
+ }
1651
+ getMimeType(ext) {
1652
+ const mimeTypes = {
1653
+ ".html": "text/html",
1654
+ ".js": "application/javascript",
1655
+ ".css": "text/css",
1656
+ ".json": "application/json",
1657
+ ".png": "image/png",
1658
+ ".jpg": "image/jpeg",
1659
+ ".jpeg": "image/jpeg",
1660
+ ".gif": "image/gif",
1661
+ ".svg": "image/svg+xml",
1662
+ ".ico": "image/x-icon",
1663
+ ".txt": "text/plain"
1664
+ };
1665
+ return mimeTypes[ext.toLowerCase()] || "application/octet-stream";
1666
+ }
1667
+ safeFilePath(staticDir, reqUrl, host) {
1668
+ const parsedUrl = new url.URL(reqUrl || "/", `http://${host || "localhost"}`);
1669
+ let pathname = decodeURIComponent(parsedUrl.pathname);
1670
+ pathname = pathname.replace(/\.\.[\/\\]/g, "");
1671
+ let filePath = path__default.default.join(staticDir, pathname);
1672
+ if (!fs__default.default.existsSync(filePath))
1673
+ throw new Error(`File not found: ${filePath}`);
1674
+ return filePath;
1675
+ }
1676
+ serveFile(filePath, res) {
1677
+ return new Promise((resolve, reject) => {
1678
+ if (fs__default.default.existsSync(filePath)) {
1679
+ const ext = path__default.default.extname(filePath);
1680
+ const contentType = this.getMimeType(ext);
1681
+ res.writeHead(200, { "Content-Type": contentType });
1682
+ const stream = fs__default.default.createReadStream(filePath);
1683
+ stream.pipe(res.original);
1684
+ stream.on("end", () => {
1685
+ resolve();
1686
+ });
1687
+ stream.on("error", (err) => {
1688
+ reject(new Error(`File stream error: ${err.message}`));
1689
+ });
1690
+ } else {
1691
+ reject(new Error(`File not found: ${filePath}`));
1692
+ }
1693
+ resolve();
1694
+ });
1695
+ }
1696
+ };
1697
+ __decorateClass([
1698
+ aConcept.A_Concept.Load(),
1699
+ __decorateParam(0, aConcept.A_Inject(aUtils.A_Logger)),
1700
+ __decorateParam(1, aConcept.A_Inject(A_StaticConfig))
1701
+ ], A_StaticLoader.prototype, "load");
1702
+ __decorateClass([
1703
+ aConcept.A_Feature.Extend({
1704
+ name: "onRequest" /* onRequest */
1705
+ }),
1706
+ __decorateParam(0, aConcept.A_Inject(A_Request)),
1707
+ __decorateParam(1, aConcept.A_Inject(A_Response)),
1708
+ __decorateParam(2, aConcept.A_Inject(aUtils.A_Logger)),
1709
+ __decorateParam(3, aConcept.A_Inject(A_StaticConfig))
1710
+ ], A_StaticLoader.prototype, "onRequest");
1711
+ var A_Controller = class extends aConcept.A_Component {
1712
+ async callEntityMethod(request, response, scope) {
1713
+ if (!scope.has(request.params.component))
1714
+ return;
1715
+ if (!request.params.operation || typeof request.params.operation !== "string")
1716
+ return;
1717
+ const possibleComponent = scope.resolve(request.params.component);
1718
+ if (!possibleComponent || ![aConcept.A_Component, aConcept.A_Container].some((c) => possibleComponent instanceof c))
1719
+ return;
1720
+ const component = possibleComponent;
1721
+ const meta = aConcept.A_Context.meta(component);
1722
+ const targetFeature = meta.features().find((f) => f.name === `${component.constructor.name}.${request.params.operation}`);
1723
+ if (!targetFeature)
1724
+ return;
1725
+ await component.call(request.params.operation, scope);
1726
+ }
1727
+ };
1728
+ __decorateClass([
1729
+ A_Router.Post({
1730
+ path: "/:component/:operation",
1731
+ version: "v1",
1732
+ prefix: "a-component"
1733
+ }),
1734
+ __decorateParam(0, aConcept.A_Inject(A_Request)),
1735
+ __decorateParam(1, aConcept.A_Inject(A_Response)),
1736
+ __decorateParam(2, aConcept.A_Inject(aConcept.A_Scope))
1737
+ ], A_Controller.prototype, "callEntityMethod");
1738
+ var A_ListingController = class extends aConcept.A_Component {
1739
+ async list(request, response, factory, scope, config) {
1740
+ const constructor = factory.resolveByName(request.params.type);
1741
+ if (constructor) {
1742
+ const entityList = new A_EntityList({
1743
+ name: request.params.type,
1744
+ scope: scope.name,
1745
+ constructor
1746
+ });
1747
+ scope.register(entityList);
1748
+ const queryFilter = new A_ListQueryFilter(request.query, {
1749
+ itemsPerPage: String(config.get("A_LIST_ITEMS_PER_PAGE") || "10"),
1750
+ page: String(config.get("A_LIST_PAGE") || "1")
1751
+ });
1752
+ const queryScope = new aConcept.A_Scope({
1753
+ fragments: [queryFilter]
1754
+ }).inherit(scope);
1755
+ await entityList.load(queryScope);
1756
+ response.add("items", entityList.items);
1757
+ response.add("pagination", entityList.pagination);
1758
+ }
1759
+ }
1760
+ };
1761
+ __decorateClass([
1762
+ A_Router.Get({
1763
+ path: "/:type",
1764
+ version: "v1",
1765
+ prefix: "a-list"
1766
+ }),
1767
+ __decorateParam(0, aConcept.A_Inject(A_Request)),
1768
+ __decorateParam(1, aConcept.A_Inject(A_Response)),
1769
+ __decorateParam(2, aConcept.A_Inject(A_EntityFactory)),
1770
+ __decorateParam(3, aConcept.A_Inject(aConcept.A_Scope)),
1771
+ __decorateParam(4, aConcept.A_Inject(aUtils.A_Config))
1772
+ ], A_ListingController.prototype, "list");
1773
+ var A_CommandController = class extends aConcept.A_Component {
1774
+ async handleCommand(req, res, scope, container) {
1775
+ const commandName = req.params.command;
1776
+ const CommandConstructor = scope.resolveConstructor(commandName);
1777
+ if (!CommandConstructor) {
1778
+ res.status(404);
1779
+ throw new Error(`Command ${commandName} not found`);
1780
+ }
1781
+ const command = new CommandConstructor(req.body);
1782
+ container.scope.register(command);
1783
+ await command.execute();
1784
+ const serialized = command.toJSON();
1785
+ return res.status(200).json(serialized);
1786
+ }
1787
+ };
1788
+ __decorateClass([
1789
+ A_Router.Get({
1790
+ path: "/:command/execute",
1791
+ version: "v1",
1792
+ prefix: "a-command"
1793
+ }),
1794
+ __decorateParam(0, aConcept.A_Inject(A_Request)),
1795
+ __decorateParam(1, aConcept.A_Inject(A_Response)),
1796
+ __decorateParam(2, aConcept.A_Inject(aConcept.A_Scope)),
1797
+ __decorateParam(3, aConcept.A_Inject(aConcept.A_Container))
1798
+ ], A_CommandController.prototype, "handleCommand");
1799
+ var A_EntityRepository = class extends aConcept.A_Component {
1800
+ async list(channel, entity, scope) {
1801
+ if (scope.has(aUtils.A_Manifest) && !scope.resolve(aUtils.A_Manifest).isAllowed(entity.constructor, "load").for(entity.constructor))
1802
+ return;
1803
+ const response = await channel.get(`/a-list/${entity.aseid.entity}`);
1804
+ entity.fromJSON(response.data);
1805
+ }
1806
+ async load(channel, entity, scope) {
1807
+ if (scope.has(aUtils.A_Manifest) && !scope.resolve(aUtils.A_Manifest).isAllowed(entity.constructor, "load").for(entity.constructor))
1808
+ return;
1809
+ const response = await channel.get(`/a-entity/${entity.aseid.toString()}`);
1810
+ entity.fromJSON(response.data);
1811
+ }
1812
+ async save(channel, entity, scope) {
1813
+ if (scope.has(aUtils.A_Manifest) && !scope.resolve(aUtils.A_Manifest).isAllowed(entity.constructor, "save").for(entity.constructor))
1814
+ return;
1815
+ const response = await channel.post(`/a-entity/${entity.aseid.toString()}`, entity.toJSON());
1816
+ entity.fromJSON(response.data);
1817
+ }
1818
+ async destroy(channel, entity, scope) {
1819
+ if (scope.has(aUtils.A_Manifest) && !scope.resolve(aUtils.A_Manifest).isAllowed(entity.constructor, "destroy").for(entity.constructor))
1820
+ return;
1821
+ const response = await channel.delete(`/a-entity/${entity.aseid.toString()}`);
1822
+ entity.fromJSON(response.data);
1823
+ }
1824
+ };
1825
+ __decorateClass([
1826
+ aConcept.A_Feature.Extend({
1827
+ name: AEntity_constants.A_TYPES__EntityFeatures.LOAD,
1828
+ scope: {
1829
+ include: [A_EntityList]
1830
+ }
1831
+ }),
1832
+ __decorateParam(0, aConcept.A_Inject(A_HTTPChannel)),
1833
+ __decorateParam(1, aConcept.A_Inject(aConcept.A_Caller)),
1834
+ __decorateParam(2, aConcept.A_Inject(aConcept.A_Scope))
1835
+ ], A_EntityRepository.prototype, "list");
1836
+ __decorateClass([
1837
+ aConcept.A_Feature.Extend({
1838
+ name: AEntity_constants.A_TYPES__EntityFeatures.LOAD,
1839
+ scope: {
1840
+ exclude: [A_EntityList]
1841
+ }
1842
+ }),
1843
+ __decorateParam(0, aConcept.A_Inject(A_HTTPChannel)),
1844
+ __decorateParam(1, aConcept.A_Inject(aConcept.A_Caller)),
1845
+ __decorateParam(2, aConcept.A_Inject(aConcept.A_Scope))
1846
+ ], A_EntityRepository.prototype, "load");
1847
+ __decorateClass([
1848
+ aConcept.A_Feature.Extend({
1849
+ name: AEntity_constants.A_TYPES__EntityFeatures.SAVE,
1850
+ scope: {
1851
+ exclude: [A_EntityList]
1852
+ }
1853
+ }),
1854
+ __decorateParam(0, aConcept.A_Inject(A_HTTPChannel)),
1855
+ __decorateParam(1, aConcept.A_Inject(aConcept.A_Caller)),
1856
+ __decorateParam(2, aConcept.A_Inject(aConcept.A_Scope))
1857
+ ], A_EntityRepository.prototype, "save");
1858
+ __decorateClass([
1859
+ aConcept.A_Feature.Extend({
1860
+ name: AEntity_constants.A_TYPES__EntityFeatures.DESTROY,
1861
+ scope: {
1862
+ exclude: [A_EntityList]
1863
+ }
1864
+ }),
1865
+ __decorateParam(0, aConcept.A_Inject(A_HTTPChannel)),
1866
+ __decorateParam(1, aConcept.A_Inject(aConcept.A_Caller)),
1867
+ __decorateParam(2, aConcept.A_Inject(aConcept.A_Scope))
1868
+ ], A_EntityRepository.prototype, "destroy");
1869
+
1870
+ exports.A_CommandController = A_CommandController;
1871
+ exports.A_Controller = A_Controller;
1872
+ exports.A_EntityController = A_EntityController;
1873
+ exports.A_EntityFactory = A_EntityFactory;
1874
+ exports.A_EntityList = A_EntityList;
1875
+ exports.A_EntityRepository = A_EntityRepository;
1876
+ exports.A_HTTPChannel = A_HTTPChannel;
1877
+ exports.A_HTTPChannelError = A_HTTPChannelError;
1878
+ exports.A_HTTPChannel_RequestContext = A_HTTPChannel_RequestContext;
1879
+ exports.A_ListQueryFilter = A_ListQueryFilter;
1880
+ exports.A_ListingController = A_ListingController;
1881
+ exports.A_ProxyConfig = A_ProxyConfig;
1882
+ exports.A_Request = A_Request;
1883
+ exports.A_Response = A_Response;
1884
+ exports.A_Route = A_Route;
1885
+ exports.A_Router = A_Router;
1886
+ exports.A_SERVER_CONSTANTS__A_HttpChannel_Lifecycle = A_SERVER_CONSTANTS__A_HttpChannel_Lifecycle;
1887
+ exports.A_SERVER_CONSTANTS__DEFAULT_ENV_VARIABLES = A_SERVER_CONSTANTS__DEFAULT_ENV_VARIABLES;
1888
+ exports.A_SERVER_CONSTANTS__DEFAULT_ENV_VARIABLES_ARRAY = A_SERVER_CONSTANTS__DEFAULT_ENV_VARIABLES_ARRAY;
1889
+ exports.A_SERVER_TYPES__ARouterComponentMetaKey = A_SERVER_TYPES__ARouterComponentMetaKey;
1890
+ exports.A_SERVER_TYPES__RequestEvent = A_SERVER_TYPES__RequestEvent;
1891
+ exports.A_SERVER_TYPES__ResponseEvent = A_SERVER_TYPES__ResponseEvent;
1892
+ exports.A_SERVER_TYPES__RouterMethod = A_SERVER_TYPES__RouterMethod;
1893
+ exports.A_SERVER_TYPES__ServerFeature = A_SERVER_TYPES__ServerFeature;
1894
+ exports.A_SERVER_TYPES__ServerMethod = A_SERVER_TYPES__ServerMethod;
1895
+ exports.A_Server = A_Server;
1896
+ exports.A_ServerCORS = A_ServerCORS;
1897
+ exports.A_ServerError = A_ServerError;
1898
+ exports.A_ServerHealthMonitor = A_ServerHealthMonitor;
1899
+ exports.A_ServerLogger = A_ServerLogger;
1900
+ exports.A_ServerProxy = A_ServerProxy;
1901
+ exports.A_Service = A_Service;
1902
+ exports.A_StaticConfig = A_StaticConfig;
1903
+ exports.A_StaticLoader = A_StaticLoader;
1904
+ //# sourceMappingURL=index.js.map
103
1905
  //# sourceMappingURL=index.js.map