@notjustcoders/ioc-arise 1.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (147) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +266 -0
  3. package/dist/__tests__/analyser/ast-parser.test.d.ts +2 -0
  4. package/dist/__tests__/analyser/ast-parser.test.d.ts.map +1 -0
  5. package/dist/__tests__/analyser/ast-parser.test.js +268 -0
  6. package/dist/__tests__/analyser/ast-parser.test.js.map +1 -0
  7. package/dist/__tests__/analyser/class-analyzer.test.d.ts +2 -0
  8. package/dist/__tests__/analyser/class-analyzer.test.d.ts.map +1 -0
  9. package/dist/__tests__/analyser/class-analyzer.test.js +259 -0
  10. package/dist/__tests__/analyser/class-analyzer.test.js.map +1 -0
  11. package/dist/__tests__/analyser/dependency-resolver.test.d.ts +2 -0
  12. package/dist/__tests__/analyser/dependency-resolver.test.d.ts.map +1 -0
  13. package/dist/__tests__/analyser/dependency-resolver.test.js +128 -0
  14. package/dist/__tests__/analyser/dependency-resolver.test.js.map +1 -0
  15. package/dist/__tests__/analyser/fixtures/ast-parser-fixtures.d.ts +26 -0
  16. package/dist/__tests__/analyser/fixtures/ast-parser-fixtures.d.ts.map +1 -0
  17. package/dist/__tests__/analyser/fixtures/ast-parser-fixtures.js +178 -0
  18. package/dist/__tests__/analyser/fixtures/ast-parser-fixtures.js.map +1 -0
  19. package/dist/__tests__/analyser/fixtures/class-analyzer-fixtures.d.ts +54 -0
  20. package/dist/__tests__/analyser/fixtures/class-analyzer-fixtures.d.ts.map +1 -0
  21. package/dist/__tests__/analyser/fixtures/class-analyzer-fixtures.js +285 -0
  22. package/dist/__tests__/analyser/fixtures/class-analyzer-fixtures.js.map +1 -0
  23. package/dist/__tests__/analyser/fixtures/dependency-resolver-fixtures.d.ts +13 -0
  24. package/dist/__tests__/analyser/fixtures/dependency-resolver-fixtures.d.ts.map +1 -0
  25. package/dist/__tests__/analyser/fixtures/dependency-resolver-fixtures.js +266 -0
  26. package/dist/__tests__/analyser/fixtures/dependency-resolver-fixtures.js.map +1 -0
  27. package/dist/__tests__/generator/container-generator.test.d.ts +2 -0
  28. package/dist/__tests__/generator/container-generator.test.d.ts.map +1 -0
  29. package/dist/__tests__/generator/container-generator.test.js +185 -0
  30. package/dist/__tests__/generator/container-generator.test.js.map +1 -0
  31. package/dist/__tests__/generator/dependency-resolver.test.d.ts +2 -0
  32. package/dist/__tests__/generator/dependency-resolver.test.d.ts.map +1 -0
  33. package/dist/__tests__/generator/dependency-resolver.test.js +330 -0
  34. package/dist/__tests__/generator/dependency-resolver.test.js.map +1 -0
  35. package/dist/__tests__/generator/fixtures/dependency-resolver.fixtures.d.ts +23 -0
  36. package/dist/__tests__/generator/fixtures/dependency-resolver.fixtures.d.ts.map +1 -0
  37. package/dist/__tests__/generator/fixtures/dependency-resolver.fixtures.js +254 -0
  38. package/dist/__tests__/generator/fixtures/dependency-resolver.fixtures.js.map +1 -0
  39. package/dist/__tests__/generator/fixtures/import-generator.fixtures.d.ts +10 -0
  40. package/dist/__tests__/generator/fixtures/import-generator.fixtures.d.ts.map +1 -0
  41. package/dist/__tests__/generator/fixtures/import-generator.fixtures.js +194 -0
  42. package/dist/__tests__/generator/fixtures/import-generator.fixtures.js.map +1 -0
  43. package/dist/__tests__/generator/import-generator.test.d.ts +2 -0
  44. package/dist/__tests__/generator/import-generator.test.d.ts.map +1 -0
  45. package/dist/__tests__/generator/import-generator.test.js +121 -0
  46. package/dist/__tests__/generator/import-generator.test.js.map +1 -0
  47. package/dist/__tests__/generator/instantiation-generator.test.d.ts +2 -0
  48. package/dist/__tests__/generator/instantiation-generator.test.d.ts.map +1 -0
  49. package/dist/__tests__/generator/instantiation-generator.test.js +251 -0
  50. package/dist/__tests__/generator/instantiation-generator.test.js.map +1 -0
  51. package/dist/analyser/ast-parser.d.ts +12 -0
  52. package/dist/analyser/ast-parser.d.ts.map +1 -0
  53. package/dist/analyser/ast-parser.js +192 -0
  54. package/dist/analyser/ast-parser.js.map +1 -0
  55. package/dist/analyser/class-analyzer.d.ts +11 -0
  56. package/dist/analyser/class-analyzer.d.ts.map +1 -0
  57. package/dist/analyser/class-analyzer.js +78 -0
  58. package/dist/analyser/class-analyzer.js.map +1 -0
  59. package/dist/analyser/dependency-resolver.d.ts +10 -0
  60. package/dist/analyser/dependency-resolver.d.ts.map +1 -0
  61. package/dist/analyser/dependency-resolver.js +46 -0
  62. package/dist/analyser/dependency-resolver.js.map +1 -0
  63. package/dist/analyser/file-discovery.d.ts +7 -0
  64. package/dist/analyser/file-discovery.d.ts.map +1 -0
  65. package/dist/analyser/file-discovery.js +30 -0
  66. package/dist/analyser/file-discovery.js.map +1 -0
  67. package/dist/analyser/index.d.ts +3 -0
  68. package/dist/analyser/index.d.ts.map +1 -0
  69. package/dist/analyser/index.js +14 -0
  70. package/dist/analyser/index.js.map +1 -0
  71. package/dist/analyser/module-dependency-resolver.d.ts +17 -0
  72. package/dist/analyser/module-dependency-resolver.d.ts.map +1 -0
  73. package/dist/analyser/module-dependency-resolver.js +66 -0
  74. package/dist/analyser/module-dependency-resolver.js.map +1 -0
  75. package/dist/analyser/project-analyzer.d.ts +8 -0
  76. package/dist/analyser/project-analyzer.d.ts.map +1 -0
  77. package/dist/analyser/project-analyzer.js +20 -0
  78. package/dist/analyser/project-analyzer.js.map +1 -0
  79. package/dist/commands/analyze.d.ts +3 -0
  80. package/dist/commands/analyze.d.ts.map +1 -0
  81. package/dist/commands/analyze.js +66 -0
  82. package/dist/commands/analyze.js.map +1 -0
  83. package/dist/commands/generate.d.ts +3 -0
  84. package/dist/commands/generate.d.ts.map +1 -0
  85. package/dist/commands/generate.js +150 -0
  86. package/dist/commands/generate.js.map +1 -0
  87. package/dist/container.d.ts +5 -0
  88. package/dist/container.d.ts.map +1 -0
  89. package/dist/container.js +8 -0
  90. package/dist/container.js.map +1 -0
  91. package/dist/generator/container-file-generator.d.ts +20 -0
  92. package/dist/generator/container-file-generator.d.ts.map +1 -0
  93. package/dist/generator/container-file-generator.js +255 -0
  94. package/dist/generator/container-file-generator.js.map +1 -0
  95. package/dist/generator/container-generator.d.ts +8 -0
  96. package/dist/generator/container-generator.d.ts.map +1 -0
  97. package/dist/generator/container-generator.js +35 -0
  98. package/dist/generator/container-generator.js.map +1 -0
  99. package/dist/generator/dependency-resolver.d.ts +11 -0
  100. package/dist/generator/dependency-resolver.d.ts.map +1 -0
  101. package/dist/generator/dependency-resolver.js +83 -0
  102. package/dist/generator/dependency-resolver.js.map +1 -0
  103. package/dist/generator/file-writer.d.ts +6 -0
  104. package/dist/generator/file-writer.d.ts.map +1 -0
  105. package/dist/generator/file-writer.js +19 -0
  106. package/dist/generator/file-writer.js.map +1 -0
  107. package/dist/generator/import-generator.d.ts +7 -0
  108. package/dist/generator/import-generator.d.ts.map +1 -0
  109. package/dist/generator/import-generator.js +31 -0
  110. package/dist/generator/import-generator.js.map +1 -0
  111. package/dist/generator/index.d.ts +4 -0
  112. package/dist/generator/index.d.ts.map +1 -0
  113. package/dist/generator/index.js +25 -0
  114. package/dist/generator/index.js.map +1 -0
  115. package/dist/generator/instantiation-generator.d.ts +8 -0
  116. package/dist/generator/instantiation-generator.d.ts.map +1 -0
  117. package/dist/generator/instantiation-generator.js +153 -0
  118. package/dist/generator/instantiation-generator.js.map +1 -0
  119. package/dist/generator/module-container-generator.d.ts +10 -0
  120. package/dist/generator/module-container-generator.d.ts.map +1 -0
  121. package/dist/generator/module-container-generator.js +51 -0
  122. package/dist/generator/module-container-generator.js.map +1 -0
  123. package/dist/index.d.ts +3 -0
  124. package/dist/index.d.ts.map +1 -0
  125. package/dist/index.js +20 -0
  126. package/dist/index.js.map +1 -0
  127. package/dist/types.d.ts +30 -0
  128. package/dist/types.d.ts.map +1 -0
  129. package/dist/types.js +3 -0
  130. package/dist/types.js.map +1 -0
  131. package/dist/utils/configManager.d.ts +21 -0
  132. package/dist/utils/configManager.d.ts.map +1 -0
  133. package/dist/utils/configManager.js +50 -0
  134. package/dist/utils/configManager.js.map +1 -0
  135. package/dist/utils/moduleResolver.d.ts +38 -0
  136. package/dist/utils/moduleResolver.d.ts.map +1 -0
  137. package/dist/utils/moduleResolver.js +108 -0
  138. package/dist/utils/moduleResolver.js.map +1 -0
  139. package/dist/utils/naming.d.ts +7 -0
  140. package/dist/utils/naming.d.ts.map +1 -0
  141. package/dist/utils/naming.js +12 -0
  142. package/dist/utils/naming.js.map +1 -0
  143. package/dist/utils/topological-sorter.d.ts +17 -0
  144. package/dist/utils/topological-sorter.d.ts.map +1 -0
  145. package/dist/utils/topological-sorter.js +69 -0
  146. package/dist/utils/topological-sorter.js.map +1 -0
  147. package/package.json +72 -0
@@ -0,0 +1,46 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.DependencyResolver = void 0;
4
+ const topological_sorter_1 = require("../utils/topological-sorter");
5
+ class DependencyResolver {
6
+ constructor(classes) {
7
+ this.classes = classes;
8
+ }
9
+ resolve() {
10
+ const graph = this.buildDependencyGraph();
11
+ return topological_sorter_1.TopologicalSorter.sort(graph);
12
+ }
13
+ buildDependencyGraph() {
14
+ const graph = {};
15
+ const classNames = new Set(this.classes.map(c => c.name));
16
+ // Create interface-to-class mapping
17
+ const interfaceToClassMap = new Map();
18
+ for (const classInfo of this.classes) {
19
+ if (classInfo.interfaceName) {
20
+ interfaceToClassMap.set(classInfo.interfaceName, classInfo.name);
21
+ }
22
+ }
23
+ for (const classInfo of this.classes) {
24
+ const managedDependencies = [];
25
+ for (const dep of classInfo.dependencies) {
26
+ // Check if dependency is a direct class name
27
+ if (classNames.has(dep)) {
28
+ managedDependencies.push(dep);
29
+ }
30
+ // Check if dependency is an interface that maps to a managed class
31
+ else if (interfaceToClassMap.has(dep)) {
32
+ const implementingClass = interfaceToClassMap.get(dep);
33
+ managedDependencies.push(implementingClass);
34
+ }
35
+ }
36
+ graph[classInfo.name] = managedDependencies;
37
+ }
38
+ return graph;
39
+ }
40
+ detectCircularDependencies() {
41
+ const result = this.resolve();
42
+ return result.cycles;
43
+ }
44
+ }
45
+ exports.DependencyResolver = DependencyResolver;
46
+ //# sourceMappingURL=dependency-resolver.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"dependency-resolver.js","sourceRoot":"","sources":["../../src/analyser/dependency-resolver.ts"],"names":[],"mappings":";;;AACA,oEAAuF;AAEvF,MAAa,kBAAkB;IAG7B,YAAY,OAAoB;QAC9B,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC;IACzB,CAAC;IAED,OAAO;QACL,MAAM,KAAK,GAAG,IAAI,CAAC,oBAAoB,EAAE,CAAC;QAC1C,OAAO,sCAAiB,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IACvC,CAAC;IAEO,oBAAoB;QAC1B,MAAM,KAAK,GAAoB,EAAE,CAAC;QAClC,MAAM,UAAU,GAAG,IAAI,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC;QAE1D,oCAAoC;QACpC,MAAM,mBAAmB,GAAG,IAAI,GAAG,EAAkB,CAAC;QACtD,KAAK,MAAM,SAAS,IAAI,IAAI,CAAC,OAAO,EAAE,CAAC;YACrC,IAAI,SAAS,CAAC,aAAa,EAAE,CAAC;gBAC5B,mBAAmB,CAAC,GAAG,CAAC,SAAS,CAAC,aAAa,EAAE,SAAS,CAAC,IAAI,CAAC,CAAC;YACnE,CAAC;QACH,CAAC;QAED,KAAK,MAAM,SAAS,IAAI,IAAI,CAAC,OAAO,EAAE,CAAC;YACrC,MAAM,mBAAmB,GAAa,EAAE,CAAC;YAEzC,KAAK,MAAM,GAAG,IAAI,SAAS,CAAC,YAAY,EAAE,CAAC;gBACzC,6CAA6C;gBAC7C,IAAI,UAAU,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC;oBACxB,mBAAmB,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;gBAChC,CAAC;gBACD,mEAAmE;qBAC9D,IAAI,mBAAmB,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC;oBACtC,MAAM,iBAAiB,GAAG,mBAAmB,CAAC,GAAG,CAAC,GAAG,CAAE,CAAC;oBACxD,mBAAmB,CAAC,IAAI,CAAC,iBAAiB,CAAC,CAAC;gBAC9C,CAAC;YACH,CAAC;YAED,KAAK,CAAC,SAAS,CAAC,IAAI,CAAC,GAAG,mBAAmB,CAAC;QAC9C,CAAC;QAED,OAAO,KAAK,CAAC;IACf,CAAC;IAED,0BAA0B;QACxB,MAAM,MAAM,GAAG,IAAI,CAAC,OAAO,EAAE,CAAC;QAC9B,OAAO,MAAM,CAAC,MAAM,CAAC;IACvB,CAAC;CACF;AAjDD,gDAiDC"}
@@ -0,0 +1,7 @@
1
+ export declare class FileDiscovery {
2
+ private sourceDir;
3
+ private excludePatterns;
4
+ constructor(sourceDir: string, excludePatterns?: string[]);
5
+ findTypeScriptFiles(): Promise<string[]>;
6
+ }
7
+ //# sourceMappingURL=file-discovery.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"file-discovery.d.ts","sourceRoot":"","sources":["../../src/analyser/file-discovery.ts"],"names":[],"mappings":"AAGA,qBAAa,aAAa;IACxB,OAAO,CAAC,SAAS,CAAS;IAC1B,OAAO,CAAC,eAAe,CAAW;gBAEtB,SAAS,EAAE,MAAM,EAAE,eAAe,GAAE,MAAM,EAAO;IAKvD,mBAAmB,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC;CAiB/C"}
@@ -0,0 +1,30 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.FileDiscovery = void 0;
4
+ const glob_1 = require("glob");
5
+ const path_1 = require("path");
6
+ class FileDiscovery {
7
+ constructor(sourceDir, excludePatterns = []) {
8
+ this.sourceDir = sourceDir;
9
+ this.excludePatterns = excludePatterns;
10
+ }
11
+ async findTypeScriptFiles() {
12
+ const pattern = (0, path_1.join)(this.sourceDir, '**/*.ts');
13
+ console.log(`Searching for TypeScript files with pattern: ${pattern}`);
14
+ const files = await (0, glob_1.glob)(pattern, {
15
+ ignore: [
16
+ '**/node_modules/**',
17
+ '**/dist/**',
18
+ '**/*.d.ts',
19
+ '**/*.test.ts',
20
+ '**/*.spec.ts',
21
+ ...this.excludePatterns
22
+ ]
23
+ });
24
+ console.log(`Found ${files.length} TypeScript files:`);
25
+ files.forEach(file => console.log(` - ${file}`));
26
+ return files;
27
+ }
28
+ }
29
+ exports.FileDiscovery = FileDiscovery;
30
+ //# sourceMappingURL=file-discovery.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"file-discovery.js","sourceRoot":"","sources":["../../src/analyser/file-discovery.ts"],"names":[],"mappings":";;;AAAA,+BAA4B;AAC5B,+BAA4B;AAE5B,MAAa,aAAa;IAIxB,YAAY,SAAiB,EAAE,kBAA4B,EAAE;QAC3D,IAAI,CAAC,SAAS,GAAG,SAAS,CAAC;QAC3B,IAAI,CAAC,eAAe,GAAG,eAAe,CAAC;IACzC,CAAC;IAED,KAAK,CAAC,mBAAmB;QACvB,MAAM,OAAO,GAAG,IAAA,WAAI,EAAC,IAAI,CAAC,SAAS,EAAE,SAAS,CAAC,CAAC;QAChD,OAAO,CAAC,GAAG,CAAC,gDAAgD,OAAO,EAAE,CAAC,CAAC;QACvE,MAAM,KAAK,GAAG,MAAM,IAAA,WAAI,EAAC,OAAO,EAAE;YAChC,MAAM,EAAE;gBACN,oBAAoB;gBACpB,YAAY;gBACZ,WAAW;gBACX,cAAc;gBACd,cAAc;gBACd,GAAG,IAAI,CAAC,eAAe;aACxB;SACF,CAAC,CAAC;QACH,OAAO,CAAC,GAAG,CAAC,SAAS,KAAK,CAAC,MAAM,oBAAoB,CAAC,CAAC;QACvD,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,OAAO,IAAI,EAAE,CAAC,CAAC,CAAC;QAClD,OAAO,KAAK,CAAC;IACf,CAAC;CACF;AA1BD,sCA0BC"}
@@ -0,0 +1,3 @@
1
+ import { ClassInfo, AnalyzerOptions } from '../types';
2
+ export declare function analyzeProject(sourceDir: string, options?: Partial<AnalyzerOptions>): Promise<ClassInfo[]>;
3
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/analyser/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,SAAS,EAAE,eAAe,EAAE,MAAM,UAAU,CAAC;AAItD,wBAAsB,cAAc,CAAC,SAAS,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,OAAO,CAAC,eAAe,CAAC,GAAG,OAAO,CAAC,SAAS,EAAE,CAAC,CAOhH"}
@@ -0,0 +1,14 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.analyzeProject = analyzeProject;
4
+ const one_logger_client_sdk_1 = require("@notjustcoders/one-logger-client-sdk");
5
+ const project_analyzer_1 = require("./project-analyzer");
6
+ const ProjectAnalyzer = (0, one_logger_client_sdk_1.wrappedClass)("ProojectAnalyzer", project_analyzer_1.ProjectAnalyzer, (name, ...args) => ({ name, args }));
7
+ async function analyzeProject(sourceDir, options) {
8
+ const analyzer = new ProjectAnalyzer({
9
+ sourceDir,
10
+ ...options
11
+ });
12
+ return analyzer.analyzeProject();
13
+ }
14
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/analyser/index.ts"],"names":[],"mappings":";;AAKA,wCAOC;AAZD,gFAAoE;AAEpE,yDAAgE;AAChE,MAAM,eAAe,GAAG,IAAA,oCAAY,EAAC,kBAAkB,EAAE,kCAAO,EAAC,CAAC,IAAI,EAAC,GAAG,IAAI,EAAC,EAAE,CAAA,CAAC,EAAC,IAAI,EAAC,IAAI,EAAC,CAAC,CAAC,CAAA;AAExF,KAAK,UAAU,cAAc,CAAC,SAAiB,EAAE,OAAkC;IACxF,MAAM,QAAQ,GAAG,IAAI,eAAe,CAAC;QACnC,SAAS;QACT,GAAG,OAAO;KACX,CAAC,CAAC;IAEH,OAAO,QAAQ,CAAC,cAAc,EAAE,CAAC;AACnC,CAAC"}
@@ -0,0 +1,17 @@
1
+ import { ClassInfo } from '../types';
2
+ export interface ModuleDependencyResult {
3
+ sortedModules: string[];
4
+ cycles: string[][];
5
+ moduleDependencies: Map<string, Set<string>>;
6
+ }
7
+ export declare class ModuleDependencyResolver {
8
+ private moduleGroupedClasses;
9
+ private interfaceToModuleMap;
10
+ constructor(moduleGroupedClasses: Map<string, ClassInfo[]>);
11
+ resolve(): ModuleDependencyResult;
12
+ private buildInterfaceToModuleMap;
13
+ private buildModuleDependencyGraph;
14
+ private topologicalSort;
15
+ getModuleDependencies(moduleName: string): string[];
16
+ }
17
+ //# sourceMappingURL=module-dependency-resolver.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"module-dependency-resolver.d.ts","sourceRoot":"","sources":["../../src/analyser/module-dependency-resolver.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,UAAU,CAAC;AAGrC,MAAM,WAAW,sBAAsB;IACrC,aAAa,EAAE,MAAM,EAAE,CAAC;IACxB,MAAM,EAAE,MAAM,EAAE,EAAE,CAAC;IACnB,kBAAkB,EAAE,GAAG,CAAC,MAAM,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC;CAC9C;AAED,qBAAa,wBAAwB;IACnC,OAAO,CAAC,oBAAoB,CAA2B;IACvD,OAAO,CAAC,oBAAoB,CAAsB;gBAEtC,oBAAoB,EAAE,GAAG,CAAC,MAAM,EAAE,SAAS,EAAE,CAAC;IAK1D,OAAO,IAAI,sBAAsB;IAWjC,OAAO,CAAC,yBAAyB;IAcjC,OAAO,CAAC,0BAA0B;IA2BlC,OAAO,CAAC,eAAe;IAUvB,qBAAqB,CAAC,UAAU,EAAE,MAAM,GAAG,MAAM,EAAE;CAKpD"}
@@ -0,0 +1,66 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.ModuleDependencyResolver = void 0;
4
+ const topological_sorter_1 = require("../utils/topological-sorter");
5
+ class ModuleDependencyResolver {
6
+ constructor(moduleGroupedClasses) {
7
+ this.moduleGroupedClasses = moduleGroupedClasses;
8
+ this.interfaceToModuleMap = this.buildInterfaceToModuleMap();
9
+ }
10
+ resolve() {
11
+ const moduleDependencies = this.buildModuleDependencyGraph();
12
+ const sortResult = this.topologicalSort(moduleDependencies);
13
+ return {
14
+ sortedModules: sortResult.sorted,
15
+ cycles: sortResult.cycles,
16
+ moduleDependencies
17
+ };
18
+ }
19
+ buildInterfaceToModuleMap() {
20
+ const interfaceToModuleMap = new Map();
21
+ for (const [moduleName, classes] of this.moduleGroupedClasses) {
22
+ for (const classInfo of classes) {
23
+ if (classInfo.interfaceName) {
24
+ interfaceToModuleMap.set(classInfo.interfaceName, moduleName);
25
+ }
26
+ }
27
+ }
28
+ return interfaceToModuleMap;
29
+ }
30
+ buildModuleDependencyGraph() {
31
+ const moduleDependencies = new Map();
32
+ // Initialize all modules with empty dependency sets
33
+ for (const moduleName of this.moduleGroupedClasses.keys()) {
34
+ moduleDependencies.set(moduleName, new Set());
35
+ }
36
+ // Analyze dependencies between modules
37
+ for (const [moduleName, classes] of this.moduleGroupedClasses) {
38
+ const moduleDeps = moduleDependencies.get(moduleName);
39
+ for (const classInfo of classes) {
40
+ for (const dependency of classInfo.dependencies) {
41
+ // Check if this dependency is an interface from another module
42
+ const dependencyModule = this.interfaceToModuleMap.get(dependency);
43
+ if (dependencyModule && dependencyModule !== moduleName) {
44
+ moduleDeps.add(dependencyModule);
45
+ }
46
+ }
47
+ }
48
+ }
49
+ return moduleDependencies;
50
+ }
51
+ topologicalSort(moduleDependencies) {
52
+ // Convert Map<string, Set<string>> to Map<string, string[]> for TopologicalSorter
53
+ const graphMap = new Map();
54
+ for (const [module, deps] of moduleDependencies) {
55
+ graphMap.set(module, Array.from(deps));
56
+ }
57
+ return topological_sorter_1.TopologicalSorter.sort(graphMap, "desc");
58
+ }
59
+ getModuleDependencies(moduleName) {
60
+ const result = this.resolve();
61
+ const deps = result.moduleDependencies.get(moduleName);
62
+ return deps ? Array.from(deps) : [];
63
+ }
64
+ }
65
+ exports.ModuleDependencyResolver = ModuleDependencyResolver;
66
+ //# sourceMappingURL=module-dependency-resolver.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"module-dependency-resolver.js","sourceRoot":"","sources":["../../src/analyser/module-dependency-resolver.ts"],"names":[],"mappings":";;;AACA,oEAAgE;AAQhE,MAAa,wBAAwB;IAInC,YAAY,oBAA8C;QACxD,IAAI,CAAC,oBAAoB,GAAG,oBAAoB,CAAC;QACjD,IAAI,CAAC,oBAAoB,GAAG,IAAI,CAAC,yBAAyB,EAAE,CAAC;IAC/D,CAAC;IAED,OAAO;QACL,MAAM,kBAAkB,GAAG,IAAI,CAAC,0BAA0B,EAAE,CAAC;QAC7D,MAAM,UAAU,GAAG,IAAI,CAAC,eAAe,CAAC,kBAAkB,CAAC,CAAC;QAE5D,OAAO;YACL,aAAa,EAAE,UAAU,CAAC,MAAM;YAChC,MAAM,EAAE,UAAU,CAAC,MAAM;YACzB,kBAAkB;SACnB,CAAC;IACJ,CAAC;IAEO,yBAAyB;QAC/B,MAAM,oBAAoB,GAAG,IAAI,GAAG,EAAkB,CAAC;QAEvD,KAAK,MAAM,CAAC,UAAU,EAAE,OAAO,CAAC,IAAI,IAAI,CAAC,oBAAoB,EAAE,CAAC;YAC9D,KAAK,MAAM,SAAS,IAAI,OAAO,EAAE,CAAC;gBAChC,IAAI,SAAS,CAAC,aAAa,EAAE,CAAC;oBAC5B,oBAAoB,CAAC,GAAG,CAAC,SAAS,CAAC,aAAa,EAAE,UAAU,CAAC,CAAC;gBAChE,CAAC;YACH,CAAC;QACH,CAAC;QAED,OAAO,oBAAoB,CAAC;IAC9B,CAAC;IAEO,0BAA0B;QAChC,MAAM,kBAAkB,GAAG,IAAI,GAAG,EAAuB,CAAC;QAE1D,oDAAoD;QACpD,KAAK,MAAM,UAAU,IAAI,IAAI,CAAC,oBAAoB,CAAC,IAAI,EAAE,EAAE,CAAC;YAC1D,kBAAkB,CAAC,GAAG,CAAC,UAAU,EAAE,IAAI,GAAG,EAAU,CAAC,CAAC;QACxD,CAAC;QAED,uCAAuC;QACvC,KAAK,MAAM,CAAC,UAAU,EAAE,OAAO,CAAC,IAAI,IAAI,CAAC,oBAAoB,EAAE,CAAC;YAC9D,MAAM,UAAU,GAAG,kBAAkB,CAAC,GAAG,CAAC,UAAU,CAAE,CAAC;YAEvD,KAAK,MAAM,SAAS,IAAI,OAAO,EAAE,CAAC;gBAChC,KAAK,MAAM,UAAU,IAAI,SAAS,CAAC,YAAY,EAAE,CAAC;oBAChD,+DAA+D;oBAC/D,MAAM,gBAAgB,GAAG,IAAI,CAAC,oBAAoB,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;oBAEnE,IAAI,gBAAgB,IAAI,gBAAgB,KAAK,UAAU,EAAE,CAAC;wBACxD,UAAU,CAAC,GAAG,CAAC,gBAAgB,CAAC,CAAC;oBACnC,CAAC;gBACH,CAAC;YACH,CAAC;QACH,CAAC;QAED,OAAO,kBAAkB,CAAC;IAC5B,CAAC;IAEO,eAAe,CAAC,kBAA4C;QAClE,kFAAkF;QAClF,MAAM,QAAQ,GAAG,IAAI,GAAG,EAAoB,CAAC;QAC7C,KAAK,MAAM,CAAC,MAAM,EAAE,IAAI,CAAC,IAAI,kBAAkB,EAAE,CAAC;YAChD,QAAQ,CAAC,GAAG,CAAC,MAAM,EAAE,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;QACzC,CAAC;QAED,OAAO,sCAAiB,CAAC,IAAI,CAAC,QAAQ,EAAC,MAAM,CAAC,CAAC;IACjD,CAAC;IAED,qBAAqB,CAAC,UAAkB;QACtC,MAAM,MAAM,GAAG,IAAI,CAAC,OAAO,EAAE,CAAC;QAC9B,MAAM,IAAI,GAAG,MAAM,CAAC,kBAAkB,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;QACvD,OAAO,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;IACtC,CAAC;CACF;AA5ED,4DA4EC"}
@@ -0,0 +1,8 @@
1
+ import { AnalyzerOptions, ClassInfo } from '../types';
2
+ export declare class ProjectAnalyzer {
3
+ private fileDiscovery;
4
+ private classAnalyzer;
5
+ constructor(options: AnalyzerOptions);
6
+ analyzeProject(): Promise<ClassInfo[]>;
7
+ }
8
+ //# sourceMappingURL=project-analyzer.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"project-analyzer.d.ts","sourceRoot":"","sources":["../../src/analyser/project-analyzer.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,SAAS,EAAE,MAAM,UAAU,CAAC;AAKtD,qBAAa,eAAe;IAC1B,OAAO,CAAC,aAAa,CAAgB;IACrC,OAAO,CAAC,aAAa,CAAgB;gBAEzB,OAAO,EAAE,eAAe;IAK9B,cAAc,IAAI,OAAO,CAAC,SAAS,EAAE,CAAC;CAY7C"}
@@ -0,0 +1,20 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.ProjectAnalyzer = void 0;
4
+ const class_analyzer_1 = require("./class-analyzer");
5
+ const file_discovery_1 = require("./file-discovery");
6
+ class ProjectAnalyzer {
7
+ constructor(options) {
8
+ this.fileDiscovery = new file_discovery_1.FileDiscovery(options.sourceDir, options.excludePatterns);
9
+ this.classAnalyzer = new class_analyzer_1.ClassAnalyzer(options.sourceDir, options.interfacePattern);
10
+ }
11
+ async analyzeProject() {
12
+ const tsFiles = await this.fileDiscovery.findTypeScriptFiles();
13
+ const fileAnalysisPromises = tsFiles.map(filePath => this.classAnalyzer.analyzeFile(filePath));
14
+ const fileClassesArrays = await Promise.all(fileAnalysisPromises);
15
+ const classes = fileClassesArrays.flat();
16
+ return classes;
17
+ }
18
+ }
19
+ exports.ProjectAnalyzer = ProjectAnalyzer;
20
+ //# sourceMappingURL=project-analyzer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"project-analyzer.js","sourceRoot":"","sources":["../../src/analyser/project-analyzer.ts"],"names":[],"mappings":";;;AACA,qDAAiD;AACjD,qDAAiD;AAGjD,MAAa,eAAe;IAI1B,YAAY,OAAwB;QAClC,IAAI,CAAC,aAAa,GAAG,IAAI,8BAAa,CAAC,OAAO,CAAC,SAAS,EAAE,OAAO,CAAC,eAAe,CAAC,CAAC;QACnF,IAAI,CAAC,aAAa,GAAG,IAAI,8BAAa,CAAC,OAAO,CAAC,SAAS,EAAE,OAAO,CAAC,gBAAgB,CAAC,CAAC;IACtF,CAAC;IAED,KAAK,CAAC,cAAc;QAClB,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,aAAa,CAAC,mBAAmB,EAAE,CAAC;QAE/D,MAAM,oBAAoB,GAAG,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE,CAClD,IAAI,CAAC,aAAa,CAAC,WAAW,CAAC,QAAQ,CAAC,CACzC,CAAC;QAEF,MAAM,iBAAiB,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC,oBAAoB,CAAC,CAAC;QAClE,MAAM,OAAO,GAAG,iBAAiB,CAAC,IAAI,EAAE,CAAC;QAEzC,OAAO,OAAO,CAAC;IACjB,CAAC;CACF;AArBD,0CAqBC"}
@@ -0,0 +1,3 @@
1
+ import { Command } from 'commander';
2
+ export declare const analyzeCommand: Command;
3
+ //# sourceMappingURL=analyze.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"analyze.d.ts","sourceRoot":"","sources":["../../src/commands/analyze.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAMpC,eAAO,MAAM,cAAc,SA4DvB,CAAC"}
@@ -0,0 +1,66 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.analyzeCommand = void 0;
4
+ const commander_1 = require("commander");
5
+ const path_1 = require("path");
6
+ const fs_1 = require("fs");
7
+ const analyser_1 = require("../analyser");
8
+ const generator_1 = require("../generator");
9
+ exports.analyzeCommand = new commander_1.Command('analyze')
10
+ .description('Analyze project and show detected classes without generating')
11
+ .option('-s, --source <dir>', 'Source directory to scan', 'src')
12
+ .option('-i, --interface <pattern>', 'Interface name pattern to match (regex)')
13
+ .option('-e, --exclude <patterns...>', 'Exclude patterns for files')
14
+ .action(async (options) => {
15
+ try {
16
+ const sourceDir = (0, path_1.resolve)(options.source);
17
+ if (!(0, fs_1.existsSync)(sourceDir)) {
18
+ console.error(`āŒ Source directory does not exist: ${sourceDir}`);
19
+ process.exit(1);
20
+ }
21
+ console.log(`šŸ” Analyzing directory: ${sourceDir}`);
22
+ const classes = await (0, analyser_1.analyzeProject)(sourceDir, {
23
+ sourceDir,
24
+ interfacePattern: options.interface,
25
+ excludePatterns: options.exclude
26
+ });
27
+ console.log("Analysis results------------\n");
28
+ console.log(classes);
29
+ console.log("Analysis results------------\n");
30
+ if (classes.length === 0) {
31
+ console.log('āš ļø No classes implementing interfaces found.');
32
+ return;
33
+ }
34
+ console.log(`\nšŸ“‹ Found ${classes.length} classes:\n`);
35
+ classes.forEach(cls => {
36
+ console.log(`šŸ“¦ ${cls.name}`);
37
+ console.log(` File: ${cls.filePath}`);
38
+ if (cls.interfaceName) {
39
+ console.log(` Implements: ${cls.interfaceName}`);
40
+ }
41
+ if (cls.dependencies.length > 0) {
42
+ console.log(` Dependencies: ${cls.dependencies.join(', ')}`);
43
+ }
44
+ else {
45
+ console.log(` Dependencies: none`);
46
+ }
47
+ console.log('');
48
+ });
49
+ // Check for circular dependencies
50
+ const cycles = (0, generator_1.detectCircularDependencies)(classes);
51
+ if (cycles.length > 0) {
52
+ console.log('āš ļø Circular dependencies detected:');
53
+ cycles.forEach((cycle, index) => {
54
+ console.log(` ${index + 1}. ${cycle.join(' → ')}`);
55
+ });
56
+ }
57
+ else {
58
+ console.log('āœ… No circular dependencies found.');
59
+ }
60
+ }
61
+ catch (error) {
62
+ console.error('āŒ Error analyzing project:', error instanceof Error ? error.message : error);
63
+ process.exit(1);
64
+ }
65
+ });
66
+ //# sourceMappingURL=analyze.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"analyze.js","sourceRoot":"","sources":["../../src/commands/analyze.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ import { Command } from 'commander';
2
+ export declare const generateCommand: Command;
3
+ //# sourceMappingURL=generate.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"generate.d.ts","sourceRoot":"","sources":["../../src/commands/generate.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AASpC,eAAO,MAAM,eAAe,SA4JxB,CAAC"}
@@ -0,0 +1,150 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.generateCommand = void 0;
4
+ const commander_1 = require("commander");
5
+ const path_1 = require("path");
6
+ const fs_1 = require("fs");
7
+ const analyser_1 = require("../analyser");
8
+ const generator_1 = require("../generator");
9
+ const configManager_1 = require("../utils/configManager");
10
+ const moduleResolver_1 = require("../utils/moduleResolver");
11
+ const one_logger_client_sdk_1 = require("@notjustcoders/one-logger-client-sdk");
12
+ exports.generateCommand = new commander_1.Command('generate')
13
+ .description('Generate IoC container from TypeScript classes')
14
+ .option('-s, --source <dir>', 'Source directory to scan', 'src')
15
+ .option('-o, --output <file>', 'Output file path', 'container.gen.ts')
16
+ .option('-i, --interface <pattern>', 'Interface name pattern to match (regex)')
17
+ .option('-e, --exclude <patterns...>', 'Exclude patterns for files')
18
+ .option('--check-cycles', 'Only check for circular dependencies without generating')
19
+ .option('--verbose', 'Enable verbose logging')
20
+ .action(async (options) => {
21
+ try {
22
+ await (0, one_logger_client_sdk_1.initializeOneLogger)({
23
+ name: "ioc-maker",
24
+ description: "ioc-maker",
25
+ tracer: {
26
+ batchSize: 1,
27
+ }
28
+ });
29
+ // Initialize config manager with the source directory
30
+ const initialSourceDir = (0, path_1.resolve)(options.source);
31
+ const configManager = new configManager_1.ConfigManager(initialSourceDir);
32
+ // Merge CLI options with config file
33
+ const mergedOptions = configManager.mergeWithCliOptions(options);
34
+ const sourceDir = (0, path_1.resolve)(mergedOptions.source);
35
+ const outputPath = (0, path_1.resolve)(sourceDir, mergedOptions.output);
36
+ if (configManager.hasConfigFile() && mergedOptions.verbose) {
37
+ console.log(`šŸ“‹ Using config file: ${configManager.getConfigPath()}`);
38
+ }
39
+ // Validate module configuration if present
40
+ let moduleResolver = null;
41
+ if (mergedOptions.modules && Object.keys(mergedOptions.modules).length > 0) {
42
+ const validationErrors = moduleResolver_1.ModuleResolver.validateModuleConfig(mergedOptions.modules);
43
+ if (validationErrors.length > 0) {
44
+ console.error('āŒ Module configuration errors:');
45
+ validationErrors.forEach(error => console.error(` ${error}`));
46
+ process.exit(1);
47
+ }
48
+ moduleResolver = new moduleResolver_1.ModuleResolver(mergedOptions.modules, sourceDir);
49
+ if (mergedOptions.verbose) {
50
+ console.log(`šŸ—ļø Module support enabled with ${Object.keys(mergedOptions.modules).length} modules`);
51
+ }
52
+ }
53
+ if (!(0, fs_1.existsSync)(sourceDir)) {
54
+ console.error(`āŒ Source directory does not exist: ${sourceDir}`);
55
+ process.exit(1);
56
+ }
57
+ if (mergedOptions.verbose) {
58
+ console.log(`šŸ” Scanning directory: ${sourceDir}`);
59
+ console.log(`šŸ“ Output file: ${outputPath}`);
60
+ if (mergedOptions.interface) {
61
+ console.log(`šŸŽÆ Interface pattern: ${mergedOptions.interface}`);
62
+ }
63
+ }
64
+ console.log("šŸš€ Starting analysis...");
65
+ // Analyze the project
66
+ const classes = await (0, analyser_1.analyzeProject)(sourceDir, {
67
+ sourceDir,
68
+ interfacePattern: mergedOptions.interface,
69
+ excludePatterns: mergedOptions.exclude
70
+ });
71
+ one_logger_client_sdk_1.logger.info("Analysis results------------\n", { classes });
72
+ if (classes.length === 0) {
73
+ console.log('āš ļø No classes implementing interfaces found.');
74
+ if (mergedOptions.interface) {
75
+ console.log(` Make sure classes implement interfaces matching pattern: ${mergedOptions.interface}`);
76
+ }
77
+ else {
78
+ console.log(' Make sure classes implement interfaces using the "implements" keyword.');
79
+ }
80
+ return;
81
+ }
82
+ // Group classes by modules if module resolver is available
83
+ let moduleGroupedClasses;
84
+ if (moduleResolver) {
85
+ moduleGroupedClasses = moduleResolver.groupClassesByModule(classes);
86
+ if (mergedOptions.verbose) {
87
+ console.log(`\nšŸ“‹ Found ${classes.length} classes organized into ${moduleGroupedClasses.size} modules:`);
88
+ for (const [moduleName, moduleClasses] of moduleGroupedClasses) {
89
+ console.log(`\n šŸ“¦ ${moduleName} (${moduleClasses.length} classes):`);
90
+ moduleClasses.forEach(cls => {
91
+ console.log(` • ${cls.name} (${cls.dependencies.length} dependencies)`);
92
+ if (cls.dependencies.length > 0) {
93
+ console.log(` Dependencies: ${cls.dependencies.join(', ')}`);
94
+ }
95
+ });
96
+ }
97
+ }
98
+ }
99
+ else {
100
+ // Backward compatibility: single default module
101
+ moduleGroupedClasses = new Map([['default', classes]]);
102
+ if (mergedOptions.verbose) {
103
+ console.log(`\nšŸ“‹ Found ${classes.length} classes:`);
104
+ classes.forEach(cls => {
105
+ console.log(` • ${cls.name} (${cls.dependencies.length} dependencies)`);
106
+ if (cls.dependencies.length > 0) {
107
+ console.log(` Dependencies: ${cls.dependencies.join(', ')}`);
108
+ }
109
+ });
110
+ }
111
+ }
112
+ // Check for circular dependencies
113
+ const cycles = (0, generator_1.detectCircularDependencies)(classes);
114
+ if (cycles.length > 0) {
115
+ console.error('āŒ Circular dependencies detected:');
116
+ cycles.forEach((cycle, index) => {
117
+ console.error(` ${index + 1}. ${cycle.join(' → ')}`);
118
+ });
119
+ process.exit(1);
120
+ }
121
+ if (mergedOptions.checkCycles) {
122
+ console.log('āœ… No circular dependencies found.');
123
+ return;
124
+ }
125
+ console.log("Generating container: generateContainerFile------------------>");
126
+ // Generate container file
127
+ if (moduleResolver) {
128
+ (0, generator_1.generateContainerFile)(moduleGroupedClasses, outputPath);
129
+ }
130
+ else {
131
+ // Backward compatibility
132
+ (0, generator_1.generateContainerFile)(classes, outputPath);
133
+ }
134
+ console.log(`āœ… Container generated successfully!`);
135
+ console.log(` File: ${outputPath}`);
136
+ console.log(` Classes: ${classes.length}`);
137
+ if (mergedOptions.verbose) {
138
+ console.log('\nšŸŽ‰ You can now import and use your container:');
139
+ console.log(' import { container } from "./container.gen";');
140
+ console.log(' const userService = container.userService;');
141
+ }
142
+ // Force process exit to prevent hanging due to one-logger SDK
143
+ process.exit(0);
144
+ }
145
+ catch (error) {
146
+ console.error('āŒ Error generating container:', error instanceof Error ? error.message : error);
147
+ process.exit(1);
148
+ }
149
+ });
150
+ //# sourceMappingURL=generate.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"generate.js","sourceRoot":"","sources":["../../src/commands/generate.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,5 @@
1
+ import { ASTParser } from "./analyser/ast-parser";
2
+ export declare const container: {
3
+ astParser: ASTParser;
4
+ };
5
+ //# sourceMappingURL=container.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"container.d.ts","sourceRoot":"","sources":["../src/container.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,uBAAuB,CAAC;AAElD,eAAO,MAAM,SAAS;;CAGrB,CAAA"}
@@ -0,0 +1,8 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.container = void 0;
4
+ const ast_parser_1 = require("./analyser/ast-parser");
5
+ exports.container = {
6
+ astParser: new ast_parser_1.ASTParser()
7
+ };
8
+ //# sourceMappingURL=container.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"container.js","sourceRoot":"","sources":["../src/container.ts"],"names":[],"mappings":";;;AAAA,sDAAkD;AAErC,QAAA,SAAS,GAAG;IACrB,SAAS,EAAE,IAAI,sBAAS,EAAE;CAE7B,CAAA"}
@@ -0,0 +1,20 @@
1
+ import { GeneratorOptions } from '../types';
2
+ export declare class ContainerFileGenerator {
3
+ private dependencyResolver;
4
+ private importGenerator;
5
+ private instantiationGenerator;
6
+ private containerCodeGenerator;
7
+ private fileWriter;
8
+ private moduleGroupedClasses?;
9
+ constructor(options: GeneratorOptions);
10
+ generateContainer(): void;
11
+ generateModularContainer(): void;
12
+ private generateContainerCode;
13
+ private generateModularContainerCode;
14
+ private generateModuleContainers;
15
+ private generateAggregatedContainer;
16
+ private generateModularTypeExport;
17
+ private camelCase;
18
+ private sortClassesByDependencies;
19
+ }
20
+ //# sourceMappingURL=container-file-generator.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"container-file-generator.d.ts","sourceRoot":"","sources":["../../src/generator/container-file-generator.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,gBAAgB,EAAa,MAAM,UAAU,CAAC;AAOvD,qBAAa,sBAAsB;IACjC,OAAO,CAAC,kBAAkB,CAAqB;IAC/C,OAAO,CAAC,eAAe,CAAkB;IACzC,OAAO,CAAC,sBAAsB,CAAyB;IACvD,OAAO,CAAC,sBAAsB,CAAyB;IACvD,OAAO,CAAC,UAAU,CAAa;IAC/B,OAAO,CAAC,oBAAoB,CAAC,CAA2B;gBAE5C,OAAO,EAAE,gBAAgB;IAsBrC,iBAAiB,IAAI,IAAI;IAWzB,wBAAwB,IAAI,IAAI;IA0BhC,OAAO,CAAC,qBAAqB;IAS7B,OAAO,CAAC,4BAA4B;IAUpC,OAAO,CAAC,wBAAwB;IAyJhC,OAAO,CAAC,2BAA2B;IAcnC,OAAO,CAAC,yBAAyB;IAIjC,OAAO,CAAC,SAAS;IAIjB,OAAO,CAAC,yBAAyB;CAqClC"}