@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.
- 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/commands/generate.d.ts.map +1 -1
- package/dist/commands/generate.js +2 -8
- 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/base-container-code-generator.d.ts +15 -0
- package/dist/generator/base-container-code-generator.d.ts.map +1 -0
- package/dist/generator/base-container-code-generator.js +23 -0
- package/dist/generator/base-container-code-generator.js.map +1 -0
- package/dist/generator/base-container-generator.d.ts +1 -1
- package/dist/generator/base-container-generator.d.ts.map +1 -1
- package/dist/generator/base-container-generator.js +2 -3
- package/dist/generator/base-container-generator.js.map +1 -1
- package/dist/generator/base-dependency-resolver.d.ts +26 -0
- package/dist/generator/base-dependency-resolver.d.ts.map +1 -0
- package/dist/generator/base-dependency-resolver.js +72 -0
- package/dist/generator/base-dependency-resolver.js.map +1 -0
- package/dist/generator/base-instantiation-generator.d.ts +55 -0
- package/dist/generator/base-instantiation-generator.d.ts.map +1 -0
- package/dist/generator/base-instantiation-generator.js +117 -0
- package/dist/generator/base-instantiation-generator.js.map +1 -0
- package/dist/generator/container-generator-factory.d.ts +2 -2
- package/dist/generator/container-generator-factory.d.ts.map +1 -1
- package/dist/generator/container-generator-factory.js +22 -26
- package/dist/generator/container-generator-factory.js.map +1 -1
- package/dist/generator/duplicate-import-resolver.d.ts +44 -0
- package/dist/generator/duplicate-import-resolver.d.ts.map +1 -0
- package/dist/generator/duplicate-import-resolver.js +162 -0
- package/dist/generator/duplicate-import-resolver.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 +17 -0
- package/dist/generator/flat/container-generator.js.map +1 -0
- package/dist/generator/flat/dependency-resolver.d.ts +8 -0
- package/dist/generator/flat/dependency-resolver.d.ts.map +1 -0
- package/dist/generator/flat/dependency-resolver.js +43 -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 +24 -0
- package/dist/generator/flat/instantiation-generator.d.ts.map +1 -0
- package/dist/generator/flat/instantiation-generator.js +125 -0
- package/dist/generator/flat/instantiation-generator.js.map +1 -0
- package/dist/generator/flat-container-generator.d.ts +2 -1
- package/dist/generator/flat-container-generator.d.ts.map +1 -1
- package/dist/generator/flat-container-generator.js +2 -2
- package/dist/generator/flat-container-generator.js.map +1 -1
- 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 +2 -3
- package/dist/generator/index.d.ts.map +1 -1
- package/dist/generator/index.js +2 -4
- 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 +11 -0
- package/dist/generator/modular/container-aggregator.d.ts.map +1 -0
- package/dist/generator/modular/container-aggregator.js +23 -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 +24 -0
- package/dist/generator/modular/modular-container-generator.d.ts.map +1 -0
- package/dist/generator/modular/modular-container-generator.js +54 -0
- package/dist/generator/modular/modular-container-generator.js.map +1 -0
- package/dist/generator/modular/module-container-function-generator.d.ts +24 -0
- package/dist/generator/modular/module-container-function-generator.d.ts.map +1 -0
- package/dist/generator/modular/module-container-function-generator.js +42 -0
- package/dist/generator/modular/module-container-function-generator.js.map +1 -0
- package/dist/generator/modular/module-dependency-resolver.d.ts +22 -0
- package/dist/generator/modular/module-dependency-resolver.d.ts.map +1 -0
- package/dist/generator/modular/module-dependency-resolver.js +56 -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-function-body-generator.d.ts +15 -0
- package/dist/generator/modular/module-function-body-generator.d.ts.map +1 -0
- package/dist/generator/modular/module-function-body-generator.js +25 -0
- package/dist/generator/modular/module-function-body-generator.js.map +1 -0
- package/dist/generator/modular/module-function-signature-generator.d.ts +15 -0
- package/dist/generator/modular/module-function-signature-generator.d.ts.map +1 -0
- package/dist/generator/modular/module-function-signature-generator.js +24 -0
- package/dist/generator/modular/module-function-signature-generator.js.map +1 -0
- package/dist/generator/modular/module-instantiation-generator.d.ts +12 -0
- package/dist/generator/modular/module-instantiation-generator.d.ts.map +1 -0
- package/dist/generator/modular/module-instantiation-generator.js +26 -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 +5 -4
- package/dist/generator/modular-container-generator.d.ts.map +1 -1
- package/dist/generator/modular-container-generator.js +13 -171
- package/dist/generator/modular-container-generator.js.map +1 -1
- 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/dist/generator/shared/dependency-resolver-utils.d.ts +28 -0
- package/dist/generator/shared/dependency-resolver-utils.d.ts.map +1 -0
- package/dist/generator/shared/dependency-resolver-utils.js +67 -0
- package/dist/generator/shared/dependency-resolver-utils.js.map +1 -0
- package/dist/generator/shared/index.d.ts +2 -0
- package/dist/generator/shared/index.d.ts.map +1 -0
- package/dist/generator/shared/index.js +18 -0
- package/dist/generator/shared/index.js.map +1 -0
- package/dist/generator/shared/instantiation-utils.d.ts +236 -0
- package/dist/generator/shared/instantiation-utils.d.ts.map +1 -0
- package/dist/generator/shared/instantiation-utils.js +499 -0
- package/dist/generator/shared/instantiation-utils.js.map +1 -0
- package/package.json +1 -1
|
@@ -0,0 +1,117 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.BaseInstantiationGenerator = void 0;
|
|
4
|
+
const naming_1 = require("../utils/naming");
|
|
5
|
+
/**
|
|
6
|
+
* Base class for instantiation generators.
|
|
7
|
+
* Contains common functionality for generating class instantiations.
|
|
8
|
+
*/
|
|
9
|
+
class BaseInstantiationGenerator {
|
|
10
|
+
constructor(classes) {
|
|
11
|
+
this.classes = classes;
|
|
12
|
+
this.classMap = new Map(classes.map(c => [c.name, c]));
|
|
13
|
+
this.interfaceToClassMap = this.createInterfaceToClassMap();
|
|
14
|
+
}
|
|
15
|
+
/**
|
|
16
|
+
* Creates a map of interface names to their implementing class names.
|
|
17
|
+
*/
|
|
18
|
+
createInterfaceToClassMap() {
|
|
19
|
+
const interfaceToClassMap = new Map();
|
|
20
|
+
for (const classInfo of this.classes) {
|
|
21
|
+
if (classInfo.interfaceName) {
|
|
22
|
+
interfaceToClassMap.set(classInfo.interfaceName, classInfo.name);
|
|
23
|
+
}
|
|
24
|
+
}
|
|
25
|
+
return interfaceToClassMap;
|
|
26
|
+
}
|
|
27
|
+
/**
|
|
28
|
+
* Separates classes by their scope (singleton or transient).
|
|
29
|
+
*/
|
|
30
|
+
separateClassesByScope() {
|
|
31
|
+
return {
|
|
32
|
+
singletonClasses: this.classes.filter(c => c.scope === 'singleton'),
|
|
33
|
+
transientClasses: this.classes.filter(c => c.scope === 'transient')
|
|
34
|
+
};
|
|
35
|
+
}
|
|
36
|
+
/**
|
|
37
|
+
* Filters singleton class names from a list of sorted classes.
|
|
38
|
+
*/
|
|
39
|
+
filterSingletonClassNames(sortedClasses, singletonClasses) {
|
|
40
|
+
return sortedClasses.filter(name => singletonClasses.some(c => c.name === name));
|
|
41
|
+
}
|
|
42
|
+
/**
|
|
43
|
+
* Generates transient factory functions for a list of transient classes.
|
|
44
|
+
*/
|
|
45
|
+
generateTransientFactories(transientClasses) {
|
|
46
|
+
if (transientClasses.length === 0)
|
|
47
|
+
return '';
|
|
48
|
+
const factories = transientClasses.map(classInfo => this.createTransientFactory(classInfo));
|
|
49
|
+
return [
|
|
50
|
+
'// Lazy loading setup for transient dependencies',
|
|
51
|
+
...factories
|
|
52
|
+
].join('\n');
|
|
53
|
+
}
|
|
54
|
+
/**
|
|
55
|
+
* Creates a factory function for a transient class.
|
|
56
|
+
*/
|
|
57
|
+
createTransientFactory(classInfo) {
|
|
58
|
+
const variableName = (0, naming_1.toVariableName)(classInfo.name);
|
|
59
|
+
const constructorArgs = this.generateConstructorArguments(classInfo);
|
|
60
|
+
return constructorArgs
|
|
61
|
+
? `const ${variableName}Factory = (): ${classInfo.name} => new ${classInfo.name}(${constructorArgs});`
|
|
62
|
+
: `const ${variableName}Factory = (): ${classInfo.name} => new ${classInfo.name}();`;
|
|
63
|
+
}
|
|
64
|
+
/**
|
|
65
|
+
* Generates singleton variable declarations for a list of singleton class names.
|
|
66
|
+
*/
|
|
67
|
+
generateSingletonVariables(singletonClassNames) {
|
|
68
|
+
if (singletonClassNames.length === 0)
|
|
69
|
+
return '';
|
|
70
|
+
const variables = singletonClassNames.map(className => {
|
|
71
|
+
const variableName = (0, naming_1.toVariableName)(className);
|
|
72
|
+
return `let ${variableName}: ${className} | undefined;`;
|
|
73
|
+
});
|
|
74
|
+
return [
|
|
75
|
+
'// Lazy initialization variables for singletons',
|
|
76
|
+
...variables
|
|
77
|
+
].join('\n');
|
|
78
|
+
}
|
|
79
|
+
/**
|
|
80
|
+
* Generates singleton getter functions for a list of singleton class names.
|
|
81
|
+
*/
|
|
82
|
+
generateSingletonGetters(singletonClassNames) {
|
|
83
|
+
if (singletonClassNames.length === 0)
|
|
84
|
+
return '';
|
|
85
|
+
const getters = [...singletonClassNames].reverse().map(className => this.createSingletonGetter(className)).filter(getter => getter !== null);
|
|
86
|
+
return [
|
|
87
|
+
'// Lazy getter functions for singletons',
|
|
88
|
+
...getters
|
|
89
|
+
].join('\n');
|
|
90
|
+
}
|
|
91
|
+
/**
|
|
92
|
+
* Creates a getter function for a singleton class.
|
|
93
|
+
*/
|
|
94
|
+
createSingletonGetter(className) {
|
|
95
|
+
const classInfo = this.classMap.get(className);
|
|
96
|
+
if (!classInfo)
|
|
97
|
+
return null;
|
|
98
|
+
const variableName = (0, naming_1.toVariableName)(className);
|
|
99
|
+
const getterName = `get${className}`;
|
|
100
|
+
const constructorArgs = this.generateConstructorArguments(classInfo);
|
|
101
|
+
const instantiation = constructorArgs
|
|
102
|
+
? `new ${className}(${constructorArgs})`
|
|
103
|
+
: `new ${className}()`;
|
|
104
|
+
return `const ${getterName} = (): ${className} => {\n if (!${variableName}) {\n ${variableName} = ${instantiation};\n }\n return ${variableName};\n};`;
|
|
105
|
+
}
|
|
106
|
+
/**
|
|
107
|
+
* Creates a managed dependency call based on the dependency's scope.
|
|
108
|
+
*/
|
|
109
|
+
createManagedDependencyCall(depClassInfo, implementingClass) {
|
|
110
|
+
if (depClassInfo.scope === 'transient') {
|
|
111
|
+
return `${(0, naming_1.toVariableName)(implementingClass)}Factory()`;
|
|
112
|
+
}
|
|
113
|
+
return `get${implementingClass}()`;
|
|
114
|
+
}
|
|
115
|
+
}
|
|
116
|
+
exports.BaseInstantiationGenerator = BaseInstantiationGenerator;
|
|
117
|
+
//# sourceMappingURL=base-instantiation-generator.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"base-instantiation-generator.js","sourceRoot":"","sources":["../../src/generator/base-instantiation-generator.ts"],"names":[],"mappings":"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"}
|
|
@@ -14,7 +14,7 @@ export declare class ContainerGeneratorFactory {
|
|
|
14
14
|
* @param outputPath - The output path for the generated container file
|
|
15
15
|
* @returns The appropriate container generator instance with dependencies injected
|
|
16
16
|
*/
|
|
17
|
-
static create(classesOrModules:
|
|
17
|
+
static create(classesOrModules: Map<string, ClassInfo[]>, outputPath: string): BaseContainerGenerator;
|
|
18
18
|
/**
|
|
19
19
|
* Determines if the input represents a modular structure.
|
|
20
20
|
*
|
|
@@ -35,6 +35,6 @@ export declare class ContainerGeneratorFactory {
|
|
|
35
35
|
* @param classesOrModules - The input to count modules from
|
|
36
36
|
* @returns The number of modules, or 1 for flat structure
|
|
37
37
|
*/
|
|
38
|
-
static getModuleCount(classesOrModules:
|
|
38
|
+
static getModuleCount(classesOrModules: Map<string, ClassInfo[]>): number;
|
|
39
39
|
}
|
|
40
40
|
//# sourceMappingURL=container-generator-factory.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"container-generator-factory.d.ts","sourceRoot":"","sources":["../../src/generator/container-generator-factory.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,sBAAsB,EAAE,MAAM,4BAA4B,CAAC;
|
|
1
|
+
{"version":3,"file":"container-generator-factory.d.ts","sourceRoot":"","sources":["../../src/generator/container-generator-factory.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,sBAAsB,EAAE,MAAM,4BAA4B,CAAC;AAKpE,OAAO,EAAG,SAAS,EAAE,MAAM,UAAU,CAAC;AAQtC;;;;GAIG;AACH,qBAAa,yBAAyB;IACpC;;;;;;;OAOG;IACH,MAAM,CAAC,MAAM,CACX,gBAAgB,EAAG,GAAG,CAAC,MAAM,EAAE,SAAS,EAAE,CAAC,EAC3C,UAAU,EAAE,MAAM,GACjB,sBAAsB;IAgCzB;;;;;OAKG;IACH,MAAM,CAAC,SAAS,CAAC,gBAAgB,EAAE,SAAS,EAAE,GAAG,GAAG,CAAC,MAAM,EAAE,SAAS,EAAE,CAAC,GAAG,OAAO;IAInF;;;;;OAKG;IACH,MAAM,CAAC,aAAa,CAAC,gBAAgB,EAAE,SAAS,EAAE,GAAG,GAAG,CAAC,MAAM,EAAE,SAAS,EAAE,CAAC,GAAG,MAAM;IAQtF;;;;;OAKG;IACH,MAAM,CAAC,cAAc,CAAC,gBAAgB,EAAG,GAAG,CAAC,MAAM,EAAE,SAAS,EAAE,CAAC,GAAG,MAAM;CAG3E"}
|
|
@@ -1,13 +1,16 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.ContainerGeneratorFactory = void 0;
|
|
4
|
-
const
|
|
5
|
-
const modular_container_generator_1 = require("./modular-container-generator");
|
|
6
|
-
const dependency_resolver_1 = require("../analyser/dependency-resolver");
|
|
4
|
+
const modular_container_generator_1 = require("./modular/modular-container-generator");
|
|
7
5
|
const module_dependency_resolver_1 = require("../analyser/module-dependency-resolver");
|
|
8
6
|
const import_generator_1 = require("./import-generator");
|
|
9
|
-
const
|
|
10
|
-
const
|
|
7
|
+
const file_writer_1 = require("./file-writer");
|
|
8
|
+
const module_container_function_generator_1 = require("./modular/module-container-function-generator");
|
|
9
|
+
const module_function_signature_generator_1 = require("./modular/module-function-signature-generator");
|
|
10
|
+
const module_dependency_resolver_2 = require("./modular/module-dependency-resolver");
|
|
11
|
+
const module_function_body_generator_1 = require("./modular/module-function-body-generator");
|
|
12
|
+
const module_instantiation_generator_1 = require("./modular/module-instantiation-generator");
|
|
13
|
+
const container_aggregator_1 = require("./modular/container-aggregator");
|
|
11
14
|
/**
|
|
12
15
|
* Factory class for creating the appropriate container generator
|
|
13
16
|
* based on the input type (flat classes or module-grouped classes).
|
|
@@ -23,21 +26,19 @@ class ContainerGeneratorFactory {
|
|
|
23
26
|
* @returns The appropriate container generator instance with dependencies injected
|
|
24
27
|
*/
|
|
25
28
|
static create(classesOrModules, outputPath) {
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
return new flat_container_generator_1.FlatContainerGenerator(outputPath, classesOrModules, dependencyResolver, importGenerator, instantiationGenerator, containerCodeGenerator);
|
|
40
|
-
}
|
|
29
|
+
// Create FileWriter instance that will be injected into generators
|
|
30
|
+
const fileWriter = new file_writer_1.FileWriter(outputPath);
|
|
31
|
+
// Module-based generation - create dependencies and inject in constructor
|
|
32
|
+
const moduleDependencyResolver = new module_dependency_resolver_1.ModuleDependencyResolver(classesOrModules);
|
|
33
|
+
const allClasses = Array.from(classesOrModules.values()).flat();
|
|
34
|
+
const importGenerator = new import_generator_1.ImportGenerator(allClasses);
|
|
35
|
+
const moduleFunctionSignatureGenerator = new module_function_signature_generator_1.ModuleFunctionSignatureGenerator();
|
|
36
|
+
const modularModuleDependencyResolver = new module_dependency_resolver_2.ModuleDependencyResolver(classesOrModules);
|
|
37
|
+
const moduleFunctionBodyGenerator = new module_function_body_generator_1.ModuleFunctionBodyGenerator(modularModuleDependencyResolver);
|
|
38
|
+
const moduleContainerFunctionGenerator = new module_container_function_generator_1.ModuleContainerFunctionGenerator(classesOrModules, moduleFunctionSignatureGenerator, modularModuleDependencyResolver, moduleFunctionBodyGenerator);
|
|
39
|
+
const moduleInstantiationGenerator = new module_instantiation_generator_1.ModuleInstantiationGenerator();
|
|
40
|
+
const containerAggregator = new container_aggregator_1.ContainerAggregator();
|
|
41
|
+
return new modular_container_generator_1.ModularContainerGenerator(fileWriter, classesOrModules, moduleDependencyResolver, importGenerator, moduleContainerFunctionGenerator, moduleInstantiationGenerator, containerAggregator);
|
|
41
42
|
}
|
|
42
43
|
/**
|
|
43
44
|
* Determines if the input represents a modular structure.
|
|
@@ -69,12 +70,7 @@ class ContainerGeneratorFactory {
|
|
|
69
70
|
* @returns The number of modules, or 1 for flat structure
|
|
70
71
|
*/
|
|
71
72
|
static getModuleCount(classesOrModules) {
|
|
72
|
-
|
|
73
|
-
return classesOrModules.size;
|
|
74
|
-
}
|
|
75
|
-
else {
|
|
76
|
-
return 1; // Flat structure is considered as one implicit module
|
|
77
|
-
}
|
|
73
|
+
return classesOrModules.size;
|
|
78
74
|
}
|
|
79
75
|
}
|
|
80
76
|
exports.ContainerGeneratorFactory = ContainerGeneratorFactory;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"container-generator-factory.js","sourceRoot":"","sources":["../../src/generator/container-generator-factory.ts"],"names":[],"mappings":";;;AACA,
|
|
1
|
+
{"version":3,"file":"container-generator-factory.js","sourceRoot":"","sources":["../../src/generator/container-generator-factory.ts"],"names":[],"mappings":";;;AACA,uFAAkF;AAClF,uFAAkF;AAClF,yDAAqD;AACrD,+CAA2C;AAE3C,uGAAiG;AACjG,uGAAiG;AACjG,qFAAmH;AACnH,6FAAuF;AACvF,6FAAwF;AACxF,yEAAqE;AAErE;;;;GAIG;AACH,MAAa,yBAAyB;IACpC;;;;;;;OAOG;IACH,MAAM,CAAC,MAAM,CACX,gBAA2C,EAC3C,UAAkB;QAElB,mEAAmE;QACnE,MAAM,UAAU,GAAG,IAAI,wBAAU,CAAC,UAAU,CAAC,CAAC;QAE5C,0EAA0E;QAC1E,MAAM,wBAAwB,GAAG,IAAI,qDAAwB,CAAC,gBAAgB,CAAC,CAAC;QAChF,MAAM,UAAU,GAAG,KAAK,CAAC,IAAI,CAAC,gBAAgB,CAAC,MAAM,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC;QAChE,MAAM,eAAe,GAAG,IAAI,kCAAe,CAAC,UAAU,CAAC,CAAC;QACxD,MAAM,gCAAgC,GAAG,IAAI,sEAAgC,EAAE,CAAC;QAChF,MAAM,+BAA+B,GAAG,IAAI,qDAA+B,CAAC,gBAAgB,CAAC,CAAC;QAC9F,MAAM,2BAA2B,GAAG,IAAI,4DAA2B,CAAC,+BAA+B,CAAC,CAAC;QACrG,MAAM,gCAAgC,GAAG,IAAI,sEAAgC,CAC3E,gBAAgB,EAChB,gCAAgC,EAChC,+BAA+B,EAC/B,2BAA2B,CAC5B,CAAC;QACF,MAAM,4BAA4B,GAAG,IAAI,6DAA4B,EAAE,CAAC;QACxE,MAAM,mBAAmB,GAAG,IAAI,0CAAmB,EAAE,CAAC;QAEtD,OAAO,IAAI,uDAAyB,CAClC,UAAU,EACV,gBAAgB,EAChB,wBAAwB,EACxB,eAAe,EACf,gCAAgC,EAChC,4BAA4B,EAC5B,mBAAmB,CACpB,CAAC;IAEN,CAAC;IAED;;;;;OAKG;IACH,MAAM,CAAC,SAAS,CAAC,gBAAwD;QACvE,OAAO,gBAAgB,YAAY,GAAG,CAAC;IACzC,CAAC;IAED;;;;;OAKG;IACH,MAAM,CAAC,aAAa,CAAC,gBAAwD;QAC3E,IAAI,gBAAgB,YAAY,GAAG,EAAE,CAAC;YACpC,OAAO,KAAK,CAAC,IAAI,CAAC,gBAAgB,CAAC,MAAM,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC,MAAM,CAAC;QAC7D,CAAC;aAAM,CAAC;YACN,OAAO,gBAAgB,CAAC,MAAM,CAAC;QACjC,CAAC;IACH,CAAC;IAED;;;;;OAKG;IACH,MAAM,CAAC,cAAc,CAAC,gBAA2C;QAC7D,OAAO,gBAAgB,CAAC,IAAI,CAAC;IACjC,CAAC;CACF;AA7ED,8DA6EC"}
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
import { ClassInfo } from '../types';
|
|
2
|
+
/**
|
|
3
|
+
* Handles resolving duplicate class names in imports and ensures consistent
|
|
4
|
+
* alias usage throughout the generated container code.
|
|
5
|
+
*/
|
|
6
|
+
export declare class DuplicateImportResolver {
|
|
7
|
+
private classes;
|
|
8
|
+
private classAliasMap;
|
|
9
|
+
private importPathMap;
|
|
10
|
+
private aliasToClassMap;
|
|
11
|
+
constructor(classes: ClassInfo[]);
|
|
12
|
+
/**
|
|
13
|
+
* Generates unique aliases for classes with the same name but different import paths
|
|
14
|
+
*/
|
|
15
|
+
private generateClassAliases;
|
|
16
|
+
/**
|
|
17
|
+
* Creates a unique key for a class based on its name and import path
|
|
18
|
+
*/
|
|
19
|
+
private getClassKey;
|
|
20
|
+
/**
|
|
21
|
+
* Extracts a module name from an import path to use in alias creation
|
|
22
|
+
*/
|
|
23
|
+
private extractModuleNameFromPath;
|
|
24
|
+
/**
|
|
25
|
+
* Gets the alias for a class based on its name and import path
|
|
26
|
+
*/
|
|
27
|
+
getClassAlias(className: string, importPath: string): string;
|
|
28
|
+
/**
|
|
29
|
+
* Gets the import path for a class based on its name and alias
|
|
30
|
+
*/
|
|
31
|
+
getImportPathForClass(className: string, alias: string): string | undefined;
|
|
32
|
+
/**
|
|
33
|
+
* Resolves a class reference to its proper alias based on the context
|
|
34
|
+
* @param className The name of the class to resolve
|
|
35
|
+
* @param contextClass The class that is referencing the target class
|
|
36
|
+
* @returns The proper alias to use for the class in this context
|
|
37
|
+
*/
|
|
38
|
+
resolveClassReference(className: string, contextClass: ClassInfo): string;
|
|
39
|
+
/**
|
|
40
|
+
* Generates import statements for all classes
|
|
41
|
+
*/
|
|
42
|
+
generateImports(): string;
|
|
43
|
+
}
|
|
44
|
+
//# sourceMappingURL=duplicate-import-resolver.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"duplicate-import-resolver.d.ts","sourceRoot":"","sources":["../../src/generator/duplicate-import-resolver.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,UAAU,CAAC;AAErC;;;GAGG;AACH,qBAAa,uBAAuB;IAClC,OAAO,CAAC,OAAO,CAAc;IAC7B,OAAO,CAAC,aAAa,CAAkC;IACvD,OAAO,CAAC,aAAa,CAAkC;IACvD,OAAO,CAAC,eAAe,CAAkC;gBAE7C,OAAO,EAAE,SAAS,EAAE;IAKhC;;OAEG;IACH,OAAO,CAAC,oBAAoB;IAkC5B;;OAEG;IACH,OAAO,CAAC,WAAW;IAInB;;OAEG;IACH,OAAO,CAAC,yBAAyB;IAiBjC;;OAEG;IACH,aAAa,CAAC,SAAS,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,GAAG,MAAM;IAK5D;;OAEG;IACH,qBAAqB,CAAC,SAAS,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS;IAS3E;;;;;OAKG;IACH,qBAAqB,CAAC,SAAS,EAAE,MAAM,EAAE,YAAY,EAAE,SAAS,GAAG,MAAM;IA0CzE;;OAEG;IACH,eAAe,IAAI,MAAM;CA+B1B"}
|
|
@@ -0,0 +1,162 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.DuplicateImportResolver = void 0;
|
|
4
|
+
/**
|
|
5
|
+
* Handles resolving duplicate class names in imports and ensures consistent
|
|
6
|
+
* alias usage throughout the generated container code.
|
|
7
|
+
*/
|
|
8
|
+
class DuplicateImportResolver {
|
|
9
|
+
constructor(classes) {
|
|
10
|
+
this.classAliasMap = new Map();
|
|
11
|
+
this.importPathMap = new Map();
|
|
12
|
+
this.aliasToClassMap = new Map();
|
|
13
|
+
this.classes = classes;
|
|
14
|
+
this.generateClassAliases();
|
|
15
|
+
}
|
|
16
|
+
/**
|
|
17
|
+
* Generates unique aliases for classes with the same name but different import paths
|
|
18
|
+
*/
|
|
19
|
+
generateClassAliases() {
|
|
20
|
+
// Group classes by name to find duplicates
|
|
21
|
+
const classesByName = new Map();
|
|
22
|
+
for (const classInfo of this.classes) {
|
|
23
|
+
const existing = classesByName.get(classInfo.name) || [];
|
|
24
|
+
existing.push(classInfo);
|
|
25
|
+
classesByName.set(classInfo.name, existing);
|
|
26
|
+
// Store the import path for each class
|
|
27
|
+
this.importPathMap.set(this.getClassKey(classInfo), classInfo.importPath);
|
|
28
|
+
}
|
|
29
|
+
// Create aliases for classes with name collisions
|
|
30
|
+
for (const [className, classInfos] of classesByName.entries()) {
|
|
31
|
+
if (classInfos.length === 1 && classInfos[0]) {
|
|
32
|
+
// No collision, use the original name
|
|
33
|
+
const key = this.getClassKey(classInfos[0]);
|
|
34
|
+
this.classAliasMap.set(key, className);
|
|
35
|
+
this.aliasToClassMap.set(className, key);
|
|
36
|
+
}
|
|
37
|
+
else {
|
|
38
|
+
// Handle name collision by creating unique aliases
|
|
39
|
+
for (const classInfo of classInfos) {
|
|
40
|
+
// Create an alias based on the module/directory name
|
|
41
|
+
const moduleName = this.extractModuleNameFromPath(classInfo.importPath);
|
|
42
|
+
const alias = `${moduleName}${className}`;
|
|
43
|
+
const key = this.getClassKey(classInfo);
|
|
44
|
+
this.classAliasMap.set(key, alias);
|
|
45
|
+
this.aliasToClassMap.set(alias, key);
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
/**
|
|
51
|
+
* Creates a unique key for a class based on its name and import path
|
|
52
|
+
*/
|
|
53
|
+
getClassKey(classInfo) {
|
|
54
|
+
return `${classInfo.name}:${classInfo.importPath}`;
|
|
55
|
+
}
|
|
56
|
+
/**
|
|
57
|
+
* Extracts a module name from an import path to use in alias creation
|
|
58
|
+
*/
|
|
59
|
+
extractModuleNameFromPath(importPath) {
|
|
60
|
+
// Get the directory name from the import path
|
|
61
|
+
const normalizedPath = importPath.replace(/\.\//, '');
|
|
62
|
+
const parts = normalizedPath.split('/');
|
|
63
|
+
// Use the first directory as the module name
|
|
64
|
+
if (parts.length > 0 && parts[0]) {
|
|
65
|
+
// Capitalize the first letter of the module name
|
|
66
|
+
const firstChar = parts[0].charAt(0);
|
|
67
|
+
const restOfString = parts[0].slice(1);
|
|
68
|
+
const moduleName = firstChar.toUpperCase() + restOfString;
|
|
69
|
+
return moduleName;
|
|
70
|
+
}
|
|
71
|
+
return 'Module';
|
|
72
|
+
}
|
|
73
|
+
/**
|
|
74
|
+
* Gets the alias for a class based on its name and import path
|
|
75
|
+
*/
|
|
76
|
+
getClassAlias(className, importPath) {
|
|
77
|
+
const key = `${className}:${importPath}`;
|
|
78
|
+
return this.classAliasMap.get(key) || className;
|
|
79
|
+
}
|
|
80
|
+
/**
|
|
81
|
+
* Gets the import path for a class based on its name and alias
|
|
82
|
+
*/
|
|
83
|
+
getImportPathForClass(className, alias) {
|
|
84
|
+
// Find the class key that maps to this alias
|
|
85
|
+
const key = this.aliasToClassMap.get(alias);
|
|
86
|
+
if (key) {
|
|
87
|
+
return this.importPathMap.get(key);
|
|
88
|
+
}
|
|
89
|
+
return undefined;
|
|
90
|
+
}
|
|
91
|
+
/**
|
|
92
|
+
* Resolves a class reference to its proper alias based on the context
|
|
93
|
+
* @param className The name of the class to resolve
|
|
94
|
+
* @param contextClass The class that is referencing the target class
|
|
95
|
+
* @returns The proper alias to use for the class in this context
|
|
96
|
+
*/
|
|
97
|
+
resolveClassReference(className, contextClass) {
|
|
98
|
+
// Find all classes with this name
|
|
99
|
+
const matchingClasses = this.classes.filter(c => c.name === className);
|
|
100
|
+
if (matchingClasses.length === 1 && matchingClasses[0]) {
|
|
101
|
+
// No collision, return the class name or its alias
|
|
102
|
+
return this.getClassAlias(className, matchingClasses[0].importPath);
|
|
103
|
+
}
|
|
104
|
+
// For collisions, try to determine the correct class based on dependencies
|
|
105
|
+
const contextDependencies = contextClass.dependencies || [];
|
|
106
|
+
// Check if the context class has a direct dependency on one of the matching classes
|
|
107
|
+
for (const matchingClass of matchingClasses) {
|
|
108
|
+
if (contextDependencies.includes(matchingClass.name)) {
|
|
109
|
+
// Found a direct dependency, use its alias
|
|
110
|
+
return this.getClassAlias(matchingClass.name, matchingClass.importPath);
|
|
111
|
+
}
|
|
112
|
+
}
|
|
113
|
+
// If no direct dependency is found, try to infer from the import path
|
|
114
|
+
// Classes in the same module are more likely to be the intended reference
|
|
115
|
+
const contextModule = this.extractModuleNameFromPath(contextClass.importPath).toLowerCase();
|
|
116
|
+
for (const matchingClass of matchingClasses) {
|
|
117
|
+
const matchingModule = this.extractModuleNameFromPath(matchingClass.importPath).toLowerCase();
|
|
118
|
+
if (matchingModule === contextModule) {
|
|
119
|
+
// Same module, likely the intended reference
|
|
120
|
+
return this.getClassAlias(matchingClass.name, matchingClass.importPath);
|
|
121
|
+
}
|
|
122
|
+
}
|
|
123
|
+
// If all else fails, return the first matching class's alias with a warning
|
|
124
|
+
console.warn(`Warning: Ambiguous class reference '${className}' in ${contextClass.name}. Using first match.`);
|
|
125
|
+
if (matchingClasses.length > 0 && matchingClasses[0]) {
|
|
126
|
+
return this.getClassAlias(matchingClasses[0].name, matchingClasses[0].importPath);
|
|
127
|
+
}
|
|
128
|
+
// Fallback to the original class name if no matches found
|
|
129
|
+
return className;
|
|
130
|
+
}
|
|
131
|
+
/**
|
|
132
|
+
* Generates import statements for all classes
|
|
133
|
+
*/
|
|
134
|
+
generateImports() {
|
|
135
|
+
const importMap = new Map();
|
|
136
|
+
// Add imports for all managed classes
|
|
137
|
+
for (const classInfo of this.classes) {
|
|
138
|
+
const alias = this.getClassAlias(classInfo.name, classInfo.importPath);
|
|
139
|
+
const importPath = classInfo.importPath;
|
|
140
|
+
// Group imports by path
|
|
141
|
+
if (!importMap.has(importPath)) {
|
|
142
|
+
importMap.set(importPath, new Set());
|
|
143
|
+
}
|
|
144
|
+
const importSet = importMap.get(importPath);
|
|
145
|
+
// If the alias is different from the class name, use the 'as' syntax
|
|
146
|
+
if (alias !== classInfo.name) {
|
|
147
|
+
importSet.add(`${classInfo.name} as ${alias}`);
|
|
148
|
+
}
|
|
149
|
+
else {
|
|
150
|
+
importSet.add(classInfo.name);
|
|
151
|
+
}
|
|
152
|
+
}
|
|
153
|
+
// Generate import statements
|
|
154
|
+
const imports = [];
|
|
155
|
+
for (const [importPath, classNames] of importMap.entries()) {
|
|
156
|
+
imports.push(`import { ${Array.from(classNames).join(', ')} } from '${importPath}';`);
|
|
157
|
+
}
|
|
158
|
+
return imports.join('\n');
|
|
159
|
+
}
|
|
160
|
+
}
|
|
161
|
+
exports.DuplicateImportResolver = DuplicateImportResolver;
|
|
162
|
+
//# sourceMappingURL=duplicate-import-resolver.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"duplicate-import-resolver.js","sourceRoot":"","sources":["../../src/generator/duplicate-import-resolver.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"container-generator.d.ts","sourceRoot":"","sources":["../../../src/generator/flat/container-generator.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAGxC,qBAAa,kBAAkB;IAC7B,OAAO,CAAC,OAAO,CAAc;gBAEjB,OAAO,EAAE,SAAS,EAAE;IAIhC,uBAAuB,IAAI,MAAM;IAIjC,kBAAkB,IAAI,MAAM;CAG7B"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.ContainerGenerator = void 0;
|
|
4
|
+
const instantiation_utils_1 = require("../shared/instantiation-utils");
|
|
5
|
+
class ContainerGenerator {
|
|
6
|
+
constructor(classes) {
|
|
7
|
+
this.classes = classes;
|
|
8
|
+
}
|
|
9
|
+
generateContainerObject() {
|
|
10
|
+
return instantiation_utils_1.InstantiationUtils.generateContainerObject(this.classes);
|
|
11
|
+
}
|
|
12
|
+
generateTypeExport() {
|
|
13
|
+
return instantiation_utils_1.InstantiationUtils.generateContainerTypeExport();
|
|
14
|
+
}
|
|
15
|
+
}
|
|
16
|
+
exports.ContainerGenerator = ContainerGenerator;
|
|
17
|
+
//# sourceMappingURL=container-generator.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"container-generator.js","sourceRoot":"","sources":["../../../src/generator/flat/container-generator.ts"],"names":[],"mappings":";;;AACA,uEAAmE;AAEnE,MAAa,kBAAkB;IAG7B,YAAY,OAAoB;QAC9B,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC;IACzB,CAAC;IAED,uBAAuB;QACrB,OAAO,wCAAkB,CAAC,uBAAuB,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;IAClE,CAAC;IAED,kBAAkB;QAChB,OAAO,wCAAkB,CAAC,2BAA2B,EAAE,CAAC;IAC1D,CAAC;CACF;AAdD,gDAcC"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import { ClassInfo } from '../../types';
|
|
2
|
+
export declare class DependencyResolver {
|
|
3
|
+
private classes;
|
|
4
|
+
constructor(classes: ClassInfo[]);
|
|
5
|
+
resolveDependencies(classInfo: ClassInfo, interfaceToClassMap: Map<string, string>, classMap: Map<string, ClassInfo>): string;
|
|
6
|
+
private createUnmanagedDependencyInstance;
|
|
7
|
+
}
|
|
8
|
+
//# sourceMappingURL=dependency-resolver.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"dependency-resolver.d.ts","sourceRoot":"","sources":["../../../src/generator/flat/dependency-resolver.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAwB,MAAM,aAAa,CAAC;AAG9D,qBAAa,kBAAkB;IAC7B,OAAO,CAAC,OAAO,CAAc;gBAEjB,OAAO,EAAE,SAAS,EAAE;IAKhC,mBAAmB,CACjB,SAAS,EAAE,SAAS,EACpB,mBAAmB,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,EACxC,QAAQ,EAAE,GAAG,CAAC,MAAM,EAAE,SAAS,CAAC,GAC/B,MAAM;IA4BT,OAAO,CAAC,iCAAiC;CAM1C"}
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.DependencyResolver = void 0;
|
|
4
|
+
const shared_1 = require("../shared");
|
|
5
|
+
class DependencyResolver {
|
|
6
|
+
constructor(classes) {
|
|
7
|
+
this.classes = classes;
|
|
8
|
+
}
|
|
9
|
+
resolveDependencies(classInfo, interfaceToClassMap, classMap) {
|
|
10
|
+
return classInfo.dependencies
|
|
11
|
+
.map(dep => {
|
|
12
|
+
// Check if dependency is an interface name
|
|
13
|
+
const implementingClass = interfaceToClassMap.get(dep);
|
|
14
|
+
if (implementingClass) {
|
|
15
|
+
const depClassInfo = classMap.get(implementingClass);
|
|
16
|
+
if (depClassInfo && depClassInfo.scope === 'transient') {
|
|
17
|
+
// For transient dependencies, use factory call
|
|
18
|
+
return `${shared_1.InstantiationUtils.toCamelCase(implementingClass)}Factory()`;
|
|
19
|
+
}
|
|
20
|
+
return shared_1.InstantiationUtils.toCamelCase(implementingClass);
|
|
21
|
+
}
|
|
22
|
+
// Check if dependency is a class name
|
|
23
|
+
if (classMap.has(dep)) {
|
|
24
|
+
const depClassInfo = classMap.get(dep);
|
|
25
|
+
if (depClassInfo && depClassInfo.scope === 'transient') {
|
|
26
|
+
return `${shared_1.InstantiationUtils.toCamelCase(dep)}Factory()`;
|
|
27
|
+
}
|
|
28
|
+
return shared_1.InstantiationUtils.toCamelCase(dep);
|
|
29
|
+
}
|
|
30
|
+
// Check if dependency is a class that exists in the same file but not managed
|
|
31
|
+
return this.createUnmanagedDependencyInstance(dep);
|
|
32
|
+
})
|
|
33
|
+
.filter(dep => dep !== null)
|
|
34
|
+
.join(', ');
|
|
35
|
+
}
|
|
36
|
+
createUnmanagedDependencyInstance(className) {
|
|
37
|
+
// Find the class info for this unmanaged dependency
|
|
38
|
+
const classInfo = this.classes.find(c => c.name === className);
|
|
39
|
+
return shared_1.InstantiationUtils.createUnmanagedDependencyInstance(className, classInfo);
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
exports.DependencyResolver = DependencyResolver;
|
|
43
|
+
//# sourceMappingURL=dependency-resolver.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"dependency-resolver.js","sourceRoot":"","sources":["../../../src/generator/flat/dependency-resolver.ts"],"names":[],"mappings":";;;AACA,sCAA+C;AAE/C,MAAa,kBAAkB;IAG7B,YAAY,OAAoB;QAC9B,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC;IACzB,CAAC;IAGD,mBAAmB,CACjB,SAAoB,EACpB,mBAAwC,EACxC,QAAgC;QAEhC,OAAO,SAAS,CAAC,YAAY;aAC1B,GAAG,CAAC,GAAG,CAAC,EAAE;YACT,2CAA2C;YAC3C,MAAM,iBAAiB,GAAG,mBAAmB,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;YACvD,IAAI,iBAAiB,EAAE,CAAC;gBACtB,MAAM,YAAY,GAAG,QAAQ,CAAC,GAAG,CAAC,iBAAiB,CAAC,CAAC;gBACrD,IAAI,YAAY,IAAI,YAAY,CAAC,KAAK,KAAK,WAAW,EAAE,CAAC;oBACvD,+CAA+C;oBAC/C,OAAO,GAAG,2BAAkB,CAAC,WAAW,CAAC,iBAAiB,CAAC,WAAW,CAAC;gBACzE,CAAC;gBACD,OAAO,2BAAkB,CAAC,WAAW,CAAC,iBAAiB,CAAC,CAAC;YAC3D,CAAC;YACD,sCAAsC;YACtC,IAAI,QAAQ,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC;gBACtB,MAAM,YAAY,GAAG,QAAQ,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;gBACvC,IAAI,YAAY,IAAI,YAAY,CAAC,KAAK,KAAK,WAAW,EAAE,CAAC;oBACvD,OAAO,GAAG,2BAAkB,CAAC,WAAW,CAAC,GAAG,CAAC,WAAW,CAAC;gBAC3D,CAAC;gBACD,OAAO,2BAAkB,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC;YAC7C,CAAC;YACD,8EAA8E;YAC9E,OAAO,IAAI,CAAC,iCAAiC,CAAC,GAAG,CAAC,CAAC;QACrD,CAAC,CAAC;aACD,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,IAAI,CAAC;aAC3B,IAAI,CAAC,IAAI,CAAC,CAAC;IAChB,CAAC;IAEO,iCAAiC,CAAC,SAAiB;QACzD,oDAAoD;QACpD,MAAM,SAAS,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,SAAS,CAAC,CAAC;QAC/D,OAAO,2BAAkB,CAAC,iCAAiC,CAAC,SAAS,EAAE,SAAS,CAAC,CAAC;IACpF,CAAC;CAEF;AA9CD,gDA8CC"}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import { ClassInfo } from '../../types';
|
|
2
|
+
import { DependencyResolver } from '../../analyser/dependency-resolver';
|
|
3
|
+
import { ContainerGenerator as ContainerCodeGenerator } from './container-generator';
|
|
4
|
+
import { InstantiationGenerator } from './instantiation-generator';
|
|
5
|
+
import { BaseContainerGenerator } from '../base-container-generator';
|
|
6
|
+
import { ImportGenerator } from '../import-generator';
|
|
7
|
+
import { FileWriter } from '../file-writer';
|
|
8
|
+
/**
|
|
9
|
+
* Generator for flat (non-modular) container structure.
|
|
10
|
+
* Handles the traditional single-container approach.
|
|
11
|
+
*/
|
|
12
|
+
export declare class FlatContainerGenerator extends BaseContainerGenerator {
|
|
13
|
+
private dependencyResolver;
|
|
14
|
+
private instantiationGenerator;
|
|
15
|
+
private containerCodeGenerator;
|
|
16
|
+
private classes;
|
|
17
|
+
constructor(fileWriter: FileWriter, classes: ClassInfo[], dependencyResolver: DependencyResolver, importGenerator: ImportGenerator, instantiationGenerator: InstantiationGenerator, containerCodeGenerator: ContainerCodeGenerator);
|
|
18
|
+
generate(): void;
|
|
19
|
+
protected generateContainerCode(sortedClasses?: string[]): string;
|
|
20
|
+
/**
|
|
21
|
+
* Get the classes managed by this generator.
|
|
22
|
+
*/
|
|
23
|
+
getClasses(): ClassInfo[];
|
|
24
|
+
}
|
|
25
|
+
//# sourceMappingURL=flat-container-generator.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"flat-container-generator.d.ts","sourceRoot":"","sources":["../../../src/generator/flat/flat-container-generator.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AACxC,OAAO,EAAE,kBAAkB,EAAE,MAAM,oCAAoC,CAAC;AACxE,OAAO,EAAE,kBAAkB,IAAI,sBAAsB,EAAE,MAAM,uBAAuB,CAAC;AACrF,OAAO,EAAE,sBAAsB,EAAE,MAAM,2BAA2B,CAAC;AACnE,OAAO,EAAE,sBAAsB,EAAE,MAAM,6BAA6B,CAAC;AACrE,OAAO,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAC;AACtD,OAAO,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAC;AAE5C;;;GAGG;AACH,qBAAa,sBAAuB,SAAQ,sBAAsB;IAChE,OAAO,CAAC,kBAAkB,CAAqB;IAC/C,OAAO,CAAC,sBAAsB,CAAyB;IACvD,OAAO,CAAC,sBAAsB,CAAyB;IACvD,OAAO,CAAC,OAAO,CAAc;gBAG3B,UAAU,EAAE,UAAU,EACtB,OAAO,EAAE,SAAS,EAAE,EACpB,kBAAkB,EAAE,kBAAkB,EACtC,eAAe,EAAE,eAAe,EAChC,sBAAsB,EAAE,sBAAsB,EAC9C,sBAAsB,EAAE,sBAAsB;IAShD,QAAQ,IAAI,IAAI;IAWhB,SAAS,CAAC,qBAAqB,CAAC,aAAa,CAAC,EAAE,MAAM,EAAE,GAAG,MAAM;IAcjE;;OAEG;IACH,UAAU,IAAI,SAAS,EAAE;CAG1B"}
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.FlatContainerGenerator = void 0;
|
|
4
|
+
const base_container_generator_1 = require("../base-container-generator");
|
|
5
|
+
/**
|
|
6
|
+
* Generator for flat (non-modular) container structure.
|
|
7
|
+
* Handles the traditional single-container approach.
|
|
8
|
+
*/
|
|
9
|
+
class FlatContainerGenerator extends base_container_generator_1.BaseContainerGenerator {
|
|
10
|
+
constructor(fileWriter, classes, dependencyResolver, importGenerator, instantiationGenerator, containerCodeGenerator) {
|
|
11
|
+
super(fileWriter, importGenerator);
|
|
12
|
+
this.classes = classes;
|
|
13
|
+
this.dependencyResolver = dependencyResolver;
|
|
14
|
+
this.instantiationGenerator = instantiationGenerator;
|
|
15
|
+
this.containerCodeGenerator = containerCodeGenerator;
|
|
16
|
+
}
|
|
17
|
+
generate() {
|
|
18
|
+
const sortResult = this.dependencyResolver.resolve();
|
|
19
|
+
if (sortResult.cycles.length > 0) {
|
|
20
|
+
throw new Error(`Circular dependencies detected: ${JSON.stringify(sortResult.cycles)}`);
|
|
21
|
+
}
|
|
22
|
+
const containerCode = this.generateContainerCode(sortResult.sorted);
|
|
23
|
+
this.writeContainer(containerCode);
|
|
24
|
+
}
|
|
25
|
+
generateContainerCode(sortedClasses) {
|
|
26
|
+
if (!sortedClasses) {
|
|
27
|
+
const sortResult = this.dependencyResolver.resolve();
|
|
28
|
+
sortedClasses = sortResult.sorted;
|
|
29
|
+
}
|
|
30
|
+
const imports = this.importGenerator.generateImports();
|
|
31
|
+
const instantiations = this.instantiationGenerator.generateInstantiations(sortedClasses);
|
|
32
|
+
const containerObject = this.containerCodeGenerator.generateContainerObject();
|
|
33
|
+
const typeExport = this.containerCodeGenerator.generateTypeExport();
|
|
34
|
+
return `${imports}\n\n${instantiations}\n\n${containerObject}\n\n${typeExport}\n`;
|
|
35
|
+
}
|
|
36
|
+
/**
|
|
37
|
+
* Get the classes managed by this generator.
|
|
38
|
+
*/
|
|
39
|
+
getClasses() {
|
|
40
|
+
return this.classes;
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
exports.FlatContainerGenerator = FlatContainerGenerator;
|
|
44
|
+
//# sourceMappingURL=flat-container-generator.js.map
|