fragment-ts 1.0.29 → 1.0.31

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 (50) hide show
  1. package/dist/cli/commands/init.command.js +1 -1
  2. package/dist/core/container/di-container.d.ts +7 -7
  3. package/dist/core/container/di-container.d.ts.map +1 -1
  4. package/dist/core/container/di-container.js +126 -138
  5. package/dist/core/container/di-container.js.map +1 -1
  6. package/dist/core/decorators/application.decorator.d.ts.map +1 -1
  7. package/dist/core/decorators/application.decorator.js +2 -1
  8. package/dist/core/decorators/application.decorator.js.map +1 -1
  9. package/dist/core/decorators/auto-configuration.decorator.d.ts.map +1 -1
  10. package/dist/core/decorators/auto-configuration.decorator.js +4 -3
  11. package/dist/core/decorators/auto-configuration.decorator.js.map +1 -1
  12. package/dist/core/decorators/controller.decorator.d.ts.map +1 -1
  13. package/dist/core/decorators/controller.decorator.js +1 -0
  14. package/dist/core/decorators/controller.decorator.js.map +1 -1
  15. package/dist/core/decorators/http.decorators.d.ts.map +1 -1
  16. package/dist/core/decorators/http.decorators.js +9 -0
  17. package/dist/core/decorators/http.decorators.js.map +1 -1
  18. package/dist/core/decorators/injectable.decorator.d.ts.map +1 -1
  19. package/dist/core/decorators/injectable.decorator.js +1 -0
  20. package/dist/core/decorators/injectable.decorator.js.map +1 -1
  21. package/dist/core/decorators/injection.decorators.d.ts.map +1 -1
  22. package/dist/core/decorators/injection.decorators.js +50 -21
  23. package/dist/core/decorators/injection.decorators.js.map +1 -1
  24. package/dist/core/decorators/repository.decorator.d.ts.map +1 -1
  25. package/dist/core/decorators/repository.decorator.js +1 -0
  26. package/dist/core/decorators/repository.decorator.js.map +1 -1
  27. package/dist/core/decorators/service.decorator.d.ts.map +1 -1
  28. package/dist/core/decorators/service.decorator.js +1 -0
  29. package/dist/core/decorators/service.decorator.js.map +1 -1
  30. package/dist/core/metadata/metadata-storage.d.ts +8 -13
  31. package/dist/core/metadata/metadata-storage.d.ts.map +1 -1
  32. package/dist/core/metadata/metadata-storage.js +19 -18
  33. package/dist/core/metadata/metadata-storage.js.map +1 -1
  34. package/dist/web/application.d.ts +0 -6
  35. package/dist/web/application.d.ts.map +1 -1
  36. package/dist/web/application.js +93 -41
  37. package/dist/web/application.js.map +1 -1
  38. package/package.json +1 -1
  39. package/src/cli/commands/init.command.ts +1 -1
  40. package/src/core/container/di-container.ts +188 -203
  41. package/src/core/decorators/application.decorator.ts +2 -1
  42. package/src/core/decorators/auto-configuration.decorator.ts +9 -8
  43. package/src/core/decorators/controller.decorator.ts +2 -1
  44. package/src/core/decorators/http.decorators.ts +17 -0
  45. package/src/core/decorators/injectable.decorator.ts +1 -0
  46. package/src/core/decorators/injection.decorators.ts +64 -24
  47. package/src/core/decorators/repository.decorator.ts +1 -0
  48. package/src/core/decorators/service.decorator.ts +1 -0
  49. package/src/core/metadata/metadata-storage.ts +37 -37
  50. package/src/web/application.ts +129 -44
@@ -1 +1 @@
1
- {"version":3,"file":"application.js","sourceRoot":"","sources":["../../src/web/application.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"application.js","sourceRoot":"","sources":["../../src/web/application.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "fragment-ts",
3
- "version": "1.0.29",
3
+ "version": "1.0.31",
4
4
  "description": "Spring Boot-style framework for TypeScript with Express and TypeORM",
5
5
  "main": "dist/index.js",
6
6
  "types": "dist/index.d.ts",
@@ -173,7 +173,7 @@ export class InitCommand {
173
173
  "migrate:revert": "fragment migrate:revert",
174
174
  },
175
175
  dependencies: {
176
- "fragment-ts": "^1.0.29",
176
+ "fragment-ts": "^1.0.31",
177
177
  "reflect-metadata": "^0.1.13",
178
178
  },
179
179
  devDependencies: {
@@ -1,5 +1,5 @@
1
1
  import { METADATA_KEYS } from "../metadata/metadata-keys";
2
- import { Scope } from "../decorators/injectable.decorator";
2
+ import { MetadataStorage } from "../metadata/metadata-storage";
3
3
 
4
4
  export class DIContainer {
5
5
  private static instance: DIContainer;
@@ -8,6 +8,11 @@ export class DIContainer {
8
8
  private factories: Map<any, () => any> = new Map();
9
9
  private constructing: Set<any> = new Set();
10
10
  private registered: Set<any> = new Set();
11
+ private metadataStorage: MetadataStorage;
12
+
13
+ private constructor() {
14
+ this.metadataStorage = MetadataStorage.getInstance();
15
+ }
11
16
 
12
17
  static getInstance(): DIContainer {
13
18
  if (!DIContainer.instance) {
@@ -27,23 +32,19 @@ export class DIContainer {
27
32
  }
28
33
 
29
34
  resolve<T>(token: any): T {
30
- if (typeof token === "function" && !this.registered.has(token)) {
31
- throw new Error(
32
- `Cannot resolve ${token.name}: Not registered as injectable. ` +
33
- `Did you forget to add @Injectable(), @Service(), @Controller(), or @Repository()?`,
34
- );
35
+ // Check if already resolved
36
+ if (this.singletons.has(token)) {
37
+ return this.singletons.get(token);
35
38
  }
36
39
 
40
+ // Handle circular dependencies
37
41
  if (this.constructing.has(token)) {
38
42
  throw new Error(
39
43
  `Circular dependency detected for ${token.name || token}`,
40
44
  );
41
45
  }
42
46
 
43
- if (this.singletons.has(token)) {
44
- return this.singletons.get(token);
45
- }
46
-
47
+ // Use factory if available
47
48
  if (this.factories.has(token)) {
48
49
  const factory = this.factories.get(token)!;
49
50
  const instance = factory();
@@ -53,13 +54,21 @@ export class DIContainer {
53
54
  if (scope === "singleton") {
54
55
  this.singletons.set(token, instance);
55
56
  }
56
-
57
57
  return instance;
58
58
  }
59
59
 
60
+ // Create instance for class tokens
60
61
  if (typeof token === "function") {
61
- this.constructing.add(token);
62
+ if (
63
+ !this.registered.has(token) &&
64
+ !Reflect.getMetadata(METADATA_KEYS.INJECTABLE, token)
65
+ ) {
66
+ console.warn(
67
+ `⚠️ ${token.name} is not registered as injectable. Consider adding @Injectable(), @Service(), @Controller(), or @Repository()`,
68
+ );
69
+ }
62
70
 
71
+ this.constructing.add(token);
63
72
  try {
64
73
  const instance = this.createInstance(token);
65
74
  const scope =
@@ -81,37 +90,42 @@ export class DIContainer {
81
90
  }
82
91
 
83
92
  private createInstance(target: any): any {
84
- console.log(` 🔨 Creating instance of ${target.name}`);
93
+ const className = target.name;
94
+ console.log(` 🔨 Creating instance of ${className}`);
85
95
 
96
+ // Get constructor parameters
86
97
  const paramTypes = Reflect.getMetadata("design:paramtypes", target) || [];
87
-
88
98
  const params = paramTypes.map((type: any, index: number) => {
89
99
  if (!type || type === Object) {
90
100
  console.warn(
91
- ` ⚠️ Constructor param ${index} of ${target.name} has no type`,
101
+ ` ⚠️ Constructor param ${index} of ${className} has no type information`,
92
102
  );
93
103
  return undefined;
94
104
  }
95
- console.log(` 📦 Resolving constructor dependency: ${type.name}`);
105
+ console.log(
106
+ ` 📦 Resolving constructor dependency [${index}]: ${type.name || type}`,
107
+ );
96
108
  return this.resolve(type);
97
109
  });
98
110
 
111
+ // Create instance
99
112
  const instance = new target(...params);
100
113
 
101
- // CRITICAL: Inject properties
114
+ // CRITICAL FIX: Inject properties using metadata storage
102
115
  this.injectProperties(instance);
103
116
 
104
- // Call @PostConstruct
117
+ // Call @PostConstruct method if exists
105
118
  const postConstructMethod = Reflect.getMetadata(
106
119
  METADATA_KEYS.POST_CONSTRUCT,
107
120
  target,
108
121
  );
122
+
109
123
  if (
110
124
  postConstructMethod &&
111
125
  typeof instance[postConstructMethod] === "function"
112
126
  ) {
113
127
  console.log(
114
- ` 🎯 Calling @PostConstruct: ${target.name}.${postConstructMethod}()`,
128
+ ` 🎯 Calling @PostConstruct method: ${className}.${String(postConstructMethod)}()`,
115
129
  );
116
130
  instance[postConstructMethod]();
117
131
  }
@@ -121,219 +135,176 @@ export class DIContainer {
121
135
 
122
136
  private injectProperties(instance: any): void {
123
137
  const constructor = instance.constructor;
124
- console.log(` 🔍 Checking properties for injection on ${constructor.name}`);
138
+ const className = constructor.name;
125
139
 
126
- // Get all property names from the entire prototype chain
127
- const propertyNames = this.getAllPropertyNames(instance);
140
+ console.log(` 🔍 Scanning for property injections on ${className}`);
128
141
 
129
- for (const prop of propertyNames) {
130
- if (prop === "constructor") continue;
142
+ // Get all property injections from metadata storage
143
+ const injections = this.metadataStorage.getPropertyInjections(constructor);
131
144
 
132
- // Check each injection type directly on the instance's constructor prototype
133
- const proto = constructor.prototype;
134
- this.tryInjectAutowired(instance, proto, prop, constructor.name);
135
- this.tryInjectByToken(instance, proto, prop, constructor.name);
136
- this.tryInjectValue(instance, proto, prop, constructor.name);
137
- this.tryInjectRepository(instance, proto, prop, constructor.name);
138
- this.tryInjectLazy(instance, proto, prop, constructor.name);
145
+ if (injections.length === 0) {
146
+ console.log(` ℹ️ No property injections registered for ${className}`);
147
+ return;
139
148
  }
140
- }
141
-
142
- private getAllPropertyNames(obj: any): string[] {
143
- const props = new Set<string>();
144
149
 
145
- // Get properties from instance and all prototypes
146
- let current = obj;
147
- while (current && current !== Object.prototype) {
148
- Object.getOwnPropertyNames(current).forEach((name) => props.add(name));
149
- current = Object.getPrototypeOf(current);
150
- }
150
+ console.log(
151
+ ` 📌 Found ${injections.length} property injection(s) for ${className}`,
152
+ );
151
153
 
152
- return Array.from(props).filter((name) => name !== "constructor");
153
- }
154
+ for (const injection of injections) {
155
+ const { propertyKey, type, metadata } = injection;
156
+ console.log(` ➤ Property: ${propertyKey} [${type}]`);
154
157
 
155
- private checkForDecoratedProperties(
156
- instance: any,
157
- constructor: Function,
158
- ): void {
159
- // Check all metadata keys that might be attached to properties
160
- const propertyKeys = [
161
- ...(Reflect.getMetadataKeys(constructor.prototype) || []),
162
- ...(Reflect.getMetadataKeys(instance) || []),
163
- ];
164
-
165
- // Filter for property-related metadata
166
- for (const key of propertyKeys) {
167
- if (key.includes("fragment:")) {
168
- // This is a Fragment metadata key, need to check if it's attached to a property
169
- const metadataValue = Reflect.getMetadata(key, constructor.prototype);
170
- if (metadataValue && typeof metadataValue === "object") {
171
- // Could be a property metadata
172
- for (const prop of Object.keys(metadataValue)) {
173
- if (prop !== "constructor") {
174
- this.tryInjectAutowired(
175
- instance,
176
- constructor.prototype,
177
- prop,
178
- constructor.name,
179
- );
180
- this.tryInjectByToken(
181
- instance,
182
- constructor.prototype,
183
- prop,
184
- constructor.name,
185
- );
186
- this.tryInjectValue(
187
- instance,
188
- constructor.prototype,
189
- prop,
190
- constructor.name,
191
- );
192
- this.tryInjectRepository(
193
- instance,
194
- constructor.prototype,
195
- prop,
196
- constructor.name,
197
- );
198
- }
199
- }
158
+ try {
159
+ switch (type) {
160
+ case "autowired":
161
+ this.injectAutowiredProperty(
162
+ instance,
163
+ propertyKey,
164
+ metadata?.type,
165
+ className,
166
+ );
167
+ break;
168
+ case "inject":
169
+ this.injectTokenProperty(
170
+ instance,
171
+ propertyKey,
172
+ metadata?.token,
173
+ className,
174
+ );
175
+ break;
176
+ case "repository":
177
+ this.injectRepositoryProperty(
178
+ instance,
179
+ propertyKey,
180
+ metadata?.entity,
181
+ className,
182
+ );
183
+ break;
184
+ case "value":
185
+ this.injectValueProperty(
186
+ instance,
187
+ propertyKey,
188
+ metadata?.expression,
189
+ className,
190
+ );
191
+ break;
192
+ case "lazy":
193
+ this.injectLazyProperty(instance, propertyKey, className);
194
+ break;
200
195
  }
201
- }
202
- }
203
- }
204
-
205
- private tryInjectAutowired(
206
- instance: any,
207
- proto: any,
208
- prop: string,
209
- className: string,
210
- ): void {
211
- const type = Reflect.getMetadata(METADATA_KEYS.AUTOWIRED, proto, prop);
212
-
213
- if (!type) return;
214
-
215
- console.log(` 💉 @Autowired found: ${className}.${prop} -> ${type.name}`);
196
+ } catch (error) {
197
+ const isOptional = Reflect.getMetadata(
198
+ METADATA_KEYS.OPTIONAL,
199
+ constructor.prototype,
200
+ propertyKey,
201
+ );
216
202
 
217
- const isOptional = Reflect.getMetadata(METADATA_KEYS.OPTIONAL, proto, prop);
203
+ if (!isOptional) {
204
+ console.error(
205
+ ` ❌ Failed to inject ${propertyKey} in ${className}: ${error}`,
206
+ );
207
+ throw error;
208
+ }
218
209
 
219
- try {
220
- instance[prop] = this.resolve(type);
221
- console.log(` ✅ Injected ${type.name} into ${className}.${prop}`);
222
- } catch (error) {
223
- if (!isOptional) {
224
- throw new Error(
225
- `Failed to autowire ${type.name} into ${className}.${prop}: ${error}`,
210
+ console.warn(
211
+ ` ⚠️ Optional dependency ${propertyKey} not available for ${className}`,
226
212
  );
213
+ instance[propertyKey] = undefined;
227
214
  }
228
- console.warn(
229
- ` ⚠️ Optional dependency ${type.name} not available for ${className}.${prop}`,
230
- );
231
- instance[prop] = undefined;
232
215
  }
233
216
  }
234
217
 
235
- private tryInjectByToken(
218
+ private injectAutowiredProperty(
236
219
  instance: any,
237
- proto: any,
238
- prop: string,
220
+ propertyKey: string,
221
+ type: any,
239
222
  className: string,
240
223
  ): void {
241
- const token = Reflect.getMetadata(METADATA_KEYS.INJECT, proto, prop);
242
-
243
- if (!token) return;
244
-
245
- const tokenName = typeof token === "string" ? token : token.name;
246
- console.log(` 💉 @Inject found: ${className}.${prop} -> ${tokenName}`);
247
-
248
- const isOptional = Reflect.getMetadata(METADATA_KEYS.OPTIONAL, proto, prop);
249
-
250
- try {
251
- instance[prop] = this.resolve(token);
252
- console.log(` ✅ Injected ${tokenName} into ${className}.${prop}`);
253
- } catch (error) {
254
- if (!isOptional) {
224
+ if (!type) {
225
+ // Fallback to design:type metadata
226
+ type = Reflect.getMetadata("design:type", instance, propertyKey);
227
+ if (!type || type === Object) {
255
228
  throw new Error(
256
- `Failed to inject ${tokenName} into ${className}.${prop}: ${error}`,
229
+ `Type information not available for ${className}.${propertyKey}`,
257
230
  );
258
231
  }
259
232
  console.warn(
260
- ` ⚠️ Optional dependency ${tokenName} not available for ${className}.${prop}`,
233
+ ` ⚠️ Using design:type metadata as fallback for ${className}.${propertyKey}`,
261
234
  );
262
- instance[prop] = undefined;
263
235
  }
236
+
237
+ console.log(` 💉 @Autowired: ${className}.${propertyKey} -> ${type.name}`);
238
+ instance[propertyKey] = this.resolve(type);
239
+ console.log(` ✅ Injected ${type.name} into ${className}.${propertyKey}`);
264
240
  }
265
241
 
266
- private tryInjectValue(
242
+ private injectTokenProperty(
267
243
  instance: any,
268
- proto: any,
269
- prop: string,
244
+ propertyKey: string,
245
+ token: any,
270
246
  className: string,
271
247
  ): void {
272
- const expression = Reflect.getMetadata(METADATA_KEYS.VALUE, proto, prop);
273
-
274
- if (expression === undefined) return;
275
-
276
- console.log(` 🔧 @Value found: ${className}.${prop} = ${expression}`);
277
- instance[prop] = this.resolveValue(expression);
278
- console.log(` ✅ Set value for ${className}.${prop}`);
248
+ const tokenName = typeof token === "string" ? token : token.name;
249
+ console.log(` 💉 @Inject: ${className}.${propertyKey} -> ${tokenName}`);
250
+ instance[propertyKey] = this.resolve(token);
251
+ console.log(` ✅ Injected ${tokenName} into ${className}.${propertyKey}`);
279
252
  }
280
253
 
281
- private tryInjectRepository(
254
+ private injectRepositoryProperty(
282
255
  instance: any,
283
- proto: any,
284
- prop: string,
256
+ propertyKey: string,
257
+ entity: any,
285
258
  className: string,
286
259
  ): void {
287
- const entity = Reflect.getMetadata(
288
- METADATA_KEYS.INJECT_REPOSITORY,
289
- proto,
290
- prop,
260
+ console.log(
261
+ ` 💾 @InjectRepository: ${className}.${propertyKey} -> Repository<${entity.name}>`,
291
262
  );
292
-
293
- if (!entity) return;
294
-
263
+ instance[propertyKey] = this.resolveRepository(entity);
295
264
  console.log(
296
- ` 💾 @InjectRepository found: ${className}.${prop} -> Repository<${entity.name}>`,
265
+ ` Injected Repository<${entity.name}> into ${className}.${propertyKey}`,
297
266
  );
298
-
299
- try {
300
- instance[prop] = this.resolveRepository(entity);
301
- console.log(
302
- ` ✅ Injected Repository<${entity.name}> into ${className}.${prop}`,
303
- );
304
- } catch (error) {
305
- throw new Error(
306
- `Failed to inject repository for ${entity.name} into ${className}.${prop}: ${error}`,
307
- );
308
- }
309
267
  }
310
268
 
311
- private tryInjectLazy(
269
+ private injectValueProperty(
312
270
  instance: any,
313
- proto: any,
314
- prop: string,
271
+ propertyKey: string,
272
+ expression: string,
315
273
  className: string,
316
274
  ): void {
317
- const isLazy = Reflect.getMetadata(METADATA_KEYS.LAZY, proto, prop);
275
+ console.log(` 🔧 @Value: ${className}.${propertyKey} = ${expression}`);
276
+ instance[propertyKey] = this.resolveValue(expression);
277
+ console.log(` ✅ Set value for ${className}.${propertyKey}`);
278
+ }
318
279
 
319
- if (!isLazy) return;
280
+ private injectLazyProperty(
281
+ instance: any,
282
+ propertyKey: string,
283
+ className: string,
284
+ ): void {
285
+ const type = Reflect.getMetadata("design:type", instance, propertyKey);
286
+ if (!type) {
287
+ throw new Error(
288
+ `Type information not available for @Lazy ${className}.${propertyKey}`,
289
+ );
290
+ }
320
291
 
321
- const type = Reflect.getMetadata("design:type", proto, prop);
322
- console.log(
323
- ` ⏳ @Lazy found: ${className}.${prop} (${type?.name || "unknown"})`,
324
- );
292
+ console.log(` @Lazy: ${className}.${propertyKey} (${type.name})`);
325
293
 
326
294
  let cached: any = null;
327
295
  let resolved = false;
328
296
 
329
- Object.defineProperty(instance, prop, {
297
+ Object.defineProperty(instance, propertyKey, {
330
298
  get: () => {
331
299
  if (!resolved) {
332
300
  console.log(
333
- ` 🔓 Lazy-loading ${type.name} for ${className}.${prop}`,
301
+ ` 🔓 Lazy-loading ${type.name} for ${className}.${propertyKey}`,
334
302
  );
335
303
  cached = this.resolve(type);
336
304
  resolved = true;
305
+ console.log(
306
+ ` ✅ Lazy-loaded ${type.name} for ${className}.${propertyKey}`,
307
+ );
337
308
  }
338
309
  return cached;
339
310
  },
@@ -343,41 +314,51 @@ export class DIContainer {
343
314
  }
344
315
 
345
316
  private resolveValue(expression: string): any {
346
- const match = expression.match(
347
- /\$\{([^:}]+)(?::([^}]*))?\}|\$([A-Z_][A-Z0-9_]*)/i,
348
- );
349
- if (match) {
350
- const key = match[1] || match[3];
351
- const defaultValue = match[2];
352
- const value = process.env[key];
353
-
354
- if (value === undefined) {
355
- if (defaultValue !== undefined) {
356
- return defaultValue;
357
- }
358
- console.warn(` ⚠️ Environment variable "${key}" not defined`);
359
- return "";
360
- }
317
+ // Standardize expression format (remove ${} if present)
318
+ let key = expression.replace(/\$\{|\}/g, "");
319
+ let defaultValue: any = undefined;
320
+
321
+ // Handle default values (format: KEY:default)
322
+ const defaultMatch = key.match(/^(.*?):(.*)$/);
323
+ if (defaultMatch) {
324
+ key = defaultMatch[1].trim();
325
+ defaultValue = defaultMatch[2].trim();
326
+
327
+ // Try to parse as boolean
328
+ if (defaultValue.toLowerCase() === "true") defaultValue = true;
329
+ else if (defaultValue.toLowerCase() === "false") defaultValue = false;
330
+ // Try to parse as number
331
+ else if (!isNaN(Number(defaultValue)))
332
+ defaultValue = Number(defaultValue);
333
+ }
361
334
 
362
- if (value.startsWith("{") || value.startsWith("[")) {
335
+ // Check environment variables
336
+ const envValue = process.env[key.toUpperCase()] || process.env[key];
337
+ if (envValue !== undefined) {
338
+ // Try to parse as JSON if it looks like an object/array
339
+ if (envValue.startsWith("{") || envValue.startsWith("[")) {
363
340
  try {
364
- return JSON.parse(value);
341
+ return JSON.parse(envValue);
365
342
  } catch {
366
- return value;
343
+ return envValue;
367
344
  }
368
345
  }
369
346
 
370
- if (/^\d+(\.\d+)?$/.test(value)) {
371
- return parseFloat(value);
347
+ // Try to parse as number
348
+ const numValue = parseFloat(envValue);
349
+ if (!isNaN(numValue) && envValue.trim() === numValue.toString()) {
350
+ return numValue;
372
351
  }
373
352
 
374
- if (value.toLowerCase() === "true") return true;
375
- if (value.toLowerCase() === "false") return false;
353
+ // Try to parse as boolean
354
+ if (envValue.toLowerCase() === "true") return true;
355
+ if (envValue.toLowerCase() === "false") return false;
376
356
 
377
- return value;
357
+ return envValue;
378
358
  }
379
359
 
380
- return expression;
360
+ // Return default value if available
361
+ return defaultValue !== undefined ? defaultValue : undefined;
381
362
  }
382
363
 
383
364
  private resolveRepository(entity: any): any {
@@ -398,7 +379,11 @@ export class DIContainer {
398
379
  }
399
380
 
400
381
  has(token: any): boolean {
401
- return this.registered.has(token);
382
+ return (
383
+ this.registered.has(token) ||
384
+ this.singletons.has(token) ||
385
+ this.factories.has(token)
386
+ );
402
387
  }
403
388
 
404
389
  getAllInstances(): any[] {
@@ -11,6 +11,7 @@ export function FragmentApplication(
11
11
  options: ApplicationOptions = {},
12
12
  ): ClassDecorator {
13
13
  return (target: any) => {
14
+ console.log(`🚀 Registering Fragment application: ${target.name}`);
14
15
  Reflect.defineMetadata(
15
16
  METADATA_KEYS.APPLICATION,
16
17
  {
@@ -18,7 +19,7 @@ export function FragmentApplication(
18
19
  port: options.port || 3000,
19
20
  host: options.host || "0.0.0.0",
20
21
  configPath: options.configPath || "fragment.json",
21
- autoScan: options.autoScan || true,
22
+ autoScan: options.autoScan !== false, // default to true
22
23
  },
23
24
  target,
24
25
  );
@@ -1,17 +1,18 @@
1
- import { Injectable } from './injectable.decorator';
2
- import { METADATA_KEYS } from '../metadata/metadata-keys';
3
- import { MetadataStorage } from '../metadata/metadata-storage';
1
+ import { Injectable } from "./injectable.decorator";
2
+ import { METADATA_KEYS } from "../metadata/metadata-keys";
3
+ import { MetadataStorage } from "../metadata/metadata-storage";
4
4
 
5
5
  export function AutoConfiguration(): ClassDecorator {
6
6
  return (target: any) => {
7
- Injectable('singleton')(target);
7
+ console.log(`🔧 Registering AutoConfiguration: ${target.name}`);
8
+ Injectable("singleton")(target);
8
9
  Reflect.defineMetadata(METADATA_KEYS.AUTO_CONFIGURATION, true, target);
9
-
10
+
10
11
  const storage = MetadataStorage.getInstance();
11
12
  storage.addClass({
12
13
  target,
13
- type: 'auto-configuration',
14
- scope: 'singleton'
14
+ type: "auto-configuration",
15
+ scope: "singleton",
15
16
  });
16
17
  };
17
- }
18
+ }