@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,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
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"flat-container-generator.js","sourceRoot":"","sources":["../../../src/generator/flat/flat-container-generator.ts"],"names":[],"mappings":";;;AAIA,0EAAqE;AAIrE;;;GAGG;AACH,MAAa,sBAAuB,SAAQ,iDAAsB;IAMhE,YACE,UAAsB,EACtB,OAAoB,EACpB,kBAAsC,EACtC,eAAgC,EAChC,sBAA8C,EAC9C,sBAA8C;QAE9C,KAAK,CAAC,UAAU,EAAE,eAAe,CAAC,CAAC;QACnC,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC;QACvB,IAAI,CAAC,kBAAkB,GAAG,kBAAkB,CAAC;QAC7C,IAAI,CAAC,sBAAsB,GAAG,sBAAsB,CAAC;QACrD,IAAI,CAAC,sBAAsB,GAAG,sBAAsB,CAAC;IACvD,CAAC;IAED,QAAQ;QACN,MAAM,UAAU,GAAG,IAAI,CAAC,kBAAkB,CAAC,OAAO,EAAE,CAAC;QAErD,IAAI,UAAU,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACjC,MAAM,IAAI,KAAK,CAAC,mCAAmC,IAAI,CAAC,SAAS,CAAC,UAAU,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;QAC1F,CAAC;QAED,MAAM,aAAa,GAAG,IAAI,CAAC,qBAAqB,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC;QACpE,IAAI,CAAC,cAAc,CAAC,aAAa,CAAC,CAAC;IACrC,CAAC;IAES,qBAAqB,CAAC,aAAwB;QACtD,IAAI,CAAC,aAAa,EAAE,CAAC;YACnB,MAAM,UAAU,GAAG,IAAI,CAAC,kBAAkB,CAAC,OAAO,EAAE,CAAC;YACrD,aAAa,GAAG,UAAU,CAAC,MAAM,CAAC;QACpC,CAAC;QAED,MAAM,OAAO,GAAG,IAAI,CAAC,eAAe,CAAC,eAAe,EAAE,CAAC;QACvD,MAAM,cAAc,GAAG,IAAI,CAAC,sBAAsB,CAAC,sBAAsB,CAAC,aAAa,CAAC,CAAC;QACzF,MAAM,eAAe,GAAG,IAAI,CAAC,sBAAsB,CAAC,uBAAuB,EAAE,CAAC;QAC9E,MAAM,UAAU,GAAG,IAAI,CAAC,sBAAsB,CAAC,kBAAkB,EAAE,CAAC;QAEpE,OAAO,GAAG,OAAO,OAAO,cAAc,OAAO,eAAe,OAAO,UAAU,IAAI,CAAC;IACpF,CAAC;IAED;;OAEG;IACH,UAAU;QACR,OAAO,IAAI,CAAC,OAAO,CAAC;IACtB,CAAC;CACF;AApDD,wDAoDC"}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import { ClassInfo } from '../../types';
|
|
2
|
+
export declare class InstantiationGenerator {
|
|
3
|
+
private classes;
|
|
4
|
+
private dependencyResolver;
|
|
5
|
+
private classMap;
|
|
6
|
+
private interfaceToClassMap;
|
|
7
|
+
constructor(classes: ClassInfo[]);
|
|
8
|
+
generateInstantiations(sortedClasses: string[]): string;
|
|
9
|
+
private separateClassesByScope;
|
|
10
|
+
private filterSingletonClassNames;
|
|
11
|
+
private generateTransientFactories;
|
|
12
|
+
private createTransientFactory;
|
|
13
|
+
private generateSingletonVariables;
|
|
14
|
+
private generateSingletonGetters;
|
|
15
|
+
private createSingletonGetter;
|
|
16
|
+
private generateConstructorArguments;
|
|
17
|
+
private resolveParameterDependency;
|
|
18
|
+
private getTargetDependency;
|
|
19
|
+
private createManagedDependencyCall;
|
|
20
|
+
}
|
|
21
|
+
//# sourceMappingURL=instantiation-generator.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"instantiation-generator.d.ts","sourceRoot":"","sources":["../../../src/generator/flat/instantiation-generator.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAIxC,qBAAa,sBAAsB;IACjC,OAAO,CAAC,OAAO,CAAc;IAC7B,OAAO,CAAC,kBAAkB,CAAqB;IAC/C,OAAO,CAAC,QAAQ,CAAyB;IACzC,OAAO,CAAC,mBAAmB,CAAsB;gBAErC,OAAO,EAAE,SAAS,EAAE;IAOhC,sBAAsB,CAAC,aAAa,EAAE,MAAM,EAAE,GAAG,MAAM;IAavD,OAAO,CAAC,sBAAsB;IAO9B,OAAO,CAAC,yBAAyB;IAMjC,OAAO,CAAC,0BAA0B;IAalC,OAAO,CAAC,sBAAsB;IAS9B,OAAO,CAAC,0BAA0B;IAclC,OAAO,CAAC,wBAAwB;IAahC,OAAO,CAAC,qBAAqB;IAe7B,OAAO,CAAC,4BAA4B;IAUpC,OAAO,CAAC,0BAA0B;IAgBlC,OAAO,CAAC,mBAAmB;IAU3B,OAAO,CAAC,2BAA2B;CAMpC"}
|
|
@@ -0,0 +1,116 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.InstantiationGenerator = void 0;
|
|
4
|
+
const naming_1 = require("../../utils/naming");
|
|
5
|
+
const dependency_resolver_1 = require("./dependency-resolver");
|
|
6
|
+
class InstantiationGenerator {
|
|
7
|
+
constructor(classes) {
|
|
8
|
+
this.classes = classes;
|
|
9
|
+
this.dependencyResolver = new dependency_resolver_1.DependencyResolver(classes);
|
|
10
|
+
this.classMap = new Map(classes.map(c => [c.name, c]));
|
|
11
|
+
this.interfaceToClassMap = this.dependencyResolver.createInterfaceToClassMap();
|
|
12
|
+
}
|
|
13
|
+
generateInstantiations(sortedClasses) {
|
|
14
|
+
const { singletonClasses, transientClasses } = this.separateClassesByScope();
|
|
15
|
+
const singletonClassNames = this.filterSingletonClassNames(sortedClasses, singletonClasses);
|
|
16
|
+
const sections = [
|
|
17
|
+
this.generateTransientFactories(transientClasses),
|
|
18
|
+
this.generateSingletonVariables(singletonClassNames),
|
|
19
|
+
this.generateSingletonGetters(singletonClassNames)
|
|
20
|
+
].filter(section => section.length > 0);
|
|
21
|
+
return sections.join('\n\n');
|
|
22
|
+
}
|
|
23
|
+
separateClassesByScope() {
|
|
24
|
+
return {
|
|
25
|
+
singletonClasses: this.classes.filter(c => c.scope === 'singleton'),
|
|
26
|
+
transientClasses: this.classes.filter(c => c.scope === 'transient')
|
|
27
|
+
};
|
|
28
|
+
}
|
|
29
|
+
filterSingletonClassNames(sortedClasses, singletonClasses) {
|
|
30
|
+
return sortedClasses.filter(name => singletonClasses.some(c => c.name === name));
|
|
31
|
+
}
|
|
32
|
+
generateTransientFactories(transientClasses) {
|
|
33
|
+
if (transientClasses.length === 0)
|
|
34
|
+
return '';
|
|
35
|
+
const factories = transientClasses.map(classInfo => this.createTransientFactory(classInfo));
|
|
36
|
+
return [
|
|
37
|
+
'// Lazy loading setup for transient dependencies',
|
|
38
|
+
...factories
|
|
39
|
+
].join('\n');
|
|
40
|
+
}
|
|
41
|
+
createTransientFactory(classInfo) {
|
|
42
|
+
const variableName = (0, naming_1.toVariableName)(classInfo.name);
|
|
43
|
+
const constructorArgs = this.generateConstructorArguments(classInfo);
|
|
44
|
+
return constructorArgs
|
|
45
|
+
? `const ${variableName}Factory = (): ${classInfo.name} => new ${classInfo.name}(${constructorArgs});`
|
|
46
|
+
: `const ${variableName}Factory = (): ${classInfo.name} => new ${classInfo.name}();`;
|
|
47
|
+
}
|
|
48
|
+
generateSingletonVariables(singletonClassNames) {
|
|
49
|
+
if (singletonClassNames.length === 0)
|
|
50
|
+
return '';
|
|
51
|
+
const variables = singletonClassNames.map(className => {
|
|
52
|
+
const variableName = (0, naming_1.toVariableName)(className);
|
|
53
|
+
return `let ${variableName}: ${className} | undefined;`;
|
|
54
|
+
});
|
|
55
|
+
return [
|
|
56
|
+
'// Lazy initialization variables for singletons',
|
|
57
|
+
...variables
|
|
58
|
+
].join('\n');
|
|
59
|
+
}
|
|
60
|
+
generateSingletonGetters(singletonClassNames) {
|
|
61
|
+
if (singletonClassNames.length === 0)
|
|
62
|
+
return '';
|
|
63
|
+
const getters = [...singletonClassNames].reverse().map(className => this.createSingletonGetter(className)).filter(getter => getter !== null);
|
|
64
|
+
return [
|
|
65
|
+
'// Lazy getter functions for singletons',
|
|
66
|
+
...getters
|
|
67
|
+
].join('\n');
|
|
68
|
+
}
|
|
69
|
+
createSingletonGetter(className) {
|
|
70
|
+
const classInfo = this.classMap.get(className);
|
|
71
|
+
if (!classInfo)
|
|
72
|
+
return null;
|
|
73
|
+
const variableName = (0, naming_1.toVariableName)(className);
|
|
74
|
+
const getterName = `get${className}`;
|
|
75
|
+
const constructorArgs = this.generateConstructorArguments(classInfo);
|
|
76
|
+
const instantiation = constructorArgs
|
|
77
|
+
? `new ${className}(${constructorArgs})`
|
|
78
|
+
: `new ${className}()`;
|
|
79
|
+
return `const ${getterName} = (): ${className} => {\n if (!${variableName}) {\n ${variableName} = ${instantiation};\n }\n return ${variableName};\n};`;
|
|
80
|
+
}
|
|
81
|
+
generateConstructorArguments(classInfo) {
|
|
82
|
+
if (classInfo.constructorParams.length === 0)
|
|
83
|
+
return '';
|
|
84
|
+
const args = classInfo.constructorParams.map((param, paramIndex) => this.resolveParameterDependency(classInfo, param, paramIndex));
|
|
85
|
+
return args.join(', ');
|
|
86
|
+
}
|
|
87
|
+
resolveParameterDependency(classInfo, param, paramIndex) {
|
|
88
|
+
const targetDependency = this.getTargetDependency(classInfo, param, paramIndex);
|
|
89
|
+
const implementingClass = this.interfaceToClassMap.get(targetDependency) || targetDependency;
|
|
90
|
+
const depClassInfo = this.classMap.get(implementingClass);
|
|
91
|
+
if (depClassInfo) {
|
|
92
|
+
return this.createManagedDependencyCall(depClassInfo, implementingClass);
|
|
93
|
+
}
|
|
94
|
+
if (classInfo.dependencies.includes(targetDependency)) {
|
|
95
|
+
return `new ${targetDependency}()`;
|
|
96
|
+
}
|
|
97
|
+
return this.dependencyResolver.getDefaultValueForType(param.type, param.isOptional);
|
|
98
|
+
}
|
|
99
|
+
getTargetDependency(classInfo, param, paramIndex) {
|
|
100
|
+
if (paramIndex < classInfo.dependencies.length) {
|
|
101
|
+
const resolvedDep = classInfo.dependencies[paramIndex];
|
|
102
|
+
if (resolvedDep)
|
|
103
|
+
return resolvedDep;
|
|
104
|
+
}
|
|
105
|
+
const directMatch = classInfo.dependencies.find(dep => dep === param.type);
|
|
106
|
+
return directMatch || param.type;
|
|
107
|
+
}
|
|
108
|
+
createManagedDependencyCall(depClassInfo, implementingClass) {
|
|
109
|
+
if (depClassInfo.scope === 'transient') {
|
|
110
|
+
return `${(0, naming_1.toVariableName)(implementingClass)}Factory()`;
|
|
111
|
+
}
|
|
112
|
+
return `get${implementingClass}()`;
|
|
113
|
+
}
|
|
114
|
+
}
|
|
115
|
+
exports.InstantiationGenerator = InstantiationGenerator;
|
|
116
|
+
//# sourceMappingURL=instantiation-generator.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"instantiation-generator.js","sourceRoot":"","sources":["../../../src/generator/flat/instantiation-generator.ts"],"names":[],"mappings":"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"}
|
|
@@ -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-container-generator.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,UAAU,CAAC;AACrC,OAAO,EAAE,kBAAkB,EAAE,MAAM,iCAAiC,CAAC;AACrE,OAAO,EAAE,kBAAkB,IAAI,sBAAsB,EAAE,MAAM,uBAAuB,CAAC;AACrF,OAAO,EAAE,sBAAsB,EAAE,MAAM,2BAA2B,CAAC;AACnE,OAAO,EAAE,sBAAsB,EAAE,MAAM,4BAA4B,CAAC;AACpE,OAAO,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;AACrD,OAAO,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AAE3C;;;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
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"flat-container-generator.js","sourceRoot":"","sources":["../../src/generator/flat-container-generator.ts"],"names":[],"mappings":";;;AAIA,yEAAoE;AAIpE;;;GAGG;AACH,MAAa,sBAAuB,SAAQ,iDAAsB;IAMhE,YACE,UAAsB,EACtB,OAAoB,EACpB,kBAAsC,EACtC,eAAgC,EAChC,sBAA8C,EAC9C,sBAA8C;QAE9C,KAAK,CAAC,UAAU,EAAE,eAAe,CAAC,CAAC;QACnC,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC;QACvB,IAAI,CAAC,kBAAkB,GAAG,kBAAkB,CAAC;QAC7C,IAAI,CAAC,sBAAsB,GAAG,sBAAsB,CAAC;QACrD,IAAI,CAAC,sBAAsB,GAAG,sBAAsB,CAAC;IACvD,CAAC;IAED,QAAQ;QACN,MAAM,UAAU,GAAG,IAAI,CAAC,kBAAkB,CAAC,OAAO,EAAE,CAAC;QAErD,IAAI,UAAU,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACjC,MAAM,IAAI,KAAK,CAAC,mCAAmC,IAAI,CAAC,SAAS,CAAC,UAAU,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;QAC1F,CAAC;QAED,MAAM,aAAa,GAAG,IAAI,CAAC,qBAAqB,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC;QACpE,IAAI,CAAC,cAAc,CAAC,aAAa,CAAC,CAAC;IACrC,CAAC;IAES,qBAAqB,CAAC,aAAwB;QACtD,IAAI,CAAC,aAAa,EAAE,CAAC;YACnB,MAAM,UAAU,GAAG,IAAI,CAAC,kBAAkB,CAAC,OAAO,EAAE,CAAC;YACrD,aAAa,GAAG,UAAU,CAAC,MAAM,CAAC;QACpC,CAAC;QAED,MAAM,OAAO,GAAG,IAAI,CAAC,eAAe,CAAC,eAAe,EAAE,CAAC;QACvD,MAAM,cAAc,GAAG,IAAI,CAAC,sBAAsB,CAAC,sBAAsB,CAAC,aAAa,CAAC,CAAC;QACzF,MAAM,eAAe,GAAG,IAAI,CAAC,sBAAsB,CAAC,uBAAuB,EAAE,CAAC;QAC9E,MAAM,UAAU,GAAG,IAAI,CAAC,sBAAsB,CAAC,kBAAkB,EAAE,CAAC;QAEpE,OAAO,GAAG,OAAO,OAAO,cAAc,OAAO,eAAe,OAAO,UAAU,IAAI,CAAC;IACpF,CAAC;IAED;;OAEG;IACH,UAAU;QACR,OAAO,IAAI,CAAC,OAAO,CAAC;IACtB,CAAC;CACF;AApDD,wDAoDC"}
|
|
@@ -1 +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;
|
|
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;CAsB1B"}
|
|
@@ -17,10 +17,8 @@ class ImportGenerator {
|
|
|
17
17
|
for (const dep of classInfo.dependencies) {
|
|
18
18
|
// If dependency is not a managed class, we need to import it
|
|
19
19
|
if (!classMap.has(dep)) {
|
|
20
|
-
//
|
|
21
|
-
|
|
22
|
-
importSet.add(`import { ${dep} } from '${classInfo.importPath}';`);
|
|
23
|
-
}
|
|
20
|
+
//TODO: Think about this
|
|
21
|
+
// importSet.add(`import { ${dep} } from '${classInfo.importPath}';`);
|
|
24
22
|
}
|
|
25
23
|
}
|
|
26
24
|
}
|
|
@@ -1 +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;
|
|
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;oBACrB,wBAAwB;oBACxB,sEAAsE;gBAC1E,CAAC;YACH,CAAC;QACH,CAAC;QAED,OAAO,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAC1C,CAAC;CACF;AA7BD,0CA6BC"}
|
|
@@ -1,4 +1,20 @@
|
|
|
1
1
|
import { ClassInfo } from '../types';
|
|
2
|
+
/**
|
|
3
|
+
* Generates a container file from either flat classes or module-grouped classes.
|
|
4
|
+
*
|
|
5
|
+
* @param classesOrModules - Either a flat array of classes or a Map of module-grouped classes
|
|
6
|
+
* @param outputPath - The output path for the generated container file
|
|
7
|
+
*/
|
|
2
8
|
export declare function generateContainerFile(classesOrModules: ClassInfo[] | Map<string, ClassInfo[]>, outputPath: string): void;
|
|
9
|
+
/**
|
|
10
|
+
* Detects circular dependencies in a flat array of classes.
|
|
11
|
+
*
|
|
12
|
+
* @param classes - The classes to check for circular dependencies
|
|
13
|
+
* @returns An array of circular dependency chains
|
|
14
|
+
*/
|
|
3
15
|
export declare function detectCircularDependencies(classes: ClassInfo[]): string[][];
|
|
16
|
+
export { ContainerGeneratorFactory } from './container-generator-factory';
|
|
17
|
+
export { BaseContainerGenerator } from './base-container-generator';
|
|
18
|
+
export { FlatContainerGenerator } from './flat/flat-container-generator';
|
|
19
|
+
export { ModularContainerGenerator } from './modular/modular-container-generator';
|
|
4
20
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/generator/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,UAAU,CAAC;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/generator/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,UAAU,CAAC;AAIrC;;;;;GAKG;AACH,wBAAgB,qBAAqB,CAAC,gBAAgB,EAAE,SAAS,EAAE,GAAG,GAAG,CAAC,MAAM,EAAE,SAAS,EAAE,CAAC,EAAE,UAAU,EAAE,MAAM,GAAG,IAAI,CAGxH;AAED;;;;;GAKG;AACH,wBAAgB,0BAA0B,CAAC,OAAO,EAAE,SAAS,EAAE,GAAG,MAAM,EAAE,EAAE,CAG3E;AAGD,OAAO,EAAE,yBAAyB,EAAE,MAAM,+BAA+B,CAAC;AAC1E,OAAO,EAAE,sBAAsB,EAAE,MAAM,4BAA4B,CAAC;AACpE,OAAO,EAAE,sBAAsB,EAAE,MAAM,iCAAiC,CAAC;AACzE,OAAO,EAAE,yBAAyB,EAAE,MAAM,uCAAuC,CAAC"}
|
package/dist/generator/index.js
CHANGED
|
@@ -1,25 +1,37 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.ModularContainerGenerator = exports.FlatContainerGenerator = exports.BaseContainerGenerator = exports.ContainerGeneratorFactory = void 0;
|
|
3
4
|
exports.generateContainerFile = generateContainerFile;
|
|
4
5
|
exports.detectCircularDependencies = detectCircularDependencies;
|
|
5
6
|
const dependency_resolver_1 = require("../analyser/dependency-resolver");
|
|
6
|
-
const
|
|
7
|
-
|
|
8
|
-
|
|
7
|
+
const container_generator_factory_1 = require("./container-generator-factory");
|
|
8
|
+
/**
|
|
9
|
+
* Generates a container file from either flat classes or module-grouped classes.
|
|
10
|
+
*
|
|
11
|
+
* @param classesOrModules - Either a flat array of classes or a Map of module-grouped classes
|
|
12
|
+
* @param outputPath - The output path for the generated container file
|
|
13
|
+
*/
|
|
9
14
|
function generateContainerFile(classesOrModules, outputPath) {
|
|
10
|
-
|
|
11
|
-
|
|
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
|
-
}
|
|
15
|
+
const generator = container_generator_factory_1.ContainerGeneratorFactory.create(classesOrModules, outputPath);
|
|
16
|
+
generator.generate();
|
|
20
17
|
}
|
|
18
|
+
/**
|
|
19
|
+
* Detects circular dependencies in a flat array of classes.
|
|
20
|
+
*
|
|
21
|
+
* @param classes - The classes to check for circular dependencies
|
|
22
|
+
* @returns An array of circular dependency chains
|
|
23
|
+
*/
|
|
21
24
|
function detectCircularDependencies(classes) {
|
|
22
25
|
const resolver = new dependency_resolver_1.DependencyResolver(classes);
|
|
23
26
|
return resolver.detectCircularDependencies();
|
|
24
27
|
}
|
|
28
|
+
// Re-export the factory for advanced usage
|
|
29
|
+
var container_generator_factory_2 = require("./container-generator-factory");
|
|
30
|
+
Object.defineProperty(exports, "ContainerGeneratorFactory", { enumerable: true, get: function () { return container_generator_factory_2.ContainerGeneratorFactory; } });
|
|
31
|
+
var base_container_generator_1 = require("./base-container-generator");
|
|
32
|
+
Object.defineProperty(exports, "BaseContainerGenerator", { enumerable: true, get: function () { return base_container_generator_1.BaseContainerGenerator; } });
|
|
33
|
+
var flat_container_generator_1 = require("./flat/flat-container-generator");
|
|
34
|
+
Object.defineProperty(exports, "FlatContainerGenerator", { enumerable: true, get: function () { return flat_container_generator_1.FlatContainerGenerator; } });
|
|
35
|
+
var modular_container_generator_1 = require("./modular/modular-container-generator");
|
|
36
|
+
Object.defineProperty(exports, "ModularContainerGenerator", { enumerable: true, get: function () { return modular_container_generator_1.ModularContainerGenerator; } });
|
|
25
37
|
//# sourceMappingURL=index.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/generator/index.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/generator/index.ts"],"names":[],"mappings":";;;AAUA,sDAGC;AAQD,gEAGC;AAvBD,yEAAqE;AACrE,+EAA0E;AAE1E;;;;;GAKG;AACH,SAAgB,qBAAqB,CAAC,gBAAwD,EAAE,UAAkB;IAChH,MAAM,SAAS,GAAG,uDAAyB,CAAC,MAAM,CAAC,gBAAgB,EAAE,UAAU,CAAC,CAAC;IACjF,SAAS,CAAC,QAAQ,EAAE,CAAC;AACvB,CAAC;AAED;;;;;GAKG;AACH,SAAgB,0BAA0B,CAAC,OAAoB;IAC7D,MAAM,QAAQ,GAAG,IAAI,wCAAkB,CAAC,OAAO,CAAC,CAAC;IACjD,OAAO,QAAQ,CAAC,0BAA0B,EAAE,CAAC;AAC/C,CAAC;AAED,2CAA2C;AAC3C,6EAA0E;AAAjE,wIAAA,yBAAyB,OAAA;AAClC,uEAAoE;AAA3D,kIAAA,sBAAsB,OAAA;AAC/B,4EAAyE;AAAhE,kIAAA,sBAAsB,OAAA;AAC/B,qFAAkF;AAAzE,wIAAA,yBAAyB,OAAA"}
|
|
@@ -2,7 +2,20 @@ import { ClassInfo } from '../types';
|
|
|
2
2
|
export declare class InstantiationGenerator {
|
|
3
3
|
private classes;
|
|
4
4
|
private dependencyResolver;
|
|
5
|
+
private classMap;
|
|
6
|
+
private interfaceToClassMap;
|
|
5
7
|
constructor(classes: ClassInfo[]);
|
|
6
8
|
generateInstantiations(sortedClasses: string[]): string;
|
|
9
|
+
private separateClassesByScope;
|
|
10
|
+
private filterSingletonClassNames;
|
|
11
|
+
private generateTransientFactories;
|
|
12
|
+
private createTransientFactory;
|
|
13
|
+
private generateSingletonVariables;
|
|
14
|
+
private generateSingletonGetters;
|
|
15
|
+
private createSingletonGetter;
|
|
16
|
+
private generateConstructorArguments;
|
|
17
|
+
private resolveParameterDependency;
|
|
18
|
+
private getTargetDependency;
|
|
19
|
+
private createManagedDependencyCall;
|
|
7
20
|
}
|
|
8
21
|
//# sourceMappingURL=instantiation-generator.d.ts.map
|
|
@@ -1 +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;
|
|
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;IAC/C,OAAO,CAAC,QAAQ,CAAyB;IACzC,OAAO,CAAC,mBAAmB,CAAsB;gBAErC,OAAO,EAAE,SAAS,EAAE;IAOhC,sBAAsB,CAAC,aAAa,EAAE,MAAM,EAAE,GAAG,MAAM;IAavD,OAAO,CAAC,sBAAsB;IAO9B,OAAO,CAAC,yBAAyB;IAMjC,OAAO,CAAC,0BAA0B;IAalC,OAAO,CAAC,sBAAsB;IAS9B,OAAO,CAAC,0BAA0B;IAclC,OAAO,CAAC,wBAAwB;IAahC,OAAO,CAAC,qBAAqB;IAe7B,OAAO,CAAC,4BAA4B;IAUpC,OAAO,CAAC,0BAA0B;IAgBlC,OAAO,CAAC,mBAAmB;IAU3B,OAAO,CAAC,2BAA2B;CAMpC"}
|