@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,251 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const vitest_1 = require("vitest");
4
+ const instantiation_generator_1 = require("../../generator/instantiation-generator");
5
+ const dependency_resolver_fixtures_1 = require("./fixtures/dependency-resolver.fixtures");
6
+ (0, vitest_1.describe)('InstantiationGenerator', () => {
7
+ let instantiationGenerator;
8
+ (0, vitest_1.describe)('constructor', () => {
9
+ (0, vitest_1.it)('should create an instance with provided classes', () => {
10
+ instantiationGenerator = new instantiation_generator_1.InstantiationGenerator(dependency_resolver_fixtures_1.basicManagedClasses);
11
+ (0, vitest_1.expect)(instantiationGenerator).toBeInstanceOf(instantiation_generator_1.InstantiationGenerator);
12
+ });
13
+ (0, vitest_1.it)('should handle empty classes array', () => {
14
+ instantiationGenerator = new instantiation_generator_1.InstantiationGenerator([]);
15
+ (0, vitest_1.expect)(instantiationGenerator).toBeInstanceOf(instantiation_generator_1.InstantiationGenerator);
16
+ });
17
+ (0, vitest_1.it)('should initialize dependency resolver', () => {
18
+ instantiationGenerator = new instantiation_generator_1.InstantiationGenerator(dependency_resolver_fixtures_1.basicManagedClasses);
19
+ (0, vitest_1.expect)(instantiationGenerator['dependencyResolver']).toBeDefined();
20
+ });
21
+ });
22
+ (0, vitest_1.describe)('generateInstantiations', () => {
23
+ (0, vitest_1.describe)('with singleton classes only', () => {
24
+ (0, vitest_1.beforeEach)(() => {
25
+ instantiationGenerator = new instantiation_generator_1.InstantiationGenerator(dependency_resolver_fixtures_1.basicManagedClasses);
26
+ });
27
+ (0, vitest_1.it)('should generate singleton instantiations in correct order', () => {
28
+ const sortedClasses = ['UserRepository', 'UserService'];
29
+ const result = instantiationGenerator.generateInstantiations(sortedClasses);
30
+ (0, vitest_1.expect)(result).toContain('// Eager singleton instantiation');
31
+ (0, vitest_1.expect)(result).toContain('const userService = new UserService(userRepository);');
32
+ (0, vitest_1.expect)(result).toContain('const userRepository = new UserRepository();');
33
+ // UserRepository should be instantiated before UserService
34
+ const userRepoIndex = result.indexOf('const userRepository');
35
+ const userServiceIndex = result.indexOf('const userService');
36
+ (0, vitest_1.expect)(userServiceIndex).toBeLessThan(userRepoIndex);
37
+ });
38
+ (0, vitest_1.it)('should handle classes with no dependencies', () => {
39
+ const noDepsClasses = [
40
+ {
41
+ name: 'SimpleService',
42
+ filePath: '/src/services/simple.service.ts',
43
+ dependencies: [],
44
+ constructorParams: [],
45
+ interfaceName: 'ISimpleService',
46
+ importPath: './services/simple.service',
47
+ scope: 'singleton'
48
+ }
49
+ ];
50
+ instantiationGenerator = new instantiation_generator_1.InstantiationGenerator(noDepsClasses);
51
+ const result = instantiationGenerator.generateInstantiations(['SimpleService']);
52
+ (0, vitest_1.expect)(result).toContain('const simpleService = new SimpleService();');
53
+ });
54
+ });
55
+ (0, vitest_1.describe)('with transient classes only', () => {
56
+ (0, vitest_1.beforeEach)(() => {
57
+ instantiationGenerator = new instantiation_generator_1.InstantiationGenerator(dependency_resolver_fixtures_1.transientClasses);
58
+ });
59
+ (0, vitest_1.it)('should generate factory functions for transient classes', () => {
60
+ const sortedClasses = ['EmailProvider', 'EmailService'];
61
+ const result = instantiationGenerator.generateInstantiations(sortedClasses);
62
+ (0, vitest_1.expect)(result).toContain('// Lazy loading setup for transient dependencies');
63
+ (0, vitest_1.expect)(result).toContain('const emailServiceFactory = (): EmailService => new EmailService(emailProviderFactory());');
64
+ (0, vitest_1.expect)(result).toContain('const emailProviderFactory = (): EmailProvider => new EmailProvider();');
65
+ (0, vitest_1.expect)(result).not.toContain('// Eager singleton instantiation');
66
+ });
67
+ (0, vitest_1.it)('should handle transient classes with no dependencies', () => {
68
+ const transientNoDeps = [
69
+ {
70
+ name: 'TransientService',
71
+ filePath: '/src/services/transient.service.ts',
72
+ dependencies: [],
73
+ constructorParams: [],
74
+ interfaceName: 'ITransientService',
75
+ importPath: './services/transient.service',
76
+ scope: 'transient'
77
+ }
78
+ ];
79
+ instantiationGenerator = new instantiation_generator_1.InstantiationGenerator(transientNoDeps);
80
+ const result = instantiationGenerator.generateInstantiations(['TransientService']);
81
+ (0, vitest_1.expect)(result).toContain('const transientServiceFactory = (): TransientService => new TransientService();');
82
+ });
83
+ });
84
+ (0, vitest_1.describe)('with mixed scope classes', () => {
85
+ (0, vitest_1.beforeEach)(() => {
86
+ // Create a mix of singleton and transient classes
87
+ const mixedScopeClasses = [
88
+ ...dependency_resolver_fixtures_1.basicManagedClasses, // singletons
89
+ ...dependency_resolver_fixtures_1.transientClasses // transients
90
+ ];
91
+ instantiationGenerator = new instantiation_generator_1.InstantiationGenerator(mixedScopeClasses);
92
+ });
93
+ (0, vitest_1.it)('should generate both singleton instantiations and transient factories', () => {
94
+ const sortedClasses = ['UserRepository', 'UserService', 'EmailProvider', 'EmailService'];
95
+ const result = instantiationGenerator.generateInstantiations(sortedClasses);
96
+ // Should have both sections
97
+ (0, vitest_1.expect)(result).toContain('// Lazy loading setup for transient dependencies');
98
+ (0, vitest_1.expect)(result).toContain('// Eager singleton instantiation');
99
+ // Should have factory for transient
100
+ (0, vitest_1.expect)(result).toContain('const emailServiceFactory = (): EmailService => new EmailService(emailProviderFactory());');
101
+ (0, vitest_1.expect)(result).toContain('const emailProviderFactory = (): EmailProvider => new EmailProvider();');
102
+ // Should have instantiation for singletons
103
+ (0, vitest_1.expect)(result).toContain('const userService = new UserService(userRepository);');
104
+ (0, vitest_1.expect)(result).toContain('const userRepository = new UserRepository();');
105
+ });
106
+ (0, vitest_1.it)('should separate transient factories from singleton instantiations', () => {
107
+ const sortedClasses = ['UserRepository', 'UserService', 'EmailProvider', 'EmailService'];
108
+ const result = instantiationGenerator.generateInstantiations(sortedClasses);
109
+ const factoryIndex = result.indexOf('// Lazy loading setup');
110
+ const singletonIndex = result.indexOf('// Eager singleton instantiation');
111
+ (0, vitest_1.expect)(factoryIndex).toBeLessThan(singletonIndex);
112
+ });
113
+ });
114
+ (0, vitest_1.describe)('with mixed dependencies', () => {
115
+ (0, vitest_1.beforeEach)(() => {
116
+ instantiationGenerator = new instantiation_generator_1.InstantiationGenerator(dependency_resolver_fixtures_1.mixedDependencyClasses);
117
+ });
118
+ (0, vitest_1.it)('should handle classes with mixed managed and unmanaged dependencies', () => {
119
+ const sortedClasses = ['UserRepository', 'UserService', 'OrderService'];
120
+ const result = instantiationGenerator.generateInstantiations(sortedClasses);
121
+ // Should properly resolve mixed dependencies
122
+ (0, vitest_1.expect)(result).toContain('const orderService = new OrderService(userService, new PaymentGateway(), new Logger());');
123
+ (0, vitest_1.expect)(result).toContain('const userService = new UserService(userRepository);');
124
+ (0, vitest_1.expect)(result).toContain('const userRepository = new UserRepository();');
125
+ });
126
+ });
127
+ (0, vitest_1.describe)('with unmanaged dependencies', () => {
128
+ (0, vitest_1.beforeEach)(() => {
129
+ instantiationGenerator = new instantiation_generator_1.InstantiationGenerator(dependency_resolver_fixtures_1.unmanagedClassesWithParams);
130
+ });
131
+ (0, vitest_1.it)('should handle classes with unmanaged dependencies', () => {
132
+ const sortedClasses = ['DatabaseConnection'];
133
+ const result = instantiationGenerator.generateInstantiations(sortedClasses);
134
+ (0, vitest_1.expect)(result).toContain('const databaseConnection = new DatabaseConnection("default", 0, undefined);');
135
+ });
136
+ (0, vitest_1.it)('should generate correct default values for different types', () => {
137
+ const classWithMultipleTypes = [
138
+ {
139
+ name: 'TestService',
140
+ filePath: '/src/services/test.service.ts',
141
+ dependencies: [],
142
+ constructorParams: [
143
+ {
144
+ name: 'stringParam',
145
+ type: 'string',
146
+ isOptional: false,
147
+ accessModifier: 'private'
148
+ },
149
+ {
150
+ name: 'numberParam',
151
+ type: 'number',
152
+ isOptional: false,
153
+ accessModifier: 'private'
154
+ },
155
+ {
156
+ name: 'booleanParam',
157
+ type: 'boolean',
158
+ isOptional: false,
159
+ accessModifier: 'private'
160
+ }
161
+ ],
162
+ interfaceName: 'ITestService',
163
+ importPath: './services/test.service',
164
+ scope: 'singleton'
165
+ }
166
+ ];
167
+ instantiationGenerator = new instantiation_generator_1.InstantiationGenerator(classWithMultipleTypes);
168
+ const result = instantiationGenerator.generateInstantiations(['TestService']);
169
+ (0, vitest_1.expect)(result).toContain('const testService = new TestService("default", 0, false);');
170
+ });
171
+ });
172
+ (0, vitest_1.describe)('edge cases', () => {
173
+ (0, vitest_1.it)('should handle empty sorted classes array', () => {
174
+ instantiationGenerator = new instantiation_generator_1.InstantiationGenerator(dependency_resolver_fixtures_1.basicManagedClasses);
175
+ const result = instantiationGenerator.generateInstantiations([]);
176
+ (0, vitest_1.expect)(result).toBe('');
177
+ });
178
+ (0, vitest_1.it)('should handle classes not in the sorted list', () => {
179
+ instantiationGenerator = new instantiation_generator_1.InstantiationGenerator(dependency_resolver_fixtures_1.basicManagedClasses);
180
+ const result = instantiationGenerator.generateInstantiations(['NonExistentClass']);
181
+ (0, vitest_1.expect)(result).toBe('');
182
+ });
183
+ (0, vitest_1.it)('should handle circular dependencies gracefully', () => {
184
+ instantiationGenerator = new instantiation_generator_1.InstantiationGenerator(dependency_resolver_fixtures_1.circularDependencyClasses);
185
+ const sortedClasses = ['ServiceA', 'ServiceB'];
186
+ const result = instantiationGenerator.generateInstantiations(sortedClasses);
187
+ // Should still generate instantiations even with circular dependencies
188
+ (0, vitest_1.expect)(result).toContain('const serviceA');
189
+ (0, vitest_1.expect)(result).toContain('const serviceB');
190
+ });
191
+ (0, vitest_1.it)('should handle mixed dependencies correctly', () => {
192
+ const mixedClasses = [
193
+ {
194
+ name: 'MixedService',
195
+ filePath: '/src/services/mixed.service.ts',
196
+ dependencies: ['IUserRepository'],
197
+ constructorParams: [
198
+ {
199
+ name: 'userRepository',
200
+ type: 'IUserRepository',
201
+ isOptional: false,
202
+ accessModifier: 'private'
203
+ },
204
+ {
205
+ name: 'apiUrl',
206
+ type: 'string',
207
+ isOptional: false,
208
+ accessModifier: 'private'
209
+ }
210
+ ],
211
+ interfaceName: 'IMixedService',
212
+ importPath: './services/mixed.service',
213
+ scope: 'singleton'
214
+ },
215
+ ...dependency_resolver_fixtures_1.basicManagedClasses
216
+ ];
217
+ instantiationGenerator = new instantiation_generator_1.InstantiationGenerator(mixedClasses);
218
+ const result = instantiationGenerator.generateInstantiations(['UserRepository', 'MixedService']);
219
+ (0, vitest_1.expect)(result).toContain('const mixedService = new MixedService(userRepository, "default");');
220
+ });
221
+ });
222
+ (0, vitest_1.describe)('output formatting', () => {
223
+ (0, vitest_1.it)('should format output with proper sections and spacing', () => {
224
+ const mixedScopeClasses = [
225
+ ...dependency_resolver_fixtures_1.basicManagedClasses, // singletons
226
+ ...dependency_resolver_fixtures_1.transientClasses // transients
227
+ ];
228
+ instantiationGenerator = new instantiation_generator_1.InstantiationGenerator(mixedScopeClasses);
229
+ const sortedClasses = ['UserRepository', 'UserService', 'EmailProvider', 'EmailService'];
230
+ const result = instantiationGenerator.generateInstantiations(sortedClasses);
231
+ const lines = result.split('\n');
232
+ // Should have proper section headers
233
+ (0, vitest_1.expect)(lines).toContain('// Lazy loading setup for transient dependencies');
234
+ (0, vitest_1.expect)(lines).toContain('// Eager singleton instantiation');
235
+ // Should have empty line between sections
236
+ const factoryHeaderIndex = lines.indexOf('// Lazy loading setup for transient dependencies');
237
+ const singletonHeaderIndex = lines.indexOf('// Eager singleton instantiation');
238
+ (0, vitest_1.expect)(lines[singletonHeaderIndex - 1]).toBe('');
239
+ });
240
+ (0, vitest_1.it)('should generate proper variable names', () => {
241
+ instantiationGenerator = new instantiation_generator_1.InstantiationGenerator(dependency_resolver_fixtures_1.basicManagedClasses);
242
+ const result = instantiationGenerator.generateInstantiations(['UserService', 'UserRepository']);
243
+ (0, vitest_1.expect)(result).toContain('const userService');
244
+ (0, vitest_1.expect)(result).toContain('const userRepository');
245
+ (0, vitest_1.expect)(result).not.toContain('const UserService');
246
+ (0, vitest_1.expect)(result).not.toContain('const UserRepository');
247
+ });
248
+ });
249
+ });
250
+ });
251
+ //# sourceMappingURL=instantiation-generator.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"instantiation-generator.test.js","sourceRoot":"","sources":["../../../src/__tests__/generator/instantiation-generator.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,12 @@
1
+ import { ConstructorParameter, InjectionScope } from '../types';
2
+ export declare class ASTParser {
3
+ parseFile(filePath: string): any;
4
+ findClassesImplementingInterfaces(root: any): any[];
5
+ extractClassName(classNode: any): string | undefined;
6
+ extractInterfaceName(classNode: any): string | undefined;
7
+ extractConstructorParameters(classNode: any): ConstructorParameter[];
8
+ extractJSDocComments(root: any): Map<string, InjectionScope>;
9
+ extractScopeFromJSDoc(className: string, jsDocScopes: Map<string, InjectionScope>): InjectionScope;
10
+ extractTypeAliases(root: any): Map<string, string>;
11
+ }
12
+ //# sourceMappingURL=ast-parser.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ast-parser.d.ts","sourceRoot":"","sources":["../../src/analyser/ast-parser.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,oBAAoB,EAAE,cAAc,EAAE,MAAM,UAAU,CAAC;AAIhE,qBAAa,SAAS;IACpB,SAAS,CAAC,QAAQ,EAAE,MAAM,GAAG,GAAG;IAMhC,iCAAiC,CAAC,IAAI,EAAE,GAAG,GAAG,GAAG,EAAE;IAQnD,gBAAgB,CAAC,SAAS,EAAE,GAAG,GAAG,MAAM,GAAG,SAAS;IAuBpD,oBAAoB,CAAC,SAAS,EAAE,GAAG,GAAG,MAAM,GAAG,SAAS;IAIxD,4BAA4B,CAAC,SAAS,EAAE,GAAG,GAAG,oBAAoB,EAAE;IA+EpE,oBAAoB,CAAC,IAAI,EAAE,GAAG,GAAG,GAAG,CAAC,MAAM,EAAE,cAAc,CAAC;IAgE5D,qBAAqB,CAAC,SAAS,EAAE,MAAM,EAAE,WAAW,EAAE,GAAG,CAAC,MAAM,EAAE,cAAc,CAAC,GAAG,cAAc;IAIlG,kBAAkB,CAAC,IAAI,EAAE,GAAG,GAAG,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC;CA+BnD"}
@@ -0,0 +1,192 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.ASTParser = void 0;
4
+ const fs_1 = require("fs");
5
+ const napi_1 = require("@ast-grep/napi");
6
+ const one_logger_client_sdk_1 = require("@notjustcoders/one-logger-client-sdk");
7
+ class ASTParser {
8
+ parseFile(filePath) {
9
+ const content = (0, fs_1.readFileSync)(filePath, 'utf-8');
10
+ const ast = napi_1.ts.parse(content);
11
+ return ast.root();
12
+ }
13
+ findClassesImplementingInterfaces(root) {
14
+ return root.findAll({
15
+ rule: {
16
+ pattern: 'class $CLASS implements $INTERFACE { $$$ }'
17
+ }
18
+ });
19
+ }
20
+ extractClassName(classNode) {
21
+ one_logger_client_sdk_1.logger.log('Extracting class name from node:', { result: classNode.text().substring(0, 100) + '...' });
22
+ // Try different approaches to extract class name
23
+ let className = classNode.getMatch('CLASS')?.text();
24
+ if (className) {
25
+ one_logger_client_sdk_1.logger.log('Found class name using CLASS match:', className);
26
+ return className;
27
+ }
28
+ // Try to match the class declaration pattern directly
29
+ const classText = classNode.text();
30
+ const classMatch = classText.match(/class\s+([A-Za-z_][A-Za-z0-9_]*)/);
31
+ if (classMatch) {
32
+ className = classMatch[1];
33
+ one_logger_client_sdk_1.logger.log('Found class name using regex:', className);
34
+ return className;
35
+ }
36
+ one_logger_client_sdk_1.logger.log('Failed to extract class name');
37
+ return undefined;
38
+ }
39
+ extractInterfaceName(classNode) {
40
+ return classNode.getMatch('INTERFACE')?.text();
41
+ }
42
+ extractConstructorParameters(classNode) {
43
+ const parameters = [];
44
+ try {
45
+ // Find constructor within the class
46
+ const constructorNodes = classNode.findAll({
47
+ rule: {
48
+ kind: 'method_definition',
49
+ pattern: "$NAME",
50
+ regex: "^constructor"
51
+ }
52
+ });
53
+ one_logger_client_sdk_1.logger.log(`Found ${constructorNodes.length} constructor nodes`);
54
+ if (constructorNodes.length === 0) {
55
+ return parameters;
56
+ }
57
+ const constructorNode = constructorNodes[0];
58
+ // Find formal parameters within the constructor
59
+ const parameterNodes = constructorNode.findAll({
60
+ rule: {
61
+ kind: 'formal_parameters'
62
+ }
63
+ });
64
+ if (parameterNodes.length === 0) {
65
+ return parameters;
66
+ }
67
+ const formalParams = parameterNodes[0];
68
+ // Find individual parameters (both required and optional)
69
+ const requiredParamNodes = formalParams.findAll({
70
+ rule: {
71
+ kind: 'required_parameter'
72
+ }
73
+ });
74
+ const optionalParamNodes = formalParams.findAll({
75
+ rule: {
76
+ kind: 'optional_parameter'
77
+ }
78
+ });
79
+ const paramNodes = [...requiredParamNodes, ...optionalParamNodes];
80
+ one_logger_client_sdk_1.logger.log(`Found ${paramNodes.length} parameter nodes`);
81
+ for (const paramNode of paramNodes) {
82
+ const paramText = paramNode.text();
83
+ one_logger_client_sdk_1.logger.log('Parameter text:', paramText);
84
+ // Parse parameter using regex to extract details
85
+ const paramMatch = paramText.match(/(?:(private|public|protected)\s+)?(\w+)(\?)?\s*:\s*(\w+)/);
86
+ if (paramMatch) {
87
+ const [, accessModifier, name, optional, type] = paramMatch;
88
+ parameters.push({
89
+ name: name.trim(),
90
+ type: type.trim(),
91
+ isOptional: !!optional,
92
+ accessModifier: accessModifier
93
+ });
94
+ one_logger_client_sdk_1.logger.log(`Extracted parameter: ${name}: ${type}${optional ? '?' : ''} (${accessModifier || 'none'})`);
95
+ }
96
+ }
97
+ }
98
+ catch (error) {
99
+ one_logger_client_sdk_1.logger.warn('Warning: Could not extract constructor parameters:', { error });
100
+ }
101
+ one_logger_client_sdk_1.logger.log('Final parameters:', { parameters });
102
+ return parameters;
103
+ }
104
+ extractJSDocComments(root) {
105
+ const classScopes = new Map();
106
+ try {
107
+ // Find all JSDoc comments in the file
108
+ const comments = root.findAll({
109
+ rule: {
110
+ kind: 'comment'
111
+ }
112
+ });
113
+ one_logger_client_sdk_1.logger.log(`Found ${comments.length} comments in file`);
114
+ // Find all class declarations
115
+ const classDeclarations = root.findAll({
116
+ rule: {
117
+ kind: 'class_declaration'
118
+ }
119
+ });
120
+ one_logger_client_sdk_1.logger.log(`Found ${classDeclarations.length} class declarations in file`);
121
+ for (const comment of comments) {
122
+ const commentText = comment.text();
123
+ one_logger_client_sdk_1.logger.log(`Comment text: ${commentText}`);
124
+ if (commentText.includes('/**') && commentText.includes('@scope')) {
125
+ one_logger_client_sdk_1.logger.log(`Found @scope comment: ${commentText}`);
126
+ const scopeMatch = commentText.match(/@scope\s+(singleton|transient)/);
127
+ if (scopeMatch) {
128
+ const scope = scopeMatch[1];
129
+ const commentRange = comment.range();
130
+ one_logger_client_sdk_1.logger.log(`Comment range: line ${commentRange.start.line} to ${commentRange.end.line}`);
131
+ // Find the class declaration that comes immediately after this comment
132
+ for (const classDecl of classDeclarations) {
133
+ const classRange = classDecl.range();
134
+ one_logger_client_sdk_1.logger.log(`Class range: line ${classRange.start.line} to ${classRange.end.line}`);
135
+ // Check if the class comes after the comment
136
+ if (classRange.start.line > commentRange.end.line) {
137
+ const className = this.extractClassName(classDecl);
138
+ one_logger_client_sdk_1.logger.log(`Attempting to extract class name from class at line ${classRange.start.line}`);
139
+ one_logger_client_sdk_1.logger.log(`Extracted class name: ${className}`);
140
+ if (className) {
141
+ one_logger_client_sdk_1.logger.log(`Found JSDoc scope annotation: ${className} -> ${scope}`);
142
+ classScopes.set(className, scope);
143
+ break; // Take the first class after this comment
144
+ }
145
+ else {
146
+ one_logger_client_sdk_1.logger.log(`Failed to extract class name from class declaration`);
147
+ }
148
+ }
149
+ }
150
+ }
151
+ }
152
+ }
153
+ }
154
+ catch (error) {
155
+ one_logger_client_sdk_1.logger.warn('Warning: Could not extract JSDoc comments:', { error });
156
+ }
157
+ one_logger_client_sdk_1.logger.log(`Final classScopes map:`, { classScopes });
158
+ return classScopes;
159
+ }
160
+ extractScopeFromJSDoc(className, jsDocScopes) {
161
+ return jsDocScopes.get(className) || 'singleton';
162
+ }
163
+ extractTypeAliases(root) {
164
+ const typeAliases = new Map();
165
+ try {
166
+ // Find all import statements and parse them manually
167
+ const allImports = root.findAll({
168
+ rule: {
169
+ kind: 'import_statement'
170
+ }
171
+ });
172
+ one_logger_client_sdk_1.logger.log(`Found ${allImports.length} total import statements`);
173
+ for (const importNode of allImports) {
174
+ const importText = importNode.text();
175
+ one_logger_client_sdk_1.logger.log(`Import statement: ${importText}`);
176
+ // Manual regex parsing - handles variable whitespace
177
+ const aliasMatch = importText.match(/import\s*{\s*([\w]+)\s+as\s+([\w]+)\s*}\s+from/);
178
+ if (aliasMatch) {
179
+ const [, original, alias] = aliasMatch;
180
+ typeAliases.set(alias.trim(), original.trim());
181
+ one_logger_client_sdk_1.logger.log(`Manual regex found type alias: ${alias.trim()} -> ${original.trim()}`);
182
+ }
183
+ }
184
+ }
185
+ catch (error) {
186
+ one_logger_client_sdk_1.logger.warn('Warning: Could not extract type aliases:', { error });
187
+ }
188
+ return typeAliases;
189
+ }
190
+ }
191
+ exports.ASTParser = ASTParser;
192
+ //# sourceMappingURL=ast-parser.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ast-parser.js","sourceRoot":"","sources":["../../src/analyser/ast-parser.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,11 @@
1
+ import { ClassInfo } from '../types';
2
+ export declare class ClassAnalyzer {
3
+ private astParser;
4
+ private sourceDir;
5
+ private interfacePattern?;
6
+ constructor(sourceDir: string, interfacePattern?: string);
7
+ analyzeFile(filePath: string): Promise<ClassInfo[]>;
8
+ private resolveDependencies;
9
+ private generateImportPath;
10
+ }
11
+ //# sourceMappingURL=class-analyzer.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"class-analyzer.d.ts","sourceRoot":"","sources":["../../src/analyser/class-analyzer.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,SAAS,EAAwC,MAAM,UAAU,CAAC;AAK3E,qBAAa,aAAa;IACxB,OAAO,CAAC,SAAS,CAAY;IAC7B,OAAO,CAAC,SAAS,CAAS;IAC1B,OAAO,CAAC,gBAAgB,CAAC,CAAS;gBAEtB,SAAS,EAAE,MAAM,EAAE,gBAAgB,CAAC,EAAE,MAAM;IAMlD,WAAW,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,SAAS,EAAE,CAAC;IA0DzD,OAAO,CAAC,mBAAmB;IAU3B,OAAO,CAAC,kBAAkB;CAM3B"}
@@ -0,0 +1,78 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.ClassAnalyzer = void 0;
4
+ const path_1 = require("path");
5
+ const container_1 = require("../container");
6
+ const one_logger_client_sdk_1 = require("@notjustcoders/one-logger-client-sdk");
7
+ class ClassAnalyzer {
8
+ constructor(sourceDir, interfacePattern) {
9
+ this.astParser = container_1.container.astParser;
10
+ this.sourceDir = sourceDir;
11
+ this.interfacePattern = interfacePattern;
12
+ }
13
+ async analyzeFile(filePath) {
14
+ const classes = [];
15
+ try {
16
+ const root = this.astParser.parseFile(filePath);
17
+ // Extract import aliases for type resolution
18
+ const typeAliases = this.astParser.extractTypeAliases(root);
19
+ // Extract JSDoc scope annotations at file level for this specific file
20
+ const jsDocScopes = this.astParser.extractJSDocComments(root);
21
+ one_logger_client_sdk_1.logger.log('JSDoc scopes for file', { filePath, jsDocScopes });
22
+ // Find classes implementing interfaces
23
+ const classNodes = this.astParser.findClassesImplementingInterfaces(root);
24
+ for (const classNode of classNodes) {
25
+ const className = this.astParser.extractClassName(classNode);
26
+ const interfaceName = this.astParser.extractInterfaceName(classNode);
27
+ if (!className || !interfaceName)
28
+ continue;
29
+ // Filter by interface pattern if specified
30
+ if (this.interfacePattern) {
31
+ const pattern = new RegExp(this.interfacePattern);
32
+ if (!pattern.test(interfaceName))
33
+ continue;
34
+ }
35
+ const constructorParams = this.astParser.extractConstructorParameters(classNode);
36
+ const dependencies = this.resolveDependencies(constructorParams, typeAliases);
37
+ const importPath = this.generateImportPath(filePath, className);
38
+ const scope = this.astParser.extractScopeFromJSDoc(className, jsDocScopes);
39
+ one_logger_client_sdk_1.logger.log(`Processing class: ${className}`);
40
+ one_logger_client_sdk_1.logger.log(`Interface for ${className}:`, { interfaceName });
41
+ one_logger_client_sdk_1.logger.log(`Constructor params for ${className}:`, { constructorParams });
42
+ one_logger_client_sdk_1.logger.log(`Type aliases found:`, { count: Array.from(typeAliases.entries()) });
43
+ one_logger_client_sdk_1.logger.log(`Dependencies for ${className}:`, { dependencies });
44
+ one_logger_client_sdk_1.logger.log(`Scope for ${className}:`, { scope });
45
+ classes.push({
46
+ name: className,
47
+ filePath,
48
+ dependencies,
49
+ constructorParams,
50
+ interfaceName,
51
+ importPath,
52
+ scope
53
+ });
54
+ }
55
+ }
56
+ catch (error) {
57
+ one_logger_client_sdk_1.logger.warn(`Warning: Could not parse ${filePath}:`, { error });
58
+ }
59
+ return classes;
60
+ }
61
+ resolveDependencies(constructorParams, typeAliases) {
62
+ return constructorParams
63
+ .map(param => {
64
+ // Resolve type aliases to actual interface names
65
+ const resolvedType = typeAliases.get(param.type) || param.type;
66
+ return resolvedType;
67
+ })
68
+ .filter(type => /^[A-Z]\w*$/.test(type));
69
+ }
70
+ generateImportPath(filePath, className) {
71
+ // Generate relative import path from the output directory
72
+ const relativePath = (0, path_1.relative)(this.sourceDir, filePath);
73
+ const pathWithoutExtension = relativePath.replace(/\.ts$/, '');
74
+ return `./${pathWithoutExtension}`;
75
+ }
76
+ }
77
+ exports.ClassAnalyzer = ClassAnalyzer;
78
+ //# sourceMappingURL=class-analyzer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"class-analyzer.js","sourceRoot":"","sources":["../../src/analyser/class-analyzer.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,10 @@
1
+ import { ClassInfo } from '../types';
2
+ import { TopologicalSortResult } from '../utils/topological-sorter';
3
+ export declare class DependencyResolver {
4
+ private classes;
5
+ constructor(classes: ClassInfo[]);
6
+ resolve(): TopologicalSortResult;
7
+ private buildDependencyGraph;
8
+ detectCircularDependencies(): string[][];
9
+ }
10
+ //# sourceMappingURL=dependency-resolver.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"dependency-resolver.d.ts","sourceRoot":"","sources":["../../src/analyser/dependency-resolver.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAmB,MAAM,UAAU,CAAC;AACtD,OAAO,EAAqB,qBAAqB,EAAE,MAAM,6BAA6B,CAAC;AAEvF,qBAAa,kBAAkB;IAC7B,OAAO,CAAC,OAAO,CAAc;gBAEjB,OAAO,EAAE,SAAS,EAAE;IAIhC,OAAO,IAAI,qBAAqB;IAKhC,OAAO,CAAC,oBAAoB;IAiC5B,0BAA0B,IAAI,MAAM,EAAE,EAAE;CAIzC"}