@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,138 @@
|
|
|
1
|
+
import { v4 } from "uuid";
|
|
2
|
+
import { CreateLibrary, deepExtend, NONE, } from "../helpers";
|
|
3
|
+
import { CreateApplication, is } from "../services";
|
|
4
|
+
/**
|
|
5
|
+
* library optional
|
|
6
|
+
*/
|
|
7
|
+
export function TestRunner(options = {}) {
|
|
8
|
+
process.setMaxListeners(NONE);
|
|
9
|
+
let teardown;
|
|
10
|
+
let bootOptions = {};
|
|
11
|
+
const appendLibraries = new Map();
|
|
12
|
+
const appendServices = new Map();
|
|
13
|
+
const replaceLibrary = new Map();
|
|
14
|
+
const replaceService = new Map();
|
|
15
|
+
const runFirst = new Set();
|
|
16
|
+
function getLibraries(target) {
|
|
17
|
+
if (target && "depends" in target) {
|
|
18
|
+
return target.depends ?? [];
|
|
19
|
+
}
|
|
20
|
+
return target && "libraries" in target ? target.libraries : [];
|
|
21
|
+
}
|
|
22
|
+
function buildApp(name, target, test) {
|
|
23
|
+
const optional = target && "optionalDepends" in target ? target.optionalDepends : [];
|
|
24
|
+
const depends = [...getLibraries(target)];
|
|
25
|
+
const testLibrary = target
|
|
26
|
+
? CreateLibrary({
|
|
27
|
+
configuration: target.configuration,
|
|
28
|
+
depends,
|
|
29
|
+
name: target.name,
|
|
30
|
+
optionalDepends: optional,
|
|
31
|
+
priorityInit: target.priorityInit,
|
|
32
|
+
services: Object.fromEntries(Object.entries(target.services).map(([name, service]) => [
|
|
33
|
+
name,
|
|
34
|
+
replaceService.has(name) ? replaceService.get(name) : service,
|
|
35
|
+
])),
|
|
36
|
+
})
|
|
37
|
+
: undefined;
|
|
38
|
+
let LIB_RUN_FIRST;
|
|
39
|
+
if (!is.empty(runFirst)) {
|
|
40
|
+
LIB_RUN_FIRST = CreateLibrary({
|
|
41
|
+
depends: testLibrary ? [testLibrary, ...depends] : [...depends],
|
|
42
|
+
// @ts-expect-error nothing useful here
|
|
43
|
+
name: "run_first",
|
|
44
|
+
services: Object.fromEntries([...runFirst.values()].map(service => [service.name || v4(), service])),
|
|
45
|
+
});
|
|
46
|
+
}
|
|
47
|
+
const customLoader = bootOptions?.configLoader ? [bootOptions?.configLoader] : [];
|
|
48
|
+
const app = CreateApplication({
|
|
49
|
+
configuration: bootOptions?.module_config ?? {},
|
|
50
|
+
configurationLoaders: bootOptions?.loadConfigs ? undefined : customLoader,
|
|
51
|
+
libraries: [
|
|
52
|
+
...(is.empty(depends)
|
|
53
|
+
? []
|
|
54
|
+
: depends.map(i => (replaceLibrary.has(i.name) ? replaceLibrary.get(i.name) : i))),
|
|
55
|
+
...(testLibrary ? [testLibrary] : []),
|
|
56
|
+
],
|
|
57
|
+
// @ts-expect-error it's life
|
|
58
|
+
name,
|
|
59
|
+
services: { test },
|
|
60
|
+
});
|
|
61
|
+
return { LIB_RUN_FIRST, app };
|
|
62
|
+
}
|
|
63
|
+
const libraryTestRunner = {
|
|
64
|
+
appendLibrary(library) {
|
|
65
|
+
appendLibraries.set(library.name, library);
|
|
66
|
+
return libraryTestRunner;
|
|
67
|
+
},
|
|
68
|
+
appendService(service, name) {
|
|
69
|
+
if (is.empty(name) && !is.empty(service.name)) {
|
|
70
|
+
name = service.name;
|
|
71
|
+
}
|
|
72
|
+
appendServices.set(name || v4(), service);
|
|
73
|
+
return libraryTestRunner;
|
|
74
|
+
},
|
|
75
|
+
bootLibrariesFirst() {
|
|
76
|
+
bootOptions.bootLibrariesFirst = true;
|
|
77
|
+
return libraryTestRunner;
|
|
78
|
+
},
|
|
79
|
+
configure(configuration) {
|
|
80
|
+
bootOptions = deepExtend(bootOptions, { configuration });
|
|
81
|
+
return libraryTestRunner;
|
|
82
|
+
},
|
|
83
|
+
emitLogs(LOG_LEVEL) {
|
|
84
|
+
libraryTestRunner.setOptions({ emitLogs: true });
|
|
85
|
+
if (!is.empty({ level: LOG_LEVEL })) {
|
|
86
|
+
libraryTestRunner.configure({ boilerplate: { LOG_LEVEL } });
|
|
87
|
+
}
|
|
88
|
+
return libraryTestRunner;
|
|
89
|
+
},
|
|
90
|
+
replaceLibrary(name, library) {
|
|
91
|
+
replaceLibrary.set(name, library);
|
|
92
|
+
return libraryTestRunner;
|
|
93
|
+
},
|
|
94
|
+
replaceService(name, service) {
|
|
95
|
+
replaceService.set(name, service);
|
|
96
|
+
return libraryTestRunner;
|
|
97
|
+
},
|
|
98
|
+
async run(test) {
|
|
99
|
+
const { app, LIB_RUN_FIRST } = buildApp(options?.name ?? "testing", options?.target, test);
|
|
100
|
+
await app.bootstrap({
|
|
101
|
+
appendLibrary: [...appendLibraries.values(), ...(LIB_RUN_FIRST ? [LIB_RUN_FIRST] : [])],
|
|
102
|
+
appendService: Object.fromEntries(appendServices.entries()),
|
|
103
|
+
bootLibrariesFirst: !!bootOptions?.bootLibrariesFirst,
|
|
104
|
+
configuration: bootOptions?.configuration,
|
|
105
|
+
customLogger: bootOptions?.emitLogs
|
|
106
|
+
? undefined
|
|
107
|
+
: (bootOptions?.customLogger ?? {
|
|
108
|
+
debug: jest.fn(),
|
|
109
|
+
error: jest.fn(),
|
|
110
|
+
fatal: jest.fn(),
|
|
111
|
+
info: jest.fn(),
|
|
112
|
+
trace: jest.fn(),
|
|
113
|
+
warn: jest.fn(),
|
|
114
|
+
}),
|
|
115
|
+
loggerOptions: bootOptions?.loggerOptions,
|
|
116
|
+
});
|
|
117
|
+
teardown = async () => await app.teardown();
|
|
118
|
+
return app;
|
|
119
|
+
},
|
|
120
|
+
setOptions(options) {
|
|
121
|
+
bootOptions = deepExtend(bootOptions, options);
|
|
122
|
+
return libraryTestRunner;
|
|
123
|
+
},
|
|
124
|
+
setup(service) {
|
|
125
|
+
runFirst.add(service);
|
|
126
|
+
return libraryTestRunner;
|
|
127
|
+
},
|
|
128
|
+
async teardown() {
|
|
129
|
+
if (teardown) {
|
|
130
|
+
await teardown();
|
|
131
|
+
teardown = undefined;
|
|
132
|
+
}
|
|
133
|
+
},
|
|
134
|
+
type: "test",
|
|
135
|
+
};
|
|
136
|
+
return libraryTestRunner;
|
|
137
|
+
}
|
|
138
|
+
//# sourceMappingURL=test-module.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"test-module.js","sourceRoot":"","sources":["../../src/testing/test-module.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,EAAE,EAAE,MAAM,MAAM,CAAC;AAE1B,OAAO,EAGL,aAAa,EACb,UAAU,EAKV,IAAI,GAOL,MAAM,YAAY,CAAC;AACpB,OAAO,EAAE,iBAAiB,EAAE,EAAE,EAAE,MAAM,aAAa,CAAC;AAyIpD;;GAEG;AACH,MAAM,UAAU,UAAU,CACxB,UAA6C,EAAE;IAE/C,OAAO,CAAC,eAAe,CAAC,IAAI,CAAC,CAAC;IAC9B,IAAI,QAA6B,CAAC;IAClC,IAAI,WAAW,GAA4B,EAAE,CAAC;IAC9C,MAAM,eAAe,GAAG,IAAI,GAAG,EAAoB,CAAC;IACpD,MAAM,cAAc,GAAG,IAAI,GAAG,EAA2B,CAAC;IAC1D,MAAM,cAAc,GAAG,IAAI,GAAG,EAAoB,CAAC;IACnD,MAAM,cAAc,GAAG,IAAI,GAAG,EAA2B,CAAC;IAC1D,MAAM,QAAQ,GAAG,IAAI,GAAG,EAAmB,CAAC;IAE5C,SAAS,YAAY,CAAC,MAA6D;QACjF,IAAI,MAAM,IAAI,SAAS,IAAI,MAAM,EAAE,CAAC;YAClC,OAAO,MAAM,CAAC,OAAO,IAAI,EAAE,CAAC;QAC9B,CAAC;QACD,OAAO,MAAM,IAAI,WAAW,IAAI,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC;IACjE,CAAC;IAED,SAAS,QAAQ,CACf,IAAY,EACZ,MAA6D,EAC7D,IAAqB;QAErB,MAAM,QAAQ,GAAG,MAAM,IAAI,iBAAiB,IAAI,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,eAAe,CAAC,CAAC,CAAC,EAAE,CAAC;QACrF,MAAM,OAAO,GAAG,CAAC,GAAG,YAAY,CAAC,MAAM,CAAC,CAAC,CAAC;QAE1C,MAAM,WAAW,GAAG,MAAM;YACxB,CAAC,CAAC,aAAa,CAAC;gBACZ,aAAa,EAAE,MAAM,CAAC,aAAa;gBACnC,OAAO;gBACP,IAAI,EAAE,MAAM,CAAC,IAAI;gBACjB,eAAe,EAAE,QAAQ;gBACzB,YAAY,EAAE,MAAM,CAAC,YAAY;gBACjC,QAAQ,EAAE,MAAM,CAAC,WAAW,CAC1B,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,EAAE,OAAO,CAAC,EAAE,EAAE,CAAC;oBACvD,IAAI;oBACJ,cAAc,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,cAAc,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,OAAO;iBAC9D,CAAC,CACE;aACP,CAAC;YACJ,CAAC,CAAC,SAAS,CAAC;QACd,IAAI,aAAuB,CAAC;QAC5B,IAAI,CAAC,EAAE,CAAC,KAAK,CAAC,QAAQ,CAAC,EAAE,CAAC;YACxB,aAAa,GAAG,aAAa,CAAC;gBAC5B,OAAO,EAAE,WAAW,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC;gBAC/D,uCAAuC;gBACvC,IAAI,EAAE,WAAW;gBACjB,QAAQ,EAAE,MAAM,CAAC,WAAW,CAC1B,CAAC,GAAG,QAAQ,CAAC,MAAM,EAAE,CAAC,CAAC,GAAG,CACxB,OAAO,CAAC,EAAE,CAAC,CAAC,OAAO,CAAC,IAAI,IAAI,EAAE,EAAE,EAAE,OAAO,CAA8B,CACxE,CACY;aAChB,CAAC,CAAC;QACL,CAAC;QAED,MAAM,YAAY,GAAG,WAAW,EAAE,YAAY,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,YAAY,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;QAClF,MAAM,GAAG,GAAG,iBAAiB,CAAC;YAC5B,aAAa,EAAE,WAAW,EAAE,aAAa,IAAI,EAAE;YAC/C,oBAAoB,EAAE,WAAW,EAAE,WAAW,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,YAAY;YACzE,SAAS,EAAE;gBACT,GAAG,CAAC,EAAE,CAAC,KAAK,CAAC,OAAO,CAAC;oBACnB,CAAC,CAAC,EAAE;oBACJ,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,cAAc,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,cAAc,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;gBACpF,GAAG,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;aACtC;YACD,6BAA6B;YAC7B,IAAI;YACJ,QAAQ,EAAE,EAAE,IAAI,EAAE;SACnB,CAAC,CAAC;QAEH,OAAO,EAAE,aAAa,EAAE,GAAG,EAAE,CAAC;IAChC,CAAC;IAED,MAAM,iBAAiB,GAAsB;QAC3C,aAAa,CAAC,OAAiB;YAC7B,eAAe,CAAC,GAAG,CAAC,OAAO,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;YAC3C,OAAO,iBAAiB,CAAC;QAC3B,CAAC;QACD,aAAa,CAAC,OAAwB,EAAE,IAAa;YACnD,IAAI,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC;gBAC9C,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC;YACtB,CAAC;YACD,cAAc,CAAC,GAAG,CAAC,IAAI,IAAI,EAAE,EAAE,EAAE,OAAO,CAAC,CAAC;YAC1C,OAAO,iBAAiB,CAAC;QAC3B,CAAC;QACD,kBAAkB;YAChB,WAAW,CAAC,kBAAkB,GAAG,IAAI,CAAC;YACtC,OAAO,iBAAiB,CAAC;QAC3B,CAAC;QACD,SAAS,CAAC,aAAmC;YAC3C,WAAW,GAAG,UAAU,CAAC,WAAW,EAAE,EAAE,aAAa,EAAE,CAAC,CAAC;YACzD,OAAO,iBAAiB,CAAC;QAC3B,CAAC;QACD,QAAQ,CAAC,SAA0B;YACjC,iBAAiB,CAAC,UAAU,CAAC,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC;YACjD,IAAI,CAAC,EAAE,CAAC,KAAK,CAAC,EAAE,KAAK,EAAE,SAAS,EAAE,CAAC,EAAE,CAAC;gBACpC,iBAAiB,CAAC,SAAS,CAAC,EAAE,WAAW,EAAE,EAAE,SAAS,EAAE,EAAE,CAAC,CAAC;YAC9D,CAAC;YACD,OAAO,iBAAiB,CAAC;QAC3B,CAAC;QACD,cAAc,CAAC,IAAY,EAAE,OAAiB;YAC5C,cAAc,CAAC,GAAG,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;YAClC,OAAO,iBAAiB,CAAC;QAC3B,CAAC;QACD,cAAc,CAAC,IAAY,EAAE,OAAwB;YACnD,cAAc,CAAC,GAAG,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;YAClC,OAAO,iBAAiB,CAAC;QAC3B,CAAC;QACD,KAAK,CAAC,GAAG,CAAC,IAAqB;YAC7B,MAAM,EAAE,GAAG,EAAE,aAAa,EAAE,GAAG,QAAQ,CAAC,OAAO,EAAE,IAAI,IAAI,SAAS,EAAE,OAAO,EAAE,MAAM,EAAE,IAAI,CAAC,CAAC;YAC3F,MAAM,GAAG,CAAC,SAAS,CAAC;gBAClB,aAAa,EAAE,CAAC,GAAG,eAAe,CAAC,MAAM,EAAE,EAAE,GAAG,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;gBACvF,aAAa,EAAE,MAAM,CAAC,WAAW,CAAC,cAAc,CAAC,OAAO,EAAE,CAAC;gBAC3D,kBAAkB,EAAE,CAAC,CAAC,WAAW,EAAE,kBAAkB;gBACrD,aAAa,EAAE,WAAW,EAAE,aAAa;gBACzC,YAAY,EAAE,WAAW,EAAE,QAAQ;oBACjC,CAAC,CAAC,SAAS;oBACX,CAAC,CAAC,CAAC,WAAW,EAAE,YAAY,IAAI;wBAC5B,KAAK,EAAE,IAAI,CAAC,EAAE,EAAE;wBAChB,KAAK,EAAE,IAAI,CAAC,EAAE,EAAE;wBAChB,KAAK,EAAE,IAAI,CAAC,EAAE,EAAE;wBAChB,IAAI,EAAE,IAAI,CAAC,EAAE,EAAE;wBACf,KAAK,EAAE,IAAI,CAAC,EAAE,EAAE;wBAChB,IAAI,EAAE,IAAI,CAAC,EAAE,EAAE;qBAChB,CAAC;gBACN,aAAa,EAAE,WAAW,EAAE,aAAa;aAC1C,CAAC,CAAC;YAEH,QAAQ,GAAG,KAAK,IAAI,EAAE,CAAC,MAAM,GAAG,CAAC,QAAQ,EAAE,CAAC;YAC5C,OAAO,GAAG,CAAC;QACb,CAAC;QACD,UAAU,CAAC,OAAgC;YACzC,WAAW,GAAG,UAAU,CAAC,WAAW,EAAE,OAAO,CAAC,CAAC;YAC/C,OAAO,iBAAiB,CAAC;QAC3B,CAAC;QACD,KAAK,CAAC,OAAwB;YAC5B,QAAQ,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;YACtB,OAAO,iBAAiB,CAAC;QAC3B,CAAC;QACD,KAAK,CAAC,QAAQ;YACZ,IAAI,QAAQ,EAAE,CAAC;gBACb,MAAM,QAAQ,EAAE,CAAC;gBACjB,QAAQ,GAAG,SAAS,CAAC;YACvB,CAAC;QACH,CAAC;QACD,IAAI,EAAE,MAAM;KACb,CAAC;IACF,OAAO,iBAAiB,CAAC;AAC3B,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,10 +1,11 @@
|
|
|
1
1
|
{
|
|
2
|
+
"type": "module",
|
|
2
3
|
"name": "@digital-alchemy/core",
|
|
3
4
|
"description": "Application wiring, configuration, and boilerplate utilities",
|
|
4
5
|
"repository": {
|
|
5
6
|
"url": "git+https://github.com/Digital-Alchemy-TS/core"
|
|
6
7
|
},
|
|
7
|
-
"version": "24.
|
|
8
|
+
"version": "24.9.3",
|
|
8
9
|
"author": {
|
|
9
10
|
"url": "https://github.com/zoe-codez",
|
|
10
11
|
"name": "Zoe Codez"
|
|
@@ -33,14 +34,11 @@
|
|
|
33
34
|
{
|
|
34
35
|
"url": "https://github.com/sponsors/zoe-codez",
|
|
35
36
|
"type": "GitHub"
|
|
36
|
-
},
|
|
37
|
-
{
|
|
38
|
-
"url": "https://ko-fi.com/zoe_codez",
|
|
39
|
-
"type": "ko-fi"
|
|
40
37
|
}
|
|
41
38
|
],
|
|
42
39
|
"exports": {
|
|
43
|
-
".": "./dist/index.js"
|
|
40
|
+
".": "./dist/index.js",
|
|
41
|
+
"./testing": "./dist/testing/helpers/index.js"
|
|
44
42
|
},
|
|
45
43
|
"files": [
|
|
46
44
|
"dist/**/*"
|
|
@@ -48,56 +46,68 @@
|
|
|
48
46
|
"engines": {
|
|
49
47
|
"node": ">=20"
|
|
50
48
|
},
|
|
51
|
-
"
|
|
52
|
-
"chalk": "^5
|
|
53
|
-
"dayjs": "^1
|
|
54
|
-
"dotenv": "^16
|
|
55
|
-
"ini": "^4
|
|
56
|
-
"js-yaml": "^4
|
|
57
|
-
"minimist": "^1
|
|
58
|
-
"node-
|
|
59
|
-
"
|
|
60
|
-
"prom-client": "^15.1.2"
|
|
61
|
-
},
|
|
62
|
-
"optionalDependencies": {
|
|
63
|
-
"redis": "^4.6.14"
|
|
49
|
+
"peerDependencies": {
|
|
50
|
+
"chalk": "^5",
|
|
51
|
+
"dayjs": "^1",
|
|
52
|
+
"dotenv": "^16",
|
|
53
|
+
"ini": "^4",
|
|
54
|
+
"js-yaml": "^4",
|
|
55
|
+
"minimist": "^1",
|
|
56
|
+
"node-cron": "^3",
|
|
57
|
+
"uuid": "*"
|
|
64
58
|
},
|
|
65
59
|
"devDependencies": {
|
|
66
|
-
"@cspell/eslint-plugin": "^8.
|
|
67
|
-
"@
|
|
60
|
+
"@cspell/eslint-plugin": "^8.14.4",
|
|
61
|
+
"@eslint/compat": "^1.1.1",
|
|
62
|
+
"@eslint/eslintrc": "^3.1.0",
|
|
63
|
+
"@eslint/js": "^9.10.0",
|
|
64
|
+
"@faker-js/faker": "^9.0.1",
|
|
65
|
+
"@jest/globals": "^29.7.0",
|
|
68
66
|
"@types/dotenv": "^8.2.0",
|
|
69
67
|
"@types/ini": "^4.1.1",
|
|
70
|
-
"@types/jest": "^29.5.
|
|
68
|
+
"@types/jest": "^29.5.13",
|
|
71
69
|
"@types/js-yaml": "^4.0.9",
|
|
72
70
|
"@types/minimist": "^1.2.5",
|
|
73
|
-
"@types/node": "^
|
|
71
|
+
"@types/node": "^22.5.5",
|
|
74
72
|
"@types/node-cron": "^3.0.11",
|
|
75
73
|
"@types/semver": "^7.5.8",
|
|
76
74
|
"@types/sinonjs__fake-timers": "^8.1.5",
|
|
77
|
-
"@
|
|
78
|
-
"@typescript-eslint/
|
|
79
|
-
"eslint": "8.
|
|
75
|
+
"@types/uuid": "^10.0.0",
|
|
76
|
+
"@typescript-eslint/eslint-plugin": "8.6.0",
|
|
77
|
+
"@typescript-eslint/parser": "8.6.0",
|
|
78
|
+
"chalk": "^5.3.0",
|
|
79
|
+
"dayjs": "^1.11.13",
|
|
80
|
+
"dotenv": "^16.4.5",
|
|
81
|
+
"eslint": "9.10.0",
|
|
80
82
|
"eslint-config-prettier": "9.1.0",
|
|
81
|
-
"eslint-plugin-import": "^2.
|
|
82
|
-
"eslint-plugin-jsonc": "^2.
|
|
83
|
-
"eslint-plugin-no-unsanitized": "^4.0
|
|
84
|
-
"eslint-plugin-prettier": "^5.1
|
|
85
|
-
"eslint-plugin-security": "^
|
|
86
|
-
"eslint-plugin-simple-import-sort": "^12.
|
|
87
|
-
"eslint-plugin-sonarjs": "^0.
|
|
83
|
+
"eslint-plugin-import": "^2.30.0",
|
|
84
|
+
"eslint-plugin-jsonc": "^2.16.0",
|
|
85
|
+
"eslint-plugin-no-unsanitized": "^4.1.0",
|
|
86
|
+
"eslint-plugin-prettier": "^5.2.1",
|
|
87
|
+
"eslint-plugin-security": "^3.0.1",
|
|
88
|
+
"eslint-plugin-simple-import-sort": "^12.1.1",
|
|
89
|
+
"eslint-plugin-sonarjs": "^2.0.2",
|
|
88
90
|
"eslint-plugin-sort-keys-fix": "^1.1.2",
|
|
89
|
-
"eslint-plugin-unicorn": "^
|
|
91
|
+
"eslint-plugin-unicorn": "^55.0.0",
|
|
92
|
+
"globals": "^15.9.0",
|
|
93
|
+
"ini": "^5.0.0",
|
|
90
94
|
"jest": "^29.7.0",
|
|
91
95
|
"jest-environment-node": "^29.7.0",
|
|
92
|
-
"
|
|
93
|
-
"
|
|
94
|
-
"
|
|
95
|
-
"
|
|
96
|
-
"
|
|
97
|
-
"
|
|
98
|
-
"
|
|
96
|
+
"js-yaml": "^4.1.0",
|
|
97
|
+
"minimist": "^1.2.8",
|
|
98
|
+
"node-cron": "^3.0.3",
|
|
99
|
+
"prettier": "^3.3.3",
|
|
100
|
+
"ts-jest": "^29.2.5",
|
|
101
|
+
"tslib": "^2.7.0",
|
|
102
|
+
"tsx": "^4.19.1",
|
|
103
|
+
"type-fest": "^4.26.1",
|
|
104
|
+
"typescript": "^5.6.2",
|
|
105
|
+
"uuid": "^10.0.0"
|
|
99
106
|
},
|
|
100
107
|
"jest": {
|
|
108
|
+
"extensionsToTreatAsEsm": [
|
|
109
|
+
".ts"
|
|
110
|
+
],
|
|
101
111
|
"collectCoverage": true,
|
|
102
112
|
"coverageReporters": [
|
|
103
113
|
"text",
|
|
@@ -117,14 +127,18 @@
|
|
|
117
127
|
"testMatch": [
|
|
118
128
|
"**/?(*.)+(spec|test).ts"
|
|
119
129
|
],
|
|
130
|
+
"setupFiles": [
|
|
131
|
+
"<rootDir>/testing/setup.ts"
|
|
132
|
+
],
|
|
120
133
|
"transform": {
|
|
121
134
|
"^.+\\.ts$": [
|
|
122
135
|
"ts-jest",
|
|
123
136
|
{
|
|
124
|
-
"tsconfig": "tsconfig.spec.json"
|
|
137
|
+
"tsconfig": "tsconfig.spec.json",
|
|
138
|
+
"useESM": true
|
|
125
139
|
}
|
|
126
140
|
]
|
|
127
141
|
}
|
|
128
142
|
},
|
|
129
|
-
"packageManager": "yarn@4.
|
|
143
|
+
"packageManager": "yarn@4.5.0"
|
|
130
144
|
}
|
|
@@ -1,90 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.Cache = Cache;
|
|
4
|
-
const __1 = require("..");
|
|
5
|
-
const _1 = require(".");
|
|
6
|
-
function Cache({ logger, lifecycle, config, internal, }) {
|
|
7
|
-
let client;
|
|
8
|
-
const prefix = () => config.boilerplate.CACHE_PREFIX || internal.boot.application.name;
|
|
9
|
-
function fullKeyName(key) {
|
|
10
|
-
return `${config.boilerplate.CACHE_PREFIX}${key}`;
|
|
11
|
-
}
|
|
12
|
-
// #MARK: onPostConfig
|
|
13
|
-
lifecycle.onPostConfig(async () => {
|
|
14
|
-
if (client) {
|
|
15
|
-
return;
|
|
16
|
-
}
|
|
17
|
-
logger.trace({ name: "onPostConfig", provider: config.boilerplate.CACHE_PROVIDER }, `init cache`);
|
|
18
|
-
if (config.boilerplate.CACHE_PROVIDER === "redis") {
|
|
19
|
-
client = await (0, __1.createRedisDriver)({ config, internal, lifecycle, logger });
|
|
20
|
-
return;
|
|
21
|
-
}
|
|
22
|
-
client = await (0, __1.createMemoryDriver)({ config, internal, lifecycle, logger });
|
|
23
|
-
});
|
|
24
|
-
// #MARK: Return object
|
|
25
|
-
return {
|
|
26
|
-
[Symbol.for("cache_logger")]: logger,
|
|
27
|
-
del: async (key) => {
|
|
28
|
-
try {
|
|
29
|
-
const fullKey = fullKeyName(key);
|
|
30
|
-
await client.del(fullKey);
|
|
31
|
-
internal.boilerplate.metrics.CACHE_DELETE_OPERATIONS_TOTAL.inc({
|
|
32
|
-
key: fullKey,
|
|
33
|
-
prefix: prefix(),
|
|
34
|
-
});
|
|
35
|
-
}
|
|
36
|
-
catch (error) {
|
|
37
|
-
internal.boilerplate.metrics.CACHE_DRIVER_ERROR_COUNT.labels("del").inc();
|
|
38
|
-
logger.error({ error, name: "del" }, `cache error`);
|
|
39
|
-
}
|
|
40
|
-
},
|
|
41
|
-
get: async (key, defaultValue) => {
|
|
42
|
-
try {
|
|
43
|
-
const fullKey = fullKeyName(key);
|
|
44
|
-
const result = await client.get(fullKey);
|
|
45
|
-
internal.boilerplate.metrics.CACHE_GET_OPERATIONS_TOTAL.inc({
|
|
46
|
-
hit_miss: _1.is.undefined(result) ? "miss" : "hit",
|
|
47
|
-
key: fullKey,
|
|
48
|
-
prefix: prefix(),
|
|
49
|
-
});
|
|
50
|
-
return _1.is.undefined(result) ? defaultValue : result;
|
|
51
|
-
}
|
|
52
|
-
catch (error) {
|
|
53
|
-
logger.warn({ defaultValue, error, key, name: "get" }, `cache error`);
|
|
54
|
-
internal.boilerplate.metrics.CACHE_DRIVER_ERROR_COUNT.labels("get").inc();
|
|
55
|
-
return defaultValue;
|
|
56
|
-
}
|
|
57
|
-
},
|
|
58
|
-
keys: async (pattern = "") => {
|
|
59
|
-
try {
|
|
60
|
-
const fullPattern = fullKeyName(pattern);
|
|
61
|
-
const keys = await client.keys(fullPattern);
|
|
62
|
-
return keys.map((key) => key.slice(Math.max(__1.NONE, prefix().length)));
|
|
63
|
-
}
|
|
64
|
-
catch (error) {
|
|
65
|
-
internal.boilerplate.metrics.CACHE_DRIVER_ERROR_COUNT.labels("keys").inc();
|
|
66
|
-
logger.warn({ error, name: "keys" }, `cache error`);
|
|
67
|
-
return [];
|
|
68
|
-
}
|
|
69
|
-
},
|
|
70
|
-
set: async (key, value, ttl = config.boilerplate.CACHE_TTL) => {
|
|
71
|
-
try {
|
|
72
|
-
const fullKey = fullKeyName(key);
|
|
73
|
-
await client.set(fullKey, value, ttl);
|
|
74
|
-
internal.boilerplate.metrics.CACHE_SET_OPERATIONS_TOTAL.inc({
|
|
75
|
-
key: fullKey,
|
|
76
|
-
prefix: config.boilerplate.CACHE_PREFIX,
|
|
77
|
-
});
|
|
78
|
-
}
|
|
79
|
-
catch (error) {
|
|
80
|
-
internal.boilerplate.metrics.CACHE_DRIVER_ERROR_COUNT.labels("set").inc();
|
|
81
|
-
logger.error({ error, name: "set" }, `cache error`);
|
|
82
|
-
}
|
|
83
|
-
},
|
|
84
|
-
setClient: (newClient) => {
|
|
85
|
-
logger.debug({ name: "setClient" }, `using new cache driver`);
|
|
86
|
-
client = newClient;
|
|
87
|
-
},
|
|
88
|
-
};
|
|
89
|
-
}
|
|
90
|
-
//# sourceMappingURL=cache.extension.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"cache.extension.js","sourceRoot":"","sources":["../../src/extensions/cache.extension.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,52 +0,0 @@
|
|
|
1
|
-
import { ApplicationDefinition, CodeConfigDefinition, KnownConfigs, OptionalModuleConfiguration, PartialConfiguration, ServiceMap, TBlackHole, TInjectedConfig, TServiceParams } from "..";
|
|
2
|
-
export declare const INITIALIZE: unique symbol;
|
|
3
|
-
export declare const LOAD_PROJECT: unique symbol;
|
|
4
|
-
export declare const EVENT_CONFIGURATION_UPDATED = "event_configuration_updated";
|
|
5
|
-
export declare const INJECTED_DEFINITIONS: unique symbol;
|
|
6
|
-
export type ConfigManager = ReturnType<typeof Configuration>;
|
|
7
|
-
export declare function Configuration({ context, event, lifecycle, internal, logger, }: TServiceParams): {
|
|
8
|
-
[INITIALIZE]: <S extends ServiceMap, C extends OptionalModuleConfiguration>(application: ApplicationDefinition<S, C>) => Promise<string | never>;
|
|
9
|
-
[INJECTED_DEFINITIONS]: () => TInjectedConfig;
|
|
10
|
-
[LOAD_PROJECT]: (library: string, definitions: CodeConfigDefinition) => KnownConfigs;
|
|
11
|
-
/**
|
|
12
|
-
* retrieve the metadata that was originally used to define the configs
|
|
13
|
-
*/
|
|
14
|
-
getDefinitions: () => KnownConfigs;
|
|
15
|
-
/**
|
|
16
|
-
* take a configuration object, and deep merge values
|
|
17
|
-
*
|
|
18
|
-
* intended for initial loading workflows
|
|
19
|
-
*/
|
|
20
|
-
merge: (merge: Partial<PartialConfiguration>) => Partial<{
|
|
21
|
-
boilerplate: Partial<{
|
|
22
|
-
CACHE_PREFIX: string;
|
|
23
|
-
CACHE_PROVIDER: "redis" | "memory";
|
|
24
|
-
CACHE_TTL: number;
|
|
25
|
-
CONFIG: string;
|
|
26
|
-
LOG_LEVEL: "debug" | "error" | "info" | "trace" | "warn" | "silent";
|
|
27
|
-
REDIS_URL: string;
|
|
28
|
-
}>;
|
|
29
|
-
}> & Partial<Partial<{
|
|
30
|
-
boilerplate: Partial<{
|
|
31
|
-
CACHE_PREFIX: string;
|
|
32
|
-
CACHE_PROVIDER: "redis" | "memory";
|
|
33
|
-
CACHE_TTL: number;
|
|
34
|
-
CONFIG: string;
|
|
35
|
-
LOG_LEVEL: "debug" | "error" | "info" | "trace" | "warn" | "silent";
|
|
36
|
-
REDIS_URL: string;
|
|
37
|
-
}>;
|
|
38
|
-
}>>;
|
|
39
|
-
/**
|
|
40
|
-
* Not a replacement for `onPostConfig`
|
|
41
|
-
*
|
|
42
|
-
* Only receives updates from `config.set` calls
|
|
43
|
-
*/
|
|
44
|
-
onUpdate<Project extends keyof TInjectedConfig, Property extends Extract<keyof TInjectedConfig[Project], string>>(callback: (project: Project, property: Property) => TBlackHole, project?: Project, property?: Property): void;
|
|
45
|
-
/**
|
|
46
|
-
* type friendly method of updating a single configuration
|
|
47
|
-
*
|
|
48
|
-
* emits update event
|
|
49
|
-
*/
|
|
50
|
-
set: TSetConfig;
|
|
51
|
-
};
|
|
52
|
-
export type TSetConfig = <Project extends keyof TInjectedConfig, Property extends keyof TInjectedConfig[Project]>(project: Project, property: Property, value: TInjectedConfig[Project][Property]) => void;
|
|
@@ -1,131 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.INJECTED_DEFINITIONS = exports.EVENT_CONFIGURATION_UPDATED = exports.LOAD_PROJECT = exports.INITIALIZE = void 0;
|
|
4
|
-
exports.Configuration = Configuration;
|
|
5
|
-
const __1 = require("..");
|
|
6
|
-
const _1 = require(".");
|
|
7
|
-
exports.INITIALIZE = Symbol.for("initialize");
|
|
8
|
-
exports.LOAD_PROJECT = Symbol.for("load-project");
|
|
9
|
-
exports.EVENT_CONFIGURATION_UPDATED = "event_configuration_updated";
|
|
10
|
-
exports.INJECTED_DEFINITIONS = Symbol.for("injected-config");
|
|
11
|
-
function Configuration({ context, event, lifecycle, internal,
|
|
12
|
-
// ! THIS DOES NOT EXIST BEFORE PRE INIT
|
|
13
|
-
logger, }) {
|
|
14
|
-
// 🙊 but that's illegal!
|
|
15
|
-
lifecycle.onPreInit(() => (logger = internal.boilerplate.logger.context(context)));
|
|
16
|
-
const configuration = {};
|
|
17
|
-
const configDefinitions = new Map();
|
|
18
|
-
//#region Methods
|
|
19
|
-
function InjectedDefinitions() {
|
|
20
|
-
return new Proxy({}, {
|
|
21
|
-
get(_, project) {
|
|
22
|
-
return internal.utils.object.get(configuration, project) ?? {};
|
|
23
|
-
},
|
|
24
|
-
getOwnPropertyDescriptor(_, project) {
|
|
25
|
-
return {
|
|
26
|
-
configurable: false,
|
|
27
|
-
enumerable: true,
|
|
28
|
-
value: internal.utils.object.get(configuration, project) ?? {},
|
|
29
|
-
writable: false,
|
|
30
|
-
};
|
|
31
|
-
},
|
|
32
|
-
ownKeys() {
|
|
33
|
-
return Object.keys(configuration);
|
|
34
|
-
},
|
|
35
|
-
});
|
|
36
|
-
}
|
|
37
|
-
function SetConfig(project, property, value) {
|
|
38
|
-
internal.utils.object.set(configuration, [project, property].join("."), value);
|
|
39
|
-
// in case anyone needs a hook
|
|
40
|
-
event.emit(exports.EVENT_CONFIGURATION_UPDATED, project, property);
|
|
41
|
-
}
|
|
42
|
-
// #MARK: Initialize
|
|
43
|
-
async function Initialize(application) {
|
|
44
|
-
const configLoaders = internal.boot.application.configurationLoaders ??
|
|
45
|
-
[__1.ConfigLoaderEnvironment, __1.ConfigLoaderFile];
|
|
46
|
-
const start = Date.now();
|
|
47
|
-
// * sanity check
|
|
48
|
-
if (!application) {
|
|
49
|
-
throw new __1.BootstrapException(context, "NO_APPLICATION", "Cannot load configuration without having defined an application");
|
|
50
|
-
}
|
|
51
|
-
// * were configs disabled?
|
|
52
|
-
if (_1.is.empty(configLoaders)) {
|
|
53
|
-
logger.warn({ name: Initialize }, `no config loaders defined`);
|
|
54
|
-
return `${Date.now() - start}ms`;
|
|
55
|
-
}
|
|
56
|
-
// * load!
|
|
57
|
-
await (0, __1.eachSeries)(configLoaders, async (loader) => {
|
|
58
|
-
const merge = await loader({
|
|
59
|
-
application,
|
|
60
|
-
configs: configDefinitions,
|
|
61
|
-
internal,
|
|
62
|
-
logger,
|
|
63
|
-
});
|
|
64
|
-
(0, __1.deepExtend)(configuration, merge);
|
|
65
|
-
});
|
|
66
|
-
// * validate
|
|
67
|
-
// - ensure all required properties have been defined
|
|
68
|
-
configDefinitions.forEach((definitions, project) => {
|
|
69
|
-
Object.keys(definitions).forEach((key) => {
|
|
70
|
-
const config = [project, key].join(".");
|
|
71
|
-
if (definitions[key].required &&
|
|
72
|
-
_1.is.undefined(internal.utils.object.get(configuration, config))) {
|
|
73
|
-
// ruh roh
|
|
74
|
-
throw new __1.BootstrapException(context, "REQUIRED_CONFIGURATION_MISSING", `Configuration property ${config} is not defined`);
|
|
75
|
-
}
|
|
76
|
-
});
|
|
77
|
-
});
|
|
78
|
-
return `${Date.now() - start}ms`;
|
|
79
|
-
}
|
|
80
|
-
function Merge(merge) {
|
|
81
|
-
return (0, __1.deepExtend)(configuration, merge);
|
|
82
|
-
}
|
|
83
|
-
function LoadProject(library, definitions) {
|
|
84
|
-
internal.utils.object.set(configuration, library, {});
|
|
85
|
-
Object.keys(definitions).forEach((key) => {
|
|
86
|
-
internal.utils.object.set(configuration, [library, key].join("."), definitions[key].default);
|
|
87
|
-
});
|
|
88
|
-
return configDefinitions.set(library, definitions);
|
|
89
|
-
}
|
|
90
|
-
// #endregion
|
|
91
|
-
// #region Return object
|
|
92
|
-
return {
|
|
93
|
-
[exports.INITIALIZE]: Initialize,
|
|
94
|
-
[exports.INJECTED_DEFINITIONS]: InjectedDefinitions,
|
|
95
|
-
[exports.LOAD_PROJECT]: LoadProject,
|
|
96
|
-
/**
|
|
97
|
-
* retrieve the metadata that was originally used to define the configs
|
|
98
|
-
*/
|
|
99
|
-
getDefinitions: () => configDefinitions,
|
|
100
|
-
/**
|
|
101
|
-
* take a configuration object, and deep merge values
|
|
102
|
-
*
|
|
103
|
-
* intended for initial loading workflows
|
|
104
|
-
*/
|
|
105
|
-
merge: Merge,
|
|
106
|
-
/**
|
|
107
|
-
* Not a replacement for `onPostConfig`
|
|
108
|
-
*
|
|
109
|
-
* Only receives updates from `config.set` calls
|
|
110
|
-
*/
|
|
111
|
-
onUpdate(callback, project, property) {
|
|
112
|
-
event.on(exports.EVENT_CONFIGURATION_UPDATED, (updatedProject, updatedProperty) => {
|
|
113
|
-
if (!_1.is.empty(project) && project !== updatedProject) {
|
|
114
|
-
return;
|
|
115
|
-
}
|
|
116
|
-
if (!_1.is.empty(property) && property !== updatedProperty) {
|
|
117
|
-
return;
|
|
118
|
-
}
|
|
119
|
-
callback(updatedProject, updatedProperty);
|
|
120
|
-
});
|
|
121
|
-
},
|
|
122
|
-
/**
|
|
123
|
-
* type friendly method of updating a single configuration
|
|
124
|
-
*
|
|
125
|
-
* emits update event
|
|
126
|
-
*/
|
|
127
|
-
set: SetConfig,
|
|
128
|
-
};
|
|
129
|
-
// #endregion
|
|
130
|
-
}
|
|
131
|
-
//# sourceMappingURL=configuration.extension.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"configuration.extension.js","sourceRoot":"","sources":["../../src/extensions/configuration.extension.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,17 +0,0 @@
|
|
|
1
|
-
import { DownloadOptions, FetchArguments, FetcherOptions, TFetchBody, TServiceParams } from "..";
|
|
2
|
-
export declare function Fetch({ logger, context: parentContext, internal, }: TServiceParams): ({ headers: base_headers, baseUrl: base_url, context: logContext, }: FetcherOptions) => {
|
|
3
|
-
base_headers: Record<string, string>;
|
|
4
|
-
base_url: string;
|
|
5
|
-
download: ({ destination, body, headers, label, context, method, ...fetchWith }: DownloadOptions) => Promise<void>;
|
|
6
|
-
fetch: <T, BODY extends TFetchBody = undefined>({ body, headers, method, process, label, context, ...fetchWith }: Partial<FetchArguments<BODY>>) => Promise<T>;
|
|
7
|
-
/**
|
|
8
|
-
* @deprecated set base_url directly
|
|
9
|
-
*/
|
|
10
|
-
setBaseUrl: (url: string) => string;
|
|
11
|
-
/**
|
|
12
|
-
* @deprecated set base_headers directly
|
|
13
|
-
*/
|
|
14
|
-
setHeaders: (headers: Record<string, string>) => Record<string, string>;
|
|
15
|
-
};
|
|
16
|
-
export type TFetch = <T, BODY extends object = object>(fetchWith: Partial<FetchArguments<BODY>>) => Promise<T>;
|
|
17
|
-
export type TDownload = (fetchWith: DownloadOptions) => Promise<void>;
|