@digital-alchemy/core 24.8.4 → 24.9.4
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 +17 -27
- 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.d.ts +5 -3
- package/dist/helpers/config-file-loader.helper.js +45 -52
- package/dist/helpers/config-file-loader.helper.js.map +1 -1
- package/dist/helpers/config.helper.d.ts +24 -3
- package/dist/helpers/config.helper.js +30 -37
- 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.d.ts +2 -0
- package/dist/helpers/extend.helper.js +19 -24
- 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 +3 -14
- package/dist/helpers/utilities.helper.js +51 -73
- 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 +201 -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 +56 -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 @@
|
|
|
1
|
+
{"version":3,"file":"internal.extension.js","sourceRoot":"","sources":["../../src/services/internal.extension.ts"],"names":[],"mappings":"AAAA,OAAO,KAAgB,MAAM,OAAO,CAAC;AACrC,OAAO,EAAE,YAAY,EAAE,MAAM,QAAQ,CAAC;AAGtC,OAAO,EAEL,YAAY,EAEZ,GAAG,EACH,KAAK,EAEL,IAAI,EACJ,EAAE,EAGF,MAAM,EACN,IAAI,EAEJ,MAAM,EAEN,KAAK,EAKL,IAAI,GACL,MAAM,IAAI,CAAC;AAGZ,MAAM,eAAe,GAAG,CAAC,CAAC;AAC1B,MAAM,MAAM,GAAG,EAAE,CAAC;AAIlB,+CAA+C;AAC/C,MAAM,SAAS,GAAG,IAAI,IAAI,CAAC,kBAAkB,CAAC,IAAI,EAAE;IAClD,OAAO,EAAE,MAAM;IACf,KAAK,EAAE,OAAO;CACf,CAAC,CAAC;AAEH,cAAc;AACd,MAAM,OAAO,aAAa;IACxB;;;;;OAKG;IACI,KAAK,CAAe;IAC3B;QACE,IAAI,CAAC,KAAK,GAAG,IAAI,YAAY,EAAE,CAAC;QAChC,IAAI,CAAC,KAAK,CAAC,eAAe,CAAC,IAAI,CAAC,CAAC;IACnC,CAAC;IAEM,SAAS,CAAC,KAAa;QAC5B,MAAM,OAAO,GAAG,KAAK,CAAC,KAAK,CAAC,IAAI,MAAM,CAAC,YAAY,EAAE,GAAG,CAAC,CAAC,CAAC;QAC3D,IAAI,OAAO,EAAE,CAAC;YACZ,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,KAAK,GAAG,KAAK,CAAC,OAAO,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;QACrE,CAAC;QACD,OAAO,KAAK;aACT,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,CAAC;aAC1B,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,WAAW,EAAE,GAAG,IAAI,CAAC,KAAK,CAAC,eAAe,CAAC,EAAE,CAAC;aAChF,IAAI,CAAC,GAAG,CAAC,CAAC;IACf,CAAC;IAEM,YAAY,CAAC,QAAsB,EAAE,aAA2B,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;QAC7F,MAAM,KAAK,GAAG,IAAI,GAAG,CAAsC;YACzD,CAAC,MAAM,EAAE,IAAI,CAAC;YACd,CAAC,OAAO,EAAE,IAAI,GAAG,MAAM,CAAC;YACxB,CAAC,KAAK,EAAE,GAAG,CAAC;YACZ,CAAC,MAAM,EAAE,IAAI,CAAC;YACd,CAAC,QAAQ,EAAE,MAAM,CAAC;YAClB,CAAC,QAAQ,EAAE,MAAM,CAAC;SACnB,CAAC,CAAC;QACH,MAAM,IAAI,GAAG,KAAK,CAAC,QAAQ,CAAC,CAAC;QAC7B,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,EAAE,CAAC;YACpB,MAAM,IAAI,KAAK,CAAC,oBAAoB,GAAG,QAAQ,CAAC,CAAC;QACnD,CAAC;QACD,MAAM,MAAM,GAAG,KAAK,CAAC,UAAU,CAAC,CAAC;QACjC,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,EAAE,CAAC;YACtB,MAAM,IAAI,KAAK,CAAC,sBAAsB,GAAG,QAAQ,CAAC,CAAC;QACrD,CAAC;QAED,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;QACxC,IAAI,GAAG,GAAG,EAAE,CAAC;QAEb,CAAC,GAAG,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE;YAC5B,MAAM,MAAM,GAAG,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;YAC/B,IAAI,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,GAAG,MAAM,IAAI,IAAI,IAAI,QAAQ,EAAE,CAAC;gBACnD,GAAG,GAAG,SAAS,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,GAAG,MAAM,CAAC,EAAE,IAAI,CAAC,CAAC;gBAC3D,OAAO,IAAI,CAAC;YACd,CAAC;YACD,OAAO,KAAK,CAAC;QACf,CAAC,CAAC,CAAC;QAEH,OAAO,GAAG,CAAC;IACb,CAAC;IAED,kBAAkB;IACX,MAAM,GAAG;QACd,GAAG,CAAI,MAAS,EAAE,IAAY;YAC5B,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;YAC7B,IAAI,OAAO,GAAG,MAAiB,CAAC,CAAC,8CAA8C;YAE/E,KAAK,IAAI,CAAC,GAAG,KAAK,EAAE,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;gBACzC,MAAM,GAAG,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;gBAEpB,6CAA6C;gBAC7C,IAAI,OAAO,OAAO,KAAK,QAAQ,IAAI,OAAO,KAAK,IAAI,EAAE,CAAC;oBACpD,8CAA8C;oBAC9C,OAAO;gBACT,CAAC;gBAED,MAAM,WAAW,GAAG,OAAkC,CAAC;gBAEvD,2DAA2D;gBAC3D,IAAI,CAAC,KAAK,IAAI,CAAC,MAAM,GAAG,YAAY,EAAE,CAAC;oBACrC,OAAO,WAAW,CAAC,GAAG,CAAC,CAAC,CAAC,yDAAyD;gBACpF,CAAC;qBAAM,CAAC;oBACN,yFAAyF;oBACzF,IAAI,OAAO,WAAW,CAAC,GAAG,CAAC,KAAK,QAAQ,IAAI,WAAW,CAAC,GAAG,CAAC,KAAK,IAAI,EAAE,CAAC;wBACtE,OAAO;oBACT,CAAC;oBACD,qCAAqC;oBACrC,OAAO,GAAG,WAAW,CAAC,GAAG,CAAC,CAAC;gBAC7B,CAAC;YACH,CAAC;QACH,CAAC;QACD,GAAG,CAAsB,MAAS,EAAE,IAAO;YACzC,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;YAC7B,IAAI,OAAO,GAAY,MAAM,CAAC;YAE9B,KAAK,MAAM,GAAG,IAAI,IAAI,EAAE,CAAC;gBACvB,IAAI,CAAC,EAAE,CAAC,MAAM,CAAC,OAAO,CAAC,IAAI,OAAO,KAAK,IAAI,IAAI,CAAC,CAAC,GAAG,IAAI,OAAO,CAAC,EAAE,CAAC;oBACjE,OAAO,SAAS,CAAC;gBACnB,CAAC;gBACD,OAAO,GAAI,OAAmC,CAAC,GAAG,CAAC,CAAC;YACtD,CAAC;YAED,OAAO,OAAoB,CAAC;QAC9B,CAAC;QACD,GAAG,CAAI,MAAS,EAAE,IAAY,EAAE,KAAc,EAAE,eAAwB,KAAK;YAC3E,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;YAC7B,IAAI,OAAO,GAAG,MAAiB,CAAC,CAAC,8CAA8C;YAE/E,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;gBACrC,MAAM,GAAG,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;gBAEpB,qEAAqE;gBACrE,IAAI,OAAO,OAAO,KAAK,QAAQ,IAAI,OAAO,KAAK,IAAI,EAAE,CAAC;oBACpD,MAAM,IAAI,KAAK,CAAC,4CAA4C,CAAC,CAAC;gBAChE,CAAC;gBAED,sEAAsE;gBACtE,MAAM,WAAW,GAAG,OAAkC,CAAC;gBAEvD,6CAA6C;gBAC7C,IAAI,CAAC,KAAK,IAAI,CAAC,MAAM,GAAG,YAAY,EAAE,CAAC;oBACrC,IAAI,CAAC,YAAY,IAAI,CAAC,CAAC,GAAG,IAAI,WAAW,CAAC,EAAE,CAAC;wBAC3C,WAAW,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC;oBAC3B,CAAC;gBACH,CAAC;qBAAM,CAAC;oBACN,iFAAiF;oBACjF,IACE,WAAW,CAAC,GAAG,CAAC,KAAK,SAAS;wBAC9B,OAAO,WAAW,CAAC,GAAG,CAAC,KAAK,QAAQ;wBACpC,WAAW,CAAC,GAAG,CAAC,KAAK,IAAI,EACzB,CAAC;wBACD,WAAW,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC;oBACxB,CAAC;oBACD,qCAAqC;oBACrC,OAAO,GAAG,WAAW,CAAC,GAAG,CAAC,CAAC;gBAC7B,CAAC;YACH,CAAC;QACH,CAAC;KACF,CAAC;CAEH;AASD,0BAA0B;AAC1B,MAAM,OAAO,kBAAkB;IAC7B;;OAEG;IACI,WAAW,CAAoE;IAC/E,IAAI,CAyCT;IACK,KAAK,GAAG,IAAI,aAAa,EAAE,CAAC;IAEnC,kBAAkB;IACX,KAAK,CAAC,QAAQ,CAAI,OAA6C;QACpE,MAAM,MAAM,GAAG,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,YAAY,CAAC;QACpD,MAAM,OAAO,GAAG,EAAE,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,OAAO,EAAE,OAAO,CAAC;QACpE,MAAM,IAAI,GAAG,EAAE,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,OAAO,EAAE,IAAI,CAAC;QAC5D,IAAI,CAAC,EAAE,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC;YACvB,MAAM,CAAC,KAAK,CAAC,EAAE,OAAO,EAAE,EAAE,8CAA8C,CAAC,CAAC;YAC1E,OAAO,SAAS,CAAC;QACnB,CAAC;QACD,IAAI,CAAC;YACH,OAAO,CAAC,MAAM,IAAI,EAAE,CAAM,CAAC;QAC7B,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,MAAM,CAAC,KAAK,CAAC,EAAE,OAAO,EAAE,KAAK,EAAE,EAAE,sBAAsB,CAAC,CAAC;YACzD,OAAO,SAAS,CAAC;QACnB,CAAC;IACH,CAAC;CACF;AACD,aAAa"}
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { Dayjs } from "dayjs";
|
|
1
2
|
import { TBlackHole, TContext } from "../helpers";
|
|
2
3
|
type MaybeEmptyTypes = string | undefined | Array<unknown> | number | Set<unknown> | Map<unknown, unknown> | object;
|
|
3
4
|
type MaybeFunction = (...parameters: unknown[]) => TBlackHole;
|
|
@@ -11,7 +12,11 @@ export declare class IsIt {
|
|
|
11
12
|
* The internals of this test may get more creative as context evolves
|
|
12
13
|
*/
|
|
13
14
|
context(test: unknown): test is TContext;
|
|
15
|
+
/**
|
|
16
|
+
* test is valid date
|
|
17
|
+
*/
|
|
14
18
|
date(test: unknown): test is Date;
|
|
19
|
+
dayjs(test: unknown): test is Dayjs;
|
|
15
20
|
empty(test: MaybeEmptyTypes): boolean;
|
|
16
21
|
/**
|
|
17
22
|
* #MARK: Deep equality test
|
|
@@ -1,12 +1,11 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
const helpers_1 = require("../helpers");
|
|
1
|
+
import { randomBytes } from "crypto";
|
|
2
|
+
import dayjs from "dayjs";
|
|
3
|
+
import { isDeepStrictEqual, types } from "util";
|
|
4
|
+
import { EMPTY, EVEN } from "../helpers";
|
|
6
5
|
/**
|
|
7
6
|
* type testing and basic conversion tools
|
|
8
7
|
*/
|
|
9
|
-
class IsIt {
|
|
8
|
+
export class IsIt {
|
|
10
9
|
array(test) {
|
|
11
10
|
return Array.isArray(test);
|
|
12
11
|
}
|
|
@@ -19,18 +18,24 @@ class IsIt {
|
|
|
19
18
|
context(test) {
|
|
20
19
|
return typeof test === "string";
|
|
21
20
|
}
|
|
21
|
+
/**
|
|
22
|
+
* test is valid date
|
|
23
|
+
*/
|
|
22
24
|
date(test) {
|
|
23
|
-
return
|
|
25
|
+
return types.isDate(test) && is.number(test.getTime());
|
|
26
|
+
}
|
|
27
|
+
dayjs(test) {
|
|
28
|
+
return test instanceof dayjs && test.isValid();
|
|
24
29
|
}
|
|
25
30
|
empty(test) {
|
|
26
31
|
if (test === undefined) {
|
|
27
32
|
return true;
|
|
28
33
|
}
|
|
29
34
|
if (typeof test === "string" || Array.isArray(test)) {
|
|
30
|
-
return test.length ===
|
|
35
|
+
return test.length === EMPTY;
|
|
31
36
|
}
|
|
32
|
-
if (
|
|
33
|
-
return test.size ===
|
|
37
|
+
if (types.isMap(test) || types.isSet(test)) {
|
|
38
|
+
return test.size === EMPTY;
|
|
34
39
|
}
|
|
35
40
|
if (typeof test === "object") {
|
|
36
41
|
for (const key in test) {
|
|
@@ -50,10 +55,10 @@ class IsIt {
|
|
|
50
55
|
* #MARK: Deep equality test
|
|
51
56
|
*/
|
|
52
57
|
equal(a, b) {
|
|
53
|
-
return
|
|
58
|
+
return isDeepStrictEqual(a, b);
|
|
54
59
|
}
|
|
55
60
|
even(test) {
|
|
56
|
-
return test %
|
|
61
|
+
return test % EVEN === EMPTY;
|
|
57
62
|
}
|
|
58
63
|
function(test) {
|
|
59
64
|
return typeof test === "function";
|
|
@@ -65,7 +70,8 @@ class IsIt {
|
|
|
65
70
|
return typeof test === "object" && test !== null && !Array.isArray(test);
|
|
66
71
|
}
|
|
67
72
|
random(list) {
|
|
68
|
-
|
|
73
|
+
// eslint-disable-next-line @typescript-eslint/no-magic-numbers
|
|
74
|
+
return list[Math.floor(randomBytes(1)[0] % list.length)];
|
|
69
75
|
}
|
|
70
76
|
string(test) {
|
|
71
77
|
return typeof test === "string";
|
|
@@ -80,6 +86,5 @@ class IsIt {
|
|
|
80
86
|
return [...new Set(items)];
|
|
81
87
|
}
|
|
82
88
|
}
|
|
83
|
-
|
|
84
|
-
exports.is = new IsIt();
|
|
89
|
+
export const is = new IsIt();
|
|
85
90
|
//# sourceMappingURL=is.extension.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"is.extension.js","sourceRoot":"","sources":["../../src/services/is.extension.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,16 +1,14 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
exports.CreateLifecycle = CreateLifecycle;
|
|
4
|
-
const helpers_1 = require("../helpers");
|
|
5
|
-
const is_extension_1 = require("./is.extension");
|
|
1
|
+
import { DOWN, each, eachSeries, LIFECYCLE_STAGES, UP, } from "../helpers";
|
|
2
|
+
import { is } from "./is.extension";
|
|
6
3
|
const PRE_CALLBACKS_START = 0;
|
|
7
|
-
|
|
8
|
-
|
|
4
|
+
const DECIMALS = 2;
|
|
5
|
+
export function CreateLifecycle() {
|
|
6
|
+
const events = new Map(LIFECYCLE_STAGES.map(event => [event, []]));
|
|
9
7
|
function attachEvent(callback, name, priority) {
|
|
10
8
|
const stageList = events.get(name);
|
|
11
|
-
if (!
|
|
9
|
+
if (!is.array(stageList)) {
|
|
12
10
|
if (!name.includes("Shutdown")) {
|
|
13
|
-
|
|
11
|
+
callback();
|
|
14
12
|
}
|
|
15
13
|
return;
|
|
16
14
|
}
|
|
@@ -27,15 +25,16 @@ function CreateLifecycle() {
|
|
|
27
25
|
onShutdownStart: (callback, priority) => attachEvent(callback, "ShutdownStart", priority),
|
|
28
26
|
},
|
|
29
27
|
async exec(stage) {
|
|
30
|
-
const start =
|
|
28
|
+
const start = performance.now();
|
|
31
29
|
const list = events.get(stage);
|
|
32
30
|
events.delete(stage);
|
|
33
|
-
if (!
|
|
31
|
+
if (!is.empty(list)) {
|
|
34
32
|
const sorted = list.filter(({ priority }) => priority !== undefined);
|
|
35
33
|
const quick = list.filter(({ priority }) => priority === undefined);
|
|
36
34
|
const positive = [];
|
|
37
35
|
const negative = [];
|
|
38
|
-
|
|
36
|
+
// console.error("HIT 1");
|
|
37
|
+
sorted.forEach(i => {
|
|
39
38
|
if (i.priority >= PRE_CALLBACKS_START) {
|
|
40
39
|
positive.push(i);
|
|
41
40
|
return;
|
|
@@ -44,18 +43,17 @@ function CreateLifecycle() {
|
|
|
44
43
|
});
|
|
45
44
|
// * callbacks with a priority greater than 0
|
|
46
45
|
// high to low (1000 => 0)
|
|
47
|
-
await
|
|
46
|
+
await eachSeries(positive.toSorted((a, b) => (a.priority < b.priority ? UP : DOWN)), async ({ callback }) => await callback());
|
|
47
|
+
// console.error("HIT 2");
|
|
48
48
|
// * callbacks without a priority
|
|
49
49
|
// any order
|
|
50
|
-
await
|
|
50
|
+
await each(quick, async ({ callback }) => await callback());
|
|
51
|
+
// console.error("HIT 3");
|
|
51
52
|
// * callbacks with a priority less than 0
|
|
52
53
|
// high to low (-1 => -1000)
|
|
53
|
-
await
|
|
54
|
+
await eachSeries(negative.toSorted((a, b) => (a.priority < b.priority ? UP : DOWN)), async ({ callback }) => await callback());
|
|
54
55
|
}
|
|
55
|
-
|
|
56
|
-
// I forgot why, but it seems on purpose
|
|
57
|
-
await (0, helpers_1.sleep)(helpers_1.NONE);
|
|
58
|
-
return `${Date.now() - start}ms`;
|
|
56
|
+
return `${(performance.now() - start).toFixed(DECIMALS)}ms`;
|
|
59
57
|
},
|
|
60
58
|
};
|
|
61
59
|
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"lifecycle.extension.js","sourceRoot":"","sources":["../../src/services/lifecycle.extension.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,201 @@
|
|
|
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
|
+
internal.boot.options ??= {};
|
|
28
|
+
const { loggerOptions = {} } = internal.boot.options;
|
|
29
|
+
const timestampFormat = loggerOptions.timestampFormat ?? "ddd HH:mm:ss.SSS";
|
|
30
|
+
loggerOptions.mergeData ??= {};
|
|
31
|
+
const YELLOW_DASH = chalk.yellowBright(frontDash);
|
|
32
|
+
const BLUE_TICK = chalk.blue(`>`);
|
|
33
|
+
let prettyFormat = is.boolean(loggerOptions.pretty) ? loggerOptions.pretty : true;
|
|
34
|
+
function emitHttpLogs(data) {
|
|
35
|
+
if (is.empty(httpLogTarget)) {
|
|
36
|
+
return;
|
|
37
|
+
}
|
|
38
|
+
// validated with datadog, probably is fine elsewhere too
|
|
39
|
+
// https://http-intake.logs.datadoghq.com/v1/input/{API_KEY}
|
|
40
|
+
global.fetch(httpLogTarget, {
|
|
41
|
+
body: JSON.stringify(data),
|
|
42
|
+
headers: { "Content-Type": "application/json" },
|
|
43
|
+
method: "POST",
|
|
44
|
+
});
|
|
45
|
+
}
|
|
46
|
+
function mergeData(data) {
|
|
47
|
+
let out = { ...data, ...loggerOptions.mergeData };
|
|
48
|
+
if (loggerOptions.counter) {
|
|
49
|
+
const counter = out;
|
|
50
|
+
counter.logIdx = logCounter++;
|
|
51
|
+
}
|
|
52
|
+
if (loggerOptions.als) {
|
|
53
|
+
out = { ...out, ...als.getLogData() };
|
|
54
|
+
}
|
|
55
|
+
return out;
|
|
56
|
+
}
|
|
57
|
+
const prettyFormatMessage = (message) => {
|
|
58
|
+
if (!message) {
|
|
59
|
+
return ``;
|
|
60
|
+
}
|
|
61
|
+
if (!prettyFormat || message.length > MAX_CUTOFF) {
|
|
62
|
+
return message;
|
|
63
|
+
}
|
|
64
|
+
// ? partA#partB - highlight it all in yellow
|
|
65
|
+
message = message.replaceAll(new RegExp("([^ ]+#[^ ]+)", "g"), i => chalk.yellow(i));
|
|
66
|
+
// ? [A] > [B] > [C] - highlight the >'s in blue
|
|
67
|
+
message = message.replaceAll("] > [", `] ${BLUE_TICK} [`);
|
|
68
|
+
// ? [Text] - strip brackets, highlight magenta
|
|
69
|
+
message = message.replaceAll(new RegExp(String.raw `(\[[^\]\[]+\])`, "g"), i => chalk.bold.magenta(i.slice(SYMBOL_START, SYMBOL_END)));
|
|
70
|
+
// ? {Text} - strip braces, highlight gray
|
|
71
|
+
message = message.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
|
+
// #MARK: 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 ms = "";
|
|
103
|
+
if (loggerOptions.ms) {
|
|
104
|
+
const now = performance.now();
|
|
105
|
+
ms = "+" + (now - lastMessage).toFixed(DECIMALS) + `ms`;
|
|
106
|
+
lastMessage = now;
|
|
107
|
+
rawData.ms = ms;
|
|
108
|
+
}
|
|
109
|
+
let message = `${ms}${timestamp} ${level}${highlighted}`;
|
|
110
|
+
if (!is.empty(name)) {
|
|
111
|
+
message += chalk.blue(` (${name})`);
|
|
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
|
+
}
|
|
139
|
+
else {
|
|
140
|
+
logger = internal.boot.options.customLogger;
|
|
141
|
+
}
|
|
142
|
+
// #MARK: instances
|
|
143
|
+
// if bootstrap hard coded something specific, then start there
|
|
144
|
+
// otherwise, be noisy until config loads a user preference
|
|
145
|
+
//
|
|
146
|
+
// stored as separate variable to cut down on internal config lookups
|
|
147
|
+
let CURRENT_LOG_LEVEL = internal.utils.object.get(internal, "boot.options.configuration.boilerplate.LOG_LEVEL") ||
|
|
148
|
+
"trace";
|
|
149
|
+
function context(context) {
|
|
150
|
+
const name = context;
|
|
151
|
+
const shouldILog = {};
|
|
152
|
+
const [prefix] = context.split(":");
|
|
153
|
+
const update = () => {
|
|
154
|
+
LOG_LEVELS.forEach((key) => {
|
|
155
|
+
// global level
|
|
156
|
+
let target = LOG_LEVEL_PRIORITY[CURRENT_LOG_LEVEL];
|
|
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] = LOG_LEVEL_PRIORITY[key] >= target;
|
|
166
|
+
});
|
|
167
|
+
};
|
|
168
|
+
event.on(EVENT_UPDATE_LOG_LEVELS, update);
|
|
169
|
+
update();
|
|
170
|
+
return {
|
|
171
|
+
debug: (...params) => shouldILog.debug && logger.debug(context, ...params),
|
|
172
|
+
error: (...params) => shouldILog.error && logger.error(context, ...params),
|
|
173
|
+
fatal: (...params) => shouldILog.fatal && logger.fatal(context, ...params),
|
|
174
|
+
info: (...params) => shouldILog.info && logger.info(context, ...params),
|
|
175
|
+
trace: (...params) => shouldILog.trace && logger.trace(context, ...params),
|
|
176
|
+
warn: (...params) => shouldILog.warn && logger.warn(context, ...params),
|
|
177
|
+
};
|
|
178
|
+
}
|
|
179
|
+
const updateShouldLog = () => {
|
|
180
|
+
if (!is.empty(config.boilerplate.LOG_LEVEL)) {
|
|
181
|
+
CURRENT_LOG_LEVEL = config.boilerplate.LOG_LEVEL;
|
|
182
|
+
}
|
|
183
|
+
event.emit(EVENT_UPDATE_LOG_LEVELS);
|
|
184
|
+
};
|
|
185
|
+
// #MARK: lifecycle
|
|
186
|
+
lifecycle.onPostConfig(() => internal.boilerplate.logger.updateShouldLog());
|
|
187
|
+
internal.boilerplate.configuration.onUpdate(() => internal.boilerplate.logger.updateShouldLog(), "boilerplate", "LOG_LEVEL");
|
|
188
|
+
// #MARK: return object
|
|
189
|
+
return {
|
|
190
|
+
context,
|
|
191
|
+
getBaseLogger: () => logger,
|
|
192
|
+
getPrettyFormat: () => prettyFormat,
|
|
193
|
+
prettyFormatMessage,
|
|
194
|
+
setBaseLogger: base => (logger = base),
|
|
195
|
+
setHttpLogs: url => (httpLogTarget = url),
|
|
196
|
+
setPrettyFormat: state => (prettyFormat = state),
|
|
197
|
+
systemLogger: context("digital-alchemy:system-logger"),
|
|
198
|
+
updateShouldLog,
|
|
199
|
+
};
|
|
200
|
+
}
|
|
201
|
+
//# 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,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 {};
|