@digital-alchemy/core 24.8.4 → 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.
Files changed (117) hide show
  1. package/README.md +4 -1
  2. package/dist/helpers/async.helper.d.ts +1 -1
  3. package/dist/helpers/async.helper.js +13 -14
  4. package/dist/helpers/async.helper.js.map +1 -1
  5. package/dist/helpers/config-environment-loader.helper.js +16 -20
  6. package/dist/helpers/config-environment-loader.helper.js.map +1 -1
  7. package/dist/helpers/config-file-loader.helper.js +39 -46
  8. package/dist/helpers/config-file-loader.helper.js.map +1 -1
  9. package/dist/helpers/config.helper.d.ts +23 -2
  10. package/dist/helpers/config.helper.js +28 -38
  11. package/dist/helpers/config.helper.js.map +1 -1
  12. package/dist/helpers/context.helper.js +1 -2
  13. package/dist/helpers/cron.helper.d.ts +27 -0
  14. package/dist/helpers/cron.helper.js +4 -7
  15. package/dist/helpers/cron.helper.js.map +1 -1
  16. package/dist/helpers/errors.helper.d.ts +0 -12
  17. package/dist/helpers/errors.helper.js +2 -23
  18. package/dist/helpers/errors.helper.js.map +1 -1
  19. package/dist/helpers/events.helper.js +4 -10
  20. package/dist/helpers/events.helper.js.map +1 -1
  21. package/dist/helpers/extend.helper.js +12 -17
  22. package/dist/helpers/extend.helper.js.map +1 -1
  23. package/dist/helpers/index.d.ts +2 -4
  24. package/dist/helpers/index.js +14 -19
  25. package/dist/helpers/index.js.map +1 -1
  26. package/dist/helpers/lifecycle.helper.d.ts +1 -5
  27. package/dist/helpers/lifecycle.helper.js +1 -4
  28. package/dist/helpers/lifecycle.helper.js.map +1 -1
  29. package/dist/{extensions/logger.extension.d.ts → helpers/logger.helper.d.ts} +33 -40
  30. package/dist/helpers/logger.helper.js +10 -0
  31. package/dist/helpers/logger.helper.js.map +1 -0
  32. package/dist/helpers/module.helper.d.ts +74 -0
  33. package/dist/helpers/module.helper.js +131 -0
  34. package/dist/helpers/module.helper.js.map +1 -0
  35. package/dist/helpers/utilities.helper.d.ts +1 -0
  36. package/dist/helpers/utilities.helper.js +57 -58
  37. package/dist/helpers/utilities.helper.js.map +1 -1
  38. package/dist/helpers/wiring.helper.d.ts +77 -23
  39. package/dist/helpers/wiring.helper.js +45 -47
  40. package/dist/helpers/wiring.helper.js.map +1 -1
  41. package/dist/index.d.ts +2 -1
  42. package/dist/index.js +3 -5
  43. package/dist/index.js.map +1 -1
  44. package/dist/services/als.extension.d.ts +2 -0
  45. package/dist/services/als.extension.js +17 -0
  46. package/dist/services/als.extension.js.map +1 -0
  47. package/dist/services/configuration.extension.d.ts +7 -0
  48. package/dist/services/configuration.extension.js +117 -0
  49. package/dist/services/configuration.extension.js.map +1 -0
  50. package/dist/{extensions → services}/index.d.ts +1 -3
  51. package/dist/services/index.js +8 -0
  52. package/dist/services/index.js.map +1 -0
  53. package/dist/{extensions → services}/internal.extension.d.ts +7 -23
  54. package/dist/{extensions → services}/internal.extension.js +43 -55
  55. package/dist/services/internal.extension.js.map +1 -0
  56. package/dist/{extensions → services}/is.extension.d.ts +5 -0
  57. package/dist/{extensions → services}/is.extension.js +20 -15
  58. package/dist/services/is.extension.js.map +1 -0
  59. package/dist/{extensions → services}/lifecycle.extension.js +17 -19
  60. package/dist/services/lifecycle.extension.js.map +1 -0
  61. package/dist/services/logger.extension.d.ts +2 -0
  62. package/dist/services/logger.extension.js +200 -0
  63. package/dist/services/logger.extension.js.map +1 -0
  64. package/dist/services/scheduler.extension.d.ts +2 -0
  65. package/dist/services/scheduler.extension.js +108 -0
  66. package/dist/services/scheduler.extension.js.map +1 -0
  67. package/dist/services/wiring.extension.d.ts +111 -0
  68. package/dist/services/wiring.extension.js +437 -0
  69. package/dist/services/wiring.extension.js.map +1 -0
  70. package/dist/testing/index.d.ts +2 -0
  71. package/dist/testing/index.js +3 -0
  72. package/dist/testing/index.js.map +1 -0
  73. package/dist/testing/mock-logger.d.ts +2 -0
  74. package/dist/testing/mock-logger.js +11 -0
  75. package/dist/testing/mock-logger.js.map +1 -0
  76. package/dist/testing/test-module.d.ts +112 -0
  77. package/dist/testing/test-module.js +138 -0
  78. package/dist/testing/test-module.js.map +1 -0
  79. package/package.json +57 -43
  80. package/dist/extensions/cache.extension.d.ts +0 -2
  81. package/dist/extensions/cache.extension.js +0 -90
  82. package/dist/extensions/cache.extension.js.map +0 -1
  83. package/dist/extensions/configuration.extension.d.ts +0 -52
  84. package/dist/extensions/configuration.extension.js +0 -131
  85. package/dist/extensions/configuration.extension.js.map +0 -1
  86. package/dist/extensions/fetch.extension.d.ts +0 -17
  87. package/dist/extensions/fetch.extension.js +0 -133
  88. package/dist/extensions/fetch.extension.js.map +0 -1
  89. package/dist/extensions/index.js +0 -13
  90. package/dist/extensions/index.js.map +0 -1
  91. package/dist/extensions/internal.extension.js.map +0 -1
  92. package/dist/extensions/is.extension.js.map +0 -1
  93. package/dist/extensions/lifecycle.extension.js.map +0 -1
  94. package/dist/extensions/logger.extension.js +0 -186
  95. package/dist/extensions/logger.extension.js.map +0 -1
  96. package/dist/extensions/metrics.extension.d.ts +0 -18
  97. package/dist/extensions/metrics.extension.js +0 -156
  98. package/dist/extensions/metrics.extension.js.map +0 -1
  99. package/dist/extensions/scheduler.extension.d.ts +0 -21
  100. package/dist/extensions/scheduler.extension.js +0 -133
  101. package/dist/extensions/scheduler.extension.js.map +0 -1
  102. package/dist/extensions/wiring.extension.d.ts +0 -50
  103. package/dist/extensions/wiring.extension.js +0 -374
  104. package/dist/extensions/wiring.extension.js.map +0 -1
  105. package/dist/helpers/cache-memory.helper.d.ts +0 -6
  106. package/dist/helpers/cache-memory.helper.js +0 -68
  107. package/dist/helpers/cache-memory.helper.js.map +0 -1
  108. package/dist/helpers/cache-redis.helper.d.ts +0 -6
  109. package/dist/helpers/cache-redis.helper.js +0 -73
  110. package/dist/helpers/cache-redis.helper.js.map +0 -1
  111. package/dist/helpers/cache.helper.d.ts +0 -19
  112. package/dist/helpers/cache.helper.js +0 -9
  113. package/dist/helpers/cache.helper.js.map +0 -1
  114. package/dist/helpers/fetch.helper.d.ts +0 -165
  115. package/dist/helpers/fetch.helper.js +0 -173
  116. package/dist/helpers/fetch.helper.js.map +0 -1
  117. /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":"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"}
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.4",
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
- "dependencies": {
52
- "chalk": "^5.3.0",
53
- "dayjs": "^1.11.11",
54
- "dotenv": "^16.4.5",
55
- "ini": "^4.1.3",
56
- "js-yaml": "^4.1.0",
57
- "minimist": "^1.2.8",
58
- "node-cache": "^5.1.2",
59
- "node-cron": "^3.0.3",
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.9.1",
67
- "@faker-js/faker": "^8.4.1",
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.12",
68
+ "@types/jest": "^29.5.13",
71
69
  "@types/js-yaml": "^4.0.9",
72
70
  "@types/minimist": "^1.2.5",
73
- "@types/node": "^20.14.8",
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
- "@typescript-eslint/eslint-plugin": "7.3.1",
78
- "@typescript-eslint/parser": "7.3.1",
79
- "eslint": "8.57.0",
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.29.1",
82
- "eslint-plugin-jsonc": "^2.14.1",
83
- "eslint-plugin-no-unsanitized": "^4.0.2",
84
- "eslint-plugin-prettier": "^5.1.3",
85
- "eslint-plugin-security": "^2.1.1",
86
- "eslint-plugin-simple-import-sort": "^12.0.0",
87
- "eslint-plugin-sonarjs": "^0.24.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": "^51.0.1",
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
- "npm-check-updates": "^16.14.20",
93
- "prettier": "^3.3.2",
94
- "ts-jest": "^29.1.5",
95
- "tslib": "^2.6.3",
96
- "tsx": "^4.15.7",
97
- "type-fest": "^4.20.1",
98
- "typescript": "^5.5.2"
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.3.1"
143
+ "packageManager": "yarn@4.5.0"
130
144
  }
@@ -1,2 +0,0 @@
1
- import { TCache, TServiceParams } from "..";
2
- export declare function Cache({ logger, lifecycle, config, internal, }: TServiceParams): TCache;
@@ -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":";;AAUA,sBAuGC;AAjHD,0BAOY;AACZ,wBAAuB;AAEvB,SAAgB,KAAK,CAAC,EACpB,MAAM,EACN,SAAS,EACT,MAAM,EACN,QAAQ,GACO;IACf,IAAI,MAAoB,CAAC;IACzB,MAAM,MAAM,GAAG,GAAG,EAAE,CAClB,MAAM,CAAC,WAAW,CAAC,YAAY,IAAI,QAAQ,CAAC,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC;IAEpE,SAAS,WAAW,CAAC,GAAW;QAC9B,OAAO,GAAG,MAAM,CAAC,WAAW,CAAC,YAAY,GAAG,GAAG,EAAE,CAAC;IACpD,CAAC;IAED,sBAAsB;IACtB,SAAS,CAAC,YAAY,CAAC,KAAK,IAAI,EAAE;QAChC,IAAI,MAAM,EAAE,CAAC;YACX,OAAO;QACT,CAAC;QACD,MAAM,CAAC,KAAK,CACV,EAAE,IAAI,EAAE,cAAc,EAAE,QAAQ,EAAE,MAAM,CAAC,WAAW,CAAC,cAAc,EAAE,EACrE,YAAY,CACb,CAAC;QACF,IAAI,MAAM,CAAC,WAAW,CAAC,cAAc,KAAK,OAAO,EAAE,CAAC;YAClD,MAAM,GAAG,MAAM,IAAA,qBAAiB,EAAC,EAAE,MAAM,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,EAAE,CAAC,CAAC;YAC1E,OAAO;QACT,CAAC;QACD,MAAM,GAAG,MAAM,IAAA,sBAAkB,EAAC,EAAE,MAAM,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,EAAE,CAAC,CAAC;IAC7E,CAAC,CAAC,CAAC;IAEH,uBAAuB;IACvB,OAAO;QACL,CAAC,MAAM,CAAC,GAAG,CAAC,cAAc,CAAC,CAAC,EAAE,MAAM;QACpC,GAAG,EAAE,KAAK,EAAE,GAAW,EAAiB,EAAE;YACxC,IAAI,CAAC;gBACH,MAAM,OAAO,GAAG,WAAW,CAAC,GAAG,CAAC,CAAC;gBACjC,MAAM,MAAM,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;gBAC1B,QAAQ,CAAC,WAAW,CAAC,OAAO,CAAC,6BAA6B,CAAC,GAAG,CAAC;oBAC7D,GAAG,EAAE,OAAO;oBACZ,MAAM,EAAE,MAAM,EAAE;iBACjB,CAAC,CAAC;YACL,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBACf,QAAQ,CAAC,WAAW,CAAC,OAAO,CAAC,wBAAwB,CAAC,MAAM,CAC1D,KAAK,CACN,CAAC,GAAG,EAAE,CAAC;gBACR,MAAM,CAAC,KAAK,CAAC,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,EAAE,aAAa,CAAC,CAAC;YACtD,CAAC;QACH,CAAC;QACD,GAAG,EAAE,KAAK,EAAK,GAAW,EAAE,YAAgB,EAAc,EAAE;YAC1D,IAAI,CAAC;gBACH,MAAM,OAAO,GAAG,WAAW,CAAC,GAAG,CAAC,CAAC;gBACjC,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;gBACzC,QAAQ,CAAC,WAAW,CAAC,OAAO,CAAC,0BAA0B,CAAC,GAAG,CAAC;oBAC1D,QAAQ,EAAE,KAAE,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK;oBAC/C,GAAG,EAAE,OAAO;oBACZ,MAAM,EAAE,MAAM,EAAE;iBACjB,CAAC,CAAC;gBACH,OAAO,KAAE,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAE,MAAY,CAAC;YAC7D,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBACf,MAAM,CAAC,IAAI,CAAC,EAAE,YAAY,EAAE,KAAK,EAAE,GAAG,EAAE,IAAI,EAAE,KAAK,EAAE,EAAE,aAAa,CAAC,CAAC;gBACtE,QAAQ,CAAC,WAAW,CAAC,OAAO,CAAC,wBAAwB,CAAC,MAAM,CAC1D,KAAK,CACN,CAAC,GAAG,EAAE,CAAC;gBACR,OAAO,YAAY,CAAC;YACtB,CAAC;QACH,CAAC;QACD,IAAI,EAAE,KAAK,EAAE,OAAO,GAAG,EAAE,EAAqB,EAAE;YAC9C,IAAI,CAAC;gBACH,MAAM,WAAW,GAAG,WAAW,CAAC,OAAO,CAAC,CAAC;gBACzC,MAAM,IAAI,GAAG,MAAM,MAAM,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;gBAC5C,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,QAAI,EAAE,MAAM,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;YACvE,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBACf,QAAQ,CAAC,WAAW,CAAC,OAAO,CAAC,wBAAwB,CAAC,MAAM,CAC1D,MAAM,CACP,CAAC,GAAG,EAAE,CAAC;gBACR,MAAM,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,IAAI,EAAE,MAAM,EAAE,EAAE,aAAa,CAAC,CAAC;gBACpD,OAAO,EAAE,CAAC;YACZ,CAAC;QACH,CAAC;QACD,GAAG,EAAE,KAAK,EACR,GAAW,EACX,KAAQ,EACR,GAAG,GAAG,MAAM,CAAC,WAAW,CAAC,SAAS,EACnB,EAAE;YACjB,IAAI,CAAC;gBACH,MAAM,OAAO,GAAG,WAAW,CAAC,GAAG,CAAC,CAAC;gBACjC,MAAM,MAAM,CAAC,GAAG,CAAC,OAAO,EAAE,KAAK,EAAE,GAAG,CAAC,CAAC;gBACtC,QAAQ,CAAC,WAAW,CAAC,OAAO,CAAC,0BAA0B,CAAC,GAAG,CAAC;oBAC1D,GAAG,EAAE,OAAO;oBACZ,MAAM,EAAE,MAAM,CAAC,WAAW,CAAC,YAAY;iBACxC,CAAC,CAAC;YACL,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBACf,QAAQ,CAAC,WAAW,CAAC,OAAO,CAAC,wBAAwB,CAAC,MAAM,CAC1D,KAAK,CACN,CAAC,GAAG,EAAE,CAAC;gBACR,MAAM,CAAC,KAAK,CAAC,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,EAAE,aAAa,CAAC,CAAC;YACtD,CAAC;QACH,CAAC;QACD,SAAS,EAAE,CAAC,SAAS,EAAE,EAAE;YACvB,MAAM,CAAC,KAAK,CAAC,EAAE,IAAI,EAAE,WAAW,EAAE,EAAE,wBAAwB,CAAC,CAAC;YAC9D,MAAM,GAAG,SAAS,CAAC;QACrB,CAAC;KACQ,CAAC;AACd,CAAC"}
@@ -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>;