@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.
- package/LICENSE +21 -0
- package/README.md +47 -0
- package/dist/automation/automation.module.d.ts +61 -0
- package/dist/automation/automation.module.js +70 -0
- package/dist/automation/automation.module.js.map +1 -0
- package/dist/automation/extensions/aggressive-scenes.extension.d.ts +22 -0
- package/dist/automation/extensions/aggressive-scenes.extension.js +125 -0
- package/dist/automation/extensions/aggressive-scenes.extension.js.map +1 -0
- package/dist/automation/extensions/circadian.extension.d.ts +11 -0
- package/dist/automation/extensions/circadian.extension.js +87 -0
- package/dist/automation/extensions/circadian.extension.js.map +1 -0
- package/dist/automation/extensions/index.d.ts +7 -0
- package/dist/automation/extensions/index.js +11 -0
- package/dist/automation/extensions/index.js.map +1 -0
- package/dist/automation/extensions/light-manager.extension.d.ts +26 -0
- package/dist/automation/extensions/light-manager.extension.js +260 -0
- package/dist/automation/extensions/light-manager.extension.js.map +1 -0
- package/dist/automation/extensions/managed-switch.extension.d.ts +3 -0
- package/dist/automation/extensions/managed-switch.extension.js +73 -0
- package/dist/automation/extensions/managed-switch.extension.js.map +1 -0
- package/dist/automation/extensions/room.extension.d.ts +11 -0
- package/dist/automation/extensions/room.extension.js +179 -0
- package/dist/automation/extensions/room.extension.js.map +1 -0
- package/dist/automation/extensions/sequence-matcher.extension.d.ts +3 -0
- package/dist/automation/extensions/sequence-matcher.extension.js +126 -0
- package/dist/automation/extensions/sequence-matcher.extension.js.map +1 -0
- package/dist/automation/extensions/solar-calc.extension.d.ts +20 -0
- package/dist/automation/extensions/solar-calc.extension.js +105 -0
- package/dist/automation/extensions/solar-calc.extension.js.map +1 -0
- package/dist/automation/helpers/events.helper.d.ts +33 -0
- package/dist/automation/helpers/events.helper.js +14 -0
- package/dist/automation/helpers/events.helper.js.map +1 -0
- package/dist/automation/helpers/index.d.ts +7 -0
- package/dist/automation/helpers/index.js +11 -0
- package/dist/automation/helpers/index.js.map +1 -0
- package/dist/automation/helpers/managed-switch.helper.d.ts +41 -0
- package/dist/automation/helpers/managed-switch.helper.js +3 -0
- package/dist/automation/helpers/managed-switch.helper.js.map +1 -0
- package/dist/automation/helpers/metrics.helper.d.ts +13 -0
- package/dist/automation/helpers/metrics.helper.js +30 -0
- package/dist/automation/helpers/metrics.helper.js.map +1 -0
- package/dist/automation/helpers/reftimes.helper.d.ts +54 -0
- package/dist/automation/helpers/reftimes.helper.js +33 -0
- package/dist/automation/helpers/reftimes.helper.js.map +1 -0
- package/dist/automation/helpers/scene.helper.d.ts +97 -0
- package/dist/automation/helpers/scene.helper.js +5 -0
- package/dist/automation/helpers/scene.helper.js.map +1 -0
- package/dist/automation/helpers/sequence.helper.d.ts +55 -0
- package/dist/automation/helpers/sequence.helper.js +3 -0
- package/dist/automation/helpers/sequence.helper.js.map +1 -0
- package/dist/automation/helpers/solar.helper.d.ts +3 -0
- package/dist/automation/helpers/solar.helper.js +262 -0
- package/dist/automation/helpers/solar.helper.js.map +1 -0
- package/dist/automation/index.d.ts +3 -0
- package/dist/automation/index.js +10 -0
- package/dist/automation/index.js.map +1 -0
- package/dist/boilerplate/extensions/cache.extension.d.ts +24 -0
- package/dist/boilerplate/extensions/cache.extension.js +96 -0
- package/dist/boilerplate/extensions/cache.extension.js.map +1 -0
- package/dist/boilerplate/extensions/configuration.extension.d.ts +23 -0
- package/dist/boilerplate/extensions/configuration.extension.js +98 -0
- package/dist/boilerplate/extensions/configuration.extension.js.map +1 -0
- package/dist/boilerplate/extensions/fetch.extension.d.ts +20 -0
- package/dist/boilerplate/extensions/fetch.extension.js +154 -0
- package/dist/boilerplate/extensions/fetch.extension.js.map +1 -0
- package/dist/boilerplate/extensions/index.d.ts +6 -0
- package/dist/boilerplate/extensions/index.js +10 -0
- package/dist/boilerplate/extensions/index.js.map +1 -0
- package/dist/boilerplate/extensions/logger.extension.d.ts +39 -0
- package/dist/boilerplate/extensions/logger.extension.js +159 -0
- package/dist/boilerplate/extensions/logger.extension.js.map +1 -0
- package/dist/boilerplate/extensions/scheduler.extension.d.ts +21 -0
- package/dist/boilerplate/extensions/scheduler.extension.js +117 -0
- package/dist/boilerplate/extensions/scheduler.extension.js.map +1 -0
- package/dist/boilerplate/extensions/wiring.extension.d.ts +101 -0
- package/dist/boilerplate/extensions/wiring.extension.js +452 -0
- package/dist/boilerplate/extensions/wiring.extension.js.map +1 -0
- package/dist/boilerplate/helpers/cache-memory.helper.d.ts +7 -0
- package/dist/boilerplate/helpers/cache-memory.helper.js +65 -0
- package/dist/boilerplate/helpers/cache-memory.helper.js.map +1 -0
- package/dist/boilerplate/helpers/cache-redis.helper.d.ts +7 -0
- package/dist/boilerplate/helpers/cache-redis.helper.js +69 -0
- package/dist/boilerplate/helpers/cache-redis.helper.js.map +1 -0
- package/dist/boilerplate/helpers/config-environment-loader.helper.d.ts +2 -0
- package/dist/boilerplate/helpers/config-environment-loader.helper.js +56 -0
- package/dist/boilerplate/helpers/config-environment-loader.helper.js.map +1 -0
- package/dist/boilerplate/helpers/config-file-loader.helper.d.ts +4 -0
- package/dist/boilerplate/helpers/config-file-loader.helper.js +87 -0
- package/dist/boilerplate/helpers/config-file-loader.helper.js.map +1 -0
- package/dist/boilerplate/helpers/config.helper.d.ts +102 -0
- package/dist/boilerplate/helpers/config.helper.js +32 -0
- package/dist/boilerplate/helpers/config.helper.js.map +1 -0
- package/dist/boilerplate/helpers/errors.helper.d.ts +39 -0
- package/dist/boilerplate/helpers/errors.helper.js +76 -0
- package/dist/boilerplate/helpers/errors.helper.js.map +1 -0
- package/dist/boilerplate/helpers/events.helper.d.ts +3 -0
- package/dist/boilerplate/helpers/events.helper.js +11 -0
- package/dist/boilerplate/helpers/events.helper.js.map +1 -0
- package/dist/boilerplate/helpers/fetch.helper.d.ts +170 -0
- package/dist/boilerplate/helpers/fetch.helper.js +173 -0
- package/dist/boilerplate/helpers/fetch.helper.js.map +1 -0
- package/dist/boilerplate/helpers/index.d.ts +12 -0
- package/dist/boilerplate/helpers/index.js +16 -0
- package/dist/boilerplate/helpers/index.js.map +1 -0
- package/dist/boilerplate/helpers/lifecycle.helper.d.ts +43 -0
- package/dist/boilerplate/helpers/lifecycle.helper.js +13 -0
- package/dist/boilerplate/helpers/lifecycle.helper.js.map +1 -0
- package/dist/boilerplate/helpers/metrics.helper.d.ts +73 -0
- package/dist/boilerplate/helpers/metrics.helper.js +141 -0
- package/dist/boilerplate/helpers/metrics.helper.js.map +1 -0
- package/dist/boilerplate/helpers/testing.helper.d.ts +13 -0
- package/dist/boilerplate/helpers/testing.helper.js +91 -0
- package/dist/boilerplate/helpers/testing.helper.js.map +1 -0
- package/dist/boilerplate/helpers/wiring.helper.d.ts +155 -0
- package/dist/boilerplate/helpers/wiring.helper.js +5 -0
- package/dist/boilerplate/helpers/wiring.helper.js.map +1 -0
- package/dist/boilerplate/index.d.ts +2 -0
- package/dist/boilerplate/index.js +6 -0
- package/dist/boilerplate/index.js.map +1 -0
- package/dist/gotify/extensions/application.extension.d.ts +13 -0
- package/dist/gotify/extensions/application.extension.js +52 -0
- package/dist/gotify/extensions/application.extension.js.map +1 -0
- package/dist/gotify/extensions/client.extension.d.ts +8 -0
- package/dist/gotify/extensions/client.extension.js +38 -0
- package/dist/gotify/extensions/client.extension.js.map +1 -0
- package/dist/gotify/extensions/fetch.extension.d.ts +2 -0
- package/dist/gotify/extensions/fetch.extension.js +14 -0
- package/dist/gotify/extensions/fetch.extension.js.map +1 -0
- package/dist/gotify/extensions/index.d.ts +4 -0
- package/dist/gotify/extensions/index.js +8 -0
- package/dist/gotify/extensions/index.js.map +1 -0
- package/dist/gotify/extensions/message.extension.d.ts +8 -0
- package/dist/gotify/extensions/message.extension.js +37 -0
- package/dist/gotify/extensions/message.extension.js.map +1 -0
- package/dist/gotify/gotify.module.d.ts +29 -0
- package/dist/gotify/gotify.module.js +33 -0
- package/dist/gotify/gotify.module.js.map +1 -0
- package/dist/gotify/helpers/api.d.ts +346 -0
- package/dist/gotify/helpers/api.js +14 -0
- package/dist/gotify/helpers/api.js.map +1 -0
- package/dist/gotify/helpers/events.helper.d.ts +6 -0
- package/dist/gotify/helpers/events.helper.js +5 -0
- package/dist/gotify/helpers/events.helper.js.map +1 -0
- package/dist/gotify/helpers/index.d.ts +2 -0
- package/dist/gotify/helpers/index.js +6 -0
- package/dist/gotify/helpers/index.js.map +1 -0
- package/dist/gotify/index.d.ts +3 -0
- package/dist/gotify/index.js +7 -0
- package/dist/gotify/index.js.map +1 -0
- package/dist/hass/dynamic.d.ts +1126 -0
- package/dist/hass/dynamic.js +153 -0
- package/dist/hass/dynamic.js.map +1 -0
- package/dist/hass/extensions/call-proxy.extension.d.ts +4 -0
- package/dist/hass/extensions/call-proxy.extension.js +88 -0
- package/dist/hass/extensions/call-proxy.extension.js.map +1 -0
- package/dist/hass/extensions/entity-manager.extension.d.ts +61 -0
- package/dist/hass/extensions/entity-manager.extension.js +214 -0
- package/dist/hass/extensions/entity-manager.extension.js.map +1 -0
- package/dist/hass/extensions/fetch-api.extension.d.ts +26 -0
- package/dist/hass/extensions/fetch-api.extension.js +166 -0
- package/dist/hass/extensions/fetch-api.extension.js.map +1 -0
- package/dist/hass/extensions/index.d.ts +5 -0
- package/dist/hass/extensions/index.js +9 -0
- package/dist/hass/extensions/index.js.map +1 -0
- package/dist/hass/extensions/utilities.extension.d.ts +9 -0
- package/dist/hass/extensions/utilities.extension.js +43 -0
- package/dist/hass/extensions/utilities.extension.js.map +1 -0
- package/dist/hass/extensions/websocket-api.extension.d.ts +39 -0
- package/dist/hass/extensions/websocket-api.extension.js +363 -0
- package/dist/hass/extensions/websocket-api.extension.js.map +1 -0
- package/dist/hass/hass.module.d.ts +53 -0
- package/dist/hass/hass.module.js +59 -0
- package/dist/hass/hass.module.js.map +1 -0
- package/dist/hass/helpers/backup.helper.d.ts +11 -0
- package/dist/hass/helpers/backup.helper.js +3 -0
- package/dist/hass/helpers/backup.helper.js.map +1 -0
- package/dist/hass/helpers/constants.helper.d.ts +54 -0
- package/dist/hass/helpers/constants.helper.js +63 -0
- package/dist/hass/helpers/constants.helper.js.map +1 -0
- package/dist/hass/helpers/entity-state.helper.d.ts +45 -0
- package/dist/hass/helpers/entity-state.helper.js +9 -0
- package/dist/hass/helpers/entity-state.helper.js.map +1 -0
- package/dist/hass/helpers/fetch/calendar.d.ts +54 -0
- package/dist/hass/helpers/fetch/calendar.js +3 -0
- package/dist/hass/helpers/fetch/calendar.js.map +1 -0
- package/dist/hass/helpers/fetch/configuration.d.ts +34 -0
- package/dist/hass/helpers/fetch/configuration.js +3 -0
- package/dist/hass/helpers/fetch/configuration.js.map +1 -0
- package/dist/hass/helpers/fetch/index.d.ts +4 -0
- package/dist/hass/helpers/fetch/index.js +8 -0
- package/dist/hass/helpers/fetch/index.js.map +1 -0
- package/dist/hass/helpers/fetch/server-log.d.ts +10 -0
- package/dist/hass/helpers/fetch/server-log.js +20 -0
- package/dist/hass/helpers/fetch/server-log.js.map +1 -0
- package/dist/hass/helpers/fetch/service-list.d.ts +51 -0
- package/dist/hass/helpers/fetch/service-list.js +3 -0
- package/dist/hass/helpers/fetch/service-list.js.map +1 -0
- package/dist/hass/helpers/index.d.ts +7 -0
- package/dist/hass/helpers/index.js +11 -0
- package/dist/hass/helpers/index.js.map +1 -0
- package/dist/hass/helpers/metrics.helper.d.ts +13 -0
- package/dist/hass/helpers/metrics.helper.js +30 -0
- package/dist/hass/helpers/metrics.helper.js.map +1 -0
- package/dist/hass/helpers/utility.helper.d.ts +57 -0
- package/dist/hass/helpers/utility.helper.js +34 -0
- package/dist/hass/helpers/utility.helper.js.map +1 -0
- package/dist/hass/helpers/websocket.helper.d.ts +129 -0
- package/dist/hass/helpers/websocket.helper.js +3 -0
- package/dist/hass/helpers/websocket.helper.js.map +1 -0
- package/dist/hass/index.d.ts +4 -0
- package/dist/hass/index.js +8 -0
- package/dist/hass/index.js.map +1 -0
- package/dist/index.d.ts +2 -0
- package/dist/index.js +8 -0
- package/dist/index.js.map +1 -0
- package/dist/nexus/entities.extension.d.ts +2 -0
- package/dist/nexus/entities.extension.js +51 -0
- package/dist/nexus/entities.extension.js.map +1 -0
- package/dist/nexus/main.d.ts +9 -0
- package/dist/nexus/main.js +28 -0
- package/dist/nexus/main.js.map +1 -0
- package/dist/synapse/extensions/binary-sensor.extension.d.ts +19 -0
- package/dist/synapse/extensions/binary-sensor.extension.js +84 -0
- package/dist/synapse/extensions/binary-sensor.extension.js.map +1 -0
- package/dist/synapse/extensions/button.extension.d.ts +10 -0
- package/dist/synapse/extensions/button.extension.js +46 -0
- package/dist/synapse/extensions/button.extension.js.map +1 -0
- package/dist/synapse/extensions/index.d.ts +6 -0
- package/dist/synapse/extensions/index.js +10 -0
- package/dist/synapse/extensions/index.js.map +1 -0
- package/dist/synapse/extensions/registry.extension.d.ts +21 -0
- package/dist/synapse/extensions/registry.extension.js +207 -0
- package/dist/synapse/extensions/registry.extension.js.map +1 -0
- package/dist/synapse/extensions/scene.extension.d.ts +9 -0
- package/dist/synapse/extensions/scene.extension.js +37 -0
- package/dist/synapse/extensions/scene.extension.js.map +1 -0
- package/dist/synapse/extensions/sensor.extension.d.ts +25 -0
- package/dist/synapse/extensions/sensor.extension.js +154 -0
- package/dist/synapse/extensions/sensor.extension.js.map +1 -0
- package/dist/synapse/extensions/switch.extension.d.ts +19 -0
- package/dist/synapse/extensions/switch.extension.js +95 -0
- package/dist/synapse/extensions/switch.extension.js.map +1 -0
- package/dist/synapse/helpers/device-class.helper.d.ts +323 -0
- package/dist/synapse/helpers/device-class.helper.js +241 -0
- package/dist/synapse/helpers/device-class.helper.js.map +1 -0
- package/dist/synapse/helpers/index.d.ts +3 -0
- package/dist/synapse/helpers/index.js +7 -0
- package/dist/synapse/helpers/index.js.map +1 -0
- package/dist/synapse/helpers/metrics.helper.d.ts +13 -0
- package/dist/synapse/helpers/metrics.helper.js +30 -0
- package/dist/synapse/helpers/metrics.helper.js.map +1 -0
- package/dist/synapse/helpers/utility.helper.d.ts +1 -0
- package/dist/synapse/helpers/utility.helper.js +3 -0
- package/dist/synapse/helpers/utility.helper.js.map +1 -0
- package/dist/synapse/index.d.ts +3 -0
- package/dist/synapse/index.js +7 -0
- package/dist/synapse/index.js.map +1 -0
- package/dist/synapse/synapse.module.d.ts +29 -0
- package/dist/synapse/synapse.module.js +41 -0
- package/dist/synapse/synapse.module.js.map +1 -0
- package/dist/type-writer/build.extension.d.ts +2 -0
- package/dist/type-writer/build.extension.js +53 -0
- package/dist/type-writer/build.extension.js.map +1 -0
- package/dist/type-writer/main.d.ts +17 -0
- package/dist/type-writer/main.js +36 -0
- package/dist/type-writer/main.js.map +1 -0
- package/dist/type-writer/type-writer.extension.d.ts +2 -0
- package/dist/type-writer/type-writer.extension.js +212 -0
- package/dist/type-writer/type-writer.extension.js.map +1 -0
- package/dist/utilities/extensions/index.d.ts +3 -0
- package/dist/utilities/extensions/index.js +7 -0
- package/dist/utilities/extensions/index.js.map +1 -0
- package/dist/utilities/extensions/is.extension.d.ts +38 -0
- package/dist/utilities/extensions/is.extension.js +104 -0
- package/dist/utilities/extensions/is.extension.js.map +1 -0
- package/dist/utilities/extensions/zcc-testing.extension.d.ts +4 -0
- package/dist/utilities/extensions/zcc-testing.extension.js +9 -0
- package/dist/utilities/extensions/zcc-testing.extension.js.map +1 -0
- package/dist/utilities/extensions/zcc.extension.d.ts +20 -0
- package/dist/utilities/extensions/zcc.extension.js +66 -0
- package/dist/utilities/extensions/zcc.extension.js.map +1 -0
- package/dist/utilities/helpers/async.helper.d.ts +2 -0
- package/dist/utilities/helpers/async.helper.js +26 -0
- package/dist/utilities/helpers/async.helper.js.map +1 -0
- package/dist/utilities/helpers/context.helper.d.ts +7 -0
- package/dist/utilities/helpers/context.helper.js +3 -0
- package/dist/utilities/helpers/context.helper.js.map +1 -0
- package/dist/utilities/helpers/cron.helper.d.ts +87 -0
- package/dist/utilities/helpers/cron.helper.js +92 -0
- package/dist/utilities/helpers/cron.helper.js.map +1 -0
- package/dist/utilities/helpers/extend.helper.d.ts +2 -0
- package/dist/utilities/helpers/extend.helper.js +68 -0
- package/dist/utilities/helpers/extend.helper.js.map +1 -0
- package/dist/utilities/helpers/index.d.ts +5 -0
- package/dist/utilities/helpers/index.js +9 -0
- package/dist/utilities/helpers/index.js.map +1 -0
- package/dist/utilities/helpers/utilities.helper.d.ts +63 -0
- package/dist/utilities/helpers/utilities.helper.js +93 -0
- package/dist/utilities/helpers/utilities.helper.js.map +1 -0
- package/dist/utilities/index.d.ts +2 -0
- package/dist/utilities/index.js +6 -0
- package/dist/utilities/index.js.map +1 -0
- 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"}
|