@notjustcoders/ioc-arise 1.0.6 → 1.0.9

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 (86) hide show
  1. package/dist/analyser/class-analyzer.d.ts.map +1 -1
  2. package/dist/analyser/class-analyzer.js +3 -6
  3. package/dist/analyser/class-analyzer.js.map +1 -1
  4. package/dist/commands/generate.d.ts.map +1 -1
  5. package/dist/commands/generate.js +2 -8
  6. package/dist/commands/generate.js.map +1 -1
  7. package/dist/generator/base-container-code-generator.d.ts +15 -0
  8. package/dist/generator/base-container-code-generator.d.ts.map +1 -0
  9. package/dist/generator/base-container-code-generator.js +23 -0
  10. package/dist/generator/base-container-code-generator.js.map +1 -0
  11. package/dist/generator/base-dependency-resolver.d.ts +26 -0
  12. package/dist/generator/base-dependency-resolver.d.ts.map +1 -0
  13. package/dist/generator/base-dependency-resolver.js +72 -0
  14. package/dist/generator/base-dependency-resolver.js.map +1 -0
  15. package/dist/generator/base-instantiation-generator.d.ts +55 -0
  16. package/dist/generator/base-instantiation-generator.d.ts.map +1 -0
  17. package/dist/generator/base-instantiation-generator.js +117 -0
  18. package/dist/generator/base-instantiation-generator.js.map +1 -0
  19. package/dist/generator/container-generator-factory.d.ts +2 -2
  20. package/dist/generator/container-generator-factory.d.ts.map +1 -1
  21. package/dist/generator/container-generator-factory.js +18 -25
  22. package/dist/generator/container-generator-factory.js.map +1 -1
  23. package/dist/generator/duplicate-import-resolver.d.ts +44 -0
  24. package/dist/generator/duplicate-import-resolver.d.ts.map +1 -0
  25. package/dist/generator/duplicate-import-resolver.js +162 -0
  26. package/dist/generator/duplicate-import-resolver.js.map +1 -0
  27. package/dist/generator/flat/container-generator.d.ts.map +1 -1
  28. package/dist/generator/flat/container-generator.js +3 -21
  29. package/dist/generator/flat/container-generator.js.map +1 -1
  30. package/dist/generator/flat/dependency-resolver.d.ts +0 -3
  31. package/dist/generator/flat/dependency-resolver.d.ts.map +1 -1
  32. package/dist/generator/flat/dependency-resolver.js +6 -46
  33. package/dist/generator/flat/dependency-resolver.js.map +1 -1
  34. package/dist/generator/flat/instantiation-generator.d.ts +5 -2
  35. package/dist/generator/flat/instantiation-generator.d.ts.map +1 -1
  36. package/dist/generator/flat/instantiation-generator.js +42 -33
  37. package/dist/generator/flat/instantiation-generator.js.map +1 -1
  38. package/dist/generator/import-generator.d.ts +21 -0
  39. package/dist/generator/import-generator.d.ts.map +1 -1
  40. package/dist/generator/import-generator.js +77 -2
  41. package/dist/generator/import-generator.js.map +1 -1
  42. package/dist/generator/index.d.ts +1 -2
  43. package/dist/generator/index.d.ts.map +1 -1
  44. package/dist/generator/index.js +1 -3
  45. package/dist/generator/index.js.map +1 -1
  46. package/dist/generator/modular/container-aggregator.d.ts +0 -7
  47. package/dist/generator/modular/container-aggregator.d.ts.map +1 -1
  48. package/dist/generator/modular/container-aggregator.js +3 -14
  49. package/dist/generator/modular/container-aggregator.js.map +1 -1
  50. package/dist/generator/modular/modular-container-generator.d.ts +4 -1
  51. package/dist/generator/modular/modular-container-generator.d.ts.map +1 -1
  52. package/dist/generator/modular/modular-container-generator.js +4 -7
  53. package/dist/generator/modular/modular-container-generator.js.map +1 -1
  54. package/dist/generator/modular/module-container-function-generator.d.ts +10 -63
  55. package/dist/generator/modular/module-container-function-generator.d.ts.map +1 -1
  56. package/dist/generator/modular/module-container-function-generator.js +10 -213
  57. package/dist/generator/modular/module-container-function-generator.js.map +1 -1
  58. package/dist/generator/modular/module-dependency-resolver.d.ts +10 -24
  59. package/dist/generator/modular/module-dependency-resolver.d.ts.map +1 -1
  60. package/dist/generator/modular/module-dependency-resolver.js +35 -46
  61. package/dist/generator/modular/module-dependency-resolver.js.map +1 -1
  62. package/dist/generator/modular/module-function-body-generator.d.ts +15 -0
  63. package/dist/generator/modular/module-function-body-generator.d.ts.map +1 -0
  64. package/dist/generator/modular/module-function-body-generator.js +25 -0
  65. package/dist/generator/modular/module-function-body-generator.js.map +1 -0
  66. package/dist/generator/modular/module-function-signature-generator.d.ts +15 -0
  67. package/dist/generator/modular/module-function-signature-generator.d.ts.map +1 -0
  68. package/dist/generator/modular/module-function-signature-generator.js +24 -0
  69. package/dist/generator/modular/module-function-signature-generator.js.map +1 -0
  70. package/dist/generator/modular/module-instantiation-generator.d.ts +1 -15
  71. package/dist/generator/modular/module-instantiation-generator.d.ts.map +1 -1
  72. package/dist/generator/modular/module-instantiation-generator.js +4 -32
  73. package/dist/generator/modular/module-instantiation-generator.js.map +1 -1
  74. package/dist/generator/shared/dependency-resolver-utils.d.ts +28 -0
  75. package/dist/generator/shared/dependency-resolver-utils.d.ts.map +1 -0
  76. package/dist/generator/shared/dependency-resolver-utils.js +67 -0
  77. package/dist/generator/shared/dependency-resolver-utils.js.map +1 -0
  78. package/dist/generator/shared/index.d.ts +2 -0
  79. package/dist/generator/shared/index.d.ts.map +1 -0
  80. package/dist/generator/shared/index.js +18 -0
  81. package/dist/generator/shared/index.js.map +1 -0
  82. package/dist/generator/shared/instantiation-utils.d.ts +240 -0
  83. package/dist/generator/shared/instantiation-utils.d.ts.map +1 -0
  84. package/dist/generator/shared/instantiation-utils.js +560 -0
  85. package/dist/generator/shared/instantiation-utils.js.map +1 -0
  86. package/package.json +1 -1
@@ -3,14 +3,89 @@ Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.ImportGenerator = void 0;
4
4
  class ImportGenerator {
5
5
  constructor(classes) {
6
+ this.aliasMap = new Map();
6
7
  this.classes = classes;
8
+ this.generateAliases();
9
+ }
10
+ /**
11
+ * Detects name collisions and generates unique aliases for colliding class names.
12
+ */
13
+ generateAliases() {
14
+ const nameToClasses = new Map();
15
+ // Group classes by name to detect collisions
16
+ for (const classInfo of this.classes) {
17
+ if (!nameToClasses.has(classInfo.name)) {
18
+ nameToClasses.set(classInfo.name, []);
19
+ }
20
+ nameToClasses.get(classInfo.name).push(classInfo);
21
+ }
22
+ // Generate aliases for colliding names
23
+ for (const [className, classList] of nameToClasses) {
24
+ if (classList.length > 1) {
25
+ // Name collision detected - generate unique aliases
26
+ for (let i = 1; i < classList.length; i++) {
27
+ const classInfo = classList[i];
28
+ if (classInfo) {
29
+ const alias = this.generateUniqueAlias(className, classInfo.importPath, i);
30
+ this.aliasMap.set(classInfo.importPath, alias);
31
+ }
32
+ }
33
+ }
34
+ }
35
+ }
36
+ /**
37
+ * Generates a unique alias based on the class name and its module path.
38
+ */
39
+ generateUniqueAlias(className, importPath, index) {
40
+ // Extract module name from import path (e.g., './user/CreateItemUseCase' -> 'User')
41
+ const pathParts = importPath.split('/');
42
+ let moduleName = '';
43
+ // Find the module directory name (the part before the class file)
44
+ for (let i = pathParts.length - 2; i >= 0; i--) {
45
+ const part = pathParts[i];
46
+ if (part && part !== '.' && part !== '..') {
47
+ moduleName = part.charAt(0).toUpperCase() + part.slice(1);
48
+ break;
49
+ }
50
+ }
51
+ // If we couldn't extract a meaningful module name, use index
52
+ if (!moduleName) {
53
+ moduleName = `Module${index + 1}`;
54
+ }
55
+ return `${moduleName}${className}`;
56
+ }
57
+ /**
58
+ * Gets the alias for a class, or returns the original name if no alias exists.
59
+ */
60
+ getClassAlias(classInfo) {
61
+ return this.aliasMap.get(classInfo.importPath) || classInfo.name;
62
+ }
63
+ /**
64
+ * Gets the alias for a class by its import path.
65
+ */
66
+ getClassAliasByPath(importPath) {
67
+ return this.aliasMap.get(importPath) || '';
68
+ }
69
+ /**
70
+ * Checks if a class has an alias (i.e., was involved in a name collision).
71
+ */
72
+ hasAlias(classInfo) {
73
+ return this.aliasMap.has(classInfo.importPath);
7
74
  }
8
75
  generateImports() {
9
76
  const importSet = new Set();
10
77
  const classMap = new Map(this.classes.map(c => [c.name, c]));
11
- // Add imports for all managed classes
78
+ // Add imports for all managed classes with aliases if needed
12
79
  for (const classInfo of this.classes) {
13
- importSet.add(`import { ${classInfo.name} } from '${classInfo.importPath}';`);
80
+ const alias = this.getClassAlias(classInfo);
81
+ if (alias !== classInfo.name) {
82
+ // Use alias for colliding imports
83
+ importSet.add(`import { ${classInfo.name} as ${alias} } from '${classInfo.importPath}';`);
84
+ }
85
+ else {
86
+ // No collision, use original name
87
+ importSet.add(`import { ${classInfo.name} } from '${classInfo.importPath}';`);
88
+ }
14
89
  }
15
90
  // Add imports for unmanaged dependencies
16
91
  for (const classInfo of this.classes) {
@@ -1 +1 @@
1
- {"version":3,"file":"import-generator.js","sourceRoot":"","sources":["../../src/generator/import-generator.ts"],"names":[],"mappings":";;;AAEA,MAAa,eAAe;IAG1B,YAAY,OAAoB;QAC9B,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC;IACzB,CAAC;IAED,eAAe;QACb,MAAM,SAAS,GAAG,IAAI,GAAG,EAAU,CAAC;QACpC,MAAM,QAAQ,GAAG,IAAI,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;QAE7D,sCAAsC;QACtC,KAAK,MAAM,SAAS,IAAI,IAAI,CAAC,OAAO,EAAE,CAAC;YACrC,SAAS,CAAC,GAAG,CAAC,YAAY,SAAS,CAAC,IAAI,YAAY,SAAS,CAAC,UAAU,IAAI,CAAC,CAAC;QAChF,CAAC;QAED,yCAAyC;QACzC,KAAK,MAAM,SAAS,IAAI,IAAI,CAAC,OAAO,EAAE,CAAC;YACrC,KAAK,MAAM,GAAG,IAAI,SAAS,CAAC,YAAY,EAAE,CAAC;gBACzC,6DAA6D;gBAC7D,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC;oBACrB,wBAAwB;oBACxB,sEAAsE;gBAC1E,CAAC;YACH,CAAC;QACH,CAAC;QAED,OAAO,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAC1C,CAAC;CACF;AA7BD,0CA6BC"}
1
+ {"version":3,"file":"import-generator.js","sourceRoot":"","sources":["../../src/generator/import-generator.ts"],"names":[],"mappings":"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"}
@@ -5,7 +5,7 @@ import { ClassInfo } from '../types';
5
5
  * @param classesOrModules - Either a flat array of classes or a Map of module-grouped classes
6
6
  * @param outputPath - The output path for the generated container file
7
7
  */
8
- export declare function generateContainerFile(classesOrModules: ClassInfo[] | Map<string, ClassInfo[]>, outputPath: string): void;
8
+ export declare function generateContainerFile(classesOrModules: Map<string, ClassInfo[]>, outputPath: string): void;
9
9
  /**
10
10
  * Detects circular dependencies in a flat array of classes.
11
11
  *
@@ -15,6 +15,5 @@ export declare function generateContainerFile(classesOrModules: ClassInfo[] | Ma
15
15
  export declare function detectCircularDependencies(classes: ClassInfo[]): string[][];
16
16
  export { ContainerGeneratorFactory } from './container-generator-factory';
17
17
  export { BaseContainerGenerator } from './base-container-generator';
18
- export { FlatContainerGenerator } from './flat/flat-container-generator';
19
18
  export { ModularContainerGenerator } from './modular/modular-container-generator';
20
19
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/generator/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,UAAU,CAAC;AAIrC;;;;;GAKG;AACH,wBAAgB,qBAAqB,CAAC,gBAAgB,EAAE,SAAS,EAAE,GAAG,GAAG,CAAC,MAAM,EAAE,SAAS,EAAE,CAAC,EAAE,UAAU,EAAE,MAAM,GAAG,IAAI,CAGxH;AAED;;;;;GAKG;AACH,wBAAgB,0BAA0B,CAAC,OAAO,EAAE,SAAS,EAAE,GAAG,MAAM,EAAE,EAAE,CAG3E;AAGD,OAAO,EAAE,yBAAyB,EAAE,MAAM,+BAA+B,CAAC;AAC1E,OAAO,EAAE,sBAAsB,EAAE,MAAM,4BAA4B,CAAC;AACpE,OAAO,EAAE,sBAAsB,EAAE,MAAM,iCAAiC,CAAC;AACzE,OAAO,EAAE,yBAAyB,EAAE,MAAM,uCAAuC,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/generator/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,UAAU,CAAC;AAIrC;;;;;GAKG;AACH,wBAAgB,qBAAqB,CAAC,gBAAgB,EAAE,GAAG,CAAC,MAAM,EAAE,SAAS,EAAE,CAAC,EAAE,UAAU,EAAE,MAAM,GAAG,IAAI,CAG1G;AAED;;;;;GAKG;AACH,wBAAgB,0BAA0B,CAAC,OAAO,EAAE,SAAS,EAAE,GAAG,MAAM,EAAE,EAAE,CAG3E;AAGD,OAAO,EAAE,yBAAyB,EAAE,MAAM,+BAA+B,CAAC;AAC1E,OAAO,EAAE,sBAAsB,EAAE,MAAM,4BAA4B,CAAC;AACpE,OAAO,EAAE,yBAAyB,EAAE,MAAM,uCAAuC,CAAC"}
@@ -1,6 +1,6 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.ModularContainerGenerator = exports.FlatContainerGenerator = exports.BaseContainerGenerator = exports.ContainerGeneratorFactory = void 0;
3
+ exports.ModularContainerGenerator = exports.BaseContainerGenerator = exports.ContainerGeneratorFactory = void 0;
4
4
  exports.generateContainerFile = generateContainerFile;
5
5
  exports.detectCircularDependencies = detectCircularDependencies;
6
6
  const dependency_resolver_1 = require("../analyser/dependency-resolver");
@@ -30,8 +30,6 @@ var container_generator_factory_2 = require("./container-generator-factory");
30
30
  Object.defineProperty(exports, "ContainerGeneratorFactory", { enumerable: true, get: function () { return container_generator_factory_2.ContainerGeneratorFactory; } });
31
31
  var base_container_generator_1 = require("./base-container-generator");
32
32
  Object.defineProperty(exports, "BaseContainerGenerator", { enumerable: true, get: function () { return base_container_generator_1.BaseContainerGenerator; } });
33
- var flat_container_generator_1 = require("./flat/flat-container-generator");
34
- Object.defineProperty(exports, "FlatContainerGenerator", { enumerable: true, get: function () { return flat_container_generator_1.FlatContainerGenerator; } });
35
33
  var modular_container_generator_1 = require("./modular/modular-container-generator");
36
34
  Object.defineProperty(exports, "ModularContainerGenerator", { enumerable: true, get: function () { return modular_container_generator_1.ModularContainerGenerator; } });
37
35
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/generator/index.ts"],"names":[],"mappings":";;;AAUA,sDAGC;AAQD,gEAGC;AAvBD,yEAAqE;AACrE,+EAA0E;AAE1E;;;;;GAKG;AACH,SAAgB,qBAAqB,CAAC,gBAAwD,EAAE,UAAkB;IAChH,MAAM,SAAS,GAAG,uDAAyB,CAAC,MAAM,CAAC,gBAAgB,EAAE,UAAU,CAAC,CAAC;IACjF,SAAS,CAAC,QAAQ,EAAE,CAAC;AACvB,CAAC;AAED;;;;;GAKG;AACH,SAAgB,0BAA0B,CAAC,OAAoB;IAC7D,MAAM,QAAQ,GAAG,IAAI,wCAAkB,CAAC,OAAO,CAAC,CAAC;IACjD,OAAO,QAAQ,CAAC,0BAA0B,EAAE,CAAC;AAC/C,CAAC;AAED,2CAA2C;AAC3C,6EAA0E;AAAjE,wIAAA,yBAAyB,OAAA;AAClC,uEAAoE;AAA3D,kIAAA,sBAAsB,OAAA;AAC/B,4EAAyE;AAAhE,kIAAA,sBAAsB,OAAA;AAC/B,qFAAkF;AAAzE,wIAAA,yBAAyB,OAAA"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/generator/index.ts"],"names":[],"mappings":";;;AAUA,sDAGC;AAQD,gEAGC;AAvBD,yEAAqE;AACrE,+EAA0E;AAE1E;;;;;GAKG;AACH,SAAgB,qBAAqB,CAAC,gBAA0C,EAAE,UAAkB;IAClG,MAAM,SAAS,GAAG,uDAAyB,CAAC,MAAM,CAAC,gBAAgB,EAAE,UAAU,CAAC,CAAC;IACjF,SAAS,CAAC,QAAQ,EAAE,CAAC;AACvB,CAAC;AAED;;;;;GAKG;AACH,SAAgB,0BAA0B,CAAC,OAAoB;IAC7D,MAAM,QAAQ,GAAG,IAAI,wCAAkB,CAAC,OAAO,CAAC,CAAC;IACjD,OAAO,QAAQ,CAAC,0BAA0B,EAAE,CAAC;AAC/C,CAAC;AAED,2CAA2C;AAC3C,6EAA0E;AAAjE,wIAAA,yBAAyB,OAAA;AAClC,uEAAoE;AAA3D,kIAAA,sBAAsB,OAAA;AAC/B,qFAAkF;AAAzE,wIAAA,yBAAyB,OAAA"}
@@ -1,6 +1,3 @@
1
- /**
2
- * Responsible for aggregating module containers into a single container.
3
- */
4
1
  export declare class ContainerAggregator {
5
2
  /**
6
3
  * Generates the aggregated container code.
@@ -10,9 +7,5 @@ export declare class ContainerAggregator {
10
7
  * Generates the type export for the container.
11
8
  */
12
9
  generateModularTypeExport(): string;
13
- /**
14
- * Utility method to convert strings to camelCase.
15
- */
16
- private camelCase;
17
10
  }
18
11
  //# sourceMappingURL=container-aggregator.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"container-aggregator.d.ts","sourceRoot":"","sources":["../../../src/generator/modular/container-aggregator.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,qBAAa,mBAAmB;IAC9B;;OAEG;IACH,2BAA2B,CAAC,aAAa,EAAE,MAAM,EAAE,GAAG,MAAM;IAY5D;;OAEG;IACH,yBAAyB,IAAI,MAAM;IAInC;;OAEG;IACH,OAAO,CAAC,SAAS;CAGlB"}
1
+ {"version":3,"file":"container-aggregator.d.ts","sourceRoot":"","sources":["../../../src/generator/modular/container-aggregator.ts"],"names":[],"mappings":"AAKA,qBAAa,mBAAmB;IAC9B;;OAEG;IACH,2BAA2B,CAAC,aAAa,EAAE,MAAM,EAAE,GAAG,MAAM;IAI5D;;OAEG;IACH,yBAAyB,IAAI,MAAM;CAGpC"}
@@ -4,30 +4,19 @@ exports.ContainerAggregator = void 0;
4
4
  /**
5
5
  * Responsible for aggregating module containers into a single container.
6
6
  */
7
+ const shared_1 = require("../shared");
7
8
  class ContainerAggregator {
8
9
  /**
9
10
  * Generates the aggregated container code.
10
11
  */
11
12
  generateAggregatedContainer(sortedModules) {
12
- const moduleExports = [];
13
- for (const moduleName of sortedModules) {
14
- const moduleVarName = this.camelCase(moduleName) + 'Container';
15
- const moduleKey = this.camelCase(moduleName);
16
- moduleExports.push(` ${moduleKey}: ${moduleVarName}`);
17
- }
18
- return `export const container = {\n${moduleExports.join(',\n')}\n};`;
13
+ return shared_1.InstantiationUtils.generateAggregatedContainer(sortedModules);
19
14
  }
20
15
  /**
21
16
  * Generates the type export for the container.
22
17
  */
23
18
  generateModularTypeExport() {
24
- return 'export type Container = typeof container;';
25
- }
26
- /**
27
- * Utility method to convert strings to camelCase.
28
- */
29
- camelCase(str) {
30
- return str.charAt(0).toLowerCase() + str.slice(1).replace(/[^a-zA-Z0-9]/g, '');
19
+ return shared_1.InstantiationUtils.generateModularContainerTypeExport();
31
20
  }
32
21
  }
33
22
  exports.ContainerAggregator = ContainerAggregator;
@@ -1 +1 @@
1
- {"version":3,"file":"container-aggregator.js","sourceRoot":"","sources":["../../../src/generator/modular/container-aggregator.ts"],"names":[],"mappings":";;;AAAA;;GAEG;AACH,MAAa,mBAAmB;IAC9B;;OAEG;IACH,2BAA2B,CAAC,aAAuB;QACjD,MAAM,aAAa,GAAa,EAAE,CAAC;QAEnC,KAAK,MAAM,UAAU,IAAI,aAAa,EAAE,CAAC;YACvC,MAAM,aAAa,GAAG,IAAI,CAAC,SAAS,CAAC,UAAU,CAAC,GAAG,WAAW,CAAC;YAC/D,MAAM,SAAS,GAAG,IAAI,CAAC,SAAS,CAAC,UAAU,CAAC,CAAC;YAC7C,aAAa,CAAC,IAAI,CAAC,KAAK,SAAS,KAAK,aAAa,EAAE,CAAC,CAAC;QACzD,CAAC;QAED,OAAO,+BAA+B,aAAa,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC;IACxE,CAAC;IAED;;OAEG;IACH,yBAAyB;QACvB,OAAO,2CAA2C,CAAC;IACrD,CAAC;IAED;;OAEG;IACK,SAAS,CAAC,GAAW;QAC3B,OAAO,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,GAAG,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,eAAe,EAAE,EAAE,CAAC,CAAC;IACjF,CAAC;CACF;AA7BD,kDA6BC"}
1
+ {"version":3,"file":"container-aggregator.js","sourceRoot":"","sources":["../../../src/generator/modular/container-aggregator.ts"],"names":[],"mappings":";;;AAAA;;GAEG;AACH,sCAA+C;AAE/C,MAAa,mBAAmB;IAC9B;;OAEG;IACH,2BAA2B,CAAC,aAAuB;QACjD,OAAO,2BAAkB,CAAC,2BAA2B,CAAC,aAAa,CAAC,CAAC;IACvE,CAAC;IAED;;OAEG;IACH,yBAAyB;QACvB,OAAO,2BAAkB,CAAC,kCAAkC,EAAE,CAAC;IACjE,CAAC;CACF;AAdD,kDAcC"}
@@ -3,6 +3,9 @@ import { ClassInfo } from '../../types';
3
3
  import { ImportGenerator } from '../import-generator';
4
4
  import { BaseContainerGenerator } from '../base-container-generator';
5
5
  import { FileWriter } from '../file-writer';
6
+ import { ModuleContainerFunctionGenerator } from './module-container-function-generator';
7
+ import { ModuleInstantiationGenerator } from './module-instantiation-generator';
8
+ import { ContainerAggregator } from './container-aggregator';
6
9
  /**
7
10
  * Generator for modular container structure.
8
11
  * Handles module-based dependency injection with inter-module dependencies.
@@ -13,7 +16,7 @@ export declare class ModularContainerGenerator extends BaseContainerGenerator {
13
16
  private moduleContainerFunctionGenerator;
14
17
  private moduleInstantiationGenerator;
15
18
  private containerAggregator;
16
- constructor(fileWriter: FileWriter, moduleGroupedClasses: Map<string, ClassInfo[]>, moduleDependencyResolver: ModuleDependencyResolver, importGenerator: ImportGenerator);
19
+ constructor(fileWriter: FileWriter, moduleGroupedClasses: Map<string, ClassInfo[]>, moduleDependencyResolver: ModuleDependencyResolver, importGenerator: ImportGenerator, moduleContainerFunctionGenerator: ModuleContainerFunctionGenerator, moduleInstantiationGenerator: ModuleInstantiationGenerator, containerAggregator: ContainerAggregator);
17
20
  generate(): void;
18
21
  protected generateContainerCode(sortedModules?: string[], moduleDependencies?: Map<string, Set<string>>): string;
19
22
  private generateModuleContainers;
@@ -1 +1 @@
1
- {"version":3,"file":"modular-container-generator.d.ts","sourceRoot":"","sources":["../../../src/generator/modular/modular-container-generator.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,wBAAwB,EAAE,MAAM,2CAA2C,CAAC;AACrF,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AACxC,OAAO,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAC;AACtD,OAAO,EAAE,sBAAsB,EAAE,MAAM,6BAA6B,CAAC;AACrE,OAAO,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAC;AAK5C;;;GAGG;AACH,qBAAa,yBAA0B,SAAQ,sBAAsB;IACnE,OAAO,CAAC,oBAAoB,CAA2B;IACvD,OAAO,CAAC,wBAAwB,CAA2B;IAC3D,OAAO,CAAC,gCAAgC,CAAmC;IAC3E,OAAO,CAAC,4BAA4B,CAA+B;IACnE,OAAO,CAAC,mBAAmB,CAAsB;gBAG/C,UAAU,EAAE,UAAU,EACtB,oBAAoB,EAAE,GAAG,CAAC,MAAM,EAAE,SAAS,EAAE,CAAC,EAC9C,wBAAwB,EAAE,wBAAwB,EAClD,eAAe,EAAE,eAAe;IAUlC,QAAQ,IAAI,IAAI;IAqBhB,SAAS,CAAC,qBAAqB,CAAC,aAAa,CAAC,EAAE,MAAM,EAAE,EAAE,kBAAkB,CAAC,EAAE,GAAG,CAAC,MAAM,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC,GAAG,MAAM;IAehH,OAAO,CAAC,wBAAwB;CAUjC"}
1
+ {"version":3,"file":"modular-container-generator.d.ts","sourceRoot":"","sources":["../../../src/generator/modular/modular-container-generator.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,wBAAwB,EAAE,MAAM,2CAA2C,CAAC;AACrF,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AACxC,OAAO,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAC;AACtD,OAAO,EAAE,sBAAsB,EAAE,MAAM,6BAA6B,CAAC;AACrE,OAAO,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAC;AAC5C,OAAO,EAAE,gCAAgC,EAAE,MAAM,uCAAuC,CAAC;AACzF,OAAO,EAAE,4BAA4B,EAAE,MAAM,kCAAkC,CAAC;AAChF,OAAO,EAAE,mBAAmB,EAAE,MAAM,wBAAwB,CAAC;AAE7D;;;GAGG;AACH,qBAAa,yBAA0B,SAAQ,sBAAsB;IACnE,OAAO,CAAC,oBAAoB,CAA2B;IACvD,OAAO,CAAC,wBAAwB,CAA2B;IAC3D,OAAO,CAAC,gCAAgC,CAAmC;IAC3E,OAAO,CAAC,4BAA4B,CAA+B;IACnE,OAAO,CAAC,mBAAmB,CAAsB;gBAG/C,UAAU,EAAE,UAAU,EACtB,oBAAoB,EAAE,GAAG,CAAC,MAAM,EAAE,SAAS,EAAE,CAAC,EAC9C,wBAAwB,EAAE,wBAAwB,EAClD,eAAe,EAAE,eAAe,EAChC,gCAAgC,EAAE,gCAAgC,EAClE,4BAA4B,EAAE,4BAA4B,EAC1D,mBAAmB,EAAE,mBAAmB;IAU1C,QAAQ,IAAI,IAAI;IAqBhB,SAAS,CAAC,qBAAqB,CAAC,aAAa,CAAC,EAAE,MAAM,EAAE,EAAE,kBAAkB,CAAC,EAAE,GAAG,CAAC,MAAM,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC,GAAG,MAAM;IAehH,OAAO,CAAC,wBAAwB;CAUjC"}
@@ -3,21 +3,18 @@ Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.ModularContainerGenerator = void 0;
4
4
  const dependency_resolver_1 = require("../../analyser/dependency-resolver");
5
5
  const base_container_generator_1 = require("../base-container-generator");
6
- const module_container_function_generator_1 = require("./module-container-function-generator");
7
- const module_instantiation_generator_1 = require("./module-instantiation-generator");
8
- const container_aggregator_1 = require("./container-aggregator");
9
6
  /**
10
7
  * Generator for modular container structure.
11
8
  * Handles module-based dependency injection with inter-module dependencies.
12
9
  */
13
10
  class ModularContainerGenerator extends base_container_generator_1.BaseContainerGenerator {
14
- constructor(fileWriter, moduleGroupedClasses, moduleDependencyResolver, importGenerator) {
11
+ constructor(fileWriter, moduleGroupedClasses, moduleDependencyResolver, importGenerator, moduleContainerFunctionGenerator, moduleInstantiationGenerator, containerAggregator) {
15
12
  super(fileWriter, importGenerator);
16
13
  this.moduleGroupedClasses = moduleGroupedClasses;
17
14
  this.moduleDependencyResolver = moduleDependencyResolver;
18
- this.moduleContainerFunctionGenerator = new module_container_function_generator_1.ModuleContainerFunctionGenerator(moduleGroupedClasses);
19
- this.moduleInstantiationGenerator = new module_instantiation_generator_1.ModuleInstantiationGenerator(moduleGroupedClasses);
20
- this.containerAggregator = new container_aggregator_1.ContainerAggregator();
15
+ this.moduleContainerFunctionGenerator = moduleContainerFunctionGenerator;
16
+ this.moduleInstantiationGenerator = moduleInstantiationGenerator;
17
+ this.containerAggregator = containerAggregator;
21
18
  }
22
19
  generate() {
23
20
  // First, check for module-level cycles
@@ -1 +1 @@
1
- {"version":3,"file":"modular-container-generator.js","sourceRoot":"","sources":["../../../src/generator/modular/modular-container-generator.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"modular-container-generator.js","sourceRoot":"","sources":["../../../src/generator/modular/modular-container-generator.ts"],"names":[],"mappings":";;;AAAA,4EAAwE;AAIxE,0EAAqE;AAMrE;;;GAGG;AACH,MAAa,yBAA0B,SAAQ,iDAAsB;IAOnE,YACE,UAAsB,EACtB,oBAA8C,EAC9C,wBAAkD,EAClD,eAAgC,EAChC,gCAAkE,EAClE,4BAA0D,EAC1D,mBAAwC;QAExC,KAAK,CAAC,UAAU,EAAE,eAAe,CAAC,CAAC;QACnC,IAAI,CAAC,oBAAoB,GAAG,oBAAoB,CAAC;QACjD,IAAI,CAAC,wBAAwB,GAAG,wBAAwB,CAAC;QACzD,IAAI,CAAC,gCAAgC,GAAG,gCAAgC,CAAC;QACzE,IAAI,CAAC,4BAA4B,GAAG,4BAA4B,CAAC;QACjE,IAAI,CAAC,mBAAmB,GAAG,mBAAmB,CAAC;IACjD,CAAC;IAED,QAAQ;QACN,uCAAuC;QACvC,MAAM,YAAY,GAAG,IAAI,CAAC,wBAAwB,CAAC,OAAO,EAAE,CAAC;QAE7D,IAAI,YAAY,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACnC,MAAM,IAAI,KAAK,CAAC,mDAAmD,IAAI,CAAC,SAAS,CAAC,YAAY,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;QAC5G,CAAC;QAED,2DAA2D;QAC3D,MAAM,UAAU,GAAG,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,oBAAoB,CAAC,MAAM,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC;QACzE,MAAM,kBAAkB,GAAG,IAAI,wCAAkB,CAAC,UAAU,CAAC,CAAC;QAC9D,MAAM,UAAU,GAAG,kBAAkB,CAAC,OAAO,EAAE,CAAC;QAEhD,IAAI,UAAU,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACjC,MAAM,IAAI,KAAK,CAAC,kDAAkD,IAAI,CAAC,SAAS,CAAC,UAAU,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;QACzG,CAAC;QAED,MAAM,aAAa,GAAG,IAAI,CAAC,qBAAqB,CAAC,YAAY,CAAC,aAAa,EAAE,YAAY,CAAC,kBAAkB,CAAC,CAAC;QAC9G,IAAI,CAAC,cAAc,CAAC,aAAa,CAAC,CAAC;IACrC,CAAC;IAES,qBAAqB,CAAC,aAAwB,EAAE,kBAA6C;QACrG,IAAI,CAAC,aAAa,IAAI,CAAC,kBAAkB,EAAE,CAAC;YAC1C,MAAM,YAAY,GAAG,IAAI,CAAC,wBAAwB,CAAC,OAAO,EAAE,CAAC;YAC7D,aAAa,GAAG,YAAY,CAAC,aAAa,CAAC;YAC3C,kBAAkB,GAAG,YAAY,CAAC,kBAAkB,CAAC;QACvD,CAAC;QAED,MAAM,OAAO,GAAG,IAAI,CAAC,eAAe,CAAC,eAAe,EAAE,CAAC;QACvD,MAAM,gBAAgB,GAAG,IAAI,CAAC,wBAAwB,CAAC,aAAa,EAAE,kBAAkB,CAAC,CAAC;QAC1F,MAAM,mBAAmB,GAAG,IAAI,CAAC,mBAAmB,CAAC,2BAA2B,CAAC,aAAa,CAAC,CAAC;QAChG,MAAM,UAAU,GAAG,IAAI,CAAC,mBAAmB,CAAC,yBAAyB,EAAE,CAAC;QAExE,OAAO,GAAG,OAAO,OAAO,gBAAgB,OAAO,mBAAmB,OAAO,UAAU,IAAI,CAAC;IAC1F,CAAC;IAEO,wBAAwB,CAAC,aAAuB,EAAE,kBAA4C;QACpG,MAAM,wBAAwB,GAAG,IAAI,CAAC,gCAAgC,CAAC,gCAAgC,CAAC,aAAa,EAAE,kBAAkB,CAAC,CAAC;QAC3I,MAAM,oBAAoB,GAAG,IAAI,CAAC,4BAA4B,CAAC,4BAA4B,CAAC,aAAa,EAAE,kBAAkB,CAAC,CAAC;QAE/H,OAAO,wBAAwB,CAAC,IAAI,CAAC,MAAM,CAAC,GAAG,MAAM,GAAG,oBAAoB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAC1F,CAAC;CAKF;AAtED,8DAsEC"}
@@ -1,11 +1,18 @@
1
1
  import { ClassInfo } from '../../types';
2
+ import { ModuleFunctionSignatureGenerator } from './module-function-signature-generator';
3
+ import { ModuleDependencyResolver } from './module-dependency-resolver';
4
+ import { ModuleFunctionBodyGenerator } from './module-function-body-generator';
2
5
  /**
3
- * Responsible for generating module container functions.
4
- * Handles the creation of container functions for each module.
6
+ * Coordinates the generation of module container functions.
7
+ * Delegates specific responsibilities to specialized generators.
5
8
  */
6
9
  export declare class ModuleContainerFunctionGenerator {
7
10
  private moduleGroupedClasses;
8
- constructor(moduleGroupedClasses: Map<string, ClassInfo[]>);
11
+ private signatureGenerator;
12
+ private dependencyResolver;
13
+ private bodyGenerator;
14
+ private importGenerator;
15
+ constructor(moduleGroupedClasses: Map<string, ClassInfo[]>, signatureGenerator: ModuleFunctionSignatureGenerator, dependencyResolver: ModuleDependencyResolver, bodyGenerator: ModuleFunctionBodyGenerator, importGenerator: any);
9
16
  /**
10
17
  * Generates container functions for all modules.
11
18
  */
@@ -14,65 +21,5 @@ export declare class ModuleContainerFunctionGenerator {
14
21
  * Creates a container function for a specific module.
15
22
  */
16
23
  private createModuleContainerFunction;
17
- /**
18
- * Generates function parameters for module dependencies.
19
- */
20
- private generateFunctionParameters;
21
- /**
22
- * Creates a function signature with parameters.
23
- */
24
- private createFunctionSignature;
25
- /**
26
- * Generates the function body for a module container.
27
- */
28
- private generateModuleFunctionBody;
29
- /**
30
- * Generates factory functions for transient classes.
31
- */
32
- private generateTransientFactories;
33
- /**
34
- * Generates singleton variable declarations.
35
- */
36
- private generateSingletonVariables;
37
- /**
38
- * Generates getter functions for singleton classes.
39
- */
40
- private generateSingletonGetters;
41
- /**
42
- * Creates a getter function for a singleton class.
43
- */
44
- private createSingletonGetter;
45
- /**
46
- * Builds constructor arguments for a class.
47
- */
48
- private buildConstructorArguments;
49
- /**
50
- * Resolves a dependency argument.
51
- */
52
- private resolveDependencyArgument;
53
- /**
54
- * Finds a dependency from an external module.
55
- */
56
- private findExternalModuleDependency;
57
- /**
58
- * Finds a dependency from the same module.
59
- */
60
- private findInternalModuleDependency;
61
- /**
62
- * Generates module exports.
63
- */
64
- private generateModuleExports;
65
- /**
66
- * Creates a module export getter.
67
- */
68
- private createModuleExportGetter;
69
- /**
70
- * Sorts classes by their dependencies.
71
- */
72
- private sortClassesByDependencies;
73
- /**
74
- * Utility method to convert strings to camelCase.
75
- */
76
- private camelCase;
77
24
  }
78
25
  //# sourceMappingURL=module-container-function-generator.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"module-container-function-generator.d.ts","sourceRoot":"","sources":["../../../src/generator/modular/module-container-function-generator.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAGxC;;;GAGG;AACH,qBAAa,gCAAgC;IAC3C,OAAO,CAAC,oBAAoB,CAA2B;gBAE3C,oBAAoB,EAAE,GAAG,CAAC,MAAM,EAAE,SAAS,EAAE,CAAC;IAI1D;;OAEG;IACH,gCAAgC,CAAC,aAAa,EAAE,MAAM,EAAE,EAAE,kBAAkB,EAAE,GAAG,CAAC,MAAM,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC,GAAG,MAAM,EAAE;IAcjH;;OAEG;IACH,OAAO,CAAC,6BAA6B;IAWrC;;OAEG;IACH,OAAO,CAAC,0BAA0B;IAWlC;;OAEG;IACH,OAAO,CAAC,uBAAuB;IAM/B;;OAEG;IACH,OAAO,CAAC,0BAA0B;IAqBlC;;OAEG;IACH,OAAO,CAAC,0BAA0B;IAclC;;OAEG;IACH,OAAO,CAAC,0BAA0B;IAalC;;OAEG;IACH,OAAO,CAAC,wBAAwB;IAahC;;OAEG;IACH,OAAO,CAAC,qBAAqB;IAY7B;;OAEG;IACH,OAAO,CAAC,yBAAyB;IAajC;;OAEG;IACH,OAAO,CAAC,yBAAyB;IAWjC;;OAEG;IACH,OAAO,CAAC,4BAA4B;IAcpC;;OAEG;IACH,OAAO,CAAC,4BAA4B;IAcpC;;OAEG;IACH,OAAO,CAAC,qBAAqB;IAa7B;;OAEG;IACH,OAAO,CAAC,wBAAwB;IAYhC;;OAEG;IACH,OAAO,CAAC,yBAAyB;IA0BjC;;OAEG;IACH,OAAO,CAAC,SAAS;CAGlB"}
1
+ {"version":3,"file":"module-container-function-generator.d.ts","sourceRoot":"","sources":["../../../src/generator/modular/module-container-function-generator.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AACxC,OAAO,EAAE,gCAAgC,EAAE,MAAM,uCAAuC,CAAC;AACzF,OAAO,EAAE,wBAAwB,EAAE,MAAM,8BAA8B,CAAC;AACxE,OAAO,EAAE,2BAA2B,EAAE,MAAM,kCAAkC,CAAC;AAE/E;;;GAGG;AACH,qBAAa,gCAAgC;IAC3C,OAAO,CAAC,oBAAoB,CAA2B;IACvD,OAAO,CAAC,kBAAkB,CAAmC;IAC7D,OAAO,CAAC,kBAAkB,CAA2B;IACrD,OAAO,CAAC,aAAa,CAA8B;IACnD,OAAO,CAAC,eAAe,CAAM;gBAG3B,oBAAoB,EAAE,GAAG,CAAC,MAAM,EAAE,SAAS,EAAE,CAAC,EAC9C,kBAAkB,EAAE,gCAAgC,EACpD,kBAAkB,EAAE,wBAAwB,EAC5C,aAAa,EAAE,2BAA2B,EAC1C,eAAe,EAAE,GAAG;IAStB;;OAEG;IACH,gCAAgC,CAAC,aAAa,EAAE,MAAM,EAAE,EAAE,kBAAkB,EAAE,GAAG,CAAC,MAAM,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC,GAAG,MAAM,EAAE;IAcjH;;OAEG;IACH,OAAO,CAAC,6BAA6B;CAYtC"}
@@ -1,14 +1,17 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.ModuleContainerFunctionGenerator = void 0;
4
- const topological_sorter_1 = require("../../utils/topological-sorter");
5
4
  /**
6
- * Responsible for generating module container functions.
7
- * Handles the creation of container functions for each module.
5
+ * Coordinates the generation of module container functions.
6
+ * Delegates specific responsibilities to specialized generators.
8
7
  */
9
8
  class ModuleContainerFunctionGenerator {
10
- constructor(moduleGroupedClasses) {
9
+ constructor(moduleGroupedClasses, signatureGenerator, dependencyResolver, bodyGenerator, importGenerator) {
11
10
  this.moduleGroupedClasses = moduleGroupedClasses;
11
+ this.signatureGenerator = signatureGenerator;
12
+ this.dependencyResolver = dependencyResolver;
13
+ this.bodyGenerator = bodyGenerator;
14
+ this.importGenerator = importGenerator;
12
15
  }
13
16
  /**
14
17
  * Generates container functions for all modules.
@@ -30,217 +33,11 @@ class ModuleContainerFunctionGenerator {
30
33
  createModuleContainerFunction(moduleName, moduleClasses, moduleDependencies) {
31
34
  const moduleFunctionName = `create${moduleName}Container`;
32
35
  const moduleDeps = moduleDependencies.get(moduleName) || new Set();
33
- const functionParams = this.generateFunctionParameters(moduleDeps);
34
- const functionSignature = this.createFunctionSignature(moduleFunctionName, functionParams);
35
- const functionBody = this.generateModuleFunctionBody(moduleClasses, moduleDeps);
36
+ const functionParams = this.signatureGenerator.generateFunctionParameters(moduleDeps);
37
+ const functionSignature = this.signatureGenerator.createFunctionSignature(moduleFunctionName, functionParams);
38
+ const functionBody = this.bodyGenerator.generateModuleFunctionBody(moduleClasses, moduleDeps, this.importGenerator);
36
39
  return `${functionSignature} {\n${functionBody}\n}`;
37
40
  }
38
- /**
39
- * Generates function parameters for module dependencies.
40
- */
41
- generateFunctionParameters(moduleDeps) {
42
- const functionParams = [];
43
- for (const depModule of moduleDeps) {
44
- const depVarName = this.camelCase(depModule) + 'Container';
45
- functionParams.push(`${depVarName}: ReturnType<typeof create${depModule}Container>`);
46
- }
47
- return functionParams;
48
- }
49
- /**
50
- * Creates a function signature with parameters.
51
- */
52
- createFunctionSignature(functionName, params) {
53
- return params.length > 0 ?
54
- `function ${functionName}(${params.join(', ')})` :
55
- `function ${functionName}()`;
56
- }
57
- /**
58
- * Generates the function body for a module container.
59
- */
60
- generateModuleFunctionBody(moduleClasses, moduleDeps) {
61
- const factoryFunctions = this.generateTransientFactories(moduleClasses);
62
- const lazyInitializations = this.generateSingletonVariables(moduleClasses);
63
- const lazyGetters = this.generateSingletonGetters(moduleClasses, moduleDeps);
64
- const moduleExports = this.generateModuleExports(moduleClasses);
65
- const returnObject = moduleExports.length > 0 ?
66
- ` return {\n${moduleExports.join(',\n')}\n };` :
67
- ' return {};';
68
- return [
69
- ...factoryFunctions,
70
- '',
71
- ...lazyInitializations,
72
- '',
73
- ...lazyGetters,
74
- '',
75
- returnObject
76
- ].filter(line => line !== '' || factoryFunctions.length > 0 || lazyInitializations.length > 0 || lazyGetters.length > 0).join('\n');
77
- }
78
- /**
79
- * Generates factory functions for transient classes.
80
- */
81
- generateTransientFactories(moduleClasses) {
82
- const factoryFunctions = [];
83
- for (const classInfo of moduleClasses) {
84
- if (classInfo.scope === 'transient') {
85
- const instanceName = this.camelCase(classInfo.name);
86
- const factoryName = `${instanceName}Factory`;
87
- factoryFunctions.push(` const ${factoryName} = (): ${classInfo.name} => new ${classInfo.name}();`);
88
- }
89
- }
90
- return factoryFunctions;
91
- }
92
- /**
93
- * Generates singleton variable declarations.
94
- */
95
- generateSingletonVariables(moduleClasses) {
96
- const singletonClasses = moduleClasses.filter(c => c.scope !== 'transient');
97
- const sortedSingletons = this.sortClassesByDependencies(singletonClasses, moduleClasses);
98
- const lazyInitializations = [];
99
- for (const classInfo of sortedSingletons) {
100
- const instanceName = this.camelCase(classInfo.name);
101
- lazyInitializations.push(` let ${instanceName}: ${classInfo.name} | undefined;`);
102
- }
103
- return lazyInitializations;
104
- }
105
- /**
106
- * Generates getter functions for singleton classes.
107
- */
108
- generateSingletonGetters(moduleClasses, moduleDeps) {
109
- const singletonClasses = moduleClasses.filter(c => c.scope !== 'transient');
110
- const sortedSingletons = this.sortClassesByDependencies(singletonClasses, moduleClasses);
111
- const lazyGetters = [];
112
- for (const classInfo of sortedSingletons) {
113
- const lazyGetter = this.createSingletonGetter(classInfo, moduleClasses, moduleDeps);
114
- lazyGetters.push(lazyGetter);
115
- }
116
- return lazyGetters;
117
- }
118
- /**
119
- * Creates a getter function for a singleton class.
120
- */
121
- createSingletonGetter(classInfo, moduleClasses, moduleDeps) {
122
- const instanceName = this.camelCase(classInfo.name);
123
- const getterName = `get${classInfo.name}`;
124
- const constructorArgs = this.buildConstructorArguments(classInfo, moduleClasses, moduleDeps);
125
- const instantiation = constructorArgs.length > 0 ?
126
- `new ${classInfo.name}(${constructorArgs.join(', ')})` :
127
- `new ${classInfo.name}()`;
128
- return ` const ${getterName} = (): ${classInfo.name} => {\n if (!${instanceName}) {\n ${instanceName} = ${instantiation};\n }\n return ${instanceName};\n };`;
129
- }
130
- /**
131
- * Builds constructor arguments for a class.
132
- */
133
- buildConstructorArguments(classInfo, moduleClasses, moduleDeps) {
134
- const constructorArgs = [];
135
- for (const dep of classInfo.dependencies) {
136
- const arg = this.resolveDependencyArgument(dep, moduleClasses, moduleDeps);
137
- if (arg) {
138
- constructorArgs.push(arg);
139
- }
140
- }
141
- return constructorArgs;
142
- }
143
- /**
144
- * Resolves a dependency argument.
145
- */
146
- resolveDependencyArgument(dependency, moduleClasses, moduleDeps) {
147
- // Check if dependency is from another module
148
- const externalModuleArg = this.findExternalModuleDependency(dependency, moduleDeps);
149
- if (externalModuleArg) {
150
- return externalModuleArg;
151
- }
152
- // Check if dependency is from the same module
153
- return this.findInternalModuleDependency(dependency, moduleClasses);
154
- }
155
- /**
156
- * Finds a dependency from an external module.
157
- */
158
- findExternalModuleDependency(dependency, moduleDeps) {
159
- for (const depModule of moduleDeps) {
160
- const depModuleClasses = this.moduleGroupedClasses.get(depModule);
161
- if (depModuleClasses) {
162
- const depClass = depModuleClasses.find(c => c.interfaceName === dependency);
163
- if (depClass) {
164
- const depModuleVarName = this.camelCase(depModule) + 'Container';
165
- return `${depModuleVarName}.${dependency}`;
166
- }
167
- }
168
- }
169
- return null;
170
- }
171
- /**
172
- * Finds a dependency from the same module.
173
- */
174
- findInternalModuleDependency(dependency, moduleClasses) {
175
- const depClass = moduleClasses.find(c => c.interfaceName === dependency);
176
- if (depClass) {
177
- if (depClass.scope === 'transient') {
178
- const depInstanceName = this.camelCase(depClass.name);
179
- return `${depInstanceName}Factory()`;
180
- }
181
- else {
182
- const depGetterName = `get${depClass.name}`;
183
- return `${depGetterName}()`;
184
- }
185
- }
186
- return null;
187
- }
188
- /**
189
- * Generates module exports.
190
- */
191
- generateModuleExports(moduleClasses) {
192
- const moduleExports = [];
193
- for (const classInfo of moduleClasses) {
194
- if (classInfo.interfaceName) {
195
- const exportGetter = this.createModuleExportGetter(classInfo);
196
- moduleExports.push(exportGetter);
197
- }
198
- }
199
- return moduleExports;
200
- }
201
- /**
202
- * Creates a module export getter.
203
- */
204
- createModuleExportGetter(classInfo) {
205
- const instanceName = this.camelCase(classInfo.name);
206
- const isTransient = classInfo.scope === 'transient';
207
- if (isTransient) {
208
- return ` get ${classInfo.interfaceName}(): ${classInfo.name} {\n return ${instanceName}Factory();\n }`;
209
- }
210
- else {
211
- const getterName = `get${classInfo.name}`;
212
- return ` get ${classInfo.interfaceName}(): ${classInfo.name} {\n return ${getterName}();\n }`;
213
- }
214
- }
215
- /**
216
- * Sorts classes by their dependencies.
217
- */
218
- sortClassesByDependencies(classes, allModuleClasses) {
219
- // Build dependency graph for classes within the module
220
- const dependencyGraph = new Map();
221
- for (const classInfo of classes) {
222
- const dependencies = [];
223
- // Only include dependencies that are within the same module and are singletons
224
- for (const dep of classInfo.dependencies) {
225
- const depClass = allModuleClasses.find(c => c.interfaceName === dep && c.scope !== 'transient');
226
- if (depClass && classes.includes(depClass)) {
227
- dependencies.push(depClass.name);
228
- }
229
- }
230
- dependencyGraph.set(classInfo.name, dependencies);
231
- }
232
- // Use TopologicalSorter to sort the classes
233
- const sortResult = topological_sorter_1.TopologicalSorter.sort(dependencyGraph);
234
- // Map sorted class names back to ClassInfo objects
235
- const classMap = new Map(classes.map(c => [c.name, c]));
236
- return sortResult.sorted.map(className => classMap.get(className)).filter(Boolean);
237
- }
238
- /**
239
- * Utility method to convert strings to camelCase.
240
- */
241
- camelCase(str) {
242
- return str.charAt(0).toLowerCase() + str.slice(1).replace(/[^a-zA-Z0-9]/g, '');
243
- }
244
41
  }
245
42
  exports.ModuleContainerFunctionGenerator = ModuleContainerFunctionGenerator;
246
43
  //# sourceMappingURL=module-container-function-generator.js.map