@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,117 @@
|
|
|
1
|
+
import { BootstrapException, ConfigLoaderEnvironment, ConfigLoaderFile, deepExtend, eachSeries, } from "..";
|
|
2
|
+
import { is } from ".";
|
|
3
|
+
export const INITIALIZE = Symbol.for("initialize");
|
|
4
|
+
export const LOAD_PROJECT = Symbol.for("load-project");
|
|
5
|
+
export const EVENT_CONFIGURATION_UPDATED = "event_configuration_updated";
|
|
6
|
+
export const INJECTED_DEFINITIONS = Symbol.for("injected-config");
|
|
7
|
+
const DECIMALS = 2;
|
|
8
|
+
export function Configuration({ context, event, lifecycle, internal,
|
|
9
|
+
// ! THIS DOES NOT EXIST BEFORE PRE INIT
|
|
10
|
+
logger, }) {
|
|
11
|
+
// modern problems require modern solutions
|
|
12
|
+
lifecycle.onPreInit(() => (logger = internal.boilerplate.logger.context(context)));
|
|
13
|
+
const configuration = {};
|
|
14
|
+
const configDefinitions = new Map();
|
|
15
|
+
function injectedDefinitions() {
|
|
16
|
+
const out = {};
|
|
17
|
+
return new Proxy(out, {
|
|
18
|
+
get(_, project) {
|
|
19
|
+
return internal.utils.object.get(configuration, project) ?? {};
|
|
20
|
+
},
|
|
21
|
+
has(_, key) {
|
|
22
|
+
Object.keys(configuration).forEach(key => (out[key] ??= {}));
|
|
23
|
+
return Object.keys(configuration).includes(key);
|
|
24
|
+
},
|
|
25
|
+
ownKeys() {
|
|
26
|
+
Object.keys(configuration).forEach(key => (out[key] ??= {}));
|
|
27
|
+
return Object.keys(configuration);
|
|
28
|
+
},
|
|
29
|
+
set() {
|
|
30
|
+
return false;
|
|
31
|
+
},
|
|
32
|
+
});
|
|
33
|
+
}
|
|
34
|
+
function setConfig(project, property, value) {
|
|
35
|
+
internal.utils.object.set(configuration, [project, property].join("."), value);
|
|
36
|
+
// in case anyone needs a hook
|
|
37
|
+
event.emit(EVENT_CONFIGURATION_UPDATED, project, property);
|
|
38
|
+
}
|
|
39
|
+
function validateConfig() {
|
|
40
|
+
// * validate
|
|
41
|
+
// - ensure all required properties have been defined
|
|
42
|
+
configDefinitions.forEach((definitions, project) => {
|
|
43
|
+
Object.keys(definitions).forEach(key => {
|
|
44
|
+
const config = [project, key].join(".");
|
|
45
|
+
if (definitions[key].required &&
|
|
46
|
+
is.undefined(internal.utils.object.get(configuration, config))) {
|
|
47
|
+
// ruh roh
|
|
48
|
+
throw new BootstrapException(context, "REQUIRED_CONFIGURATION_MISSING", `Configuration property ${config} is not defined`);
|
|
49
|
+
}
|
|
50
|
+
});
|
|
51
|
+
});
|
|
52
|
+
}
|
|
53
|
+
// #MARK: Initialize
|
|
54
|
+
async function initialize(application) {
|
|
55
|
+
const configLoaders = internal.boot.application.configurationLoaders ??
|
|
56
|
+
[ConfigLoaderEnvironment, ConfigLoaderFile];
|
|
57
|
+
const start = performance.now();
|
|
58
|
+
// * were configs disabled?
|
|
59
|
+
if (is.empty(configLoaders)) {
|
|
60
|
+
validateConfig();
|
|
61
|
+
if (!configuration.boilerplate.IS_TEST) {
|
|
62
|
+
logger.warn({ name: initialize }, `no config loaders defined`);
|
|
63
|
+
}
|
|
64
|
+
return `${(performance.now() - start).toFixed(DECIMALS)}ms`;
|
|
65
|
+
}
|
|
66
|
+
// * load!
|
|
67
|
+
await eachSeries(configLoaders, async (loader) => {
|
|
68
|
+
const merge = await loader({
|
|
69
|
+
application,
|
|
70
|
+
configs: configDefinitions,
|
|
71
|
+
internal,
|
|
72
|
+
logger,
|
|
73
|
+
});
|
|
74
|
+
deepExtend(configuration, merge);
|
|
75
|
+
});
|
|
76
|
+
validateConfig();
|
|
77
|
+
return `${(performance.now() - start).toFixed(DECIMALS)}ms`;
|
|
78
|
+
}
|
|
79
|
+
function merge(merge) {
|
|
80
|
+
return deepExtend(configuration, merge);
|
|
81
|
+
}
|
|
82
|
+
function loadProject(library, definitions) {
|
|
83
|
+
internal.utils.object.set(configuration, library, {});
|
|
84
|
+
Object.keys(definitions).forEach(key => {
|
|
85
|
+
internal.utils.object.set(configuration, [library, key].join("."), definitions[key].default);
|
|
86
|
+
});
|
|
87
|
+
return configDefinitions.set(library, definitions);
|
|
88
|
+
}
|
|
89
|
+
return {
|
|
90
|
+
[INITIALIZE]: initialize,
|
|
91
|
+
[INJECTED_DEFINITIONS]: injectedDefinitions,
|
|
92
|
+
[LOAD_PROJECT]: loadProject,
|
|
93
|
+
/**
|
|
94
|
+
* retrieve the metadata that was originally used to define the configs
|
|
95
|
+
*/
|
|
96
|
+
getDefinitions: () => configDefinitions,
|
|
97
|
+
/**
|
|
98
|
+
* take a configuration object, and deep merge values
|
|
99
|
+
*
|
|
100
|
+
* intended for initial loading workflows
|
|
101
|
+
*/
|
|
102
|
+
merge: merge,
|
|
103
|
+
onUpdate(callback, project, property) {
|
|
104
|
+
event.on(EVENT_CONFIGURATION_UPDATED, (updatedProject, updatedProperty) => {
|
|
105
|
+
if (!is.empty(project) && project !== updatedProject) {
|
|
106
|
+
return;
|
|
107
|
+
}
|
|
108
|
+
if (!is.empty(property) && property !== updatedProperty) {
|
|
109
|
+
return;
|
|
110
|
+
}
|
|
111
|
+
callback(updatedProject, updatedProperty);
|
|
112
|
+
});
|
|
113
|
+
},
|
|
114
|
+
set: setConfig,
|
|
115
|
+
};
|
|
116
|
+
}
|
|
117
|
+
//# sourceMappingURL=configuration.extension.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"configuration.extension.js","sourceRoot":"","sources":["../../src/services/configuration.extension.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,9 +1,7 @@
|
|
|
1
|
-
export * from "./
|
|
1
|
+
export * from "./als.extension";
|
|
2
2
|
export * from "./configuration.extension";
|
|
3
|
-
export * from "./fetch.extension";
|
|
4
3
|
export * from "./internal.extension";
|
|
5
4
|
export * from "./is.extension";
|
|
6
5
|
export * from "./logger.extension";
|
|
7
|
-
export * from "./metrics.extension";
|
|
8
6
|
export * from "./scheduler.extension";
|
|
9
7
|
export * from "./wiring.extension";
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
export * from "./als.extension";
|
|
2
|
+
export * from "./configuration.extension";
|
|
3
|
+
export * from "./internal.extension";
|
|
4
|
+
export * from "./is.extension";
|
|
5
|
+
export * from "./logger.extension";
|
|
6
|
+
export * from "./scheduler.extension";
|
|
7
|
+
export * from "./wiring.extension";
|
|
8
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/services/index.ts"],"names":[],"mappings":"AAAA,cAAc,iBAAiB,CAAC;AAChC,cAAc,2BAA2B,CAAC;AAC1C,cAAc,sBAAsB,CAAC;AACrC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,oBAAoB,CAAC;AACnC,cAAc,uBAAuB,CAAC;AACtC,cAAc,oBAAoB,CAAC"}
|
|
@@ -1,6 +1,5 @@
|
|
|
1
1
|
import { Dayjs } from "dayjs";
|
|
2
2
|
import { EventEmitter } from "events";
|
|
3
|
-
import { Counter, Summary } from "prom-client";
|
|
4
3
|
import { Get } from "type-fest";
|
|
5
4
|
import { ApplicationDefinition, BootstrapOptions, GetApis, LIB_BOILERPLATE, LifecycleStages, OptionalModuleConfiguration, ServiceMap, TBlackHole, TContext, TModuleMappings, TResolvedModuleMappings } from "..";
|
|
6
5
|
import { CreateLifecycle } from "./lifecycle.extension";
|
|
@@ -12,8 +11,9 @@ export declare class InternalUtils {
|
|
|
12
11
|
* **NOTE:** bootstrapping process will initialize this at boot, and cleanup at teardown.
|
|
13
12
|
* Making listener changes should only be done from within the context of service functions
|
|
14
13
|
*/
|
|
15
|
-
event: EventEmitter
|
|
16
|
-
|
|
14
|
+
event: EventEmitter;
|
|
15
|
+
constructor();
|
|
16
|
+
titleCase(input: string): string;
|
|
17
17
|
relativeDate(pastDate: inputFormats, futureDate?: inputFormats): string;
|
|
18
18
|
object: {
|
|
19
19
|
del<T>(object: T, path: string): void;
|
|
@@ -21,32 +21,16 @@ export declare class InternalUtils {
|
|
|
21
21
|
set<T>(object: T, path: string, value: unknown, doNotReplace?: boolean): void;
|
|
22
22
|
};
|
|
23
23
|
}
|
|
24
|
-
type SafeExecOptions
|
|
24
|
+
type SafeExecOptions = {
|
|
25
|
+
context?: TContext;
|
|
25
26
|
exec: () => TBlackHole;
|
|
26
|
-
labels: LABELS;
|
|
27
|
-
duration: Summary<Extract<keyof LABELS, string>>;
|
|
28
|
-
executions: Counter<Extract<keyof LABELS, string>>;
|
|
29
|
-
errors: Counter<Extract<keyof LABELS, string>>;
|
|
30
|
-
};
|
|
31
|
-
type BaseLabels = {
|
|
32
|
-
context: TContext;
|
|
33
|
-
/**
|
|
34
|
-
* ! if provided, specific metrics will be kept
|
|
35
|
-
*
|
|
36
|
-
* do not pass label if you do not want metrics to be kept, you may not want / need metrics to be kept on all instances
|
|
37
|
-
*
|
|
38
|
-
* - execution count
|
|
39
|
-
* - error count
|
|
40
|
-
* - summary of execution time
|
|
41
|
-
*/
|
|
42
|
-
label?: string;
|
|
43
27
|
};
|
|
44
28
|
type Phase = "bootstrap" | "teardown" | "running";
|
|
45
29
|
export declare class InternalDefinition {
|
|
46
30
|
/**
|
|
47
31
|
* Utility methods provided by boilerplate
|
|
48
32
|
*/
|
|
49
|
-
boilerplate: Pick<GetApis<typeof LIB_BOILERPLATE>, "configuration" | "
|
|
33
|
+
boilerplate: Pick<GetApis<typeof LIB_BOILERPLATE>, "configuration" | "logger">;
|
|
50
34
|
boot: {
|
|
51
35
|
/**
|
|
52
36
|
* Options that were passed into bootstrap
|
|
@@ -83,6 +67,6 @@ export declare class InternalDefinition {
|
|
|
83
67
|
startup: Date;
|
|
84
68
|
};
|
|
85
69
|
utils: InternalUtils;
|
|
86
|
-
safeExec<
|
|
70
|
+
safeExec<T>(options: (() => TBlackHole) | SafeExecOptions): Promise<T>;
|
|
87
71
|
}
|
|
88
72
|
export {};
|
|
@@ -1,10 +1,6 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
const tslib_1 = require("tslib");
|
|
5
|
-
const dayjs_1 = tslib_1.__importDefault(require("dayjs"));
|
|
6
|
-
const events_1 = require("events");
|
|
7
|
-
const __1 = require("..");
|
|
1
|
+
import dayjs from "dayjs";
|
|
2
|
+
import { EventEmitter } from "events";
|
|
3
|
+
import { ARRAY_OFFSET, DAY, FIRST, HOUR, is, MINUTE, NONE, SECOND, START, YEAR, } from "..";
|
|
8
4
|
const EVERYTHING_ELSE = 1;
|
|
9
5
|
const MONTHS = 12;
|
|
10
6
|
// TODO: probably should make this configurable
|
|
@@ -13,39 +9,48 @@ const formatter = new Intl.RelativeTimeFormat("en", {
|
|
|
13
9
|
style: "short",
|
|
14
10
|
});
|
|
15
11
|
// #MARK: misc
|
|
16
|
-
class InternalUtils {
|
|
12
|
+
export class InternalUtils {
|
|
17
13
|
/**
|
|
18
14
|
* The global eventemitter. All of `@digital-alchemy` will be wired through this
|
|
19
15
|
*
|
|
20
16
|
* **NOTE:** bootstrapping process will initialize this at boot, and cleanup at teardown.
|
|
21
17
|
* Making listener changes should only be done from within the context of service functions
|
|
22
18
|
*/
|
|
23
|
-
event
|
|
24
|
-
|
|
19
|
+
event;
|
|
20
|
+
constructor() {
|
|
21
|
+
this.event = new EventEmitter();
|
|
22
|
+
this.event.setMaxListeners(NONE);
|
|
23
|
+
}
|
|
24
|
+
titleCase(input) {
|
|
25
25
|
const matches = input.match(new RegExp("[a-z][A-Z]", "g"));
|
|
26
26
|
if (matches) {
|
|
27
|
-
matches.forEach(
|
|
27
|
+
matches.forEach(i => (input = input.replace(i, [...i].join(" "))));
|
|
28
28
|
}
|
|
29
29
|
return input
|
|
30
30
|
.split(new RegExp("[ _-]"))
|
|
31
|
-
.map(
|
|
31
|
+
.map(word => `${word.charAt(FIRST).toUpperCase()}${word.slice(EVERYTHING_ELSE)}`)
|
|
32
32
|
.join(" ");
|
|
33
33
|
}
|
|
34
34
|
relativeDate(pastDate, futureDate = new Date().toISOString()) {
|
|
35
35
|
const UNITS = new Map([
|
|
36
|
-
["year",
|
|
37
|
-
["month",
|
|
38
|
-
["day",
|
|
39
|
-
["hour",
|
|
40
|
-
["minute",
|
|
41
|
-
["second",
|
|
36
|
+
["year", YEAR],
|
|
37
|
+
["month", YEAR / MONTHS],
|
|
38
|
+
["day", DAY],
|
|
39
|
+
["hour", HOUR],
|
|
40
|
+
["minute", MINUTE],
|
|
41
|
+
["second", SECOND],
|
|
42
42
|
]);
|
|
43
|
-
|
|
44
|
-
|
|
43
|
+
const past = dayjs(pastDate);
|
|
44
|
+
if (!past.isValid()) {
|
|
45
|
+
throw new Error("invalid past date " + pastDate);
|
|
46
|
+
}
|
|
47
|
+
const future = dayjs(futureDate);
|
|
48
|
+
if (!future.isValid()) {
|
|
49
|
+
throw new Error("invalid future date " + pastDate);
|
|
45
50
|
}
|
|
46
|
-
const elapsed =
|
|
51
|
+
const elapsed = past.diff(future, "ms");
|
|
47
52
|
let out = "";
|
|
48
|
-
[...UNITS.keys()].some(
|
|
53
|
+
[...UNITS.keys()].some(unit => {
|
|
49
54
|
const cutoff = UNITS.get(unit);
|
|
50
55
|
if (Math.abs(elapsed) > cutoff || unit == "second") {
|
|
51
56
|
out = formatter.format(Math.round(elapsed / cutoff), unit);
|
|
@@ -60,7 +65,7 @@ class InternalUtils {
|
|
|
60
65
|
del(object, path) {
|
|
61
66
|
const keys = path.split(".");
|
|
62
67
|
let current = object; // Starting with the object as an unknown type
|
|
63
|
-
for (let i =
|
|
68
|
+
for (let i = START; i < keys.length; i++) {
|
|
64
69
|
const key = keys[i];
|
|
65
70
|
// Check if current is an object and not null
|
|
66
71
|
if (typeof current !== "object" || current === null) {
|
|
@@ -69,13 +74,12 @@ class InternalUtils {
|
|
|
69
74
|
}
|
|
70
75
|
const safeCurrent = current;
|
|
71
76
|
// If we're at the last key, attempt to delete the property
|
|
72
|
-
if (i === keys.length -
|
|
77
|
+
if (i === keys.length - ARRAY_OFFSET) {
|
|
73
78
|
delete safeCurrent[key]; // Delete without checking; non-existent keys are a no-op
|
|
74
79
|
}
|
|
75
80
|
else {
|
|
76
81
|
// For non-last keys, if the next level doesn't exist or isn't an object, stop processing
|
|
77
|
-
if (typeof safeCurrent[key] !== "object" ||
|
|
78
|
-
safeCurrent[key] === null) {
|
|
82
|
+
if (typeof safeCurrent[key] !== "object" || safeCurrent[key] === null) {
|
|
79
83
|
return;
|
|
80
84
|
}
|
|
81
85
|
// Move to the next level in the path
|
|
@@ -87,7 +91,7 @@ class InternalUtils {
|
|
|
87
91
|
const keys = path.split(".");
|
|
88
92
|
let current = object;
|
|
89
93
|
for (const key of keys) {
|
|
90
|
-
if (!
|
|
94
|
+
if (!is.object(current) || current === null || !(key in current)) {
|
|
91
95
|
return undefined;
|
|
92
96
|
}
|
|
93
97
|
current = current[key];
|
|
@@ -106,7 +110,7 @@ class InternalUtils {
|
|
|
106
110
|
// Safely cast current to Record<string, unknown> after the type guard
|
|
107
111
|
const safeCurrent = current;
|
|
108
112
|
// For the last key, attempt to set the value
|
|
109
|
-
if (i === keys.length -
|
|
113
|
+
if (i === keys.length - ARRAY_OFFSET) {
|
|
110
114
|
if (!doNotReplace || !(key in safeCurrent)) {
|
|
111
115
|
safeCurrent[key] = value;
|
|
112
116
|
}
|
|
@@ -125,9 +129,8 @@ class InternalUtils {
|
|
|
125
129
|
},
|
|
126
130
|
};
|
|
127
131
|
}
|
|
128
|
-
exports.InternalUtils = InternalUtils;
|
|
129
132
|
// #region Base definition
|
|
130
|
-
class InternalDefinition {
|
|
133
|
+
export class InternalDefinition {
|
|
131
134
|
/**
|
|
132
135
|
* Utility methods provided by boilerplate
|
|
133
136
|
*/
|
|
@@ -136,36 +139,21 @@ class InternalDefinition {
|
|
|
136
139
|
utils = new InternalUtils();
|
|
137
140
|
// #MARK: safeExec
|
|
138
141
|
async safeExec(options) {
|
|
139
|
-
|
|
140
|
-
|
|
142
|
+
const logger = this.boilerplate.logger.systemLogger;
|
|
143
|
+
const context = is.function(options) ? undefined : options?.context;
|
|
144
|
+
const exec = is.function(options) ? options : options?.exec;
|
|
145
|
+
if (!is.function(exec)) {
|
|
146
|
+
logger.error({ context }, `received non-function callback to [safeExec]`);
|
|
147
|
+
return undefined;
|
|
148
|
+
}
|
|
141
149
|
try {
|
|
142
|
-
|
|
143
|
-
await options();
|
|
144
|
-
return;
|
|
145
|
-
}
|
|
146
|
-
const opt = options;
|
|
147
|
-
labels = opt.labels;
|
|
148
|
-
errorMetric = opt.errors;
|
|
149
|
-
const { exec, duration, executions } = opt;
|
|
150
|
-
if (__1.is.empty(labels.label)) {
|
|
151
|
-
await exec();
|
|
152
|
-
return;
|
|
153
|
-
}
|
|
154
|
-
executions?.inc(labels);
|
|
155
|
-
const end = duration?.startTimer();
|
|
156
|
-
await exec();
|
|
157
|
-
if (end) {
|
|
158
|
-
end(labels);
|
|
159
|
-
}
|
|
150
|
+
return (await exec());
|
|
160
151
|
}
|
|
161
152
|
catch (error) {
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
errorMetric?.inc(labels);
|
|
165
|
-
}
|
|
153
|
+
logger.error({ context, error }, `callback threw error`);
|
|
154
|
+
return undefined;
|
|
166
155
|
}
|
|
167
156
|
}
|
|
168
157
|
}
|
|
169
|
-
exports.InternalDefinition = InternalDefinition;
|
|
170
158
|
// #endregion
|
|
171
159
|
//# sourceMappingURL=internal.extension.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"internal.extension.js","sourceRoot":"","sources":["../../src/services/internal.extension.ts"],"names":[],"mappings":"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"}
|
|
@@ -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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"}
|