@digital-alchemy/core 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (303) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +47 -0
  3. package/dist/automation/automation.module.d.ts +61 -0
  4. package/dist/automation/automation.module.js +70 -0
  5. package/dist/automation/automation.module.js.map +1 -0
  6. package/dist/automation/extensions/aggressive-scenes.extension.d.ts +22 -0
  7. package/dist/automation/extensions/aggressive-scenes.extension.js +125 -0
  8. package/dist/automation/extensions/aggressive-scenes.extension.js.map +1 -0
  9. package/dist/automation/extensions/circadian.extension.d.ts +11 -0
  10. package/dist/automation/extensions/circadian.extension.js +87 -0
  11. package/dist/automation/extensions/circadian.extension.js.map +1 -0
  12. package/dist/automation/extensions/index.d.ts +7 -0
  13. package/dist/automation/extensions/index.js +11 -0
  14. package/dist/automation/extensions/index.js.map +1 -0
  15. package/dist/automation/extensions/light-manager.extension.d.ts +26 -0
  16. package/dist/automation/extensions/light-manager.extension.js +260 -0
  17. package/dist/automation/extensions/light-manager.extension.js.map +1 -0
  18. package/dist/automation/extensions/managed-switch.extension.d.ts +3 -0
  19. package/dist/automation/extensions/managed-switch.extension.js +73 -0
  20. package/dist/automation/extensions/managed-switch.extension.js.map +1 -0
  21. package/dist/automation/extensions/room.extension.d.ts +11 -0
  22. package/dist/automation/extensions/room.extension.js +179 -0
  23. package/dist/automation/extensions/room.extension.js.map +1 -0
  24. package/dist/automation/extensions/sequence-matcher.extension.d.ts +3 -0
  25. package/dist/automation/extensions/sequence-matcher.extension.js +126 -0
  26. package/dist/automation/extensions/sequence-matcher.extension.js.map +1 -0
  27. package/dist/automation/extensions/solar-calc.extension.d.ts +20 -0
  28. package/dist/automation/extensions/solar-calc.extension.js +105 -0
  29. package/dist/automation/extensions/solar-calc.extension.js.map +1 -0
  30. package/dist/automation/helpers/events.helper.d.ts +33 -0
  31. package/dist/automation/helpers/events.helper.js +14 -0
  32. package/dist/automation/helpers/events.helper.js.map +1 -0
  33. package/dist/automation/helpers/index.d.ts +7 -0
  34. package/dist/automation/helpers/index.js +11 -0
  35. package/dist/automation/helpers/index.js.map +1 -0
  36. package/dist/automation/helpers/managed-switch.helper.d.ts +41 -0
  37. package/dist/automation/helpers/managed-switch.helper.js +3 -0
  38. package/dist/automation/helpers/managed-switch.helper.js.map +1 -0
  39. package/dist/automation/helpers/metrics.helper.d.ts +13 -0
  40. package/dist/automation/helpers/metrics.helper.js +30 -0
  41. package/dist/automation/helpers/metrics.helper.js.map +1 -0
  42. package/dist/automation/helpers/reftimes.helper.d.ts +54 -0
  43. package/dist/automation/helpers/reftimes.helper.js +33 -0
  44. package/dist/automation/helpers/reftimes.helper.js.map +1 -0
  45. package/dist/automation/helpers/scene.helper.d.ts +97 -0
  46. package/dist/automation/helpers/scene.helper.js +5 -0
  47. package/dist/automation/helpers/scene.helper.js.map +1 -0
  48. package/dist/automation/helpers/sequence.helper.d.ts +55 -0
  49. package/dist/automation/helpers/sequence.helper.js +3 -0
  50. package/dist/automation/helpers/sequence.helper.js.map +1 -0
  51. package/dist/automation/helpers/solar.helper.d.ts +3 -0
  52. package/dist/automation/helpers/solar.helper.js +262 -0
  53. package/dist/automation/helpers/solar.helper.js.map +1 -0
  54. package/dist/automation/index.d.ts +3 -0
  55. package/dist/automation/index.js +10 -0
  56. package/dist/automation/index.js.map +1 -0
  57. package/dist/boilerplate/extensions/cache.extension.d.ts +24 -0
  58. package/dist/boilerplate/extensions/cache.extension.js +96 -0
  59. package/dist/boilerplate/extensions/cache.extension.js.map +1 -0
  60. package/dist/boilerplate/extensions/configuration.extension.d.ts +23 -0
  61. package/dist/boilerplate/extensions/configuration.extension.js +98 -0
  62. package/dist/boilerplate/extensions/configuration.extension.js.map +1 -0
  63. package/dist/boilerplate/extensions/fetch.extension.d.ts +20 -0
  64. package/dist/boilerplate/extensions/fetch.extension.js +154 -0
  65. package/dist/boilerplate/extensions/fetch.extension.js.map +1 -0
  66. package/dist/boilerplate/extensions/index.d.ts +6 -0
  67. package/dist/boilerplate/extensions/index.js +10 -0
  68. package/dist/boilerplate/extensions/index.js.map +1 -0
  69. package/dist/boilerplate/extensions/logger.extension.d.ts +39 -0
  70. package/dist/boilerplate/extensions/logger.extension.js +159 -0
  71. package/dist/boilerplate/extensions/logger.extension.js.map +1 -0
  72. package/dist/boilerplate/extensions/scheduler.extension.d.ts +21 -0
  73. package/dist/boilerplate/extensions/scheduler.extension.js +117 -0
  74. package/dist/boilerplate/extensions/scheduler.extension.js.map +1 -0
  75. package/dist/boilerplate/extensions/wiring.extension.d.ts +101 -0
  76. package/dist/boilerplate/extensions/wiring.extension.js +452 -0
  77. package/dist/boilerplate/extensions/wiring.extension.js.map +1 -0
  78. package/dist/boilerplate/helpers/cache-memory.helper.d.ts +7 -0
  79. package/dist/boilerplate/helpers/cache-memory.helper.js +65 -0
  80. package/dist/boilerplate/helpers/cache-memory.helper.js.map +1 -0
  81. package/dist/boilerplate/helpers/cache-redis.helper.d.ts +7 -0
  82. package/dist/boilerplate/helpers/cache-redis.helper.js +69 -0
  83. package/dist/boilerplate/helpers/cache-redis.helper.js.map +1 -0
  84. package/dist/boilerplate/helpers/config-environment-loader.helper.d.ts +2 -0
  85. package/dist/boilerplate/helpers/config-environment-loader.helper.js +56 -0
  86. package/dist/boilerplate/helpers/config-environment-loader.helper.js.map +1 -0
  87. package/dist/boilerplate/helpers/config-file-loader.helper.d.ts +4 -0
  88. package/dist/boilerplate/helpers/config-file-loader.helper.js +87 -0
  89. package/dist/boilerplate/helpers/config-file-loader.helper.js.map +1 -0
  90. package/dist/boilerplate/helpers/config.helper.d.ts +102 -0
  91. package/dist/boilerplate/helpers/config.helper.js +32 -0
  92. package/dist/boilerplate/helpers/config.helper.js.map +1 -0
  93. package/dist/boilerplate/helpers/errors.helper.d.ts +39 -0
  94. package/dist/boilerplate/helpers/errors.helper.js +76 -0
  95. package/dist/boilerplate/helpers/errors.helper.js.map +1 -0
  96. package/dist/boilerplate/helpers/events.helper.d.ts +3 -0
  97. package/dist/boilerplate/helpers/events.helper.js +11 -0
  98. package/dist/boilerplate/helpers/events.helper.js.map +1 -0
  99. package/dist/boilerplate/helpers/fetch.helper.d.ts +170 -0
  100. package/dist/boilerplate/helpers/fetch.helper.js +173 -0
  101. package/dist/boilerplate/helpers/fetch.helper.js.map +1 -0
  102. package/dist/boilerplate/helpers/index.d.ts +12 -0
  103. package/dist/boilerplate/helpers/index.js +16 -0
  104. package/dist/boilerplate/helpers/index.js.map +1 -0
  105. package/dist/boilerplate/helpers/lifecycle.helper.d.ts +43 -0
  106. package/dist/boilerplate/helpers/lifecycle.helper.js +13 -0
  107. package/dist/boilerplate/helpers/lifecycle.helper.js.map +1 -0
  108. package/dist/boilerplate/helpers/metrics.helper.d.ts +73 -0
  109. package/dist/boilerplate/helpers/metrics.helper.js +141 -0
  110. package/dist/boilerplate/helpers/metrics.helper.js.map +1 -0
  111. package/dist/boilerplate/helpers/testing.helper.d.ts +13 -0
  112. package/dist/boilerplate/helpers/testing.helper.js +91 -0
  113. package/dist/boilerplate/helpers/testing.helper.js.map +1 -0
  114. package/dist/boilerplate/helpers/wiring.helper.d.ts +155 -0
  115. package/dist/boilerplate/helpers/wiring.helper.js +5 -0
  116. package/dist/boilerplate/helpers/wiring.helper.js.map +1 -0
  117. package/dist/boilerplate/index.d.ts +2 -0
  118. package/dist/boilerplate/index.js +6 -0
  119. package/dist/boilerplate/index.js.map +1 -0
  120. package/dist/gotify/extensions/application.extension.d.ts +13 -0
  121. package/dist/gotify/extensions/application.extension.js +52 -0
  122. package/dist/gotify/extensions/application.extension.js.map +1 -0
  123. package/dist/gotify/extensions/client.extension.d.ts +8 -0
  124. package/dist/gotify/extensions/client.extension.js +38 -0
  125. package/dist/gotify/extensions/client.extension.js.map +1 -0
  126. package/dist/gotify/extensions/fetch.extension.d.ts +2 -0
  127. package/dist/gotify/extensions/fetch.extension.js +14 -0
  128. package/dist/gotify/extensions/fetch.extension.js.map +1 -0
  129. package/dist/gotify/extensions/index.d.ts +4 -0
  130. package/dist/gotify/extensions/index.js +8 -0
  131. package/dist/gotify/extensions/index.js.map +1 -0
  132. package/dist/gotify/extensions/message.extension.d.ts +8 -0
  133. package/dist/gotify/extensions/message.extension.js +37 -0
  134. package/dist/gotify/extensions/message.extension.js.map +1 -0
  135. package/dist/gotify/gotify.module.d.ts +29 -0
  136. package/dist/gotify/gotify.module.js +33 -0
  137. package/dist/gotify/gotify.module.js.map +1 -0
  138. package/dist/gotify/helpers/api.d.ts +346 -0
  139. package/dist/gotify/helpers/api.js +14 -0
  140. package/dist/gotify/helpers/api.js.map +1 -0
  141. package/dist/gotify/helpers/events.helper.d.ts +6 -0
  142. package/dist/gotify/helpers/events.helper.js +5 -0
  143. package/dist/gotify/helpers/events.helper.js.map +1 -0
  144. package/dist/gotify/helpers/index.d.ts +2 -0
  145. package/dist/gotify/helpers/index.js +6 -0
  146. package/dist/gotify/helpers/index.js.map +1 -0
  147. package/dist/gotify/index.d.ts +3 -0
  148. package/dist/gotify/index.js +7 -0
  149. package/dist/gotify/index.js.map +1 -0
  150. package/dist/hass/dynamic.d.ts +1126 -0
  151. package/dist/hass/dynamic.js +153 -0
  152. package/dist/hass/dynamic.js.map +1 -0
  153. package/dist/hass/extensions/call-proxy.extension.d.ts +4 -0
  154. package/dist/hass/extensions/call-proxy.extension.js +88 -0
  155. package/dist/hass/extensions/call-proxy.extension.js.map +1 -0
  156. package/dist/hass/extensions/entity-manager.extension.d.ts +61 -0
  157. package/dist/hass/extensions/entity-manager.extension.js +214 -0
  158. package/dist/hass/extensions/entity-manager.extension.js.map +1 -0
  159. package/dist/hass/extensions/fetch-api.extension.d.ts +26 -0
  160. package/dist/hass/extensions/fetch-api.extension.js +166 -0
  161. package/dist/hass/extensions/fetch-api.extension.js.map +1 -0
  162. package/dist/hass/extensions/index.d.ts +5 -0
  163. package/dist/hass/extensions/index.js +9 -0
  164. package/dist/hass/extensions/index.js.map +1 -0
  165. package/dist/hass/extensions/utilities.extension.d.ts +9 -0
  166. package/dist/hass/extensions/utilities.extension.js +43 -0
  167. package/dist/hass/extensions/utilities.extension.js.map +1 -0
  168. package/dist/hass/extensions/websocket-api.extension.d.ts +39 -0
  169. package/dist/hass/extensions/websocket-api.extension.js +363 -0
  170. package/dist/hass/extensions/websocket-api.extension.js.map +1 -0
  171. package/dist/hass/hass.module.d.ts +53 -0
  172. package/dist/hass/hass.module.js +59 -0
  173. package/dist/hass/hass.module.js.map +1 -0
  174. package/dist/hass/helpers/backup.helper.d.ts +11 -0
  175. package/dist/hass/helpers/backup.helper.js +3 -0
  176. package/dist/hass/helpers/backup.helper.js.map +1 -0
  177. package/dist/hass/helpers/constants.helper.d.ts +54 -0
  178. package/dist/hass/helpers/constants.helper.js +63 -0
  179. package/dist/hass/helpers/constants.helper.js.map +1 -0
  180. package/dist/hass/helpers/entity-state.helper.d.ts +45 -0
  181. package/dist/hass/helpers/entity-state.helper.js +9 -0
  182. package/dist/hass/helpers/entity-state.helper.js.map +1 -0
  183. package/dist/hass/helpers/fetch/calendar.d.ts +54 -0
  184. package/dist/hass/helpers/fetch/calendar.js +3 -0
  185. package/dist/hass/helpers/fetch/calendar.js.map +1 -0
  186. package/dist/hass/helpers/fetch/configuration.d.ts +34 -0
  187. package/dist/hass/helpers/fetch/configuration.js +3 -0
  188. package/dist/hass/helpers/fetch/configuration.js.map +1 -0
  189. package/dist/hass/helpers/fetch/index.d.ts +4 -0
  190. package/dist/hass/helpers/fetch/index.js +8 -0
  191. package/dist/hass/helpers/fetch/index.js.map +1 -0
  192. package/dist/hass/helpers/fetch/server-log.d.ts +10 -0
  193. package/dist/hass/helpers/fetch/server-log.js +20 -0
  194. package/dist/hass/helpers/fetch/server-log.js.map +1 -0
  195. package/dist/hass/helpers/fetch/service-list.d.ts +51 -0
  196. package/dist/hass/helpers/fetch/service-list.js +3 -0
  197. package/dist/hass/helpers/fetch/service-list.js.map +1 -0
  198. package/dist/hass/helpers/index.d.ts +7 -0
  199. package/dist/hass/helpers/index.js +11 -0
  200. package/dist/hass/helpers/index.js.map +1 -0
  201. package/dist/hass/helpers/metrics.helper.d.ts +13 -0
  202. package/dist/hass/helpers/metrics.helper.js +30 -0
  203. package/dist/hass/helpers/metrics.helper.js.map +1 -0
  204. package/dist/hass/helpers/utility.helper.d.ts +57 -0
  205. package/dist/hass/helpers/utility.helper.js +34 -0
  206. package/dist/hass/helpers/utility.helper.js.map +1 -0
  207. package/dist/hass/helpers/websocket.helper.d.ts +129 -0
  208. package/dist/hass/helpers/websocket.helper.js +3 -0
  209. package/dist/hass/helpers/websocket.helper.js.map +1 -0
  210. package/dist/hass/index.d.ts +4 -0
  211. package/dist/hass/index.js +8 -0
  212. package/dist/hass/index.js.map +1 -0
  213. package/dist/index.d.ts +2 -0
  214. package/dist/index.js +8 -0
  215. package/dist/index.js.map +1 -0
  216. package/dist/nexus/entities.extension.d.ts +2 -0
  217. package/dist/nexus/entities.extension.js +51 -0
  218. package/dist/nexus/entities.extension.js.map +1 -0
  219. package/dist/nexus/main.d.ts +9 -0
  220. package/dist/nexus/main.js +28 -0
  221. package/dist/nexus/main.js.map +1 -0
  222. package/dist/synapse/extensions/binary-sensor.extension.d.ts +19 -0
  223. package/dist/synapse/extensions/binary-sensor.extension.js +84 -0
  224. package/dist/synapse/extensions/binary-sensor.extension.js.map +1 -0
  225. package/dist/synapse/extensions/button.extension.d.ts +10 -0
  226. package/dist/synapse/extensions/button.extension.js +46 -0
  227. package/dist/synapse/extensions/button.extension.js.map +1 -0
  228. package/dist/synapse/extensions/index.d.ts +6 -0
  229. package/dist/synapse/extensions/index.js +10 -0
  230. package/dist/synapse/extensions/index.js.map +1 -0
  231. package/dist/synapse/extensions/registry.extension.d.ts +21 -0
  232. package/dist/synapse/extensions/registry.extension.js +207 -0
  233. package/dist/synapse/extensions/registry.extension.js.map +1 -0
  234. package/dist/synapse/extensions/scene.extension.d.ts +9 -0
  235. package/dist/synapse/extensions/scene.extension.js +37 -0
  236. package/dist/synapse/extensions/scene.extension.js.map +1 -0
  237. package/dist/synapse/extensions/sensor.extension.d.ts +25 -0
  238. package/dist/synapse/extensions/sensor.extension.js +154 -0
  239. package/dist/synapse/extensions/sensor.extension.js.map +1 -0
  240. package/dist/synapse/extensions/switch.extension.d.ts +19 -0
  241. package/dist/synapse/extensions/switch.extension.js +95 -0
  242. package/dist/synapse/extensions/switch.extension.js.map +1 -0
  243. package/dist/synapse/helpers/device-class.helper.d.ts +323 -0
  244. package/dist/synapse/helpers/device-class.helper.js +241 -0
  245. package/dist/synapse/helpers/device-class.helper.js.map +1 -0
  246. package/dist/synapse/helpers/index.d.ts +3 -0
  247. package/dist/synapse/helpers/index.js +7 -0
  248. package/dist/synapse/helpers/index.js.map +1 -0
  249. package/dist/synapse/helpers/metrics.helper.d.ts +13 -0
  250. package/dist/synapse/helpers/metrics.helper.js +30 -0
  251. package/dist/synapse/helpers/metrics.helper.js.map +1 -0
  252. package/dist/synapse/helpers/utility.helper.d.ts +1 -0
  253. package/dist/synapse/helpers/utility.helper.js +3 -0
  254. package/dist/synapse/helpers/utility.helper.js.map +1 -0
  255. package/dist/synapse/index.d.ts +3 -0
  256. package/dist/synapse/index.js +7 -0
  257. package/dist/synapse/index.js.map +1 -0
  258. package/dist/synapse/synapse.module.d.ts +29 -0
  259. package/dist/synapse/synapse.module.js +41 -0
  260. package/dist/synapse/synapse.module.js.map +1 -0
  261. package/dist/type-writer/build.extension.d.ts +2 -0
  262. package/dist/type-writer/build.extension.js +53 -0
  263. package/dist/type-writer/build.extension.js.map +1 -0
  264. package/dist/type-writer/main.d.ts +17 -0
  265. package/dist/type-writer/main.js +36 -0
  266. package/dist/type-writer/main.js.map +1 -0
  267. package/dist/type-writer/type-writer.extension.d.ts +2 -0
  268. package/dist/type-writer/type-writer.extension.js +212 -0
  269. package/dist/type-writer/type-writer.extension.js.map +1 -0
  270. package/dist/utilities/extensions/index.d.ts +3 -0
  271. package/dist/utilities/extensions/index.js +7 -0
  272. package/dist/utilities/extensions/index.js.map +1 -0
  273. package/dist/utilities/extensions/is.extension.d.ts +38 -0
  274. package/dist/utilities/extensions/is.extension.js +104 -0
  275. package/dist/utilities/extensions/is.extension.js.map +1 -0
  276. package/dist/utilities/extensions/zcc-testing.extension.d.ts +4 -0
  277. package/dist/utilities/extensions/zcc-testing.extension.js +9 -0
  278. package/dist/utilities/extensions/zcc-testing.extension.js.map +1 -0
  279. package/dist/utilities/extensions/zcc.extension.d.ts +20 -0
  280. package/dist/utilities/extensions/zcc.extension.js +66 -0
  281. package/dist/utilities/extensions/zcc.extension.js.map +1 -0
  282. package/dist/utilities/helpers/async.helper.d.ts +2 -0
  283. package/dist/utilities/helpers/async.helper.js +26 -0
  284. package/dist/utilities/helpers/async.helper.js.map +1 -0
  285. package/dist/utilities/helpers/context.helper.d.ts +7 -0
  286. package/dist/utilities/helpers/context.helper.js +3 -0
  287. package/dist/utilities/helpers/context.helper.js.map +1 -0
  288. package/dist/utilities/helpers/cron.helper.d.ts +87 -0
  289. package/dist/utilities/helpers/cron.helper.js +92 -0
  290. package/dist/utilities/helpers/cron.helper.js.map +1 -0
  291. package/dist/utilities/helpers/extend.helper.d.ts +2 -0
  292. package/dist/utilities/helpers/extend.helper.js +68 -0
  293. package/dist/utilities/helpers/extend.helper.js.map +1 -0
  294. package/dist/utilities/helpers/index.d.ts +5 -0
  295. package/dist/utilities/helpers/index.js +9 -0
  296. package/dist/utilities/helpers/index.js.map +1 -0
  297. package/dist/utilities/helpers/utilities.helper.d.ts +63 -0
  298. package/dist/utilities/helpers/utilities.helper.js +93 -0
  299. package/dist/utilities/helpers/utilities.helper.js.map +1 -0
  300. package/dist/utilities/index.d.ts +2 -0
  301. package/dist/utilities/index.js +6 -0
  302. package/dist/utilities/index.js.map +1 -0
  303. package/package.json +101 -0
@@ -0,0 +1,452 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.CreateApplication = exports.CreateLibrary = exports.LIB_BOILERPLATE = void 0;
4
+ const async_1 = require("async");
5
+ const events_1 = require("events");
6
+ const process_1 = require("process");
7
+ const __1 = require("../..");
8
+ const helpers_1 = require("../helpers");
9
+ const cache_extension_1 = require("./cache.extension");
10
+ const configuration_extension_1 = require("./configuration.extension");
11
+ const fetch_extension_1 = require("./fetch.extension");
12
+ const logger_extension_1 = require("./logger.extension");
13
+ const scheduler_extension_1 = require("./scheduler.extension");
14
+ // @doc obsidian://open?vault=obsidian&file=01%20Libraries%2F01.04%20Boilerplate%2FExtensions%2FWiring
15
+ // # "Semi-local variables"
16
+ // These are resettable variables, which are scoped to outside the function on purpose
17
+ // If these were moved inside the service function, then re-running the method would result in application / library references being stranded
18
+ // Items like lib_boilerplate would still exist, but their lifecycles would be not accessible by the current application
19
+ //
20
+ // By moving to outside the function, the internal methods will be able to re-initialize as expected, without needing to fully rebuild every reference everywhere
21
+ // ... in theory
22
+ let completedLifecycleCallbacks = new Set();
23
+ /**
24
+ * association of projects to { service : Declaration Function }
25
+ */
26
+ let MODULE_MAPPINGS = new Map();
27
+ /**
28
+ * association of projects to { service : Initialized Service }
29
+ */
30
+ let LOADED_MODULES = new Map();
31
+ /**
32
+ * Optimized reverse lookups: Declaration Function => [project, service]
33
+ */
34
+ let REVERSE_MODULE_MAPPING = new Map();
35
+ let LOADED_LIFECYCLES = new Map();
36
+ /**
37
+ * Details relating to the application that is actively running
38
+ */
39
+ let ACTIVE_APPLICATION = undefined;
40
+ // heisenberg's variables. it's probably here, but maybe not
41
+ let scheduler;
42
+ let logger;
43
+ const COERCE_CONTEXT = (context) => context;
44
+ const WIRING_CONTEXT = COERCE_CONTEXT("boilerplate:wiring");
45
+ const NONE = -1;
46
+ // exporting a let makes me feel dirty inside
47
+ // at least it's only for testing
48
+ // # Utility
49
+ // ## Global shutdown
50
+ const processEvents = new Map([
51
+ // ### Shutdown requests
52
+ [
53
+ "SIGTERM",
54
+ async () => {
55
+ logger.warn(`received [SIGTERM]`);
56
+ await Teardown();
57
+ await __1.ZCC_Testing.FailFast();
58
+ },
59
+ ],
60
+ [
61
+ "SIGINT",
62
+ async () => {
63
+ logger.warn(`received [SIGINT]`);
64
+ await Teardown();
65
+ await __1.ZCC_Testing.FailFast();
66
+ },
67
+ ],
68
+ // ### Major application errors
69
+ // ["uncaughtException", () => {}],
70
+ // ["unhandledRejection", (reason, promise) => {}],
71
+ ]);
72
+ // ## Validate Library
73
+ function ValidateLibrary(project, serviceList) {
74
+ if (__1.is.empty(project)) {
75
+ throw new helpers_1.BootstrapException(COERCE_CONTEXT("CreateLibrary"), "MISSING_LIBRARY_NAME", "Library name is required");
76
+ }
77
+ const services = Object.entries(serviceList);
78
+ // Find the first invalid service
79
+ const invalidService = services.find(([, definition]) => typeof definition !== "function");
80
+ if (invalidService) {
81
+ const [invalidServiceName, service] = invalidService;
82
+ throw new helpers_1.BootstrapException(COERCE_CONTEXT("CreateLibrary"), "INVALID_SERVICE_DEFINITION", `Invalid service definition for '${invalidServiceName}' in library '${project}' (${typeof service}})`);
83
+ }
84
+ }
85
+ // ## LIB_BOILERPLATE
86
+ function CreateBoilerplate() {
87
+ return CreateLibrary({
88
+ configuration: {
89
+ CACHE_PREFIX: {
90
+ description: [
91
+ "Use a prefix with all cache keys",
92
+ "If blank, then application name is used",
93
+ ].join(`. `),
94
+ type: "string",
95
+ },
96
+ CACHE_PROVIDER: {
97
+ default: "memory",
98
+ description: "Redis is preferred if available",
99
+ enum: ["redis", "memory"],
100
+ type: "string",
101
+ },
102
+ CACHE_TTL: {
103
+ default: 86_400,
104
+ description: "Configuration property for cache provider, in seconds",
105
+ type: "number",
106
+ },
107
+ CONFIG: {
108
+ description: [
109
+ "Consumable as CLI switch only",
110
+ "If provided, all other file based configurations will be ignored",
111
+ "Environment variables + CLI switches will operate normally",
112
+ ].join(". "),
113
+ type: "string",
114
+ },
115
+ LOG_LEVEL: {
116
+ default: "trace",
117
+ description: "Minimum log level to process",
118
+ enum: ["silent", "trace", "info", "warn", "debug", "error"],
119
+ type: "string",
120
+ },
121
+ LOG_METRICS: {
122
+ default: true,
123
+ type: "boolean",
124
+ },
125
+ REDIS_URL: {
126
+ default: "redis://localhost:6379",
127
+ description: "Configuration property for cache provider, does not apply to memory caching",
128
+ type: "string",
129
+ },
130
+ },
131
+ name: "boilerplate",
132
+ // > 🐔 🥚 dependencies
133
+ // config system internally resolves this via lifecycle events
134
+ priorityInit: ["configuration", "logger"],
135
+ services: {
136
+ cache: cache_extension_1.Cache,
137
+ configuration: configuration_extension_1.Configuration,
138
+ fetch: fetch_extension_1.Fetch,
139
+ logger: logger_extension_1.Logger,
140
+ scheduler: scheduler_extension_1.Scheduler,
141
+ },
142
+ });
143
+ }
144
+ // # Module Creation
145
+ function WireOrder(priority, list) {
146
+ const out = [...(priority || [])];
147
+ if (!__1.is.empty(priority)) {
148
+ const check = __1.is.unique(priority);
149
+ if (check.length !== out.length) {
150
+ throw new helpers_1.BootstrapException(WIRING_CONTEXT, "DOUBLE_PRIORITY", "There are duplicate items in the priority load list");
151
+ }
152
+ }
153
+ return [...out, ...list.filter(i => !out.includes(i))];
154
+ }
155
+ const CfgManager = () => __1.ZCC?.config;
156
+ // ## Create Library
157
+ function CreateLibrary({ name: libraryName, configuration, priorityInit, services, }) {
158
+ ValidateLibrary(libraryName, services);
159
+ const lifecycle = CreateChildLifecycle();
160
+ const generated = {};
161
+ const library = {
162
+ [helpers_1.WIRE_PROJECT]: async () => {
163
+ // This one hasn't been loaded yet, generate an object with all the correct properties
164
+ LOADED_LIFECYCLES.set(libraryName, lifecycle);
165
+ // not defined for boilerplate (chicken & egg)
166
+ // manually added inside the bootstrap process
167
+ CfgManager()?.[configuration_extension_1.LOAD_PROJECT](libraryName, configuration);
168
+ await (0, async_1.eachSeries)(WireOrder(priorityInit, Object.keys(services)), async (service) => {
169
+ generated[service] = await WireService(libraryName, service, services[service], lifecycle);
170
+ });
171
+ // mental note: people should probably do all their lifecycle attachments at the base level function
172
+ // otherwise, it'll happen after this wire() call, and go into a black hole (worst case) or fatal error ("best" case)
173
+ return lifecycle;
174
+ },
175
+ configuration,
176
+ lifecycle,
177
+ name: libraryName,
178
+ onError: callback => __1.ZCC.event.on((0, helpers_1.DIGITAL_ALCHEMY_LIBRARY_ERROR)(libraryName), callback),
179
+ priorityInit,
180
+ services,
181
+ };
182
+ return library;
183
+ }
184
+ exports.CreateLibrary = CreateLibrary;
185
+ // ## Create Application
186
+ function CreateApplication({ name, services, libraries = [], configuration = {}, priorityInit, }) {
187
+ const lifecycle = CreateChildLifecycle();
188
+ const application = {
189
+ [helpers_1.WIRE_PROJECT]: async () => {
190
+ LOADED_LIFECYCLES.set(name, lifecycle);
191
+ CfgManager()[configuration_extension_1.LOAD_PROJECT](name, configuration);
192
+ await (0, async_1.eachSeries)(WireOrder(priorityInit, Object.keys(services)), async (service) => {
193
+ await WireService(name, service, services[service], lifecycle);
194
+ });
195
+ return lifecycle;
196
+ },
197
+ booted: false,
198
+ bootstrap: async (options) => {
199
+ if (application.booted) {
200
+ throw new helpers_1.BootstrapException(WIRING_CONTEXT, "DOUBLE_BOOT", "Application is already booted! Cannot bootstrap again");
201
+ }
202
+ await Bootstrap(application, options);
203
+ application.booted = true;
204
+ },
205
+ configuration,
206
+ libraries,
207
+ lifecycle,
208
+ name,
209
+ onError: callback => __1.ZCC.event.on(helpers_1.DIGITAL_ALCHEMY_APPLICATION_ERROR, callback),
210
+ priorityInit,
211
+ services,
212
+ teardown: async () => {
213
+ if (!application.booted) {
214
+ logger.error(`application is not booted, cannot teardown`);
215
+ return;
216
+ }
217
+ await Teardown();
218
+ application.booted = false;
219
+ },
220
+ };
221
+ return application;
222
+ }
223
+ exports.CreateApplication = CreateApplication;
224
+ // # Wiring
225
+ // ## Wire Service
226
+ async function WireService(project, service, definition, lifecycle) {
227
+ const mappings = MODULE_MAPPINGS.get(project) ?? {};
228
+ if (!__1.is.undefined(mappings[service])) {
229
+ throw new helpers_1.BootstrapException(WIRING_CONTEXT, "DUPLICATE_SERVICE_NAME", `${service} is already defined for ${project}`);
230
+ }
231
+ mappings[service] = definition;
232
+ MODULE_MAPPINGS.set(project, mappings);
233
+ REVERSE_MODULE_MAPPING.set(definition, [project, service]);
234
+ const context = COERCE_CONTEXT(`${project}:${service}`);
235
+ // logger gets defined first, so this really is only for the start of the start of bootstrapping
236
+ const logger = __1.ZCC.logger ? __1.ZCC.logger.context(context) : undefined;
237
+ const loaded = LOADED_MODULES.get(project) ?? {};
238
+ LOADED_MODULES.set(project, loaded);
239
+ try {
240
+ logger?.trace(`initializing`);
241
+ const config = CfgManager()?.[configuration_extension_1.INJECTED_DEFINITIONS]();
242
+ const inject = Object.fromEntries([...LOADED_MODULES.keys()].map(project => [
243
+ project,
244
+ LOADED_MODULES.get(project),
245
+ ]));
246
+ const params = {
247
+ ...inject,
248
+ cache: __1.ZCC.cache,
249
+ config,
250
+ context,
251
+ event: __1.ZCC.event,
252
+ lifecycle,
253
+ logger,
254
+ scheduler,
255
+ };
256
+ const resolved = (await definition(params));
257
+ loaded[service] = resolved;
258
+ return resolved;
259
+ }
260
+ catch (error) {
261
+ // Init errors at this level are considered blocking.
262
+ // Doubling up on errors to be extra noisy for now, might back off to single later
263
+ logger?.fatal({ error, name: context }, `Initialization error`);
264
+ // eslint-disable-next-line no-console
265
+ console.log(error);
266
+ __1.ZCC_Testing.FailFast();
267
+ return undefined;
268
+ }
269
+ }
270
+ // ## Run Callbacks
271
+ async function RunStageCallbacks(stage) {
272
+ completedLifecycleCallbacks.add(`on${stage}`);
273
+ const list = [
274
+ // boilerplate priority
275
+ LOADED_LIFECYCLES.get("boilerplate").getCallbacks(stage),
276
+ // children next
277
+ // ...
278
+ ...[...LOADED_LIFECYCLES.entries()]
279
+ .filter(([name]) => !["boilerplate", "application"].includes(name))
280
+ .map(([, thing]) => thing.getCallbacks(stage)),
281
+ ];
282
+ await (0, async_1.eachSeries)(list, async (callbacks) => {
283
+ if (__1.is.empty(callbacks)) {
284
+ return;
285
+ }
286
+ const sorted = callbacks.filter(([, sort]) => sort !== NONE);
287
+ const quick = callbacks.filter(([, sort]) => sort === NONE);
288
+ await (0, async_1.eachSeries)(sorted.sort(([, a], [, b]) => (a > b ? __1.UP : __1.DOWN)), async ([callback]) => await callback());
289
+ await (0, async_1.each)(quick, async ([callback]) => await callback());
290
+ });
291
+ }
292
+ let startup;
293
+ // # Lifecycle runners
294
+ // ## Bootstrap
295
+ async function Bootstrap(application, options) {
296
+ if (ACTIVE_APPLICATION) {
297
+ throw new helpers_1.BootstrapException(COERCE_CONTEXT("wiring.extension"), "NO_DUAL_BOOT", "Another application is already active, please terminate");
298
+ }
299
+ startup = new Date();
300
+ try {
301
+ // * Recreate base eventemitter
302
+ __1.ZCC.event = new events_1.EventEmitter();
303
+ // ? Some libraries need to be aware of
304
+ __1.ZCC.application = application;
305
+ // * Generate a new boilerplate module
306
+ exports.LIB_BOILERPLATE = CreateBoilerplate();
307
+ // * Wire it
308
+ await exports.LIB_BOILERPLATE[helpers_1.WIRE_PROJECT]();
309
+ // ~ configuration
310
+ CfgManager()[configuration_extension_1.LOAD_PROJECT](exports.LIB_BOILERPLATE.name, exports.LIB_BOILERPLATE.configuration);
311
+ // ~ scheduler (for injecting into other modules)
312
+ scheduler = LOADED_MODULES.get(exports.LIB_BOILERPLATE.name)
313
+ .scheduler;
314
+ logger = __1.ZCC.logger.context(WIRING_CONTEXT);
315
+ logger.info(`[boilerplate] wiring complete`);
316
+ // * Wire in various shutdown events
317
+ processEvents.forEach((callback, event) => {
318
+ process.on(event, callback);
319
+ logger.trace({ event }, "shutdown event");
320
+ });
321
+ // * Add in libraries
322
+ application.libraries ??= [];
323
+ await (0, async_1.eachSeries)(application.libraries, async (i) => {
324
+ logger.info(`[%s] init project`, i.name);
325
+ await i[helpers_1.WIRE_PROJECT]();
326
+ });
327
+ logger.info(`init application`);
328
+ // * Finally the application
329
+ await application[helpers_1.WIRE_PROJECT]();
330
+ // ? Configuration values provided bootstrap take priority over module level
331
+ if (!__1.is.empty(options?.configuration)) {
332
+ __1.ZCC.config.merge(options?.configuration);
333
+ }
334
+ // - Kick off lifecycle
335
+ logger.debug(`[PreInit] running lifecycle callbacks`);
336
+ await RunStageCallbacks("PreInit");
337
+ // - Pull in user configurations
338
+ logger.debug("loading configuration");
339
+ await CfgManager()[configuration_extension_1.INITIALIZE](application);
340
+ // - Run through other events in order
341
+ logger.debug(`[PostConfig] running lifecycle callbacks`);
342
+ await RunStageCallbacks("PostConfig");
343
+ logger.debug(`[Bootstrap] running lifecycle callbacks`);
344
+ await RunStageCallbacks("Bootstrap");
345
+ logger.debug(`[Ready] running lifecycle callbacks`);
346
+ await RunStageCallbacks("Ready");
347
+ // * App is ready!
348
+ logger.info(`🪄 [%s] application bootstrapped`, application.name);
349
+ ACTIVE_APPLICATION = application;
350
+ }
351
+ catch (error) {
352
+ logger?.fatal({ application, error }, "bootstrap failed");
353
+ __1.ZCC_Testing.FailFast();
354
+ }
355
+ }
356
+ // ## Teardown
357
+ async function Teardown() {
358
+ if (!ACTIVE_APPLICATION) {
359
+ return;
360
+ }
361
+ logger.info(`tearing down application`);
362
+ logger.debug(`[ShutdownStart] running lifecycle callbacks`);
363
+ await RunStageCallbacks("ShutdownStart");
364
+ logger.debug(`[ShutdownComplete] running lifecycle callbacks`);
365
+ await RunStageCallbacks("ShutdownComplete");
366
+ ACTIVE_APPLICATION = undefined;
367
+ completedLifecycleCallbacks = new Set();
368
+ processEvents.forEach((callback, event) => process.removeListener(event, callback));
369
+ logger.info({ started_at: __1.ZCC.utils.relativeDate(startup) }, `application terminated`);
370
+ }
371
+ // # Lifecycle
372
+ function CreateChildLifecycle(name) {
373
+ const stages = [...helpers_1.LIFECYCLE_STAGES];
374
+ const childCallbacks = Object.fromEntries(stages.map(i => [i, []]));
375
+ const [onPreInit, onPostConfig, onBootstrap, onReady, onShutdownStart, onShutdownComplete,] = helpers_1.LIFECYCLE_STAGES.map(stage => (callback, priority = NONE) => {
376
+ if (completedLifecycleCallbacks.has(`on${stage}`)) {
377
+ // this is makes "earliest run time" logic way easier to implement
378
+ // intended mode of operation
379
+ if (["PreInit", "PostConfig", "Bootstrap", "Ready"].includes(stage)) {
380
+ setImmediate(async () => await callback());
381
+ return;
382
+ }
383
+ // What does this mean in reality?
384
+ // Probably a broken unit test, I really don't know what workflow would cause this
385
+ logger.fatal(`on${stage} late attach, cannot attach callback`);
386
+ return;
387
+ }
388
+ childCallbacks[stage].push([callback, priority]);
389
+ });
390
+ const lifecycle = {
391
+ getCallbacks: (stage) => childCallbacks[stage],
392
+ onBootstrap,
393
+ onPostConfig,
394
+ onPreInit,
395
+ onReady,
396
+ onShutdownComplete,
397
+ onShutdownStart,
398
+ };
399
+ if (!__1.is.empty(name)) {
400
+ LOADED_LIFECYCLES.set(name, lifecycle);
401
+ }
402
+ return lifecycle;
403
+ }
404
+ // # Global Attachments
405
+ // ## Safe Exec
406
+ __1.ZCC.safeExec = async (options) => {
407
+ let labels = {};
408
+ let errorMetric;
409
+ try {
410
+ if (__1.is.function(options)) {
411
+ await options();
412
+ return;
413
+ }
414
+ const opt = options;
415
+ labels = opt.labels;
416
+ errorMetric = opt.errors;
417
+ const { exec, duration, executions } = opt;
418
+ if (__1.is.empty(labels.label)) {
419
+ await exec();
420
+ return;
421
+ }
422
+ executions?.inc(labels);
423
+ const end = duration?.startTimer();
424
+ await exec();
425
+ if (end) {
426
+ end(labels);
427
+ }
428
+ }
429
+ catch (error) {
430
+ __1.ZCC.systemLogger.error({ error, ...labels }, `Callback threw error`);
431
+ if (!__1.is.empty(labels.label)) {
432
+ errorMetric?.inc(labels);
433
+ }
434
+ }
435
+ };
436
+ // ## Testing
437
+ __1.ZCC_Testing.configurationFiles = helpers_1.ConfigurationFiles;
438
+ __1.ZCC_Testing.FailFast = () => (0, process_1.exit)();
439
+ __1.ZCC_Testing.LOADED_MODULES = () => LOADED_MODULES;
440
+ __1.ZCC_Testing.MODULE_MAPPINGS = () => MODULE_MAPPINGS;
441
+ __1.ZCC_Testing.REVERSE_MODULE_MAPPING = () => REVERSE_MODULE_MAPPING;
442
+ __1.ZCC_Testing.WiringReset = () => {
443
+ process.removeAllListeners();
444
+ MODULE_MAPPINGS = new Map();
445
+ LOADED_MODULES = new Map();
446
+ LOADED_LIFECYCLES = new Map();
447
+ REVERSE_MODULE_MAPPING = new Map();
448
+ completedLifecycleCallbacks = new Set();
449
+ ACTIVE_APPLICATION = undefined;
450
+ };
451
+ __1.ZCC_Testing.WireService = WireService;
452
+ //# sourceMappingURL=wiring.extension.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"wiring.extension.js","sourceRoot":"","sources":["../../../src/boilerplate/extensions/wiring.extension.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,7 @@
1
+ import NodeCache from "node-cache";
2
+ import { ICacheDriver } from "..";
3
+ import { TServiceParams } from "./wiring.helper";
4
+ /**
5
+ * url & name properties automatically generated from config
6
+ */
7
+ export declare function createMemoryDriver({ logger, config }: Pick<TServiceParams, "logger" | "config">, options?: NodeCache.Options): ICacheDriver;
@@ -0,0 +1,65 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.createMemoryDriver = void 0;
4
+ const tslib_1 = require("tslib");
5
+ const node_cache_1 = tslib_1.__importDefault(require("node-cache"));
6
+ const __1 = require("../..");
7
+ const metrics_helper_1 = require("./metrics.helper");
8
+ /**
9
+ * url & name properties automatically generated from config
10
+ */
11
+ function createMemoryDriver({ logger, config }, options) {
12
+ const client = new node_cache_1.default({
13
+ stdTTL: config.boilerplate.CACHE_TTL,
14
+ ...options,
15
+ });
16
+ return {
17
+ async del(key) {
18
+ try {
19
+ client.del(key);
20
+ }
21
+ catch (error) {
22
+ logger.error({ err: error }, "Error in Memory Cache del operation");
23
+ metrics_helper_1.MEMORY_CACHE_ERROR_COUNT.inc();
24
+ }
25
+ },
26
+ async get(key, defaultValue) {
27
+ try {
28
+ const out = client.get(key);
29
+ if (__1.is.string(out)) {
30
+ return JSON.parse(out);
31
+ }
32
+ return defaultValue;
33
+ }
34
+ catch (error) {
35
+ logger.error({ err: error }, "Error in Memory Cache get operation");
36
+ metrics_helper_1.MEMORY_CACHE_ERROR_COUNT.inc();
37
+ return defaultValue;
38
+ }
39
+ },
40
+ async keys(pattern) {
41
+ try {
42
+ const allKeys = client.keys();
43
+ return pattern
44
+ ? allKeys.filter(key => new RegExp(pattern).test(key))
45
+ : allKeys;
46
+ }
47
+ catch (error) {
48
+ logger.error({ err: error }, "Error in Memory Cache keys operation");
49
+ metrics_helper_1.MEMORY_CACHE_ERROR_COUNT.inc();
50
+ return [];
51
+ }
52
+ },
53
+ async set(key, value, ttl) {
54
+ try {
55
+ client.set(key, JSON.stringify(value), ttl);
56
+ }
57
+ catch (error) {
58
+ logger.error({ err: error }, "Error in Memory Cache set operation");
59
+ metrics_helper_1.MEMORY_CACHE_ERROR_COUNT.inc();
60
+ }
61
+ },
62
+ };
63
+ }
64
+ exports.createMemoryDriver = createMemoryDriver;
65
+ //# sourceMappingURL=cache-memory.helper.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cache-memory.helper.js","sourceRoot":"","sources":["../../../src/boilerplate/helpers/cache-memory.helper.ts"],"names":[],"mappings":";;;;AAAA,oEAAmC;AAEnC,6BAA2B;AAE3B,qDAA4D;AAG5D;;GAEG;AACH,SAAgB,kBAAkB,CAChC,EAAE,MAAM,EAAE,MAAM,EAA6C,EAC7D,OAA2B;IAE3B,MAAM,MAAM,GAAG,IAAI,oBAAS,CAAC;QAC3B,MAAM,EAAE,MAAM,CAAC,WAAW,CAAC,SAAS;QACpC,GAAG,OAAO;KACX,CAAC,CAAC;IAEH,OAAO;QACL,KAAK,CAAC,GAAG,CAAC,GAAW;YACnB,IAAI,CAAC;gBACH,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;YAClB,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBACf,MAAM,CAAC,KAAK,CAAC,EAAE,GAAG,EAAE,KAAK,EAAE,EAAE,qCAAqC,CAAC,CAAC;gBACpE,yCAAwB,CAAC,GAAG,EAAE,CAAC;YACjC,CAAC;QACH,CAAC;QACD,KAAK,CAAC,GAAG,CAAI,GAAW,EAAE,YAAgB;YACxC,IAAI,CAAC;gBACH,MAAM,GAAG,GAAG,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;gBAC5B,IAAI,MAAE,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC;oBACnB,OAAO,IAAI,CAAC,KAAK,CAAC,GAAG,CAAM,CAAC;gBAC9B,CAAC;gBACD,OAAO,YAAY,CAAC;YACtB,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBACf,MAAM,CAAC,KAAK,CAAC,EAAE,GAAG,EAAE,KAAK,EAAE,EAAE,qCAAqC,CAAC,CAAC;gBACpE,yCAAwB,CAAC,GAAG,EAAE,CAAC;gBAC/B,OAAO,YAAY,CAAC;YACtB,CAAC;QACH,CAAC;QACD,KAAK,CAAC,IAAI,CAAC,OAAgB;YACzB,IAAI,CAAC;gBACH,MAAM,OAAO,GAAG,MAAM,CAAC,IAAI,EAAE,CAAC;gBAC9B,OAAO,OAAO;oBACZ,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;oBACtD,CAAC,CAAC,OAAO,CAAC;YACd,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBACf,MAAM,CAAC,KAAK,CAAC,EAAE,GAAG,EAAE,KAAK,EAAE,EAAE,sCAAsC,CAAC,CAAC;gBACrE,yCAAwB,CAAC,GAAG,EAAE,CAAC;gBAC/B,OAAO,EAAE,CAAC;YACZ,CAAC;QACH,CAAC;QACD,KAAK,CAAC,GAAG,CAAI,GAAW,EAAE,KAAQ,EAAE,GAAW;YAC7C,IAAI,CAAC;gBACH,MAAM,CAAC,GAAG,CAAC,GAAG,EAAE,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,EAAE,GAAG,CAAC,CAAC;YAC9C,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBACf,MAAM,CAAC,KAAK,CAAC,EAAE,GAAG,EAAE,KAAK,EAAE,EAAE,qCAAqC,CAAC,CAAC;gBACpE,yCAAwB,CAAC,GAAG,EAAE,CAAC;YACjC,CAAC;QACH,CAAC;KACF,CAAC;AACJ,CAAC;AApDD,gDAoDC"}
@@ -0,0 +1,7 @@
1
+ import { createClient } from "redis";
2
+ import { ICacheDriver } from "..";
3
+ import { TServiceParams } from "./wiring.helper";
4
+ /**
5
+ * url & name properties automatically generated from config
6
+ */
7
+ export declare function createRedisDriver({ logger, config }: Pick<TServiceParams, "logger" | "config">, options?: Parameters<typeof createClient>[0]): Promise<ICacheDriver>;
@@ -0,0 +1,69 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.createRedisDriver = void 0;
4
+ /* eslint-disable @typescript-eslint/no-magic-numbers */
5
+ const redis_1 = require("redis");
6
+ const __1 = require("../..");
7
+ const metrics_helper_1 = require("./metrics.helper");
8
+ /**
9
+ * url & name properties automatically generated from config
10
+ */
11
+ async function createRedisDriver({ logger, config }, options) {
12
+ const client = (0, redis_1.createClient)({
13
+ url: config.boilerplate.REDIS_URL,
14
+ ...options,
15
+ });
16
+ await client.connect();
17
+ return {
18
+ async del(key) {
19
+ try {
20
+ await client.del(key);
21
+ }
22
+ catch (error) {
23
+ logger.error({ err: error }, "Error in Redis del operation");
24
+ metrics_helper_1.REDIS_ERROR_COUNT.inc();
25
+ }
26
+ },
27
+ async get(key, defaultValue) {
28
+ try {
29
+ const start = process.hrtime();
30
+ const out = await client.get(key);
31
+ const diff = process.hrtime(start);
32
+ const durationInMilliseconds = diff[0] * __1.SECOND + diff[1] / 1e6;
33
+ metrics_helper_1.REDIS_OPERATION_LATENCY_MS.observe(durationInMilliseconds);
34
+ if (out !== null && __1.is.string(out)) {
35
+ return JSON.parse(out);
36
+ }
37
+ return defaultValue;
38
+ }
39
+ catch (error) {
40
+ logger.error({ err: error }, "Error in Redis get operation");
41
+ metrics_helper_1.REDIS_ERROR_COUNT.inc();
42
+ return defaultValue;
43
+ }
44
+ },
45
+ async keys(pattern) {
46
+ try {
47
+ return await client.keys(pattern || "*");
48
+ }
49
+ catch (error) {
50
+ logger.error({ err: error }, "Error in Redis keys operation");
51
+ metrics_helper_1.REDIS_ERROR_COUNT.inc();
52
+ return [];
53
+ }
54
+ },
55
+ async set(key, value, ttl) {
56
+ try {
57
+ await client.set(key, JSON.stringify(value), {
58
+ EX: ttl,
59
+ });
60
+ }
61
+ catch (error) {
62
+ logger.error({ err: error }, "Error in Redis set operation");
63
+ metrics_helper_1.REDIS_ERROR_COUNT.inc();
64
+ }
65
+ },
66
+ };
67
+ }
68
+ exports.createRedisDriver = createRedisDriver;
69
+ //# sourceMappingURL=cache-redis.helper.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cache-redis.helper.js","sourceRoot":"","sources":["../../../src/boilerplate/helpers/cache-redis.helper.ts"],"names":[],"mappings":";;;AAAA,wDAAwD;AACxD,iCAAqC;AAErC,6BAAmC;AAEnC,qDAG0B;AAE1B;;GAEG;AACI,KAAK,UAAU,iBAAiB,CACrC,EAAE,MAAM,EAAE,MAAM,EAA6C,EAC7D,OAA4C;IAE5C,MAAM,MAAM,GAAG,IAAA,oBAAY,EAAC;QAC1B,GAAG,EAAE,MAAM,CAAC,WAAW,CAAC,SAAS;QACjC,GAAG,OAAO;KACX,CAAC,CAAC;IACH,MAAM,MAAM,CAAC,OAAO,EAAE,CAAC;IAEvB,OAAO;QACL,KAAK,CAAC,GAAG,CAAC,GAAW;YACnB,IAAI,CAAC;gBACH,MAAM,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;YACxB,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBACf,MAAM,CAAC,KAAK,CAAC,EAAE,GAAG,EAAE,KAAK,EAAE,EAAE,8BAA8B,CAAC,CAAC;gBAC7D,kCAAiB,CAAC,GAAG,EAAE,CAAC;YAC1B,CAAC;QACH,CAAC;QACD,KAAK,CAAC,GAAG,CAAI,GAAW,EAAE,YAAgB;YACxC,IAAI,CAAC;gBACH,MAAM,KAAK,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC;gBAC/B,MAAM,GAAG,GAAG,MAAM,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;gBAClC,MAAM,IAAI,GAAG,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;gBACnC,MAAM,sBAAsB,GAAG,IAAI,CAAC,CAAC,CAAC,GAAG,UAAM,GAAG,IAAI,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC;gBAChE,2CAA0B,CAAC,OAAO,CAAC,sBAAsB,CAAC,CAAC;gBAC3D,IAAI,GAAG,KAAK,IAAI,IAAI,MAAE,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC;oBACnC,OAAO,IAAI,CAAC,KAAK,CAAC,GAAG,CAAM,CAAC;gBAC9B,CAAC;gBACD,OAAO,YAAY,CAAC;YACtB,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBACf,MAAM,CAAC,KAAK,CAAC,EAAE,GAAG,EAAE,KAAK,EAAE,EAAE,8BAA8B,CAAC,CAAC;gBAC7D,kCAAiB,CAAC,GAAG,EAAE,CAAC;gBACxB,OAAO,YAAY,CAAC;YACtB,CAAC;QACH,CAAC;QACD,KAAK,CAAC,IAAI,CAAC,OAAgB;YACzB,IAAI,CAAC;gBACH,OAAO,MAAM,MAAM,CAAC,IAAI,CAAC,OAAO,IAAI,GAAG,CAAC,CAAC;YAC3C,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBACf,MAAM,CAAC,KAAK,CAAC,EAAE,GAAG,EAAE,KAAK,EAAE,EAAE,+BAA+B,CAAC,CAAC;gBAC9D,kCAAiB,CAAC,GAAG,EAAE,CAAC;gBACxB,OAAO,EAAE,CAAC;YACZ,CAAC;QACH,CAAC;QACD,KAAK,CAAC,GAAG,CAAI,GAAW,EAAE,KAAQ,EAAE,GAAW;YAC7C,IAAI,CAAC;gBACH,MAAM,MAAM,CAAC,GAAG,CAAC,GAAG,EAAE,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,EAAE;oBAC3C,EAAE,EAAE,GAAG;iBACR,CAAC,CAAC;YACL,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBACf,MAAM,CAAC,KAAK,CAAC,EAAE,GAAG,EAAE,KAAK,EAAE,EAAE,8BAA8B,CAAC,CAAC;gBAC7D,kCAAiB,CAAC,GAAG,EAAE,CAAC;YAC1B,CAAC;QACH,CAAC;KACF,CAAC;AACJ,CAAC;AAxDD,8CAwDC"}
@@ -0,0 +1,2 @@
1
+ import { ConfigLoaderParams, ConfigLoaderReturn } from "./config.helper";
2
+ export declare function ConfigLoaderEnvironment({ configs, }: ConfigLoaderParams): ConfigLoaderReturn;