@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
@@ -3,15 +3,21 @@ 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("./modular/module-container-function-generator");
7
+ const module_instantiation_generator_1 = require("./modular/module-instantiation-generator");
8
+ const container_aggregator_1 = require("./modular/container-aggregator");
6
9
  /**
7
10
  * Generator for modular container structure.
8
11
  * Handles module-based dependency injection with inter-module dependencies.
9
12
  */
10
13
  class ModularContainerGenerator extends base_container_generator_1.BaseContainerGenerator {
11
- constructor(outputPath, moduleGroupedClasses, moduleDependencyResolver, importGenerator) {
12
- super(outputPath, importGenerator);
14
+ constructor(fileWriter, moduleGroupedClasses, moduleDependencyResolver, importGenerator) {
15
+ super(fileWriter, importGenerator);
13
16
  this.moduleGroupedClasses = moduleGroupedClasses;
14
17
  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
21
  }
16
22
  generate() {
17
23
  // First, check for module-level cycles
@@ -37,178 +43,14 @@ class ModularContainerGenerator extends base_container_generator_1.BaseContainer
37
43
  }
38
44
  const imports = this.importGenerator.generateImports();
39
45
  const moduleContainers = this.generateModuleContainers(sortedModules, moduleDependencies);
40
- const aggregatedContainer = this.generateAggregatedContainer(sortedModules);
41
- const typeExport = this.generateModularTypeExport();
46
+ const aggregatedContainer = this.containerAggregator.generateAggregatedContainer(sortedModules);
47
+ const typeExport = this.containerAggregator.generateModularTypeExport();
42
48
  return `${imports}\n\n${moduleContainers}\n\n${aggregatedContainer}\n\n${typeExport}\n`;
43
49
  }
44
50
  generateModuleContainers(sortedModules, moduleDependencies) {
45
- const moduleContainerCodes = [];
46
- const moduleContainerFunctions = [];
47
- // Generate module container functions in dependency order
48
- for (const moduleName of sortedModules) {
49
- const moduleClasses = this.moduleGroupedClasses.get(moduleName);
50
- if (!moduleClasses)
51
- continue;
52
- const moduleFunctionName = `create${moduleName}Container`;
53
- const moduleExports = [];
54
- const moduleDeps = moduleDependencies.get(moduleName) || new Set();
55
- // Generate function parameters for dependent modules
56
- const functionParams = [];
57
- for (const depModule of moduleDeps) {
58
- const depVarName = this.camelCase(depModule) + 'Container';
59
- functionParams.push(`${depVarName}: ReturnType<typeof create${depModule}Container>`);
60
- }
61
- // Generate lazy initialization variables and factory functions
62
- const lazyInitializations = [];
63
- const factoryFunctions = [];
64
- // First, create factory functions for transient dependencies
65
- for (const classInfo of moduleClasses) {
66
- if (classInfo.scope === 'transient') {
67
- const instanceName = this.camelCase(classInfo.name);
68
- const factoryName = `${instanceName}Factory`;
69
- factoryFunctions.push(` const ${factoryName} = (): ${classInfo.name} => new ${classInfo.name}();`);
70
- }
71
- }
72
- // Sort singleton classes by their dependencies within the module
73
- const singletonClasses = moduleClasses.filter(c => c.scope !== 'transient');
74
- const sortedSingletons = this.sortClassesByDependencies(singletonClasses, moduleClasses);
75
- // Generate lazy initialization variables for singletons
76
- for (const classInfo of sortedSingletons) {
77
- const instanceName = this.camelCase(classInfo.name);
78
- lazyInitializations.push(` let ${instanceName}: ${classInfo.name} | undefined;`);
79
- }
80
- // Generate lazy getter functions for singletons
81
- const lazyGetters = [];
82
- for (const classInfo of sortedSingletons) {
83
- const instanceName = this.camelCase(classInfo.name);
84
- const getterName = `get${classInfo.name}`;
85
- const constructorArgs = [];
86
- // Build constructor arguments
87
- for (const dep of classInfo.dependencies) {
88
- // Check if dependency is from another module
89
- let foundInOtherModule = false;
90
- for (const depModule of moduleDeps) {
91
- const depModuleClasses = this.moduleGroupedClasses.get(depModule);
92
- if (depModuleClasses) {
93
- const depClass = depModuleClasses.find(c => c.interfaceName === dep);
94
- if (depClass) {
95
- const depModuleVarName = this.camelCase(depModule) + 'Container';
96
- constructorArgs.push(`${depModuleVarName}.${dep}`);
97
- foundInOtherModule = true;
98
- break;
99
- }
100
- }
101
- }
102
- // If not found in other modules, it's from the same module
103
- if (!foundInOtherModule) {
104
- const depClass = moduleClasses.find(c => c.interfaceName === dep);
105
- if (depClass) {
106
- if (depClass.scope === 'transient') {
107
- const depInstanceName = this.camelCase(depClass.name);
108
- constructorArgs.push(`${depInstanceName}Factory()`);
109
- }
110
- else {
111
- const depGetterName = `get${depClass.name}`;
112
- constructorArgs.push(`${depGetterName}()`);
113
- }
114
- }
115
- }
116
- }
117
- const instantiation = constructorArgs.length > 0 ?
118
- `new ${classInfo.name}(${constructorArgs.join(', ')})` :
119
- `new ${classInfo.name}()`;
120
- const lazyGetter = ` const ${getterName} = (): ${classInfo.name} => {\n if (!${instanceName}) {\n ${instanceName} = ${instantiation};\n }\n return ${instanceName};\n };`;
121
- lazyGetters.push(lazyGetter);
122
- }
123
- // Generate module exports
124
- for (const classInfo of moduleClasses) {
125
- if (classInfo.interfaceName) {
126
- const instanceName = this.camelCase(classInfo.name);
127
- const isTransient = classInfo.scope === 'transient';
128
- if (isTransient) {
129
- moduleExports.push(` get ${classInfo.interfaceName}(): ${classInfo.name} {\n return ${instanceName}Factory();\n }`);
130
- }
131
- else {
132
- const getterName = `get${classInfo.name}`;
133
- moduleExports.push(` get ${classInfo.interfaceName}(): ${classInfo.name} {\n return ${getterName}();\n }`);
134
- }
135
- }
136
- }
137
- const functionSignature = functionParams.length > 0 ?
138
- `function ${moduleFunctionName}(${functionParams.join(', ')})` :
139
- `function ${moduleFunctionName}()`;
140
- const returnObject = moduleExports.length > 0 ?
141
- ` return {\n${moduleExports.join(',\n')}\n };` :
142
- ' return {};';
143
- const functionBody = [
144
- ...factoryFunctions,
145
- '',
146
- ...lazyInitializations,
147
- '',
148
- ...lazyGetters,
149
- '',
150
- returnObject
151
- ].filter(line => line !== '' || factoryFunctions.length > 0 || lazyInitializations.length > 0 || lazyGetters.length > 0).join('\n');
152
- const moduleContainerFunction = `${functionSignature} {\n${functionBody}\n}`;
153
- moduleContainerFunctions.push(moduleContainerFunction);
154
- }
155
- // Sort modules by dependencies and generate instantiations
156
- for (const moduleName of sortedModules) {
157
- const moduleVarName = this.camelCase(moduleName) + 'Container';
158
- const moduleFunctionName = `create${moduleName}Container`;
159
- const moduleDeps = moduleDependencies.get(moduleName) || new Set();
160
- const functionArgs = [];
161
- for (const depModule of moduleDeps) {
162
- const depVarName = this.camelCase(depModule) + 'Container';
163
- functionArgs.push(depVarName);
164
- }
165
- const moduleInstantiation = functionArgs.length > 0 ?
166
- `const ${moduleVarName} = ${moduleFunctionName}(${functionArgs.join(', ')});` :
167
- `const ${moduleVarName} = ${moduleFunctionName}();`;
168
- moduleContainerCodes.push(moduleInstantiation);
169
- }
170
- return moduleContainerFunctions.join('\n\n') + '\n\n' + moduleContainerCodes.join('\n');
171
- }
172
- generateAggregatedContainer(sortedModules) {
173
- const moduleExports = [];
174
- for (const moduleName of sortedModules) {
175
- const moduleVarName = this.camelCase(moduleName) + 'Container';
176
- const moduleKey = this.camelCase(moduleName);
177
- moduleExports.push(` ${moduleKey}: ${moduleVarName}`);
178
- }
179
- return `export const container = {\n${moduleExports.join(',\n')}\n};`;
180
- }
181
- generateModularTypeExport() {
182
- return 'export type Container = typeof container;';
183
- }
184
- sortClassesByDependencies(classes, allModuleClasses) {
185
- const sorted = [];
186
- const visited = new Set();
187
- const visiting = new Set();
188
- const visit = (classInfo) => {
189
- if (visiting.has(classInfo.name)) {
190
- // Circular dependency detected, just add it
191
- return;
192
- }
193
- if (visited.has(classInfo.name)) {
194
- return;
195
- }
196
- visiting.add(classInfo.name);
197
- // Visit dependencies first (only within the same module)
198
- for (const dep of classInfo.dependencies) {
199
- const depClass = allModuleClasses.find(c => c.interfaceName === dep && c.scope !== 'transient');
200
- if (depClass && classes.includes(depClass)) {
201
- visit(depClass);
202
- }
203
- }
204
- visiting.delete(classInfo.name);
205
- visited.add(classInfo.name);
206
- sorted.push(classInfo);
207
- };
208
- for (const classInfo of classes) {
209
- visit(classInfo);
210
- }
211
- return sorted;
51
+ const moduleContainerFunctions = this.moduleContainerFunctionGenerator.generateModuleContainerFunctions(sortedModules, moduleDependencies);
52
+ const moduleInstantiations = this.moduleInstantiationGenerator.generateModuleInstantiations(sortedModules, moduleDependencies);
53
+ return moduleContainerFunctions.join('\n\n') + '\n\n' + moduleInstantiations.join('\n');
212
54
  }
213
55
  }
214
56
  exports.ModularContainerGenerator = ModularContainerGenerator;
@@ -1 +1 @@
1
- {"version":3,"file":"modular-container-generator.js","sourceRoot":"","sources":["../../src/generator/modular-container-generator.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"modular-container-generator.js","sourceRoot":"","sources":["../../src/generator/modular-container-generator.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,30 @@
1
+ import { ClassInfo } from '../types';
2
+ /**
3
+ * Generator for module container functions.
4
+ * Handles the creation of individual module container functions with their dependencies.
5
+ */
6
+ export declare class ModuleContainerFunctionGenerator {
7
+ private moduleGroupedClasses;
8
+ constructor(moduleGroupedClasses: Map<string, ClassInfo[]>);
9
+ /**
10
+ * Generates module container functions for all modules.
11
+ */
12
+ generateModuleContainerFunctions(sortedModules: string[], moduleDependencies: Map<string, Set<string>>): string[];
13
+ private createModuleContainerFunction;
14
+ private generateFunctionParameters;
15
+ private createFunctionSignature;
16
+ private generateModuleFunctionBody;
17
+ private generateTransientFactories;
18
+ private generateSingletonVariables;
19
+ private generateSingletonGetters;
20
+ private createSingletonGetter;
21
+ private buildConstructorArguments;
22
+ private resolveDependencyArgument;
23
+ private findExternalModuleDependency;
24
+ private findInternalModuleDependency;
25
+ private generateModuleExports;
26
+ private createModuleExportGetter;
27
+ private sortClassesByDependencies;
28
+ private camelCase;
29
+ }
30
+ //# 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/module-container-function-generator.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,UAAU,CAAC;AAErC;;;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,OAAO,CAAC,6BAA6B;IAWrC,OAAO,CAAC,0BAA0B;IAWlC,OAAO,CAAC,uBAAuB;IAM/B,OAAO,CAAC,0BAA0B;IAqBlC,OAAO,CAAC,0BAA0B;IAclC,OAAO,CAAC,0BAA0B;IAalC,OAAO,CAAC,wBAAwB;IAahC,OAAO,CAAC,qBAAqB;IAY7B,OAAO,CAAC,yBAAyB;IAajC,OAAO,CAAC,yBAAyB;IAWjC,OAAO,CAAC,4BAA4B;IAcpC,OAAO,CAAC,4BAA4B;IAcpC,OAAO,CAAC,qBAAqB;IAa7B,OAAO,CAAC,wBAAwB;IAYhC,OAAO,CAAC,yBAAyB;IA6BjC,OAAO,CAAC,SAAS;CAGlB"}
@@ -0,0 +1,199 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.ModuleContainerFunctionGenerator = void 0;
4
+ /**
5
+ * Generator for module container functions.
6
+ * Handles the creation of individual module container functions with their dependencies.
7
+ */
8
+ class ModuleContainerFunctionGenerator {
9
+ constructor(moduleGroupedClasses) {
10
+ this.moduleGroupedClasses = moduleGroupedClasses;
11
+ }
12
+ /**
13
+ * Generates module container functions for all modules.
14
+ */
15
+ generateModuleContainerFunctions(sortedModules, moduleDependencies) {
16
+ const moduleContainerFunctions = [];
17
+ for (const moduleName of sortedModules) {
18
+ const moduleClasses = this.moduleGroupedClasses.get(moduleName);
19
+ if (!moduleClasses)
20
+ continue;
21
+ const moduleContainerFunction = this.createModuleContainerFunction(moduleName, moduleClasses, moduleDependencies);
22
+ moduleContainerFunctions.push(moduleContainerFunction);
23
+ }
24
+ return moduleContainerFunctions;
25
+ }
26
+ createModuleContainerFunction(moduleName, moduleClasses, moduleDependencies) {
27
+ const moduleFunctionName = `create${moduleName}Container`;
28
+ const moduleDeps = moduleDependencies.get(moduleName) || new Set();
29
+ const functionParams = this.generateFunctionParameters(moduleDeps);
30
+ const functionSignature = this.createFunctionSignature(moduleFunctionName, functionParams);
31
+ const functionBody = this.generateModuleFunctionBody(moduleClasses, moduleDeps);
32
+ return `${functionSignature} {\n${functionBody}\n}`;
33
+ }
34
+ generateFunctionParameters(moduleDeps) {
35
+ const functionParams = [];
36
+ for (const depModule of moduleDeps) {
37
+ const depVarName = this.camelCase(depModule) + 'Container';
38
+ functionParams.push(`${depVarName}: ReturnType<typeof create${depModule}Container>`);
39
+ }
40
+ return functionParams;
41
+ }
42
+ createFunctionSignature(functionName, params) {
43
+ return params.length > 0 ?
44
+ `function ${functionName}(${params.join(', ')})` :
45
+ `function ${functionName}()`;
46
+ }
47
+ generateModuleFunctionBody(moduleClasses, moduleDeps) {
48
+ const factoryFunctions = this.generateTransientFactories(moduleClasses);
49
+ const lazyInitializations = this.generateSingletonVariables(moduleClasses);
50
+ const lazyGetters = this.generateSingletonGetters(moduleClasses, moduleDeps);
51
+ const moduleExports = this.generateModuleExports(moduleClasses);
52
+ const returnObject = moduleExports.length > 0 ?
53
+ ` return {\n${moduleExports.join(',\n')}\n };` :
54
+ ' return {};';
55
+ return [
56
+ ...factoryFunctions,
57
+ '',
58
+ ...lazyInitializations,
59
+ '',
60
+ ...lazyGetters,
61
+ '',
62
+ returnObject
63
+ ].filter(line => line !== '' || factoryFunctions.length > 0 || lazyInitializations.length > 0 || lazyGetters.length > 0).join('\n');
64
+ }
65
+ generateTransientFactories(moduleClasses) {
66
+ const factoryFunctions = [];
67
+ for (const classInfo of moduleClasses) {
68
+ if (classInfo.scope === 'transient') {
69
+ const instanceName = this.camelCase(classInfo.name);
70
+ const factoryName = `${instanceName}Factory`;
71
+ factoryFunctions.push(` const ${factoryName} = (): ${classInfo.name} => new ${classInfo.name}();`);
72
+ }
73
+ }
74
+ return factoryFunctions;
75
+ }
76
+ generateSingletonVariables(moduleClasses) {
77
+ const singletonClasses = moduleClasses.filter(c => c.scope !== 'transient');
78
+ const sortedSingletons = this.sortClassesByDependencies(singletonClasses, moduleClasses);
79
+ const lazyInitializations = [];
80
+ for (const classInfo of sortedSingletons) {
81
+ const instanceName = this.camelCase(classInfo.name);
82
+ lazyInitializations.push(` let ${instanceName}: ${classInfo.name} | undefined;`);
83
+ }
84
+ return lazyInitializations;
85
+ }
86
+ generateSingletonGetters(moduleClasses, moduleDeps) {
87
+ const singletonClasses = moduleClasses.filter(c => c.scope !== 'transient');
88
+ const sortedSingletons = this.sortClassesByDependencies(singletonClasses, moduleClasses);
89
+ const lazyGetters = [];
90
+ for (const classInfo of sortedSingletons) {
91
+ const lazyGetter = this.createSingletonGetter(classInfo, moduleClasses, moduleDeps);
92
+ lazyGetters.push(lazyGetter);
93
+ }
94
+ return lazyGetters;
95
+ }
96
+ createSingletonGetter(classInfo, moduleClasses, moduleDeps) {
97
+ const instanceName = this.camelCase(classInfo.name);
98
+ const getterName = `get${classInfo.name}`;
99
+ const constructorArgs = this.buildConstructorArguments(classInfo, moduleClasses, moduleDeps);
100
+ const instantiation = constructorArgs.length > 0 ?
101
+ `new ${classInfo.name}(${constructorArgs.join(', ')})` :
102
+ `new ${classInfo.name}()`;
103
+ return ` const ${getterName} = (): ${classInfo.name} => {\n if (!${instanceName}) {\n ${instanceName} = ${instantiation};\n }\n return ${instanceName};\n };`;
104
+ }
105
+ buildConstructorArguments(classInfo, moduleClasses, moduleDeps) {
106
+ const constructorArgs = [];
107
+ for (const dep of classInfo.dependencies) {
108
+ const arg = this.resolveDependencyArgument(dep, moduleClasses, moduleDeps);
109
+ if (arg) {
110
+ constructorArgs.push(arg);
111
+ }
112
+ }
113
+ return constructorArgs;
114
+ }
115
+ resolveDependencyArgument(dependency, moduleClasses, moduleDeps) {
116
+ // Check if dependency is from another module
117
+ const externalModuleArg = this.findExternalModuleDependency(dependency, moduleDeps);
118
+ if (externalModuleArg) {
119
+ return externalModuleArg;
120
+ }
121
+ // Check if dependency is from the same module
122
+ return this.findInternalModuleDependency(dependency, moduleClasses);
123
+ }
124
+ findExternalModuleDependency(dependency, moduleDeps) {
125
+ for (const depModule of moduleDeps) {
126
+ const depModuleClasses = this.moduleGroupedClasses.get(depModule);
127
+ if (depModuleClasses) {
128
+ const depClass = depModuleClasses.find(c => c.interfaceName === dependency);
129
+ if (depClass) {
130
+ const depModuleVarName = this.camelCase(depModule) + 'Container';
131
+ return `${depModuleVarName}.${dependency}`;
132
+ }
133
+ }
134
+ }
135
+ return null;
136
+ }
137
+ findInternalModuleDependency(dependency, moduleClasses) {
138
+ const depClass = moduleClasses.find(c => c.interfaceName === dependency);
139
+ if (depClass) {
140
+ if (depClass.scope === 'transient') {
141
+ const depInstanceName = this.camelCase(depClass.name);
142
+ return `${depInstanceName}Factory()`;
143
+ }
144
+ else {
145
+ const depGetterName = `get${depClass.name}`;
146
+ return `${depGetterName}()`;
147
+ }
148
+ }
149
+ return null;
150
+ }
151
+ generateModuleExports(moduleClasses) {
152
+ const moduleExports = [];
153
+ for (const classInfo of moduleClasses) {
154
+ if (classInfo.interfaceName) {
155
+ const exportGetter = this.createModuleExportGetter(classInfo);
156
+ moduleExports.push(exportGetter);
157
+ }
158
+ }
159
+ return moduleExports;
160
+ }
161
+ createModuleExportGetter(classInfo) {
162
+ const instanceName = this.camelCase(classInfo.name);
163
+ const isTransient = classInfo.scope === 'transient';
164
+ if (isTransient) {
165
+ return ` get ${classInfo.interfaceName}(): ${classInfo.name} {\n return ${instanceName}Factory();\n }`;
166
+ }
167
+ else {
168
+ const getterName = `get${classInfo.name}`;
169
+ return ` get ${classInfo.interfaceName}(): ${classInfo.name} {\n return ${getterName}();\n }`;
170
+ }
171
+ }
172
+ sortClassesByDependencies(classes, allModuleClasses) {
173
+ // Import TopologicalSorter when needed
174
+ const { TopologicalSorter } = require('../utils/topological-sorter');
175
+ // Build dependency graph for classes within the module
176
+ const dependencyGraph = new Map();
177
+ for (const classInfo of classes) {
178
+ const dependencies = [];
179
+ // Only include dependencies that are within the same module and are singletons
180
+ for (const dep of classInfo.dependencies) {
181
+ const depClass = allModuleClasses.find(c => c.interfaceName === dep && c.scope !== 'transient');
182
+ if (depClass && classes.includes(depClass)) {
183
+ dependencies.push(depClass.name);
184
+ }
185
+ }
186
+ dependencyGraph.set(classInfo.name, dependencies);
187
+ }
188
+ // Use TopologicalSorter to sort the classes
189
+ const sortResult = TopologicalSorter.sort(dependencyGraph);
190
+ // Map sorted class names back to ClassInfo objects
191
+ const classMap = new Map(classes.map(c => [c.name, c]));
192
+ return sortResult.sorted.map(className => classMap.get(className)).filter((classInfo) => classInfo !== undefined);
193
+ }
194
+ camelCase(str) {
195
+ return str.charAt(0).toLowerCase() + str.slice(1).replace(/[^a-zA-Z0-9]/g, '');
196
+ }
197
+ }
198
+ exports.ModuleContainerFunctionGenerator = ModuleContainerFunctionGenerator;
199
+ //# sourceMappingURL=module-container-function-generator.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"module-container-function-generator.js","sourceRoot":"","sources":["../../src/generator/module-container-function-generator.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,28 @@
1
+ import { ClassInfo, ConstructorParameter } from '../../types';
2
+ /**
3
+ * Shared utility class for dependency resolution functionality used by both
4
+ * flat and modular container generators.
5
+ */
6
+ export declare class DependencyResolverUtils {
7
+ /**
8
+ * Creates a map of interface names to their implementing class names.
9
+ */
10
+ static createInterfaceToClassMap(classes: ClassInfo[]): Map<string, string>;
11
+ /**
12
+ * Gets default value for a type when no implementation is found.
13
+ */
14
+ static getDefaultValueForType(type: string, isOptional: boolean): string;
15
+ /**
16
+ * Generates constructor arguments for unmanaged dependencies.
17
+ */
18
+ static generateConstructorArgs(params: ConstructorParameter[]): string;
19
+ /**
20
+ * Creates an instance of an unmanaged dependency.
21
+ */
22
+ static createUnmanagedDependencyInstance(className: string, classInfo?: ClassInfo): string;
23
+ /**
24
+ * Finds a class by its interface name in a collection of classes.
25
+ */
26
+ static findClassByInterface(interfaceName: string, classes: ClassInfo[]): ClassInfo | undefined;
27
+ }
28
+ //# sourceMappingURL=dependency-resolver-utils.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"dependency-resolver-utils.d.ts","sourceRoot":"","sources":["../../../src/generator/shared/dependency-resolver-utils.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,oBAAoB,EAAE,MAAM,aAAa,CAAC;AAG9D;;;GAGG;AACH,qBAAa,uBAAuB;IAClC;;OAEG;IACH,MAAM,CAAC,yBAAyB,CAAC,OAAO,EAAE,SAAS,EAAE,GAAG,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC;IAU3E;;OAEG;IACH,MAAM,CAAC,sBAAsB,CAAC,IAAI,EAAE,MAAM,EAAE,UAAU,EAAE,OAAO,GAAG,MAAM;IAqBxE;;OAEG;IACH,MAAM,CAAC,uBAAuB,CAAC,MAAM,EAAE,oBAAoB,EAAE,GAAG,MAAM;IAItE;;OAEG;IACH,MAAM,CAAC,iCAAiC,CAAC,SAAS,EAAE,MAAM,EAAE,SAAS,CAAC,EAAE,SAAS,GAAG,MAAM;IAS1F;;OAEG;IACH,MAAM,CAAC,oBAAoB,CAAC,aAAa,EAAE,MAAM,EAAE,OAAO,EAAE,SAAS,EAAE,GAAG,SAAS,GAAG,SAAS;CAGhG"}
@@ -0,0 +1,67 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.DependencyResolverUtils = void 0;
4
+ /**
5
+ * Shared utility class for dependency resolution functionality used by both
6
+ * flat and modular container generators.
7
+ */
8
+ class DependencyResolverUtils {
9
+ /**
10
+ * Creates a map of interface names to their implementing class names.
11
+ */
12
+ static createInterfaceToClassMap(classes) {
13
+ const interfaceToClassMap = new Map();
14
+ for (const classInfo of classes) {
15
+ if (classInfo.interfaceName) {
16
+ interfaceToClassMap.set(classInfo.interfaceName, classInfo.name);
17
+ }
18
+ }
19
+ return interfaceToClassMap;
20
+ }
21
+ /**
22
+ * Gets default value for a type when no implementation is found.
23
+ */
24
+ static getDefaultValueForType(type, isOptional) {
25
+ if (isOptional) {
26
+ return 'undefined';
27
+ }
28
+ // Handle primitive types
29
+ switch (type.toLowerCase()) {
30
+ case 'string':
31
+ return '"default"';
32
+ case 'number':
33
+ return '0';
34
+ case 'boolean':
35
+ return 'false';
36
+ case 'date':
37
+ return 'new Date()';
38
+ default:
39
+ // For class types, create a simple instance
40
+ return `new ${type}()`;
41
+ }
42
+ }
43
+ /**
44
+ * Generates constructor arguments for unmanaged dependencies.
45
+ */
46
+ static generateConstructorArgs(params) {
47
+ return params.map(param => this.getDefaultValueForType(param.type, param.isOptional)).join(', ');
48
+ }
49
+ /**
50
+ * Creates an instance of an unmanaged dependency.
51
+ */
52
+ static createUnmanagedDependencyInstance(className, classInfo) {
53
+ if (!classInfo || !classInfo.constructorParams.length) {
54
+ return `new ${className}()`;
55
+ }
56
+ const args = this.generateConstructorArgs(classInfo.constructorParams);
57
+ return `new ${className}(${args})`;
58
+ }
59
+ /**
60
+ * Finds a class by its interface name in a collection of classes.
61
+ */
62
+ static findClassByInterface(interfaceName, classes) {
63
+ return classes.find(c => c.interfaceName === interfaceName);
64
+ }
65
+ }
66
+ exports.DependencyResolverUtils = DependencyResolverUtils;
67
+ //# sourceMappingURL=dependency-resolver-utils.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"dependency-resolver-utils.js","sourceRoot":"","sources":["../../../src/generator/shared/dependency-resolver-utils.ts"],"names":[],"mappings":";;;AAGA;;;GAGG;AACH,MAAa,uBAAuB;IAClC;;OAEG;IACH,MAAM,CAAC,yBAAyB,CAAC,OAAoB;QACnD,MAAM,mBAAmB,GAAG,IAAI,GAAG,EAAkB,CAAC;QACtD,KAAK,MAAM,SAAS,IAAI,OAAO,EAAE,CAAC;YAChC,IAAI,SAAS,CAAC,aAAa,EAAE,CAAC;gBAC5B,mBAAmB,CAAC,GAAG,CAAC,SAAS,CAAC,aAAa,EAAE,SAAS,CAAC,IAAI,CAAC,CAAC;YACnE,CAAC;QACH,CAAC;QACD,OAAO,mBAAmB,CAAC;IAC7B,CAAC;IAED;;OAEG;IACH,MAAM,CAAC,sBAAsB,CAAC,IAAY,EAAE,UAAmB;QAC7D,IAAI,UAAU,EAAE,CAAC;YACf,OAAO,WAAW,CAAC;QACrB,CAAC;QAED,yBAAyB;QACzB,QAAQ,IAAI,CAAC,WAAW,EAAE,EAAE,CAAC;YAC3B,KAAK,QAAQ;gBACX,OAAO,WAAW,CAAC;YACrB,KAAK,QAAQ;gBACX,OAAO,GAAG,CAAC;YACb,KAAK,SAAS;gBACZ,OAAO,OAAO,CAAC;YACjB,KAAK,MAAM;gBACT,OAAO,YAAY,CAAC;YACtB;gBACE,4CAA4C;gBAC5C,OAAO,OAAO,IAAI,IAAI,CAAC;QAC3B,CAAC;IACH,CAAC;IAED;;OAEG;IACH,MAAM,CAAC,uBAAuB,CAAC,MAA8B;QAC3D,OAAO,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC,IAAI,CAAC,sBAAsB,CAAC,KAAK,CAAC,IAAI,EAAE,KAAK,CAAC,UAAU,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACnG,CAAC;IAED;;OAEG;IACH,MAAM,CAAC,iCAAiC,CAAC,SAAiB,EAAE,SAAqB;QAC/E,IAAI,CAAC,SAAS,IAAI,CAAC,SAAS,CAAC,iBAAiB,CAAC,MAAM,EAAE,CAAC;YACtD,OAAO,OAAO,SAAS,IAAI,CAAC;QAC9B,CAAC;QAED,MAAM,IAAI,GAAG,IAAI,CAAC,uBAAuB,CAAC,SAAS,CAAC,iBAAiB,CAAC,CAAC;QACvE,OAAO,OAAO,SAAS,IAAI,IAAI,GAAG,CAAC;IACrC,CAAC;IAED;;OAEG;IACH,MAAM,CAAC,oBAAoB,CAAC,aAAqB,EAAE,OAAoB;QACrE,OAAO,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,aAAa,KAAK,aAAa,CAAC,CAAC;IAC9D,CAAC;CACF;AA/DD,0DA+DC"}
@@ -0,0 +1,2 @@
1
+ export * from './instantiation-utils';
2
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/generator/shared/index.ts"],"names":[],"mappings":"AAAA,cAAc,uBAAuB,CAAC"}
@@ -0,0 +1,18 @@
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("./instantiation-utils"), exports);
18
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/generator/shared/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,wDAAsC"}