@asenajs/asena 0.7.1 → 0.8.1

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 (148) hide show
  1. package/README.md +2 -2
  2. package/dist/lib/adapter/AsenaAdapter.d.ts +2 -2
  3. package/dist/lib/adapter/AsenaAdapter.js.map +1 -1
  4. package/dist/lib/adapter/types/ServeOptions.d.ts +16 -0
  5. package/dist/lib/adapter/types/ValidationError.d.ts +53 -0
  6. package/dist/lib/adapter/types/ValidationError.js +24 -0
  7. package/dist/lib/adapter/types/ValidationError.js.map +1 -0
  8. package/dist/lib/adapter/types/index.d.ts +1 -0
  9. package/dist/lib/adapter/types/index.js +1 -0
  10. package/dist/lib/adapter/types/index.js.map +1 -1
  11. package/dist/lib/ioc/Container.d.ts +25 -0
  12. package/dist/lib/ioc/Container.js +47 -0
  13. package/dist/lib/ioc/Container.js.map +1 -1
  14. package/dist/lib/ioc/CoreContainer.d.ts +5 -3
  15. package/dist/lib/ioc/CoreContainer.js +9 -3
  16. package/dist/lib/ioc/CoreContainer.js.map +1 -1
  17. package/dist/lib/ioc/IocEngine.d.ts +50 -4
  18. package/dist/lib/ioc/IocEngine.js +138 -12
  19. package/dist/lib/ioc/IocEngine.js.map +1 -1
  20. package/dist/lib/ioc/component/componentRegistry.d.ts +22 -0
  21. package/dist/lib/ioc/component/componentRegistry.js +119 -0
  22. package/dist/lib/ioc/component/componentRegistry.js.map +1 -0
  23. package/dist/lib/ioc/component/componentUtils.js +4 -0
  24. package/dist/lib/ioc/component/componentUtils.js.map +1 -1
  25. package/dist/lib/ioc/component/decorators/Inject.js +16 -0
  26. package/dist/lib/ioc/component/decorators/Inject.js.map +1 -1
  27. package/dist/lib/ioc/component/index.d.ts +1 -0
  28. package/dist/lib/ioc/component/index.js +1 -0
  29. package/dist/lib/ioc/component/index.js.map +1 -1
  30. package/dist/lib/ioc/constants/ComponentConstants.d.ts +4 -0
  31. package/dist/lib/ioc/constants/ComponentConstants.js +5 -0
  32. package/dist/lib/ioc/constants/ComponentConstants.js.map +1 -1
  33. package/dist/lib/ioc/helper/fileHelper.d.ts +9 -0
  34. package/dist/lib/ioc/helper/fileHelper.js +41 -11
  35. package/dist/lib/ioc/helper/fileHelper.js.map +1 -1
  36. package/dist/lib/ioc/types/ICoreServiceNamesType.d.ts +1 -0
  37. package/dist/lib/ioc/types/ICoreServiceNamesType.js +1 -0
  38. package/dist/lib/ioc/types/ICoreServiceNamesType.js.map +1 -1
  39. package/dist/lib/ioc/types/InjectableComponent.d.ts +10 -0
  40. package/dist/lib/ioc/types/IocConfig.d.ts +7 -0
  41. package/dist/lib/ioc/types/decorators/ComponentType.d.ts +2 -1
  42. package/dist/lib/ioc/types/decorators/ComponentType.js +1 -0
  43. package/dist/lib/ioc/types/decorators/ComponentType.js.map +1 -1
  44. package/dist/lib/server/AsenaServer.d.ts +47 -3
  45. package/dist/lib/server/AsenaServer.js +167 -28
  46. package/dist/lib/server/AsenaServer.js.map +1 -1
  47. package/dist/lib/server/AsenaServerFactory.d.ts +38 -3
  48. package/dist/lib/server/AsenaServerFactory.js +21 -2
  49. package/dist/lib/server/AsenaServerFactory.js.map +1 -1
  50. package/dist/lib/server/config/AsenaConfig.d.ts +82 -4
  51. package/dist/lib/server/config/AsenaConfig.js +39 -1
  52. package/dist/lib/server/config/AsenaConfig.js.map +1 -1
  53. package/dist/lib/server/decorators/components/MessageController.d.ts +49 -0
  54. package/dist/lib/server/decorators/components/MessageController.js +62 -0
  55. package/dist/lib/server/decorators/components/MessageController.js.map +1 -0
  56. package/dist/lib/server/decorators/components/index.d.ts +1 -0
  57. package/dist/lib/server/decorators/components/index.js +1 -0
  58. package/dist/lib/server/decorators/components/index.js.map +1 -1
  59. package/dist/lib/server/event/EventDispatchService.d.ts +3 -7
  60. package/dist/lib/server/event/EventDispatchService.js +9 -40
  61. package/dist/lib/server/event/EventDispatchService.js.map +1 -1
  62. package/dist/lib/server/event/PatternHandlerIndex.d.ts +53 -0
  63. package/dist/lib/server/event/PatternHandlerIndex.js +100 -0
  64. package/dist/lib/server/event/PatternHandlerIndex.js.map +1 -0
  65. package/dist/lib/server/event/decorators/On.d.ts +4 -0
  66. package/dist/lib/server/event/decorators/On.js +6 -0
  67. package/dist/lib/server/event/decorators/On.js.map +1 -1
  68. package/dist/lib/server/event/index.d.ts +1 -0
  69. package/dist/lib/server/event/index.js +2 -0
  70. package/dist/lib/server/event/index.js.map +1 -1
  71. package/dist/lib/server/event/types.d.ts +12 -0
  72. package/dist/lib/server/health/HealthServer.d.ts +26 -0
  73. package/dist/lib/server/health/HealthServer.js +63 -0
  74. package/dist/lib/server/health/HealthServer.js.map +1 -0
  75. package/dist/lib/server/health/index.d.ts +1 -0
  76. package/dist/lib/server/health/index.js +2 -0
  77. package/dist/lib/server/health/index.js.map +1 -0
  78. package/dist/lib/server/messaging/Ulak.d.ts +156 -0
  79. package/dist/lib/server/messaging/Ulak.js +174 -0
  80. package/dist/lib/server/messaging/Ulak.js.map +1 -1
  81. package/dist/lib/server/messaging/types.d.ts +5 -1
  82. package/dist/lib/server/messaging/types.js +5 -0
  83. package/dist/lib/server/messaging/types.js.map +1 -1
  84. package/dist/lib/server/microservice/InMemoryTransport.d.ts +45 -0
  85. package/dist/lib/server/microservice/InMemoryTransport.js +124 -0
  86. package/dist/lib/server/microservice/InMemoryTransport.js.map +1 -0
  87. package/dist/lib/server/microservice/MicroserviceTransport.d.ts +132 -0
  88. package/dist/lib/server/microservice/MicroserviceTransport.js +2 -0
  89. package/dist/lib/server/microservice/MicroserviceTransport.js.map +1 -0
  90. package/dist/lib/server/microservice/decorators/EventPattern.d.ts +38 -0
  91. package/dist/lib/server/microservice/decorators/EventPattern.js +59 -0
  92. package/dist/lib/server/microservice/decorators/EventPattern.js.map +1 -0
  93. package/dist/lib/server/microservice/decorators/MessagePattern.d.ts +31 -0
  94. package/dist/lib/server/microservice/decorators/MessagePattern.js +55 -0
  95. package/dist/lib/server/microservice/decorators/MessagePattern.js.map +1 -0
  96. package/dist/lib/server/microservice/decorators/index.d.ts +2 -0
  97. package/dist/lib/server/microservice/decorators/index.js +3 -0
  98. package/dist/lib/server/microservice/decorators/index.js.map +1 -0
  99. package/dist/lib/server/microservice/index.d.ts +5 -0
  100. package/dist/lib/server/microservice/index.js +11 -0
  101. package/dist/lib/server/microservice/index.js.map +1 -0
  102. package/dist/lib/server/microservice/interceptorChain.d.ts +20 -0
  103. package/dist/lib/server/microservice/interceptorChain.js +39 -0
  104. package/dist/lib/server/microservice/interceptorChain.js.map +1 -0
  105. package/dist/lib/server/microservice/types.d.ts +142 -0
  106. package/dist/lib/server/microservice/types.js +5 -0
  107. package/dist/lib/server/microservice/types.js.map +1 -0
  108. package/dist/lib/server/src/services/PrepareEventService.d.ts +4 -1
  109. package/dist/lib/server/src/services/PrepareEventService.js +10 -3
  110. package/dist/lib/server/src/services/PrepareEventService.js.map +1 -1
  111. package/dist/lib/server/src/services/PrepareMicroserviceService.d.ts +66 -0
  112. package/dist/lib/server/src/services/PrepareMicroserviceService.js +193 -0
  113. package/dist/lib/server/src/services/PrepareMicroserviceService.js.map +1 -0
  114. package/dist/lib/test/factory/deepMock.d.ts +25 -0
  115. package/dist/lib/test/factory/deepMock.js +105 -0
  116. package/dist/lib/test/factory/deepMock.js.map +1 -0
  117. package/dist/lib/test/factory/ulakStub.d.ts +44 -0
  118. package/dist/lib/test/factory/ulakStub.js +40 -0
  119. package/dist/lib/test/factory/ulakStub.js.map +1 -0
  120. package/dist/lib/test/harness/createTestApp.d.ts +33 -0
  121. package/dist/lib/test/harness/createTestApp.js +105 -0
  122. package/dist/lib/test/harness/createTestApp.js.map +1 -0
  123. package/dist/lib/test/harness/createWebTest.d.ts +28 -0
  124. package/dist/lib/test/harness/createWebTest.js +127 -0
  125. package/dist/lib/test/harness/createWebTest.js.map +1 -0
  126. package/dist/lib/test/harness/silentLogger.d.ts +27 -0
  127. package/dist/lib/test/harness/silentLogger.js +54 -0
  128. package/dist/lib/test/harness/silentLogger.js.map +1 -0
  129. package/dist/lib/test/harness/types.d.ts +147 -0
  130. package/dist/lib/test/harness/types.js +2 -0
  131. package/dist/lib/test/harness/types.js.map +1 -0
  132. package/dist/lib/test/http/TestHttpCall.d.ts +78 -0
  133. package/dist/lib/test/http/TestHttpCall.js +149 -0
  134. package/dist/lib/test/http/TestHttpCall.js.map +1 -0
  135. package/dist/lib/test/http/TestHttpResponse.d.ts +46 -0
  136. package/dist/lib/test/http/TestHttpResponse.js +70 -0
  137. package/dist/lib/test/http/TestHttpResponse.js.map +1 -0
  138. package/dist/lib/test/index.d.ts +9 -0
  139. package/dist/lib/test/index.js +8 -0
  140. package/dist/lib/test/index.js.map +1 -1
  141. package/dist/lib/test/metadata/discovery.d.ts +21 -0
  142. package/dist/lib/test/metadata/discovery.js +37 -8
  143. package/dist/lib/test/metadata/discovery.js.map +1 -1
  144. package/dist/lib/test/mockComponent.d.ts +25 -0
  145. package/dist/lib/test/mockComponent.js +39 -6
  146. package/dist/lib/test/mockComponent.js.map +1 -1
  147. package/dist/lib/test/types.d.ts +13 -0
  148. package/package.json +11 -7
@@ -12,22 +12,30 @@ import { getAllFiles } from './helper/fileHelper';
12
12
  import * as path from 'node:path';
13
13
  import { ComponentConstants } from './constants';
14
14
  import * as process from 'node:process';
15
- import * as console from 'node:console';
16
15
  import { getStrategyClass } from './helper/iocHelper';
17
16
  import { getOwnTypedMetadata, getTypedMetadata } from '../utils';
18
- import { Inject, Scope } from './component';
17
+ import { getComponentsDeclaredIn, Inject, Scope } from './component';
19
18
  import { CoreService } from './decorators';
20
19
  import { CircularDependencyError } from './CircularDependencyDetector';
21
20
  /**
22
21
  * @description IoC Engine - Manages component registration and dependency injection
23
22
  * Core service that handles automatic component discovery and registration
24
23
  */
24
+ /**
25
+ * @description How long a single component file may take to import before the
26
+ * engine points at it. Only a warning - the import is never cancelled.
27
+ */
28
+ const DEFAULT_IMPORT_TIMEOUT = 10_000;
25
29
  let IocEngine = class IocEngine {
26
30
  serviceName = 'IocEngine';
27
31
  _container;
28
32
  logger;
29
33
  injectables = [];
30
34
  config;
35
+ /** Entry files kept out of the scan, empty unless the scan actually ran */
36
+ entryFiles = new Set();
37
+ /** Entry-declared components that existed by the time the scan ran */
38
+ entryComponents = new Set();
31
39
  /**
32
40
  * @description Set IoC configuration
33
41
  * @param {IocConfig} config - IoC configuration object
@@ -68,13 +76,103 @@ let IocEngine = class IocEngine {
68
76
  if (!this.config) {
69
77
  throw new Error('No components or configuration found');
70
78
  }
71
- const files = getAllFiles(this.config.sourceFolder);
72
- const newInjectables = await this.getInjectables(files);
73
- this.injectables = [...this.injectables, ...newInjectables];
79
+ const entryFiles = (this.entryFiles = this.resolveEntryFiles());
80
+ // The entry file must not be imported. While it awaits AsenaServerFactory.create
81
+ // at module scope it is in the evaluating-async state, so importing it here is a
82
+ // cyclic dynamic import that can only settle once this scan returns - a deadlock
83
+ // (Bun >= 1.3.14 follows the spec and waits, older versions short-circuited it).
84
+ const files = getAllFiles(this.config.sourceFolder).filter((file) => !entryFiles.has(this.toAbsolutePath(file)));
85
+ const scanned = await this.getInjectables(files);
86
+ // Components declared directly in the entry file are still supported: their
87
+ // decorators ran before the bootstrap call, so they come from the registry
88
+ // rather than from a module namespace
89
+ const entryClasses = getComponentsDeclaredIn(entryFiles);
90
+ this.entryComponents = new Set(entryClasses);
91
+ const declaredInEntry = this.processComponents(entryClasses);
92
+ this.injectables = this.dedupeInjectables([...this.injectables, ...scanned, ...declaredInEntry]);
74
93
  if (!this.injectables.length) {
75
94
  throw new Error('No components found');
76
95
  }
77
96
  }
97
+ /**
98
+ * @description Report components that were declared in the entry file *after* the
99
+ * bootstrap call. Their decorators had not run yet when the scan read the registry,
100
+ * so they never made it into the container - and without this they would just be
101
+ * quietly missing at runtime.
102
+ * @returns {void}
103
+ */
104
+ warnAboutLateEntryComponents() {
105
+ if (!this.entryFiles.size) {
106
+ return;
107
+ }
108
+ const late = getComponentsDeclaredIn(this.entryFiles).filter((cls) => !this.entryComponents.has(cls));
109
+ if (!late.length) {
110
+ return;
111
+ }
112
+ this.logger.warn(`[IocEngine] ${late.length} component(s) declared after the AsenaServerFactory.create() call were not ` +
113
+ `registered: ${late.map((cls) => cls.name).join(', ')}. ` +
114
+ 'Move them above the bootstrap call, or into their own file under sourceFolder.');
115
+ }
116
+ /**
117
+ * @description Absolute paths of the files that must be kept out of the scan:
118
+ * the entry declared in the config, and the module actually being executed.
119
+ * They are usually the same file, but not always - a project may declare one
120
+ * `rootFile` and start another, or run without a config at all.
121
+ * @returns {Set<string>} Resolved absolute entry paths
122
+ */
123
+ resolveEntryFiles() {
124
+ const entryFiles = new Set();
125
+ if (this.config?.rootFile) {
126
+ entryFiles.add(path.resolve(process.cwd(), this.config.rootFile));
127
+ }
128
+ const runningModule = typeof Bun !== 'undefined' ? Bun.main : process.argv[1];
129
+ if (runningModule) {
130
+ entryFiles.add(path.resolve(runningModule));
131
+ }
132
+ return entryFiles;
133
+ }
134
+ /**
135
+ * @description Resolve a scanned path against the working directory. `getAllFiles`
136
+ * mirrors the form of the folder it was given, so a `sourceFolder` configured as an
137
+ * absolute path yields absolute entries that must not be joined onto cwd again.
138
+ * @param {string} file - Path as returned by the scan
139
+ * @returns {string} Absolute path
140
+ */
141
+ toAbsolutePath(file) {
142
+ return path.isAbsolute(file) ? path.normalize(file) : path.resolve(process.cwd(), file);
143
+ }
144
+ /**
145
+ * @description Collapse components that arrived from more than one source - a class
146
+ * re-exported through a barrel file, or one found by both the scan and the registry.
147
+ *
148
+ * Deduplication is by class identity, not by name: `Container.register` promotes a
149
+ * key to an array when the same name is registered twice, which would construct the
150
+ * component a second time (running @PostConstruct again) and hand every dependent an
151
+ * array instead of an instance.
152
+ * @param {InjectableComponent[]} components - Components from every source
153
+ * @returns {InjectableComponent[]} Components with duplicates removed
154
+ */
155
+ dedupeInjectables(components) {
156
+ const seen = new Set();
157
+ const byName = new Map();
158
+ const unique = [];
159
+ for (const component of components) {
160
+ if (seen.has(component.Class))
161
+ continue;
162
+ seen.add(component.Class);
163
+ const name = getTypedMetadata(ComponentConstants.NameKey, component.Class) || component.Class.name;
164
+ const claimed = byName.get(name);
165
+ if (claimed && claimed !== component.Class) {
166
+ this.logger.warn(`[IocEngine] Two different classes resolve to the component name '${name}'. ` +
167
+ 'Only one of them will be registered - give one an explicit name to disambiguate.');
168
+ }
169
+ else {
170
+ byName.set(name, component.Class);
171
+ }
172
+ unique.push(component);
173
+ }
174
+ return unique;
175
+ }
78
176
  async validateAndRegisterComponents(injectableClasses) {
79
177
  const sortedInjectables = this.topologicalSort(injectableClasses, this.injectables);
80
178
  await this.register(sortedInjectables);
@@ -85,7 +183,9 @@ let IocEngine = class IocEngine {
85
183
  const isSingleton = getTypedMetadata(ComponentConstants.ScopeKey, injectable) === Scope.SINGLETON;
86
184
  await this._container.register(name, injectable, isSingleton);
87
185
  const _interface = getTypedMetadata(ComponentConstants.InterfaceKey, injectable);
88
- if (_interface) {
186
+ // An overridden component must not sneak back in under its @Implements interface key -
187
+ // registering there would construct the real class and run its @PostConstruct anyway
188
+ if (_interface && !this._container.isOverridden(name)) {
89
189
  await this._container.register(_interface, injectable, isSingleton);
90
190
  }
91
191
  }
@@ -96,21 +196,47 @@ let IocEngine = class IocEngine {
96
196
  return this.processComponents(components);
97
197
  }
98
198
  async importFiles(files) {
199
+ const timeout = this.config?.importTimeout ?? DEFAULT_IMPORT_TIMEOUT;
99
200
  const importPromises = files.map(async (file) => {
100
201
  try {
101
- const filePath = path.join(process.cwd(), file);
102
- const module = await import(filePath);
202
+ const module = await this.importFile(this.toAbsolutePath(file), file, timeout);
103
203
  return Object.values(module);
104
204
  }
105
205
  catch (error) {
106
- // Use proper logging instead of console.log
107
- console.error(`Failed to import file ${file}:`, error);
108
- return [];
206
+ // A file inside sourceFolder that cannot be imported used to be skipped, which
207
+ // started the server with that component silently missing - the first symptom
208
+ // being an injection failure or a vanished route much later
209
+ this.logger.error(`[IocEngine] Failed to import component file '${file}':`, error);
210
+ throw new Error(`Failed to import component file '${file}'`, { cause: error });
109
211
  }
110
212
  });
111
213
  const results = await Promise.all(importPromises);
112
214
  return results.flat();
113
215
  }
216
+ /**
217
+ * @description Import a single component file, pointing at it if it takes suspiciously
218
+ * long. A module whose top-level await never settles would otherwise hang the boot with
219
+ * no output at all; the import itself is left alone, only reported.
220
+ * @param {string} filePath - Absolute path to import
221
+ * @param {string} file - Path as scanned, for the message
222
+ * @param {number} timeout - Milliseconds before warning, 0 disables
223
+ * @returns {Promise<any>} The imported module namespace
224
+ */
225
+ async importFile(filePath, file, timeout) {
226
+ const timer = timeout > 0
227
+ ? setTimeout(() => {
228
+ this.logger.warn(`[IocEngine] Import of '${file}' has not settled after ${timeout}ms. ` +
229
+ 'A top-level await in that file that never resolves will hang startup.');
230
+ }, timeout)
231
+ : undefined;
232
+ try {
233
+ return await import(filePath);
234
+ }
235
+ finally {
236
+ if (timer !== undefined)
237
+ clearTimeout(timer);
238
+ }
239
+ }
114
240
  processComponents(components) {
115
241
  return components
116
242
  .filter((component) => this.isValidComponent(component))
@@ -134,7 +260,7 @@ let IocEngine = class IocEngine {
134
260
  };
135
261
  }
136
262
  catch (error) {
137
- console.error('Failed to create component object:', error);
263
+ this.logger.error('[IocEngine] Failed to create component object:', error);
138
264
  return null;
139
265
  }
140
266
  }
@@ -1 +1 @@
1
- {"version":3,"file":"IocEngine.js","sourceRoot":"","sources":["../../../lib/ioc/IocEngine.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"IocEngine.js","sourceRoot":"","sources":["../../../lib/ioc/IocEngine.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,22 @@
1
+ import type { Class } from '../../server/types';
2
+ /**
3
+ * @description Record a decorated class along with the file it was declared in.
4
+ * Called from `defineComponent`, the single place that marks a class as an IoC
5
+ * component.
6
+ * @param {Class} target - The decorated class
7
+ * @returns {void}
8
+ */
9
+ export declare const registerDeclaredComponent: (target: Class) => void;
10
+ /**
11
+ * @description Every registered class that was declared in one of the given files.
12
+ * @param {ReadonlySet<string>} sourceFiles - Absolute, resolved file paths
13
+ * @returns {Class[]} Classes declared in those files
14
+ */
15
+ export declare const getComponentsDeclaredIn: (sourceFiles: ReadonlySet<string>) => Class[];
16
+ /**
17
+ * @description Clear the registry. The registry outlives any single application,
18
+ * so tests that boot more than one app in the same process use this to keep
19
+ * components from one run leaking into the next.
20
+ * @returns {void}
21
+ */
22
+ export declare const resetComponentRegistry: () => void;
@@ -0,0 +1,119 @@
1
+ import * as path from 'node:path';
2
+ /**
3
+ * @description Registry of every class a component decorator has been applied to,
4
+ * keyed by the class itself and valued by the file it was declared in.
5
+ *
6
+ * The IoC scan cannot import the application entry file. While the entry awaits
7
+ * `AsenaServerFactory.create` at module scope it sits in the *evaluating-async*
8
+ * state, so importing it is a cyclic dynamic import that never settles - Bun
9
+ * >= 1.3.14 follows the spec here and waits on an evaluation that can only finish
10
+ * once the scan returns. Declaring components directly in the entry file is still
11
+ * supported: their decorators have already run by the time the scan starts, so the
12
+ * scan reads them from this registry instead of from a module namespace.
13
+ *
14
+ * Stored under `Symbol.for` so a project that ends up with two copies of
15
+ * `@asenajs/asena` still shares a single registry.
16
+ */
17
+ const REGISTRY_KEY = Symbol.for('asena.componentRegistry');
18
+ const getRegistry = () => {
19
+ const store = globalThis;
20
+ if (!store[REGISTRY_KEY]) {
21
+ store[REGISTRY_KEY] = new Map();
22
+ }
23
+ return store[REGISTRY_KEY];
24
+ };
25
+ /**
26
+ * The framework's own source tree - `<pkg>/lib` when running from source,
27
+ * `<pkg>/dist/lib` when running the build. Frames below it belong to Asena itself
28
+ * (the decorator factory, this file) and are never a declaration site.
29
+ *
30
+ * Deliberately narrower than the package root: test fixtures and example apps live
31
+ * beside `lib`, and skipping the whole package would swallow them too.
32
+ */
33
+ const FRAMEWORK_ROOT = path.resolve(import.meta.dir, '../..');
34
+ /**
35
+ * Matches the trailing `/abs/path/file.ts:12:34` of a stack frame, with or without
36
+ * parens. The column is optional: the module-level frame that a top-level class
37
+ * declaration produces carries only a line number.
38
+ */
39
+ const STACK_FRAME = /\(?((?:\/|[A-Za-z]:\\)[^()]+?):\d+(?::\d+)?\)?\s*$/;
40
+ /**
41
+ * `reflect-metadata` installs `Reflect.decorate`, which TypeScript's `__decorate`
42
+ * helper uses to apply decorators - so it sits between us and the declaring file.
43
+ * Matches both a `node_modules/reflect-metadata/` layout and Bun's flattened
44
+ * install cache (`reflect-metadata@0.2.2@@@1/`).
45
+ */
46
+ const DECORATOR_PLUMBING = /[/\\]reflect-metadata[@/\\]/;
47
+ /**
48
+ * @description Resolve the file a decorator was applied in, by walking the call
49
+ * stack past Asena's own frames, past the decorator plumbing, and past runtime
50
+ * internals (`bun:*`, `node:*`, which carry no absolute path and therefore never
51
+ * match `STACK_FRAME`).
52
+ *
53
+ * Skipping only these - rather than everything under `node_modules` - keeps a
54
+ * component declared inside a third-party package attributed to *that* package's
55
+ * file. It then never matches an entry path, so importing such a package from the
56
+ * entry file does not silently pull its components into the container.
57
+ *
58
+ * Returns null when the site cannot be determined; such a component is simply
59
+ * never treated as entry-declared, which is the safe direction - it means the
60
+ * file scan stays the only source for it.
61
+ */
62
+ const declarationSite = () => {
63
+ const previousLimit = Error.stackTraceLimit;
64
+ // Asena's own frames plus the decorator plumbing put the declaring frame around
65
+ // 6 levels up; a small limit keeps the capture cheap
66
+ Error.stackTraceLimit = 20;
67
+ const stack = new Error().stack;
68
+ Error.stackTraceLimit = previousLimit;
69
+ if (!stack) {
70
+ return null;
71
+ }
72
+ for (const line of stack.split('\n')) {
73
+ const match = STACK_FRAME.exec(line);
74
+ if (!match)
75
+ continue;
76
+ const file = match[1];
77
+ if (file.startsWith(FRAMEWORK_ROOT) || DECORATOR_PLUMBING.test(file))
78
+ continue;
79
+ return file;
80
+ }
81
+ return null;
82
+ };
83
+ /**
84
+ * @description Record a decorated class along with the file it was declared in.
85
+ * Called from `defineComponent`, the single place that marks a class as an IoC
86
+ * component.
87
+ * @param {Class} target - The decorated class
88
+ * @returns {void}
89
+ */
90
+ export const registerDeclaredComponent = (target) => {
91
+ getRegistry().set(target, declarationSite());
92
+ };
93
+ /**
94
+ * @description Every registered class that was declared in one of the given files.
95
+ * @param {ReadonlySet<string>} sourceFiles - Absolute, resolved file paths
96
+ * @returns {Class[]} Classes declared in those files
97
+ */
98
+ export const getComponentsDeclaredIn = (sourceFiles) => {
99
+ if (!sourceFiles.size) {
100
+ return [];
101
+ }
102
+ const components = [];
103
+ for (const [target, file] of getRegistry()) {
104
+ if (file !== null && sourceFiles.has(file)) {
105
+ components.push(target);
106
+ }
107
+ }
108
+ return components;
109
+ };
110
+ /**
111
+ * @description Clear the registry. The registry outlives any single application,
112
+ * so tests that boot more than one app in the same process use this to keep
113
+ * components from one run leaking into the next.
114
+ * @returns {void}
115
+ */
116
+ export const resetComponentRegistry = () => {
117
+ getRegistry().clear();
118
+ };
119
+ //# sourceMappingURL=componentRegistry.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"componentRegistry.js","sourceRoot":"","sources":["../../../../lib/ioc/component/componentRegistry.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,IAAI,MAAM,WAAW,CAAC;AAGlC;;;;;;;;;;;;;;GAcG;AACH,MAAM,YAAY,GAAG,MAAM,CAAC,GAAG,CAAC,yBAAyB,CAAC,CAAC;AAI3D,MAAM,WAAW,GAAG,GAAa,EAAE;IACjC,MAAM,KAAK,GAAG,UAA6D,CAAC;IAE5E,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,EAAE,CAAC;QACzB,KAAK,CAAC,YAAY,CAAC,GAAG,IAAI,GAAG,EAAE,CAAC;IAClC,CAAC;IAED,OAAO,KAAK,CAAC,YAAY,CAAC,CAAC;AAC7B,CAAC,CAAC;AAEF;;;;;;;GAOG;AACH,MAAM,cAAc,GAAG,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,EAAE,OAAO,CAAC,CAAC;AAE9D;;;;GAIG;AACH,MAAM,WAAW,GAAG,oDAAoD,CAAC;AAEzE;;;;;GAKG;AACH,MAAM,kBAAkB,GAAG,6BAA6B,CAAC;AAEzD;;;;;;;;;;;;;;GAcG;AACH,MAAM,eAAe,GAAG,GAAkB,EAAE;IAC1C,MAAM,aAAa,GAAG,KAAK,CAAC,eAAe,CAAC;IAE5C,gFAAgF;IAChF,qDAAqD;IACrD,KAAK,CAAC,eAAe,GAAG,EAAE,CAAC;IAE3B,MAAM,KAAK,GAAG,IAAI,KAAK,EAAE,CAAC,KAAK,CAAC;IAEhC,KAAK,CAAC,eAAe,GAAG,aAAa,CAAC;IAEtC,IAAI,CAAC,KAAK,EAAE,CAAC;QACX,OAAO,IAAI,CAAC;IACd,CAAC;IAED,KAAK,MAAM,IAAI,IAAI,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC;QACrC,MAAM,KAAK,GAAG,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAErC,IAAI,CAAC,KAAK;YAAE,SAAS;QAErB,MAAM,IAAI,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;QAEtB,IAAI,IAAI,CAAC,UAAU,CAAC,cAAc,CAAC,IAAI,kBAAkB,CAAC,IAAI,CAAC,IAAI,CAAC;YAAE,SAAS;QAE/E,OAAO,IAAI,CAAC;IACd,CAAC;IAED,OAAO,IAAI,CAAC;AACd,CAAC,CAAC;AAEF;;;;;;GAMG;AACH,MAAM,CAAC,MAAM,yBAAyB,GAAG,CAAC,MAAa,EAAQ,EAAE;IAC/D,WAAW,EAAE,CAAC,GAAG,CAAC,MAAM,EAAE,eAAe,EAAE,CAAC,CAAC;AAC/C,CAAC,CAAC;AAEF;;;;GAIG;AACH,MAAM,CAAC,MAAM,uBAAuB,GAAG,CAAC,WAAgC,EAAW,EAAE;IACnF,IAAI,CAAC,WAAW,CAAC,IAAI,EAAE,CAAC;QACtB,OAAO,EAAE,CAAC;IACZ,CAAC;IAED,MAAM,UAAU,GAAY,EAAE,CAAC;IAE/B,KAAK,MAAM,CAAC,MAAM,EAAE,IAAI,CAAC,IAAI,WAAW,EAAE,EAAE,CAAC;QAC3C,IAAI,IAAI,KAAK,IAAI,IAAI,WAAW,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC;YAC3C,UAAU,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QAC1B,CAAC;IACH,CAAC;IAED,OAAO,UAAU,CAAC;AACpB,CAAC,CAAC;AAEF;;;;;GAKG;AACH,MAAM,CAAC,MAAM,sBAAsB,GAAG,GAAS,EAAE;IAC/C,WAAW,EAAE,CAAC,KAAK,EAAE,CAAC;AACxB,CAAC,CAAC"}
@@ -2,11 +2,15 @@ import { ComponentType } from '../types';
2
2
  import { ComponentConstants } from '../constants';
3
3
  import { defineTypedMetadata, getOwnTypedMetadata } from '../../utils/typedMetadata';
4
4
  import { Scope } from './Scope';
5
+ import { registerDeclaredComponent } from './componentRegistry';
5
6
  export const defineComponent = (componentType, params, extra) => {
6
7
  return (target) => {
7
8
  const { scope = Scope.SINGLETON, name = target.name } = paramsGenerator(params, componentType);
8
9
  defineTypedMetadata(componentType, true, target);
9
10
  defineTypedMetadata(ComponentConstants.IOCObjectKey, true, target);
11
+ // Records the declaring file too, so components written directly in the entry
12
+ // file stay discoverable - the scan has to skip that file (see componentRegistry)
13
+ registerDeclaredComponent(target);
10
14
  defineTypedMetadata(ComponentConstants.ScopeKey, scope, target);
11
15
  defineTypedMetadata(ComponentConstants.NameKey, name, target);
12
16
  if (extra) {
@@ -1 +1 @@
1
- {"version":3,"file":"componentUtils.js","sourceRoot":"","sources":["../../../../lib/ioc/component/componentUtils.ts"],"names":[],"mappings":"AAAA,OAAO,EAAwB,aAAa,EAAsC,MAAM,UAAU,CAAC;AACnG,OAAO,EAAE,kBAAkB,EAAE,MAAM,cAAc,CAAC;AAClD,OAAO,EAAE,mBAAmB,EAAE,mBAAmB,EAAE,MAAM,2BAA2B,CAAC;AACrF,OAAO,EAAE,KAAK,EAAE,MAAM,SAAS,CAAC;AAEhC,MAAM,CAAC,MAAM,eAAe,GAAG,CAC7B,aAA4B,EAC5B,MAAkB,EAClB,KAAkC,EAClB,EAAE;IAClB,OAAO,CAAC,MAAgB,EAAE,EAAE;QAC1B,MAAM,EAAE,KAAK,GAAG,KAAK,CAAC,SAAS,EAAE,IAAI,GAAG,MAAM,CAAC,IAAI,EAAE,GAAG,eAAe,CAAC,MAAM,EAAE,aAAa,CAAC,CAAC;QAE/F,mBAAmB,CAAU,aAAa,EAAE,IAAI,EAAE,MAAM,CAAC,CAAC;QAE1D,mBAAmB,CAAU,kBAAkB,CAAC,YAAY,EAAE,IAAI,EAAE,MAAM,CAAC,CAAC;QAE5E,mBAAmB,CAAQ,kBAAkB,CAAC,QAAQ,EAAE,KAAK,EAAE,MAAM,CAAC,CAAC;QAEvE,mBAAmB,CAAS,kBAAkB,CAAC,OAAO,EAAE,IAAI,EAAE,MAAM,CAAC,CAAC;QAEtE,IAAI,KAAK,EAAE,CAAC;YACV,KAAK,CAAC,MAAM,CAAC,CAAC;QAChB,CAAC;QAED,IAAI,mBAAmB,CAAe,kBAAkB,CAAC,aAAa,EAAE,MAAM,CAAC,KAAK,SAAS,EAAE,CAAC;YAC9F,mBAAmB,CAAe,kBAAkB,CAAC,aAAa,EAAE,EAAE,EAAE,MAAM,CAAC,CAAC;QAClF,CAAC;QAED,IAAI,mBAAmB,CAAa,kBAAkB,CAAC,WAAW,EAAE,MAAM,CAAC,KAAK,SAAS,EAAE,CAAC;YAC1F,mBAAmB,CAAa,kBAAkB,CAAC,WAAW,EAAE,EAAE,EAAE,MAAM,CAAC,CAAC;QAC9E,CAAC;IACH,CAAC,CAAC;AACJ,CAAC,CAAC;AAEF,MAAM,eAAe,GAAG,CAAC,MAAgC,EAAE,aAA4B,EAAmB,EAAE;IAC1G,MAAM,YAAY,GAAoB,EAAE,IAAI,EAAE,SAAS,EAAE,KAAK,EAAE,SAAS,EAAE,CAAC;IAE5E,IACE,OAAO,MAAM,KAAK,QAAQ;QAC1B,CAAC,aAAa,KAAK,aAAa,CAAC,UAAU;YACzC,aAAa,KAAK,aAAa,CAAC,SAAS;YACzC,aAAa,KAAK,aAAa,CAAC,mBAAmB,CAAC,EACtD,CAAC;QACD,OAAO,YAAY,CAAC;IACtB,CAAC;IAED,OAAO,OAAO,MAAM,KAAK,QAAQ,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC,CAAC,CAAC,MAAM,IAAI,YAAY,CAAC;AAChF,CAAC,CAAC"}
1
+ {"version":3,"file":"componentUtils.js","sourceRoot":"","sources":["../../../../lib/ioc/component/componentUtils.ts"],"names":[],"mappings":"AAAA,OAAO,EAAwB,aAAa,EAAsC,MAAM,UAAU,CAAC;AACnG,OAAO,EAAE,kBAAkB,EAAE,MAAM,cAAc,CAAC;AAClD,OAAO,EAAE,mBAAmB,EAAE,mBAAmB,EAAE,MAAM,2BAA2B,CAAC;AACrF,OAAO,EAAE,KAAK,EAAE,MAAM,SAAS,CAAC;AAChC,OAAO,EAAE,yBAAyB,EAAE,MAAM,qBAAqB,CAAC;AAGhE,MAAM,CAAC,MAAM,eAAe,GAAG,CAC7B,aAA4B,EAC5B,MAAkB,EAClB,KAAkC,EAClB,EAAE;IAClB,OAAO,CAAC,MAAgB,EAAE,EAAE;QAC1B,MAAM,EAAE,KAAK,GAAG,KAAK,CAAC,SAAS,EAAE,IAAI,GAAG,MAAM,CAAC,IAAI,EAAE,GAAG,eAAe,CAAC,MAAM,EAAE,aAAa,CAAC,CAAC;QAE/F,mBAAmB,CAAU,aAAa,EAAE,IAAI,EAAE,MAAM,CAAC,CAAC;QAE1D,mBAAmB,CAAU,kBAAkB,CAAC,YAAY,EAAE,IAAI,EAAE,MAAM,CAAC,CAAC;QAE5E,8EAA8E;QAC9E,kFAAkF;QAClF,yBAAyB,CAAC,MAAe,CAAC,CAAC;QAE3C,mBAAmB,CAAQ,kBAAkB,CAAC,QAAQ,EAAE,KAAK,EAAE,MAAM,CAAC,CAAC;QAEvE,mBAAmB,CAAS,kBAAkB,CAAC,OAAO,EAAE,IAAI,EAAE,MAAM,CAAC,CAAC;QAEtE,IAAI,KAAK,EAAE,CAAC;YACV,KAAK,CAAC,MAAM,CAAC,CAAC;QAChB,CAAC;QAED,IAAI,mBAAmB,CAAe,kBAAkB,CAAC,aAAa,EAAE,MAAM,CAAC,KAAK,SAAS,EAAE,CAAC;YAC9F,mBAAmB,CAAe,kBAAkB,CAAC,aAAa,EAAE,EAAE,EAAE,MAAM,CAAC,CAAC;QAClF,CAAC;QAED,IAAI,mBAAmB,CAAa,kBAAkB,CAAC,WAAW,EAAE,MAAM,CAAC,KAAK,SAAS,EAAE,CAAC;YAC1F,mBAAmB,CAAa,kBAAkB,CAAC,WAAW,EAAE,EAAE,EAAE,MAAM,CAAC,CAAC;QAC9E,CAAC;IACH,CAAC,CAAC;AACJ,CAAC,CAAC;AAEF,MAAM,eAAe,GAAG,CAAC,MAAgC,EAAE,aAA4B,EAAmB,EAAE;IAC1G,MAAM,YAAY,GAAoB,EAAE,IAAI,EAAE,SAAS,EAAE,KAAK,EAAE,SAAS,EAAE,CAAC;IAE5E,IACE,OAAO,MAAM,KAAK,QAAQ;QAC1B,CAAC,aAAa,KAAK,aAAa,CAAC,UAAU;YACzC,aAAa,KAAK,aAAa,CAAC,SAAS;YACzC,aAAa,KAAK,aAAa,CAAC,mBAAmB,CAAC,EACtD,CAAC;QACD,OAAO,YAAY,CAAC;IACtB,CAAC;IAED,OAAO,OAAO,MAAM,KAAK,QAAQ,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC,CAAC,CAAC,MAAM,IAAI,YAAY,CAAC;AAChF,CAAC,CAAC"}
@@ -31,11 +31,16 @@ export const Inject = (Injection, expression) => {
31
31
  return (target, propertyKey) => {
32
32
  let dependencyName;
33
33
  let resolvedExpression = expression;
34
+ // Kept only for class-based injections - string injections carry no class reference
35
+ let dependencyClass;
34
36
  // Check if Injection is a tuple [serviceName, expression]
35
37
  if (Array.isArray(Injection) && Injection.length === 2) {
36
38
  const [name, tupleExpression] = Injection;
37
39
  // Check Name type, it can be a Class or String
38
40
  dependencyName = typeof name === 'string' ? name : getTypedMetadata(ComponentConstants.NameKey, name);
41
+ if (typeof name !== 'string') {
42
+ dependencyClass = name;
43
+ }
39
44
  resolvedExpression = tupleExpression;
40
45
  }
41
46
  else if (typeof Injection === 'string') {
@@ -44,6 +49,8 @@ export const Inject = (Injection, expression) => {
44
49
  else {
45
50
  // Injection is a Class
46
51
  dependencyName = getTypedMetadata(ComponentConstants.NameKey, Injection);
52
+ // The `length === 2` guard above stops TS narrowing the tuple out of this branch
53
+ dependencyClass = Injection;
47
54
  }
48
55
  // Store dependency
49
56
  const dependencies = getOwnTypedMetadata(ComponentConstants.DependencyKey, target.constructor) || {};
@@ -51,6 +58,15 @@ export const Inject = (Injection, expression) => {
51
58
  dependencies[propertyKey] = dependencyName;
52
59
  }
53
60
  defineTypedMetadata(ComponentConstants.DependencyKey, dependencies, target.constructor);
61
+ // Store the class reference (class-based injections only) so test utilities can
62
+ // derive the real method shape without instantiating the dependency
63
+ if (dependencyClass) {
64
+ const dependencyClasses = getOwnTypedMetadata(ComponentConstants.DependencyClassKey, target.constructor) || {};
65
+ if (!dependencyClasses[propertyKey]) {
66
+ dependencyClasses[propertyKey] = dependencyClass;
67
+ }
68
+ defineTypedMetadata(ComponentConstants.DependencyClassKey, dependencyClasses, target.constructor);
69
+ }
54
70
  // Store expression if provided
55
71
  if (resolvedExpression) {
56
72
  const expressions = getOwnTypedMetadata(ComponentConstants.ExpressionKey, target.constructor) || {};
@@ -1 +1 @@
1
- {"version":3,"file":"Inject.js","sourceRoot":"","sources":["../../../../../lib/ioc/component/decorators/Inject.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,kBAAkB,EAAE,MAAM,iBAAiB,CAAC;AACrD,OAAO,EAAE,mBAAmB,EAAE,mBAAmB,EAAE,gBAAgB,EAAE,MAAM,8BAA8B,CAAC;AAE1G;;;;;;;;;;;;;;;;;;;;;;;;;;GA0BG;AACH,MAAM,CAAC,MAAM,MAAM,GAAG,CACpB,SAAkF,EAClF,UAAwC,EACrB,EAAE;IACrB,OAAO,CAAC,MAAc,EAAE,WAAmB,EAAQ,EAAE;QACnD,IAAI,cAAsB,CAAC;QAC3B,IAAI,kBAAkB,GAA8C,UAAU,CAAC;QAE/E,0DAA0D;QAC1D,IAAI,KAAK,CAAC,OAAO,CAAC,SAAS,CAAC,IAAI,SAAS,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACvD,MAAM,CAAC,IAAI,EAAE,eAAe,CAAC,GAAG,SAAS,CAAC;YAE1C,+CAA+C;YAC/C,cAAc,GAAG,OAAO,IAAI,KAAK,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,gBAAgB,CAAS,kBAAkB,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC;YAE9G,kBAAkB,GAAG,eAAe,CAAC;QACvC,CAAC;aAAM,IAAI,OAAO,SAAS,KAAK,QAAQ,EAAE,CAAC;YACzC,cAAc,GAAG,SAAS,CAAC;QAC7B,CAAC;aAAM,CAAC;YACN,uBAAuB;YACvB,cAAc,GAAG,gBAAgB,CAAS,kBAAkB,CAAC,OAAO,EAAE,SAAS,CAAC,CAAC;QACnF,CAAC;QAED,mBAAmB;QACnB,MAAM,YAAY,GAChB,mBAAmB,CAAe,kBAAkB,CAAC,aAAa,EAAE,MAAM,CAAC,WAAW,CAAC,IAAI,EAAE,CAAC;QAEhG,IAAI,CAAC,YAAY,CAAC,WAAW,CAAC,EAAE,CAAC;YAC/B,YAAY,CAAC,WAAW,CAAC,GAAG,cAAc,CAAC;QAC7C,CAAC;QAED,mBAAmB,CAAe,kBAAkB,CAAC,aAAa,EAAE,YAAY,EAAE,MAAM,CAAC,WAAW,CAAC,CAAC;QAEtG,+BAA+B;QAC/B,IAAI,kBAAkB,EAAE,CAAC;YACvB,MAAM,WAAW,GACf,mBAAmB,CAAc,kBAAkB,CAAC,aAAa,EAAE,MAAM,CAAC,WAAW,CAAC,IAAI,EAAE,CAAC;YAE/F,IAAI,CAAC,WAAW,CAAC,WAAW,CAAC,EAAE,CAAC;gBAC9B,WAAW,CAAC,WAAW,CAAC,GAAG,kBAAkB,CAAC;YAChD,CAAC;YAED,mBAAmB,CAAc,kBAAkB,CAAC,aAAa,EAAE,WAAW,EAAE,MAAM,CAAC,WAAW,CAAC,CAAC;QACtG,CAAC;IACH,CAAC,CAAC;AACJ,CAAC,CAAC"}
1
+ {"version":3,"file":"Inject.js","sourceRoot":"","sources":["../../../../../lib/ioc/component/decorators/Inject.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,kBAAkB,EAAE,MAAM,iBAAiB,CAAC;AACrD,OAAO,EAAE,mBAAmB,EAAE,mBAAmB,EAAE,gBAAgB,EAAE,MAAM,8BAA8B,CAAC;AAE1G;;;;;;;;;;;;;;;;;;;;;;;;;;GA0BG;AACH,MAAM,CAAC,MAAM,MAAM,GAAG,CACpB,SAAkF,EAClF,UAAwC,EACrB,EAAE;IACrB,OAAO,CAAC,MAAc,EAAE,WAAmB,EAAQ,EAAE;QACnD,IAAI,cAAsB,CAAC;QAC3B,IAAI,kBAAkB,GAA8C,UAAU,CAAC;QAC/E,oFAAoF;QACpF,IAAI,eAAkC,CAAC;QAEvC,0DAA0D;QAC1D,IAAI,KAAK,CAAC,OAAO,CAAC,SAAS,CAAC,IAAI,SAAS,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACvD,MAAM,CAAC,IAAI,EAAE,eAAe,CAAC,GAAG,SAAS,CAAC;YAE1C,+CAA+C;YAC/C,cAAc,GAAG,OAAO,IAAI,KAAK,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,gBAAgB,CAAS,kBAAkB,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC;YAE9G,IAAI,OAAO,IAAI,KAAK,QAAQ,EAAE,CAAC;gBAC7B,eAAe,GAAG,IAAI,CAAC;YACzB,CAAC;YAED,kBAAkB,GAAG,eAAe,CAAC;QACvC,CAAC;aAAM,IAAI,OAAO,SAAS,KAAK,QAAQ,EAAE,CAAC;YACzC,cAAc,GAAG,SAAS,CAAC;QAC7B,CAAC;aAAM,CAAC;YACN,uBAAuB;YACvB,cAAc,GAAG,gBAAgB,CAAS,kBAAkB,CAAC,OAAO,EAAE,SAAS,CAAC,CAAC;YACjF,iFAAiF;YACjF,eAAe,GAAG,SAAkB,CAAC;QACvC,CAAC;QAED,mBAAmB;QACnB,MAAM,YAAY,GAChB,mBAAmB,CAAe,kBAAkB,CAAC,aAAa,EAAE,MAAM,CAAC,WAAW,CAAC,IAAI,EAAE,CAAC;QAEhG,IAAI,CAAC,YAAY,CAAC,WAAW,CAAC,EAAE,CAAC;YAC/B,YAAY,CAAC,WAAW,CAAC,GAAG,cAAc,CAAC;QAC7C,CAAC;QAED,mBAAmB,CAAe,kBAAkB,CAAC,aAAa,EAAE,YAAY,EAAE,MAAM,CAAC,WAAW,CAAC,CAAC;QAEtG,gFAAgF;QAChF,oEAAoE;QACpE,IAAI,eAAe,EAAE,CAAC;YACpB,MAAM,iBAAiB,GACrB,mBAAmB,CAAoB,kBAAkB,CAAC,kBAAkB,EAAE,MAAM,CAAC,WAAW,CAAC,IAAI,EAAE,CAAC;YAE1G,IAAI,CAAC,iBAAiB,CAAC,WAAW,CAAC,EAAE,CAAC;gBACpC,iBAAiB,CAAC,WAAW,CAAC,GAAG,eAAe,CAAC;YACnD,CAAC;YAED,mBAAmB,CACjB,kBAAkB,CAAC,kBAAkB,EACrC,iBAAiB,EACjB,MAAM,CAAC,WAAW,CACnB,CAAC;QACJ,CAAC;QAED,+BAA+B;QAC/B,IAAI,kBAAkB,EAAE,CAAC;YACvB,MAAM,WAAW,GACf,mBAAmB,CAAc,kBAAkB,CAAC,aAAa,EAAE,MAAM,CAAC,WAAW,CAAC,IAAI,EAAE,CAAC;YAE/F,IAAI,CAAC,WAAW,CAAC,WAAW,CAAC,EAAE,CAAC;gBAC9B,WAAW,CAAC,WAAW,CAAC,GAAG,kBAAkB,CAAC;YAChD,CAAC;YAED,mBAAmB,CAAc,kBAAkB,CAAC,aAAa,EAAE,WAAW,EAAE,MAAM,CAAC,WAAW,CAAC,CAAC;QACtG,CAAC;IACH,CAAC,CAAC;AACJ,CAAC,CAAC"}
@@ -1,2 +1,3 @@
1
1
  export * from './decorators';
2
2
  export * from './Scope';
3
+ export * from './componentRegistry';
@@ -1,3 +1,4 @@
1
1
  export * from './decorators';
2
2
  export * from './Scope';
3
+ export * from './componentRegistry';
3
4
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../lib/ioc/component/index.ts"],"names":[],"mappings":"AAAA,cAAc,cAAc,CAAC;AAC7B,cAAc,SAAS,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../lib/ioc/component/index.ts"],"names":[],"mappings":"AAAA,cAAc,cAAc,CAAC;AAC7B,cAAc,SAAS,CAAC;AACxB,cAAc,qBAAqB,CAAC"}
@@ -9,6 +9,7 @@ export declare class ComponentConstants {
9
9
  static readonly PathKey: unique symbol;
10
10
  static readonly InterfaceKey: unique symbol;
11
11
  static readonly DependencyKey: unique symbol;
12
+ static readonly DependencyClassKey: unique symbol;
12
13
  static readonly SoftDependencyKey: unique symbol;
13
14
  static readonly StrategyKey: unique symbol;
14
15
  static readonly ExpressionKey: unique symbol;
@@ -31,4 +32,7 @@ export declare class ComponentConstants {
31
32
  static readonly PageRoutesKey: unique symbol;
32
33
  static readonly EventHandlersKey: unique symbol;
33
34
  static readonly EventPrefixKey: unique symbol;
35
+ static readonly MessageHandlersKey: unique symbol;
36
+ static readonly MessagePrefixKey: unique symbol;
37
+ static readonly MessageTransportKey: unique symbol;
34
38
  }
@@ -10,6 +10,7 @@ export class ComponentConstants {
10
10
  static PathKey = Symbol('component:path');
11
11
  static InterfaceKey = Symbol('component:interface');
12
12
  static DependencyKey = Symbol('component:dependency');
13
+ static DependencyClassKey = Symbol('component:dependencyClass');
13
14
  static SoftDependencyKey = Symbol('component:softDependency');
14
15
  static StrategyKey = Symbol('component:strategy');
15
16
  static ExpressionKey = Symbol('component:expression');
@@ -39,5 +40,9 @@ export class ComponentConstants {
39
40
  // Event specific
40
41
  static EventHandlersKey = Symbol('event:handlers');
41
42
  static EventPrefixKey = Symbol('event:prefix');
43
+ // Microservice specific
44
+ static MessageHandlersKey = Symbol('microservice:handlers');
45
+ static MessagePrefixKey = Symbol('microservice:prefix');
46
+ static MessageTransportKey = Symbol('microservice:transport');
42
47
  }
43
48
  //# sourceMappingURL=ComponentConstants.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"ComponentConstants.js","sourceRoot":"","sources":["../../../../lib/ioc/constants/ComponentConstants.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,MAAM,OAAO,kBAAkB;IAC7B,wDAAwD;IACjD,MAAM,CAAU,OAAO,GAAG,MAAM,CAAC,gBAAgB,CAAC,CAAC;IAEnD,MAAM,CAAU,OAAO,GAAG,MAAM,CAAC,gBAAgB,CAAC,CAAC;IAEnD,MAAM,CAAU,QAAQ,GAAG,MAAM,CAAC,iBAAiB,CAAC,CAAC;IAErD,MAAM,CAAU,OAAO,GAAG,MAAM,CAAC,gBAAgB,CAAC,CAAC;IAEnD,MAAM,CAAU,YAAY,GAAG,MAAM,CAAC,qBAAqB,CAAC,CAAC;IAE7D,MAAM,CAAU,aAAa,GAAG,MAAM,CAAC,sBAAsB,CAAC,CAAC;IAE/D,MAAM,CAAU,iBAAiB,GAAG,MAAM,CAAC,0BAA0B,CAAC,CAAC;IAEvE,MAAM,CAAU,WAAW,GAAG,MAAM,CAAC,oBAAoB,CAAC,CAAC;IAE3D,MAAM,CAAU,aAAa,GAAG,MAAM,CAAC,sBAAsB,CAAC,CAAC;IAE/D,MAAM,CAAU,gBAAgB,GAAG,MAAM,CAAC,yBAAyB,CAAC,CAAC;IAErE,MAAM,CAAU,WAAW,GAAG,MAAM,CAAC,oBAAoB,CAAC,CAAC;IAE3D,MAAM,CAAU,YAAY,GAAG,MAAM,CAAC,qBAAqB,CAAC,CAAC;IAE7D,MAAM,CAAU,OAAO,GAAG,MAAM,CAAC,gBAAgB,CAAC,CAAC;IAE1D,sBAAsB;IACf,MAAM,CAAU,mBAAmB,GAAG,MAAM,CAAC,mBAAmB,CAAC,CAAC;IAElE,MAAM,CAAU,wBAAwB,GAAG,MAAM,CAAC,wBAAwB,CAAC,CAAC;IAE5E,MAAM,CAAU,QAAQ,GAAG,MAAM,CAAC,kBAAkB,CAAC,CAAC;IAE7D,sBAAsB;IACf,MAAM,CAAU,cAAc,GAAG,MAAM,CAAC,wBAAwB,CAAC,CAAC;IAElE,MAAM,CAAU,YAAY,GAAG,MAAM,CAAC,sBAAsB,CAAC,CAAC;IAErE,iBAAiB;IACV,MAAM,CAAU,SAAS,GAAG,MAAM,CAAC,cAAc,CAAC,CAAC;IAEnD,MAAM,CAAU,YAAY,GAAG,MAAM,CAAC,YAAY,CAAC,CAAC;IAEpD,MAAM,CAAU,mBAAmB,GAAG,MAAM,CAAC,mBAAmB,CAAC,CAAC;IAElE,MAAM,CAAU,iBAAiB,GAAG,MAAM,CAAC,iBAAiB,CAAC,CAAC;IAErE,qBAAqB;IACd,MAAM,CAAU,gBAAgB,GAAG,MAAM,CAAC,gBAAgB,CAAC,CAAC;IAE5D,MAAM,CAAU,uBAAuB,GAAG,MAAM,CAAC,uBAAuB,CAAC,CAAC;IAEjF,wBAAwB;IACjB,MAAM,CAAU,kBAAkB,GAAG,MAAM,CAAC,kBAAkB,CAAC,CAAC;IAEvE,8BAA8B;IACvB,MAAM,CAAU,aAAa,GAAG,MAAM,CAAC,+BAA+B,CAAC,CAAC;IAE/E,iBAAiB;IACV,MAAM,CAAU,gBAAgB,GAAG,MAAM,CAAC,gBAAgB,CAAC,CAAC;IAE5D,MAAM,CAAU,cAAc,GAAG,MAAM,CAAC,cAAc,CAAC,CAAC"}
1
+ {"version":3,"file":"ComponentConstants.js","sourceRoot":"","sources":["../../../../lib/ioc/constants/ComponentConstants.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,MAAM,OAAO,kBAAkB;IAC7B,wDAAwD;IACjD,MAAM,CAAU,OAAO,GAAG,MAAM,CAAC,gBAAgB,CAAC,CAAC;IAEnD,MAAM,CAAU,OAAO,GAAG,MAAM,CAAC,gBAAgB,CAAC,CAAC;IAEnD,MAAM,CAAU,QAAQ,GAAG,MAAM,CAAC,iBAAiB,CAAC,CAAC;IAErD,MAAM,CAAU,OAAO,GAAG,MAAM,CAAC,gBAAgB,CAAC,CAAC;IAEnD,MAAM,CAAU,YAAY,GAAG,MAAM,CAAC,qBAAqB,CAAC,CAAC;IAE7D,MAAM,CAAU,aAAa,GAAG,MAAM,CAAC,sBAAsB,CAAC,CAAC;IAE/D,MAAM,CAAU,kBAAkB,GAAG,MAAM,CAAC,2BAA2B,CAAC,CAAC;IAEzE,MAAM,CAAU,iBAAiB,GAAG,MAAM,CAAC,0BAA0B,CAAC,CAAC;IAEvE,MAAM,CAAU,WAAW,GAAG,MAAM,CAAC,oBAAoB,CAAC,CAAC;IAE3D,MAAM,CAAU,aAAa,GAAG,MAAM,CAAC,sBAAsB,CAAC,CAAC;IAE/D,MAAM,CAAU,gBAAgB,GAAG,MAAM,CAAC,yBAAyB,CAAC,CAAC;IAErE,MAAM,CAAU,WAAW,GAAG,MAAM,CAAC,oBAAoB,CAAC,CAAC;IAE3D,MAAM,CAAU,YAAY,GAAG,MAAM,CAAC,qBAAqB,CAAC,CAAC;IAE7D,MAAM,CAAU,OAAO,GAAG,MAAM,CAAC,gBAAgB,CAAC,CAAC;IAE1D,sBAAsB;IACf,MAAM,CAAU,mBAAmB,GAAG,MAAM,CAAC,mBAAmB,CAAC,CAAC;IAElE,MAAM,CAAU,wBAAwB,GAAG,MAAM,CAAC,wBAAwB,CAAC,CAAC;IAE5E,MAAM,CAAU,QAAQ,GAAG,MAAM,CAAC,kBAAkB,CAAC,CAAC;IAE7D,sBAAsB;IACf,MAAM,CAAU,cAAc,GAAG,MAAM,CAAC,wBAAwB,CAAC,CAAC;IAElE,MAAM,CAAU,YAAY,GAAG,MAAM,CAAC,sBAAsB,CAAC,CAAC;IAErE,iBAAiB;IACV,MAAM,CAAU,SAAS,GAAG,MAAM,CAAC,cAAc,CAAC,CAAC;IAEnD,MAAM,CAAU,YAAY,GAAG,MAAM,CAAC,YAAY,CAAC,CAAC;IAEpD,MAAM,CAAU,mBAAmB,GAAG,MAAM,CAAC,mBAAmB,CAAC,CAAC;IAElE,MAAM,CAAU,iBAAiB,GAAG,MAAM,CAAC,iBAAiB,CAAC,CAAC;IAErE,qBAAqB;IACd,MAAM,CAAU,gBAAgB,GAAG,MAAM,CAAC,gBAAgB,CAAC,CAAC;IAE5D,MAAM,CAAU,uBAAuB,GAAG,MAAM,CAAC,uBAAuB,CAAC,CAAC;IAEjF,wBAAwB;IACjB,MAAM,CAAU,kBAAkB,GAAG,MAAM,CAAC,kBAAkB,CAAC,CAAC;IAEvE,8BAA8B;IACvB,MAAM,CAAU,aAAa,GAAG,MAAM,CAAC,+BAA+B,CAAC,CAAC;IAE/E,iBAAiB;IACV,MAAM,CAAU,gBAAgB,GAAG,MAAM,CAAC,gBAAgB,CAAC,CAAC;IAE5D,MAAM,CAAU,cAAc,GAAG,MAAM,CAAC,cAAc,CAAC,CAAC;IAE/D,wBAAwB;IACjB,MAAM,CAAU,kBAAkB,GAAG,MAAM,CAAC,uBAAuB,CAAC,CAAC;IAErE,MAAM,CAAU,gBAAgB,GAAG,MAAM,CAAC,qBAAqB,CAAC,CAAC;IAEjE,MAAM,CAAU,mBAAmB,GAAG,MAAM,CAAC,wBAAwB,CAAC,CAAC"}
@@ -1,4 +1,13 @@
1
1
  import type { IocConfig } from '../types';
2
2
  export declare const getAllFiles: (dirPath: string, arrayOfFiles?: string[]) => string[];
3
3
  export declare const readJson: (path: any) => any;
4
+ /**
5
+ * @description Locate and load `asena-config.ts`.
6
+ *
7
+ * The config sits in the project root in every supported layout, so that is checked
8
+ * directly before falling back to a walk. The fallback is also order-dependent - the
9
+ * first match wins and `readdirSync` order is not defined - which is the second reason
10
+ * to prefer the direct hit.
11
+ * @returns {Promise<IocConfig | null>} The config, or null when there is none
12
+ */
4
13
  export declare const readConfigFile: () => Promise<IocConfig | null>;