@notjustcoders/ioc-arise 1.0.0
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/LICENSE +21 -0
- package/README.md +266 -0
- package/dist/__tests__/analyser/ast-parser.test.d.ts +2 -0
- package/dist/__tests__/analyser/ast-parser.test.d.ts.map +1 -0
- package/dist/__tests__/analyser/ast-parser.test.js +268 -0
- package/dist/__tests__/analyser/ast-parser.test.js.map +1 -0
- package/dist/__tests__/analyser/class-analyzer.test.d.ts +2 -0
- package/dist/__tests__/analyser/class-analyzer.test.d.ts.map +1 -0
- package/dist/__tests__/analyser/class-analyzer.test.js +259 -0
- package/dist/__tests__/analyser/class-analyzer.test.js.map +1 -0
- package/dist/__tests__/analyser/dependency-resolver.test.d.ts +2 -0
- package/dist/__tests__/analyser/dependency-resolver.test.d.ts.map +1 -0
- package/dist/__tests__/analyser/dependency-resolver.test.js +128 -0
- package/dist/__tests__/analyser/dependency-resolver.test.js.map +1 -0
- package/dist/__tests__/analyser/fixtures/ast-parser-fixtures.d.ts +26 -0
- package/dist/__tests__/analyser/fixtures/ast-parser-fixtures.d.ts.map +1 -0
- package/dist/__tests__/analyser/fixtures/ast-parser-fixtures.js +178 -0
- package/dist/__tests__/analyser/fixtures/ast-parser-fixtures.js.map +1 -0
- package/dist/__tests__/analyser/fixtures/class-analyzer-fixtures.d.ts +54 -0
- package/dist/__tests__/analyser/fixtures/class-analyzer-fixtures.d.ts.map +1 -0
- package/dist/__tests__/analyser/fixtures/class-analyzer-fixtures.js +285 -0
- package/dist/__tests__/analyser/fixtures/class-analyzer-fixtures.js.map +1 -0
- package/dist/__tests__/analyser/fixtures/dependency-resolver-fixtures.d.ts +13 -0
- package/dist/__tests__/analyser/fixtures/dependency-resolver-fixtures.d.ts.map +1 -0
- package/dist/__tests__/analyser/fixtures/dependency-resolver-fixtures.js +266 -0
- package/dist/__tests__/analyser/fixtures/dependency-resolver-fixtures.js.map +1 -0
- package/dist/__tests__/generator/container-generator.test.d.ts +2 -0
- package/dist/__tests__/generator/container-generator.test.d.ts.map +1 -0
- package/dist/__tests__/generator/container-generator.test.js +185 -0
- package/dist/__tests__/generator/container-generator.test.js.map +1 -0
- package/dist/__tests__/generator/dependency-resolver.test.d.ts +2 -0
- package/dist/__tests__/generator/dependency-resolver.test.d.ts.map +1 -0
- package/dist/__tests__/generator/dependency-resolver.test.js +330 -0
- package/dist/__tests__/generator/dependency-resolver.test.js.map +1 -0
- package/dist/__tests__/generator/fixtures/dependency-resolver.fixtures.d.ts +23 -0
- package/dist/__tests__/generator/fixtures/dependency-resolver.fixtures.d.ts.map +1 -0
- package/dist/__tests__/generator/fixtures/dependency-resolver.fixtures.js +254 -0
- package/dist/__tests__/generator/fixtures/dependency-resolver.fixtures.js.map +1 -0
- package/dist/__tests__/generator/fixtures/import-generator.fixtures.d.ts +10 -0
- package/dist/__tests__/generator/fixtures/import-generator.fixtures.d.ts.map +1 -0
- package/dist/__tests__/generator/fixtures/import-generator.fixtures.js +194 -0
- package/dist/__tests__/generator/fixtures/import-generator.fixtures.js.map +1 -0
- package/dist/__tests__/generator/import-generator.test.d.ts +2 -0
- package/dist/__tests__/generator/import-generator.test.d.ts.map +1 -0
- package/dist/__tests__/generator/import-generator.test.js +121 -0
- package/dist/__tests__/generator/import-generator.test.js.map +1 -0
- package/dist/__tests__/generator/instantiation-generator.test.d.ts +2 -0
- package/dist/__tests__/generator/instantiation-generator.test.d.ts.map +1 -0
- package/dist/__tests__/generator/instantiation-generator.test.js +251 -0
- package/dist/__tests__/generator/instantiation-generator.test.js.map +1 -0
- package/dist/analyser/ast-parser.d.ts +12 -0
- package/dist/analyser/ast-parser.d.ts.map +1 -0
- package/dist/analyser/ast-parser.js +192 -0
- package/dist/analyser/ast-parser.js.map +1 -0
- package/dist/analyser/class-analyzer.d.ts +11 -0
- package/dist/analyser/class-analyzer.d.ts.map +1 -0
- package/dist/analyser/class-analyzer.js +78 -0
- package/dist/analyser/class-analyzer.js.map +1 -0
- package/dist/analyser/dependency-resolver.d.ts +10 -0
- package/dist/analyser/dependency-resolver.d.ts.map +1 -0
- package/dist/analyser/dependency-resolver.js +46 -0
- package/dist/analyser/dependency-resolver.js.map +1 -0
- package/dist/analyser/file-discovery.d.ts +7 -0
- package/dist/analyser/file-discovery.d.ts.map +1 -0
- package/dist/analyser/file-discovery.js +30 -0
- package/dist/analyser/file-discovery.js.map +1 -0
- package/dist/analyser/index.d.ts +3 -0
- package/dist/analyser/index.d.ts.map +1 -0
- package/dist/analyser/index.js +14 -0
- package/dist/analyser/index.js.map +1 -0
- package/dist/analyser/module-dependency-resolver.d.ts +17 -0
- package/dist/analyser/module-dependency-resolver.d.ts.map +1 -0
- package/dist/analyser/module-dependency-resolver.js +66 -0
- package/dist/analyser/module-dependency-resolver.js.map +1 -0
- package/dist/analyser/project-analyzer.d.ts +8 -0
- package/dist/analyser/project-analyzer.d.ts.map +1 -0
- package/dist/analyser/project-analyzer.js +20 -0
- package/dist/analyser/project-analyzer.js.map +1 -0
- package/dist/commands/analyze.d.ts +3 -0
- package/dist/commands/analyze.d.ts.map +1 -0
- package/dist/commands/analyze.js +66 -0
- package/dist/commands/analyze.js.map +1 -0
- package/dist/commands/generate.d.ts +3 -0
- package/dist/commands/generate.d.ts.map +1 -0
- package/dist/commands/generate.js +150 -0
- package/dist/commands/generate.js.map +1 -0
- package/dist/container.d.ts +5 -0
- package/dist/container.d.ts.map +1 -0
- package/dist/container.js +8 -0
- package/dist/container.js.map +1 -0
- package/dist/generator/container-file-generator.d.ts +20 -0
- package/dist/generator/container-file-generator.d.ts.map +1 -0
- package/dist/generator/container-file-generator.js +255 -0
- package/dist/generator/container-file-generator.js.map +1 -0
- package/dist/generator/container-generator.d.ts +8 -0
- package/dist/generator/container-generator.d.ts.map +1 -0
- package/dist/generator/container-generator.js +35 -0
- package/dist/generator/container-generator.js.map +1 -0
- package/dist/generator/dependency-resolver.d.ts +11 -0
- package/dist/generator/dependency-resolver.d.ts.map +1 -0
- package/dist/generator/dependency-resolver.js +83 -0
- package/dist/generator/dependency-resolver.js.map +1 -0
- package/dist/generator/file-writer.d.ts +6 -0
- package/dist/generator/file-writer.d.ts.map +1 -0
- package/dist/generator/file-writer.js +19 -0
- package/dist/generator/file-writer.js.map +1 -0
- package/dist/generator/import-generator.d.ts +7 -0
- package/dist/generator/import-generator.d.ts.map +1 -0
- package/dist/generator/import-generator.js +31 -0
- package/dist/generator/import-generator.js.map +1 -0
- package/dist/generator/index.d.ts +4 -0
- package/dist/generator/index.d.ts.map +1 -0
- package/dist/generator/index.js +25 -0
- package/dist/generator/index.js.map +1 -0
- package/dist/generator/instantiation-generator.d.ts +8 -0
- package/dist/generator/instantiation-generator.d.ts.map +1 -0
- package/dist/generator/instantiation-generator.js +153 -0
- package/dist/generator/instantiation-generator.js.map +1 -0
- package/dist/generator/module-container-generator.d.ts +10 -0
- package/dist/generator/module-container-generator.d.ts.map +1 -0
- package/dist/generator/module-container-generator.js +51 -0
- package/dist/generator/module-container-generator.js.map +1 -0
- package/dist/index.d.ts +3 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +20 -0
- package/dist/index.js.map +1 -0
- package/dist/types.d.ts +30 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +3 -0
- package/dist/types.js.map +1 -0
- package/dist/utils/configManager.d.ts +21 -0
- package/dist/utils/configManager.d.ts.map +1 -0
- package/dist/utils/configManager.js +50 -0
- package/dist/utils/configManager.js.map +1 -0
- package/dist/utils/moduleResolver.d.ts +38 -0
- package/dist/utils/moduleResolver.d.ts.map +1 -0
- package/dist/utils/moduleResolver.js +108 -0
- package/dist/utils/moduleResolver.js.map +1 -0
- package/dist/utils/naming.d.ts +7 -0
- package/dist/utils/naming.d.ts.map +1 -0
- package/dist/utils/naming.js +12 -0
- package/dist/utils/naming.js.map +1 -0
- package/dist/utils/topological-sorter.d.ts +17 -0
- package/dist/utils/topological-sorter.d.ts.map +1 -0
- package/dist/utils/topological-sorter.js +69 -0
- package/dist/utils/topological-sorter.js.map +1 -0
- package/package.json +72 -0
|
@@ -0,0 +1,255 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.ContainerFileGenerator = void 0;
|
|
4
|
+
const dependency_resolver_1 = require("../analyser/dependency-resolver");
|
|
5
|
+
const module_dependency_resolver_1 = require("../analyser/module-dependency-resolver");
|
|
6
|
+
const container_generator_1 = require("./container-generator");
|
|
7
|
+
const file_writer_1 = require("./file-writer");
|
|
8
|
+
const import_generator_1 = require("./import-generator");
|
|
9
|
+
const instantiation_generator_1 = require("./instantiation-generator");
|
|
10
|
+
class ContainerFileGenerator {
|
|
11
|
+
constructor(options) {
|
|
12
|
+
if (options.classes) {
|
|
13
|
+
// Backward compatibility mode
|
|
14
|
+
this.dependencyResolver = new dependency_resolver_1.DependencyResolver(options.classes);
|
|
15
|
+
this.importGenerator = new import_generator_1.ImportGenerator(options.classes);
|
|
16
|
+
this.instantiationGenerator = new instantiation_generator_1.InstantiationGenerator(options.classes);
|
|
17
|
+
this.containerCodeGenerator = new container_generator_1.ContainerGenerator(options.classes);
|
|
18
|
+
}
|
|
19
|
+
else if (options.moduleGroupedClasses) {
|
|
20
|
+
// Module mode
|
|
21
|
+
this.moduleGroupedClasses = options.moduleGroupedClasses;
|
|
22
|
+
// Flatten classes for existing generators (temporary solution)
|
|
23
|
+
const allClasses = Array.from(options.moduleGroupedClasses.values()).flat();
|
|
24
|
+
this.dependencyResolver = new dependency_resolver_1.DependencyResolver(allClasses);
|
|
25
|
+
this.importGenerator = new import_generator_1.ImportGenerator(allClasses);
|
|
26
|
+
this.instantiationGenerator = new instantiation_generator_1.InstantiationGenerator(allClasses);
|
|
27
|
+
this.containerCodeGenerator = new container_generator_1.ContainerGenerator(allClasses);
|
|
28
|
+
}
|
|
29
|
+
else {
|
|
30
|
+
throw new Error('Either classes or moduleGroupedClasses must be provided');
|
|
31
|
+
}
|
|
32
|
+
this.fileWriter = new file_writer_1.FileWriter(options.outputPath);
|
|
33
|
+
}
|
|
34
|
+
generateContainer() {
|
|
35
|
+
const sortResult = this.dependencyResolver.resolve();
|
|
36
|
+
if (sortResult.cycles.length > 0) {
|
|
37
|
+
throw new Error(`Circular dependencies detected: ${JSON.stringify(sortResult.cycles)}`);
|
|
38
|
+
}
|
|
39
|
+
const containerCode = this.generateContainerCode(sortResult.sorted);
|
|
40
|
+
this.fileWriter.writeContainer(containerCode);
|
|
41
|
+
}
|
|
42
|
+
generateModularContainer() {
|
|
43
|
+
if (!this.moduleGroupedClasses) {
|
|
44
|
+
throw new Error('Module grouped classes not provided for modular container generation');
|
|
45
|
+
}
|
|
46
|
+
// First, check for module-level cycles
|
|
47
|
+
const moduleDependencyResolver = new module_dependency_resolver_1.ModuleDependencyResolver(this.moduleGroupedClasses);
|
|
48
|
+
const moduleResult = moduleDependencyResolver.resolve();
|
|
49
|
+
if (moduleResult.cycles.length > 0) {
|
|
50
|
+
throw new Error(`Circular dependencies detected between modules: ${JSON.stringify(moduleResult.cycles)}`);
|
|
51
|
+
}
|
|
52
|
+
// Then resolve class-level dependencies within each module
|
|
53
|
+
const allClasses = Array.from(this.moduleGroupedClasses.values()).flat();
|
|
54
|
+
const dependencyResolver = new dependency_resolver_1.DependencyResolver(allClasses);
|
|
55
|
+
const sortResult = dependencyResolver.resolve();
|
|
56
|
+
if (sortResult.cycles.length > 0) {
|
|
57
|
+
throw new Error(`Circular dependencies detected within classes: ${JSON.stringify(sortResult.cycles)}`);
|
|
58
|
+
}
|
|
59
|
+
const containerCode = this.generateModularContainerCode(sortResult.sorted, moduleResult.sortedModules, moduleResult.moduleDependencies);
|
|
60
|
+
this.fileWriter.writeContainer(containerCode);
|
|
61
|
+
}
|
|
62
|
+
generateContainerCode(sortedClasses) {
|
|
63
|
+
const imports = this.importGenerator.generateImports();
|
|
64
|
+
const instantiations = this.instantiationGenerator.generateInstantiations(sortedClasses);
|
|
65
|
+
const containerObject = this.containerCodeGenerator.generateContainerObject();
|
|
66
|
+
const typeExport = this.containerCodeGenerator.generateTypeExport();
|
|
67
|
+
return `${imports}\n\n${instantiations}\n\n${containerObject}\n\n${typeExport}\n`;
|
|
68
|
+
}
|
|
69
|
+
generateModularContainerCode(sortedClasses, sortedModules, moduleDependencies) {
|
|
70
|
+
console.log("sorted modules", sortedModules);
|
|
71
|
+
const imports = this.importGenerator.generateImports();
|
|
72
|
+
const moduleContainers = this.generateModuleContainers(sortedModules, moduleDependencies);
|
|
73
|
+
const aggregatedContainer = this.generateAggregatedContainer(sortedModules);
|
|
74
|
+
const typeExport = this.generateModularTypeExport();
|
|
75
|
+
return `${imports}\n\n${moduleContainers}\n\n${aggregatedContainer}\n\n${typeExport}\n`;
|
|
76
|
+
}
|
|
77
|
+
generateModuleContainers(sortedModules, moduleDependencies) {
|
|
78
|
+
if (!this.moduleGroupedClasses)
|
|
79
|
+
return '';
|
|
80
|
+
const moduleContainerCodes = [];
|
|
81
|
+
const moduleContainerFunctions = [];
|
|
82
|
+
// Generate module container functions in dependency order
|
|
83
|
+
for (const moduleName of sortedModules) {
|
|
84
|
+
const moduleClasses = this.moduleGroupedClasses.get(moduleName);
|
|
85
|
+
if (!moduleClasses)
|
|
86
|
+
continue;
|
|
87
|
+
const moduleFunctionName = `create${moduleName}Container`;
|
|
88
|
+
const moduleExports = [];
|
|
89
|
+
const moduleDeps = moduleDependencies.get(moduleName) || new Set();
|
|
90
|
+
// Generate function parameters for dependent modules
|
|
91
|
+
const functionParams = [];
|
|
92
|
+
for (const depModule of moduleDeps) {
|
|
93
|
+
const depVarName = this.camelCase(depModule) + 'Container';
|
|
94
|
+
functionParams.push(`${depVarName}: ReturnType<typeof create${depModule}Container>`);
|
|
95
|
+
}
|
|
96
|
+
// Generate lazy initialization variables and factory functions
|
|
97
|
+
const lazyInitializations = [];
|
|
98
|
+
const factoryFunctions = [];
|
|
99
|
+
// First, create factory functions for transient dependencies
|
|
100
|
+
for (const classInfo of moduleClasses) {
|
|
101
|
+
if (classInfo.scope === 'transient') {
|
|
102
|
+
const instanceName = this.camelCase(classInfo.name);
|
|
103
|
+
const factoryName = `${instanceName}Factory`;
|
|
104
|
+
factoryFunctions.push(` const ${factoryName} = (): ${classInfo.name} => new ${classInfo.name}();`);
|
|
105
|
+
}
|
|
106
|
+
}
|
|
107
|
+
// Sort singleton classes by their dependencies within the module
|
|
108
|
+
const singletonClasses = moduleClasses.filter(c => c.scope !== 'transient');
|
|
109
|
+
const sortedSingletons = this.sortClassesByDependencies(singletonClasses, moduleClasses);
|
|
110
|
+
// Generate lazy initialization variables for singletons
|
|
111
|
+
for (const classInfo of sortedSingletons) {
|
|
112
|
+
const instanceName = this.camelCase(classInfo.name);
|
|
113
|
+
lazyInitializations.push(` let ${instanceName}: ${classInfo.name} | undefined;`);
|
|
114
|
+
}
|
|
115
|
+
// Generate lazy getter functions for singletons
|
|
116
|
+
const lazyGetters = [];
|
|
117
|
+
for (const classInfo of sortedSingletons) {
|
|
118
|
+
const instanceName = this.camelCase(classInfo.name);
|
|
119
|
+
const getterName = `get${classInfo.name}`;
|
|
120
|
+
const constructorArgs = [];
|
|
121
|
+
// Build constructor arguments
|
|
122
|
+
for (const dep of classInfo.dependencies) {
|
|
123
|
+
// Check if dependency is from another module
|
|
124
|
+
let foundInOtherModule = false;
|
|
125
|
+
for (const depModule of moduleDeps) {
|
|
126
|
+
const depModuleClasses = this.moduleGroupedClasses.get(depModule);
|
|
127
|
+
if (depModuleClasses) {
|
|
128
|
+
const depClass = depModuleClasses.find(c => c.interfaceName === dep);
|
|
129
|
+
if (depClass) {
|
|
130
|
+
const depModuleVarName = this.camelCase(depModule) + 'Container';
|
|
131
|
+
constructorArgs.push(`${depModuleVarName}.${dep}`);
|
|
132
|
+
foundInOtherModule = true;
|
|
133
|
+
break;
|
|
134
|
+
}
|
|
135
|
+
}
|
|
136
|
+
}
|
|
137
|
+
// If not found in other modules, it's from the same module
|
|
138
|
+
if (!foundInOtherModule) {
|
|
139
|
+
const depClass = moduleClasses.find(c => c.interfaceName === dep);
|
|
140
|
+
if (depClass) {
|
|
141
|
+
if (depClass.scope === 'transient') {
|
|
142
|
+
const depInstanceName = this.camelCase(depClass.name);
|
|
143
|
+
constructorArgs.push(`${depInstanceName}Factory()`);
|
|
144
|
+
}
|
|
145
|
+
else {
|
|
146
|
+
const depGetterName = `get${depClass.name}`;
|
|
147
|
+
constructorArgs.push(`${depGetterName}()`);
|
|
148
|
+
}
|
|
149
|
+
}
|
|
150
|
+
}
|
|
151
|
+
}
|
|
152
|
+
const instantiation = constructorArgs.length > 0 ?
|
|
153
|
+
`new ${classInfo.name}(${constructorArgs.join(', ')})` :
|
|
154
|
+
`new ${classInfo.name}()`;
|
|
155
|
+
const lazyGetter = ` const ${getterName} = (): ${classInfo.name} => {\n if (!${instanceName}) {\n ${instanceName} = ${instantiation};\n }\n return ${instanceName};\n };`;
|
|
156
|
+
lazyGetters.push(lazyGetter);
|
|
157
|
+
}
|
|
158
|
+
// Generate module exports
|
|
159
|
+
for (const classInfo of moduleClasses) {
|
|
160
|
+
if (classInfo.interfaceName) {
|
|
161
|
+
const instanceName = this.camelCase(classInfo.name);
|
|
162
|
+
const isTransient = classInfo.scope === 'transient';
|
|
163
|
+
if (isTransient) {
|
|
164
|
+
moduleExports.push(` get ${classInfo.interfaceName}(): ${classInfo.name} {\n return ${instanceName}Factory();\n }`);
|
|
165
|
+
}
|
|
166
|
+
else {
|
|
167
|
+
const getterName = `get${classInfo.name}`;
|
|
168
|
+
moduleExports.push(` get ${classInfo.interfaceName}(): ${classInfo.name} {\n return ${getterName}();\n }`);
|
|
169
|
+
}
|
|
170
|
+
}
|
|
171
|
+
}
|
|
172
|
+
const functionSignature = functionParams.length > 0 ?
|
|
173
|
+
`function ${moduleFunctionName}(${functionParams.join(', ')})` :
|
|
174
|
+
`function ${moduleFunctionName}()`;
|
|
175
|
+
const returnObject = moduleExports.length > 0 ?
|
|
176
|
+
` return {\n${moduleExports.join(',\n')}\n };` :
|
|
177
|
+
' return {};';
|
|
178
|
+
const functionBody = [
|
|
179
|
+
...factoryFunctions,
|
|
180
|
+
'',
|
|
181
|
+
...lazyInitializations,
|
|
182
|
+
'',
|
|
183
|
+
...lazyGetters,
|
|
184
|
+
'',
|
|
185
|
+
returnObject
|
|
186
|
+
].filter(line => line !== '' || factoryFunctions.length > 0 || lazyInitializations.length > 0 || lazyGetters.length > 0).join('\n');
|
|
187
|
+
const moduleContainerFunction = `${functionSignature} {\n${functionBody}\n}`;
|
|
188
|
+
moduleContainerFunctions.push(moduleContainerFunction);
|
|
189
|
+
}
|
|
190
|
+
// Sort modules by dependencies and generate instantiations
|
|
191
|
+
for (const moduleName of sortedModules) {
|
|
192
|
+
const moduleVarName = this.camelCase(moduleName) + 'Container';
|
|
193
|
+
const moduleFunctionName = `create${moduleName}Container`;
|
|
194
|
+
const moduleDeps = moduleDependencies.get(moduleName) || new Set();
|
|
195
|
+
const functionArgs = [];
|
|
196
|
+
for (const depModule of moduleDeps) {
|
|
197
|
+
const depVarName = this.camelCase(depModule) + 'Container';
|
|
198
|
+
functionArgs.push(depVarName);
|
|
199
|
+
}
|
|
200
|
+
const moduleInstantiation = functionArgs.length > 0 ?
|
|
201
|
+
`const ${moduleVarName} = ${moduleFunctionName}(${functionArgs.join(', ')});` :
|
|
202
|
+
`const ${moduleVarName} = ${moduleFunctionName}();`;
|
|
203
|
+
moduleContainerCodes.push(moduleInstantiation);
|
|
204
|
+
}
|
|
205
|
+
return moduleContainerFunctions.join('\n\n') + '\n\n' + moduleContainerCodes.join('\n');
|
|
206
|
+
}
|
|
207
|
+
generateAggregatedContainer(sortedModules) {
|
|
208
|
+
if (!this.moduleGroupedClasses)
|
|
209
|
+
return '';
|
|
210
|
+
const moduleExports = [];
|
|
211
|
+
for (const moduleName of sortedModules) {
|
|
212
|
+
const moduleVarName = this.camelCase(moduleName) + 'Container';
|
|
213
|
+
const moduleKey = this.camelCase(moduleName);
|
|
214
|
+
moduleExports.push(` ${moduleKey}: ${moduleVarName}`);
|
|
215
|
+
}
|
|
216
|
+
return `export const container = {\n${moduleExports.join(',\n')}\n};`;
|
|
217
|
+
}
|
|
218
|
+
generateModularTypeExport() {
|
|
219
|
+
return 'export type Container = typeof container;';
|
|
220
|
+
}
|
|
221
|
+
camelCase(str) {
|
|
222
|
+
return str.charAt(0).toLowerCase() + str.slice(1).replace(/[^a-zA-Z0-9]/g, '');
|
|
223
|
+
}
|
|
224
|
+
sortClassesByDependencies(classes, allModuleClasses) {
|
|
225
|
+
const sorted = [];
|
|
226
|
+
const visited = new Set();
|
|
227
|
+
const visiting = new Set();
|
|
228
|
+
const visit = (classInfo) => {
|
|
229
|
+
if (visiting.has(classInfo.name)) {
|
|
230
|
+
// Circular dependency detected, just add it
|
|
231
|
+
return;
|
|
232
|
+
}
|
|
233
|
+
if (visited.has(classInfo.name)) {
|
|
234
|
+
return;
|
|
235
|
+
}
|
|
236
|
+
visiting.add(classInfo.name);
|
|
237
|
+
// Visit dependencies first (only within the same module)
|
|
238
|
+
for (const dep of classInfo.dependencies) {
|
|
239
|
+
const depClass = allModuleClasses.find(c => c.interfaceName === dep && c.scope !== 'transient');
|
|
240
|
+
if (depClass && classes.includes(depClass)) {
|
|
241
|
+
visit(depClass);
|
|
242
|
+
}
|
|
243
|
+
}
|
|
244
|
+
visiting.delete(classInfo.name);
|
|
245
|
+
visited.add(classInfo.name);
|
|
246
|
+
sorted.push(classInfo);
|
|
247
|
+
};
|
|
248
|
+
for (const classInfo of classes) {
|
|
249
|
+
visit(classInfo);
|
|
250
|
+
}
|
|
251
|
+
return sorted;
|
|
252
|
+
}
|
|
253
|
+
}
|
|
254
|
+
exports.ContainerFileGenerator = ContainerFileGenerator;
|
|
255
|
+
//# sourceMappingURL=container-file-generator.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"container-file-generator.js","sourceRoot":"","sources":["../../src/generator/container-file-generator.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"container-generator.d.ts","sourceRoot":"","sources":["../../src/generator/container-generator.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,UAAU,CAAC;AAGrC,qBAAa,kBAAkB;IAC7B,OAAO,CAAC,OAAO,CAAc;gBAEjB,OAAO,EAAE,SAAS,EAAE;IAIhC,uBAAuB,IAAI,MAAM;IAwBjC,kBAAkB,IAAI,MAAM;CAG7B"}
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.ContainerGenerator = void 0;
|
|
4
|
+
const naming_1 = require("../utils/naming");
|
|
5
|
+
class ContainerGenerator {
|
|
6
|
+
constructor(classes) {
|
|
7
|
+
this.classes = classes;
|
|
8
|
+
}
|
|
9
|
+
generateContainerObject() {
|
|
10
|
+
const singletonProperties = [];
|
|
11
|
+
const transientProperties = [];
|
|
12
|
+
for (const classInfo of this.classes) {
|
|
13
|
+
const variableName = (0, naming_1.toVariableName)(classInfo.name);
|
|
14
|
+
const interfaceName = classInfo.interfaceName || classInfo.name;
|
|
15
|
+
const getterName = `get${classInfo.name}`;
|
|
16
|
+
if (classInfo.scope === 'singleton') {
|
|
17
|
+
singletonProperties.push(` get ${interfaceName}(): ${classInfo.name} {
|
|
18
|
+
return ${getterName}();
|
|
19
|
+
},`);
|
|
20
|
+
}
|
|
21
|
+
else if (classInfo.scope === 'transient') {
|
|
22
|
+
transientProperties.push(` get ${interfaceName}(): ${classInfo.name} {
|
|
23
|
+
return ${variableName}Factory();
|
|
24
|
+
},`);
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
const allProperties = [...singletonProperties, ...transientProperties];
|
|
28
|
+
return `export const container = {\n${allProperties.join('\n')}\n};`;
|
|
29
|
+
}
|
|
30
|
+
generateTypeExport() {
|
|
31
|
+
return 'export type Container = typeof container;';
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
exports.ContainerGenerator = ContainerGenerator;
|
|
35
|
+
//# sourceMappingURL=container-generator.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"container-generator.js","sourceRoot":"","sources":["../../src/generator/container-generator.ts"],"names":[],"mappings":";;;AACA,4CAAiD;AAEjD,MAAa,kBAAkB;IAG7B,YAAY,OAAoB;QAC9B,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC;IACzB,CAAC;IAED,uBAAuB;QACrB,MAAM,mBAAmB,GAAa,EAAE,CAAC;QACzC,MAAM,mBAAmB,GAAa,EAAE,CAAC;QAEzC,KAAK,MAAM,SAAS,IAAI,IAAI,CAAC,OAAO,EAAE,CAAC;YACrC,MAAM,YAAY,GAAG,IAAA,uBAAc,EAAC,SAAS,CAAC,IAAI,CAAC,CAAC;YACpD,MAAM,aAAa,GAAG,SAAS,CAAC,aAAa,IAAI,SAAS,CAAC,IAAI,CAAC;YAChE,MAAM,UAAU,GAAG,MAAM,SAAS,CAAC,IAAI,EAAE,CAAC;YAE1C,IAAI,SAAS,CAAC,KAAK,KAAK,WAAW,EAAE,CAAC;gBACpC,mBAAmB,CAAC,IAAI,CAAC,SAAS,aAAa,OAAO,SAAS,CAAC,IAAI;aAC/D,UAAU;KAClB,CAAC,CAAC;YACD,CAAC;iBAAM,IAAI,SAAS,CAAC,KAAK,KAAK,WAAW,EAAE,CAAC;gBAC3C,mBAAmB,CAAC,IAAI,CAAC,SAAS,aAAa,OAAO,SAAS,CAAC,IAAI;aAC/D,YAAY;KACpB,CAAC,CAAC;YACD,CAAC;QACH,CAAC;QAED,MAAM,aAAa,GAAG,CAAC,GAAG,mBAAmB,EAAE,GAAG,mBAAmB,CAAC,CAAC;QACvE,OAAO,+BAA+B,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC;IACvE,CAAC;IAED,kBAAkB;QAChB,OAAO,2CAA2C,CAAC;IACrD,CAAC;CACF;AAlCD,gDAkCC"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import { ClassInfo } from '../types';
|
|
2
|
+
export declare class DependencyResolver {
|
|
3
|
+
private classes;
|
|
4
|
+
constructor(classes: ClassInfo[]);
|
|
5
|
+
createInterfaceToClassMap(): Map<string, string>;
|
|
6
|
+
resolveDependencies(classInfo: ClassInfo, interfaceToClassMap: Map<string, string>, classMap: Map<string, ClassInfo>): string;
|
|
7
|
+
private createUnmanagedDependencyInstance;
|
|
8
|
+
private generateConstructorArgs;
|
|
9
|
+
getDefaultValueForType(type: string, isOptional: boolean): string;
|
|
10
|
+
}
|
|
11
|
+
//# sourceMappingURL=dependency-resolver.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"dependency-resolver.d.ts","sourceRoot":"","sources":["../../src/generator/dependency-resolver.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAwB,MAAM,UAAU,CAAC;AAG3D,qBAAa,kBAAkB;IAC7B,OAAO,CAAC,OAAO,CAAc;gBAEjB,OAAO,EAAE,SAAS,EAAE;IAIhC,yBAAyB,IAAI,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC;IAUhD,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;IAWzC,OAAO,CAAC,uBAAuB;IAI/B,sBAAsB,CAAC,IAAI,EAAE,MAAM,EAAE,UAAU,EAAE,OAAO,GAAG,MAAM;CAyBlE"}
|
|
@@ -0,0 +1,83 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.DependencyResolver = void 0;
|
|
4
|
+
const naming_1 = require("../utils/naming");
|
|
5
|
+
class DependencyResolver {
|
|
6
|
+
constructor(classes) {
|
|
7
|
+
this.classes = classes;
|
|
8
|
+
}
|
|
9
|
+
createInterfaceToClassMap() {
|
|
10
|
+
const interfaceToClassMap = new Map();
|
|
11
|
+
for (const classInfo of this.classes) {
|
|
12
|
+
if (classInfo.interfaceName) {
|
|
13
|
+
interfaceToClassMap.set(classInfo.interfaceName, classInfo.name);
|
|
14
|
+
}
|
|
15
|
+
}
|
|
16
|
+
return interfaceToClassMap;
|
|
17
|
+
}
|
|
18
|
+
resolveDependencies(classInfo, interfaceToClassMap, classMap) {
|
|
19
|
+
return classInfo.dependencies
|
|
20
|
+
.map(dep => {
|
|
21
|
+
// Check if dependency is an interface name
|
|
22
|
+
const implementingClass = interfaceToClassMap.get(dep);
|
|
23
|
+
if (implementingClass) {
|
|
24
|
+
const depClassInfo = classMap.get(implementingClass);
|
|
25
|
+
if (depClassInfo && depClassInfo.scope === 'transient') {
|
|
26
|
+
// For transient dependencies, use factory call
|
|
27
|
+
return `${(0, naming_1.toVariableName)(implementingClass)}Factory()`;
|
|
28
|
+
}
|
|
29
|
+
return (0, naming_1.toVariableName)(implementingClass);
|
|
30
|
+
}
|
|
31
|
+
// Check if dependency is a class name
|
|
32
|
+
if (classMap.has(dep)) {
|
|
33
|
+
const depClassInfo = classMap.get(dep);
|
|
34
|
+
if (depClassInfo && depClassInfo.scope === 'transient') {
|
|
35
|
+
return `${(0, naming_1.toVariableName)(dep)}Factory()`;
|
|
36
|
+
}
|
|
37
|
+
return (0, naming_1.toVariableName)(dep);
|
|
38
|
+
}
|
|
39
|
+
// Check if dependency is a class that exists in the same file but not managed
|
|
40
|
+
return this.createUnmanagedDependencyInstance(dep);
|
|
41
|
+
})
|
|
42
|
+
.filter(dep => dep !== null)
|
|
43
|
+
.join(', ');
|
|
44
|
+
}
|
|
45
|
+
createUnmanagedDependencyInstance(className) {
|
|
46
|
+
// Find the class info for this unmanaged dependency
|
|
47
|
+
const classInfo = this.classes.find(c => c.name === className);
|
|
48
|
+
if (!classInfo || !classInfo.constructorParams.length) {
|
|
49
|
+
return `new ${className}()`;
|
|
50
|
+
}
|
|
51
|
+
const args = this.generateConstructorArgs(classInfo.constructorParams);
|
|
52
|
+
return `new ${className}(${args})`;
|
|
53
|
+
}
|
|
54
|
+
generateConstructorArgs(params) {
|
|
55
|
+
return params.map(param => this.getDefaultValueForType(param.type, param.isOptional)).join(', ');
|
|
56
|
+
}
|
|
57
|
+
getDefaultValueForType(type, isOptional) {
|
|
58
|
+
if (isOptional) {
|
|
59
|
+
return 'undefined';
|
|
60
|
+
}
|
|
61
|
+
// Handle primitive types
|
|
62
|
+
switch (type.toLowerCase()) {
|
|
63
|
+
case 'string':
|
|
64
|
+
return '"default"';
|
|
65
|
+
case 'number':
|
|
66
|
+
return '0';
|
|
67
|
+
case 'boolean':
|
|
68
|
+
return 'false';
|
|
69
|
+
case 'date':
|
|
70
|
+
return 'new Date()';
|
|
71
|
+
default:
|
|
72
|
+
// For class types, try to find if it's a managed dependency
|
|
73
|
+
const classMap = new Map(this.classes.map(c => [c.name, c]));
|
|
74
|
+
if (classMap.has(type)) {
|
|
75
|
+
return (0, naming_1.toVariableName)(type);
|
|
76
|
+
}
|
|
77
|
+
// For unmanaged class types, create a simple instance
|
|
78
|
+
return `new ${type}()`;
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
}
|
|
82
|
+
exports.DependencyResolver = DependencyResolver;
|
|
83
|
+
//# sourceMappingURL=dependency-resolver.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"dependency-resolver.js","sourceRoot":"","sources":["../../src/generator/dependency-resolver.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"file-writer.d.ts","sourceRoot":"","sources":["../../src/generator/file-writer.ts"],"names":[],"mappings":"AAGA,qBAAa,UAAU;IACrB,OAAO,CAAC,UAAU,CAAS;gBAEf,UAAU,EAAE,MAAM;IAI9B,cAAc,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI;CAQtC"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.FileWriter = void 0;
|
|
4
|
+
const fs_1 = require("fs");
|
|
5
|
+
const path_1 = require("path");
|
|
6
|
+
class FileWriter {
|
|
7
|
+
constructor(outputPath) {
|
|
8
|
+
this.outputPath = outputPath;
|
|
9
|
+
}
|
|
10
|
+
writeContainer(content) {
|
|
11
|
+
// Ensure output directory exists
|
|
12
|
+
const outputDir = (0, path_1.dirname)(this.outputPath);
|
|
13
|
+
(0, fs_1.mkdirSync)(outputDir, { recursive: true });
|
|
14
|
+
// Write the container file
|
|
15
|
+
(0, fs_1.writeFileSync)(this.outputPath, content, 'utf-8');
|
|
16
|
+
}
|
|
17
|
+
}
|
|
18
|
+
exports.FileWriter = FileWriter;
|
|
19
|
+
//# sourceMappingURL=file-writer.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"file-writer.js","sourceRoot":"","sources":["../../src/generator/file-writer.ts"],"names":[],"mappings":";;;AAAA,2BAA8C;AAC9C,+BAA+B;AAE/B,MAAa,UAAU;IAGrB,YAAY,UAAkB;QAC5B,IAAI,CAAC,UAAU,GAAG,UAAU,CAAC;IAC/B,CAAC;IAED,cAAc,CAAC,OAAe;QAC5B,iCAAiC;QACjC,MAAM,SAAS,GAAG,IAAA,cAAO,EAAC,IAAI,CAAC,UAAU,CAAC,CAAC;QAC3C,IAAA,cAAS,EAAC,SAAS,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;QAE1C,2BAA2B;QAC3B,IAAA,kBAAa,EAAC,IAAI,CAAC,UAAU,EAAE,OAAO,EAAE,OAAO,CAAC,CAAC;IACnD,CAAC;CACF;AAfD,gCAeC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"import-generator.d.ts","sourceRoot":"","sources":["../../src/generator/import-generator.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,UAAU,CAAC;AAErC,qBAAa,eAAe;IAC1B,OAAO,CAAC,OAAO,CAAc;gBAEjB,OAAO,EAAE,SAAS,EAAE;IAIhC,eAAe,IAAI,MAAM;CAwB1B"}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.ImportGenerator = void 0;
|
|
4
|
+
class ImportGenerator {
|
|
5
|
+
constructor(classes) {
|
|
6
|
+
this.classes = classes;
|
|
7
|
+
}
|
|
8
|
+
generateImports() {
|
|
9
|
+
const importSet = new Set();
|
|
10
|
+
const classMap = new Map(this.classes.map(c => [c.name, c]));
|
|
11
|
+
// Add imports for all managed classes
|
|
12
|
+
for (const classInfo of this.classes) {
|
|
13
|
+
importSet.add(`import { ${classInfo.name} } from '${classInfo.importPath}';`);
|
|
14
|
+
}
|
|
15
|
+
// Add imports for unmanaged dependencies
|
|
16
|
+
for (const classInfo of this.classes) {
|
|
17
|
+
for (const dep of classInfo.dependencies) {
|
|
18
|
+
// If dependency is not a managed class, we need to import it
|
|
19
|
+
if (!classMap.has(dep)) {
|
|
20
|
+
// Check if it's an interface (starts with 'I' by convention)
|
|
21
|
+
if (!dep.startsWith('I')) {
|
|
22
|
+
importSet.add(`import { ${dep} } from '${classInfo.importPath}';`);
|
|
23
|
+
}
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
return Array.from(importSet).join('\n');
|
|
28
|
+
}
|
|
29
|
+
}
|
|
30
|
+
exports.ImportGenerator = ImportGenerator;
|
|
31
|
+
//# sourceMappingURL=import-generator.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"import-generator.js","sourceRoot":"","sources":["../../src/generator/import-generator.ts"],"names":[],"mappings":";;;AAEA,MAAa,eAAe;IAG1B,YAAY,OAAoB;QAC9B,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC;IACzB,CAAC;IAED,eAAe;QACb,MAAM,SAAS,GAAG,IAAI,GAAG,EAAU,CAAC;QACpC,MAAM,QAAQ,GAAG,IAAI,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;QAE7D,sCAAsC;QACtC,KAAK,MAAM,SAAS,IAAI,IAAI,CAAC,OAAO,EAAE,CAAC;YACrC,SAAS,CAAC,GAAG,CAAC,YAAY,SAAS,CAAC,IAAI,YAAY,SAAS,CAAC,UAAU,IAAI,CAAC,CAAC;QAChF,CAAC;QAED,yCAAyC;QACzC,KAAK,MAAM,SAAS,IAAI,IAAI,CAAC,OAAO,EAAE,CAAC;YACrC,KAAK,MAAM,GAAG,IAAI,SAAS,CAAC,YAAY,EAAE,CAAC;gBACzC,6DAA6D;gBAC7D,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC;oBACvB,6DAA6D;oBAC7D,IAAI,CAAC,GAAG,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;wBACzB,SAAS,CAAC,GAAG,CAAC,YAAY,GAAG,YAAY,SAAS,CAAC,UAAU,IAAI,CAAC,CAAC;oBACrE,CAAC;gBACH,CAAC;YACH,CAAC;QACH,CAAC;QAED,OAAO,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAC1C,CAAC;CACF;AA/BD,0CA+BC"}
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
import { ClassInfo } from '../types';
|
|
2
|
+
export declare function generateContainerFile(classesOrModules: ClassInfo[] | Map<string, ClassInfo[]>, outputPath: string): void;
|
|
3
|
+
export declare function detectCircularDependencies(classes: ClassInfo[]): string[][];
|
|
4
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/generator/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,UAAU,CAAC;AAMrC,wBAAgB,qBAAqB,CAAC,gBAAgB,EAAE,SAAS,EAAE,GAAG,GAAG,CAAC,MAAM,EAAE,SAAS,EAAE,CAAC,EAAE,UAAU,EAAE,MAAM,GAAG,IAAI,CAUxH;AAED,wBAAgB,0BAA0B,CAAC,OAAO,EAAE,SAAS,EAAE,GAAG,MAAM,EAAE,EAAE,CAG3E"}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.generateContainerFile = generateContainerFile;
|
|
4
|
+
exports.detectCircularDependencies = detectCircularDependencies;
|
|
5
|
+
const dependency_resolver_1 = require("../analyser/dependency-resolver");
|
|
6
|
+
const container_file_generator_1 = require("./container-file-generator");
|
|
7
|
+
const one_logger_client_sdk_1 = require("@notjustcoders/one-logger-client-sdk");
|
|
8
|
+
const ContainerFileGenerator = (0, one_logger_client_sdk_1.wrappedClass)("ContainerFileGenerator", container_file_generator_1.ContainerFileGenerator, (name, ...args) => ({ name, args }));
|
|
9
|
+
function generateContainerFile(classesOrModules, outputPath) {
|
|
10
|
+
if (classesOrModules instanceof Map) {
|
|
11
|
+
// Module-based generation
|
|
12
|
+
const generator = new ContainerFileGenerator({ moduleGroupedClasses: classesOrModules, outputPath });
|
|
13
|
+
generator.generateModularContainer();
|
|
14
|
+
}
|
|
15
|
+
else {
|
|
16
|
+
// Backward compatibility: flat classes array
|
|
17
|
+
const generator = new ContainerFileGenerator({ classes: classesOrModules, outputPath });
|
|
18
|
+
generator.generateContainer();
|
|
19
|
+
}
|
|
20
|
+
}
|
|
21
|
+
function detectCircularDependencies(classes) {
|
|
22
|
+
const resolver = new dependency_resolver_1.DependencyResolver(classes);
|
|
23
|
+
return resolver.detectCircularDependencies();
|
|
24
|
+
}
|
|
25
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/generator/index.ts"],"names":[],"mappings":";;AAMA,sDAUC;AAED,gEAGC;AApBD,yEAAqE;AACrE,yEAA+E;AAC/E,gFAAoE;AACpE,MAAM,sBAAsB,GAAG,IAAA,oCAAY,EAAC,wBAAwB,EAAE,iDAAO,EAAC,CAAC,IAAI,EAAC,GAAG,IAAI,EAAC,EAAE,CAAA,CAAC,EAAC,IAAI,EAAC,IAAI,EAAC,CAAC,CAAC,CAAA;AAE5G,SAAgB,qBAAqB,CAAC,gBAAwD,EAAE,UAAkB;IAChH,IAAI,gBAAgB,YAAY,GAAG,EAAE,CAAC;QACpC,0BAA0B;QAC1B,MAAM,SAAS,GAAG,IAAI,sBAAsB,CAAC,EAAE,oBAAoB,EAAE,gBAAgB,EAAE,UAAU,EAAE,CAAC,CAAC;QACrG,SAAS,CAAC,wBAAwB,EAAE,CAAC;IACvC,CAAC;SAAM,CAAC;QACN,6CAA6C;QAC7C,MAAM,SAAS,GAAG,IAAI,sBAAsB,CAAC,EAAE,OAAO,EAAE,gBAAgB,EAAE,UAAU,EAAE,CAAC,CAAC;QACxF,SAAS,CAAC,iBAAiB,EAAE,CAAC;IAChC,CAAC;AACH,CAAC;AAED,SAAgB,0BAA0B,CAAC,OAAoB;IAC7D,MAAM,QAAQ,GAAG,IAAI,wCAAkB,CAAC,OAAO,CAAC,CAAC;IACjD,OAAO,QAAQ,CAAC,0BAA0B,EAAE,CAAC;AAC/C,CAAC"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import { ClassInfo } from '../types';
|
|
2
|
+
export declare class InstantiationGenerator {
|
|
3
|
+
private classes;
|
|
4
|
+
private dependencyResolver;
|
|
5
|
+
constructor(classes: ClassInfo[]);
|
|
6
|
+
generateInstantiations(sortedClasses: string[]): string;
|
|
7
|
+
}
|
|
8
|
+
//# sourceMappingURL=instantiation-generator.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"instantiation-generator.d.ts","sourceRoot":"","sources":["../../src/generator/instantiation-generator.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,UAAU,CAAC;AAIrC,qBAAa,sBAAsB;IACjC,OAAO,CAAC,OAAO,CAAc;IAC7B,OAAO,CAAC,kBAAkB,CAAqB;gBAEnC,OAAO,EAAE,SAAS,EAAE;IAKhC,sBAAsB,CAAC,aAAa,EAAE,MAAM,EAAE,GAAG,MAAM;CAgKxD"}
|