@digital-alchemy/core 24.8.3 → 24.9.3
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/README.md +4 -1
- package/dist/helpers/async.helper.d.ts +1 -1
- package/dist/helpers/async.helper.js +13 -14
- package/dist/helpers/async.helper.js.map +1 -1
- package/dist/helpers/config-environment-loader.helper.js +16 -20
- package/dist/helpers/config-environment-loader.helper.js.map +1 -1
- package/dist/helpers/config-file-loader.helper.js +39 -46
- package/dist/helpers/config-file-loader.helper.js.map +1 -1
- package/dist/helpers/config.helper.d.ts +23 -2
- package/dist/helpers/config.helper.js +28 -38
- package/dist/helpers/config.helper.js.map +1 -1
- package/dist/helpers/context.helper.js +1 -2
- package/dist/helpers/cron.helper.d.ts +27 -0
- package/dist/helpers/cron.helper.js +4 -7
- package/dist/helpers/cron.helper.js.map +1 -1
- package/dist/helpers/errors.helper.d.ts +0 -12
- package/dist/helpers/errors.helper.js +2 -23
- package/dist/helpers/errors.helper.js.map +1 -1
- package/dist/helpers/events.helper.js +4 -10
- package/dist/helpers/events.helper.js.map +1 -1
- package/dist/helpers/extend.helper.js +12 -17
- package/dist/helpers/extend.helper.js.map +1 -1
- package/dist/helpers/index.d.ts +2 -4
- package/dist/helpers/index.js +14 -19
- package/dist/helpers/index.js.map +1 -1
- package/dist/helpers/lifecycle.helper.d.ts +1 -5
- package/dist/helpers/lifecycle.helper.js +1 -4
- package/dist/helpers/lifecycle.helper.js.map +1 -1
- package/dist/{extensions/logger.extension.d.ts → helpers/logger.helper.d.ts} +33 -40
- package/dist/helpers/logger.helper.js +10 -0
- package/dist/helpers/logger.helper.js.map +1 -0
- package/dist/helpers/module.helper.d.ts +74 -0
- package/dist/helpers/module.helper.js +131 -0
- package/dist/helpers/module.helper.js.map +1 -0
- package/dist/helpers/utilities.helper.d.ts +1 -0
- package/dist/helpers/utilities.helper.js +57 -58
- package/dist/helpers/utilities.helper.js.map +1 -1
- package/dist/helpers/wiring.helper.d.ts +77 -23
- package/dist/helpers/wiring.helper.js +45 -47
- package/dist/helpers/wiring.helper.js.map +1 -1
- package/dist/index.d.ts +2 -1
- package/dist/index.js +3 -5
- package/dist/index.js.map +1 -1
- package/dist/services/als.extension.d.ts +2 -0
- package/dist/services/als.extension.js +17 -0
- package/dist/services/als.extension.js.map +1 -0
- package/dist/services/configuration.extension.d.ts +7 -0
- package/dist/services/configuration.extension.js +117 -0
- package/dist/services/configuration.extension.js.map +1 -0
- package/dist/{extensions → services}/index.d.ts +1 -3
- package/dist/services/index.js +8 -0
- package/dist/services/index.js.map +1 -0
- package/dist/{extensions → services}/internal.extension.d.ts +7 -23
- package/dist/{extensions → services}/internal.extension.js +43 -55
- package/dist/services/internal.extension.js.map +1 -0
- package/dist/{extensions → services}/is.extension.d.ts +5 -0
- package/dist/{extensions → services}/is.extension.js +20 -15
- package/dist/services/is.extension.js.map +1 -0
- package/dist/{extensions → services}/lifecycle.extension.js +17 -19
- package/dist/services/lifecycle.extension.js.map +1 -0
- package/dist/services/logger.extension.d.ts +2 -0
- package/dist/services/logger.extension.js +200 -0
- package/dist/services/logger.extension.js.map +1 -0
- package/dist/services/scheduler.extension.d.ts +2 -0
- package/dist/services/scheduler.extension.js +108 -0
- package/dist/services/scheduler.extension.js.map +1 -0
- package/dist/services/wiring.extension.d.ts +111 -0
- package/dist/services/wiring.extension.js +437 -0
- package/dist/services/wiring.extension.js.map +1 -0
- package/dist/testing/index.d.ts +2 -0
- package/dist/testing/index.js +3 -0
- package/dist/testing/index.js.map +1 -0
- package/dist/testing/mock-logger.d.ts +2 -0
- package/dist/testing/mock-logger.js +11 -0
- package/dist/testing/mock-logger.js.map +1 -0
- package/dist/testing/test-module.d.ts +112 -0
- package/dist/testing/test-module.js +138 -0
- package/dist/testing/test-module.js.map +1 -0
- package/package.json +57 -43
- package/dist/extensions/cache.extension.d.ts +0 -2
- package/dist/extensions/cache.extension.js +0 -90
- package/dist/extensions/cache.extension.js.map +0 -1
- package/dist/extensions/configuration.extension.d.ts +0 -52
- package/dist/extensions/configuration.extension.js +0 -131
- package/dist/extensions/configuration.extension.js.map +0 -1
- package/dist/extensions/fetch.extension.d.ts +0 -17
- package/dist/extensions/fetch.extension.js +0 -133
- package/dist/extensions/fetch.extension.js.map +0 -1
- package/dist/extensions/index.js +0 -13
- package/dist/extensions/index.js.map +0 -1
- package/dist/extensions/internal.extension.js.map +0 -1
- package/dist/extensions/is.extension.js.map +0 -1
- package/dist/extensions/lifecycle.extension.js.map +0 -1
- package/dist/extensions/logger.extension.js +0 -186
- package/dist/extensions/logger.extension.js.map +0 -1
- package/dist/extensions/metrics.extension.d.ts +0 -18
- package/dist/extensions/metrics.extension.js +0 -156
- package/dist/extensions/metrics.extension.js.map +0 -1
- package/dist/extensions/scheduler.extension.d.ts +0 -21
- package/dist/extensions/scheduler.extension.js +0 -133
- package/dist/extensions/scheduler.extension.js.map +0 -1
- package/dist/extensions/wiring.extension.d.ts +0 -50
- package/dist/extensions/wiring.extension.js +0 -374
- package/dist/extensions/wiring.extension.js.map +0 -1
- package/dist/helpers/cache-memory.helper.d.ts +0 -6
- package/dist/helpers/cache-memory.helper.js +0 -68
- package/dist/helpers/cache-memory.helper.js.map +0 -1
- package/dist/helpers/cache-redis.helper.d.ts +0 -6
- package/dist/helpers/cache-redis.helper.js +0 -73
- package/dist/helpers/cache-redis.helper.js.map +0 -1
- package/dist/helpers/cache.helper.d.ts +0 -19
- package/dist/helpers/cache.helper.js +0 -9
- package/dist/helpers/cache.helper.js.map +0 -1
- package/dist/helpers/fetch.helper.d.ts +0 -165
- package/dist/helpers/fetch.helper.js +0 -173
- package/dist/helpers/fetch.helper.js.map +0 -1
- /package/dist/{extensions → services}/lifecycle.extension.d.ts +0 -0
|
@@ -0,0 +1,200 @@
|
|
|
1
|
+
/* eslint-disable sonarjs/slow-regex */
|
|
2
|
+
import chalk from "chalk";
|
|
3
|
+
import dayjs from "dayjs";
|
|
4
|
+
import { format, inspect } from "util";
|
|
5
|
+
import { EVENT_UPDATE_LOG_LEVELS, FIRST, is, METHOD_COLORS, START, } from "..";
|
|
6
|
+
const LOG_LEVEL_PRIORITY = {
|
|
7
|
+
debug: 20,
|
|
8
|
+
error: 50,
|
|
9
|
+
fatal: 60,
|
|
10
|
+
info: 30,
|
|
11
|
+
silent: 100,
|
|
12
|
+
trace: 10,
|
|
13
|
+
warn: 40,
|
|
14
|
+
};
|
|
15
|
+
const DECIMALS = 2;
|
|
16
|
+
const LOG_LEVELS = Object.keys(LOG_LEVEL_PRIORITY);
|
|
17
|
+
let logger = {};
|
|
18
|
+
const MAX_CUTOFF = 2000;
|
|
19
|
+
const frontDash = " - ";
|
|
20
|
+
const SYMBOL_START = 1;
|
|
21
|
+
const SYMBOL_END = -1;
|
|
22
|
+
const LEVEL_MAX = 7;
|
|
23
|
+
export async function Logger({ lifecycle, config, event, internal, als, }) {
|
|
24
|
+
let lastMessage = performance.now();
|
|
25
|
+
let logCounter = START;
|
|
26
|
+
let httpLogTarget;
|
|
27
|
+
const { loggerOptions = {} } = internal.boot?.options ?? {};
|
|
28
|
+
const timestampFormat = loggerOptions.timestampFormat ?? "ddd HH:mm:ss.SSS";
|
|
29
|
+
loggerOptions.mergeData ??= {};
|
|
30
|
+
const YELLOW_DASH = chalk.yellowBright(frontDash);
|
|
31
|
+
const BLUE_TICK = chalk.blue(`>`);
|
|
32
|
+
let prettyFormat = is.boolean(loggerOptions.pretty) ? loggerOptions.pretty : true;
|
|
33
|
+
function emitHttpLogs(data) {
|
|
34
|
+
if (is.empty(httpLogTarget)) {
|
|
35
|
+
return;
|
|
36
|
+
}
|
|
37
|
+
// validated with datadog, probably is fine elsewhere too
|
|
38
|
+
// https://http-intake.logs.datadoghq.com/v1/input/{API_KEY}
|
|
39
|
+
fetch(httpLogTarget, {
|
|
40
|
+
body: JSON.stringify(data),
|
|
41
|
+
headers: { "Content-Type": "application/json" },
|
|
42
|
+
method: "POST",
|
|
43
|
+
});
|
|
44
|
+
}
|
|
45
|
+
function mergeData(data) {
|
|
46
|
+
let out = { ...data, ...loggerOptions.mergeData };
|
|
47
|
+
if (loggerOptions.counter) {
|
|
48
|
+
const counter = data;
|
|
49
|
+
counter.logIdx = logCounter++;
|
|
50
|
+
}
|
|
51
|
+
if (loggerOptions.als) {
|
|
52
|
+
out = { ...out, ...als.getLogData() };
|
|
53
|
+
}
|
|
54
|
+
return out;
|
|
55
|
+
}
|
|
56
|
+
const prettyFormatMessage = (message) => {
|
|
57
|
+
if (!message) {
|
|
58
|
+
return ``;
|
|
59
|
+
}
|
|
60
|
+
if (!prettyFormat || message.length > MAX_CUTOFF) {
|
|
61
|
+
return message;
|
|
62
|
+
}
|
|
63
|
+
message = message
|
|
64
|
+
// ? partA#partB - highlight it all in yellow
|
|
65
|
+
.replaceAll(new RegExp("([^ ]+#[^ ]+)", "g"), i => chalk.yellow(i))
|
|
66
|
+
// ? [A] > [B] > [C] - highlight the >'s in blue
|
|
67
|
+
.replaceAll("] > [", `] ${BLUE_TICK} [`)
|
|
68
|
+
// ? [Text] - strip brackets, highlight magenta
|
|
69
|
+
.replaceAll(new RegExp(String.raw `(\[[^\]\[]+\])`, "g"), i => chalk.bold.magenta(i.slice(SYMBOL_START, SYMBOL_END)))
|
|
70
|
+
// ? {Text} - strip braces, highlight gray
|
|
71
|
+
.replaceAll(new RegExp(String.raw `(\{[^\]}]+\})`, "g"), i => chalk.bold.gray(i.slice(SYMBOL_START, SYMBOL_END)));
|
|
72
|
+
// ? " - Text" (line prefix with dash) - highlight dash
|
|
73
|
+
if (message.slice(START, frontDash.length) === frontDash) {
|
|
74
|
+
message = `${YELLOW_DASH}${message.slice(frontDash.length)}`;
|
|
75
|
+
}
|
|
76
|
+
return message;
|
|
77
|
+
};
|
|
78
|
+
if (is.empty(internal.boot.options?.customLogger)) {
|
|
79
|
+
// #region formatter
|
|
80
|
+
[...METHOD_COLORS.keys()].forEach(key => {
|
|
81
|
+
const level = `[${key.toUpperCase()}]`.padStart(LEVEL_MAX, " ");
|
|
82
|
+
logger[key] = (context, ...parameters) => {
|
|
83
|
+
const data = mergeData(is.object(parameters[FIRST])
|
|
84
|
+
? parameters.shift()
|
|
85
|
+
: {});
|
|
86
|
+
const rawData = {
|
|
87
|
+
...data,
|
|
88
|
+
level: key,
|
|
89
|
+
timestamp: Date.now(),
|
|
90
|
+
};
|
|
91
|
+
const highlighted = chalk.bold[METHOD_COLORS.get(key)](`[${data.context || context}]`);
|
|
92
|
+
const name = is.object(data.name) || is.function(data.name) ? data.name.name : data.name;
|
|
93
|
+
delete data.context;
|
|
94
|
+
delete data.name;
|
|
95
|
+
const timestamp = chalk.white(`[${dayjs().format(timestampFormat)}]`);
|
|
96
|
+
let prettyMessage;
|
|
97
|
+
if (!is.empty(parameters)) {
|
|
98
|
+
const text = parameters.shift();
|
|
99
|
+
rawData.msg = format(text, ...parameters);
|
|
100
|
+
prettyMessage = format(prettyFormatMessage(text), ...parameters);
|
|
101
|
+
}
|
|
102
|
+
let message = `${timestamp} ${level}${highlighted}`;
|
|
103
|
+
if (!is.empty(name)) {
|
|
104
|
+
message += chalk.blue(` (${name})`);
|
|
105
|
+
}
|
|
106
|
+
if (loggerOptions.ms) {
|
|
107
|
+
const now = performance.now();
|
|
108
|
+
const diff = (now - lastMessage).toFixed(DECIMALS) + `ms`;
|
|
109
|
+
lastMessage = now;
|
|
110
|
+
rawData.ms = diff;
|
|
111
|
+
message += prettyFormat ? chalk.green(diff) : diff;
|
|
112
|
+
}
|
|
113
|
+
emitHttpLogs(rawData);
|
|
114
|
+
if (!is.empty(prettyMessage)) {
|
|
115
|
+
message += `: ${chalk.cyan(prettyMessage)}`;
|
|
116
|
+
}
|
|
117
|
+
if (!is.empty(data)) {
|
|
118
|
+
message +=
|
|
119
|
+
"\n" +
|
|
120
|
+
inspect(data, {
|
|
121
|
+
colors: true,
|
|
122
|
+
compact: false,
|
|
123
|
+
depth: 10,
|
|
124
|
+
numericSeparator: true,
|
|
125
|
+
sorted: true,
|
|
126
|
+
})
|
|
127
|
+
.split("\n")
|
|
128
|
+
.slice(SYMBOL_START, SYMBOL_END)
|
|
129
|
+
.join("\n");
|
|
130
|
+
}
|
|
131
|
+
if (["warn", "error", "fatal"].includes(key)) {
|
|
132
|
+
global.console.error(message);
|
|
133
|
+
return;
|
|
134
|
+
}
|
|
135
|
+
global.console.log(message);
|
|
136
|
+
};
|
|
137
|
+
});
|
|
138
|
+
// #endregion
|
|
139
|
+
}
|
|
140
|
+
else {
|
|
141
|
+
logger = internal.boot.options.customLogger;
|
|
142
|
+
}
|
|
143
|
+
// #region instance creation
|
|
144
|
+
// if bootstrap hard coded something specific, then start there
|
|
145
|
+
// otherwise, be noisy until config loads a user preference
|
|
146
|
+
//
|
|
147
|
+
// stored as separate variable to cut down on internal config lookups
|
|
148
|
+
let CURRENT_LOG_LEVEL = internal.utils.object.get(internal, "boot.options.configuration.boilerplate.LOG_LEVEL") ||
|
|
149
|
+
"trace";
|
|
150
|
+
function context(context) {
|
|
151
|
+
const name = context;
|
|
152
|
+
const shouldILog = {};
|
|
153
|
+
const [prefix] = context.split(".");
|
|
154
|
+
const update = () => LOG_LEVELS.forEach((key) => {
|
|
155
|
+
// global level
|
|
156
|
+
let target = LOG_LEVEL_PRIORITY[key];
|
|
157
|
+
// override directly
|
|
158
|
+
if (loggerOptions?.levelOverrides?.[name]) {
|
|
159
|
+
target = LOG_LEVEL_PRIORITY[loggerOptions?.levelOverrides?.[name]];
|
|
160
|
+
// module level override
|
|
161
|
+
}
|
|
162
|
+
else if (loggerOptions?.levelOverrides?.[prefix]) {
|
|
163
|
+
target = LOG_LEVEL_PRIORITY[loggerOptions?.levelOverrides?.[prefix]];
|
|
164
|
+
}
|
|
165
|
+
shouldILog[key] = target >= LOG_LEVEL_PRIORITY[CURRENT_LOG_LEVEL];
|
|
166
|
+
});
|
|
167
|
+
event.on(EVENT_UPDATE_LOG_LEVELS, update);
|
|
168
|
+
update();
|
|
169
|
+
return {
|
|
170
|
+
debug: (...params) => shouldILog.debug && logger.debug(context, ...params),
|
|
171
|
+
error: (...params) => shouldILog.error && logger.error(context, ...params),
|
|
172
|
+
fatal: (...params) => shouldILog.fatal && logger.fatal(context, ...params),
|
|
173
|
+
info: (...params) => shouldILog.info && logger.info(context, ...params),
|
|
174
|
+
trace: (...params) => shouldILog.trace && logger.trace(context, ...params),
|
|
175
|
+
warn: (...params) => shouldILog.warn && logger.warn(context, ...params),
|
|
176
|
+
};
|
|
177
|
+
}
|
|
178
|
+
const updateShouldLog = () => {
|
|
179
|
+
if (!is.empty(config.boilerplate.LOG_LEVEL)) {
|
|
180
|
+
CURRENT_LOG_LEVEL = config.boilerplate.LOG_LEVEL;
|
|
181
|
+
}
|
|
182
|
+
event.emit(EVENT_UPDATE_LOG_LEVELS);
|
|
183
|
+
};
|
|
184
|
+
// #MARK: lifecycle
|
|
185
|
+
lifecycle.onPostConfig(() => internal.boilerplate.logger.updateShouldLog());
|
|
186
|
+
internal.boilerplate.configuration.onUpdate(() => internal.boilerplate.logger.updateShouldLog(), "boilerplate", "LOG_LEVEL");
|
|
187
|
+
// #MARK: return object
|
|
188
|
+
return {
|
|
189
|
+
context,
|
|
190
|
+
getBaseLogger: () => logger,
|
|
191
|
+
getPrettyFormat: () => prettyFormat,
|
|
192
|
+
prettyFormatMessage,
|
|
193
|
+
setBaseLogger: base => (logger = base),
|
|
194
|
+
setHttpLogs: url => (httpLogTarget = url),
|
|
195
|
+
setPrettyFormat: state => (prettyFormat = state),
|
|
196
|
+
systemLogger: context("digital-alchemy:system-logger"),
|
|
197
|
+
updateShouldLog,
|
|
198
|
+
};
|
|
199
|
+
}
|
|
200
|
+
//# sourceMappingURL=logger.extension.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"logger.extension.js","sourceRoot":"","sources":["../../src/services/logger.extension.ts"],"names":[],"mappings":"AAAA,uCAAuC;AACvC,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,MAAM,CAAC;AAEvC,OAAO,EAEL,uBAAuB,EACvB,KAAK,EAEL,EAAE,EAEF,aAAa,EAEb,KAAK,GAKN,MAAM,IAAI,CAAC;AAEZ,MAAM,kBAAkB,GAAG;IACzB,KAAK,EAAE,EAAE;IACT,KAAK,EAAE,EAAE;IACT,KAAK,EAAE,EAAE;IACT,IAAI,EAAE,EAAE;IACR,MAAM,EAAE,GAAG;IACX,KAAK,EAAE,EAAE;IACT,IAAI,EAAE,EAAE;CACT,CAAC;AACF,MAAM,QAAQ,GAAG,CAAC,CAAC;AACnB,MAAM,UAAU,GAAG,MAAM,CAAC,IAAI,CAAC,kBAAkB,CAAsB,CAAC;AAExE,IAAI,MAAM,GAAG,EAGZ,CAAC;AAEF,MAAM,UAAU,GAAG,IAAI,CAAC;AACxB,MAAM,SAAS,GAAG,KAAK,CAAC;AACxB,MAAM,YAAY,GAAG,CAAC,CAAC;AACvB,MAAM,UAAU,GAAG,CAAC,CAAC,CAAC;AACtB,MAAM,SAAS,GAAG,CAAC,CAAC;AAEpB,MAAM,CAAC,KAAK,UAAU,MAAM,CAAC,EAC3B,SAAS,EACT,MAAM,EACN,KAAK,EACL,QAAQ,EACR,GAAG,GACY;IACf,IAAI,WAAW,GAAG,WAAW,CAAC,GAAG,EAAE,CAAC;IACpC,IAAI,UAAU,GAAG,KAAK,CAAC;IACvB,IAAI,aAAqB,CAAC;IAE1B,MAAM,EAAE,aAAa,GAAG,EAAE,EAAE,GAAG,QAAQ,CAAC,IAAI,EAAE,OAAO,IAAI,EAAE,CAAC;IAE5D,MAAM,eAAe,GAAG,aAAa,CAAC,eAAe,IAAI,kBAAkB,CAAC;IAC5E,aAAa,CAAC,SAAS,KAAK,EAAE,CAAC;IAE/B,MAAM,WAAW,GAAG,KAAK,CAAC,YAAY,CAAC,SAAS,CAAC,CAAC;IAClD,MAAM,SAAS,GAAG,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IAClC,IAAI,YAAY,GAAG,EAAE,CAAC,OAAO,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC;IAElF,SAAS,YAAY,CAAC,IAAY;QAChC,IAAI,EAAE,CAAC,KAAK,CAAC,aAAa,CAAC,EAAE,CAAC;YAC5B,OAAO;QACT,CAAC;QACD,yDAAyD;QACzD,4DAA4D;QAC5D,KAAK,CAAC,aAAa,EAAE;YACnB,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC;YAC1B,OAAO,EAAE,EAAE,cAAc,EAAE,kBAAkB,EAAE;YAC/C,MAAM,EAAE,MAAM;SACf,CAAC,CAAC;IACL,CAAC;IAED,SAAS,SAAS,CAAmB,IAAO;QAC1C,IAAI,GAAG,GAAG,EAAE,GAAG,IAAI,EAAE,GAAG,aAAa,CAAC,SAAS,EAAE,CAAC;QAElD,IAAI,aAAa,CAAC,OAAO,EAAE,CAAC;YAC1B,MAAM,OAAO,GAAG,IAA0B,CAAC;YAC3C,OAAO,CAAC,MAAM,GAAG,UAAU,EAAE,CAAC;QAChC,CAAC;QAED,IAAI,aAAa,CAAC,GAAG,EAAE,CAAC;YACtB,GAAG,GAAG,EAAE,GAAG,GAAG,EAAE,GAAG,GAAG,CAAC,UAAU,EAAE,EAAE,CAAC;QACxC,CAAC;QAED,OAAO,GAAG,CAAC;IACb,CAAC;IAED,MAAM,mBAAmB,GAAG,CAAC,OAAe,EAAU,EAAE;QACtD,IAAI,CAAC,OAAO,EAAE,CAAC;YACb,OAAO,EAAE,CAAC;QACZ,CAAC;QACD,IAAI,CAAC,YAAY,IAAI,OAAO,CAAC,MAAM,GAAG,UAAU,EAAE,CAAC;YACjD,OAAO,OAAO,CAAC;QACjB,CAAC;QACD,OAAO,GAAG,OAAO;YACf,6CAA6C;aAC5C,UAAU,CAAC,IAAI,MAAM,CAAC,eAAe,EAAE,GAAG,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;YACnE,gDAAgD;aAC/C,UAAU,CAAC,OAAO,EAAE,KAAK,SAAS,IAAI,CAAC;YACxC,+CAA+C;aAC9C,UAAU,CAAC,IAAI,MAAM,CAAC,MAAM,CAAC,GAAG,CAAA,gBAAgB,EAAE,GAAG,CAAC,EAAE,CAAC,CAAC,EAAE,CAC3D,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK,CAAC,YAAY,EAAE,UAAU,CAAC,CAAC,CACtD;YACD,0CAA0C;aACzC,UAAU,CAAC,IAAI,MAAM,CAAC,MAAM,CAAC,GAAG,CAAA,eAAe,EAAE,GAAG,CAAC,EAAE,CAAC,CAAC,EAAE,CAC1D,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,YAAY,EAAE,UAAU,CAAC,CAAC,CACnD,CAAC;QACJ,uDAAuD;QACvD,IAAI,OAAO,CAAC,KAAK,CAAC,KAAK,EAAE,SAAS,CAAC,MAAM,CAAC,KAAK,SAAS,EAAE,CAAC;YACzD,OAAO,GAAG,GAAG,WAAW,GAAG,OAAO,CAAC,KAAK,CAAC,SAAS,CAAC,MAAM,CAAC,EAAE,CAAC;QAC/D,CAAC;QACD,OAAO,OAAO,CAAC;IACjB,CAAC,CAAC;IAEF,IAAI,EAAE,CAAC,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC,OAAO,EAAE,YAAY,CAAC,EAAE,CAAC;QAClD,oBAAoB;QACpB,CAAC,GAAG,aAAa,CAAC,IAAI,EAAE,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE;YACtC,MAAM,KAAK,GAAG,IAAI,GAAG,CAAC,WAAW,EAAE,GAAG,CAAC,QAAQ,CAAC,SAAS,EAAE,GAAG,CAAC,CAAC;YAChE,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,OAAiB,EAAE,GAAG,UAAuC,EAAE,EAAE;gBAC9E,MAAM,IAAI,GAAG,SAAS,CACpB,EAAE,CAAC,MAAM,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC;oBAC1B,CAAC,CAAE,UAAU,CAAC,KAAK,EAKf;oBACJ,CAAC,CAAC,EAAE,CACP,CAAC;gBAEF,MAAM,OAAO,GAAG;oBACd,GAAG,IAAI;oBACP,KAAK,EAAE,GAAG;oBACV,SAAS,EAAE,IAAI,CAAC,GAAG,EAAE;iBACK,CAAC;gBAE7B,MAAM,WAAW,GAAG,KAAK,CAAC,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC,OAAO,IAAI,OAAO,GAAG,CAAC,CAAC;gBACvF,MAAM,IAAI,GAAG,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC;gBACzF,OAAO,IAAI,CAAC,OAAO,CAAC;gBACpB,OAAO,IAAI,CAAC,IAAI,CAAC;gBAEjB,MAAM,SAAS,GAAG,KAAK,CAAC,KAAK,CAAC,IAAI,KAAK,EAAE,CAAC,MAAM,CAAC,eAAe,CAAC,GAAG,CAAC,CAAC;gBACtE,IAAI,aAAqB,CAAC;gBAC1B,IAAI,CAAC,EAAE,CAAC,KAAK,CAAC,UAAU,CAAC,EAAE,CAAC;oBAC1B,MAAM,IAAI,GAAG,UAAU,CAAC,KAAK,EAAY,CAAC;oBAC1C,OAAO,CAAC,GAAG,GAAG,MAAM,CAAC,IAAI,EAAE,GAAG,UAAU,CAAC,CAAC;oBAC1C,aAAa,GAAG,MAAM,CAAC,mBAAmB,CAAC,IAAI,CAAC,EAAE,GAAG,UAAU,CAAC,CAAC;gBACnE,CAAC;gBAED,IAAI,OAAO,GAAG,GAAG,SAAS,IAAI,KAAK,GAAG,WAAW,EAAE,CAAC;gBAEpD,IAAI,CAAC,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC;oBACpB,OAAO,IAAI,KAAK,CAAC,IAAI,CAAC,KAAK,IAAI,GAAG,CAAC,CAAC;gBACtC,CAAC;gBAED,IAAI,aAAa,CAAC,EAAE,EAAE,CAAC;oBACrB,MAAM,GAAG,GAAG,WAAW,CAAC,GAAG,EAAE,CAAC;oBAC9B,MAAM,IAAI,GAAG,CAAC,GAAG,GAAG,WAAW,CAAC,CAAC,OAAO,CAAC,QAAQ,CAAC,GAAG,IAAI,CAAC;oBAC1D,WAAW,GAAG,GAAG,CAAC;oBAClB,OAAO,CAAC,EAAE,GAAG,IAAI,CAAC;oBAElB,OAAO,IAAI,YAAY,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;gBACrD,CAAC;gBACD,YAAY,CAAC,OAAO,CAAC,CAAC;gBAEtB,IAAI,CAAC,EAAE,CAAC,KAAK,CAAC,aAAa,CAAC,EAAE,CAAC;oBAC7B,OAAO,IAAI,KAAK,KAAK,CAAC,IAAI,CAAC,aAAa,CAAC,EAAE,CAAC;gBAC9C,CAAC;gBAED,IAAI,CAAC,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC;oBACpB,OAAO;wBACL,IAAI;4BACJ,OAAO,CAAC,IAAI,EAAE;gCACZ,MAAM,EAAE,IAAI;gCACZ,OAAO,EAAE,KAAK;gCACd,KAAK,EAAE,EAAE;gCACT,gBAAgB,EAAE,IAAI;gCACtB,MAAM,EAAE,IAAI;6BACb,CAAC;iCACC,KAAK,CAAC,IAAI,CAAC;iCACX,KAAK,CAAC,YAAY,EAAE,UAAU,CAAC;iCAC/B,IAAI,CAAC,IAAI,CAAC,CAAC;gBAClB,CAAC;gBACD,IAAI,CAAC,MAAM,EAAE,OAAO,EAAE,OAAO,CAAC,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC;oBAC7C,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;oBAC9B,OAAO;gBACT,CAAC;gBAED,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;YAC9B,CAAC,CAAC;QACJ,CAAC,CAAC,CAAC;QACH,aAAa;IACf,CAAC;SAAM,CAAC;QACN,MAAM,GAAG,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,YAAY,CAAC;IAC9C,CAAC;IAED,4BAA4B;IAC5B,+DAA+D;IAC/D,2DAA2D;IAC3D,EAAE;IACF,qEAAqE;IACrE,IAAI,iBAAiB,GACnB,QAAQ,CAAC,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,QAAQ,EAAE,kDAAkD,CAAC;QACvF,OAAO,CAAC;IAEV,SAAS,OAAO,CAAC,OAA0B;QACzC,MAAM,IAAI,GAAG,OAAuB,CAAC;QACrC,MAAM,UAAU,GAAG,EAAsC,CAAC;QAC1D,MAAM,CAAC,MAAM,CAAC,GAAG,OAAO,CAAC,KAAK,CAAC,GAAG,CAAwB,CAAC;QAC3D,MAAM,MAAM,GAAG,GAAG,EAAE,CAClB,UAAU,CAAC,OAAO,CAAC,CAAC,GAAoB,EAAE,EAAE;YAC1C,eAAe;YACf,IAAI,MAAM,GAAG,kBAAkB,CAAC,GAAG,CAAC,CAAC;YAErC,oBAAoB;YACpB,IAAI,aAAa,EAAE,cAAc,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC;gBAC1C,MAAM,GAAG,kBAAkB,CAAC,aAAa,EAAE,cAAc,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC;gBACnE,wBAAwB;YAC1B,CAAC;iBAAM,IAAI,aAAa,EAAE,cAAc,EAAE,CAAC,MAAM,CAAC,EAAE,CAAC;gBACnD,MAAM,GAAG,kBAAkB,CAAC,aAAa,EAAE,cAAc,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC;YACvE,CAAC;YACD,UAAU,CAAC,GAAG,CAAC,GAAG,MAAM,IAAI,kBAAkB,CAAC,iBAAiB,CAAC,CAAC;QACpE,CAAC,CAAC,CAAC;QAEL,KAAK,CAAC,EAAE,CAAC,uBAAuB,EAAE,MAAM,CAAC,CAAC;QAC1C,MAAM,EAAE,CAAC;QAET,OAAO;YACL,KAAK,EAAE,CAAC,GAAG,MAAmC,EAAE,EAAE,CAChD,UAAU,CAAC,KAAK,IAAI,MAAM,CAAC,KAAK,CAAC,OAAmB,EAAE,GAAG,MAAM,CAAC;YAClE,KAAK,EAAE,CAAC,GAAG,MAAmC,EAAE,EAAE,CAChD,UAAU,CAAC,KAAK,IAAI,MAAM,CAAC,KAAK,CAAC,OAAmB,EAAE,GAAG,MAAM,CAAC;YAClE,KAAK,EAAE,CAAC,GAAG,MAAmC,EAAE,EAAE,CAChD,UAAU,CAAC,KAAK,IAAI,MAAM,CAAC,KAAK,CAAC,OAAmB,EAAE,GAAG,MAAM,CAAC;YAClE,IAAI,EAAE,CAAC,GAAG,MAAmC,EAAE,EAAE,CAC/C,UAAU,CAAC,IAAI,IAAI,MAAM,CAAC,IAAI,CAAC,OAAmB,EAAE,GAAG,MAAM,CAAC;YAChE,KAAK,EAAE,CAAC,GAAG,MAAmC,EAAE,EAAE,CAChD,UAAU,CAAC,KAAK,IAAI,MAAM,CAAC,KAAK,CAAC,OAAmB,EAAE,GAAG,MAAM,CAAC;YAClE,IAAI,EAAE,CAAC,GAAG,MAAmC,EAAE,EAAE,CAC/C,UAAU,CAAC,IAAI,IAAI,MAAM,CAAC,IAAI,CAAC,OAAmB,EAAE,GAAG,MAAM,CAAC;SACtD,CAAC;IACf,CAAC;IAED,MAAM,eAAe,GAAG,GAAG,EAAE;QAC3B,IAAI,CAAC,EAAE,CAAC,KAAK,CAAC,MAAM,CAAC,WAAW,CAAC,SAAS,CAAC,EAAE,CAAC;YAC5C,iBAAiB,GAAG,MAAM,CAAC,WAAW,CAAC,SAAS,CAAC;QACnD,CAAC;QACD,KAAK,CAAC,IAAI,CAAC,uBAAuB,CAAC,CAAC;IACtC,CAAC,CAAC;IAEF,mBAAmB;IACnB,SAAS,CAAC,YAAY,CAAC,GAAG,EAAE,CAAC,QAAQ,CAAC,WAAW,CAAC,MAAM,CAAC,eAAe,EAAE,CAAC,CAAC;IAC5E,QAAQ,CAAC,WAAW,CAAC,aAAa,CAAC,QAAQ,CACzC,GAAG,EAAE,CAAC,QAAQ,CAAC,WAAW,CAAC,MAAM,CAAC,eAAe,EAAE,EACnD,aAAa,EACb,WAAW,CACZ,CAAC;IAEF,uBAAuB;IACvB,OAAO;QACL,OAAO;QACP,aAAa,EAAE,GAAG,EAAE,CAAC,MAAM;QAC3B,eAAe,EAAE,GAAG,EAAE,CAAC,YAAY;QACnC,mBAAmB;QACnB,aAAa,EAAE,IAAI,CAAC,EAAE,CAAC,CAAC,MAAM,GAAG,IAAI,CAAC;QACtC,WAAW,EAAE,GAAG,CAAC,EAAE,CAAC,CAAC,aAAa,GAAG,GAAG,CAAC;QACzC,eAAe,EAAE,KAAK,CAAC,EAAE,CAAC,CAAC,YAAY,GAAG,KAAK,CAAC;QAChD,YAAY,EAAE,OAAO,CAAC,+BAA+B,CAAC;QACtD,eAAe;KAChB,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,108 @@
|
|
|
1
|
+
import dayjs from "dayjs";
|
|
2
|
+
import { schedule } from "node-cron";
|
|
3
|
+
import { is } from "..";
|
|
4
|
+
import { BootstrapException, } from "../helpers";
|
|
5
|
+
export function Scheduler({ logger, lifecycle, internal }) {
|
|
6
|
+
const stop = new Set();
|
|
7
|
+
// #MARK: lifecycle events
|
|
8
|
+
lifecycle.onPreShutdown(function onPreShutdown() {
|
|
9
|
+
if (is.empty(stop)) {
|
|
10
|
+
return;
|
|
11
|
+
}
|
|
12
|
+
logger.info({ name: onPreShutdown }, `removing [%s] schedules`, stop.size);
|
|
13
|
+
stop.forEach(stopFunctions => {
|
|
14
|
+
stopFunctions();
|
|
15
|
+
stop.delete(stopFunctions);
|
|
16
|
+
});
|
|
17
|
+
});
|
|
18
|
+
return (context) => {
|
|
19
|
+
// #MARK: cron
|
|
20
|
+
function cron({ exec, schedule: scheduleList }) {
|
|
21
|
+
const stopFunctions = [];
|
|
22
|
+
[scheduleList].flat().forEach(cronSchedule => {
|
|
23
|
+
logger.trace({ context, name: cron, schedule: cronSchedule }, `init`);
|
|
24
|
+
const cronJob = schedule(cronSchedule, async () => await internal.safeExec(exec));
|
|
25
|
+
lifecycle.onReady(() => {
|
|
26
|
+
logger.trace({ context, name: cron, schedule: cronSchedule }, "starting");
|
|
27
|
+
cronJob.start();
|
|
28
|
+
});
|
|
29
|
+
const stopFunction = () => {
|
|
30
|
+
logger.trace({ context, name: cron, schedule: cronSchedule }, `stopping`);
|
|
31
|
+
cronJob.stop();
|
|
32
|
+
};
|
|
33
|
+
stop.add(stopFunction);
|
|
34
|
+
stopFunctions.push(stopFunction);
|
|
35
|
+
return stopFunction;
|
|
36
|
+
});
|
|
37
|
+
return () => stopFunctions.forEach(stop => stop());
|
|
38
|
+
}
|
|
39
|
+
// #MARK: interval
|
|
40
|
+
function interval({ exec, interval }) {
|
|
41
|
+
let runningInterval;
|
|
42
|
+
lifecycle.onReady(() => {
|
|
43
|
+
logger.trace({ context, name: interval }, "starting");
|
|
44
|
+
runningInterval = setInterval(async () => await internal.safeExec(exec), interval);
|
|
45
|
+
});
|
|
46
|
+
const stopFunction = () => {
|
|
47
|
+
if (runningInterval) {
|
|
48
|
+
clearInterval(runningInterval);
|
|
49
|
+
}
|
|
50
|
+
};
|
|
51
|
+
stop.add(stopFunction);
|
|
52
|
+
return stopFunction;
|
|
53
|
+
}
|
|
54
|
+
// #MARK: sliding
|
|
55
|
+
function sliding({ exec, reset, next }) {
|
|
56
|
+
if (!is.function(next)) {
|
|
57
|
+
throw new BootstrapException(context, "BAD_NEXT", "Did not provide next function to schedule.sliding");
|
|
58
|
+
}
|
|
59
|
+
if (!is.function(exec)) {
|
|
60
|
+
throw new BootstrapException(context, "BAD_NEXT", "Did not provide exec function to schedule.sliding");
|
|
61
|
+
}
|
|
62
|
+
let timeout;
|
|
63
|
+
const waitForNext = () => {
|
|
64
|
+
if (timeout) {
|
|
65
|
+
logger.warn({ context, name: sliding }, `sliding schedule retrieving next execution time before previous ran`);
|
|
66
|
+
clearTimeout(timeout);
|
|
67
|
+
}
|
|
68
|
+
let nextTime = next();
|
|
69
|
+
if (!nextTime) {
|
|
70
|
+
// nothing to do?
|
|
71
|
+
// will try again next schedule
|
|
72
|
+
return;
|
|
73
|
+
}
|
|
74
|
+
nextTime = dayjs(nextTime);
|
|
75
|
+
if (dayjs().isAfter(nextTime)) {
|
|
76
|
+
// probably a result of boot
|
|
77
|
+
// ignore
|
|
78
|
+
return;
|
|
79
|
+
}
|
|
80
|
+
if (nextTime) {
|
|
81
|
+
timeout = setTimeout(async () => {
|
|
82
|
+
await internal.safeExec(exec);
|
|
83
|
+
}, Math.abs(dayjs().diff(nextTime, "ms")));
|
|
84
|
+
}
|
|
85
|
+
};
|
|
86
|
+
// reset on schedule
|
|
87
|
+
const scheduleStop = cron({
|
|
88
|
+
exec: waitForNext,
|
|
89
|
+
schedule: reset,
|
|
90
|
+
});
|
|
91
|
+
// find value for now (boot)
|
|
92
|
+
lifecycle.onReady(() => waitForNext());
|
|
93
|
+
return () => {
|
|
94
|
+
scheduleStop();
|
|
95
|
+
if (timeout) {
|
|
96
|
+
clearTimeout(timeout);
|
|
97
|
+
timeout = undefined;
|
|
98
|
+
}
|
|
99
|
+
};
|
|
100
|
+
}
|
|
101
|
+
return {
|
|
102
|
+
cron,
|
|
103
|
+
interval,
|
|
104
|
+
sliding,
|
|
105
|
+
};
|
|
106
|
+
};
|
|
107
|
+
}
|
|
108
|
+
//# sourceMappingURL=scheduler.extension.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"scheduler.extension.js","sourceRoot":"","sources":["../../src/services/scheduler.extension.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,111 @@
|
|
|
1
|
+
import { ApplicationConfigurationOptions, ApplicationDefinition, OptionalModuleConfiguration, ServiceMap, StringConfig, TConfigLogLevel } from "../helpers";
|
|
2
|
+
import { ALS } from ".";
|
|
3
|
+
import { Configuration } from "./configuration.extension";
|
|
4
|
+
import { Logger } from "./logger.extension";
|
|
5
|
+
import { Scheduler } from "./scheduler.extension";
|
|
6
|
+
export interface DeclaredEnvironments {
|
|
7
|
+
prod: true;
|
|
8
|
+
test: true;
|
|
9
|
+
local: true;
|
|
10
|
+
}
|
|
11
|
+
declare function createBoilerplate(): import("..").LibraryDefinition<{
|
|
12
|
+
/**
|
|
13
|
+
* [AsyncLocalStorage](https://nodejs.org/api/async_context.html) hooks
|
|
14
|
+
*
|
|
15
|
+
* Use to pass data around bypassing business logic and insert data into logs
|
|
16
|
+
*/
|
|
17
|
+
als: typeof ALS;
|
|
18
|
+
/**
|
|
19
|
+
* @internal
|
|
20
|
+
*
|
|
21
|
+
* Exposed via `internal.boilerplate.configuration`
|
|
22
|
+
*
|
|
23
|
+
* Used to directly modify application configuration
|
|
24
|
+
*/
|
|
25
|
+
configuration: typeof Configuration;
|
|
26
|
+
/**
|
|
27
|
+
* @internal
|
|
28
|
+
*
|
|
29
|
+
* Exposed via `internal.boilerplate.logger`
|
|
30
|
+
*
|
|
31
|
+
* Used to modify the way the logger works at runtime
|
|
32
|
+
*/
|
|
33
|
+
logger: typeof Logger;
|
|
34
|
+
/**
|
|
35
|
+
* @internal
|
|
36
|
+
*
|
|
37
|
+
* Used to generate the scheduler that will get injected into other services
|
|
38
|
+
*/
|
|
39
|
+
scheduler: typeof Scheduler;
|
|
40
|
+
}, {
|
|
41
|
+
ALS_ENABLED: {
|
|
42
|
+
type: "string";
|
|
43
|
+
};
|
|
44
|
+
/**
|
|
45
|
+
* Only usable by **cli switch**.
|
|
46
|
+
* Pass path to a config file for loader
|
|
47
|
+
*
|
|
48
|
+
* ```bash
|
|
49
|
+
* node dist/app.js --config ~/.config/my_app.ini
|
|
50
|
+
* ```
|
|
51
|
+
*/
|
|
52
|
+
CONFIG: {
|
|
53
|
+
description: string;
|
|
54
|
+
type: "string";
|
|
55
|
+
};
|
|
56
|
+
/**
|
|
57
|
+
* > by default true when:
|
|
58
|
+
*
|
|
59
|
+
* ```typescript
|
|
60
|
+
* NODE_ENV === "test*"
|
|
61
|
+
* ```
|
|
62
|
+
*
|
|
63
|
+
* ---
|
|
64
|
+
*
|
|
65
|
+
* When set
|
|
66
|
+
*/
|
|
67
|
+
IS_TEST: {
|
|
68
|
+
default: boolean;
|
|
69
|
+
description: string;
|
|
70
|
+
type: "boolean";
|
|
71
|
+
};
|
|
72
|
+
/**
|
|
73
|
+
* ### `trace`
|
|
74
|
+
*
|
|
75
|
+
* Very noisy, contains extra details about what's going on in the internals.
|
|
76
|
+
*
|
|
77
|
+
* ### `debug`
|
|
78
|
+
*
|
|
79
|
+
* Additional diagnostic information about operations being form. `"did a thing w/ {name}"` is common.
|
|
80
|
+
*
|
|
81
|
+
* ### `info`
|
|
82
|
+
*
|
|
83
|
+
* Notifications for high level events, and app code.
|
|
84
|
+
*
|
|
85
|
+
* ### `warn`
|
|
86
|
+
*
|
|
87
|
+
* Notification that an non-critical issue happened.
|
|
88
|
+
*
|
|
89
|
+
* ### `error`
|
|
90
|
+
*
|
|
91
|
+
* Error logs are produced from unexpected situations.
|
|
92
|
+
*
|
|
93
|
+
* When an external API sends back an error messages, or tools are being used in a detectably wrong way.
|
|
94
|
+
*
|
|
95
|
+
* ### `fatal`
|
|
96
|
+
*
|
|
97
|
+
* Produce a log at the highest importance level, not common
|
|
98
|
+
*
|
|
99
|
+
* ### `silent`
|
|
100
|
+
*
|
|
101
|
+
* Emit no logs at all
|
|
102
|
+
*/
|
|
103
|
+
LOG_LEVEL: StringConfig<TConfigLogLevel>;
|
|
104
|
+
/**
|
|
105
|
+
* Reference to `process.env.NODE_ENV` by default, `"local"` if not provided
|
|
106
|
+
*/
|
|
107
|
+
NODE_ENV: StringConfig<keyof DeclaredEnvironments>;
|
|
108
|
+
}>;
|
|
109
|
+
export declare let LIB_BOILERPLATE: ReturnType<typeof createBoilerplate>;
|
|
110
|
+
export declare function CreateApplication<S extends ServiceMap, C extends OptionalModuleConfiguration>({ name, services, configurationLoaders, libraries, configuration, priorityInit, }: ApplicationConfigurationOptions<S, C>): ApplicationDefinition<S, C>;
|
|
111
|
+
export {};
|