@notjustcoders/ioc-arise 1.0.4 → 1.0.6
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.
- package/dist/__tests__/generator/container-generator.test.js +1 -1
- package/dist/__tests__/generator/container-generator.test.js.map +1 -1
- package/dist/__tests__/generator/dependency-resolver.test.js +1 -1
- package/dist/__tests__/generator/dependency-resolver.test.js.map +1 -1
- package/dist/__tests__/generator/instantiation-generator.test.js +1 -1
- package/dist/__tests__/generator/instantiation-generator.test.js.map +1 -1
- package/dist/analyser/ast-parser.d.ts +1 -0
- package/dist/analyser/ast-parser.d.ts.map +1 -1
- package/dist/analyser/ast-parser.js +40 -0
- package/dist/analyser/ast-parser.js.map +1 -1
- package/dist/analyser/class-analyzer.d.ts +4 -1
- package/dist/analyser/class-analyzer.d.ts.map +1 -1
- package/dist/analyser/class-analyzer.js +96 -11
- package/dist/analyser/class-analyzer.js.map +1 -1
- package/dist/analyser/project-analyzer.d.ts +0 -1
- package/dist/analyser/project-analyzer.d.ts.map +1 -1
- package/dist/analyser/project-analyzer.js +4 -27
- package/dist/analyser/project-analyzer.js.map +1 -1
- package/dist/commands/analyze.d.ts.map +1 -1
- package/dist/commands/analyze.js +1 -0
- package/dist/commands/analyze.js.map +1 -1
- package/dist/commands/generate.d.ts.map +1 -1
- package/dist/commands/generate.js +4 -2
- package/dist/commands/generate.js.map +1 -1
- package/dist/container.gen.d.ts +18 -0
- package/dist/container.gen.d.ts.map +1 -0
- package/dist/container.gen.js +88 -0
- package/dist/container.gen.js.map +1 -0
- package/dist/generator/{container-file-generator.d.ts → Container-file-generator.d.ts} +1 -1
- package/dist/generator/{container-file-generator.d.ts.map → Container-file-generator.d.ts.map} +1 -1
- package/dist/generator/{container-file-generator.js → Container-file-generator.js} +1 -1
- package/dist/generator/{container-file-generator.js.map → Container-file-generator.js.map} +1 -1
- package/dist/generator/base-container-generator.d.ts +28 -0
- package/dist/generator/base-container-generator.d.ts.map +1 -0
- package/dist/generator/base-container-generator.js +27 -0
- package/dist/generator/base-container-generator.js.map +1 -0
- package/dist/generator/container-generator-factory.d.ts +40 -0
- package/dist/generator/container-generator-factory.d.ts.map +1 -0
- package/dist/generator/container-generator-factory.js +84 -0
- package/dist/generator/container-generator-factory.js.map +1 -0
- package/dist/generator/flat/container-generator.d.ts +8 -0
- package/dist/generator/flat/container-generator.d.ts.map +1 -0
- package/dist/generator/flat/container-generator.js +35 -0
- package/dist/generator/flat/container-generator.js.map +1 -0
- package/dist/generator/flat/dependency-resolver.d.ts +11 -0
- package/dist/generator/flat/dependency-resolver.d.ts.map +1 -0
- package/dist/generator/flat/dependency-resolver.js +83 -0
- package/dist/generator/flat/dependency-resolver.js.map +1 -0
- package/dist/generator/flat/flat-container-generator.d.ts +25 -0
- package/dist/generator/flat/flat-container-generator.d.ts.map +1 -0
- package/dist/generator/flat/flat-container-generator.js +44 -0
- package/dist/generator/flat/flat-container-generator.js.map +1 -0
- package/dist/generator/flat/instantiation-generator.d.ts +21 -0
- package/dist/generator/flat/instantiation-generator.d.ts.map +1 -0
- package/dist/generator/flat/instantiation-generator.js +116 -0
- package/dist/generator/flat/instantiation-generator.js.map +1 -0
- package/dist/generator/flat-container-generator.d.ts +25 -0
- package/dist/generator/flat-container-generator.d.ts.map +1 -0
- package/dist/generator/flat-container-generator.js +44 -0
- package/dist/generator/flat-container-generator.js.map +1 -0
- package/dist/generator/import-generator.d.ts.map +1 -1
- package/dist/generator/import-generator.js +2 -4
- package/dist/generator/import-generator.js.map +1 -1
- package/dist/generator/index.d.ts +16 -0
- package/dist/generator/index.d.ts.map +1 -1
- package/dist/generator/index.js +25 -13
- package/dist/generator/index.js.map +1 -1
- package/dist/generator/instantiation-generator.d.ts +13 -0
- package/dist/generator/instantiation-generator.d.ts.map +1 -1
- package/dist/generator/instantiation-generator.js +96 -133
- package/dist/generator/instantiation-generator.js.map +1 -1
- package/dist/generator/modular/class-sorter.d.ts +17 -0
- package/dist/generator/modular/class-sorter.d.ts.map +1 -0
- package/dist/generator/modular/class-sorter.js +40 -0
- package/dist/generator/modular/class-sorter.js.map +1 -0
- package/dist/generator/modular/container-aggregator.d.ts +18 -0
- package/dist/generator/modular/container-aggregator.d.ts.map +1 -0
- package/dist/generator/modular/container-aggregator.js +34 -0
- package/dist/generator/modular/container-aggregator.js.map +1 -0
- package/dist/generator/modular/index.d.ts +5 -0
- package/dist/generator/modular/index.d.ts.map +1 -0
- package/dist/generator/modular/index.js +21 -0
- package/dist/generator/modular/index.js.map +1 -0
- package/dist/generator/modular/modular-container-code-generator.d.ts +65 -0
- package/dist/generator/modular/modular-container-code-generator.d.ts.map +1 -0
- package/dist/generator/modular/modular-container-code-generator.js +157 -0
- package/dist/generator/modular/modular-container-code-generator.js.map +1 -0
- package/dist/generator/modular/modular-container-generator.d.ts +21 -0
- package/dist/generator/modular/modular-container-generator.d.ts.map +1 -0
- package/dist/generator/modular/modular-container-generator.js +57 -0
- package/dist/generator/modular/modular-container-generator.js.map +1 -0
- package/dist/generator/modular/module-container-function-generator.d.ts +78 -0
- package/dist/generator/modular/module-container-function-generator.d.ts.map +1 -0
- package/dist/generator/modular/module-container-function-generator.js +246 -0
- package/dist/generator/modular/module-container-function-generator.js.map +1 -0
- package/dist/generator/modular/module-dependency-resolver.d.ts +36 -0
- package/dist/generator/modular/module-dependency-resolver.d.ts.map +1 -0
- package/dist/generator/modular/module-dependency-resolver.js +69 -0
- package/dist/generator/modular/module-dependency-resolver.js.map +1 -0
- package/dist/generator/modular/module-export-generator.d.ts +42 -0
- package/dist/generator/modular/module-export-generator.d.ts.map +1 -0
- package/dist/generator/modular/module-export-generator.js +82 -0
- package/dist/generator/modular/module-export-generator.js.map +1 -0
- package/dist/generator/modular/module-instantiation-generator.d.ts +26 -0
- package/dist/generator/modular/module-instantiation-generator.d.ts.map +1 -0
- package/dist/generator/modular/module-instantiation-generator.js +54 -0
- package/dist/generator/modular/module-instantiation-generator.js.map +1 -0
- package/dist/generator/modular/module-scope-generator.d.ts +47 -0
- package/dist/generator/modular/module-scope-generator.d.ts.map +1 -0
- package/dist/generator/modular/module-scope-generator.js +111 -0
- package/dist/generator/modular/module-scope-generator.js.map +1 -0
- package/dist/generator/modular/refactored-modular-container-generator.d.ts +38 -0
- package/dist/generator/modular/refactored-modular-container-generator.d.ts.map +1 -0
- package/dist/generator/modular/refactored-modular-container-generator.js +73 -0
- package/dist/generator/modular/refactored-modular-container-generator.js.map +1 -0
- package/dist/generator/modular-container-generator.d.ts +21 -0
- package/dist/generator/modular-container-generator.d.ts.map +1 -0
- package/dist/generator/modular-container-generator.js +57 -0
- package/dist/generator/modular-container-generator.js.map +1 -0
- package/dist/generator/module-container-function-generator.d.ts +30 -0
- package/dist/generator/module-container-function-generator.d.ts.map +1 -0
- package/dist/generator/module-container-function-generator.js +199 -0
- package/dist/generator/module-container-function-generator.js.map +1 -0
- package/package.json +2 -2
- package/dist/generator/module-container-generator.d.ts +0 -10
- package/dist/generator/module-container-generator.d.ts.map +0 -1
- package/dist/generator/module-container-generator.js +0 -51
- package/dist/generator/module-container-generator.js.map +0 -1
|
@@ -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":";;;AACA,+FAAyF;AACzF,uEAAkE;AAGlE;;;GAGG;AACH,MAAa,6BAA6B;IAIxC,YACE,kBAAsC,EAC9B,SAAkC;QAAlC,cAAS,GAAT,SAAS,CAAyB;QAE1C,IAAI,CAAC,gCAAgC,GAAG,IAAI,sEAAgC,CAC1E,kBAAkB,EAClB,SAAS,CACV,CAAC;QACF,IAAI,CAAC,qBAAqB,GAAG,IAAI,+CAAqB,CAAC,SAAS,CAAC,CAAC;IACpE,CAAC;IAED;;;;;OAKG;IACH,qBAAqB,CAAC,oBAA8C;QAClE,MAAM,gBAAgB,GAAG,IAAI,CAAC,mBAAmB,CAAC,oBAAoB,CAAC,CAAC;QACxE,MAAM,KAAK,GAAa,EAAE,CAAC;QAE3B,uCAAuC;QACvC,KAAK,MAAM,CAAC,UAAU,EAAE,OAAO,CAAC,IAAI,oBAAoB,EAAE,CAAC;YACzD,MAAM,cAAc,GAAG,IAAI,CAAC,gCAAgC,CAAC,sBAAsB,CACjF,UAAU,EACV,OAAO,EACP,gBAAgB,CACjB,CAAC;YACF,KAAK,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC;QAC7B,CAAC;QAED,gCAAgC;QAChC,MAAM,mBAAmB,GAAG,IAAI,CAAC,2BAA2B,CAAC,oBAAoB,EAAE,gBAAgB,CAAC,CAAC;QACrG,KAAK,CAAC,IAAI,CAAC,mBAAmB,CAAC,CAAC;QAEhC,+BAA+B;QAC/B,MAAM,UAAU,GAAG,IAAI,CAAC,yBAAyB,CAAC,oBAAoB,CAAC,CAAC;QACxE,KAAK,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;QAEvB,OAAO,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;IAC5B,CAAC;IAED;;;;;;OAMG;IACK,2BAA2B,CACjC,oBAA8C,EAC9C,gBAA6B;QAE7B,MAAM,oBAAoB,GAAG,IAAI,CAAC,4BAA4B,CAC5D,oBAAoB,EACpB,gBAAgB,CACjB,CAAC;QAEF,MAAM,mBAAmB,GAAG,IAAI,CAAC,2BAA2B,CAAC,oBAAoB,CAAC,CAAC;QAEnF,OAAO,gCAAgC;YAChC,GAAG,oBAAoB,MAAM;YAC7B,cAAc;YACd,GAAG,mBAAmB,IAAI;YAC1B,QAAQ;YACR,OAAO;YACP,6CAA6C,CAAC;IACvD,CAAC;IAED;;;;;;OAMG;IACK,4BAA4B,CAClC,oBAA8C,EAC9C,gBAA6B;QAE7B,MAAM,WAAW,GAAG,KAAK,CAAC,IAAI,CAAC,oBAAoB,CAAC,IAAI,EAAE,CAAC,CAAC;QAC5D,MAAM,cAAc,GAAa,EAAE,CAAC;QAEpC,kDAAkD;QAClD,MAAM,kBAAkB,GAAG,WAAW,CAAC,MAAM,CAAC,UAAU,CAAC,EAAE;YACzD,MAAM,OAAO,GAAG,oBAAoB,CAAC,GAAG,CAAC,UAAU,CAAE,CAAC;YACtD,MAAM,YAAY,GAAG,IAAI,CAAC,6BAA6B,CAAC,OAAO,EAAE,gBAAgB,CAAC,CAAC;YACnF,OAAO,YAAY,CAAC,IAAI,KAAK,CAAC,CAAC;QACjC,CAAC,CAAC,CAAC;QAEH,KAAK,MAAM,UAAU,IAAI,kBAAkB,EAAE,CAAC;YAC5C,MAAM,OAAO,GAAG,oBAAoB,CAAC,GAAG,CAAC,UAAU,CAAE,CAAC;YACtD,MAAM,aAAa,GAAG,IAAI,CAAC,qBAAqB,CAAC,2BAA2B,CAC1E,UAAU,EACV,OAAO,EACP,gBAAgB,CACjB,CAAC;YACF,cAAc,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;QACrC,CAAC;QAED,gDAAgD;QAChD,MAAM,eAAe,GAAG,WAAW,CAAC,MAAM,CAAC,UAAU,CAAC,EAAE,CACtD,CAAC,kBAAkB,CAAC,QAAQ,CAAC,UAAU,CAAC,CACzC,CAAC;QAEF,KAAK,MAAM,UAAU,IAAI,eAAe,EAAE,CAAC;YACzC,MAAM,OAAO,GAAG,oBAAoB,CAAC,GAAG,CAAC,UAAU,CAAE,CAAC;YACtD,MAAM,aAAa,GAAG,IAAI,CAAC,qBAAqB,CAAC,2BAA2B,CAC1E,UAAU,EACV,OAAO,EACP,gBAAgB,CACjB,CAAC;YACF,cAAc,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;QACrC,CAAC;QAED,OAAO,cAAc,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACnC,CAAC;IAED;;;;;OAKG;IACK,2BAA2B,CAAC,oBAA8C;QAChF,MAAM,UAAU,GAAa,EAAE,CAAC;QAEhC,KAAK,MAAM,CAAC,UAAU,EAAE,OAAO,CAAC,IAAI,oBAAoB,EAAE,CAAC;YACzD,KAAK,MAAM,SAAS,IAAI,OAAO,EAAE,CAAC;gBAChC,MAAM,YAAY,GAAG,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;gBACpD,MAAM,cAAc,GAAG,IAAI,CAAC,SAAS,CAAC,UAAU,CAAC,CAAC;gBAClD,UAAU,CAAC,IAAI,CAAC,WAAW,YAAY,eAAe,cAAc,UAAU,YAAY,KAAK,CAAC,CAAC;YACnG,CAAC;QACH,CAAC;QAED,OAAO,UAAU,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IAChC,CAAC;IAED;;;;;OAKG;IACK,yBAAyB,CAAC,oBAA8C;QAC9E,MAAM,cAAc,GAAa,EAAE,CAAC;QAEpC,KAAK,MAAM,CAAC,EAAE,OAAO,CAAC,IAAI,oBAAoB,EAAE,CAAC;YAC/C,KAAK,MAAM,SAAS,IAAI,OAAO,EAAE,CAAC;gBAChC,MAAM,YAAY,GAAG,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;gBACpD,MAAM,aAAa,GAAG,SAAS,CAAC,aAAa,IAAI,SAAS,CAAC,IAAI,CAAC;gBAChE,cAAc,CAAC,IAAI,CAAC,KAAK,YAAY,KAAK,aAAa,GAAG,CAAC,CAAC;YAC9D,CAAC;QACH,CAAC;QAED,OAAO,qCAAqC,cAAc,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC;IAC9E,CAAC;IAED;;;;;OAKG;IACK,mBAAmB,CAAC,oBAA8C;QACxE,MAAM,UAAU,GAAgB,EAAE,CAAC;QACnC,KAAK,MAAM,OAAO,IAAI,oBAAoB,CAAC,MAAM,EAAE,EAAE,CAAC;YACpD,UAAU,CAAC,IAAI,CAAC,GAAG,OAAO,CAAC,CAAC;QAC9B,CAAC;QACD,OAAO,UAAU,CAAC;IACpB,CAAC;IAED;;;;;;OAMG;IACK,6BAA6B,CACnC,aAA0B,EAC1B,gBAA6B;QAE7B,MAAM,YAAY,GAAG,IAAI,GAAG,EAAU,CAAC;QACvC,MAAM,uBAAuB,GAAG,IAAI,GAAG,CAAC,aAAa,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC;QAEjF,KAAK,MAAM,SAAS,IAAI,aAAa,EAAE,CAAC;YACtC,KAAK,MAAM,GAAG,IAAI,SAAS,CAAC,YAAY,EAAE,CAAC;gBACzC,IAAI,CAAC,uBAAuB,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC;oBACtC,MAAM,aAAa,GAAG,gBAAgB,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,aAAa,KAAK,GAAG,CAAC,CAAC;oBAC1E,IAAI,aAAa,EAAE,CAAC;wBAClB,YAAY,CAAC,GAAG,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC;oBACvC,CAAC;gBACH,CAAC;YACH,CAAC;QACH,CAAC;QAED,OAAO,YAAY,CAAC;IACtB,CAAC;CACF;AA3MD,sEA2MC"}
|
|
@@ -0,0 +1,21 @@
|
|
|
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
|
+
/**
|
|
7
|
+
* Generator for modular container structure.
|
|
8
|
+
* Handles module-based dependency injection with inter-module dependencies.
|
|
9
|
+
*/
|
|
10
|
+
export declare class ModularContainerGenerator extends BaseContainerGenerator {
|
|
11
|
+
private moduleGroupedClasses;
|
|
12
|
+
private moduleDependencyResolver;
|
|
13
|
+
private moduleContainerFunctionGenerator;
|
|
14
|
+
private moduleInstantiationGenerator;
|
|
15
|
+
private containerAggregator;
|
|
16
|
+
constructor(fileWriter: FileWriter, moduleGroupedClasses: Map<string, ClassInfo[]>, moduleDependencyResolver: ModuleDependencyResolver, importGenerator: ImportGenerator);
|
|
17
|
+
generate(): void;
|
|
18
|
+
protected generateContainerCode(sortedModules?: string[], moduleDependencies?: Map<string, Set<string>>): string;
|
|
19
|
+
private generateModuleContainers;
|
|
20
|
+
}
|
|
21
|
+
//# 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;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"}
|
|
@@ -0,0 +1,57 @@
|
|
|
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
|
+
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
|
+
/**
|
|
10
|
+
* Generator for modular container structure.
|
|
11
|
+
* Handles module-based dependency injection with inter-module dependencies.
|
|
12
|
+
*/
|
|
13
|
+
class ModularContainerGenerator extends base_container_generator_1.BaseContainerGenerator {
|
|
14
|
+
constructor(fileWriter, moduleGroupedClasses, moduleDependencyResolver, importGenerator) {
|
|
15
|
+
super(fileWriter, importGenerator);
|
|
16
|
+
this.moduleGroupedClasses = moduleGroupedClasses;
|
|
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();
|
|
21
|
+
}
|
|
22
|
+
generate() {
|
|
23
|
+
// First, check for module-level cycles
|
|
24
|
+
const moduleResult = this.moduleDependencyResolver.resolve();
|
|
25
|
+
if (moduleResult.cycles.length > 0) {
|
|
26
|
+
throw new Error(`Circular dependencies detected between modules: ${JSON.stringify(moduleResult.cycles)}`);
|
|
27
|
+
}
|
|
28
|
+
// Then resolve class-level dependencies within each module
|
|
29
|
+
const allClasses = Array.from(this.moduleGroupedClasses.values()).flat();
|
|
30
|
+
const dependencyResolver = new dependency_resolver_1.DependencyResolver(allClasses);
|
|
31
|
+
const sortResult = dependencyResolver.resolve();
|
|
32
|
+
if (sortResult.cycles.length > 0) {
|
|
33
|
+
throw new Error(`Circular dependencies detected within classes: ${JSON.stringify(sortResult.cycles)}`);
|
|
34
|
+
}
|
|
35
|
+
const containerCode = this.generateContainerCode(moduleResult.sortedModules, moduleResult.moduleDependencies);
|
|
36
|
+
this.writeContainer(containerCode);
|
|
37
|
+
}
|
|
38
|
+
generateContainerCode(sortedModules, moduleDependencies) {
|
|
39
|
+
if (!sortedModules || !moduleDependencies) {
|
|
40
|
+
const moduleResult = this.moduleDependencyResolver.resolve();
|
|
41
|
+
sortedModules = moduleResult.sortedModules;
|
|
42
|
+
moduleDependencies = moduleResult.moduleDependencies;
|
|
43
|
+
}
|
|
44
|
+
const imports = this.importGenerator.generateImports();
|
|
45
|
+
const moduleContainers = this.generateModuleContainers(sortedModules, moduleDependencies);
|
|
46
|
+
const aggregatedContainer = this.containerAggregator.generateAggregatedContainer(sortedModules);
|
|
47
|
+
const typeExport = this.containerAggregator.generateModularTypeExport();
|
|
48
|
+
return `${imports}\n\n${moduleContainers}\n\n${aggregatedContainer}\n\n${typeExport}\n`;
|
|
49
|
+
}
|
|
50
|
+
generateModuleContainers(sortedModules, moduleDependencies) {
|
|
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');
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
exports.ModularContainerGenerator = ModularContainerGenerator;
|
|
57
|
+
//# 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,78 @@
|
|
|
1
|
+
import { ClassInfo } from '../../types';
|
|
2
|
+
/**
|
|
3
|
+
* Responsible for generating module container functions.
|
|
4
|
+
* Handles the creation of container functions for each module.
|
|
5
|
+
*/
|
|
6
|
+
export declare class ModuleContainerFunctionGenerator {
|
|
7
|
+
private moduleGroupedClasses;
|
|
8
|
+
constructor(moduleGroupedClasses: Map<string, ClassInfo[]>);
|
|
9
|
+
/**
|
|
10
|
+
* Generates container functions for all modules.
|
|
11
|
+
*/
|
|
12
|
+
generateModuleContainerFunctions(sortedModules: string[], moduleDependencies: Map<string, Set<string>>): string[];
|
|
13
|
+
/**
|
|
14
|
+
* Creates a container function for a specific module.
|
|
15
|
+
*/
|
|
16
|
+
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
|
+
}
|
|
78
|
+
//# 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;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"}
|
|
@@ -0,0 +1,246 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.ModuleContainerFunctionGenerator = void 0;
|
|
4
|
+
const topological_sorter_1 = require("../../utils/topological-sorter");
|
|
5
|
+
/**
|
|
6
|
+
* Responsible for generating module container functions.
|
|
7
|
+
* Handles the creation of container functions for each module.
|
|
8
|
+
*/
|
|
9
|
+
class ModuleContainerFunctionGenerator {
|
|
10
|
+
constructor(moduleGroupedClasses) {
|
|
11
|
+
this.moduleGroupedClasses = moduleGroupedClasses;
|
|
12
|
+
}
|
|
13
|
+
/**
|
|
14
|
+
* Generates container functions for all modules.
|
|
15
|
+
*/
|
|
16
|
+
generateModuleContainerFunctions(sortedModules, moduleDependencies) {
|
|
17
|
+
const moduleContainerFunctions = [];
|
|
18
|
+
for (const moduleName of sortedModules) {
|
|
19
|
+
const moduleClasses = this.moduleGroupedClasses.get(moduleName);
|
|
20
|
+
if (!moduleClasses)
|
|
21
|
+
continue;
|
|
22
|
+
const moduleContainerFunction = this.createModuleContainerFunction(moduleName, moduleClasses, moduleDependencies);
|
|
23
|
+
moduleContainerFunctions.push(moduleContainerFunction);
|
|
24
|
+
}
|
|
25
|
+
return moduleContainerFunctions;
|
|
26
|
+
}
|
|
27
|
+
/**
|
|
28
|
+
* Creates a container function for a specific module.
|
|
29
|
+
*/
|
|
30
|
+
createModuleContainerFunction(moduleName, moduleClasses, moduleDependencies) {
|
|
31
|
+
const moduleFunctionName = `create${moduleName}Container`;
|
|
32
|
+
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
|
+
return `${functionSignature} {\n${functionBody}\n}`;
|
|
37
|
+
}
|
|
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
|
+
}
|
|
245
|
+
exports.ModuleContainerFunctionGenerator = ModuleContainerFunctionGenerator;
|
|
246
|
+
//# 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":"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"}
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
import { ClassInfo } from '../../types';
|
|
2
|
+
/**
|
|
3
|
+
* Handles dependency resolution for modular container generation.
|
|
4
|
+
* Determines whether dependencies are internal or external to modules.
|
|
5
|
+
*/
|
|
6
|
+
export declare class ModuleDependencyResolver {
|
|
7
|
+
/**
|
|
8
|
+
* Finds external module dependencies for a given class.
|
|
9
|
+
* External dependencies are those that exist in other modules.
|
|
10
|
+
*
|
|
11
|
+
* @param classInfo - The class to find external dependencies for
|
|
12
|
+
* @param currentModuleClasses - Classes in the current module
|
|
13
|
+
* @param allModuleClasses - All classes across all modules
|
|
14
|
+
* @returns Array of external dependency class names
|
|
15
|
+
*/
|
|
16
|
+
static findExternalModuleDependencies(classInfo: ClassInfo, currentModuleClasses: ClassInfo[], allModuleClasses: ClassInfo[]): string[];
|
|
17
|
+
/**
|
|
18
|
+
* Finds internal module dependencies for a given class.
|
|
19
|
+
* Internal dependencies are those that exist within the same module.
|
|
20
|
+
*
|
|
21
|
+
* @param classInfo - The class to find internal dependencies for
|
|
22
|
+
* @param currentModuleClasses - Classes in the current module
|
|
23
|
+
* @returns Array of internal dependency class names
|
|
24
|
+
*/
|
|
25
|
+
static findInternalModuleDependencies(classInfo: ClassInfo, currentModuleClasses: ClassInfo[]): string[];
|
|
26
|
+
/**
|
|
27
|
+
* Gets all external module dependencies for a list of classes.
|
|
28
|
+
*
|
|
29
|
+
* @param classes - Classes to analyze
|
|
30
|
+
* @param currentModuleClasses - Classes in the current module
|
|
31
|
+
* @param allModuleClasses - All classes across all modules
|
|
32
|
+
* @returns Set of unique external dependency class names
|
|
33
|
+
*/
|
|
34
|
+
static getAllExternalDependencies(classes: ClassInfo[], currentModuleClasses: ClassInfo[], allModuleClasses: ClassInfo[]): Set<string>;
|
|
35
|
+
}
|
|
36
|
+
//# 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;AAExC;;;GAGG;AACH,qBAAa,wBAAwB;IACnC;;;;;;;;OAQG;IACH,MAAM,CAAC,8BAA8B,CACnC,SAAS,EAAE,SAAS,EACpB,oBAAoB,EAAE,SAAS,EAAE,EACjC,gBAAgB,EAAE,SAAS,EAAE,GAC5B,MAAM,EAAE;IAiBX;;;;;;;OAOG;IACH,MAAM,CAAC,8BAA8B,CACnC,SAAS,EAAE,SAAS,EACpB,oBAAoB,EAAE,SAAS,EAAE,GAChC,MAAM,EAAE;IAcX;;;;;;;OAOG;IACH,MAAM,CAAC,0BAA0B,CAC/B,OAAO,EAAE,SAAS,EAAE,EACpB,oBAAoB,EAAE,SAAS,EAAE,EACjC,gBAAgB,EAAE,SAAS,EAAE,GAC5B,GAAG,CAAC,MAAM,CAAC;CAcf"}
|