@digital-alchemy/core 24.8.4 → 24.9.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +17 -27
- package/dist/helpers/async.helper.d.ts +1 -1
- package/dist/helpers/async.helper.js +13 -14
- package/dist/helpers/async.helper.js.map +1 -1
- package/dist/helpers/config-environment-loader.helper.js +16 -20
- package/dist/helpers/config-environment-loader.helper.js.map +1 -1
- package/dist/helpers/config-file-loader.helper.d.ts +5 -3
- package/dist/helpers/config-file-loader.helper.js +45 -52
- package/dist/helpers/config-file-loader.helper.js.map +1 -1
- package/dist/helpers/config.helper.d.ts +24 -3
- package/dist/helpers/config.helper.js +30 -37
- package/dist/helpers/config.helper.js.map +1 -1
- package/dist/helpers/context.helper.js +1 -2
- package/dist/helpers/cron.helper.d.ts +27 -0
- package/dist/helpers/cron.helper.js +4 -7
- package/dist/helpers/cron.helper.js.map +1 -1
- package/dist/helpers/errors.helper.d.ts +0 -12
- package/dist/helpers/errors.helper.js +2 -23
- package/dist/helpers/errors.helper.js.map +1 -1
- package/dist/helpers/events.helper.js +4 -10
- package/dist/helpers/events.helper.js.map +1 -1
- package/dist/helpers/extend.helper.d.ts +2 -0
- package/dist/helpers/extend.helper.js +19 -24
- package/dist/helpers/extend.helper.js.map +1 -1
- package/dist/helpers/index.d.ts +2 -4
- package/dist/helpers/index.js +14 -19
- package/dist/helpers/index.js.map +1 -1
- package/dist/helpers/lifecycle.helper.d.ts +1 -5
- package/dist/helpers/lifecycle.helper.js +1 -4
- package/dist/helpers/lifecycle.helper.js.map +1 -1
- package/dist/{extensions/logger.extension.d.ts → helpers/logger.helper.d.ts} +33 -40
- package/dist/helpers/logger.helper.js +10 -0
- package/dist/helpers/logger.helper.js.map +1 -0
- package/dist/helpers/module.helper.d.ts +74 -0
- package/dist/helpers/module.helper.js +131 -0
- package/dist/helpers/module.helper.js.map +1 -0
- package/dist/helpers/utilities.helper.d.ts +3 -14
- package/dist/helpers/utilities.helper.js +51 -73
- package/dist/helpers/utilities.helper.js.map +1 -1
- package/dist/helpers/wiring.helper.d.ts +77 -23
- package/dist/helpers/wiring.helper.js +45 -47
- package/dist/helpers/wiring.helper.js.map +1 -1
- package/dist/index.d.ts +2 -1
- package/dist/index.js +3 -5
- package/dist/index.js.map +1 -1
- package/dist/services/als.extension.d.ts +2 -0
- package/dist/services/als.extension.js +17 -0
- package/dist/services/als.extension.js.map +1 -0
- package/dist/services/configuration.extension.d.ts +7 -0
- package/dist/services/configuration.extension.js +117 -0
- package/dist/services/configuration.extension.js.map +1 -0
- package/dist/{extensions → services}/index.d.ts +1 -3
- package/dist/services/index.js +8 -0
- package/dist/services/index.js.map +1 -0
- package/dist/{extensions → services}/internal.extension.d.ts +7 -23
- package/dist/{extensions → services}/internal.extension.js +43 -55
- package/dist/services/internal.extension.js.map +1 -0
- package/dist/{extensions → services}/is.extension.d.ts +5 -0
- package/dist/{extensions → services}/is.extension.js +20 -15
- package/dist/services/is.extension.js.map +1 -0
- package/dist/{extensions → services}/lifecycle.extension.js +17 -19
- package/dist/services/lifecycle.extension.js.map +1 -0
- package/dist/services/logger.extension.d.ts +2 -0
- package/dist/services/logger.extension.js +201 -0
- package/dist/services/logger.extension.js.map +1 -0
- package/dist/services/scheduler.extension.d.ts +2 -0
- package/dist/services/scheduler.extension.js +108 -0
- package/dist/services/scheduler.extension.js.map +1 -0
- package/dist/services/wiring.extension.d.ts +111 -0
- package/dist/services/wiring.extension.js +437 -0
- package/dist/services/wiring.extension.js.map +1 -0
- package/dist/testing/index.d.ts +2 -0
- package/dist/testing/index.js +3 -0
- package/dist/testing/index.js.map +1 -0
- package/dist/testing/mock-logger.d.ts +2 -0
- package/dist/testing/mock-logger.js +11 -0
- package/dist/testing/mock-logger.js.map +1 -0
- package/dist/testing/test-module.d.ts +112 -0
- package/dist/testing/test-module.js +138 -0
- package/dist/testing/test-module.js.map +1 -0
- package/package.json +56 -43
- package/dist/extensions/cache.extension.d.ts +0 -2
- package/dist/extensions/cache.extension.js +0 -90
- package/dist/extensions/cache.extension.js.map +0 -1
- package/dist/extensions/configuration.extension.d.ts +0 -52
- package/dist/extensions/configuration.extension.js +0 -131
- package/dist/extensions/configuration.extension.js.map +0 -1
- package/dist/extensions/fetch.extension.d.ts +0 -17
- package/dist/extensions/fetch.extension.js +0 -133
- package/dist/extensions/fetch.extension.js.map +0 -1
- package/dist/extensions/index.js +0 -13
- package/dist/extensions/index.js.map +0 -1
- package/dist/extensions/internal.extension.js.map +0 -1
- package/dist/extensions/is.extension.js.map +0 -1
- package/dist/extensions/lifecycle.extension.js.map +0 -1
- package/dist/extensions/logger.extension.js +0 -186
- package/dist/extensions/logger.extension.js.map +0 -1
- package/dist/extensions/metrics.extension.d.ts +0 -18
- package/dist/extensions/metrics.extension.js +0 -156
- package/dist/extensions/metrics.extension.js.map +0 -1
- package/dist/extensions/scheduler.extension.d.ts +0 -21
- package/dist/extensions/scheduler.extension.js +0 -133
- package/dist/extensions/scheduler.extension.js.map +0 -1
- package/dist/extensions/wiring.extension.d.ts +0 -50
- package/dist/extensions/wiring.extension.js +0 -374
- package/dist/extensions/wiring.extension.js.map +0 -1
- package/dist/helpers/cache-memory.helper.d.ts +0 -6
- package/dist/helpers/cache-memory.helper.js +0 -68
- package/dist/helpers/cache-memory.helper.js.map +0 -1
- package/dist/helpers/cache-redis.helper.d.ts +0 -6
- package/dist/helpers/cache-redis.helper.js +0 -73
- package/dist/helpers/cache-redis.helper.js.map +0 -1
- package/dist/helpers/cache.helper.d.ts +0 -19
- package/dist/helpers/cache.helper.js +0 -9
- package/dist/helpers/cache.helper.js.map +0 -1
- package/dist/helpers/fetch.helper.d.ts +0 -165
- package/dist/helpers/fetch.helper.js +0 -173
- package/dist/helpers/fetch.helper.js.map +0 -1
- /package/dist/{extensions → services}/lifecycle.extension.d.ts +0 -0
package/README.md
CHANGED
|
@@ -1,48 +1,38 @@
|
|
|
1
|
+
[](https://github.com/Digital-Alchemy-TS/core)
|
|
2
|
+

|
|
3
|
+
|
|
1
4
|
[](https://codecov.io/github/Digital-Alchemy-TS/core)
|
|
5
|
+
[](https://www.npmjs.com/package/@digital-alchemy/core)
|
|
2
6
|
|
|
3
7
|
---
|
|
4
8
|
|
|
5
9
|
# 🚀 Project Overview - Digital Alchemy TypeScript Libraries
|
|
6
10
|
|
|
7
|
-
Welcome to `@digital-alchemy/core
|
|
8
|
-
This repository contains the boilerplate code for building applications and wiring logic.
|
|
9
|
-
|
|
10
|
-
- [Extended docs](https://docs.digital-alchemy.app/docs/core/)
|
|
11
|
-
- [Discord](https://discord.gg/JkZ35Gv97Y)
|
|
12
|
-
|
|
13
|
-
## 🌐 Core Library Overview
|
|
11
|
+
Welcome to `@digital-alchemy/core`
|
|
14
12
|
|
|
15
|
-
|
|
13
|
+
The core library is a minimal dependency framework for building Typescript based applications and libraries.
|
|
14
|
+
It aims to provide some basic workflows and tools that can be used to create a variety of different types of projects.
|
|
16
15
|
|
|
17
|
-
|
|
16
|
+
> 📚 [Extended docs](https://docs.digital-alchemy.app/docs/core/)
|
|
18
17
|
|
|
19
|
-
|
|
18
|
+
## 🌐 Tools Overview
|
|
20
19
|
|
|
21
|
-
|
|
20
|
+
### ⚙️ [Configuration](https://docs.digital-alchemy.app/docs/core/configuration)
|
|
22
21
|
|
|
23
|
-
|
|
22
|
+
Define and load structured configuration data from files, merge data from environment variables, and more.
|
|
24
23
|
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
### 📝 Logger
|
|
24
|
+
### 📝 [Logger](https://docs.digital-alchemy.app/docs/core/logger/api)
|
|
28
25
|
|
|
29
26
|
Advanced logging interface for detailed and customizable output, compatible with external libraries for specialized logging needs.
|
|
30
27
|
|
|
31
|
-
### ⏲️ Scheduler
|
|
28
|
+
### ⏲️ [Scheduler](https://docs.digital-alchemy.app/docs/core/scheduler)
|
|
32
29
|
|
|
33
30
|
Lifecycle-aware task scheduling, featuring flexible timing functions and robust error handling.
|
|
34
31
|
|
|
35
|
-
### 🔄
|
|
36
|
-
|
|
37
|
-
Comprehensive support for managing the application's lifecycle, from initialization to shutdown.
|
|
32
|
+
### 🔄 [Lifecycle Hooks](https://docs.digital-alchemy.app/docs/core/lifecycle)
|
|
38
33
|
|
|
39
|
-
|
|
34
|
+
Run commands at a variety of predetermined times during your application's boot or shutdown sequence.
|
|
40
35
|
|
|
41
|
-
|
|
42
|
-
Each is designed to extend the capabilities the core library, offering specialized functionalities for a wide range of use cases.
|
|
36
|
+
### ⁉️ [Testing Utilities](https://docs.digital-alchemy.app/docs/testing/)
|
|
43
37
|
|
|
44
|
-
|
|
45
|
-
| ------------------- | ------------------------------------------------------------------------------- | ---------------------------------------------------------- | ---------------------------------------------------------------------- |
|
|
46
|
-
| `hass` | Home Assistant integration for smart home automation. | [GitHub](https://github.com/Digital-Alchemy-TS/hass) | [npm](https://www.npmjs.com/package/@digital-alchemy/hass) |
|
|
47
|
-
| `synapse` | Tools for generating entities within home assistant | [GitHub](https://github.com/Digital-Alchemy-TS/synapse) | [npm](https://www.npmjs.com/package/@digital-alchemy/synapse) |
|
|
48
|
-
| `automation` | Advanced automation tools for creating dynamic workflows. | [GitHub](https://github.com/Digital-Alchemy-TS/automation) | [npm](https://www.npmjs.com/package/@digital-alchemy/automation) |
|
|
38
|
+
Convert your application into a testing module - append extra libraries and reconfigure modules to get the coverage you're looking for.
|
|
@@ -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
8
|
const out = {};
|
|
13
9
|
// * merge dotenv into local vars
|
|
14
10
|
// accounts for `--env-file` switches, and whatever is passed in via bootstrap
|
|
15
|
-
|
|
16
|
-
const environmentKeys = Object.keys(
|
|
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,5 +1,7 @@
|
|
|
1
|
-
import { ServiceMap } from "..";
|
|
1
|
+
import { PartialConfiguration, ServiceMap } from "..";
|
|
2
2
|
import { ConfigLoaderParams, ConfigLoaderReturn, ModuleConfiguration } from "./config.helper";
|
|
3
3
|
export declare const SUPPORTED_CONFIG_EXTENSIONS: string[];
|
|
4
|
-
export declare function
|
|
5
|
-
export declare function
|
|
4
|
+
export declare function withExtensions(path: string): string[];
|
|
5
|
+
export declare function configFilePaths(name: string): string[];
|
|
6
|
+
export declare function configLoaderFile<S extends ServiceMap = ServiceMap, C extends ModuleConfiguration = ModuleConfiguration>({ application, logger }: ConfigLoaderParams<S, C>): ConfigLoaderReturn;
|
|
7
|
+
export declare function loadConfigFromFile(out: PartialConfiguration, filePath: string): void;
|
|
@@ -1,82 +1,75 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
const
|
|
10
|
-
const
|
|
11
|
-
|
|
12
|
-
|
|
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"];
|
|
17
|
-
function withExtensions(path) {
|
|
18
|
-
return [path, (0, path_1.join)(path, "config")].flatMap((path) => [
|
|
1
|
+
import fs from "fs";
|
|
2
|
+
import ini from "ini";
|
|
3
|
+
import yaml from "js-yaml";
|
|
4
|
+
import minimist from "minimist";
|
|
5
|
+
import { homedir } from "os";
|
|
6
|
+
import { join } from "path";
|
|
7
|
+
import { cwd, 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"];
|
|
11
|
+
export function withExtensions(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
|
|
17
|
+
export function configFilePaths(name) {
|
|
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 => fs.existsSync(filePath) && fs.statSync(filePath).isFile());
|
|
40
34
|
}
|
|
41
|
-
async function
|
|
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
|
-
logger.trace({ files, name:
|
|
41
|
+
logger.trace({ files, name: configLoaderFile }, `identified config files`);
|
|
48
42
|
}
|
|
49
43
|
else {
|
|
50
|
-
if (!
|
|
51
|
-
logger.fatal({ configFile, name:
|
|
52
|
-
|
|
44
|
+
if (!fs.existsSync(configFile)) {
|
|
45
|
+
logger.fatal({ configFile, name: configLoaderFile }, `used {--config} to specify path that does not exist`);
|
|
46
|
+
process.exit();
|
|
53
47
|
}
|
|
54
48
|
files = [configFile];
|
|
55
|
-
logger.debug({ configFile, name:
|
|
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
|
-
logger.trace({ files, name:
|
|
62
|
-
files.forEach(
|
|
55
|
+
logger.trace({ files, name: configLoaderFile }, `loading configuration files`);
|
|
56
|
+
files.forEach(file => loadConfigFromFile(out, file));
|
|
63
57
|
return out;
|
|
64
58
|
}
|
|
65
|
-
function loadConfigFromFile(out, filePath) {
|
|
66
|
-
const fileContent =
|
|
67
|
-
const hasExtension =
|
|
68
|
-
if (filePath.slice(extension.length *
|
|
69
|
-
extension) {
|
|
59
|
+
export function loadConfigFromFile(out, filePath) {
|
|
60
|
+
const fileContent = fs.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, ini.decode(fileContent));
|
|
73
66
|
return true;
|
|
74
67
|
case "yaml":
|
|
75
68
|
case "yml":
|
|
76
|
-
|
|
69
|
+
deepExtend(out, yaml.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 = yaml.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, ini.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;
|
|
@@ -98,7 +98,7 @@ export type ConfigLoaderParams<S extends ServiceMap = ServiceMap, C extends Opti
|
|
|
98
98
|
logger: ILogger;
|
|
99
99
|
};
|
|
100
100
|
export type ConfigLoader = <S extends ServiceMap, C extends OptionalModuleConfiguration>(params: ConfigLoaderParams<S, C>) => ConfigLoaderReturn;
|
|
101
|
-
export declare function cast<T = unknown>(data: string | string[], type: string): T;
|
|
101
|
+
export declare function cast<T = unknown>(data: boolean | number[] | string | string[], type: string): T;
|
|
102
102
|
export type ModuleConfiguration = {
|
|
103
103
|
[key: string]: AnyConfig;
|
|
104
104
|
};
|
|
@@ -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 path 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,22 @@ function iSearchKey(target, source) {
|
|
|
55
47
|
* - bootstrap envFile
|
|
56
48
|
* - cwd/.env (default file)
|
|
57
49
|
*/
|
|
58
|
-
function loadDotenv(internal, CLI_SWITCHES, logger) {
|
|
50
|
+
export function loadDotenv(internal, CLI_SWITCHES, logger) {
|
|
51
|
+
internal.boot.options ??= {};
|
|
59
52
|
let { envFile } = internal.boot.options;
|
|
60
53
|
const switchKeys = Object.keys(CLI_SWITCHES);
|
|
61
54
|
const searched = iSearchKey("env-file", switchKeys);
|
|
62
55
|
// --env-file > bootstrap
|
|
63
|
-
if (!
|
|
56
|
+
if (!is.empty(CLI_SWITCHES[searched])) {
|
|
64
57
|
envFile = CLI_SWITCHES[searched];
|
|
65
58
|
}
|
|
66
59
|
let file;
|
|
67
60
|
// * was provided an --env-file or something via boot
|
|
68
|
-
if (!
|
|
69
|
-
const checkFile =
|
|
70
|
-
?
|
|
71
|
-
:
|
|
72
|
-
if (
|
|
61
|
+
if (!is.empty(envFile)) {
|
|
62
|
+
const checkFile = path.isAbsolute(envFile)
|
|
63
|
+
? path.normalize(envFile)
|
|
64
|
+
: path.join(cwd(), envFile);
|
|
65
|
+
if (fs.existsSync(checkFile)) {
|
|
73
66
|
file = checkFile;
|
|
74
67
|
}
|
|
75
68
|
else {
|
|
@@ -77,9 +70,9 @@ function loadDotenv(internal, CLI_SWITCHES, logger) {
|
|
|
77
70
|
}
|
|
78
71
|
}
|
|
79
72
|
// * attempt default file
|
|
80
|
-
if (
|
|
81
|
-
const defaultFile =
|
|
82
|
-
if (
|
|
73
|
+
if (is.empty(file)) {
|
|
74
|
+
const defaultFile = path.join(cwd(), ".env");
|
|
75
|
+
if (fs.existsSync(defaultFile)) {
|
|
83
76
|
file = defaultFile;
|
|
84
77
|
}
|
|
85
78
|
else {
|
|
@@ -87,12 +80,12 @@ function loadDotenv(internal, CLI_SWITCHES, logger) {
|
|
|
87
80
|
}
|
|
88
81
|
}
|
|
89
82
|
// ? each of the steps above verified the path as valid
|
|
90
|
-
if (!
|
|
83
|
+
if (!is.empty(file)) {
|
|
91
84
|
logger.trace({ file, name: loadDotenv }, `loading env file`);
|
|
92
|
-
|
|
85
|
+
dotenv.config({ override: true, path: file });
|
|
93
86
|
}
|
|
94
87
|
}
|
|
95
|
-
function parseConfig(config, value) {
|
|
88
|
+
export function parseConfig(config, value) {
|
|
96
89
|
switch (config.type) {
|
|
97
90
|
case "string": {
|
|
98
91
|
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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"}
|