@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,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("./modular/module-container-function-generator");
|
|
7
|
+
const module_instantiation_generator_1 = require("./modular/module-instantiation-generator");
|
|
8
|
+
const container_aggregator_1 = require("./modular/container-aggregator");
|
|
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-container-generator.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
import { ClassInfo } from '../types';
|
|
2
|
+
/**
|
|
3
|
+
* Generator for module container functions.
|
|
4
|
+
* Handles the creation of individual module container functions with their dependencies.
|
|
5
|
+
*/
|
|
6
|
+
export declare class ModuleContainerFunctionGenerator {
|
|
7
|
+
private moduleGroupedClasses;
|
|
8
|
+
constructor(moduleGroupedClasses: Map<string, ClassInfo[]>);
|
|
9
|
+
/**
|
|
10
|
+
* Generates module container functions for all modules.
|
|
11
|
+
*/
|
|
12
|
+
generateModuleContainerFunctions(sortedModules: string[], moduleDependencies: Map<string, Set<string>>): string[];
|
|
13
|
+
private createModuleContainerFunction;
|
|
14
|
+
private generateFunctionParameters;
|
|
15
|
+
private createFunctionSignature;
|
|
16
|
+
private generateModuleFunctionBody;
|
|
17
|
+
private generateTransientFactories;
|
|
18
|
+
private generateSingletonVariables;
|
|
19
|
+
private generateSingletonGetters;
|
|
20
|
+
private createSingletonGetter;
|
|
21
|
+
private buildConstructorArguments;
|
|
22
|
+
private resolveDependencyArgument;
|
|
23
|
+
private findExternalModuleDependency;
|
|
24
|
+
private findInternalModuleDependency;
|
|
25
|
+
private generateModuleExports;
|
|
26
|
+
private createModuleExportGetter;
|
|
27
|
+
private sortClassesByDependencies;
|
|
28
|
+
private camelCase;
|
|
29
|
+
}
|
|
30
|
+
//# sourceMappingURL=module-container-function-generator.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"module-container-function-generator.d.ts","sourceRoot":"","sources":["../../src/generator/module-container-function-generator.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,UAAU,CAAC;AAErC;;;GAGG;AACH,qBAAa,gCAAgC;IAC3C,OAAO,CAAC,oBAAoB,CAA2B;gBAE3C,oBAAoB,EAAE,GAAG,CAAC,MAAM,EAAE,SAAS,EAAE,CAAC;IAI1D;;OAEG;IACH,gCAAgC,CAAC,aAAa,EAAE,MAAM,EAAE,EAAE,kBAAkB,EAAE,GAAG,CAAC,MAAM,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC,GAAG,MAAM,EAAE;IAcjH,OAAO,CAAC,6BAA6B;IAWrC,OAAO,CAAC,0BAA0B;IAWlC,OAAO,CAAC,uBAAuB;IAM/B,OAAO,CAAC,0BAA0B;IAqBlC,OAAO,CAAC,0BAA0B;IAclC,OAAO,CAAC,0BAA0B;IAalC,OAAO,CAAC,wBAAwB;IAahC,OAAO,CAAC,qBAAqB;IAY7B,OAAO,CAAC,yBAAyB;IAajC,OAAO,CAAC,yBAAyB;IAWjC,OAAO,CAAC,4BAA4B;IAcpC,OAAO,CAAC,4BAA4B;IAcpC,OAAO,CAAC,qBAAqB;IAa7B,OAAO,CAAC,wBAAwB;IAYhC,OAAO,CAAC,yBAAyB;IA6BjC,OAAO,CAAC,SAAS;CAGlB"}
|
|
@@ -0,0 +1,199 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.ModuleContainerFunctionGenerator = void 0;
|
|
4
|
+
/**
|
|
5
|
+
* Generator for module container functions.
|
|
6
|
+
* Handles the creation of individual module container functions with their dependencies.
|
|
7
|
+
*/
|
|
8
|
+
class ModuleContainerFunctionGenerator {
|
|
9
|
+
constructor(moduleGroupedClasses) {
|
|
10
|
+
this.moduleGroupedClasses = moduleGroupedClasses;
|
|
11
|
+
}
|
|
12
|
+
/**
|
|
13
|
+
* Generates module container functions for all modules.
|
|
14
|
+
*/
|
|
15
|
+
generateModuleContainerFunctions(sortedModules, moduleDependencies) {
|
|
16
|
+
const moduleContainerFunctions = [];
|
|
17
|
+
for (const moduleName of sortedModules) {
|
|
18
|
+
const moduleClasses = this.moduleGroupedClasses.get(moduleName);
|
|
19
|
+
if (!moduleClasses)
|
|
20
|
+
continue;
|
|
21
|
+
const moduleContainerFunction = this.createModuleContainerFunction(moduleName, moduleClasses, moduleDependencies);
|
|
22
|
+
moduleContainerFunctions.push(moduleContainerFunction);
|
|
23
|
+
}
|
|
24
|
+
return moduleContainerFunctions;
|
|
25
|
+
}
|
|
26
|
+
createModuleContainerFunction(moduleName, moduleClasses, moduleDependencies) {
|
|
27
|
+
const moduleFunctionName = `create${moduleName}Container`;
|
|
28
|
+
const moduleDeps = moduleDependencies.get(moduleName) || new Set();
|
|
29
|
+
const functionParams = this.generateFunctionParameters(moduleDeps);
|
|
30
|
+
const functionSignature = this.createFunctionSignature(moduleFunctionName, functionParams);
|
|
31
|
+
const functionBody = this.generateModuleFunctionBody(moduleClasses, moduleDeps);
|
|
32
|
+
return `${functionSignature} {\n${functionBody}\n}`;
|
|
33
|
+
}
|
|
34
|
+
generateFunctionParameters(moduleDeps) {
|
|
35
|
+
const functionParams = [];
|
|
36
|
+
for (const depModule of moduleDeps) {
|
|
37
|
+
const depVarName = this.camelCase(depModule) + 'Container';
|
|
38
|
+
functionParams.push(`${depVarName}: ReturnType<typeof create${depModule}Container>`);
|
|
39
|
+
}
|
|
40
|
+
return functionParams;
|
|
41
|
+
}
|
|
42
|
+
createFunctionSignature(functionName, params) {
|
|
43
|
+
return params.length > 0 ?
|
|
44
|
+
`function ${functionName}(${params.join(', ')})` :
|
|
45
|
+
`function ${functionName}()`;
|
|
46
|
+
}
|
|
47
|
+
generateModuleFunctionBody(moduleClasses, moduleDeps) {
|
|
48
|
+
const factoryFunctions = this.generateTransientFactories(moduleClasses);
|
|
49
|
+
const lazyInitializations = this.generateSingletonVariables(moduleClasses);
|
|
50
|
+
const lazyGetters = this.generateSingletonGetters(moduleClasses, moduleDeps);
|
|
51
|
+
const moduleExports = this.generateModuleExports(moduleClasses);
|
|
52
|
+
const returnObject = moduleExports.length > 0 ?
|
|
53
|
+
` return {\n${moduleExports.join(',\n')}\n };` :
|
|
54
|
+
' return {};';
|
|
55
|
+
return [
|
|
56
|
+
...factoryFunctions,
|
|
57
|
+
'',
|
|
58
|
+
...lazyInitializations,
|
|
59
|
+
'',
|
|
60
|
+
...lazyGetters,
|
|
61
|
+
'',
|
|
62
|
+
returnObject
|
|
63
|
+
].filter(line => line !== '' || factoryFunctions.length > 0 || lazyInitializations.length > 0 || lazyGetters.length > 0).join('\n');
|
|
64
|
+
}
|
|
65
|
+
generateTransientFactories(moduleClasses) {
|
|
66
|
+
const factoryFunctions = [];
|
|
67
|
+
for (const classInfo of moduleClasses) {
|
|
68
|
+
if (classInfo.scope === 'transient') {
|
|
69
|
+
const instanceName = this.camelCase(classInfo.name);
|
|
70
|
+
const factoryName = `${instanceName}Factory`;
|
|
71
|
+
factoryFunctions.push(` const ${factoryName} = (): ${classInfo.name} => new ${classInfo.name}();`);
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
return factoryFunctions;
|
|
75
|
+
}
|
|
76
|
+
generateSingletonVariables(moduleClasses) {
|
|
77
|
+
const singletonClasses = moduleClasses.filter(c => c.scope !== 'transient');
|
|
78
|
+
const sortedSingletons = this.sortClassesByDependencies(singletonClasses, moduleClasses);
|
|
79
|
+
const lazyInitializations = [];
|
|
80
|
+
for (const classInfo of sortedSingletons) {
|
|
81
|
+
const instanceName = this.camelCase(classInfo.name);
|
|
82
|
+
lazyInitializations.push(` let ${instanceName}: ${classInfo.name} | undefined;`);
|
|
83
|
+
}
|
|
84
|
+
return lazyInitializations;
|
|
85
|
+
}
|
|
86
|
+
generateSingletonGetters(moduleClasses, moduleDeps) {
|
|
87
|
+
const singletonClasses = moduleClasses.filter(c => c.scope !== 'transient');
|
|
88
|
+
const sortedSingletons = this.sortClassesByDependencies(singletonClasses, moduleClasses);
|
|
89
|
+
const lazyGetters = [];
|
|
90
|
+
for (const classInfo of sortedSingletons) {
|
|
91
|
+
const lazyGetter = this.createSingletonGetter(classInfo, moduleClasses, moduleDeps);
|
|
92
|
+
lazyGetters.push(lazyGetter);
|
|
93
|
+
}
|
|
94
|
+
return lazyGetters;
|
|
95
|
+
}
|
|
96
|
+
createSingletonGetter(classInfo, moduleClasses, moduleDeps) {
|
|
97
|
+
const instanceName = this.camelCase(classInfo.name);
|
|
98
|
+
const getterName = `get${classInfo.name}`;
|
|
99
|
+
const constructorArgs = this.buildConstructorArguments(classInfo, moduleClasses, moduleDeps);
|
|
100
|
+
const instantiation = constructorArgs.length > 0 ?
|
|
101
|
+
`new ${classInfo.name}(${constructorArgs.join(', ')})` :
|
|
102
|
+
`new ${classInfo.name}()`;
|
|
103
|
+
return ` const ${getterName} = (): ${classInfo.name} => {\n if (!${instanceName}) {\n ${instanceName} = ${instantiation};\n }\n return ${instanceName};\n };`;
|
|
104
|
+
}
|
|
105
|
+
buildConstructorArguments(classInfo, moduleClasses, moduleDeps) {
|
|
106
|
+
const constructorArgs = [];
|
|
107
|
+
for (const dep of classInfo.dependencies) {
|
|
108
|
+
const arg = this.resolveDependencyArgument(dep, moduleClasses, moduleDeps);
|
|
109
|
+
if (arg) {
|
|
110
|
+
constructorArgs.push(arg);
|
|
111
|
+
}
|
|
112
|
+
}
|
|
113
|
+
return constructorArgs;
|
|
114
|
+
}
|
|
115
|
+
resolveDependencyArgument(dependency, moduleClasses, moduleDeps) {
|
|
116
|
+
// Check if dependency is from another module
|
|
117
|
+
const externalModuleArg = this.findExternalModuleDependency(dependency, moduleDeps);
|
|
118
|
+
if (externalModuleArg) {
|
|
119
|
+
return externalModuleArg;
|
|
120
|
+
}
|
|
121
|
+
// Check if dependency is from the same module
|
|
122
|
+
return this.findInternalModuleDependency(dependency, moduleClasses);
|
|
123
|
+
}
|
|
124
|
+
findExternalModuleDependency(dependency, moduleDeps) {
|
|
125
|
+
for (const depModule of moduleDeps) {
|
|
126
|
+
const depModuleClasses = this.moduleGroupedClasses.get(depModule);
|
|
127
|
+
if (depModuleClasses) {
|
|
128
|
+
const depClass = depModuleClasses.find(c => c.interfaceName === dependency);
|
|
129
|
+
if (depClass) {
|
|
130
|
+
const depModuleVarName = this.camelCase(depModule) + 'Container';
|
|
131
|
+
return `${depModuleVarName}.${dependency}`;
|
|
132
|
+
}
|
|
133
|
+
}
|
|
134
|
+
}
|
|
135
|
+
return null;
|
|
136
|
+
}
|
|
137
|
+
findInternalModuleDependency(dependency, moduleClasses) {
|
|
138
|
+
const depClass = moduleClasses.find(c => c.interfaceName === dependency);
|
|
139
|
+
if (depClass) {
|
|
140
|
+
if (depClass.scope === 'transient') {
|
|
141
|
+
const depInstanceName = this.camelCase(depClass.name);
|
|
142
|
+
return `${depInstanceName}Factory()`;
|
|
143
|
+
}
|
|
144
|
+
else {
|
|
145
|
+
const depGetterName = `get${depClass.name}`;
|
|
146
|
+
return `${depGetterName}()`;
|
|
147
|
+
}
|
|
148
|
+
}
|
|
149
|
+
return null;
|
|
150
|
+
}
|
|
151
|
+
generateModuleExports(moduleClasses) {
|
|
152
|
+
const moduleExports = [];
|
|
153
|
+
for (const classInfo of moduleClasses) {
|
|
154
|
+
if (classInfo.interfaceName) {
|
|
155
|
+
const exportGetter = this.createModuleExportGetter(classInfo);
|
|
156
|
+
moduleExports.push(exportGetter);
|
|
157
|
+
}
|
|
158
|
+
}
|
|
159
|
+
return moduleExports;
|
|
160
|
+
}
|
|
161
|
+
createModuleExportGetter(classInfo) {
|
|
162
|
+
const instanceName = this.camelCase(classInfo.name);
|
|
163
|
+
const isTransient = classInfo.scope === 'transient';
|
|
164
|
+
if (isTransient) {
|
|
165
|
+
return ` get ${classInfo.interfaceName}(): ${classInfo.name} {\n return ${instanceName}Factory();\n }`;
|
|
166
|
+
}
|
|
167
|
+
else {
|
|
168
|
+
const getterName = `get${classInfo.name}`;
|
|
169
|
+
return ` get ${classInfo.interfaceName}(): ${classInfo.name} {\n return ${getterName}();\n }`;
|
|
170
|
+
}
|
|
171
|
+
}
|
|
172
|
+
sortClassesByDependencies(classes, allModuleClasses) {
|
|
173
|
+
// Import TopologicalSorter when needed
|
|
174
|
+
const { TopologicalSorter } = require('../utils/topological-sorter');
|
|
175
|
+
// Build dependency graph for classes within the module
|
|
176
|
+
const dependencyGraph = new Map();
|
|
177
|
+
for (const classInfo of classes) {
|
|
178
|
+
const dependencies = [];
|
|
179
|
+
// Only include dependencies that are within the same module and are singletons
|
|
180
|
+
for (const dep of classInfo.dependencies) {
|
|
181
|
+
const depClass = allModuleClasses.find(c => c.interfaceName === dep && c.scope !== 'transient');
|
|
182
|
+
if (depClass && classes.includes(depClass)) {
|
|
183
|
+
dependencies.push(depClass.name);
|
|
184
|
+
}
|
|
185
|
+
}
|
|
186
|
+
dependencyGraph.set(classInfo.name, dependencies);
|
|
187
|
+
}
|
|
188
|
+
// Use TopologicalSorter to sort the classes
|
|
189
|
+
const sortResult = TopologicalSorter.sort(dependencyGraph);
|
|
190
|
+
// Map sorted class names back to ClassInfo objects
|
|
191
|
+
const classMap = new Map(classes.map(c => [c.name, c]));
|
|
192
|
+
return sortResult.sorted.map(className => classMap.get(className)).filter((classInfo) => classInfo !== undefined);
|
|
193
|
+
}
|
|
194
|
+
camelCase(str) {
|
|
195
|
+
return str.charAt(0).toLowerCase() + str.slice(1).replace(/[^a-zA-Z0-9]/g, '');
|
|
196
|
+
}
|
|
197
|
+
}
|
|
198
|
+
exports.ModuleContainerFunctionGenerator = ModuleContainerFunctionGenerator;
|
|
199
|
+
//# sourceMappingURL=module-container-function-generator.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"module-container-function-generator.js","sourceRoot":"","sources":["../../src/generator/module-container-function-generator.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@notjustcoders/ioc-arise",
|
|
3
|
-
"version": "1.0.
|
|
3
|
+
"version": "1.0.6",
|
|
4
4
|
"description": "A CLI tool to generate type-safe IoC containers for TypeScript projects with automatic dependency injection",
|
|
5
5
|
"main": "dist/index.js",
|
|
6
6
|
"bin": {
|
|
@@ -70,6 +70,6 @@
|
|
|
70
70
|
"test5:generate": "npm run build && node dist/index.js generate --source examples/simple-modules",
|
|
71
71
|
"test6:generate": "npm run build && node dist/index.js generate --source examples/use-cases-example",
|
|
72
72
|
"test7:generate": "npm run build && node dist/index.js generate --source examples/duplicate-interfaces-example",
|
|
73
|
-
"test8:generate": "npm run build && node dist/index.js generate --source examples/
|
|
73
|
+
"test8:generate": "npm run build && node dist/index.js generate --source examples/name-collision-example"
|
|
74
74
|
}
|
|
75
75
|
}
|
|
@@ -1,10 +0,0 @@
|
|
|
1
|
-
import { ClassInfo } from '../types';
|
|
2
|
-
export declare class ModuleContainerGenerator {
|
|
3
|
-
private moduleGroupedClasses;
|
|
4
|
-
constructor(moduleGroupedClasses: Map<string, ClassInfo[]>);
|
|
5
|
-
generateModuleContainers(): string;
|
|
6
|
-
generateAggregatedContainer(): string;
|
|
7
|
-
generateModularTypeExport(): string;
|
|
8
|
-
private camelCase;
|
|
9
|
-
}
|
|
10
|
-
//# sourceMappingURL=module-container-generator.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"module-container-generator.d.ts","sourceRoot":"","sources":["../../src/generator/module-container-generator.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,UAAU,CAAC;AAErC,qBAAa,wBAAwB;IACnC,OAAO,CAAC,oBAAoB,CAA2B;gBAE3C,oBAAoB,EAAE,GAAG,CAAC,MAAM,EAAE,SAAS,EAAE,CAAC;IAI1D,wBAAwB,IAAI,MAAM;IA+BlC,2BAA2B,IAAI,MAAM;IAYrC,yBAAyB,IAAI,MAAM;IAInC,OAAO,CAAC,SAAS;CAGlB"}
|
|
@@ -1,51 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.ModuleContainerGenerator = void 0;
|
|
4
|
-
class ModuleContainerGenerator {
|
|
5
|
-
constructor(moduleGroupedClasses) {
|
|
6
|
-
this.moduleGroupedClasses = moduleGroupedClasses;
|
|
7
|
-
}
|
|
8
|
-
generateModuleContainers() {
|
|
9
|
-
const moduleContainerCodes = [];
|
|
10
|
-
for (const [moduleName, moduleClasses] of this.moduleGroupedClasses) {
|
|
11
|
-
const moduleVarName = this.camelCase(moduleName) + 'Container';
|
|
12
|
-
const moduleExports = [];
|
|
13
|
-
for (const classInfo of moduleClasses) {
|
|
14
|
-
if (classInfo.interfaceName) {
|
|
15
|
-
const instanceName = this.camelCase(classInfo.name);
|
|
16
|
-
// Check if this is a transient dependency (has factory)
|
|
17
|
-
const isTransient = classInfo.scope === 'transient';
|
|
18
|
-
const exportValue = isTransient ?
|
|
19
|
-
`get ${classInfo.interfaceName}(): ${classInfo.name} {\n return ${instanceName}Factory();\n }` :
|
|
20
|
-
`${classInfo.interfaceName}: ${instanceName}`;
|
|
21
|
-
if (isTransient) {
|
|
22
|
-
moduleExports.push(` ${exportValue}`);
|
|
23
|
-
}
|
|
24
|
-
else {
|
|
25
|
-
moduleExports.push(` ${exportValue}`);
|
|
26
|
-
}
|
|
27
|
-
}
|
|
28
|
-
}
|
|
29
|
-
const moduleContainerCode = `const ${moduleVarName} = {\n${moduleExports.join(',\n')}\n};`;
|
|
30
|
-
moduleContainerCodes.push(moduleContainerCode);
|
|
31
|
-
}
|
|
32
|
-
return moduleContainerCodes.join('\n\n');
|
|
33
|
-
}
|
|
34
|
-
generateAggregatedContainer() {
|
|
35
|
-
const moduleExports = [];
|
|
36
|
-
for (const [moduleName] of this.moduleGroupedClasses) {
|
|
37
|
-
const moduleVarName = this.camelCase(moduleName) + 'Container';
|
|
38
|
-
const moduleKey = this.camelCase(moduleName);
|
|
39
|
-
moduleExports.push(` ${moduleKey}: ${moduleVarName}`);
|
|
40
|
-
}
|
|
41
|
-
return `export const container = {\n${moduleExports.join(',\n')}\n};`;
|
|
42
|
-
}
|
|
43
|
-
generateModularTypeExport() {
|
|
44
|
-
return 'export type Container = typeof container;';
|
|
45
|
-
}
|
|
46
|
-
camelCase(str) {
|
|
47
|
-
return str.charAt(0).toLowerCase() + str.slice(1).replace(/[^a-zA-Z0-9]/g, '');
|
|
48
|
-
}
|
|
49
|
-
}
|
|
50
|
-
exports.ModuleContainerGenerator = ModuleContainerGenerator;
|
|
51
|
-
//# sourceMappingURL=module-container-generator.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"module-container-generator.js","sourceRoot":"","sources":["../../src/generator/module-container-generator.ts"],"names":[],"mappings":";;;AAEA,MAAa,wBAAwB;IAGnC,YAAY,oBAA8C;QACxD,IAAI,CAAC,oBAAoB,GAAG,oBAAoB,CAAC;IACnD,CAAC;IAED,wBAAwB;QACtB,MAAM,oBAAoB,GAAa,EAAE,CAAC;QAE1C,KAAK,MAAM,CAAC,UAAU,EAAE,aAAa,CAAC,IAAI,IAAI,CAAC,oBAAoB,EAAE,CAAC;YACpE,MAAM,aAAa,GAAG,IAAI,CAAC,SAAS,CAAC,UAAU,CAAC,GAAG,WAAW,CAAC;YAC/D,MAAM,aAAa,GAAa,EAAE,CAAC;YAEnC,KAAK,MAAM,SAAS,IAAI,aAAa,EAAE,CAAC;gBACtC,IAAI,SAAS,CAAC,aAAa,EAAE,CAAC;oBAC5B,MAAM,YAAY,GAAG,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;oBACpD,wDAAwD;oBACxD,MAAM,WAAW,GAAG,SAAS,CAAC,KAAK,KAAK,WAAW,CAAC;oBACpD,MAAM,WAAW,GAAG,WAAW,CAAC,CAAC;wBAC/B,OAAO,SAAS,CAAC,aAAa,OAAO,SAAS,CAAC,IAAI,kBAAkB,YAAY,iBAAiB,CAAC,CAAC;wBACpG,GAAG,SAAS,CAAC,aAAa,KAAK,YAAY,EAAE,CAAC;oBAEhD,IAAI,WAAW,EAAE,CAAC;wBAChB,aAAa,CAAC,IAAI,CAAC,KAAK,WAAW,EAAE,CAAC,CAAC;oBACzC,CAAC;yBAAM,CAAC;wBACN,aAAa,CAAC,IAAI,CAAC,KAAK,WAAW,EAAE,CAAC,CAAC;oBACzC,CAAC;gBACH,CAAC;YACH,CAAC;YAED,MAAM,mBAAmB,GAAG,SAAS,aAAa,SAAS,aAAa,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC;YAC3F,oBAAoB,CAAC,IAAI,CAAC,mBAAmB,CAAC,CAAC;QACjD,CAAC;QAED,OAAO,oBAAoB,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;IAC3C,CAAC;IAED,2BAA2B;QACzB,MAAM,aAAa,GAAa,EAAE,CAAC;QAEnC,KAAK,MAAM,CAAC,UAAU,CAAC,IAAI,IAAI,CAAC,oBAAoB,EAAE,CAAC;YACrD,MAAM,aAAa,GAAG,IAAI,CAAC,SAAS,CAAC,UAAU,CAAC,GAAG,WAAW,CAAC;YAC/D,MAAM,SAAS,GAAG,IAAI,CAAC,SAAS,CAAC,UAAU,CAAC,CAAC;YAC7C,aAAa,CAAC,IAAI,CAAC,KAAK,SAAS,KAAK,aAAa,EAAE,CAAC,CAAC;QACzD,CAAC;QAED,OAAO,+BAA+B,aAAa,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC;IACxE,CAAC;IAED,yBAAyB;QACvB,OAAO,2CAA2C,CAAC;IACrD,CAAC;IAEO,SAAS,CAAC,GAAW;QAC3B,OAAO,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,GAAG,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,eAAe,EAAE,EAAE,CAAC,CAAC;IACjF,CAAC;CACF;AAzDD,4DAyDC"}
|