@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.
Files changed (117) hide show
  1. package/README.md +4 -1
  2. package/dist/helpers/async.helper.d.ts +1 -1
  3. package/dist/helpers/async.helper.js +13 -14
  4. package/dist/helpers/async.helper.js.map +1 -1
  5. package/dist/helpers/config-environment-loader.helper.js +16 -20
  6. package/dist/helpers/config-environment-loader.helper.js.map +1 -1
  7. package/dist/helpers/config-file-loader.helper.js +39 -46
  8. package/dist/helpers/config-file-loader.helper.js.map +1 -1
  9. package/dist/helpers/config.helper.d.ts +23 -2
  10. package/dist/helpers/config.helper.js +28 -38
  11. package/dist/helpers/config.helper.js.map +1 -1
  12. package/dist/helpers/context.helper.js +1 -2
  13. package/dist/helpers/cron.helper.d.ts +27 -0
  14. package/dist/helpers/cron.helper.js +4 -7
  15. package/dist/helpers/cron.helper.js.map +1 -1
  16. package/dist/helpers/errors.helper.d.ts +0 -12
  17. package/dist/helpers/errors.helper.js +2 -23
  18. package/dist/helpers/errors.helper.js.map +1 -1
  19. package/dist/helpers/events.helper.js +4 -10
  20. package/dist/helpers/events.helper.js.map +1 -1
  21. package/dist/helpers/extend.helper.js +12 -17
  22. package/dist/helpers/extend.helper.js.map +1 -1
  23. package/dist/helpers/index.d.ts +2 -4
  24. package/dist/helpers/index.js +14 -19
  25. package/dist/helpers/index.js.map +1 -1
  26. package/dist/helpers/lifecycle.helper.d.ts +1 -5
  27. package/dist/helpers/lifecycle.helper.js +1 -4
  28. package/dist/helpers/lifecycle.helper.js.map +1 -1
  29. package/dist/{extensions/logger.extension.d.ts → helpers/logger.helper.d.ts} +33 -40
  30. package/dist/helpers/logger.helper.js +10 -0
  31. package/dist/helpers/logger.helper.js.map +1 -0
  32. package/dist/helpers/module.helper.d.ts +74 -0
  33. package/dist/helpers/module.helper.js +131 -0
  34. package/dist/helpers/module.helper.js.map +1 -0
  35. package/dist/helpers/utilities.helper.d.ts +1 -0
  36. package/dist/helpers/utilities.helper.js +57 -58
  37. package/dist/helpers/utilities.helper.js.map +1 -1
  38. package/dist/helpers/wiring.helper.d.ts +77 -23
  39. package/dist/helpers/wiring.helper.js +45 -47
  40. package/dist/helpers/wiring.helper.js.map +1 -1
  41. package/dist/index.d.ts +2 -1
  42. package/dist/index.js +3 -5
  43. package/dist/index.js.map +1 -1
  44. package/dist/services/als.extension.d.ts +2 -0
  45. package/dist/services/als.extension.js +17 -0
  46. package/dist/services/als.extension.js.map +1 -0
  47. package/dist/services/configuration.extension.d.ts +7 -0
  48. package/dist/services/configuration.extension.js +117 -0
  49. package/dist/services/configuration.extension.js.map +1 -0
  50. package/dist/{extensions → services}/index.d.ts +1 -3
  51. package/dist/services/index.js +8 -0
  52. package/dist/services/index.js.map +1 -0
  53. package/dist/{extensions → services}/internal.extension.d.ts +7 -23
  54. package/dist/{extensions → services}/internal.extension.js +43 -55
  55. package/dist/services/internal.extension.js.map +1 -0
  56. package/dist/{extensions → services}/is.extension.d.ts +5 -0
  57. package/dist/{extensions → services}/is.extension.js +20 -15
  58. package/dist/services/is.extension.js.map +1 -0
  59. package/dist/{extensions → services}/lifecycle.extension.js +17 -19
  60. package/dist/services/lifecycle.extension.js.map +1 -0
  61. package/dist/services/logger.extension.d.ts +2 -0
  62. package/dist/services/logger.extension.js +200 -0
  63. package/dist/services/logger.extension.js.map +1 -0
  64. package/dist/services/scheduler.extension.d.ts +2 -0
  65. package/dist/services/scheduler.extension.js +108 -0
  66. package/dist/services/scheduler.extension.js.map +1 -0
  67. package/dist/services/wiring.extension.d.ts +111 -0
  68. package/dist/services/wiring.extension.js +437 -0
  69. package/dist/services/wiring.extension.js.map +1 -0
  70. package/dist/testing/index.d.ts +2 -0
  71. package/dist/testing/index.js +3 -0
  72. package/dist/testing/index.js.map +1 -0
  73. package/dist/testing/mock-logger.d.ts +2 -0
  74. package/dist/testing/mock-logger.js +11 -0
  75. package/dist/testing/mock-logger.js.map +1 -0
  76. package/dist/testing/test-module.d.ts +112 -0
  77. package/dist/testing/test-module.js +138 -0
  78. package/dist/testing/test-module.js.map +1 -0
  79. package/package.json +57 -43
  80. package/dist/extensions/cache.extension.d.ts +0 -2
  81. package/dist/extensions/cache.extension.js +0 -90
  82. package/dist/extensions/cache.extension.js.map +0 -1
  83. package/dist/extensions/configuration.extension.d.ts +0 -52
  84. package/dist/extensions/configuration.extension.js +0 -131
  85. package/dist/extensions/configuration.extension.js.map +0 -1
  86. package/dist/extensions/fetch.extension.d.ts +0 -17
  87. package/dist/extensions/fetch.extension.js +0 -133
  88. package/dist/extensions/fetch.extension.js.map +0 -1
  89. package/dist/extensions/index.js +0 -13
  90. package/dist/extensions/index.js.map +0 -1
  91. package/dist/extensions/internal.extension.js.map +0 -1
  92. package/dist/extensions/is.extension.js.map +0 -1
  93. package/dist/extensions/lifecycle.extension.js.map +0 -1
  94. package/dist/extensions/logger.extension.js +0 -186
  95. package/dist/extensions/logger.extension.js.map +0 -1
  96. package/dist/extensions/metrics.extension.d.ts +0 -18
  97. package/dist/extensions/metrics.extension.js +0 -156
  98. package/dist/extensions/metrics.extension.js.map +0 -1
  99. package/dist/extensions/scheduler.extension.d.ts +0 -21
  100. package/dist/extensions/scheduler.extension.js +0 -133
  101. package/dist/extensions/scheduler.extension.js.map +0 -1
  102. package/dist/extensions/wiring.extension.d.ts +0 -50
  103. package/dist/extensions/wiring.extension.js +0 -374
  104. package/dist/extensions/wiring.extension.js.map +0 -1
  105. package/dist/helpers/cache-memory.helper.d.ts +0 -6
  106. package/dist/helpers/cache-memory.helper.js +0 -68
  107. package/dist/helpers/cache-memory.helper.js.map +0 -1
  108. package/dist/helpers/cache-redis.helper.d.ts +0 -6
  109. package/dist/helpers/cache-redis.helper.js +0 -73
  110. package/dist/helpers/cache-redis.helper.js.map +0 -1
  111. package/dist/helpers/cache.helper.d.ts +0 -19
  112. package/dist/helpers/cache.helper.js +0 -9
  113. package/dist/helpers/cache.helper.js.map +0 -1
  114. package/dist/helpers/fetch.helper.d.ts +0 -165
  115. package/dist/helpers/fetch.helper.js +0 -173
  116. package/dist/helpers/fetch.helper.js.map +0 -1
  117. /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":"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"}
@@ -0,0 +1,2 @@
1
+ import { SchedulerBuilder, TServiceParams } from "../helpers";
2
+ export declare function Scheduler({ logger, lifecycle, internal }: TServiceParams): SchedulerBuilder;
@@ -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 {};