@notjustcoders/ioc-arise 1.0.3 → 1.0.5

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.
Files changed (47) hide show
  1. package/dist/analyser/ast-parser.d.ts +1 -0
  2. package/dist/analyser/ast-parser.d.ts.map +1 -1
  3. package/dist/analyser/ast-parser.js +40 -0
  4. package/dist/analyser/ast-parser.js.map +1 -1
  5. package/dist/analyser/class-analyzer.d.ts +4 -1
  6. package/dist/analyser/class-analyzer.d.ts.map +1 -1
  7. package/dist/analyser/class-analyzer.js +96 -11
  8. package/dist/analyser/class-analyzer.js.map +1 -1
  9. package/dist/analyser/project-analyzer.d.ts +0 -1
  10. package/dist/analyser/project-analyzer.d.ts.map +1 -1
  11. package/dist/analyser/project-analyzer.js +4 -27
  12. package/dist/analyser/project-analyzer.js.map +1 -1
  13. package/dist/commands/analyze.d.ts.map +1 -1
  14. package/dist/commands/analyze.js +1 -0
  15. package/dist/commands/analyze.js.map +1 -1
  16. package/dist/commands/generate.d.ts.map +1 -1
  17. package/dist/commands/generate.js +4 -2
  18. package/dist/commands/generate.js.map +1 -1
  19. package/dist/generator/{container-file-generator.d.ts → Container-file-generator.d.ts} +1 -1
  20. package/dist/generator/{container-file-generator.d.ts.map → Container-file-generator.d.ts.map} +1 -1
  21. package/dist/generator/{container-file-generator.js → Container-file-generator.js} +1 -1
  22. package/dist/generator/{container-file-generator.js.map → Container-file-generator.js.map} +1 -1
  23. package/dist/generator/base-container-generator.d.ts +28 -0
  24. package/dist/generator/base-container-generator.d.ts.map +1 -0
  25. package/dist/generator/base-container-generator.js +28 -0
  26. package/dist/generator/base-container-generator.js.map +1 -0
  27. package/dist/generator/container-generator-factory.d.ts +40 -0
  28. package/dist/generator/container-generator-factory.d.ts.map +1 -0
  29. package/dist/generator/container-generator-factory.js +81 -0
  30. package/dist/generator/container-generator-factory.js.map +1 -0
  31. package/dist/generator/flat-container-generator.d.ts +24 -0
  32. package/dist/generator/flat-container-generator.d.ts.map +1 -0
  33. package/dist/generator/flat-container-generator.js +44 -0
  34. package/dist/generator/flat-container-generator.js.map +1 -0
  35. package/dist/generator/index.d.ts +16 -0
  36. package/dist/generator/index.d.ts.map +1 -1
  37. package/dist/generator/index.js +25 -13
  38. package/dist/generator/index.js.map +1 -1
  39. package/dist/generator/modular-container-generator.d.ts +20 -0
  40. package/dist/generator/modular-container-generator.d.ts.map +1 -0
  41. package/dist/generator/modular-container-generator.js +215 -0
  42. package/dist/generator/modular-container-generator.js.map +1 -0
  43. package/package.json +5 -2
  44. package/dist/generator/module-container-generator.d.ts +0 -10
  45. package/dist/generator/module-container-generator.d.ts.map +0 -1
  46. package/dist/generator/module-container-generator.js +0 -51
  47. package/dist/generator/module-container-generator.js.map +0 -1
@@ -0,0 +1,40 @@
1
+ import { BaseContainerGenerator } from './base-container-generator';
2
+ import { ClassInfo } from '../types';
3
+ /**
4
+ * Factory class for creating the appropriate container generator
5
+ * based on the input type (flat classes or module-grouped classes).
6
+ * Handles dependency injection at the factory level instead of constructor level.
7
+ */
8
+ export declare class ContainerGeneratorFactory {
9
+ /**
10
+ * Creates the appropriate container generator based on the input type.
11
+ * Injects all necessary dependencies in the constructor.
12
+ *
13
+ * @param classesOrModules - Either a flat array of classes or a Map of module-grouped classes
14
+ * @param outputPath - The output path for the generated container file
15
+ * @returns The appropriate container generator instance with dependencies injected
16
+ */
17
+ static create(classesOrModules: ClassInfo[] | Map<string, ClassInfo[]>, outputPath: string): BaseContainerGenerator;
18
+ /**
19
+ * Determines if the input represents a modular structure.
20
+ *
21
+ * @param classesOrModules - The input to check
22
+ * @returns true if the input is a Map (modular), false if it's an array (flat)
23
+ */
24
+ static isModular(classesOrModules: ClassInfo[] | Map<string, ClassInfo[]>): boolean;
25
+ /**
26
+ * Gets the total number of classes from either flat or modular input.
27
+ *
28
+ * @param classesOrModules - The input to count classes from
29
+ * @returns The total number of classes
30
+ */
31
+ static getClassCount(classesOrModules: ClassInfo[] | Map<string, ClassInfo[]>): number;
32
+ /**
33
+ * Gets the number of modules from modular input.
34
+ *
35
+ * @param classesOrModules - The input to count modules from
36
+ * @returns The number of modules, or 1 for flat structure
37
+ */
38
+ static getModuleCount(classesOrModules: ClassInfo[] | Map<string, ClassInfo[]>): number;
39
+ }
40
+ //# sourceMappingURL=container-generator-factory.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"container-generator-factory.d.ts","sourceRoot":"","sources":["../../src/generator/container-generator-factory.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,sBAAsB,EAAE,MAAM,4BAA4B,CAAC;AAQpE,OAAO,EAAoB,SAAS,EAAE,MAAM,UAAU,CAAC;AAEvD;;;;GAIG;AACH,qBAAa,yBAAyB;IACpC;;;;;;;OAOG;IACH,MAAM,CAAC,MAAM,CACX,gBAAgB,EAAE,SAAS,EAAE,GAAG,GAAG,CAAC,MAAM,EAAE,SAAS,EAAE,CAAC,EACxD,UAAU,EAAE,MAAM,GACjB,sBAAsB;IA+BzB;;;;;OAKG;IACH,MAAM,CAAC,SAAS,CAAC,gBAAgB,EAAE,SAAS,EAAE,GAAG,GAAG,CAAC,MAAM,EAAE,SAAS,EAAE,CAAC,GAAG,OAAO;IAInF;;;;;OAKG;IACH,MAAM,CAAC,aAAa,CAAC,gBAAgB,EAAE,SAAS,EAAE,GAAG,GAAG,CAAC,MAAM,EAAE,SAAS,EAAE,CAAC,GAAG,MAAM;IAQtF;;;;;OAKG;IACH,MAAM,CAAC,cAAc,CAAC,gBAAgB,EAAE,SAAS,EAAE,GAAG,GAAG,CAAC,MAAM,EAAE,SAAS,EAAE,CAAC,GAAG,MAAM;CAOxF"}
@@ -0,0 +1,81 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.ContainerGeneratorFactory = void 0;
4
+ const flat_container_generator_1 = require("./flat-container-generator");
5
+ const modular_container_generator_1 = require("./modular-container-generator");
6
+ const dependency_resolver_1 = require("../analyser/dependency-resolver");
7
+ const module_dependency_resolver_1 = require("../analyser/module-dependency-resolver");
8
+ const import_generator_1 = require("./import-generator");
9
+ const instantiation_generator_1 = require("./instantiation-generator");
10
+ const container_generator_1 = require("./container-generator");
11
+ /**
12
+ * Factory class for creating the appropriate container generator
13
+ * based on the input type (flat classes or module-grouped classes).
14
+ * Handles dependency injection at the factory level instead of constructor level.
15
+ */
16
+ class ContainerGeneratorFactory {
17
+ /**
18
+ * Creates the appropriate container generator based on the input type.
19
+ * Injects all necessary dependencies in the constructor.
20
+ *
21
+ * @param classesOrModules - Either a flat array of classes or a Map of module-grouped classes
22
+ * @param outputPath - The output path for the generated container file
23
+ * @returns The appropriate container generator instance with dependencies injected
24
+ */
25
+ static create(classesOrModules, outputPath) {
26
+ if (classesOrModules instanceof Map) {
27
+ // Module-based generation - create dependencies and inject in constructor
28
+ const moduleDependencyResolver = new module_dependency_resolver_1.ModuleDependencyResolver(classesOrModules);
29
+ const allClasses = Array.from(classesOrModules.values()).flat();
30
+ const importGenerator = new import_generator_1.ImportGenerator(allClasses);
31
+ return new modular_container_generator_1.ModularContainerGenerator(outputPath, classesOrModules, moduleDependencyResolver, importGenerator);
32
+ }
33
+ else {
34
+ // Backward compatibility: flat classes array - create dependencies and inject in constructor
35
+ const dependencyResolver = new dependency_resolver_1.DependencyResolver(classesOrModules);
36
+ const importGenerator = new import_generator_1.ImportGenerator(classesOrModules);
37
+ const instantiationGenerator = new instantiation_generator_1.InstantiationGenerator(classesOrModules);
38
+ const containerCodeGenerator = new container_generator_1.ContainerGenerator(classesOrModules);
39
+ return new flat_container_generator_1.FlatContainerGenerator(outputPath, classesOrModules, dependencyResolver, importGenerator, instantiationGenerator, containerCodeGenerator);
40
+ }
41
+ }
42
+ /**
43
+ * Determines if the input represents a modular structure.
44
+ *
45
+ * @param classesOrModules - The input to check
46
+ * @returns true if the input is a Map (modular), false if it's an array (flat)
47
+ */
48
+ static isModular(classesOrModules) {
49
+ return classesOrModules instanceof Map;
50
+ }
51
+ /**
52
+ * Gets the total number of classes from either flat or modular input.
53
+ *
54
+ * @param classesOrModules - The input to count classes from
55
+ * @returns The total number of classes
56
+ */
57
+ static getClassCount(classesOrModules) {
58
+ if (classesOrModules instanceof Map) {
59
+ return Array.from(classesOrModules.values()).flat().length;
60
+ }
61
+ else {
62
+ return classesOrModules.length;
63
+ }
64
+ }
65
+ /**
66
+ * Gets the number of modules from modular input.
67
+ *
68
+ * @param classesOrModules - The input to count modules from
69
+ * @returns The number of modules, or 1 for flat structure
70
+ */
71
+ static getModuleCount(classesOrModules) {
72
+ if (classesOrModules instanceof Map) {
73
+ return classesOrModules.size;
74
+ }
75
+ else {
76
+ return 1; // Flat structure is considered as one implicit module
77
+ }
78
+ }
79
+ }
80
+ exports.ContainerGeneratorFactory = ContainerGeneratorFactory;
81
+ //# sourceMappingURL=container-generator-factory.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"container-generator-factory.js","sourceRoot":"","sources":["../../src/generator/container-generator-factory.ts"],"names":[],"mappings":";;;AACA,yEAAoE;AACpE,+EAA0E;AAC1E,yEAAqE;AACrE,uFAAkF;AAClF,yDAAqD;AACrD,uEAAmE;AACnE,+DAAqF;AAGrF;;;;GAIG;AACH,MAAa,yBAAyB;IACpC;;;;;;;OAOG;IACH,MAAM,CAAC,MAAM,CACX,gBAAwD,EACxD,UAAkB;QAElB,IAAI,gBAAgB,YAAY,GAAG,EAAE,CAAC;YACpC,0EAA0E;YAC1E,MAAM,wBAAwB,GAAG,IAAI,qDAAwB,CAAC,gBAAgB,CAAC,CAAC;YAChF,MAAM,UAAU,GAAG,KAAK,CAAC,IAAI,CAAC,gBAAgB,CAAC,MAAM,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC;YAChE,MAAM,eAAe,GAAG,IAAI,kCAAe,CAAC,UAAU,CAAC,CAAC;YAExD,OAAO,IAAI,uDAAyB,CAClC,UAAU,EACV,gBAAgB,EAChB,wBAAwB,EACxB,eAAe,CAChB,CAAC;QACJ,CAAC;aAAM,CAAC;YACN,6FAA6F;YAC7F,MAAM,kBAAkB,GAAG,IAAI,wCAAkB,CAAC,gBAAgB,CAAC,CAAC;YACpE,MAAM,eAAe,GAAG,IAAI,kCAAe,CAAC,gBAAgB,CAAC,CAAC;YAC9D,MAAM,sBAAsB,GAAG,IAAI,gDAAsB,CAAC,gBAAgB,CAAC,CAAC;YAC5E,MAAM,sBAAsB,GAAG,IAAI,wCAAsB,CAAC,gBAAgB,CAAC,CAAC;YAE5E,OAAO,IAAI,iDAAsB,CAC/B,UAAU,EACV,gBAAgB,EAChB,kBAAkB,EAClB,eAAe,EACf,sBAAsB,EACtB,sBAAsB,CACvB,CAAC;QACJ,CAAC;IACH,CAAC;IAED;;;;;OAKG;IACH,MAAM,CAAC,SAAS,CAAC,gBAAwD;QACvE,OAAO,gBAAgB,YAAY,GAAG,CAAC;IACzC,CAAC;IAED;;;;;OAKG;IACH,MAAM,CAAC,aAAa,CAAC,gBAAwD;QAC3E,IAAI,gBAAgB,YAAY,GAAG,EAAE,CAAC;YACpC,OAAO,KAAK,CAAC,IAAI,CAAC,gBAAgB,CAAC,MAAM,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC,MAAM,CAAC;QAC7D,CAAC;aAAM,CAAC;YACN,OAAO,gBAAgB,CAAC,MAAM,CAAC;QACjC,CAAC;IACH,CAAC;IAED;;;;;OAKG;IACH,MAAM,CAAC,cAAc,CAAC,gBAAwD;QAC5E,IAAI,gBAAgB,YAAY,GAAG,EAAE,CAAC;YACpC,OAAO,gBAAgB,CAAC,IAAI,CAAC;QAC/B,CAAC;aAAM,CAAC;YACN,OAAO,CAAC,CAAC,CAAC,sDAAsD;QAClE,CAAC;IACH,CAAC;CACF;AAhFD,8DAgFC"}
@@ -0,0 +1,24 @@
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
+ /**
8
+ * Generator for flat (non-modular) container structure.
9
+ * Handles the traditional single-container approach.
10
+ */
11
+ export declare class FlatContainerGenerator extends BaseContainerGenerator {
12
+ private dependencyResolver;
13
+ private instantiationGenerator;
14
+ private containerCodeGenerator;
15
+ private classes;
16
+ constructor(outputPath: string, classes: ClassInfo[], dependencyResolver: DependencyResolver, importGenerator: ImportGenerator, instantiationGenerator: InstantiationGenerator, containerCodeGenerator: ContainerCodeGenerator);
17
+ generate(): void;
18
+ protected generateContainerCode(sortedClasses?: string[]): string;
19
+ /**
20
+ * Get the classes managed by this generator.
21
+ */
22
+ getClasses(): ClassInfo[];
23
+ }
24
+ //# 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;AAErD;;;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,MAAM,EAClB,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(outputPath, classes, dependencyResolver, importGenerator, instantiationGenerator, containerCodeGenerator) {
11
+ super(outputPath, 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;AAGpE;;;GAGG;AACH,MAAa,sBAAuB,SAAQ,iDAAsB;IAMhE,YACE,UAAkB,EAClB,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,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-container-generator';
19
+ export { ModularContainerGenerator } from './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;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"}
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,4BAA4B,CAAC;AACpE,OAAO,EAAE,yBAAyB,EAAE,MAAM,+BAA+B,CAAC"}
@@ -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 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 }));
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
- 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
- }
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-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-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":";;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"}
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,uEAAoE;AAA3D,kIAAA,sBAAsB,OAAA;AAC/B,6EAA0E;AAAjE,wIAAA,yBAAyB,OAAA"}
@@ -0,0 +1,20 @@
1
+ import { ModuleDependencyResolver } from '../analyser/module-dependency-resolver';
2
+ import { ClassInfo } from '../types';
3
+ import { ImportGenerator } from './import-generator';
4
+ import { BaseContainerGenerator } from './base-container-generator';
5
+ /**
6
+ * Generator for modular container structure.
7
+ * Handles module-based dependency injection with inter-module dependencies.
8
+ */
9
+ export declare class ModularContainerGenerator extends BaseContainerGenerator {
10
+ private moduleGroupedClasses;
11
+ private moduleDependencyResolver;
12
+ constructor(outputPath: string, moduleGroupedClasses: Map<string, ClassInfo[]>, moduleDependencyResolver: ModuleDependencyResolver, importGenerator: ImportGenerator);
13
+ generate(): void;
14
+ protected generateContainerCode(sortedModules?: string[], moduleDependencies?: Map<string, Set<string>>): string;
15
+ private generateModuleContainers;
16
+ private generateAggregatedContainer;
17
+ private generateModularTypeExport;
18
+ private sortClassesByDependencies;
19
+ }
20
+ //# sourceMappingURL=modular-container-generator.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"modular-container-generator.d.ts","sourceRoot":"","sources":["../../src/generator/modular-container-generator.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,wBAAwB,EAAE,MAAM,wCAAwC,CAAC;AAClF,OAAO,EAAE,SAAS,EAAE,MAAM,UAAU,CAAC;AACrC,OAAO,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;AACrD,OAAO,EAAE,sBAAsB,EAAE,MAAM,4BAA4B,CAAC;AAEpE;;;GAGG;AACH,qBAAa,yBAA0B,SAAQ,sBAAsB;IACnE,OAAO,CAAC,oBAAoB,CAA2B;IACvD,OAAO,CAAC,wBAAwB,CAA2B;gBAGzD,UAAU,EAAE,MAAM,EAClB,oBAAoB,EAAE,GAAG,CAAC,MAAM,EAAE,SAAS,EAAE,CAAC,EAC9C,wBAAwB,EAAE,wBAAwB,EAClD,eAAe,EAAE,eAAe;IAOlC,QAAQ,IAAI,IAAI;IAqBhB,SAAS,CAAC,qBAAqB,CAAC,aAAa,CAAC,EAAE,MAAM,EAAE,EAAE,kBAAkB,CAAC,EAAE,GAAG,CAAC,MAAM,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC,GAAG,MAAM;IAehH,OAAO,CAAC,wBAAwB;IAuJhC,OAAO,CAAC,2BAA2B;IAYnC,OAAO,CAAC,yBAAyB;IAIjC,OAAO,CAAC,yBAAyB;CAmClC"}
@@ -0,0 +1,215 @@
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
+ /**
7
+ * Generator for modular container structure.
8
+ * Handles module-based dependency injection with inter-module dependencies.
9
+ */
10
+ class ModularContainerGenerator extends base_container_generator_1.BaseContainerGenerator {
11
+ constructor(outputPath, moduleGroupedClasses, moduleDependencyResolver, importGenerator) {
12
+ super(outputPath, importGenerator);
13
+ this.moduleGroupedClasses = moduleGroupedClasses;
14
+ this.moduleDependencyResolver = moduleDependencyResolver;
15
+ }
16
+ generate() {
17
+ // First, check for module-level cycles
18
+ const moduleResult = this.moduleDependencyResolver.resolve();
19
+ if (moduleResult.cycles.length > 0) {
20
+ throw new Error(`Circular dependencies detected between modules: ${JSON.stringify(moduleResult.cycles)}`);
21
+ }
22
+ // Then resolve class-level dependencies within each module
23
+ const allClasses = Array.from(this.moduleGroupedClasses.values()).flat();
24
+ const dependencyResolver = new dependency_resolver_1.DependencyResolver(allClasses);
25
+ const sortResult = dependencyResolver.resolve();
26
+ if (sortResult.cycles.length > 0) {
27
+ throw new Error(`Circular dependencies detected within classes: ${JSON.stringify(sortResult.cycles)}`);
28
+ }
29
+ const containerCode = this.generateContainerCode(moduleResult.sortedModules, moduleResult.moduleDependencies);
30
+ this.writeContainer(containerCode);
31
+ }
32
+ generateContainerCode(sortedModules, moduleDependencies) {
33
+ if (!sortedModules || !moduleDependencies) {
34
+ const moduleResult = this.moduleDependencyResolver.resolve();
35
+ sortedModules = moduleResult.sortedModules;
36
+ moduleDependencies = moduleResult.moduleDependencies;
37
+ }
38
+ const imports = this.importGenerator.generateImports();
39
+ const moduleContainers = this.generateModuleContainers(sortedModules, moduleDependencies);
40
+ const aggregatedContainer = this.generateAggregatedContainer(sortedModules);
41
+ const typeExport = this.generateModularTypeExport();
42
+ return `${imports}\n\n${moduleContainers}\n\n${aggregatedContainer}\n\n${typeExport}\n`;
43
+ }
44
+ generateModuleContainers(sortedModules, moduleDependencies) {
45
+ const moduleContainerCodes = [];
46
+ const moduleContainerFunctions = [];
47
+ // Generate module container functions in dependency order
48
+ for (const moduleName of sortedModules) {
49
+ const moduleClasses = this.moduleGroupedClasses.get(moduleName);
50
+ if (!moduleClasses)
51
+ continue;
52
+ const moduleFunctionName = `create${moduleName}Container`;
53
+ const moduleExports = [];
54
+ const moduleDeps = moduleDependencies.get(moduleName) || new Set();
55
+ // Generate function parameters for dependent modules
56
+ const functionParams = [];
57
+ for (const depModule of moduleDeps) {
58
+ const depVarName = this.camelCase(depModule) + 'Container';
59
+ functionParams.push(`${depVarName}: ReturnType<typeof create${depModule}Container>`);
60
+ }
61
+ // Generate lazy initialization variables and factory functions
62
+ const lazyInitializations = [];
63
+ const factoryFunctions = [];
64
+ // First, create factory functions for transient dependencies
65
+ for (const classInfo of moduleClasses) {
66
+ if (classInfo.scope === 'transient') {
67
+ const instanceName = this.camelCase(classInfo.name);
68
+ const factoryName = `${instanceName}Factory`;
69
+ factoryFunctions.push(` const ${factoryName} = (): ${classInfo.name} => new ${classInfo.name}();`);
70
+ }
71
+ }
72
+ // Sort singleton classes by their dependencies within the module
73
+ const singletonClasses = moduleClasses.filter(c => c.scope !== 'transient');
74
+ const sortedSingletons = this.sortClassesByDependencies(singletonClasses, moduleClasses);
75
+ // Generate lazy initialization variables for singletons
76
+ for (const classInfo of sortedSingletons) {
77
+ const instanceName = this.camelCase(classInfo.name);
78
+ lazyInitializations.push(` let ${instanceName}: ${classInfo.name} | undefined;`);
79
+ }
80
+ // Generate lazy getter functions for singletons
81
+ const lazyGetters = [];
82
+ for (const classInfo of sortedSingletons) {
83
+ const instanceName = this.camelCase(classInfo.name);
84
+ const getterName = `get${classInfo.name}`;
85
+ const constructorArgs = [];
86
+ // Build constructor arguments
87
+ for (const dep of classInfo.dependencies) {
88
+ // Check if dependency is from another module
89
+ let foundInOtherModule = false;
90
+ for (const depModule of moduleDeps) {
91
+ const depModuleClasses = this.moduleGroupedClasses.get(depModule);
92
+ if (depModuleClasses) {
93
+ const depClass = depModuleClasses.find(c => c.interfaceName === dep);
94
+ if (depClass) {
95
+ const depModuleVarName = this.camelCase(depModule) + 'Container';
96
+ constructorArgs.push(`${depModuleVarName}.${dep}`);
97
+ foundInOtherModule = true;
98
+ break;
99
+ }
100
+ }
101
+ }
102
+ // If not found in other modules, it's from the same module
103
+ if (!foundInOtherModule) {
104
+ const depClass = moduleClasses.find(c => c.interfaceName === dep);
105
+ if (depClass) {
106
+ if (depClass.scope === 'transient') {
107
+ const depInstanceName = this.camelCase(depClass.name);
108
+ constructorArgs.push(`${depInstanceName}Factory()`);
109
+ }
110
+ else {
111
+ const depGetterName = `get${depClass.name}`;
112
+ constructorArgs.push(`${depGetterName}()`);
113
+ }
114
+ }
115
+ }
116
+ }
117
+ const instantiation = constructorArgs.length > 0 ?
118
+ `new ${classInfo.name}(${constructorArgs.join(', ')})` :
119
+ `new ${classInfo.name}()`;
120
+ const lazyGetter = ` const ${getterName} = (): ${classInfo.name} => {\n if (!${instanceName}) {\n ${instanceName} = ${instantiation};\n }\n return ${instanceName};\n };`;
121
+ lazyGetters.push(lazyGetter);
122
+ }
123
+ // Generate module exports
124
+ for (const classInfo of moduleClasses) {
125
+ if (classInfo.interfaceName) {
126
+ const instanceName = this.camelCase(classInfo.name);
127
+ const isTransient = classInfo.scope === 'transient';
128
+ if (isTransient) {
129
+ moduleExports.push(` get ${classInfo.interfaceName}(): ${classInfo.name} {\n return ${instanceName}Factory();\n }`);
130
+ }
131
+ else {
132
+ const getterName = `get${classInfo.name}`;
133
+ moduleExports.push(` get ${classInfo.interfaceName}(): ${classInfo.name} {\n return ${getterName}();\n }`);
134
+ }
135
+ }
136
+ }
137
+ const functionSignature = functionParams.length > 0 ?
138
+ `function ${moduleFunctionName}(${functionParams.join(', ')})` :
139
+ `function ${moduleFunctionName}()`;
140
+ const returnObject = moduleExports.length > 0 ?
141
+ ` return {\n${moduleExports.join(',\n')}\n };` :
142
+ ' return {};';
143
+ const functionBody = [
144
+ ...factoryFunctions,
145
+ '',
146
+ ...lazyInitializations,
147
+ '',
148
+ ...lazyGetters,
149
+ '',
150
+ returnObject
151
+ ].filter(line => line !== '' || factoryFunctions.length > 0 || lazyInitializations.length > 0 || lazyGetters.length > 0).join('\n');
152
+ const moduleContainerFunction = `${functionSignature} {\n${functionBody}\n}`;
153
+ moduleContainerFunctions.push(moduleContainerFunction);
154
+ }
155
+ // Sort modules by dependencies and generate instantiations
156
+ for (const moduleName of sortedModules) {
157
+ const moduleVarName = this.camelCase(moduleName) + 'Container';
158
+ const moduleFunctionName = `create${moduleName}Container`;
159
+ const moduleDeps = moduleDependencies.get(moduleName) || new Set();
160
+ const functionArgs = [];
161
+ for (const depModule of moduleDeps) {
162
+ const depVarName = this.camelCase(depModule) + 'Container';
163
+ functionArgs.push(depVarName);
164
+ }
165
+ const moduleInstantiation = functionArgs.length > 0 ?
166
+ `const ${moduleVarName} = ${moduleFunctionName}(${functionArgs.join(', ')});` :
167
+ `const ${moduleVarName} = ${moduleFunctionName}();`;
168
+ moduleContainerCodes.push(moduleInstantiation);
169
+ }
170
+ return moduleContainerFunctions.join('\n\n') + '\n\n' + moduleContainerCodes.join('\n');
171
+ }
172
+ generateAggregatedContainer(sortedModules) {
173
+ const moduleExports = [];
174
+ for (const moduleName of sortedModules) {
175
+ const moduleVarName = this.camelCase(moduleName) + 'Container';
176
+ const moduleKey = this.camelCase(moduleName);
177
+ moduleExports.push(` ${moduleKey}: ${moduleVarName}`);
178
+ }
179
+ return `export const container = {\n${moduleExports.join(',\n')}\n};`;
180
+ }
181
+ generateModularTypeExport() {
182
+ return 'export type Container = typeof container;';
183
+ }
184
+ sortClassesByDependencies(classes, allModuleClasses) {
185
+ const sorted = [];
186
+ const visited = new Set();
187
+ const visiting = new Set();
188
+ const visit = (classInfo) => {
189
+ if (visiting.has(classInfo.name)) {
190
+ // Circular dependency detected, just add it
191
+ return;
192
+ }
193
+ if (visited.has(classInfo.name)) {
194
+ return;
195
+ }
196
+ visiting.add(classInfo.name);
197
+ // Visit dependencies first (only within the same module)
198
+ for (const dep of classInfo.dependencies) {
199
+ const depClass = allModuleClasses.find(c => c.interfaceName === dep && c.scope !== 'transient');
200
+ if (depClass && classes.includes(depClass)) {
201
+ visit(depClass);
202
+ }
203
+ }
204
+ visiting.delete(classInfo.name);
205
+ visited.add(classInfo.name);
206
+ sorted.push(classInfo);
207
+ };
208
+ for (const classInfo of classes) {
209
+ visit(classInfo);
210
+ }
211
+ return sorted;
212
+ }
213
+ }
214
+ exports.ModularContainerGenerator = ModularContainerGenerator;
215
+ //# 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":";;;AAAA,yEAAqE;AAIrE,yEAAoE;AAEpE;;;GAGG;AACH,MAAa,yBAA0B,SAAQ,iDAAsB;IAInE,YACE,UAAkB,EAClB,oBAA8C,EAC9C,wBAAkD,EAClD,eAAgC;QAEhC,KAAK,CAAC,UAAU,EAAE,eAAe,CAAC,CAAC;QACnC,IAAI,CAAC,oBAAoB,GAAG,oBAAoB,CAAC;QACjD,IAAI,CAAC,wBAAwB,GAAG,wBAAwB,CAAC;IAC3D,CAAC;IAED,QAAQ;QACN,uCAAuC;QACvC,MAAM,YAAY,GAAG,IAAI,CAAC,wBAAwB,CAAC,OAAO,EAAE,CAAC;QAE7D,IAAI,YAAY,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACnC,MAAM,IAAI,KAAK,CAAC,mDAAmD,IAAI,CAAC,SAAS,CAAC,YAAY,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;QAC5G,CAAC;QAED,2DAA2D;QAC3D,MAAM,UAAU,GAAG,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,oBAAoB,CAAC,MAAM,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC;QACzE,MAAM,kBAAkB,GAAG,IAAI,wCAAkB,CAAC,UAAU,CAAC,CAAC;QAC9D,MAAM,UAAU,GAAG,kBAAkB,CAAC,OAAO,EAAE,CAAC;QAEhD,IAAI,UAAU,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACjC,MAAM,IAAI,KAAK,CAAC,kDAAkD,IAAI,CAAC,SAAS,CAAC,UAAU,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;QACzG,CAAC;QAED,MAAM,aAAa,GAAG,IAAI,CAAC,qBAAqB,CAAC,YAAY,CAAC,aAAa,EAAE,YAAY,CAAC,kBAAkB,CAAC,CAAC;QAC9G,IAAI,CAAC,cAAc,CAAC,aAAa,CAAC,CAAC;IACrC,CAAC;IAES,qBAAqB,CAAC,aAAwB,EAAE,kBAA6C;QACrG,IAAI,CAAC,aAAa,IAAI,CAAC,kBAAkB,EAAE,CAAC;YAC1C,MAAM,YAAY,GAAG,IAAI,CAAC,wBAAwB,CAAC,OAAO,EAAE,CAAC;YAC7D,aAAa,GAAG,YAAY,CAAC,aAAa,CAAC;YAC3C,kBAAkB,GAAG,YAAY,CAAC,kBAAkB,CAAC;QACvD,CAAC;QAED,MAAM,OAAO,GAAG,IAAI,CAAC,eAAe,CAAC,eAAe,EAAE,CAAC;QACvD,MAAM,gBAAgB,GAAG,IAAI,CAAC,wBAAwB,CAAC,aAAa,EAAE,kBAAkB,CAAC,CAAC;QAC1F,MAAM,mBAAmB,GAAG,IAAI,CAAC,2BAA2B,CAAC,aAAa,CAAC,CAAC;QAC5E,MAAM,UAAU,GAAG,IAAI,CAAC,yBAAyB,EAAE,CAAC;QAEpD,OAAO,GAAG,OAAO,OAAO,gBAAgB,OAAO,mBAAmB,OAAO,UAAU,IAAI,CAAC;IAC1F,CAAC;IAEO,wBAAwB,CAAC,aAAuB,EAAE,kBAA4C;QACpG,MAAM,oBAAoB,GAAa,EAAE,CAAC;QAC1C,MAAM,wBAAwB,GAAa,EAAE,CAAC;QAE9C,0DAA0D;QAC1D,KAAK,MAAM,UAAU,IAAI,aAAa,EAAE,CAAC;YACvC,MAAM,aAAa,GAAG,IAAI,CAAC,oBAAoB,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;YAChE,IAAI,CAAC,aAAa;gBAAE,SAAS;YAE7B,MAAM,kBAAkB,GAAG,SAAS,UAAU,WAAW,CAAC;YAC1D,MAAM,aAAa,GAAa,EAAE,CAAC;YACnC,MAAM,UAAU,GAAG,kBAAkB,CAAC,GAAG,CAAC,UAAU,CAAC,IAAI,IAAI,GAAG,EAAE,CAAC;YAEnE,qDAAqD;YACrD,MAAM,cAAc,GAAa,EAAE,CAAC;YAEpC,KAAK,MAAM,SAAS,IAAI,UAAU,EAAE,CAAC;gBACnC,MAAM,UAAU,GAAG,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,GAAG,WAAW,CAAC;gBAC3D,cAAc,CAAC,IAAI,CAAC,GAAG,UAAU,6BAA6B,SAAS,YAAY,CAAC,CAAC;YACvF,CAAC;YAED,+DAA+D;YAC/D,MAAM,mBAAmB,GAAa,EAAE,CAAC;YACzC,MAAM,gBAAgB,GAAa,EAAE,CAAC;YAEtC,6DAA6D;YAC7D,KAAK,MAAM,SAAS,IAAI,aAAa,EAAE,CAAC;gBACtC,IAAI,SAAS,CAAC,KAAK,KAAK,WAAW,EAAE,CAAC;oBACpC,MAAM,YAAY,GAAG,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;oBACpD,MAAM,WAAW,GAAG,GAAG,YAAY,SAAS,CAAC;oBAC7C,gBAAgB,CAAC,IAAI,CAAC,WAAW,WAAW,UAAU,SAAS,CAAC,IAAI,WAAW,SAAS,CAAC,IAAI,KAAK,CAAC,CAAC;gBACtG,CAAC;YACH,CAAC;YAED,iEAAiE;YACjE,MAAM,gBAAgB,GAAG,aAAa,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,KAAK,KAAK,WAAW,CAAC,CAAC;YAC5E,MAAM,gBAAgB,GAAG,IAAI,CAAC,yBAAyB,CAAC,gBAAgB,EAAE,aAAa,CAAC,CAAC;YAEzF,wDAAwD;YACxD,KAAK,MAAM,SAAS,IAAI,gBAAgB,EAAE,CAAC;gBACzC,MAAM,YAAY,GAAG,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;gBACpD,mBAAmB,CAAC,IAAI,CAAC,SAAS,YAAY,KAAK,SAAS,CAAC,IAAI,eAAe,CAAC,CAAC;YACpF,CAAC;YAED,gDAAgD;YAChD,MAAM,WAAW,GAAa,EAAE,CAAC;YACjC,KAAK,MAAM,SAAS,IAAI,gBAAgB,EAAE,CAAC;gBACzC,MAAM,YAAY,GAAG,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;gBACpD,MAAM,UAAU,GAAG,MAAM,SAAS,CAAC,IAAI,EAAE,CAAC;gBAC1C,MAAM,eAAe,GAAa,EAAE,CAAC;gBAErC,8BAA8B;gBAC9B,KAAK,MAAM,GAAG,IAAI,SAAS,CAAC,YAAY,EAAE,CAAC;oBACzC,6CAA6C;oBAC7C,IAAI,kBAAkB,GAAG,KAAK,CAAC;oBAC/B,KAAK,MAAM,SAAS,IAAI,UAAU,EAAE,CAAC;wBACnC,MAAM,gBAAgB,GAAG,IAAI,CAAC,oBAAoB,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;wBAClE,IAAI,gBAAgB,EAAE,CAAC;4BACrB,MAAM,QAAQ,GAAG,gBAAgB,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,aAAa,KAAK,GAAG,CAAC,CAAC;4BACrE,IAAI,QAAQ,EAAE,CAAC;gCACb,MAAM,gBAAgB,GAAG,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,GAAG,WAAW,CAAC;gCACjE,eAAe,CAAC,IAAI,CAAC,GAAG,gBAAgB,IAAI,GAAG,EAAE,CAAC,CAAC;gCACnD,kBAAkB,GAAG,IAAI,CAAC;gCAC1B,MAAM;4BACR,CAAC;wBACH,CAAC;oBACH,CAAC;oBAED,2DAA2D;oBAC3D,IAAI,CAAC,kBAAkB,EAAE,CAAC;wBACxB,MAAM,QAAQ,GAAG,aAAa,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,aAAa,KAAK,GAAG,CAAC,CAAC;wBAClE,IAAI,QAAQ,EAAE,CAAC;4BACb,IAAI,QAAQ,CAAC,KAAK,KAAK,WAAW,EAAE,CAAC;gCACnC,MAAM,eAAe,GAAG,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;gCACtD,eAAe,CAAC,IAAI,CAAC,GAAG,eAAe,WAAW,CAAC,CAAC;4BACtD,CAAC;iCAAM,CAAC;gCACN,MAAM,aAAa,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAC;gCAC5C,eAAe,CAAC,IAAI,CAAC,GAAG,aAAa,IAAI,CAAC,CAAC;4BAC7C,CAAC;wBACH,CAAC;oBACH,CAAC;gBACH,CAAC;gBAED,MAAM,aAAa,GAAG,eAAe,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;oBAChD,OAAO,SAAS,CAAC,IAAI,IAAI,eAAe,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;oBACxD,OAAO,SAAS,CAAC,IAAI,IAAI,CAAC;gBAE5B,MAAM,UAAU,GAAG,WAAW,UAAU,UAAU,SAAS,CAAC,IAAI,mBAAmB,YAAY,cAAc,YAAY,MAAM,aAAa,wBAAwB,YAAY,SAAS,CAAC;gBAE1L,WAAW,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;YAC/B,CAAC;YAED,0BAA0B;YAC1B,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,MAAM,WAAW,GAAG,SAAS,CAAC,KAAK,KAAK,WAAW,CAAC;oBAEpD,IAAI,WAAW,EAAE,CAAC;wBAChB,aAAa,CAAC,IAAI,CAAC,WAAW,SAAS,CAAC,aAAa,OAAO,SAAS,CAAC,IAAI,oBAAoB,YAAY,mBAAmB,CAAC,CAAC;oBACjI,CAAC;yBAAM,CAAC;wBACN,MAAM,UAAU,GAAG,MAAM,SAAS,CAAC,IAAI,EAAE,CAAC;wBAC1C,aAAa,CAAC,IAAI,CAAC,WAAW,SAAS,CAAC,aAAa,OAAO,SAAS,CAAC,IAAI,oBAAoB,UAAU,YAAY,CAAC,CAAC;oBACxH,CAAC;gBACH,CAAC;YACH,CAAC;YAED,MAAM,iBAAiB,GAAG,cAAc,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;gBACnD,YAAY,kBAAkB,IAAI,cAAc,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;gBAChE,YAAY,kBAAkB,IAAI,CAAC;YAErC,MAAM,YAAY,GAAG,aAAa,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;gBAC7C,eAAe,aAAa,CAAC,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;gBAClD,cAAc,CAAC;YAEjB,MAAM,YAAY,GAAG;gBACnB,GAAG,gBAAgB;gBACnB,EAAE;gBACF,GAAG,mBAAmB;gBACtB,EAAE;gBACF,GAAG,WAAW;gBACd,EAAE;gBACF,YAAY;aACb,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,KAAK,EAAE,IAAI,gBAAgB,CAAC,MAAM,GAAG,CAAC,IAAI,mBAAmB,CAAC,MAAM,GAAG,CAAC,IAAI,WAAW,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YAEpI,MAAM,uBAAuB,GAAG,GAAG,iBAAiB,OAAO,YAAY,KAAK,CAAC;YAC7E,wBAAwB,CAAC,IAAI,CAAC,uBAAuB,CAAC,CAAC;QACzD,CAAC;QAED,2DAA2D;QAC3D,KAAK,MAAM,UAAU,IAAI,aAAa,EAAE,CAAC;YACvC,MAAM,aAAa,GAAG,IAAI,CAAC,SAAS,CAAC,UAAU,CAAC,GAAG,WAAW,CAAC;YAC/D,MAAM,kBAAkB,GAAG,SAAS,UAAU,WAAW,CAAC;YAC1D,MAAM,UAAU,GAAG,kBAAkB,CAAC,GAAG,CAAC,UAAU,CAAC,IAAI,IAAI,GAAG,EAAE,CAAC;YAEnE,MAAM,YAAY,GAAa,EAAE,CAAC;YAClC,KAAK,MAAM,SAAS,IAAI,UAAU,EAAE,CAAC;gBACnC,MAAM,UAAU,GAAG,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,GAAG,WAAW,CAAC;gBAC3D,YAAY,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;YAChC,CAAC;YAED,MAAM,mBAAmB,GAAG,YAAY,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;gBACnD,SAAS,aAAa,MAAM,kBAAkB,IAAI,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;gBAC/E,SAAS,aAAa,MAAM,kBAAkB,KAAK,CAAC;YAEtD,oBAAoB,CAAC,IAAI,CAAC,mBAAmB,CAAC,CAAC;QACjD,CAAC;QAED,OAAO,wBAAwB,CAAC,IAAI,CAAC,MAAM,CAAC,GAAG,MAAM,GAAG,oBAAoB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAC1F,CAAC;IAEO,2BAA2B,CAAC,aAAuB;QACzD,MAAM,aAAa,GAAa,EAAE,CAAC;QAEnC,KAAK,MAAM,UAAU,IAAI,aAAa,EAAE,CAAC;YACvC,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;IAEO,yBAAyB;QAC/B,OAAO,2CAA2C,CAAC;IACrD,CAAC;IAEO,yBAAyB,CAAC,OAAoB,EAAE,gBAA6B;QACnF,MAAM,MAAM,GAAgB,EAAE,CAAC;QAC/B,MAAM,OAAO,GAAG,IAAI,GAAG,EAAU,CAAC;QAClC,MAAM,QAAQ,GAAG,IAAI,GAAG,EAAU,CAAC;QAEnC,MAAM,KAAK,GAAG,CAAC,SAAoB,EAAE,EAAE;YACrC,IAAI,QAAQ,CAAC,GAAG,CAAC,SAAS,CAAC,IAAI,CAAC,EAAE,CAAC;gBACjC,4CAA4C;gBAC5C,OAAO;YACT,CAAC;YACD,IAAI,OAAO,CAAC,GAAG,CAAC,SAAS,CAAC,IAAI,CAAC,EAAE,CAAC;gBAChC,OAAO;YACT,CAAC;YAED,QAAQ,CAAC,GAAG,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;YAE7B,yDAAyD;YACzD,KAAK,MAAM,GAAG,IAAI,SAAS,CAAC,YAAY,EAAE,CAAC;gBACzC,MAAM,QAAQ,GAAG,gBAAgB,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,aAAa,KAAK,GAAG,IAAI,CAAC,CAAC,KAAK,KAAK,WAAW,CAAC,CAAC;gBAChG,IAAI,QAAQ,IAAI,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAC,EAAE,CAAC;oBAC3C,KAAK,CAAC,QAAQ,CAAC,CAAC;gBAClB,CAAC;YACH,CAAC;YAED,QAAQ,CAAC,MAAM,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;YAChC,OAAO,CAAC,GAAG,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;YAC5B,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;QACzB,CAAC,CAAC;QAEF,KAAK,MAAM,SAAS,IAAI,OAAO,EAAE,CAAC;YAChC,KAAK,CAAC,SAAS,CAAC,CAAC;QACnB,CAAC;QAED,OAAO,MAAM,CAAC;IAChB,CAAC;CACF;AA7PD,8DA6PC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@notjustcoders/ioc-arise",
3
- "version": "1.0.3",
3
+ "version": "1.0.5",
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": {
@@ -67,6 +67,9 @@
67
67
  "test2:generate": "npm run build && node dist/index.js generate --source examples/circular-deps-modules",
68
68
  "test3:generate": "npm run build && node dist/index.js generate --source examples/circular-deps-classes",
69
69
  "test4:generate": "npm run build && node dist/index.js generate --source examples/minimal-todo",
70
- "test5:generate": "npm run build && node dist/index.js generate --source examples/simple-modules"
70
+ "test5:generate": "npm run build && node dist/index.js generate --source examples/simple-modules",
71
+ "test6:generate": "npm run build && node dist/index.js generate --source examples/use-cases-example",
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/name-collision-example"
71
74
  }
72
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"}