@notjustcoders/ioc-arise 1.0.5 → 1.0.8

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 (141) hide show
  1. package/dist/__tests__/generator/container-generator.test.js +1 -1
  2. package/dist/__tests__/generator/container-generator.test.js.map +1 -1
  3. package/dist/__tests__/generator/dependency-resolver.test.js +1 -1
  4. package/dist/__tests__/generator/dependency-resolver.test.js.map +1 -1
  5. package/dist/__tests__/generator/instantiation-generator.test.js +1 -1
  6. package/dist/__tests__/generator/instantiation-generator.test.js.map +1 -1
  7. package/dist/commands/generate.d.ts.map +1 -1
  8. package/dist/commands/generate.js +2 -8
  9. package/dist/commands/generate.js.map +1 -1
  10. package/dist/container.gen.d.ts +18 -0
  11. package/dist/container.gen.d.ts.map +1 -0
  12. package/dist/container.gen.js +88 -0
  13. package/dist/container.gen.js.map +1 -0
  14. package/dist/generator/base-container-code-generator.d.ts +15 -0
  15. package/dist/generator/base-container-code-generator.d.ts.map +1 -0
  16. package/dist/generator/base-container-code-generator.js +23 -0
  17. package/dist/generator/base-container-code-generator.js.map +1 -0
  18. package/dist/generator/base-container-generator.d.ts +1 -1
  19. package/dist/generator/base-container-generator.d.ts.map +1 -1
  20. package/dist/generator/base-container-generator.js +2 -3
  21. package/dist/generator/base-container-generator.js.map +1 -1
  22. package/dist/generator/base-dependency-resolver.d.ts +26 -0
  23. package/dist/generator/base-dependency-resolver.d.ts.map +1 -0
  24. package/dist/generator/base-dependency-resolver.js +72 -0
  25. package/dist/generator/base-dependency-resolver.js.map +1 -0
  26. package/dist/generator/base-instantiation-generator.d.ts +55 -0
  27. package/dist/generator/base-instantiation-generator.d.ts.map +1 -0
  28. package/dist/generator/base-instantiation-generator.js +117 -0
  29. package/dist/generator/base-instantiation-generator.js.map +1 -0
  30. package/dist/generator/container-generator-factory.d.ts +2 -2
  31. package/dist/generator/container-generator-factory.d.ts.map +1 -1
  32. package/dist/generator/container-generator-factory.js +22 -26
  33. package/dist/generator/container-generator-factory.js.map +1 -1
  34. package/dist/generator/duplicate-import-resolver.d.ts +44 -0
  35. package/dist/generator/duplicate-import-resolver.d.ts.map +1 -0
  36. package/dist/generator/duplicate-import-resolver.js +162 -0
  37. package/dist/generator/duplicate-import-resolver.js.map +1 -0
  38. package/dist/generator/flat/container-generator.d.ts +8 -0
  39. package/dist/generator/flat/container-generator.d.ts.map +1 -0
  40. package/dist/generator/flat/container-generator.js +17 -0
  41. package/dist/generator/flat/container-generator.js.map +1 -0
  42. package/dist/generator/flat/dependency-resolver.d.ts +8 -0
  43. package/dist/generator/flat/dependency-resolver.d.ts.map +1 -0
  44. package/dist/generator/flat/dependency-resolver.js +43 -0
  45. package/dist/generator/flat/dependency-resolver.js.map +1 -0
  46. package/dist/generator/flat/flat-container-generator.d.ts +25 -0
  47. package/dist/generator/flat/flat-container-generator.d.ts.map +1 -0
  48. package/dist/generator/flat/flat-container-generator.js +44 -0
  49. package/dist/generator/flat/flat-container-generator.js.map +1 -0
  50. package/dist/generator/flat/instantiation-generator.d.ts +24 -0
  51. package/dist/generator/flat/instantiation-generator.d.ts.map +1 -0
  52. package/dist/generator/flat/instantiation-generator.js +125 -0
  53. package/dist/generator/flat/instantiation-generator.js.map +1 -0
  54. package/dist/generator/flat-container-generator.d.ts +2 -1
  55. package/dist/generator/flat-container-generator.d.ts.map +1 -1
  56. package/dist/generator/flat-container-generator.js +2 -2
  57. package/dist/generator/flat-container-generator.js.map +1 -1
  58. package/dist/generator/import-generator.d.ts.map +1 -1
  59. package/dist/generator/import-generator.js +2 -4
  60. package/dist/generator/import-generator.js.map +1 -1
  61. package/dist/generator/index.d.ts +2 -3
  62. package/dist/generator/index.d.ts.map +1 -1
  63. package/dist/generator/index.js +2 -4
  64. package/dist/generator/index.js.map +1 -1
  65. package/dist/generator/instantiation-generator.d.ts +13 -0
  66. package/dist/generator/instantiation-generator.d.ts.map +1 -1
  67. package/dist/generator/instantiation-generator.js +96 -133
  68. package/dist/generator/instantiation-generator.js.map +1 -1
  69. package/dist/generator/modular/class-sorter.d.ts +17 -0
  70. package/dist/generator/modular/class-sorter.d.ts.map +1 -0
  71. package/dist/generator/modular/class-sorter.js +40 -0
  72. package/dist/generator/modular/class-sorter.js.map +1 -0
  73. package/dist/generator/modular/container-aggregator.d.ts +11 -0
  74. package/dist/generator/modular/container-aggregator.d.ts.map +1 -0
  75. package/dist/generator/modular/container-aggregator.js +23 -0
  76. package/dist/generator/modular/container-aggregator.js.map +1 -0
  77. package/dist/generator/modular/index.d.ts +5 -0
  78. package/dist/generator/modular/index.d.ts.map +1 -0
  79. package/dist/generator/modular/index.js +21 -0
  80. package/dist/generator/modular/index.js.map +1 -0
  81. package/dist/generator/modular/modular-container-code-generator.d.ts +65 -0
  82. package/dist/generator/modular/modular-container-code-generator.d.ts.map +1 -0
  83. package/dist/generator/modular/modular-container-code-generator.js +157 -0
  84. package/dist/generator/modular/modular-container-code-generator.js.map +1 -0
  85. package/dist/generator/modular/modular-container-generator.d.ts +24 -0
  86. package/dist/generator/modular/modular-container-generator.d.ts.map +1 -0
  87. package/dist/generator/modular/modular-container-generator.js +54 -0
  88. package/dist/generator/modular/modular-container-generator.js.map +1 -0
  89. package/dist/generator/modular/module-container-function-generator.d.ts +24 -0
  90. package/dist/generator/modular/module-container-function-generator.d.ts.map +1 -0
  91. package/dist/generator/modular/module-container-function-generator.js +42 -0
  92. package/dist/generator/modular/module-container-function-generator.js.map +1 -0
  93. package/dist/generator/modular/module-dependency-resolver.d.ts +22 -0
  94. package/dist/generator/modular/module-dependency-resolver.d.ts.map +1 -0
  95. package/dist/generator/modular/module-dependency-resolver.js +56 -0
  96. package/dist/generator/modular/module-dependency-resolver.js.map +1 -0
  97. package/dist/generator/modular/module-export-generator.d.ts +42 -0
  98. package/dist/generator/modular/module-export-generator.d.ts.map +1 -0
  99. package/dist/generator/modular/module-export-generator.js +82 -0
  100. package/dist/generator/modular/module-export-generator.js.map +1 -0
  101. package/dist/generator/modular/module-function-body-generator.d.ts +15 -0
  102. package/dist/generator/modular/module-function-body-generator.d.ts.map +1 -0
  103. package/dist/generator/modular/module-function-body-generator.js +25 -0
  104. package/dist/generator/modular/module-function-body-generator.js.map +1 -0
  105. package/dist/generator/modular/module-function-signature-generator.d.ts +15 -0
  106. package/dist/generator/modular/module-function-signature-generator.d.ts.map +1 -0
  107. package/dist/generator/modular/module-function-signature-generator.js +24 -0
  108. package/dist/generator/modular/module-function-signature-generator.js.map +1 -0
  109. package/dist/generator/modular/module-instantiation-generator.d.ts +12 -0
  110. package/dist/generator/modular/module-instantiation-generator.d.ts.map +1 -0
  111. package/dist/generator/modular/module-instantiation-generator.js +26 -0
  112. package/dist/generator/modular/module-instantiation-generator.js.map +1 -0
  113. package/dist/generator/modular/module-scope-generator.d.ts +47 -0
  114. package/dist/generator/modular/module-scope-generator.d.ts.map +1 -0
  115. package/dist/generator/modular/module-scope-generator.js +111 -0
  116. package/dist/generator/modular/module-scope-generator.js.map +1 -0
  117. package/dist/generator/modular/refactored-modular-container-generator.d.ts +38 -0
  118. package/dist/generator/modular/refactored-modular-container-generator.d.ts.map +1 -0
  119. package/dist/generator/modular/refactored-modular-container-generator.js +73 -0
  120. package/dist/generator/modular/refactored-modular-container-generator.js.map +1 -0
  121. package/dist/generator/modular-container-generator.d.ts +5 -4
  122. package/dist/generator/modular-container-generator.d.ts.map +1 -1
  123. package/dist/generator/modular-container-generator.js +13 -171
  124. package/dist/generator/modular-container-generator.js.map +1 -1
  125. package/dist/generator/module-container-function-generator.d.ts +30 -0
  126. package/dist/generator/module-container-function-generator.d.ts.map +1 -0
  127. package/dist/generator/module-container-function-generator.js +199 -0
  128. package/dist/generator/module-container-function-generator.js.map +1 -0
  129. package/dist/generator/shared/dependency-resolver-utils.d.ts +28 -0
  130. package/dist/generator/shared/dependency-resolver-utils.d.ts.map +1 -0
  131. package/dist/generator/shared/dependency-resolver-utils.js +67 -0
  132. package/dist/generator/shared/dependency-resolver-utils.js.map +1 -0
  133. package/dist/generator/shared/index.d.ts +2 -0
  134. package/dist/generator/shared/index.d.ts.map +1 -0
  135. package/dist/generator/shared/index.js +18 -0
  136. package/dist/generator/shared/index.js.map +1 -0
  137. package/dist/generator/shared/instantiation-utils.d.ts +236 -0
  138. package/dist/generator/shared/instantiation-utils.d.ts.map +1 -0
  139. package/dist/generator/shared/instantiation-utils.js +499 -0
  140. package/dist/generator/shared/instantiation-utils.js.map +1 -0
  141. package/package.json +1 -1
@@ -0,0 +1,17 @@
1
+ import { ClassInfo } from '../../types';
2
+ /**
3
+ * Utility class for sorting classes by their dependencies within modules.
4
+ * Handles topological sorting to ensure proper instantiation order.
5
+ */
6
+ export declare class ClassSorter {
7
+ /**
8
+ * Sorts classes by their dependencies to ensure proper instantiation order.
9
+ * Only considers dependencies that are within the same module and are singletons.
10
+ *
11
+ * @param classes - Classes to sort
12
+ * @param allModuleClasses - All classes in the module for dependency lookup
13
+ * @returns Sorted array of ClassInfo objects
14
+ */
15
+ static sortClassesByDependencies(classes: ClassInfo[], allModuleClasses: ClassInfo[]): ClassInfo[];
16
+ }
17
+ //# sourceMappingURL=class-sorter.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"class-sorter.d.ts","sourceRoot":"","sources":["../../../src/generator/modular/class-sorter.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAGxC;;;GAGG;AACH,qBAAa,WAAW;IACtB;;;;;;;OAOG;IACH,MAAM,CAAC,yBAAyB,CAAC,OAAO,EAAE,SAAS,EAAE,EAAE,gBAAgB,EAAE,SAAS,EAAE,GAAG,SAAS,EAAE;CAyBnG"}
@@ -0,0 +1,40 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.ClassSorter = void 0;
4
+ const topological_sorter_1 = require("../../utils/topological-sorter");
5
+ /**
6
+ * Utility class for sorting classes by their dependencies within modules.
7
+ * Handles topological sorting to ensure proper instantiation order.
8
+ */
9
+ class ClassSorter {
10
+ /**
11
+ * Sorts classes by their dependencies to ensure proper instantiation order.
12
+ * Only considers dependencies that are within the same module and are singletons.
13
+ *
14
+ * @param classes - Classes to sort
15
+ * @param allModuleClasses - All classes in the module for dependency lookup
16
+ * @returns Sorted array of ClassInfo objects
17
+ */
18
+ static sortClassesByDependencies(classes, allModuleClasses) {
19
+ // Build dependency graph for classes within the module
20
+ const dependencyGraph = new Map();
21
+ for (const classInfo of classes) {
22
+ const dependencies = [];
23
+ // Only include dependencies that are within the same module and are singletons
24
+ for (const dep of classInfo.dependencies) {
25
+ const depClass = allModuleClasses.find(c => c.interfaceName === dep && c.scope !== 'transient');
26
+ if (depClass && classes.includes(depClass)) {
27
+ dependencies.push(depClass.name);
28
+ }
29
+ }
30
+ dependencyGraph.set(classInfo.name, dependencies);
31
+ }
32
+ // Use TopologicalSorter to sort the classes
33
+ const sortResult = topological_sorter_1.TopologicalSorter.sort(dependencyGraph);
34
+ // Map sorted class names back to ClassInfo objects
35
+ const classMap = new Map(classes.map(c => [c.name, c]));
36
+ return sortResult.sorted.map(className => classMap.get(className)).filter(Boolean);
37
+ }
38
+ }
39
+ exports.ClassSorter = ClassSorter;
40
+ //# sourceMappingURL=class-sorter.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"class-sorter.js","sourceRoot":"","sources":["../../../src/generator/modular/class-sorter.ts"],"names":[],"mappings":";;;AACA,uEAAmE;AAEnE;;;GAGG;AACH,MAAa,WAAW;IACtB;;;;;;;OAOG;IACH,MAAM,CAAC,yBAAyB,CAAC,OAAoB,EAAE,gBAA6B;QAClF,uDAAuD;QACvD,MAAM,eAAe,GAAG,IAAI,GAAG,EAAoB,CAAC;QAEpD,KAAK,MAAM,SAAS,IAAI,OAAO,EAAE,CAAC;YAChC,MAAM,YAAY,GAAa,EAAE,CAAC;YAElC,+EAA+E;YAC/E,KAAK,MAAM,GAAG,IAAI,SAAS,CAAC,YAAY,EAAE,CAAC;gBACzC,MAAM,QAAQ,GAAG,gBAAgB,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,aAAa,KAAK,GAAG,IAAI,CAAC,CAAC,KAAK,KAAK,WAAW,CAAC,CAAC;gBAChG,IAAI,QAAQ,IAAI,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAC,EAAE,CAAC;oBAC3C,YAAY,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;gBACnC,CAAC;YACH,CAAC;YAED,eAAe,CAAC,GAAG,CAAC,SAAS,CAAC,IAAI,EAAE,YAAY,CAAC,CAAC;QACpD,CAAC;QAED,4CAA4C;QAC5C,MAAM,UAAU,GAAG,sCAAiB,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC;QAE3D,mDAAmD;QACnD,MAAM,QAAQ,GAAG,IAAI,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;QACxD,OAAO,UAAU,CAAC,MAAM,CAAC,GAAG,CAAC,SAAS,CAAC,EAAE,CAAC,QAAQ,CAAC,GAAG,CAAC,SAAS,CAAE,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;IACtF,CAAC;CACF;AAlCD,kCAkCC"}
@@ -0,0 +1,11 @@
1
+ export declare class ContainerAggregator {
2
+ /**
3
+ * Generates the aggregated container code.
4
+ */
5
+ generateAggregatedContainer(sortedModules: string[]): string;
6
+ /**
7
+ * Generates the type export for the container.
8
+ */
9
+ generateModularTypeExport(): string;
10
+ }
11
+ //# sourceMappingURL=container-aggregator.d.ts.map
@@ -0,0 +1 @@
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"}
@@ -0,0 +1,23 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.ContainerAggregator = void 0;
4
+ /**
5
+ * Responsible for aggregating module containers into a single container.
6
+ */
7
+ const shared_1 = require("../shared");
8
+ class ContainerAggregator {
9
+ /**
10
+ * Generates the aggregated container code.
11
+ */
12
+ generateAggregatedContainer(sortedModules) {
13
+ return shared_1.InstantiationUtils.generateAggregatedContainer(sortedModules);
14
+ }
15
+ /**
16
+ * Generates the type export for the container.
17
+ */
18
+ generateModularTypeExport() {
19
+ return shared_1.InstantiationUtils.generateModularContainerTypeExport();
20
+ }
21
+ }
22
+ exports.ContainerAggregator = ContainerAggregator;
23
+ //# sourceMappingURL=container-aggregator.js.map
@@ -0,0 +1 @@
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"}
@@ -0,0 +1,5 @@
1
+ export * from './module-container-function-generator';
2
+ export * from './module-instantiation-generator';
3
+ export * from './container-aggregator';
4
+ export * from './modular-container-generator';
5
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/generator/modular/index.ts"],"names":[],"mappings":"AAAA,cAAc,uCAAuC,CAAC;AACtD,cAAc,kCAAkC,CAAC;AACjD,cAAc,wBAAwB,CAAC;AACvC,cAAc,+BAA+B,CAAC"}
@@ -0,0 +1,21 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __exportStar = (this && this.__exportStar) || function(m, exports) {
14
+ for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
15
+ };
16
+ Object.defineProperty(exports, "__esModule", { value: true });
17
+ __exportStar(require("./module-container-function-generator"), exports);
18
+ __exportStar(require("./module-instantiation-generator"), exports);
19
+ __exportStar(require("./container-aggregator"), exports);
20
+ __exportStar(require("./modular-container-generator"), exports);
21
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/generator/modular/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,wEAAsD;AACtD,mEAAiD;AACjD,yDAAuC;AACvC,gEAA8C"}
@@ -0,0 +1,65 @@
1
+ import { ClassInfo } from '../../types';
2
+ import { DependencyResolver } from '../dependency-resolver';
3
+ /**
4
+ * Generates the complete modular container code.
5
+ * Orchestrates the generation of module functions, aggregated container, and type exports.
6
+ */
7
+ export declare class ModularContainerCodeGenerator {
8
+ private camelCase;
9
+ private moduleContainerFunctionGenerator;
10
+ private moduleExportGenerator;
11
+ constructor(dependencyResolver: DependencyResolver, camelCase: (str: string) => string);
12
+ /**
13
+ * Generates the complete modular container code.
14
+ *
15
+ * @param moduleGroupedClasses - Map of module names to their classes
16
+ * @returns Generated container code
17
+ */
18
+ generateContainerCode(moduleGroupedClasses: Map<string, ClassInfo[]>): string;
19
+ /**
20
+ * Generates the aggregated container that combines all modules.
21
+ *
22
+ * @param moduleGroupedClasses - Map of module names to their classes
23
+ * @param allModuleClasses - All classes across all modules
24
+ * @returns Generated aggregated container code
25
+ */
26
+ private generateAggregatedContainer;
27
+ /**
28
+ * Generates module instantiations for the aggregated container.
29
+ *
30
+ * @param moduleGroupedClasses - Map of module names to their classes
31
+ * @param allModuleClasses - All classes across all modules
32
+ * @returns Generated module instantiation code
33
+ */
34
+ private generateModuleInstantiations;
35
+ /**
36
+ * Generates container properties that expose all module instances.
37
+ *
38
+ * @param moduleGroupedClasses - Map of module names to their classes
39
+ * @returns Generated container properties code
40
+ */
41
+ private generateContainerProperties;
42
+ /**
43
+ * Generates the modular type export for TypeScript support.
44
+ *
45
+ * @param moduleGroupedClasses - Map of module names to their classes
46
+ * @returns Generated type export code
47
+ */
48
+ private generateModularTypeExport;
49
+ /**
50
+ * Gets all classes from all modules.
51
+ *
52
+ * @param moduleGroupedClasses - Map of module names to their classes
53
+ * @returns Array of all classes
54
+ */
55
+ private getAllModuleClasses;
56
+ /**
57
+ * Gets external dependencies for a module.
58
+ *
59
+ * @param moduleClasses - Classes in the module
60
+ * @param allModuleClasses - All classes across all modules
61
+ * @returns Set of external dependency class names
62
+ */
63
+ private getModuleExternalDependencies;
64
+ }
65
+ //# sourceMappingURL=modular-container-code-generator.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"modular-container-code-generator.d.ts","sourceRoot":"","sources":["../../../src/generator/modular/modular-container-code-generator.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAGxC,OAAO,EAAE,kBAAkB,EAAE,MAAM,wBAAwB,CAAC;AAE5D;;;GAGG;AACH,qBAAa,6BAA6B;IAMtC,OAAO,CAAC,SAAS;IALnB,OAAO,CAAC,gCAAgC,CAAmC;IAC3E,OAAO,CAAC,qBAAqB,CAAwB;gBAGnD,kBAAkB,EAAE,kBAAkB,EAC9B,SAAS,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,MAAM;IAS5C;;;;;OAKG;IACH,qBAAqB,CAAC,oBAAoB,EAAE,GAAG,CAAC,MAAM,EAAE,SAAS,EAAE,CAAC,GAAG,MAAM;IAyB7E;;;;;;OAMG;IACH,OAAO,CAAC,2BAA2B;IAoBnC;;;;;;OAMG;IACH,OAAO,CAAC,4BAA4B;IA0CpC;;;;;OAKG;IACH,OAAO,CAAC,2BAA2B;IAcnC;;;;;OAKG;IACH,OAAO,CAAC,yBAAyB;IAcjC;;;;;OAKG;IACH,OAAO,CAAC,mBAAmB;IAQ3B;;;;;;OAMG;IACH,OAAO,CAAC,6BAA6B;CAoBtC"}
@@ -0,0 +1,157 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.ModularContainerCodeGenerator = void 0;
4
+ const module_container_function_generator_1 = require("./module-container-function-generator");
5
+ const module_export_generator_1 = require("./module-export-generator");
6
+ /**
7
+ * Generates the complete modular container code.
8
+ * Orchestrates the generation of module functions, aggregated container, and type exports.
9
+ */
10
+ class ModularContainerCodeGenerator {
11
+ constructor(dependencyResolver, camelCase) {
12
+ this.camelCase = camelCase;
13
+ this.moduleContainerFunctionGenerator = new module_container_function_generator_1.ModuleContainerFunctionGenerator(dependencyResolver, camelCase);
14
+ this.moduleExportGenerator = new module_export_generator_1.ModuleExportGenerator(camelCase);
15
+ }
16
+ /**
17
+ * Generates the complete modular container code.
18
+ *
19
+ * @param moduleGroupedClasses - Map of module names to their classes
20
+ * @returns Generated container code
21
+ */
22
+ generateContainerCode(moduleGroupedClasses) {
23
+ const allModuleClasses = this.getAllModuleClasses(moduleGroupedClasses);
24
+ const parts = [];
25
+ // Generate individual module functions
26
+ for (const [moduleName, classes] of moduleGroupedClasses) {
27
+ const moduleFunction = this.moduleContainerFunctionGenerator.generateModuleFunction(moduleName, classes, allModuleClasses);
28
+ parts.push(moduleFunction);
29
+ }
30
+ // Generate aggregated container
31
+ const aggregatedContainer = this.generateAggregatedContainer(moduleGroupedClasses, allModuleClasses);
32
+ parts.push(aggregatedContainer);
33
+ // Generate modular type export
34
+ const typeExport = this.generateModularTypeExport(moduleGroupedClasses);
35
+ parts.push(typeExport);
36
+ return parts.join('\n\n');
37
+ }
38
+ /**
39
+ * Generates the aggregated container that combines all modules.
40
+ *
41
+ * @param moduleGroupedClasses - Map of module names to their classes
42
+ * @param allModuleClasses - All classes across all modules
43
+ * @returns Generated aggregated container code
44
+ */
45
+ generateAggregatedContainer(moduleGroupedClasses, allModuleClasses) {
46
+ const moduleInstantiations = this.generateModuleInstantiations(moduleGroupedClasses, allModuleClasses);
47
+ const containerProperties = this.generateContainerProperties(moduleGroupedClasses);
48
+ return `function createContainer() {\n` +
49
+ `${moduleInstantiations}\n\n` +
50
+ ` return {\n` +
51
+ `${containerProperties}\n` +
52
+ ` };\n` +
53
+ `}\n\n` +
54
+ `export const container = createContainer();`;
55
+ }
56
+ /**
57
+ * Generates module instantiations for the aggregated container.
58
+ *
59
+ * @param moduleGroupedClasses - Map of module names to their classes
60
+ * @param allModuleClasses - All classes across all modules
61
+ * @returns Generated module instantiation code
62
+ */
63
+ generateModuleInstantiations(moduleGroupedClasses, allModuleClasses) {
64
+ const moduleNames = Array.from(moduleGroupedClasses.keys());
65
+ const instantiations = [];
66
+ // First pass: create modules without dependencies
67
+ const modulesWithoutDeps = moduleNames.filter(moduleName => {
68
+ const classes = moduleGroupedClasses.get(moduleName);
69
+ const externalDeps = this.getModuleExternalDependencies(classes, allModuleClasses);
70
+ return externalDeps.size === 0;
71
+ });
72
+ for (const moduleName of modulesWithoutDeps) {
73
+ const classes = moduleGroupedClasses.get(moduleName);
74
+ const instantiation = this.moduleExportGenerator.generateModuleInstantiation(moduleName, classes, allModuleClasses);
75
+ instantiations.push(instantiation);
76
+ }
77
+ // Second pass: create modules with dependencies
78
+ const modulesWithDeps = moduleNames.filter(moduleName => !modulesWithoutDeps.includes(moduleName));
79
+ for (const moduleName of modulesWithDeps) {
80
+ const classes = moduleGroupedClasses.get(moduleName);
81
+ const instantiation = this.moduleExportGenerator.generateModuleInstantiation(moduleName, classes, allModuleClasses);
82
+ instantiations.push(instantiation);
83
+ }
84
+ return instantiations.join('\n');
85
+ }
86
+ /**
87
+ * Generates container properties that expose all module instances.
88
+ *
89
+ * @param moduleGroupedClasses - Map of module names to their classes
90
+ * @returns Generated container properties code
91
+ */
92
+ generateContainerProperties(moduleGroupedClasses) {
93
+ const properties = [];
94
+ for (const [moduleName, classes] of moduleGroupedClasses) {
95
+ for (const classInfo of classes) {
96
+ const propertyName = this.camelCase(classInfo.name);
97
+ const moduleProperty = this.camelCase(moduleName);
98
+ properties.push(` get ${propertyName}() { return ${moduleProperty}Module.${propertyName}; }`);
99
+ }
100
+ }
101
+ return properties.join(',\n');
102
+ }
103
+ /**
104
+ * Generates the modular type export for TypeScript support.
105
+ *
106
+ * @param moduleGroupedClasses - Map of module names to their classes
107
+ * @returns Generated type export code
108
+ */
109
+ generateModularTypeExport(moduleGroupedClasses) {
110
+ const typeProperties = [];
111
+ for (const [, classes] of moduleGroupedClasses) {
112
+ for (const classInfo of classes) {
113
+ const propertyName = this.camelCase(classInfo.name);
114
+ const interfaceName = classInfo.interfaceName || classInfo.name;
115
+ typeProperties.push(` ${propertyName}: ${interfaceName};`);
116
+ }
117
+ }
118
+ return `export type ModularContainer = {\n${typeProperties.join('\n')}\n};`;
119
+ }
120
+ /**
121
+ * Gets all classes from all modules.
122
+ *
123
+ * @param moduleGroupedClasses - Map of module names to their classes
124
+ * @returns Array of all classes
125
+ */
126
+ getAllModuleClasses(moduleGroupedClasses) {
127
+ const allClasses = [];
128
+ for (const classes of moduleGroupedClasses.values()) {
129
+ allClasses.push(...classes);
130
+ }
131
+ return allClasses;
132
+ }
133
+ /**
134
+ * Gets external dependencies for a module.
135
+ *
136
+ * @param moduleClasses - Classes in the module
137
+ * @param allModuleClasses - All classes across all modules
138
+ * @returns Set of external dependency class names
139
+ */
140
+ getModuleExternalDependencies(moduleClasses, allModuleClasses) {
141
+ const externalDeps = new Set();
142
+ const currentModuleInterfaces = new Set(moduleClasses.map(c => c.interfaceName));
143
+ for (const classInfo of moduleClasses) {
144
+ for (const dep of classInfo.dependencies) {
145
+ if (!currentModuleInterfaces.has(dep)) {
146
+ const externalClass = allModuleClasses.find(c => c.interfaceName === dep);
147
+ if (externalClass) {
148
+ externalDeps.add(externalClass.name);
149
+ }
150
+ }
151
+ }
152
+ }
153
+ return externalDeps;
154
+ }
155
+ }
156
+ exports.ModularContainerCodeGenerator = ModularContainerCodeGenerator;
157
+ //# sourceMappingURL=modular-container-code-generator.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"modular-container-code-generator.js","sourceRoot":"","sources":["../../../src/generator/modular/modular-container-code-generator.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,24 @@
1
+ import { ModuleDependencyResolver } from '../../analyser/module-dependency-resolver';
2
+ import { ClassInfo } from '../../types';
3
+ import { ImportGenerator } from '../import-generator';
4
+ import { BaseContainerGenerator } from '../base-container-generator';
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';
9
+ /**
10
+ * Generator for modular container structure.
11
+ * Handles module-based dependency injection with inter-module dependencies.
12
+ */
13
+ export declare class ModularContainerGenerator extends BaseContainerGenerator {
14
+ private moduleGroupedClasses;
15
+ private moduleDependencyResolver;
16
+ private moduleContainerFunctionGenerator;
17
+ private moduleInstantiationGenerator;
18
+ private containerAggregator;
19
+ constructor(fileWriter: FileWriter, moduleGroupedClasses: Map<string, ClassInfo[]>, moduleDependencyResolver: ModuleDependencyResolver, importGenerator: ImportGenerator, moduleContainerFunctionGenerator: ModuleContainerFunctionGenerator, moduleInstantiationGenerator: ModuleInstantiationGenerator, containerAggregator: ContainerAggregator);
20
+ generate(): void;
21
+ protected generateContainerCode(sortedModules?: string[], moduleDependencies?: Map<string, Set<string>>): string;
22
+ private generateModuleContainers;
23
+ }
24
+ //# sourceMappingURL=modular-container-generator.d.ts.map
@@ -0,0 +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;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"}
@@ -0,0 +1,54 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.ModularContainerGenerator = void 0;
4
+ const dependency_resolver_1 = require("../../analyser/dependency-resolver");
5
+ const base_container_generator_1 = require("../base-container-generator");
6
+ /**
7
+ * Generator for modular container structure.
8
+ * Handles module-based dependency injection with inter-module dependencies.
9
+ */
10
+ class ModularContainerGenerator extends base_container_generator_1.BaseContainerGenerator {
11
+ constructor(fileWriter, moduleGroupedClasses, moduleDependencyResolver, importGenerator, moduleContainerFunctionGenerator, moduleInstantiationGenerator, containerAggregator) {
12
+ super(fileWriter, importGenerator);
13
+ this.moduleGroupedClasses = moduleGroupedClasses;
14
+ this.moduleDependencyResolver = moduleDependencyResolver;
15
+ this.moduleContainerFunctionGenerator = moduleContainerFunctionGenerator;
16
+ this.moduleInstantiationGenerator = moduleInstantiationGenerator;
17
+ this.containerAggregator = containerAggregator;
18
+ }
19
+ generate() {
20
+ // First, check for module-level cycles
21
+ const moduleResult = this.moduleDependencyResolver.resolve();
22
+ if (moduleResult.cycles.length > 0) {
23
+ throw new Error(`Circular dependencies detected between modules: ${JSON.stringify(moduleResult.cycles)}`);
24
+ }
25
+ // Then resolve class-level dependencies within each module
26
+ const allClasses = Array.from(this.moduleGroupedClasses.values()).flat();
27
+ const dependencyResolver = new dependency_resolver_1.DependencyResolver(allClasses);
28
+ const sortResult = dependencyResolver.resolve();
29
+ if (sortResult.cycles.length > 0) {
30
+ throw new Error(`Circular dependencies detected within classes: ${JSON.stringify(sortResult.cycles)}`);
31
+ }
32
+ const containerCode = this.generateContainerCode(moduleResult.sortedModules, moduleResult.moduleDependencies);
33
+ this.writeContainer(containerCode);
34
+ }
35
+ generateContainerCode(sortedModules, moduleDependencies) {
36
+ if (!sortedModules || !moduleDependencies) {
37
+ const moduleResult = this.moduleDependencyResolver.resolve();
38
+ sortedModules = moduleResult.sortedModules;
39
+ moduleDependencies = moduleResult.moduleDependencies;
40
+ }
41
+ const imports = this.importGenerator.generateImports();
42
+ const moduleContainers = this.generateModuleContainers(sortedModules, moduleDependencies);
43
+ const aggregatedContainer = this.containerAggregator.generateAggregatedContainer(sortedModules);
44
+ const typeExport = this.containerAggregator.generateModularTypeExport();
45
+ return `${imports}\n\n${moduleContainers}\n\n${aggregatedContainer}\n\n${typeExport}\n`;
46
+ }
47
+ generateModuleContainers(sortedModules, moduleDependencies) {
48
+ const moduleContainerFunctions = this.moduleContainerFunctionGenerator.generateModuleContainerFunctions(sortedModules, moduleDependencies);
49
+ const moduleInstantiations = this.moduleInstantiationGenerator.generateModuleInstantiations(sortedModules, moduleDependencies);
50
+ return moduleContainerFunctions.join('\n\n') + '\n\n' + moduleInstantiations.join('\n');
51
+ }
52
+ }
53
+ exports.ModularContainerGenerator = ModularContainerGenerator;
54
+ //# sourceMappingURL=modular-container-generator.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"modular-container-generator.js","sourceRoot":"","sources":["../../../src/generator/modular/modular-container-generator.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,24 @@
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';
5
+ /**
6
+ * Coordinates the generation of module container functions.
7
+ * Delegates specific responsibilities to specialized generators.
8
+ */
9
+ export declare class ModuleContainerFunctionGenerator {
10
+ private moduleGroupedClasses;
11
+ private signatureGenerator;
12
+ private dependencyResolver;
13
+ private bodyGenerator;
14
+ constructor(moduleGroupedClasses: Map<string, ClassInfo[]>, signatureGenerator: ModuleFunctionSignatureGenerator, dependencyResolver: ModuleDependencyResolver, bodyGenerator: ModuleFunctionBodyGenerator);
15
+ /**
16
+ * Generates container functions for all modules.
17
+ */
18
+ generateModuleContainerFunctions(sortedModules: string[], moduleDependencies: Map<string, Set<string>>): string[];
19
+ /**
20
+ * Creates a container function for a specific module.
21
+ */
22
+ private createModuleContainerFunction;
23
+ }
24
+ //# sourceMappingURL=module-container-function-generator.d.ts.map
@@ -0,0 +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;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;gBAGjD,oBAAoB,EAAE,GAAG,CAAC,MAAM,EAAE,SAAS,EAAE,CAAC,EAC9C,kBAAkB,EAAE,gCAAgC,EACpD,kBAAkB,EAAE,wBAAwB,EAC5C,aAAa,EAAE,2BAA2B;IAQ5C;;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"}
@@ -0,0 +1,42 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.ModuleContainerFunctionGenerator = void 0;
4
+ /**
5
+ * Coordinates the generation of module container functions.
6
+ * Delegates specific responsibilities to specialized generators.
7
+ */
8
+ class ModuleContainerFunctionGenerator {
9
+ constructor(moduleGroupedClasses, signatureGenerator, dependencyResolver, bodyGenerator) {
10
+ this.moduleGroupedClasses = moduleGroupedClasses;
11
+ this.signatureGenerator = signatureGenerator;
12
+ this.dependencyResolver = dependencyResolver;
13
+ this.bodyGenerator = bodyGenerator;
14
+ }
15
+ /**
16
+ * Generates container functions for all modules.
17
+ */
18
+ generateModuleContainerFunctions(sortedModules, moduleDependencies) {
19
+ const moduleContainerFunctions = [];
20
+ for (const moduleName of sortedModules) {
21
+ const moduleClasses = this.moduleGroupedClasses.get(moduleName);
22
+ if (!moduleClasses)
23
+ continue;
24
+ const moduleContainerFunction = this.createModuleContainerFunction(moduleName, moduleClasses, moduleDependencies);
25
+ moduleContainerFunctions.push(moduleContainerFunction);
26
+ }
27
+ return moduleContainerFunctions;
28
+ }
29
+ /**
30
+ * Creates a container function for a specific module.
31
+ */
32
+ createModuleContainerFunction(moduleName, moduleClasses, moduleDependencies) {
33
+ const moduleFunctionName = `create${moduleName}Container`;
34
+ const moduleDeps = moduleDependencies.get(moduleName) || new Set();
35
+ const functionParams = this.signatureGenerator.generateFunctionParameters(moduleDeps);
36
+ const functionSignature = this.signatureGenerator.createFunctionSignature(moduleFunctionName, functionParams);
37
+ const functionBody = this.bodyGenerator.generateModuleFunctionBody(moduleClasses, moduleDeps);
38
+ return `${functionSignature} {\n${functionBody}\n}`;
39
+ }
40
+ }
41
+ exports.ModuleContainerFunctionGenerator = ModuleContainerFunctionGenerator;
42
+ //# sourceMappingURL=module-container-function-generator.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"module-container-function-generator.js","sourceRoot":"","sources":["../../../src/generator/modular/module-container-function-generator.ts"],"names":[],"mappings":";;;AAKA;;;GAGG;AACH,MAAa,gCAAgC;IAM3C,YACE,oBAA8C,EAC9C,kBAAoD,EACpD,kBAA4C,EAC5C,aAA0C;QAE1C,IAAI,CAAC,oBAAoB,GAAG,oBAAoB,CAAC;QACjD,IAAI,CAAC,kBAAkB,GAAG,kBAAkB,CAAC;QAC7C,IAAI,CAAC,kBAAkB,GAAG,kBAAkB,CAAC;QAC7C,IAAI,CAAC,aAAa,GAAG,aAAa,CAAC;IACrC,CAAC;IAED;;OAEG;IACH,gCAAgC,CAAC,aAAuB,EAAE,kBAA4C;QACpG,MAAM,wBAAwB,GAAa,EAAE,CAAC;QAE9C,KAAK,MAAM,UAAU,IAAI,aAAa,EAAE,CAAC;YACvC,MAAM,aAAa,GAAG,IAAI,CAAC,oBAAoB,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;YAChE,IAAI,CAAC,aAAa;gBAAE,SAAS;YAE7B,MAAM,uBAAuB,GAAG,IAAI,CAAC,6BAA6B,CAAC,UAAU,EAAE,aAAa,EAAE,kBAAkB,CAAC,CAAC;YAClH,wBAAwB,CAAC,IAAI,CAAC,uBAAuB,CAAC,CAAC;QACzD,CAAC;QAED,OAAO,wBAAwB,CAAC;IAClC,CAAC;IAED;;OAEG;IACK,6BAA6B,CAAC,UAAkB,EAAE,aAA0B,EAAE,kBAA4C;QAChI,MAAM,kBAAkB,GAAG,SAAS,UAAU,WAAW,CAAC;QAC1D,MAAM,UAAU,GAAG,kBAAkB,CAAC,GAAG,CAAC,UAAU,CAAC,IAAI,IAAI,GAAG,EAAE,CAAC;QAEnE,MAAM,cAAc,GAAG,IAAI,CAAC,kBAAkB,CAAC,0BAA0B,CAAC,UAAU,CAAC,CAAC;QACtF,MAAM,iBAAiB,GAAG,IAAI,CAAC,kBAAkB,CAAC,uBAAuB,CAAC,kBAAkB,EAAE,cAAc,CAAC,CAAC;QAC9G,MAAM,YAAY,GAAG,IAAI,CAAC,aAAa,CAAC,0BAA0B,CAAC,aAAa,EAAE,UAAU,CAAC,CAAC;QAE9F,OAAO,GAAG,iBAAiB,OAAO,YAAY,KAAK,CAAC;IACtD,CAAC;CAGF;AAlDD,4EAkDC"}
@@ -0,0 +1,22 @@
1
+ import { ClassInfo } from '../../types';
2
+ /**
3
+ * Responsible for resolving dependencies within and across modules.
4
+ * Handles both internal module dependencies and external module dependencies.
5
+ */
6
+ export declare class ModuleDependencyResolver {
7
+ private moduleGroupedClasses;
8
+ constructor(moduleGroupedClasses: Map<string, ClassInfo[]>);
9
+ /**
10
+ * Builds constructor arguments for a class.
11
+ */
12
+ buildConstructorArguments(classInfo: ClassInfo, moduleClasses: ClassInfo[], moduleDeps: Set<string>): string[];
13
+ /**
14
+ * Resolves a dependency argument.
15
+ */
16
+ private resolveDependencyArgument;
17
+ /**
18
+ * Finds a dependency from an external module.
19
+ */
20
+ private findExternalModuleDependency;
21
+ }
22
+ //# sourceMappingURL=module-dependency-resolver.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"module-dependency-resolver.d.ts","sourceRoot":"","sources":["../../../src/generator/modular/module-dependency-resolver.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAGxC;;;GAGG;AACH,qBAAa,wBAAwB;IACnC,OAAO,CAAC,oBAAoB,CAA2B;gBAE3C,oBAAoB,EAAE,GAAG,CAAC,MAAM,EAAE,SAAS,EAAE,CAAC;IAI1D;;OAEG;IACH,yBAAyB,CAAC,SAAS,EAAE,SAAS,EAAE,aAAa,EAAE,SAAS,EAAE,EAAE,UAAU,EAAE,GAAG,CAAC,MAAM,CAAC,GAAG,MAAM,EAAE;IAa9G;;OAEG;IACH,OAAO,CAAC,yBAAyB;IAWjC;;OAEG;IACH,OAAO,CAAC,4BAA4B;CAerC"}
@@ -0,0 +1,56 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.ModuleDependencyResolver = void 0;
4
+ const shared_1 = require("../shared");
5
+ /**
6
+ * Responsible for resolving dependencies within and across modules.
7
+ * Handles both internal module dependencies and external module dependencies.
8
+ */
9
+ class ModuleDependencyResolver {
10
+ constructor(moduleGroupedClasses) {
11
+ this.moduleGroupedClasses = moduleGroupedClasses;
12
+ }
13
+ /**
14
+ * Builds constructor arguments for a class.
15
+ */
16
+ buildConstructorArguments(classInfo, moduleClasses, moduleDeps) {
17
+ const constructorArgs = [];
18
+ for (const dep of classInfo.dependencies) {
19
+ const arg = this.resolveDependencyArgument(dep, moduleClasses, moduleDeps);
20
+ if (arg) {
21
+ constructorArgs.push(arg);
22
+ }
23
+ }
24
+ return constructorArgs;
25
+ }
26
+ /**
27
+ * Resolves a dependency argument.
28
+ */
29
+ resolveDependencyArgument(dependency, moduleClasses, moduleDeps) {
30
+ // Check if dependency is from another module
31
+ const externalModuleArg = this.findExternalModuleDependency(dependency, moduleDeps);
32
+ if (externalModuleArg) {
33
+ return externalModuleArg;
34
+ }
35
+ // Check if dependency is from the same module
36
+ return shared_1.InstantiationUtils.resolveBasicDependency(dependency, moduleClasses);
37
+ }
38
+ /**
39
+ * Finds a dependency from an external module.
40
+ */
41
+ findExternalModuleDependency(dependency, moduleDeps) {
42
+ for (const depModule of moduleDeps) {
43
+ const depModuleClasses = this.moduleGroupedClasses.get(depModule);
44
+ if (depModuleClasses) {
45
+ const depClass = depModuleClasses.find(c => c.interfaceName === dependency);
46
+ if (depClass) {
47
+ const depModuleVarName = shared_1.InstantiationUtils.toCamelCase(depModule) + 'Container';
48
+ return `${depModuleVarName}.${dependency}`;
49
+ }
50
+ }
51
+ }
52
+ return null;
53
+ }
54
+ }
55
+ exports.ModuleDependencyResolver = ModuleDependencyResolver;
56
+ //# sourceMappingURL=module-dependency-resolver.js.map