@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
package/README.md
CHANGED
|
@@ -1,5 +1,8 @@
|
|
|
1
|
-
[](https://github.com/Digital-Alchemy-TS/core)
|
|
2
|
+

|
|
2
3
|
|
|
4
|
+
[](https://codecov.io/github/Digital-Alchemy-TS/core)
|
|
5
|
+
[](https://www.npmjs.com/package/@digital-alchemy/core)
|
|
3
6
|
---
|
|
4
7
|
|
|
5
8
|
# 🚀 Project Overview - Digital Alchemy TypeScript Libraries
|
|
@@ -1,3 +1,3 @@
|
|
|
1
|
-
export declare function each<T = unknown>(item: T[]
|
|
1
|
+
export declare function each<T = unknown>(item: T[] | Set<T>, callback: (item: T) => Promise<void | unknown>): Promise<void>;
|
|
2
2
|
export declare function eachSeries<T = void>(item: T[] | Set<T>, callback: (item: T) => Promise<void | unknown>): Promise<void>;
|
|
3
3
|
export declare function eachLimit<T = unknown>(items: T[], limit: number, callback: (item: T) => Promise<void | unknown>): Promise<void>;
|
|
@@ -1,32 +1,31 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
exports.eachSeries = eachSeries;
|
|
5
|
-
exports.eachLimit = eachLimit;
|
|
6
|
-
const is_extension_1 = require("../extensions/is.extension");
|
|
7
|
-
const utilities_helper_1 = require("./utilities.helper");
|
|
1
|
+
/* eslint-disable sonarjs/no-redundant-type-constituents */
|
|
2
|
+
import { is } from "../services";
|
|
3
|
+
import { ARRAY_OFFSET, SINGLE, START } from "./utilities.helper";
|
|
8
4
|
// ? Functions written to be similar to the offerings from the async library
|
|
9
5
|
// That library gave me oddly inconsistent results,
|
|
10
6
|
// so these exist to replace those doing exactly what I expect
|
|
11
7
|
//
|
|
12
8
|
// #MARK: each
|
|
13
|
-
async function each(item
|
|
9
|
+
export async function each(item, callback) {
|
|
10
|
+
if (item instanceof Set) {
|
|
11
|
+
item = [...item.values()];
|
|
12
|
+
}
|
|
14
13
|
await Promise.all(item.map(async (i) => await callback(i)));
|
|
15
14
|
}
|
|
16
15
|
// #MARK: eachSeries
|
|
17
|
-
async function eachSeries(item, callback) {
|
|
16
|
+
export async function eachSeries(item, callback) {
|
|
18
17
|
if (item instanceof Set) {
|
|
19
18
|
item = [...item.values()];
|
|
20
19
|
}
|
|
21
|
-
if (!
|
|
20
|
+
if (!is.array(item)) {
|
|
22
21
|
throw new TypeError(`not provided an array`);
|
|
23
22
|
}
|
|
24
|
-
for (let i =
|
|
23
|
+
for (let i = START; i <= item.length - ARRAY_OFFSET; i++) {
|
|
25
24
|
await callback(item[i]);
|
|
26
25
|
}
|
|
27
26
|
}
|
|
28
27
|
// #MARK: eachLimit
|
|
29
|
-
async function eachLimit(items, limit, callback) {
|
|
28
|
+
export async function eachLimit(items, limit, callback) {
|
|
30
29
|
// Track active promises to ensure we don't exceed the limit
|
|
31
30
|
const activePromises = new Set();
|
|
32
31
|
// A helper function to add a new task
|
|
@@ -40,11 +39,11 @@ async function eachLimit(items, limit, callback) {
|
|
|
40
39
|
}
|
|
41
40
|
}
|
|
42
41
|
// Add initial tasks up to the limit
|
|
43
|
-
const initialTasks = items.slice(
|
|
42
|
+
const initialTasks = items.slice(SINGLE, limit).map(item => addTask(item));
|
|
44
43
|
// Wait for the initial set of tasks to start processing
|
|
45
44
|
await Promise.all(initialTasks);
|
|
46
45
|
// Process the remaining items, ensuring the limit is respected
|
|
47
|
-
for (let i = limit; i < items.length; i++) {
|
|
46
|
+
for (let i = limit - ARRAY_OFFSET; i < items.length; i++) {
|
|
48
47
|
await addTask(items[i]);
|
|
49
48
|
}
|
|
50
49
|
// Wait for all remaining tasks to complete
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"async.helper.js","sourceRoot":"","sources":["../../src/helpers/async.helper.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"async.helper.js","sourceRoot":"","sources":["../../src/helpers/async.helper.ts"],"names":[],"mappings":"AAAA,2DAA2D;AAC3D,OAAO,EAAE,EAAE,EAAE,MAAM,aAAa,CAAC;AACjC,OAAO,EAAE,YAAY,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,oBAAoB,CAAC;AAEjE,4EAA4E;AAC5E,mDAAmD;AACnD,kEAAkE;AAClE,EAAE;AAEF,cAAc;AACd,MAAM,CAAC,KAAK,UAAU,IAAI,CACxB,IAAkB,EAClB,QAA8C;IAE9C,IAAI,IAAI,YAAY,GAAG,EAAE,CAAC;QACxB,IAAI,GAAG,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC;IAC5B,CAAC;IACD,MAAM,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,EAAC,CAAC,EAAC,EAAE,CAAC,MAAM,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AAC5D,CAAC;AAED,oBAAoB;AACpB,MAAM,CAAC,KAAK,UAAU,UAAU,CAC9B,IAAkB,EAClB,QAA8C;IAE9C,IAAI,IAAI,YAAY,GAAG,EAAE,CAAC;QACxB,IAAI,GAAG,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC;IAC5B,CAAC;IACD,IAAI,CAAC,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC;QACpB,MAAM,IAAI,SAAS,CAAC,uBAAuB,CAAC,CAAC;IAC/C,CAAC;IACD,KAAK,IAAI,CAAC,GAAG,KAAK,EAAE,CAAC,IAAI,IAAI,CAAC,MAAM,GAAG,YAAY,EAAE,CAAC,EAAE,EAAE,CAAC;QACzD,MAAM,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;IAC1B,CAAC;AACH,CAAC;AAED,mBAAmB;AACnB,MAAM,CAAC,KAAK,UAAU,SAAS,CAC7B,KAAU,EACV,KAAa,EACb,QAA8C;IAE9C,4DAA4D;IAC5D,MAAM,cAAc,GAAiC,IAAI,GAAG,EAAE,CAAC;IAE/D,sCAAsC;IACtC,KAAK,UAAU,OAAO,CAAC,IAAO;QAC5B,MAAM,OAAO,GAAG,QAAQ,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,GAAG,EAAE;YACvC,cAAc,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,qDAAqD;QACvF,CAAC,CAAC,CAAC;QACH,cAAc,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;QAC5B,IAAI,cAAc,CAAC,IAAI,IAAI,KAAK,EAAE,CAAC;YACjC,MAAM,OAAO,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC,CAAC,iDAAiD;QACvF,CAAC;IACH,CAAC;IAED,oCAAoC;IACpC,MAAM,YAAY,GAAG,KAAK,CAAC,KAAK,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC;IAE3E,wDAAwD;IACxD,MAAM,OAAO,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC;IAEhC,+DAA+D;IAC/D,KAAK,IAAI,CAAC,GAAG,KAAK,GAAG,YAAY,EAAE,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QACzD,MAAM,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;IAC1B,CAAC;IAED,2CAA2C;IAC3C,MAAM,OAAO,CAAC,GAAG,CAAC,cAAc,CAAC,CAAC;AACpC,CAAC"}
|
|
@@ -1,24 +1,20 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
const
|
|
7
|
-
const __1 = require("..");
|
|
8
|
-
const config_helper_1 = require("./config.helper");
|
|
9
|
-
async function ConfigLoaderEnvironment({ configs, internal, logger }) {
|
|
10
|
-
const CLI_SWITCHES = (0, minimist_1.default)(process_1.argv);
|
|
1
|
+
import minimist from "minimist";
|
|
2
|
+
import { env } from "process";
|
|
3
|
+
import { is } from "..";
|
|
4
|
+
import { findKey, iSearchKey, loadDotenv, parseConfig, } from "./config.helper";
|
|
5
|
+
export async function ConfigLoaderEnvironment({ configs, internal, logger }) {
|
|
6
|
+
const CLI_SWITCHES = minimist(process.argv);
|
|
11
7
|
const switchKeys = Object.keys(CLI_SWITCHES);
|
|
12
|
-
const environmentKeys = Object.keys(process_1.env);
|
|
13
8
|
const out = {};
|
|
14
9
|
// * merge dotenv into local vars
|
|
15
10
|
// accounts for `--env-file` switches, and whatever is passed in via bootstrap
|
|
16
|
-
|
|
11
|
+
loadDotenv(internal, CLI_SWITCHES, logger);
|
|
12
|
+
const environmentKeys = Object.keys(env);
|
|
17
13
|
// * go through all module
|
|
18
14
|
configs.forEach((configuration, project) => {
|
|
19
15
|
const cleanedProject = project.replaceAll("-", "_");
|
|
20
16
|
// * run through each config for module
|
|
21
|
-
Object.keys(configuration).forEach(
|
|
17
|
+
Object.keys(configuration).forEach(key => {
|
|
22
18
|
// > things to search for
|
|
23
19
|
// - MODULE_NAME_CONFIG_KEY (module + key, ex: app_NODE_ENV)
|
|
24
20
|
// - CONFIG_KEY (only key, ex: NODE_ENV)
|
|
@@ -26,10 +22,10 @@ async function ConfigLoaderEnvironment({ configs, internal, logger }) {
|
|
|
26
22
|
const search = [noAppPath, key];
|
|
27
23
|
const configPath = `${project}.${key}`;
|
|
28
24
|
// * (preferred) Find an applicable cli switch
|
|
29
|
-
const flag =
|
|
25
|
+
const flag = findKey(search, switchKeys);
|
|
30
26
|
if (flag) {
|
|
31
|
-
const formattedFlag =
|
|
32
|
-
internal.utils.object.set(out, configPath,
|
|
27
|
+
const formattedFlag = iSearchKey(flag, switchKeys);
|
|
28
|
+
internal.utils.object.set(out, configPath, parseConfig(configuration[key], CLI_SWITCHES[formattedFlag]));
|
|
33
29
|
logger.trace({
|
|
34
30
|
flag: formattedFlag,
|
|
35
31
|
name: ConfigLoaderEnvironment,
|
|
@@ -38,10 +34,10 @@ async function ConfigLoaderEnvironment({ configs, internal, logger }) {
|
|
|
38
34
|
return;
|
|
39
35
|
}
|
|
40
36
|
// * (fallback) Find an environment variable
|
|
41
|
-
const environment =
|
|
42
|
-
if (!
|
|
43
|
-
const environmentName =
|
|
44
|
-
internal.utils.object.set(out, configPath,
|
|
37
|
+
const environment = findKey(search, environmentKeys);
|
|
38
|
+
if (!is.empty(environment)) {
|
|
39
|
+
const environmentName = iSearchKey(environment, environmentKeys);
|
|
40
|
+
internal.utils.object.set(out, configPath, parseConfig(configuration[key], env[environmentName]));
|
|
45
41
|
logger.trace({
|
|
46
42
|
name: ConfigLoaderEnvironment,
|
|
47
43
|
path: configPath,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config-environment-loader.helper.js","sourceRoot":"","sources":["../../src/helpers/config-environment-loader.helper.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"config-environment-loader.helper.js","sourceRoot":"","sources":["../../src/helpers/config-environment-loader.helper.ts"],"names":[],"mappings":"AAAA,OAAO,QAAQ,MAAM,UAAU,CAAC;AAChC,OAAO,EAAE,GAAG,EAAE,MAAM,SAAS,CAAC;AAE9B,OAAO,EAAE,EAAE,EAAc,MAAM,IAAI,CAAC;AACpC,OAAO,EAIL,OAAO,EACP,UAAU,EACV,UAAU,EAEV,WAAW,GACZ,MAAM,iBAAiB,CAAC;AAEzB,MAAM,CAAC,KAAK,UAAU,uBAAuB,CAG3C,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,EAA4B;IACvD,MAAM,YAAY,GAAG,QAAQ,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;IAC5C,MAAM,UAAU,GAAG,MAAM,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;IAC7C,MAAM,GAAG,GAA4B,EAAE,CAAC;IAExC,iCAAiC;IACjC,8EAA8E;IAC9E,UAAU,CAAC,QAAQ,EAAE,YAAY,EAAE,MAAM,CAAC,CAAC;IAC3C,MAAM,eAAe,GAAG,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IAEzC,0BAA0B;IAC1B,OAAO,CAAC,OAAO,CAAC,CAAC,aAAa,EAAE,OAAO,EAAE,EAAE;QACzC,MAAM,cAAc,GAAG,OAAO,CAAC,UAAU,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;QAEpD,uCAAuC;QACvC,MAAM,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE;YACvC,yBAAyB;YACzB,4DAA4D;YAC5D,wCAAwC;YACxC,MAAM,SAAS,GAAG,GAAG,cAAc,IAAI,GAAG,EAAE,CAAC;YAC7C,MAAM,MAAM,GAAG,CAAC,SAAS,EAAE,GAAG,CAAC,CAAC;YAChC,MAAM,UAAU,GAAG,GAAG,OAAO,IAAI,GAAG,EAAE,CAAC;YAEvC,8CAA8C;YAC9C,MAAM,IAAI,GAAG,OAAO,CAAC,MAAM,EAAE,UAAU,CAAC,CAAC;YACzC,IAAI,IAAI,EAAE,CAAC;gBACT,MAAM,aAAa,GAAG,UAAU,CAAC,IAAI,EAAE,UAAU,CAAC,CAAC;gBACnD,QAAQ,CAAC,KAAK,CAAC,MAAM,CAAC,GAAG,CACvB,GAAG,EACH,UAAU,EACV,WAAW,CAAC,aAAa,CAAC,GAAG,CAAC,EAAE,YAAY,CAAC,aAAa,CAAC,CAAC,CAC7D,CAAC;gBACF,MAAM,CAAC,KAAK,CACV;oBACE,IAAI,EAAE,aAAa;oBACnB,IAAI,EAAE,uBAAuB;oBAC7B,IAAI,EAAE,UAAU;iBACjB,EACD,+BAA+B,CAChC,CAAC;gBACF,OAAO;YACT,CAAC;YAED,4CAA4C;YAC5C,MAAM,WAAW,GAAG,OAAO,CAAC,MAAM,EAAE,eAAe,CAAC,CAAC;YACrD,IAAI,CAAC,EAAE,CAAC,KAAK,CAAC,WAAW,CAAC,EAAE,CAAC;gBAC3B,MAAM,eAAe,GAAG,UAAU,CAAC,WAAW,EAAE,eAAe,CAAC,CAAC;gBACjE,QAAQ,CAAC,KAAK,CAAC,MAAM,CAAC,GAAG,CACvB,GAAG,EACH,UAAU,EACV,WAAW,CAAC,aAAa,CAAC,GAAG,CAAC,EAAE,GAAG,CAAC,eAAe,CAAC,CAAC,CACtD,CAAC;gBACF,MAAM,CAAC,KAAK,CACV;oBACE,IAAI,EAAE,uBAAuB;oBAC7B,IAAI,EAAE,UAAU;oBAChB,GAAG,EAAE,eAAe;iBACrB,EACD,wBAAwB,CACzB,CAAC;YACJ,CAAC;QACH,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IACH,OAAO,GAAG,CAAC;AACb,CAAC"}
|
|
@@ -1,82 +1,75 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
const
|
|
10
|
-
const
|
|
11
|
-
const os_1 = require("os");
|
|
12
|
-
const path_1 = require("path");
|
|
13
|
-
const process_1 = require("process");
|
|
14
|
-
const __1 = require("..");
|
|
15
|
-
const isWindows = process_1.platform === "win32";
|
|
16
|
-
exports.SUPPORTED_CONFIG_EXTENSIONS = ["json", "ini", "yaml", "yml"];
|
|
1
|
+
import { existsSync, readFileSync, statSync } from "fs";
|
|
2
|
+
import { decode } from "ini";
|
|
3
|
+
import { load } from "js-yaml";
|
|
4
|
+
import minimist from "minimist";
|
|
5
|
+
import { homedir } from "os";
|
|
6
|
+
import { join } from "path";
|
|
7
|
+
import { cwd, exit, platform } from "process";
|
|
8
|
+
import { deepExtend, INVERT_VALUE, is, START } from "..";
|
|
9
|
+
const isWindows = platform === "win32";
|
|
10
|
+
export const SUPPORTED_CONFIG_EXTENSIONS = ["json", "ini", "yaml", "yml"];
|
|
17
11
|
function withExtensions(path) {
|
|
18
|
-
return [path,
|
|
12
|
+
return [path, join(path, "config")].flatMap(path => [
|
|
19
13
|
path,
|
|
20
|
-
...
|
|
14
|
+
...SUPPORTED_CONFIG_EXTENSIONS.map(i => `${path}.${i}`),
|
|
21
15
|
]);
|
|
22
16
|
}
|
|
23
|
-
function configFilePaths(name = "digital-alchemy") {
|
|
17
|
+
export function configFilePaths(name = "digital-alchemy") {
|
|
24
18
|
const out = [];
|
|
25
19
|
if (!isWindows) {
|
|
26
|
-
out.push(...withExtensions(
|
|
20
|
+
out.push(...withExtensions(join(`/etc`, `${name}`)));
|
|
27
21
|
}
|
|
28
|
-
let current =
|
|
22
|
+
let current = cwd();
|
|
29
23
|
let next;
|
|
30
|
-
while (!
|
|
31
|
-
out.push(...withExtensions(
|
|
32
|
-
next =
|
|
24
|
+
while (!is.empty(current)) {
|
|
25
|
+
out.push(...withExtensions(join(current, `.${name}`)));
|
|
26
|
+
next = join(current, "..");
|
|
33
27
|
if (next === current) {
|
|
34
28
|
break;
|
|
35
29
|
}
|
|
36
30
|
current = next;
|
|
37
31
|
}
|
|
38
|
-
out.push(...withExtensions(
|
|
39
|
-
return out.filter(
|
|
32
|
+
out.push(...withExtensions(join(homedir(), ".config", name)));
|
|
33
|
+
return out.filter(filePath => existsSync(filePath) && statSync(filePath).isFile());
|
|
40
34
|
}
|
|
41
|
-
async function ConfigLoaderFile({ application, logger }) {
|
|
42
|
-
const CLI_SWITCHES = (
|
|
35
|
+
export async function ConfigLoaderFile({ application, logger }) {
|
|
36
|
+
const CLI_SWITCHES = minimist(process.argv);
|
|
43
37
|
const configFile = CLI_SWITCHES.config;
|
|
44
38
|
let files;
|
|
45
|
-
if (
|
|
39
|
+
if (is.empty(configFile)) {
|
|
46
40
|
files = configFilePaths(application.name);
|
|
47
41
|
logger.trace({ files, name: ConfigLoaderFile }, `identified config files`);
|
|
48
42
|
}
|
|
49
43
|
else {
|
|
50
|
-
if (!
|
|
44
|
+
if (!existsSync(configFile)) {
|
|
51
45
|
logger.fatal({ configFile, name: ConfigLoaderFile }, `used {--config} to specify path that does not exist`);
|
|
52
|
-
|
|
46
|
+
exit();
|
|
53
47
|
}
|
|
54
48
|
files = [configFile];
|
|
55
49
|
logger.debug({ configFile, name: ConfigLoaderFile }, `used {--config}, loading from target file`);
|
|
56
50
|
}
|
|
57
|
-
if (
|
|
51
|
+
if (is.empty(files)) {
|
|
58
52
|
return {};
|
|
59
53
|
}
|
|
60
54
|
const out = {};
|
|
61
55
|
logger.trace({ files, name: ConfigLoaderFile }, `loading configuration files`);
|
|
62
|
-
files.forEach(
|
|
56
|
+
files.forEach(file => loadConfigFromFile(out, file));
|
|
63
57
|
return out;
|
|
64
58
|
}
|
|
65
59
|
function loadConfigFromFile(out, filePath) {
|
|
66
|
-
const fileContent =
|
|
67
|
-
const hasExtension =
|
|
68
|
-
if (filePath.slice(extension.length *
|
|
69
|
-
extension) {
|
|
60
|
+
const fileContent = readFileSync(filePath, "utf8").trim();
|
|
61
|
+
const hasExtension = SUPPORTED_CONFIG_EXTENSIONS.some(extension => {
|
|
62
|
+
if (filePath.slice(extension.length * INVERT_VALUE).toLowerCase() === extension) {
|
|
70
63
|
switch (extension) {
|
|
71
64
|
case "ini":
|
|
72
|
-
|
|
65
|
+
deepExtend(out, decode(fileContent));
|
|
73
66
|
return true;
|
|
74
67
|
case "yaml":
|
|
75
68
|
case "yml":
|
|
76
|
-
|
|
69
|
+
deepExtend(out, load(fileContent));
|
|
77
70
|
return true;
|
|
78
71
|
case "json":
|
|
79
|
-
|
|
72
|
+
deepExtend(out, JSON.parse(fileContent));
|
|
80
73
|
return true;
|
|
81
74
|
}
|
|
82
75
|
}
|
|
@@ -86,15 +79,15 @@ function loadConfigFromFile(out, filePath) {
|
|
|
86
79
|
return;
|
|
87
80
|
}
|
|
88
81
|
// Guessing JSON
|
|
89
|
-
if (fileContent[
|
|
90
|
-
|
|
82
|
+
if (fileContent[START] === "{") {
|
|
83
|
+
deepExtend(out, JSON.parse(fileContent));
|
|
91
84
|
return;
|
|
92
85
|
}
|
|
93
86
|
// Guessing yaml
|
|
94
87
|
try {
|
|
95
|
-
const content =
|
|
96
|
-
if (
|
|
97
|
-
|
|
88
|
+
const content = load(fileContent);
|
|
89
|
+
if (is.object(content)) {
|
|
90
|
+
deepExtend(out, content);
|
|
98
91
|
return;
|
|
99
92
|
}
|
|
100
93
|
}
|
|
@@ -102,6 +95,6 @@ function loadConfigFromFile(out, filePath) {
|
|
|
102
95
|
// Is not a yaml file
|
|
103
96
|
}
|
|
104
97
|
// Final fallback: INI
|
|
105
|
-
|
|
98
|
+
deepExtend(out, decode(fileContent));
|
|
106
99
|
}
|
|
107
100
|
//# sourceMappingURL=config-file-loader.helper.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config-file-loader.helper.js","sourceRoot":"","sources":["../../src/helpers/config-file-loader.helper.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"config-file-loader.helper.js","sourceRoot":"","sources":["../../src/helpers/config-file-loader.helper.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { ParsedArgs } from "minimist";
|
|
2
|
-
import { ILogger, InternalDefinition } from "..";
|
|
3
|
-
import { ApplicationDefinition, ServiceMap } from "./wiring.helper";
|
|
2
|
+
import { ILogger, INITIALIZE, INJECTED_DEFINITIONS, InternalDefinition, LOAD_PROJECT, TBlackHole } from "..";
|
|
3
|
+
import { ApplicationDefinition, PartialConfiguration, ServiceMap, TInjectedConfig } from "./wiring.helper";
|
|
4
4
|
export type CodeConfigDefinition = Record<string, AnyConfig>;
|
|
5
5
|
export type ProjectConfigTypes = "string" | "boolean" | "internal" | "number" | "record" | "string[]";
|
|
6
6
|
export type AnyConfig = StringConfig<string> | BooleanConfig | InternalConfig<object> | NumberConfig | RecordConfig | StringArrayConfig;
|
|
@@ -113,3 +113,24 @@ export declare function iSearchKey(target: string, source: string[]): string;
|
|
|
113
113
|
*/
|
|
114
114
|
export declare function loadDotenv(internal: InternalDefinition, CLI_SWITCHES: ParsedArgs, logger: ILogger): void;
|
|
115
115
|
export declare function parseConfig(config: AnyConfig, value: string): any;
|
|
116
|
+
export type DigitalAlchemyConfiguration = {
|
|
117
|
+
[INITIALIZE]: <S extends ServiceMap, C extends OptionalModuleConfiguration>(application: ApplicationDefinition<S, C>) => Promise<string>;
|
|
118
|
+
[INJECTED_DEFINITIONS]: () => TInjectedConfig;
|
|
119
|
+
[LOAD_PROJECT]: (library: string, definitions: CodeConfigDefinition) => KnownConfigs;
|
|
120
|
+
getDefinitions: () => KnownConfigs;
|
|
121
|
+
merge: (incoming: Partial<PartialConfiguration>) => PartialConfiguration;
|
|
122
|
+
/**
|
|
123
|
+
* Not a replacement for `onPostConfig`
|
|
124
|
+
*
|
|
125
|
+
* Only receives updates from `config.set` calls
|
|
126
|
+
*/
|
|
127
|
+
onUpdate: <Project extends keyof TInjectedConfig, Property extends Extract<keyof TInjectedConfig[Project], string>>(callback: OnConfigUpdateCallback<Project, Property>, project?: Project, property?: Property) => void;
|
|
128
|
+
/**
|
|
129
|
+
* type friendly method of updating a single configuration
|
|
130
|
+
*
|
|
131
|
+
* emits update event
|
|
132
|
+
*/
|
|
133
|
+
set: TSetConfig;
|
|
134
|
+
};
|
|
135
|
+
export type TSetConfig = <Project extends keyof TInjectedConfig, Property extends keyof TInjectedConfig[Project]>(project: Project, property: Property, value: TInjectedConfig[Project][Property]) => void;
|
|
136
|
+
export type OnConfigUpdateCallback<Project extends keyof TInjectedConfig, Property extends keyof TInjectedConfig[Project]> = (project: Project, property: Property) => TBlackHole;
|
|
@@ -1,30 +1,21 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
exports.parseConfig = parseConfig;
|
|
8
|
-
const dotenv_1 = require("dotenv");
|
|
9
|
-
const fs_1 = require("fs");
|
|
10
|
-
const path_1 = require("path");
|
|
11
|
-
const process_1 = require("process");
|
|
12
|
-
const __1 = require("..");
|
|
13
|
-
function cast(data, type) {
|
|
1
|
+
import dotenv from "dotenv";
|
|
2
|
+
import fs from "fs";
|
|
3
|
+
import { isAbsolute, join, normalize } from "path";
|
|
4
|
+
import { cwd } from "process";
|
|
5
|
+
import { INITIALIZE, INJECTED_DEFINITIONS, is, LOAD_PROJECT, } from "..";
|
|
6
|
+
export function cast(data, type) {
|
|
14
7
|
switch (type) {
|
|
15
8
|
case "boolean": {
|
|
16
9
|
data ??= "";
|
|
17
|
-
return (
|
|
18
|
-
? data
|
|
19
|
-
: ["true", "y", "1"].includes(data.toLowerCase()));
|
|
10
|
+
return (is.boolean(data) ? data : ["true", "y", "1"].includes(data.toLowerCase()));
|
|
20
11
|
}
|
|
21
12
|
case "number":
|
|
22
13
|
return Number(data);
|
|
23
14
|
case "string[]":
|
|
24
|
-
if (
|
|
15
|
+
if (is.undefined(data)) {
|
|
25
16
|
return [];
|
|
26
17
|
}
|
|
27
|
-
if (
|
|
18
|
+
if (is.array(data)) {
|
|
28
19
|
return data.map(String);
|
|
29
20
|
}
|
|
30
21
|
// This occurs with cli switches
|
|
@@ -36,18 +27,19 @@ function cast(data, type) {
|
|
|
36
27
|
}
|
|
37
28
|
return data;
|
|
38
29
|
}
|
|
39
|
-
function findKey(source, find) {
|
|
30
|
+
export function findKey(source, find) {
|
|
40
31
|
return (
|
|
41
32
|
// Find an exact match (if available) first
|
|
42
|
-
source.find(
|
|
33
|
+
source.find(line => find.includes(line)) ||
|
|
43
34
|
// Do case insensitive searches
|
|
44
|
-
source.find(
|
|
35
|
+
source.find(line => {
|
|
45
36
|
const match = new RegExp(`^${line.replaceAll(new RegExp("[-_]", "gi"), "[-_]?")}$`, "gi");
|
|
46
|
-
return find.some(
|
|
37
|
+
return find.some(item => item.match(match));
|
|
47
38
|
}));
|
|
48
39
|
}
|
|
49
|
-
function iSearchKey(target, source) {
|
|
50
|
-
|
|
40
|
+
export function iSearchKey(target, source) {
|
|
41
|
+
const regex = new RegExp(`^${target.replaceAll(new RegExp("[-_]", "gi"), "[-_]?")}$`, "gi");
|
|
42
|
+
return source.find(key => regex.exec(key) !== null);
|
|
51
43
|
}
|
|
52
44
|
/**
|
|
53
45
|
* priorities:
|
|
@@ -55,21 +47,19 @@ function iSearchKey(target, source) {
|
|
|
55
47
|
* - bootstrap envFile
|
|
56
48
|
* - cwd/.env (default file)
|
|
57
49
|
*/
|
|
58
|
-
function loadDotenv(internal, CLI_SWITCHES, logger) {
|
|
59
|
-
let { envFile } = internal.boot.options;
|
|
50
|
+
export function loadDotenv(internal, CLI_SWITCHES, logger) {
|
|
51
|
+
let { envFile } = internal.boot.options ?? {};
|
|
60
52
|
const switchKeys = Object.keys(CLI_SWITCHES);
|
|
61
53
|
const searched = iSearchKey("env-file", switchKeys);
|
|
62
54
|
// --env-file > bootstrap
|
|
63
|
-
if (!
|
|
55
|
+
if (!is.empty(CLI_SWITCHES[searched])) {
|
|
64
56
|
envFile = CLI_SWITCHES[searched];
|
|
65
57
|
}
|
|
66
58
|
let file;
|
|
67
59
|
// * was provided an --env-file or something via boot
|
|
68
|
-
if (!
|
|
69
|
-
const checkFile = (
|
|
70
|
-
|
|
71
|
-
: (0, path_1.join)((0, process_1.cwd)(), envFile);
|
|
72
|
-
if ((0, fs_1.existsSync)(checkFile)) {
|
|
60
|
+
if (!is.empty(envFile)) {
|
|
61
|
+
const checkFile = isAbsolute(envFile) ? normalize(envFile) : join(cwd(), envFile);
|
|
62
|
+
if (fs.existsSync(checkFile)) {
|
|
73
63
|
file = checkFile;
|
|
74
64
|
}
|
|
75
65
|
else {
|
|
@@ -77,9 +67,9 @@ function loadDotenv(internal, CLI_SWITCHES, logger) {
|
|
|
77
67
|
}
|
|
78
68
|
}
|
|
79
69
|
// * attempt default file
|
|
80
|
-
if (
|
|
81
|
-
const defaultFile =
|
|
82
|
-
if (
|
|
70
|
+
if (is.empty(file)) {
|
|
71
|
+
const defaultFile = join(cwd(), ".env");
|
|
72
|
+
if (fs.existsSync(defaultFile)) {
|
|
83
73
|
file = defaultFile;
|
|
84
74
|
}
|
|
85
75
|
else {
|
|
@@ -87,12 +77,12 @@ function loadDotenv(internal, CLI_SWITCHES, logger) {
|
|
|
87
77
|
}
|
|
88
78
|
}
|
|
89
79
|
// ? each of the steps above verified the path as valid
|
|
90
|
-
if (!
|
|
80
|
+
if (!is.empty(file)) {
|
|
91
81
|
logger.trace({ file, name: loadDotenv }, `loading env file`);
|
|
92
|
-
|
|
82
|
+
dotenv.config({ override: true, path: file });
|
|
93
83
|
}
|
|
94
84
|
}
|
|
95
|
-
function parseConfig(config, value) {
|
|
85
|
+
export function parseConfig(config, value) {
|
|
96
86
|
switch (config.type) {
|
|
97
87
|
case "string": {
|
|
98
88
|
return value;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config.helper.js","sourceRoot":"","sources":["../../src/helpers/config.helper.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"config.helper.js","sourceRoot":"","sources":["../../src/helpers/config.helper.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,3 +1,7 @@
|
|
|
1
|
+
import { Dayjs } from "dayjs";
|
|
2
|
+
import { TContext } from "./context.helper";
|
|
3
|
+
import { TBlackHole } from "./utilities.helper";
|
|
4
|
+
import { Schedule, SchedulerOptions } from "./wiring.helper";
|
|
1
5
|
export declare enum CronExpression {
|
|
2
6
|
EVERY_SECOND = "* * * * * *",
|
|
3
7
|
EVERY_5_SECONDS = "*/5 * * * * *",
|
|
@@ -85,3 +89,26 @@ export declare enum CronExpression {
|
|
|
85
89
|
}
|
|
86
90
|
export declare const CRON_SCHEDULE = "CRON_SCHEDULE";
|
|
87
91
|
export declare const INTERVAL_SCHEDULE = "INTERVAL_SCHEDULE";
|
|
92
|
+
export type SchedulerCronOptions = SchedulerOptions & {
|
|
93
|
+
schedule: Schedule | Schedule[];
|
|
94
|
+
};
|
|
95
|
+
export type SchedulerIntervalOptions = SchedulerOptions & {
|
|
96
|
+
interval: number;
|
|
97
|
+
};
|
|
98
|
+
export type SchedulerSlidingOptions = SchedulerOptions & {
|
|
99
|
+
/**
|
|
100
|
+
* How often to run the `next` method, to retrieve the next scheduled execution time
|
|
101
|
+
*/
|
|
102
|
+
reset: Schedule;
|
|
103
|
+
/**
|
|
104
|
+
* Return something time like. undefined = skip next
|
|
105
|
+
*/
|
|
106
|
+
next: () => Dayjs | string | number | Date | undefined;
|
|
107
|
+
};
|
|
108
|
+
export type ScheduleRemove = () => TBlackHole;
|
|
109
|
+
export type DigitalAlchemyScheduler = {
|
|
110
|
+
cron: (options: SchedulerCronOptions) => ScheduleRemove;
|
|
111
|
+
interval: (options: SchedulerIntervalOptions) => ScheduleRemove;
|
|
112
|
+
sliding: (options: SchedulerSlidingOptions) => ScheduleRemove;
|
|
113
|
+
};
|
|
114
|
+
export type SchedulerBuilder = (context: TContext) => DigitalAlchemyScheduler;
|
|
@@ -1,7 +1,4 @@
|
|
|
1
|
-
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.INTERVAL_SCHEDULE = exports.CRON_SCHEDULE = exports.CronExpression = void 0;
|
|
4
|
-
var CronExpression;
|
|
1
|
+
export var CronExpression;
|
|
5
2
|
(function (CronExpression) {
|
|
6
3
|
CronExpression["EVERY_SECOND"] = "* * * * * *";
|
|
7
4
|
CronExpression["EVERY_5_SECONDS"] = "*/5 * * * * *";
|
|
@@ -86,7 +83,7 @@ var CronExpression;
|
|
|
86
83
|
CronExpression["MONDAY_TO_FRIDAY_AT_9PM"] = "0 0 21 * * 1-5";
|
|
87
84
|
CronExpression["MONDAY_TO_FRIDAY_AT_10PM"] = "0 0 22 * * 1-5";
|
|
88
85
|
CronExpression["MONDAY_TO_FRIDAY_AT_11PM"] = "0 0 23 * * 1-5";
|
|
89
|
-
})(CronExpression || (
|
|
90
|
-
|
|
91
|
-
|
|
86
|
+
})(CronExpression || (CronExpression = {}));
|
|
87
|
+
export const CRON_SCHEDULE = "CRON_SCHEDULE";
|
|
88
|
+
export const INTERVAL_SCHEDULE = "INTERVAL_SCHEDULE";
|
|
92
89
|
//# sourceMappingURL=cron.helper.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cron.helper.js","sourceRoot":"","sources":["../../src/helpers/cron.helper.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"cron.helper.js","sourceRoot":"","sources":["../../src/helpers/cron.helper.ts"],"names":[],"mappings":"AAMA,MAAM,CAAN,IAAY,cAoFX;AApFD,WAAY,cAAc;IACxB,8CAA4B,CAAA;IAC5B,mDAAiC,CAAA;IACjC,qDAAmC,CAAA;IACnC,qDAAmC,CAAA;IACnC,8CAA4B,CAAA;IAC5B,mDAAiC,CAAA;IACjC,qDAAmC,CAAA;IACnC,qDAAmC,CAAA;IACnC,+CAA6B,CAAA;IAC7B,kDAAgC,CAAA;IAChC,kDAAgC,CAAA;IAChC,kDAAgC,CAAA;IAChC,kDAAgC,CAAA;IAChC,kDAAgC,CAAA;IAChC,kDAAgC,CAAA;IAChC,kDAAgC,CAAA;IAChC,kDAAgC,CAAA;IAChC,oDAAkC,CAAA;IAClC,oDAAkC,CAAA;IAClC,oDAAkC,CAAA;IAClC,iDAA+B,CAAA;IAC/B,iDAA+B,CAAA;IAC/B,iDAA+B,CAAA;IAC/B,iDAA+B,CAAA;IAC/B,iDAA+B,CAAA;IAC/B,iDAA+B,CAAA;IAC/B,iDAA+B,CAAA;IAC/B,iDAA+B,CAAA;IAC/B,iDAA+B,CAAA;IAC/B,kDAAgC,CAAA;IAChC,kDAAgC,CAAA;IAChC,kDAAgC,CAAA;IAChC,iDAA+B,CAAA;IAC/B,iDAA+B,CAAA;IAC/B,iDAA+B,CAAA;IAC/B,iDAA+B,CAAA;IAC/B,iDAA+B,CAAA;IAC/B,iDAA+B,CAAA;IAC/B,iDAA+B,CAAA;IAC/B,iDAA+B,CAAA;IAC/B,iDAA+B,CAAA;IAC/B,kDAAgC,CAAA;IAChC,kDAAgC,CAAA;IAChC,qDAAmC,CAAA;IACnC,0CAAwB,CAAA;IACxB,+CAA6B,CAAA;IAC7B,+CAA6B,CAAA;IAC7B,kEAAgD,CAAA;IAChD,+DAA6C,CAAA;IAC7C,gDAA8B,CAAA;IAC9B,yEAAuD,CAAA;IACvD,iDAA+B,CAAA;IAC/B,+CAA6B,CAAA;IAC7B,gDAA8B,CAAA;IAC9B,0CAAwB,CAAA;IACxB,4EAA0D,CAAA;IAC1D,4EAA0D,CAAA;IAC1D,8EAA4D,CAAA;IAC5D,4DAA0C,CAAA;IAC1C,4DAA0C,CAAA;IAC1C,4DAA0C,CAAA;IAC1C,4DAA0C,CAAA;IAC1C,4DAA0C,CAAA;IAC1C,4DAA0C,CAAA;IAC1C,4DAA0C,CAAA;IAC1C,4DAA0C,CAAA;IAC1C,4DAA0C,CAAA;IAC1C,iEAA+C,CAAA;IAC/C,6DAA2C,CAAA;IAC3C,6DAA2C,CAAA;IAC3C,iEAA+C,CAAA;IAC/C,6DAA2C,CAAA;IAC3C,4DAA0C,CAAA;IAC1C,4DAA0C,CAAA;IAC1C,4DAA0C,CAAA;IAC1C,4DAA0C,CAAA;IAC1C,4DAA0C,CAAA;IAC1C,4DAA0C,CAAA;IAC1C,4DAA0C,CAAA;IAC1C,4DAA0C,CAAA;IAC1C,4DAA0C,CAAA;IAC1C,6DAA2C,CAAA;IAC3C,6DAA2C,CAAA;AAC7C,CAAC,EApFW,cAAc,KAAd,cAAc,QAoFzB;AACD,MAAM,CAAC,MAAM,aAAa,GAAG,eAAe,CAAC;AAC7C,MAAM,CAAC,MAAM,iBAAiB,GAAG,mBAAmB,CAAC"}
|
|
@@ -1,9 +1,4 @@
|
|
|
1
1
|
import { TContext } from "..";
|
|
2
|
-
export type MaybeHttpError = {
|
|
3
|
-
error: string;
|
|
4
|
-
message: string;
|
|
5
|
-
statusCode: number;
|
|
6
|
-
};
|
|
7
2
|
export declare class BootstrapException extends Error {
|
|
8
3
|
context: TContext;
|
|
9
4
|
cause: string;
|
|
@@ -16,10 +11,3 @@ export declare class InternalError extends Error {
|
|
|
16
11
|
timestamp: Date;
|
|
17
12
|
constructor(context: TContext, cause: string, message: string);
|
|
18
13
|
}
|
|
19
|
-
export declare class FetchRequestError extends Error {
|
|
20
|
-
statusCode: number;
|
|
21
|
-
error: string;
|
|
22
|
-
timestamp: Date;
|
|
23
|
-
context: TContext;
|
|
24
|
-
constructor(context: TContext, statusCode: number, error: string, message: string);
|
|
25
|
-
}
|