@bluelibs/runner 2.2.3 → 3.0.0

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 (204) hide show
  1. package/README.md +1315 -942
  2. package/dist/common.types.d.ts +20 -0
  3. package/dist/common.types.js +4 -0
  4. package/dist/common.types.js.map +1 -0
  5. package/dist/context.d.ts +34 -0
  6. package/dist/context.js +58 -0
  7. package/dist/context.js.map +1 -0
  8. package/dist/define.d.ts +22 -3
  9. package/dist/define.js +52 -8
  10. package/dist/define.js.map +1 -1
  11. package/dist/defs.d.ts +52 -31
  12. package/dist/defs.js +10 -2
  13. package/dist/defs.js.map +1 -1
  14. package/dist/errors.js +1 -1
  15. package/dist/errors.js.map +1 -1
  16. package/dist/event.types.d.ts +18 -0
  17. package/dist/event.types.js +4 -0
  18. package/dist/event.types.js.map +1 -0
  19. package/dist/examples/registrator-example.d.ts +122 -0
  20. package/dist/examples/registrator-example.js +147 -0
  21. package/dist/examples/registrator-example.js.map +1 -0
  22. package/dist/globals/globalEvents.d.ts +41 -0
  23. package/dist/globals/globalEvents.js +94 -0
  24. package/dist/globals/globalEvents.js.map +1 -0
  25. package/dist/globals/globalMiddleware.d.ts +23 -0
  26. package/dist/globals/globalMiddleware.js +15 -0
  27. package/dist/globals/globalMiddleware.js.map +1 -0
  28. package/dist/globals/globalResources.d.ts +27 -0
  29. package/dist/globals/globalResources.js +47 -0
  30. package/dist/globals/globalResources.js.map +1 -0
  31. package/dist/globals/middleware/cache.middleware.d.ts +34 -0
  32. package/dist/globals/middleware/cache.middleware.js +85 -0
  33. package/dist/globals/middleware/cache.middleware.js.map +1 -0
  34. package/dist/globals/middleware/requireContext.middleware.d.ts +6 -0
  35. package/dist/globals/middleware/requireContext.middleware.js +25 -0
  36. package/dist/globals/middleware/requireContext.middleware.js.map +1 -0
  37. package/dist/globals/middleware/retry.middleware.d.ts +20 -0
  38. package/dist/globals/middleware/retry.middleware.js +34 -0
  39. package/dist/globals/middleware/retry.middleware.js.map +1 -0
  40. package/dist/globals/resources/queue.resource.d.ts +7 -0
  41. package/dist/globals/resources/queue.resource.js +31 -0
  42. package/dist/globals/resources/queue.resource.js.map +1 -0
  43. package/dist/index.d.ts +45 -9
  44. package/dist/index.js +14 -9
  45. package/dist/index.js.map +1 -1
  46. package/dist/middleware.types.d.ts +40 -0
  47. package/dist/middleware.types.js +4 -0
  48. package/dist/middleware.types.js.map +1 -0
  49. package/dist/models/DependencyProcessor.d.ts +2 -1
  50. package/dist/models/DependencyProcessor.js +11 -13
  51. package/dist/models/DependencyProcessor.js.map +1 -1
  52. package/dist/models/EventManager.d.ts +5 -0
  53. package/dist/models/EventManager.js +44 -2
  54. package/dist/models/EventManager.js.map +1 -1
  55. package/dist/models/Logger.d.ts +30 -12
  56. package/dist/models/Logger.js +130 -42
  57. package/dist/models/Logger.js.map +1 -1
  58. package/dist/models/OverrideManager.d.ts +13 -0
  59. package/dist/models/OverrideManager.js +70 -0
  60. package/dist/models/OverrideManager.js.map +1 -0
  61. package/dist/models/Queue.d.ts +25 -0
  62. package/dist/models/Queue.js +54 -0
  63. package/dist/models/Queue.js.map +1 -0
  64. package/dist/models/ResourceInitializer.d.ts +5 -2
  65. package/dist/models/ResourceInitializer.js +20 -14
  66. package/dist/models/ResourceInitializer.js.map +1 -1
  67. package/dist/models/Semaphore.d.ts +61 -0
  68. package/dist/models/Semaphore.js +166 -0
  69. package/dist/models/Semaphore.js.map +1 -0
  70. package/dist/models/Store.d.ts +17 -72
  71. package/dist/models/Store.js +71 -269
  72. package/dist/models/Store.js.map +1 -1
  73. package/dist/models/StoreConstants.d.ts +11 -0
  74. package/dist/models/StoreConstants.js +18 -0
  75. package/dist/models/StoreConstants.js.map +1 -0
  76. package/dist/models/StoreRegistry.d.ts +25 -0
  77. package/dist/models/StoreRegistry.js +171 -0
  78. package/dist/models/StoreRegistry.js.map +1 -0
  79. package/dist/models/StoreTypes.d.ts +21 -0
  80. package/dist/models/StoreTypes.js +3 -0
  81. package/dist/models/StoreTypes.js.map +1 -0
  82. package/dist/models/StoreValidator.d.ts +10 -0
  83. package/dist/models/StoreValidator.js +41 -0
  84. package/dist/models/StoreValidator.js.map +1 -0
  85. package/dist/models/TaskRunner.js +39 -24
  86. package/dist/models/TaskRunner.js.map +1 -1
  87. package/dist/models/VarStore.d.ts +17 -0
  88. package/dist/models/VarStore.js +60 -0
  89. package/dist/models/VarStore.js.map +1 -0
  90. package/dist/models/index.d.ts +3 -0
  91. package/dist/models/index.js +3 -0
  92. package/dist/models/index.js.map +1 -1
  93. package/dist/resource.types.d.ts +31 -0
  94. package/dist/resource.types.js +3 -0
  95. package/dist/resource.types.js.map +1 -0
  96. package/dist/run.d.ts +4 -1
  97. package/dist/run.js +6 -3
  98. package/dist/run.js.map +1 -1
  99. package/dist/symbols.d.ts +24 -0
  100. package/dist/symbols.js +29 -0
  101. package/dist/symbols.js.map +1 -0
  102. package/dist/task.types.d.ts +55 -0
  103. package/dist/task.types.js +23 -0
  104. package/dist/task.types.js.map +1 -0
  105. package/dist/tools/registratorId.d.ts +4 -0
  106. package/dist/tools/registratorId.js +40 -0
  107. package/dist/tools/registratorId.js.map +1 -0
  108. package/dist/tools/simpleHash.d.ts +9 -0
  109. package/dist/tools/simpleHash.js +34 -0
  110. package/dist/tools/simpleHash.js.map +1 -0
  111. package/dist/types/base-interfaces.d.ts +18 -0
  112. package/dist/types/base-interfaces.js +6 -0
  113. package/dist/types/base-interfaces.js.map +1 -0
  114. package/dist/types/base.d.ts +13 -0
  115. package/dist/types/base.js +3 -0
  116. package/dist/types/base.js.map +1 -0
  117. package/dist/types/dependencies.d.ts +22 -0
  118. package/dist/types/dependencies.js +3 -0
  119. package/dist/types/dependencies.js.map +1 -0
  120. package/dist/types/dependency-core.d.ts +14 -0
  121. package/dist/types/dependency-core.js +5 -0
  122. package/dist/types/dependency-core.js.map +1 -0
  123. package/dist/types/events.d.ts +52 -0
  124. package/dist/types/events.js +6 -0
  125. package/dist/types/events.js.map +1 -0
  126. package/dist/types/hooks.d.ts +16 -0
  127. package/dist/types/hooks.js +5 -0
  128. package/dist/types/hooks.js.map +1 -0
  129. package/dist/types/index.d.ts +14 -0
  130. package/dist/types/index.js +27 -0
  131. package/dist/types/index.js.map +1 -0
  132. package/dist/types/meta.d.ts +13 -0
  133. package/dist/types/meta.js +5 -0
  134. package/dist/types/meta.js.map +1 -0
  135. package/dist/types/middleware.d.ts +38 -0
  136. package/dist/types/middleware.js +6 -0
  137. package/dist/types/middleware.js.map +1 -0
  138. package/dist/types/registerable.d.ts +10 -0
  139. package/dist/types/registerable.js +5 -0
  140. package/dist/types/registerable.js.map +1 -0
  141. package/dist/types/resources.d.ts +44 -0
  142. package/dist/types/resources.js +5 -0
  143. package/dist/types/resources.js.map +1 -0
  144. package/dist/types/symbols.d.ts +24 -0
  145. package/dist/types/symbols.js +30 -0
  146. package/dist/types/symbols.js.map +1 -0
  147. package/dist/types/tasks.d.ts +41 -0
  148. package/dist/types/tasks.js +5 -0
  149. package/dist/types/tasks.js.map +1 -0
  150. package/dist/types/utilities.d.ts +7 -0
  151. package/dist/types/utilities.js +5 -0
  152. package/dist/types/utilities.js.map +1 -0
  153. package/package.json +10 -6
  154. package/src/__tests__/benchmark/benchmark.test.ts +1 -1
  155. package/src/__tests__/context.test.ts +91 -0
  156. package/src/__tests__/errors.test.ts +8 -5
  157. package/src/__tests__/globalEvents.test.ts +1 -1
  158. package/src/__tests__/globals/cache.middleware.test.ts +772 -0
  159. package/src/__tests__/globals/queue.resource.test.ts +141 -0
  160. package/src/__tests__/globals/requireContext.middleware.test.ts +98 -0
  161. package/src/__tests__/globals/retry.middleware.test.ts +157 -0
  162. package/src/__tests__/index.helper.test.ts +55 -0
  163. package/src/__tests__/models/EventManager.test.ts +144 -0
  164. package/src/__tests__/models/Logger.test.ts +291 -34
  165. package/src/__tests__/models/Queue.test.ts +189 -0
  166. package/src/__tests__/models/ResourceInitializer.test.ts +8 -6
  167. package/src/__tests__/models/Semaphore.test.ts +713 -0
  168. package/src/__tests__/models/Store.test.ts +40 -0
  169. package/src/__tests__/models/TaskRunner.test.ts +86 -5
  170. package/src/__tests__/run.middleware.test.ts +166 -12
  171. package/src/__tests__/run.overrides.test.ts +13 -10
  172. package/src/__tests__/run.test.ts +363 -12
  173. package/src/__tests__/setOutput.test.ts +244 -0
  174. package/src/__tests__/tools/getCallerFile.test.ts +9 -9
  175. package/src/__tests__/typesafety.test.ts +54 -39
  176. package/src/context.ts +86 -0
  177. package/src/define.ts +84 -14
  178. package/src/defs.ts +91 -41
  179. package/src/errors.ts +3 -1
  180. package/src/{globalEvents.ts → globals/globalEvents.ts} +13 -12
  181. package/src/globals/globalMiddleware.ts +14 -0
  182. package/src/{globalResources.ts → globals/globalResources.ts} +14 -10
  183. package/src/globals/middleware/cache.middleware.ts +115 -0
  184. package/src/globals/middleware/requireContext.middleware.ts +36 -0
  185. package/src/globals/middleware/retry.middleware.ts +56 -0
  186. package/src/globals/resources/queue.resource.ts +34 -0
  187. package/src/index.ts +9 -5
  188. package/src/models/DependencyProcessor.ts +36 -40
  189. package/src/models/EventManager.ts +45 -5
  190. package/src/models/Logger.ts +170 -48
  191. package/src/models/OverrideManager.ts +84 -0
  192. package/src/models/Queue.ts +66 -0
  193. package/src/models/ResourceInitializer.ts +38 -20
  194. package/src/models/Semaphore.ts +208 -0
  195. package/src/models/Store.ts +94 -342
  196. package/src/models/StoreConstants.ts +17 -0
  197. package/src/models/StoreRegistry.ts +217 -0
  198. package/src/models/StoreTypes.ts +46 -0
  199. package/src/models/StoreValidator.ts +38 -0
  200. package/src/models/TaskRunner.ts +53 -40
  201. package/src/models/index.ts +3 -0
  202. package/src/run.ts +7 -4
  203. package/src/__tests__/index.ts +0 -15
  204. package/src/examples/express-mongo/index.ts +0 -1
@@ -1,11 +1,12 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.Logger = void 0;
4
- const globalEvents_1 = require("../globalEvents");
4
+ const globalEvents_1 = require("../globals/globalEvents");
5
5
  class Logger {
6
6
  eventManager;
7
7
  printThreshold = null;
8
- severity = {
8
+ boundContext = {};
9
+ static Severity = {
9
10
  trace: 0,
10
11
  debug: 1,
11
12
  info: 2,
@@ -13,25 +14,53 @@ class Logger {
13
14
  error: 4,
14
15
  critical: 5,
15
16
  };
16
- constructor(eventManager) {
17
+ constructor(eventManager, boundContext = {}) {
17
18
  this.eventManager = eventManager;
19
+ this.boundContext = { ...boundContext };
18
20
  }
19
21
  /**
20
- * @param level
21
- * @param message
22
+ * Creates a new logger instance with additional bound context
22
23
  */
23
- async log(level, data, source) {
24
+ with(context) {
25
+ return new Logger(this.eventManager, {
26
+ ...this.boundContext,
27
+ ...context,
28
+ });
29
+ }
30
+ extractErrorInfo(error) {
31
+ return {
32
+ name: error.name,
33
+ message: error.message,
34
+ stack: error.stack,
35
+ };
36
+ }
37
+ /**
38
+ * Core logging method with structured LogInfo
39
+ */
40
+ log(level, message, logInfo = {}) {
41
+ const { source, error, data, ...context } = logInfo;
24
42
  const log = {
25
43
  level,
26
- data,
27
- source: source,
44
+ message,
45
+ source: source || this.boundContext.source,
28
46
  timestamp: new Date(),
47
+ error: error ? this.extractErrorInfo(error) : undefined,
48
+ data: data || undefined,
49
+ context: { ...this.boundContext, ...context },
29
50
  };
30
51
  if (this.printThreshold &&
31
- this.severity[level] >= this.severity[this.printThreshold]) {
52
+ Logger.Severity[level] >= Logger.Severity[this.printThreshold]) {
32
53
  this.print(log);
33
54
  }
34
- await this.eventManager.emit(globalEvents_1.globalEvents.log, log, source || "unknown");
55
+ if (this.eventManager.hasListeners(globalEvents_1.globalEvents.log)) {
56
+ setImmediate(() => {
57
+ this.eventManager
58
+ .emit(globalEvents_1.globalEvents.log, log, source || this.boundContext.source || "unknown")
59
+ .catch((err) => {
60
+ console.error("Logger event emission failed:", err);
61
+ });
62
+ });
63
+ }
35
64
  }
36
65
  /**
37
66
  * Will print logs after that, use `null` to disable autoprinting.
@@ -41,47 +70,106 @@ class Logger {
41
70
  this.printThreshold = level;
42
71
  }
43
72
  print(log) {
44
- // Extract the relevant information from the log
45
- const { level, source: context, data, timestamp } = log;
46
- // Format the timestamp to a more readable format
47
- const formattedTimestamp = timestamp.toISOString();
48
- // Format the log level for better visibility
49
- const levelStr = `[${level.toUpperCase()}]`;
50
- // Format the context, if provided
51
- const contextStr = context ? `(${context})` : "";
52
- // Handle different data types, especially if it's an error
53
- let dataStr;
54
- if (data instanceof Error) {
55
- dataStr = `Error: ${data.name} - ${data.message}\nStack Trace:\n${data.stack}`;
56
- }
57
- else if (typeof data === "object") {
58
- dataStr = JSON.stringify(data, null, 2); // Pretty-print JSON objects
73
+ const { level, source, message, timestamp, error, data, context } = log;
74
+ // Color codes for different log levels
75
+ const colors = {
76
+ trace: '\x1b[90m', // bright black/gray
77
+ debug: '\x1b[36m', // cyan
78
+ info: '\x1b[32m', // green
79
+ warn: '\x1b[33m', // yellow
80
+ error: '\x1b[31m', // red
81
+ critical: '\x1b[35m', // magenta
82
+ reset: '\x1b[0m', // reset
83
+ bold: '\x1b[1m', // bold
84
+ dim: '\x1b[2m', // dim
85
+ blue: '\x1b[34m', // blue
86
+ red: '\x1b[31m', // red
87
+ cyan: '\x1b[36m', // cyan
88
+ };
89
+ const levelColor = colors[level] || colors.info;
90
+ // Format timestamp
91
+ const time = timestamp.toLocaleTimeString('en-US', {
92
+ hour12: false,
93
+ hour: '2-digit',
94
+ minute: '2-digit',
95
+ second: '2-digit'
96
+ });
97
+ const ms = timestamp.getMilliseconds().toString().padStart(3, '0');
98
+ const formattedTime = `${colors.dim}${time}.${ms}${colors.reset}`;
99
+ // Format level with color and padding
100
+ const levelStr = `${levelColor}${colors.bold}${level.toUpperCase().padEnd(8)}${colors.reset}`;
101
+ // Format source
102
+ const sourceStr = source ? `${colors.blue}[${source}]${colors.reset} ` : '';
103
+ // Format the main message
104
+ let messageStr;
105
+ if (typeof message === 'object') {
106
+ messageStr = JSON.stringify(message, null, 2);
59
107
  }
60
108
  else {
61
- dataStr = String(data); // Convert any other type to string
109
+ messageStr = String(message);
110
+ }
111
+ // Build the main log line
112
+ const mainLine = `${formattedTime} ${levelStr} ${sourceStr}${messageStr}`;
113
+ // Start building output lines
114
+ const lines = [mainLine];
115
+ // Add error information if present
116
+ if (error) {
117
+ lines.push(`${colors.dim}├─ ${colors.red}Error: ${error.name}${colors.reset}`);
118
+ lines.push(`${colors.dim}├─ ${colors.red}${error.message}${colors.reset}`);
119
+ if (error.stack) {
120
+ const stackLines = error.stack.split('\n').slice(1, 4); // Show first 3 stack frames
121
+ stackLines.forEach((line, index) => {
122
+ const prefix = index === stackLines.length - 1 ? '└─' : '├─';
123
+ lines.push(`${colors.dim}${prefix} ${colors.red}${line.trim()}${colors.reset}`);
124
+ });
125
+ }
126
+ }
127
+ // Add structured data if present
128
+ if (data && Object.keys(data).length > 0) {
129
+ lines.push(`${colors.dim}├─ ${colors.cyan}Data:${colors.reset}`);
130
+ const dataStr = JSON.stringify(data, null, 2);
131
+ const dataLines = dataStr.split('\n');
132
+ dataLines.forEach((line, index) => {
133
+ const prefix = index === dataLines.length - 1 ? '└─' : '├─';
134
+ lines.push(`${colors.dim}${prefix} ${colors.cyan}${line}${colors.reset}`);
135
+ });
136
+ }
137
+ // Add context if present (excluding common context we already show)
138
+ const filteredContext = context ? { ...context } : {};
139
+ delete filteredContext.source; // Already shown in source
140
+ if (filteredContext && Object.keys(filteredContext).length > 0) {
141
+ lines.push(`${colors.dim}└─ ${colors.blue}Context:${colors.reset}`);
142
+ const contextStr = JSON.stringify(filteredContext, null, 2);
143
+ const contextLines = contextStr.split('\n');
144
+ contextLines.forEach((line, index) => {
145
+ const prefix = index === contextLines.length - 1 ? ' ' : ' ';
146
+ lines.push(`${colors.dim}${prefix} ${colors.blue}${line}${colors.reset}`);
147
+ });
148
+ }
149
+ // Output all lines
150
+ lines.forEach(line => console.log(line));
151
+ // Add a subtle separator for multi-line logs
152
+ if (lines.length > 1) {
153
+ console.log(`${colors.dim}${colors.reset}`);
62
154
  }
63
- // Construct the final log message
64
- const logMessage = `${formattedTimestamp} ${levelStr} ${contextStr} - ${dataStr}`;
65
- // Print the log message
66
- console.log(logMessage);
67
155
  }
68
- async info(data, source) {
69
- await this.log("info", data, source);
156
+ info(message, logInfo = {}) {
157
+ this.log("info", message, logInfo);
70
158
  }
71
- async error(data, source) {
72
- await this.log("error", data, source);
159
+ error(message, logInfo = {}) {
160
+ this.log("error", message, logInfo);
73
161
  }
74
- async warn(data, source) {
75
- await this.log("warn", data, source);
162
+ warn(message, logInfo = {}) {
163
+ this.log("warn", message, logInfo);
76
164
  }
77
- async debug(data, source) {
78
- await this.log("debug", data, source);
165
+ debug(message, logInfo = {}) {
166
+ this.log("debug", message, logInfo);
79
167
  }
80
- async trace(data, source) {
81
- await this.log("trace", data, source);
168
+ trace(message, logInfo = {}) {
169
+ this.log("trace", message, logInfo);
82
170
  }
83
- async critical(data, source) {
84
- await this.log("critical", data, source);
171
+ critical(message, logInfo = {}) {
172
+ this.log("critical", message, logInfo);
85
173
  }
86
174
  }
87
175
  exports.Logger = Logger;
@@ -1 +1 @@
1
- {"version":3,"file":"Logger.js","sourceRoot":"","sources":["../../src/models/Logger.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"Logger.js","sourceRoot":"","sources":["../../src/models/Logger.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,13 @@
1
+ import { IResource, IMiddleware, ITask, IResourceWithConfig, RegisterableItems } from "../defs";
2
+ import { StoreRegistry } from "./StoreRegistry";
3
+ export declare class OverrideManager {
4
+ private readonly registry;
5
+ overrides: Map<string, IResource | IMiddleware | ITask | IResourceWithConfig>;
6
+ overrideRequests: Set<{
7
+ source: string;
8
+ override: RegisterableItems;
9
+ }>;
10
+ constructor(registry: StoreRegistry);
11
+ storeOverridesDeeply<C>(element: IResource<C, any, any>): void;
12
+ processOverrides(): void;
13
+ }
@@ -0,0 +1,70 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.OverrideManager = void 0;
4
+ const utils = require("../define");
5
+ const errors_1 = require("../errors");
6
+ class OverrideManager {
7
+ registry;
8
+ overrides = new Map();
9
+ overrideRequests = new Set();
10
+ constructor(registry) {
11
+ this.registry = registry;
12
+ }
13
+ storeOverridesDeeply(element) {
14
+ element.overrides.forEach((override) => {
15
+ if (utils.isResource(override)) {
16
+ this.storeOverridesDeeply(override);
17
+ }
18
+ let id;
19
+ if (utils.isResourceWithConfig(override)) {
20
+ this.storeOverridesDeeply(override.resource);
21
+ id = override.resource.id;
22
+ }
23
+ else {
24
+ id = override.id;
25
+ }
26
+ this.overrideRequests.add({ source: element.id, override });
27
+ this.overrides.set(id, override);
28
+ });
29
+ }
30
+ processOverrides() {
31
+ // If we are trying to use override on something that wasn't previously registered, we throw an error.
32
+ for (const override of this.overrides.values()) {
33
+ let hasAnyItem = false;
34
+ if (utils.isTask(override)) {
35
+ hasAnyItem = this.registry.tasks.has(override.id);
36
+ }
37
+ else if (utils.isResource(override)) {
38
+ hasAnyItem = this.registry.resources.has(override.id);
39
+ }
40
+ else if (utils.isMiddleware(override)) {
41
+ hasAnyItem = this.registry.middlewares.has(override.id);
42
+ }
43
+ else if (utils.isResourceWithConfig(override)) {
44
+ hasAnyItem = this.registry.resources.has(override.resource.id);
45
+ }
46
+ if (!hasAnyItem) {
47
+ const id = utils.isResourceWithConfig(override)
48
+ ? override.resource.id
49
+ : override.id;
50
+ throw errors_1.Errors.dependencyNotFound(id);
51
+ }
52
+ }
53
+ for (const override of this.overrides.values()) {
54
+ if (utils.isTask(override)) {
55
+ this.registry.storeTask(override, false);
56
+ }
57
+ else if (utils.isResource(override)) {
58
+ this.registry.storeResource(override, false);
59
+ }
60
+ else if (utils.isMiddleware(override)) {
61
+ this.registry.storeMiddleware(override, false);
62
+ }
63
+ else if (utils.isResourceWithConfig(override)) {
64
+ this.registry.storeResourceWithConfig(override, false);
65
+ }
66
+ }
67
+ }
68
+ }
69
+ exports.OverrideManager = OverrideManager;
70
+ //# sourceMappingURL=OverrideManager.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"OverrideManager.js","sourceRoot":"","sources":["../../src/models/OverrideManager.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,25 @@
1
+ /**
2
+ * Cooperative task queue.
3
+ * • Tasks run one‑after‑another (FIFO ordering).
4
+ * • Dead‑lock detection prevents nesting.
5
+ * • dispose() drains or cancels outstanding tasks, then rejects new ones.
6
+ */
7
+ export declare class Queue {
8
+ private tail;
9
+ private disposed;
10
+ private abortController;
11
+ private readonly executionContext;
12
+ /**
13
+ * Schedule an asynchronous task.
14
+ * @param task – receives an AbortSignal so it can cancel early if desired.
15
+ */
16
+ run<T>(task: (signal: AbortSignal) => Promise<T>): Promise<T>;
17
+ /**
18
+ * Disposes the queue.
19
+ * @param options.cancel – if true, broadcasts AbortSignal to running task.
20
+ * default: false (waits for tasks to finish).
21
+ */
22
+ dispose(options?: {
23
+ cancel?: boolean;
24
+ }): Promise<void>;
25
+ }
@@ -0,0 +1,54 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.Queue = void 0;
4
+ const node_async_hooks_1 = require("node:async_hooks");
5
+ /**
6
+ * Cooperative task queue.
7
+ * • Tasks run one‑after‑another (FIFO ordering).
8
+ * • Dead‑lock detection prevents nesting.
9
+ * • dispose() drains or cancels outstanding tasks, then rejects new ones.
10
+ */
11
+ class Queue {
12
+ tail = Promise.resolve();
13
+ disposed = false;
14
+ abortController = new AbortController();
15
+ // true while inside a queued task → helps detect "queue in queue"
16
+ executionContext = new node_async_hooks_1.AsyncLocalStorage();
17
+ /**
18
+ * Schedule an asynchronous task.
19
+ * @param task – receives an AbortSignal so it can cancel early if desired.
20
+ */
21
+ run(task) {
22
+ // 1. refuse new work if we've disposed
23
+ if (this.disposed) {
24
+ return Promise.reject(new Error("Queue has been disposed"));
25
+ }
26
+ // 2. detect dead‑locks (a queued task adding another queued task)
27
+ if (this.executionContext.getStore()) {
28
+ return Promise.reject(new Error("Dead‑lock detected: a queued task attempted to queue another task"));
29
+ }
30
+ const { signal } = this.abortController;
31
+ // 3. chain task after the current tail
32
+ const result = this.tail.then(() => this.executionContext.run(true, () => task(signal)));
33
+ // 4. preserve the chain even if the task rejects (swallow internally)
34
+ this.tail = result.catch(() => { });
35
+ return result;
36
+ }
37
+ /**
38
+ * Disposes the queue.
39
+ * @param options.cancel – if true, broadcasts AbortSignal to running task.
40
+ * default: false (waits for tasks to finish).
41
+ */
42
+ async dispose(options = {}) {
43
+ if (this.disposed)
44
+ return;
45
+ this.disposed = true;
46
+ if (options.cancel) {
47
+ this.abortController.abort(); // notify cooperative tasks
48
+ }
49
+ // wait for everything already chained to settle
50
+ await this.tail.catch(() => { });
51
+ }
52
+ }
53
+ exports.Queue = Queue;
54
+ //# sourceMappingURL=Queue.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Queue.js","sourceRoot":"","sources":["../../src/models/Queue.ts"],"names":[],"mappings":";;;AAAA,uDAAqD;AAErD;;;;;GAKG;AACH,MAAa,KAAK;IACR,IAAI,GAAqB,OAAO,CAAC,OAAO,EAAE,CAAC;IAC3C,QAAQ,GAAG,KAAK,CAAC;IACjB,eAAe,GAAG,IAAI,eAAe,EAAE,CAAC;IAEhD,kEAAkE;IACjD,gBAAgB,GAAG,IAAI,oCAAiB,EAAW,CAAC;IAErE;;;OAGG;IACI,GAAG,CAAI,IAAyC;QACrD,uCAAuC;QACvC,IAAI,IAAI,CAAC,QAAQ,EAAE,CAAC;YAClB,OAAO,OAAO,CAAC,MAAM,CAAC,IAAI,KAAK,CAAC,yBAAyB,CAAC,CAAC,CAAC;QAC9D,CAAC;QAED,kEAAkE;QAClE,IAAI,IAAI,CAAC,gBAAgB,CAAC,QAAQ,EAAE,EAAE,CAAC;YACrC,OAAO,OAAO,CAAC,MAAM,CACnB,IAAI,KAAK,CACP,mEAAmE,CACpE,CACF,CAAC;QACJ,CAAC;QAED,MAAM,EAAE,MAAM,EAAE,GAAG,IAAI,CAAC,eAAe,CAAC;QAExC,uCAAuC;QACvC,MAAM,MAAM,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,CACjC,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,IAAI,EAAE,GAAG,EAAE,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CACpD,CAAC;QAEF,sEAAsE;QACtE,IAAI,CAAC,IAAI,GAAG,MAAM,CAAC,KAAK,CAAC,GAAG,EAAE,GAAE,CAAC,CAAC,CAAC;QAEnC,OAAO,MAAM,CAAC;IAChB,CAAC;IAED;;;;OAIG;IACI,KAAK,CAAC,OAAO,CAAC,UAAgC,EAAE;QACrD,IAAI,IAAI,CAAC,QAAQ;YAAE,OAAO;QAE1B,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC;QAErB,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC;YACnB,IAAI,CAAC,eAAe,CAAC,KAAK,EAAE,CAAC,CAAC,2BAA2B;QAC3D,CAAC;QAED,gDAAgD;QAChD,MAAM,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,EAAE,GAAE,CAAC,CAAC,CAAC;IAClC,CAAC;CACF;AAzDD,sBAyDC"}
@@ -11,6 +11,9 @@ export declare class ResourceInitializer {
11
11
  * Begins the execution of an task. These are registered tasks and all sanity checks have been performed at this stage to ensure consistency of the object.
12
12
  * This function can throw only if any of the event listeners or run function throws
13
13
  */
14
- initializeResource<TConfig = null, TValue = any, TDeps extends DependencyMapType = {}>(resource: IResource<TConfig, TValue, TDeps>, config: TConfig, dependencies: DependencyValuesType<TDeps>): Promise<TValue | undefined>;
15
- initWithMiddleware<C, V, D extends DependencyMapType>(resource: IResource<C, V>, config: C, dependencies: D): Promise<V | undefined>;
14
+ initializeResource<TConfig = null, TValue = any, TDeps extends DependencyMapType = {}, TContext = any>(resource: IResource<TConfig, TValue, TDeps>, config: TConfig, dependencies: DependencyValuesType<TDeps>): Promise<{
15
+ value: TValue;
16
+ context: TContext;
17
+ }>;
18
+ initWithMiddleware<C, V, D extends DependencyMapType, TContext>(resource: IResource<C, V, D, TContext>, config: C, dependencies: DependencyValuesType<D>, context: TContext): Promise<V | undefined>;
16
19
  }
@@ -1,7 +1,7 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.ResourceInitializer = void 0;
4
- const globalEvents_1 = require("../globalEvents");
4
+ const globalEvents_1 = require("../globals/globalEvents");
5
5
  class ResourceInitializer {
6
6
  store;
7
7
  eventManager;
@@ -16,6 +16,7 @@ class ResourceInitializer {
16
16
  * This function can throw only if any of the event listeners or run function throws
17
17
  */
18
18
  async initializeResource(resource, config, dependencies) {
19
+ const context = resource.context?.();
19
20
  await this.eventManager.emit(globalEvents_1.globalEvents.resources.beforeInit, {
20
21
  config,
21
22
  resource,
@@ -23,18 +24,20 @@ class ResourceInitializer {
23
24
  await this.eventManager.emit(resource.events.beforeInit, { config }, resource.id);
24
25
  let error, value;
25
26
  try {
26
- value = await this.initWithMiddleware(resource, config, dependencies);
27
+ if (resource.init) {
28
+ value = await this.initWithMiddleware(resource, config, dependencies, context);
29
+ }
27
30
  await this.eventManager.emit(resource.events.afterInit, {
28
31
  config,
29
- value,
32
+ value: value,
30
33
  }, resource.id);
31
34
  await this.eventManager.emit(globalEvents_1.globalEvents.resources.afterInit, {
32
35
  config,
33
36
  resource,
34
- value,
37
+ value: value,
35
38
  }, resource.id);
36
- this.logger.debug(`Resource ${resource.id} initialized`, resource.id);
37
- return value;
39
+ this.logger.debug(`Resource ${resource.id} initialized`, { source: resource.id });
40
+ return { value: value, context };
38
41
  }
39
42
  catch (e) {
40
43
  error = e;
@@ -44,27 +47,28 @@ class ResourceInitializer {
44
47
  }
45
48
  // If you want to rewthrow the error, this should be done inside the onError event.
46
49
  await this.eventManager.emit(resource.events.onError, {
47
- error,
50
+ error: error,
48
51
  suppress,
49
52
  }, resource.id);
50
53
  await this.eventManager.emit(globalEvents_1.globalEvents.resources.onError, {
51
- error,
54
+ error: error,
52
55
  resource,
53
56
  suppress,
54
57
  }, resource.id);
55
58
  if (!isSuppressed)
56
59
  throw e;
60
+ return { value: undefined, context: {} };
57
61
  }
58
62
  }
59
- async initWithMiddleware(resource, config, dependencies) {
63
+ async initWithMiddleware(resource, config, dependencies, context) {
60
64
  let next = async (config) => {
61
65
  if (resource.init) {
62
- return resource.init.call(null, config, dependencies);
66
+ return resource.init.call(null, config, dependencies, context);
63
67
  }
64
68
  };
65
69
  const existingMiddlewares = resource.middleware;
66
70
  const createdMiddlewares = [
67
- ...this.store.getGlobalMiddlewares(existingMiddlewares.map((x) => x.id)),
71
+ ...this.store.getEverywhereMiddlewareForResources(existingMiddlewares.map((x) => x.id)),
68
72
  ...existingMiddlewares,
69
73
  ];
70
74
  for (let i = createdMiddlewares.length - 1; i >= 0; i--) {
@@ -73,10 +77,12 @@ class ResourceInitializer {
73
77
  const nextFunction = next;
74
78
  next = async (config) => {
75
79
  return storeMiddleware.middleware.run({
76
- resourceDefinition: resource,
77
- config: config,
80
+ resource: {
81
+ definition: resource,
82
+ config,
83
+ },
78
84
  next: nextFunction,
79
- }, storeMiddleware.computedDependencies);
85
+ }, storeMiddleware.computedDependencies, middleware.config);
80
86
  };
81
87
  }
82
88
  return next(config);
@@ -1 +1 @@
1
- {"version":3,"file":"ResourceInitializer.js","sourceRoot":"","sources":["../../src/models/ResourceInitializer.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"ResourceInitializer.js","sourceRoot":"","sources":["../../src/models/ResourceInitializer.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,61 @@
1
+ /**
2
+ * A semaphore that limits the number of concurrent operations.
3
+ * Used to prevent connection pool exhaustion by limiting concurrent
4
+ * database operations to the pool size.
5
+ */
6
+ export declare class Semaphore {
7
+ private permits;
8
+ private readonly waitingQueue;
9
+ private disposed;
10
+ private readonly maxPermits;
11
+ constructor(maxPermits: number);
12
+ /**
13
+ * Acquire a permit. If no permits are available, waits until one becomes available.
14
+ */
15
+ acquire(options?: {
16
+ timeout?: number;
17
+ signal?: AbortSignal;
18
+ }): Promise<void>;
19
+ /**
20
+ * Release a permit, allowing waiting operations to proceed.
21
+ */
22
+ release(): void;
23
+ private removeFromQueue;
24
+ /**
25
+ * Execute a function with a permit, automatically releasing it afterwards.
26
+ */
27
+ withPermit<T>(fn: () => Promise<T>, options?: {
28
+ timeout?: number;
29
+ signal?: AbortSignal;
30
+ }): Promise<T>;
31
+ /**
32
+ * Dispose the semaphore, rejecting all waiting operations and preventing new ones.
33
+ */
34
+ dispose(): void;
35
+ /**
36
+ * Get current number of available permits (for debugging)
37
+ */
38
+ getAvailablePermits(): number;
39
+ /**
40
+ * Get current number of waiting operations (for debugging)
41
+ */
42
+ getWaitingCount(): number;
43
+ /**
44
+ * Get maximum number of permits
45
+ */
46
+ getMaxPermits(): number;
47
+ /**
48
+ * Check if the semaphore has been disposed
49
+ */
50
+ isDisposed(): boolean;
51
+ /**
52
+ * Get metrics about the current state of the semaphore
53
+ */
54
+ getMetrics(): {
55
+ availablePermits: number;
56
+ waitingCount: number;
57
+ maxPermits: number;
58
+ utilization: number;
59
+ disposed: boolean;
60
+ };
61
+ }