@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.
Files changed (119) hide show
  1. package/README.md +17 -27
  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.d.ts +5 -3
  8. package/dist/helpers/config-file-loader.helper.js +45 -52
  9. package/dist/helpers/config-file-loader.helper.js.map +1 -1
  10. package/dist/helpers/config.helper.d.ts +24 -3
  11. package/dist/helpers/config.helper.js +30 -37
  12. package/dist/helpers/config.helper.js.map +1 -1
  13. package/dist/helpers/context.helper.js +1 -2
  14. package/dist/helpers/cron.helper.d.ts +27 -0
  15. package/dist/helpers/cron.helper.js +4 -7
  16. package/dist/helpers/cron.helper.js.map +1 -1
  17. package/dist/helpers/errors.helper.d.ts +0 -12
  18. package/dist/helpers/errors.helper.js +2 -23
  19. package/dist/helpers/errors.helper.js.map +1 -1
  20. package/dist/helpers/events.helper.js +4 -10
  21. package/dist/helpers/events.helper.js.map +1 -1
  22. package/dist/helpers/extend.helper.d.ts +2 -0
  23. package/dist/helpers/extend.helper.js +19 -24
  24. package/dist/helpers/extend.helper.js.map +1 -1
  25. package/dist/helpers/index.d.ts +2 -4
  26. package/dist/helpers/index.js +14 -19
  27. package/dist/helpers/index.js.map +1 -1
  28. package/dist/helpers/lifecycle.helper.d.ts +1 -5
  29. package/dist/helpers/lifecycle.helper.js +1 -4
  30. package/dist/helpers/lifecycle.helper.js.map +1 -1
  31. package/dist/{extensions/logger.extension.d.ts → helpers/logger.helper.d.ts} +33 -40
  32. package/dist/helpers/logger.helper.js +10 -0
  33. package/dist/helpers/logger.helper.js.map +1 -0
  34. package/dist/helpers/module.helper.d.ts +74 -0
  35. package/dist/helpers/module.helper.js +131 -0
  36. package/dist/helpers/module.helper.js.map +1 -0
  37. package/dist/helpers/utilities.helper.d.ts +3 -14
  38. package/dist/helpers/utilities.helper.js +51 -73
  39. package/dist/helpers/utilities.helper.js.map +1 -1
  40. package/dist/helpers/wiring.helper.d.ts +77 -23
  41. package/dist/helpers/wiring.helper.js +45 -47
  42. package/dist/helpers/wiring.helper.js.map +1 -1
  43. package/dist/index.d.ts +2 -1
  44. package/dist/index.js +3 -5
  45. package/dist/index.js.map +1 -1
  46. package/dist/services/als.extension.d.ts +2 -0
  47. package/dist/services/als.extension.js +17 -0
  48. package/dist/services/als.extension.js.map +1 -0
  49. package/dist/services/configuration.extension.d.ts +7 -0
  50. package/dist/services/configuration.extension.js +117 -0
  51. package/dist/services/configuration.extension.js.map +1 -0
  52. package/dist/{extensions → services}/index.d.ts +1 -3
  53. package/dist/services/index.js +8 -0
  54. package/dist/services/index.js.map +1 -0
  55. package/dist/{extensions → services}/internal.extension.d.ts +7 -23
  56. package/dist/{extensions → services}/internal.extension.js +43 -55
  57. package/dist/services/internal.extension.js.map +1 -0
  58. package/dist/{extensions → services}/is.extension.d.ts +5 -0
  59. package/dist/{extensions → services}/is.extension.js +20 -15
  60. package/dist/services/is.extension.js.map +1 -0
  61. package/dist/{extensions → services}/lifecycle.extension.js +17 -19
  62. package/dist/services/lifecycle.extension.js.map +1 -0
  63. package/dist/services/logger.extension.d.ts +2 -0
  64. package/dist/services/logger.extension.js +201 -0
  65. package/dist/services/logger.extension.js.map +1 -0
  66. package/dist/services/scheduler.extension.d.ts +2 -0
  67. package/dist/services/scheduler.extension.js +108 -0
  68. package/dist/services/scheduler.extension.js.map +1 -0
  69. package/dist/services/wiring.extension.d.ts +111 -0
  70. package/dist/services/wiring.extension.js +437 -0
  71. package/dist/services/wiring.extension.js.map +1 -0
  72. package/dist/testing/index.d.ts +2 -0
  73. package/dist/testing/index.js +3 -0
  74. package/dist/testing/index.js.map +1 -0
  75. package/dist/testing/mock-logger.d.ts +2 -0
  76. package/dist/testing/mock-logger.js +11 -0
  77. package/dist/testing/mock-logger.js.map +1 -0
  78. package/dist/testing/test-module.d.ts +112 -0
  79. package/dist/testing/test-module.js +138 -0
  80. package/dist/testing/test-module.js.map +1 -0
  81. package/package.json +56 -43
  82. package/dist/extensions/cache.extension.d.ts +0 -2
  83. package/dist/extensions/cache.extension.js +0 -90
  84. package/dist/extensions/cache.extension.js.map +0 -1
  85. package/dist/extensions/configuration.extension.d.ts +0 -52
  86. package/dist/extensions/configuration.extension.js +0 -131
  87. package/dist/extensions/configuration.extension.js.map +0 -1
  88. package/dist/extensions/fetch.extension.d.ts +0 -17
  89. package/dist/extensions/fetch.extension.js +0 -133
  90. package/dist/extensions/fetch.extension.js.map +0 -1
  91. package/dist/extensions/index.js +0 -13
  92. package/dist/extensions/index.js.map +0 -1
  93. package/dist/extensions/internal.extension.js.map +0 -1
  94. package/dist/extensions/is.extension.js.map +0 -1
  95. package/dist/extensions/lifecycle.extension.js.map +0 -1
  96. package/dist/extensions/logger.extension.js +0 -186
  97. package/dist/extensions/logger.extension.js.map +0 -1
  98. package/dist/extensions/metrics.extension.d.ts +0 -18
  99. package/dist/extensions/metrics.extension.js +0 -156
  100. package/dist/extensions/metrics.extension.js.map +0 -1
  101. package/dist/extensions/scheduler.extension.d.ts +0 -21
  102. package/dist/extensions/scheduler.extension.js +0 -133
  103. package/dist/extensions/scheduler.extension.js.map +0 -1
  104. package/dist/extensions/wiring.extension.d.ts +0 -50
  105. package/dist/extensions/wiring.extension.js +0 -374
  106. package/dist/extensions/wiring.extension.js.map +0 -1
  107. package/dist/helpers/cache-memory.helper.d.ts +0 -6
  108. package/dist/helpers/cache-memory.helper.js +0 -68
  109. package/dist/helpers/cache-memory.helper.js.map +0 -1
  110. package/dist/helpers/cache-redis.helper.d.ts +0 -6
  111. package/dist/helpers/cache-redis.helper.js +0 -73
  112. package/dist/helpers/cache-redis.helper.js.map +0 -1
  113. package/dist/helpers/cache.helper.d.ts +0 -19
  114. package/dist/helpers/cache.helper.js +0 -9
  115. package/dist/helpers/cache.helper.js.map +0 -1
  116. package/dist/helpers/fetch.helper.d.ts +0 -165
  117. package/dist/helpers/fetch.helper.js +0 -173
  118. package/dist/helpers/fetch.helper.js.map +0 -1
  119. /package/dist/{extensions → services}/lifecycle.extension.d.ts +0 -0
@@ -1,29 +1,19 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.WIRING_CONTEXT = exports.COERCE_CONTEXT = exports.WIRE_PROJECT = void 0;
4
- exports.BuildSortOrder = BuildSortOrder;
5
- exports.ValidateLibrary = ValidateLibrary;
6
- exports.WireOrder = WireOrder;
7
- exports.CreateLibrary = CreateLibrary;
8
- const __1 = require("..");
9
- exports.WIRE_PROJECT = Symbol.for("wire-project");
10
- function BuildSortOrder(app, logger) {
11
- if (__1.is.empty(app.libraries)) {
1
+ import { BootstrapException, eachSeries, is, LOAD_PROJECT, } from "..";
2
+ export const WIRE_PROJECT = Symbol.for("wire-project");
3
+ export function buildSortOrder(app, logger) {
4
+ if (is.empty(app.libraries)) {
12
5
  return [];
13
6
  }
14
- const libraryMap = new Map(app.libraries.map((i) => [i.name, i]));
7
+ const libraryMap = new Map(app.libraries.map(i => [i.name, i]));
15
8
  // Recursive function to check for missing dependencies at any depth
16
9
  function checkDependencies(library) {
17
- const depends = [
18
- ...(library?.depends ?? []),
19
- ...(library?.optionalDepends ?? []),
20
- ];
21
- if (!__1.is.empty(depends)) {
22
- depends.forEach((item) => {
10
+ const depends = [...(library?.depends ?? []), ...(library?.optionalDepends ?? [])];
11
+ if (!is.empty(depends)) {
12
+ depends.forEach(item => {
23
13
  const loaded = libraryMap.get(item.name);
24
14
  if (!loaded) {
25
15
  if (library.depends.includes(item)) {
26
- throw new __1.BootstrapException(exports.WIRING_CONTEXT, "MISSING_DEPENDENCY", `${item.name} is required by ${library.name}, but was not provided`);
16
+ throw new BootstrapException(WIRING_CONTEXT, "MISSING_DEPENDENCY", `${item.name} is required by ${library.name}, but was not provided`);
27
17
  }
28
18
  else {
29
19
  logger.info({ library: library.name, name: checkDependencies }, `optional depends [%s] not provided`, item.name);
@@ -33,70 +23,77 @@ function BuildSortOrder(app, logger) {
33
23
  // just "are they the same object reference?" as the test
34
24
  // you get a warning, and the one the app asks for
35
25
  // hopefully there is no breaking changes
36
- if (loaded !== item) {
37
- logger.warn({ name: BuildSortOrder }, "[%s] depends different version {%s}", library.name, item.name);
26
+ if (loaded !== item && !process.env.NODE_ENV.startsWith("test")) {
27
+ logger.warn({ name: buildSortOrder }, "[%s] depends different version {%s}", library.name, item.name);
38
28
  }
39
29
  });
40
30
  }
41
31
  return library;
42
32
  }
43
- let starting = app.libraries.map((i) => checkDependencies(i));
33
+ let starting = app.libraries.map(i => checkDependencies(i));
44
34
  const out = [];
45
- while (!__1.is.empty(starting)) {
46
- const next = starting.find((library) => {
35
+ while (!is.empty(starting)) {
36
+ const next = starting.find(library => {
47
37
  const depends = [
48
38
  ...(library?.depends ?? []),
49
- ...(library?.optionalDepends?.filter((i) => app.libraries.some((index) => i.name === index.name)) ?? []),
39
+ ...(library?.optionalDepends?.filter(i => app.libraries.some(index => i.name === index.name)) ?? []),
50
40
  ];
51
- if (__1.is.empty(depends)) {
41
+ if (is.empty(depends)) {
52
42
  return true;
53
43
  }
54
- return depends.every((depend) => out.some((i) => i.name === depend.name));
44
+ return depends.every(depend => out.some(i => i.name === depend.name));
55
45
  });
56
46
  if (!next) {
57
- logger.fatal({ current: out.map((i) => i.name), name: BuildSortOrder });
58
- throw new __1.BootstrapException(exports.WIRING_CONTEXT, "BAD_SORT", `Cannot find a next lib to load`);
47
+ logger.fatal({ current: out.map(i => i.name), name: buildSortOrder });
48
+ throw new BootstrapException(WIRING_CONTEXT, "BAD_SORT", `Cannot find a next lib to load`);
59
49
  }
60
- starting = starting.filter((i) => next.name !== i.name);
50
+ starting = starting.filter(i => next.name !== i.name);
61
51
  out.push(next);
62
52
  }
63
53
  return out;
64
54
  }
65
- const COERCE_CONTEXT = (context) => context;
66
- exports.COERCE_CONTEXT = COERCE_CONTEXT;
67
- exports.WIRING_CONTEXT = (0, exports.COERCE_CONTEXT)("boilerplate:wiring");
68
- function ValidateLibrary(project, serviceList) {
69
- if (__1.is.empty(project)) {
70
- throw new __1.BootstrapException((0, exports.COERCE_CONTEXT)("CreateLibrary"), "MISSING_LIBRARY_NAME", "Library name is required");
55
+ export const COERCE_CONTEXT = (context) => context;
56
+ export const WIRING_CONTEXT = COERCE_CONTEXT("boilerplate:wiring");
57
+ export function validateLibrary(project, serviceList) {
58
+ if (is.empty(project)) {
59
+ throw new BootstrapException(COERCE_CONTEXT("CreateLibrary"), "MISSING_LIBRARY_NAME", "Library name is required");
71
60
  }
72
61
  const services = Object.entries(serviceList);
73
62
  // Find the first invalid service
74
63
  const invalidService = services.find(([, definition]) => typeof definition !== "function");
75
64
  if (invalidService) {
76
65
  const [invalidServiceName, service] = invalidService;
77
- throw new __1.BootstrapException((0, exports.COERCE_CONTEXT)("CreateLibrary"), "INVALID_SERVICE_DEFINITION", `Invalid service definition for '${invalidServiceName}' in library '${project}' (${typeof service}})`);
66
+ throw new BootstrapException(COERCE_CONTEXT("CreateLibrary"), "INVALID_SERVICE_DEFINITION", `Invalid service definition for '${invalidServiceName}' in library '${project}' (${typeof service}})`);
78
67
  }
79
68
  }
80
- function WireOrder(priority, list) {
69
+ export function wireOrder(priority, list) {
81
70
  const out = [...(priority || [])];
82
- if (!__1.is.empty(priority)) {
83
- const check = __1.is.unique(priority);
71
+ if (!is.empty(priority)) {
72
+ const check = is.unique(priority);
84
73
  if (check.length !== out.length) {
85
- throw new __1.BootstrapException(exports.WIRING_CONTEXT, "DOUBLE_PRIORITY", "There are duplicate items in the priority load list");
74
+ throw new BootstrapException(WIRING_CONTEXT, "DOUBLE_PRIORITY", "There are duplicate items in the priority load list");
86
75
  }
87
76
  }
88
- return [...out, ...list.filter((i) => !out.includes(i))];
77
+ const temporary = [...out, ...list.filter(i => !out.includes(i))];
78
+ return temporary;
89
79
  }
90
- function CreateLibrary({ name: libraryName, configuration = {}, priorityInit, services, depends, optionalDepends, }) {
91
- ValidateLibrary(libraryName, services);
80
+ export function CreateLibrary({ name: libraryName, configuration = {}, priorityInit, services, depends, optionalDepends, }) {
81
+ validateLibrary(libraryName, services);
92
82
  const serviceApis = {};
83
+ if (!is.empty(priorityInit)) {
84
+ priorityInit.forEach(name => {
85
+ if (!is.function(services[name])) {
86
+ throw new BootstrapException(WIRING_CONTEXT, "MISSING_PRIORITY_SERVICE", `${name} was listed as priority init, but was not found in services`);
87
+ }
88
+ });
89
+ }
93
90
  const library = {
94
- [exports.WIRE_PROJECT]: async (internal, WireService) => {
91
+ [WIRE_PROJECT]: async (internal, WireService) => {
95
92
  // not defined for boilerplate (chicken & egg)
96
93
  // manually added inside the bootstrap process
97
94
  const config = internal?.boilerplate.configuration;
98
- config?.[__1.LOAD_PROJECT](libraryName, configuration);
99
- await (0, __1.eachSeries)(WireOrder(priorityInit, Object.keys(services)), async (service) => {
95
+ config?.[LOAD_PROJECT](libraryName, configuration);
96
+ await eachSeries(wireOrder(priorityInit, Object.keys(services)), async (service) => {
100
97
  serviceApis[service] = await WireService(libraryName, service, services[service], internal.boot.lifecycle.events, internal);
101
98
  });
102
99
  internal.boot.constructComplete.add(libraryName);
@@ -110,6 +107,7 @@ function CreateLibrary({ name: libraryName, configuration = {}, priorityInit, se
110
107
  priorityInit,
111
108
  serviceApis,
112
109
  services,
110
+ type: "library",
113
111
  };
114
112
  return library;
115
113
  }
@@ -1 +1 @@
1
- {"version":3,"file":"wiring.helper.js","sourceRoot":"","sources":["../../src/helpers/wiring.helper.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"wiring.helper.js","sourceRoot":"","sources":["../../src/helpers/wiring.helper.ts"],"names":[],"mappings":"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"}
package/dist/index.d.ts CHANGED
@@ -1,2 +1,3 @@
1
- export * from "./extensions";
2
1
  export * from "./helpers";
2
+ export * from "./services";
3
+ export * from "./testing";
package/dist/index.js CHANGED
@@ -1,6 +1,4 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- const tslib_1 = require("tslib");
4
- tslib_1.__exportStar(require("./extensions"), exports);
5
- tslib_1.__exportStar(require("./helpers"), exports);
1
+ export * from "./helpers";
2
+ export * from "./services";
3
+ export * from "./testing";
6
4
  //# sourceMappingURL=index.js.map
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;AAAA,uDAA6B;AAC7B,oDAA0B"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,WAAW,CAAC;AAC1B,cAAc,YAAY,CAAC;AAC3B,cAAc,WAAW,CAAC"}
@@ -0,0 +1,2 @@
1
+ import { AlsExtension, TServiceParams } from "../helpers";
2
+ export declare function ALS({ config }: TServiceParams): AlsExtension;
@@ -0,0 +1,17 @@
1
+ import { AsyncLocalStorage } from "async_hooks";
2
+ import { v4 } from "uuid";
3
+ export function ALS({ config }) {
4
+ const storage = new AsyncLocalStorage();
5
+ return {
6
+ asyncStorage: () => (config.boilerplate.NODE_ENV ? storage : undefined),
7
+ getLogData: () => storage.getStore()?.logs ?? {},
8
+ getStore: () => storage.getStore(),
9
+ init(source, callback) {
10
+ const data = { logs: { id: v4(), ...source } };
11
+ storage.run(data, () => {
12
+ callback();
13
+ });
14
+ },
15
+ };
16
+ }
17
+ //# sourceMappingURL=als.extension.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"als.extension.js","sourceRoot":"","sources":["../../src/services/als.extension.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAC;AAChD,OAAO,EAAE,EAAE,EAAE,MAAM,MAAM,CAAC;AAI1B,MAAM,UAAU,GAAG,CAAC,EAAE,MAAM,EAAkB;IAC5C,MAAM,OAAO,GAAG,IAAI,iBAAiB,EAAkB,CAAC;IACxD,OAAO;QACL,YAAY,EAAE,GAAG,EAAE,CAAC,CAAC,MAAM,CAAC,WAAW,CAAC,QAAQ,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,SAAS,CAAC;QACvE,UAAU,EAAE,GAAG,EAAE,CAAC,OAAO,CAAC,QAAQ,EAAE,EAAE,IAAI,IAAK,EAAmB;QAClE,QAAQ,EAAE,GAAG,EAAE,CAAC,OAAO,CAAC,QAAQ,EAAE;QAClC,IAAI,CAAC,MAAc,EAAE,QAA0B;YAC7C,MAAM,IAAI,GAAG,EAAE,IAAI,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,MAAM,EAAE,EAAE,CAAC;YAC/C,OAAO,CAAC,GAAG,CAAC,IAAsB,EAAE,GAAG,EAAE;gBACvC,QAAQ,EAAE,CAAC;YACb,CAAC,CAAC,CAAC;QACL,CAAC;KACF,CAAC;AACJ,CAAC"}
@@ -0,0 +1,7 @@
1
+ import { DigitalAlchemyConfiguration, 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): DigitalAlchemyConfiguration;
@@ -0,0 +1,117 @@
1
+ import { BootstrapException, ConfigLoaderEnvironment, configLoaderFile, deepExtend, eachSeries, } from "..";
2
+ import { is } from ".";
3
+ export const INITIALIZE = Symbol.for("initialize");
4
+ export const LOAD_PROJECT = Symbol.for("load-project");
5
+ export const EVENT_CONFIGURATION_UPDATED = "event_configuration_updated";
6
+ export const INJECTED_DEFINITIONS = Symbol.for("injected-config");
7
+ const DECIMALS = 2;
8
+ export function Configuration({ context, event, lifecycle, internal,
9
+ // ! THIS DOES NOT EXIST BEFORE PRE INIT
10
+ logger, }) {
11
+ // modern problems require modern solutions
12
+ lifecycle.onPreInit(() => (logger = internal.boilerplate.logger.context(context)));
13
+ const configuration = {};
14
+ const configDefinitions = new Map();
15
+ function injectedDefinitions() {
16
+ const out = {};
17
+ return new Proxy(out, {
18
+ get(_, project) {
19
+ return internal.utils.object.get(configuration, project) ?? {};
20
+ },
21
+ has(_, key) {
22
+ Object.keys(configuration).forEach(key => (out[key] ??= {}));
23
+ return Object.keys(configuration).includes(key);
24
+ },
25
+ ownKeys() {
26
+ Object.keys(configuration).forEach(key => (out[key] ??= {}));
27
+ return Object.keys(configuration);
28
+ },
29
+ set() {
30
+ return false;
31
+ },
32
+ });
33
+ }
34
+ function setConfig(project, property, value) {
35
+ internal.utils.object.set(configuration, [project, property].join("."), value);
36
+ // in case anyone needs a hook
37
+ event.emit(EVENT_CONFIGURATION_UPDATED, project, property);
38
+ }
39
+ function validateConfig() {
40
+ // * validate
41
+ // - ensure all required properties have been defined
42
+ configDefinitions.forEach((definitions, project) => {
43
+ Object.keys(definitions).forEach(key => {
44
+ const config = [project, key].join(".");
45
+ if (definitions[key].required &&
46
+ is.undefined(internal.utils.object.get(configuration, config))) {
47
+ // ruh roh
48
+ throw new BootstrapException(context, "REQUIRED_CONFIGURATION_MISSING", `Configuration property ${config} is not defined`);
49
+ }
50
+ });
51
+ });
52
+ }
53
+ // #MARK: Initialize
54
+ async function initialize(application) {
55
+ const configLoaders = internal.boot.application.configurationLoaders ??
56
+ [ConfigLoaderEnvironment, configLoaderFile];
57
+ const start = performance.now();
58
+ // * were configs disabled?
59
+ if (is.empty(configLoaders)) {
60
+ validateConfig();
61
+ if (!configuration.boilerplate.IS_TEST) {
62
+ logger.warn({ name: initialize }, `no config loaders defined`);
63
+ }
64
+ return `${(performance.now() - start).toFixed(DECIMALS)}ms`;
65
+ }
66
+ // * load!
67
+ await eachSeries(configLoaders, async (loader) => {
68
+ const merge = await loader({
69
+ application,
70
+ configs: configDefinitions,
71
+ internal,
72
+ logger,
73
+ });
74
+ deepExtend(configuration, merge);
75
+ });
76
+ validateConfig();
77
+ return `${(performance.now() - start).toFixed(DECIMALS)}ms`;
78
+ }
79
+ function merge(merge) {
80
+ return deepExtend(configuration, merge);
81
+ }
82
+ function loadProject(library, definitions) {
83
+ internal.utils.object.set(configuration, library, {});
84
+ Object.keys(definitions).forEach(key => {
85
+ internal.utils.object.set(configuration, [library, key].join("."), definitions[key].default);
86
+ });
87
+ return configDefinitions.set(library, definitions);
88
+ }
89
+ return {
90
+ [INITIALIZE]: initialize,
91
+ [INJECTED_DEFINITIONS]: injectedDefinitions,
92
+ [LOAD_PROJECT]: loadProject,
93
+ /**
94
+ * retrieve the metadata that was originally used to define the configs
95
+ */
96
+ getDefinitions: () => configDefinitions,
97
+ /**
98
+ * take a configuration object, and deep merge values
99
+ *
100
+ * intended for initial loading workflows
101
+ */
102
+ merge: merge,
103
+ onUpdate(callback, project, property) {
104
+ event.on(EVENT_CONFIGURATION_UPDATED, (updatedProject, updatedProperty) => {
105
+ if (!is.empty(project) && project !== updatedProject) {
106
+ return;
107
+ }
108
+ if (!is.empty(property) && property !== updatedProperty) {
109
+ return;
110
+ }
111
+ callback(updatedProject, updatedProperty);
112
+ });
113
+ },
114
+ set: setConfig,
115
+ };
116
+ }
117
+ //# sourceMappingURL=configuration.extension.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"configuration.extension.js","sourceRoot":"","sources":["../../src/services/configuration.extension.ts"],"names":[],"mappings":"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"}
@@ -1,9 +1,7 @@
1
- export * from "./cache.extension";
1
+ export * from "./als.extension";
2
2
  export * from "./configuration.extension";
3
- export * from "./fetch.extension";
4
3
  export * from "./internal.extension";
5
4
  export * from "./is.extension";
6
5
  export * from "./logger.extension";
7
- export * from "./metrics.extension";
8
6
  export * from "./scheduler.extension";
9
7
  export * from "./wiring.extension";
@@ -0,0 +1,8 @@
1
+ export * from "./als.extension";
2
+ export * from "./configuration.extension";
3
+ export * from "./internal.extension";
4
+ export * from "./is.extension";
5
+ export * from "./logger.extension";
6
+ export * from "./scheduler.extension";
7
+ export * from "./wiring.extension";
8
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/services/index.ts"],"names":[],"mappings":"AAAA,cAAc,iBAAiB,CAAC;AAChC,cAAc,2BAA2B,CAAC;AAC1C,cAAc,sBAAsB,CAAC;AACrC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,oBAAoB,CAAC;AACnC,cAAc,uBAAuB,CAAC;AACtC,cAAc,oBAAoB,CAAC"}
@@ -1,6 +1,5 @@
1
1
  import { Dayjs } from "dayjs";
2
2
  import { EventEmitter } from "events";
3
- import { Counter, Summary } from "prom-client";
4
3
  import { Get } from "type-fest";
5
4
  import { ApplicationDefinition, BootstrapOptions, GetApis, LIB_BOILERPLATE, LifecycleStages, OptionalModuleConfiguration, ServiceMap, TBlackHole, TContext, TModuleMappings, TResolvedModuleMappings } from "..";
6
5
  import { CreateLifecycle } from "./lifecycle.extension";
@@ -12,8 +11,9 @@ export declare class InternalUtils {
12
11
  * **NOTE:** bootstrapping process will initialize this at boot, and cleanup at teardown.
13
12
  * Making listener changes should only be done from within the context of service functions
14
13
  */
15
- event: EventEmitter<[never]>;
16
- TitleCase(input: string): string;
14
+ event: EventEmitter;
15
+ constructor();
16
+ titleCase(input: string): string;
17
17
  relativeDate(pastDate: inputFormats, futureDate?: inputFormats): string;
18
18
  object: {
19
19
  del<T>(object: T, path: string): void;
@@ -21,32 +21,16 @@ export declare class InternalUtils {
21
21
  set<T>(object: T, path: string, value: unknown, doNotReplace?: boolean): void;
22
22
  };
23
23
  }
24
- type SafeExecOptions<LABELS extends BaseLabels> = {
24
+ type SafeExecOptions = {
25
+ context?: TContext;
25
26
  exec: () => TBlackHole;
26
- labels: LABELS;
27
- duration: Summary<Extract<keyof LABELS, string>>;
28
- executions: Counter<Extract<keyof LABELS, string>>;
29
- errors: Counter<Extract<keyof LABELS, string>>;
30
- };
31
- type BaseLabels = {
32
- context: TContext;
33
- /**
34
- * ! if provided, specific metrics will be kept
35
- *
36
- * do not pass label if you do not want metrics to be kept, you may not want / need metrics to be kept on all instances
37
- *
38
- * - execution count
39
- * - error count
40
- * - summary of execution time
41
- */
42
- label?: string;
43
27
  };
44
28
  type Phase = "bootstrap" | "teardown" | "running";
45
29
  export declare class InternalDefinition {
46
30
  /**
47
31
  * Utility methods provided by boilerplate
48
32
  */
49
- boilerplate: Pick<GetApis<typeof LIB_BOILERPLATE>, "configuration" | "fetch" | "logger" | "metrics">;
33
+ boilerplate: Pick<GetApis<typeof LIB_BOILERPLATE>, "configuration" | "logger">;
50
34
  boot: {
51
35
  /**
52
36
  * Options that were passed into bootstrap
@@ -83,6 +67,6 @@ export declare class InternalDefinition {
83
67
  startup: Date;
84
68
  };
85
69
  utils: InternalUtils;
86
- safeExec<LABELS extends BaseLabels>(options: (() => TBlackHole) | SafeExecOptions<LABELS>): Promise<void>;
70
+ safeExec<T>(options: (() => TBlackHole) | SafeExecOptions): Promise<T>;
87
71
  }
88
72
  export {};
@@ -1,10 +1,6 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.InternalDefinition = exports.InternalUtils = void 0;
4
- const tslib_1 = require("tslib");
5
- const dayjs_1 = tslib_1.__importDefault(require("dayjs"));
6
- const events_1 = require("events");
7
- const __1 = require("..");
1
+ import dayjs from "dayjs";
2
+ import { EventEmitter } from "events";
3
+ import { ARRAY_OFFSET, DAY, FIRST, HOUR, is, MINUTE, NONE, SECOND, START, YEAR, } from "..";
8
4
  const EVERYTHING_ELSE = 1;
9
5
  const MONTHS = 12;
10
6
  // TODO: probably should make this configurable
@@ -13,39 +9,48 @@ const formatter = new Intl.RelativeTimeFormat("en", {
13
9
  style: "short",
14
10
  });
15
11
  // #MARK: misc
16
- class InternalUtils {
12
+ export class InternalUtils {
17
13
  /**
18
14
  * The global eventemitter. All of `@digital-alchemy` will be wired through this
19
15
  *
20
16
  * **NOTE:** bootstrapping process will initialize this at boot, and cleanup at teardown.
21
17
  * Making listener changes should only be done from within the context of service functions
22
18
  */
23
- event = new events_1.EventEmitter();
24
- TitleCase(input) {
19
+ event;
20
+ constructor() {
21
+ this.event = new EventEmitter();
22
+ this.event.setMaxListeners(NONE);
23
+ }
24
+ titleCase(input) {
25
25
  const matches = input.match(new RegExp("[a-z][A-Z]", "g"));
26
26
  if (matches) {
27
- matches.forEach((i) => (input = input.replace(i, [...i].join(" "))));
27
+ matches.forEach(i => (input = input.replace(i, [...i].join(" "))));
28
28
  }
29
29
  return input
30
30
  .split(new RegExp("[ _-]"))
31
- .map((word = "") => `${word.charAt(__1.FIRST).toUpperCase()}${word.slice(EVERYTHING_ELSE)}`)
31
+ .map(word => `${word.charAt(FIRST).toUpperCase()}${word.slice(EVERYTHING_ELSE)}`)
32
32
  .join(" ");
33
33
  }
34
34
  relativeDate(pastDate, futureDate = new Date().toISOString()) {
35
35
  const UNITS = new Map([
36
- ["year", __1.YEAR],
37
- ["month", __1.YEAR / MONTHS],
38
- ["day", __1.DAY],
39
- ["hour", __1.HOUR],
40
- ["minute", __1.MINUTE],
41
- ["second", __1.SECOND],
36
+ ["year", YEAR],
37
+ ["month", YEAR / MONTHS],
38
+ ["day", DAY],
39
+ ["hour", HOUR],
40
+ ["minute", MINUTE],
41
+ ["second", SECOND],
42
42
  ]);
43
- if (!pastDate) {
44
- return `NOT A DATE ${pastDate} ${JSON.stringify(pastDate)}`;
43
+ const past = dayjs(pastDate);
44
+ if (!past.isValid()) {
45
+ throw new Error("invalid past date " + pastDate);
46
+ }
47
+ const future = dayjs(futureDate);
48
+ if (!future.isValid()) {
49
+ throw new Error("invalid future date " + pastDate);
45
50
  }
46
- const elapsed = (0, dayjs_1.default)(pastDate).diff(futureDate, "ms");
51
+ const elapsed = past.diff(future, "ms");
47
52
  let out = "";
48
- [...UNITS.keys()].some((unit) => {
53
+ [...UNITS.keys()].some(unit => {
49
54
  const cutoff = UNITS.get(unit);
50
55
  if (Math.abs(elapsed) > cutoff || unit == "second") {
51
56
  out = formatter.format(Math.round(elapsed / cutoff), unit);
@@ -60,7 +65,7 @@ class InternalUtils {
60
65
  del(object, path) {
61
66
  const keys = path.split(".");
62
67
  let current = object; // Starting with the object as an unknown type
63
- for (let i = __1.START; i < keys.length; i++) {
68
+ for (let i = START; i < keys.length; i++) {
64
69
  const key = keys[i];
65
70
  // Check if current is an object and not null
66
71
  if (typeof current !== "object" || current === null) {
@@ -69,13 +74,12 @@ class InternalUtils {
69
74
  }
70
75
  const safeCurrent = current;
71
76
  // If we're at the last key, attempt to delete the property
72
- if (i === keys.length - __1.ARRAY_OFFSET) {
77
+ if (i === keys.length - ARRAY_OFFSET) {
73
78
  delete safeCurrent[key]; // Delete without checking; non-existent keys are a no-op
74
79
  }
75
80
  else {
76
81
  // For non-last keys, if the next level doesn't exist or isn't an object, stop processing
77
- if (typeof safeCurrent[key] !== "object" ||
78
- safeCurrent[key] === null) {
82
+ if (typeof safeCurrent[key] !== "object" || safeCurrent[key] === null) {
79
83
  return;
80
84
  }
81
85
  // Move to the next level in the path
@@ -87,7 +91,7 @@ class InternalUtils {
87
91
  const keys = path.split(".");
88
92
  let current = object;
89
93
  for (const key of keys) {
90
- if (!__1.is.object(current) || current === null || !(key in current)) {
94
+ if (!is.object(current) || current === null || !(key in current)) {
91
95
  return undefined;
92
96
  }
93
97
  current = current[key];
@@ -106,7 +110,7 @@ class InternalUtils {
106
110
  // Safely cast current to Record<string, unknown> after the type guard
107
111
  const safeCurrent = current;
108
112
  // For the last key, attempt to set the value
109
- if (i === keys.length - __1.ARRAY_OFFSET) {
113
+ if (i === keys.length - ARRAY_OFFSET) {
110
114
  if (!doNotReplace || !(key in safeCurrent)) {
111
115
  safeCurrent[key] = value;
112
116
  }
@@ -125,9 +129,8 @@ class InternalUtils {
125
129
  },
126
130
  };
127
131
  }
128
- exports.InternalUtils = InternalUtils;
129
132
  // #region Base definition
130
- class InternalDefinition {
133
+ export class InternalDefinition {
131
134
  /**
132
135
  * Utility methods provided by boilerplate
133
136
  */
@@ -136,36 +139,21 @@ class InternalDefinition {
136
139
  utils = new InternalUtils();
137
140
  // #MARK: safeExec
138
141
  async safeExec(options) {
139
- let labels = {};
140
- let errorMetric;
142
+ const logger = this.boilerplate.logger.systemLogger;
143
+ const context = is.function(options) ? undefined : options?.context;
144
+ const exec = is.function(options) ? options : options?.exec;
145
+ if (!is.function(exec)) {
146
+ logger.error({ context }, `received non-function callback to [safeExec]`);
147
+ return undefined;
148
+ }
141
149
  try {
142
- if (__1.is.function(options)) {
143
- await options();
144
- return;
145
- }
146
- const opt = options;
147
- labels = opt.labels;
148
- errorMetric = opt.errors;
149
- const { exec, duration, executions } = opt;
150
- if (__1.is.empty(labels.label)) {
151
- await exec();
152
- return;
153
- }
154
- executions?.inc(labels);
155
- const end = duration?.startTimer();
156
- await exec();
157
- if (end) {
158
- end(labels);
159
- }
150
+ return (await exec());
160
151
  }
161
152
  catch (error) {
162
- this.boilerplate.logger.systemLogger.error({ error, ...labels }, `callback threw error`);
163
- if (!__1.is.empty(labels.label)) {
164
- errorMetric?.inc(labels);
165
- }
153
+ logger.error({ context, error }, `callback threw error`);
154
+ return undefined;
166
155
  }
167
156
  }
168
157
  }
169
- exports.InternalDefinition = InternalDefinition;
170
158
  // #endregion
171
159
  //# sourceMappingURL=internal.extension.js.map