@evolith/smart-cli 0.0.2-beta → 1.1.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 (271) hide show
  1. package/README.es.md +51 -15
  2. package/README.md +51 -15
  3. package/dist/app.module.js +2 -2
  4. package/dist/app.module.js.map +1 -1
  5. package/dist/app.module.spec.d.ts +1 -0
  6. package/dist/app.module.spec.js +305 -0
  7. package/dist/app.module.spec.js.map +1 -0
  8. package/dist/application/ports/webhook-notifier.port.d.ts +4 -0
  9. package/dist/application/ports/webhook-notifier.port.js +3 -0
  10. package/dist/application/ports/webhook-notifier.port.js.map +1 -0
  11. package/dist/application/services/index.d.ts +1 -0
  12. package/dist/application/services/index.js +28 -2
  13. package/dist/application/services/index.js.map +1 -1
  14. package/dist/application/services/initialize-project.spec.d.ts +1 -0
  15. package/dist/application/services/initialize-project.spec.js +211 -0
  16. package/dist/application/services/initialize-project.spec.js.map +1 -0
  17. package/dist/application/use-cases/evaluate-gate.use-case.d.ts +20 -0
  18. package/dist/application/use-cases/evaluate-gate.use-case.js +72 -0
  19. package/dist/application/use-cases/evaluate-gate.use-case.js.map +1 -0
  20. package/dist/application/use-cases/validate-satellite.use-case.d.ts +1 -0
  21. package/dist/application/use-cases/validate-satellite.use-case.js +7 -3
  22. package/dist/application/use-cases/validate-satellite.use-case.js.map +1 -1
  23. package/dist/commands/adr/adr.command.d.ts +2 -0
  24. package/dist/commands/adr/adr.command.js +36 -14
  25. package/dist/commands/adr/adr.command.js.map +1 -1
  26. package/dist/commands/adr/adr.command.spec.d.ts +1 -0
  27. package/dist/commands/adr/adr.command.spec.js +409 -0
  28. package/dist/commands/adr/adr.command.spec.js.map +1 -0
  29. package/dist/commands/architecture/scaffold.command.d.ts +1 -0
  30. package/dist/commands/architecture/scaffold.command.js +23 -1
  31. package/dist/commands/architecture/scaffold.command.js.map +1 -1
  32. package/dist/commands/architecture/scaffold.command.spec.d.ts +1 -0
  33. package/dist/commands/architecture/scaffold.command.spec.js +207 -0
  34. package/dist/commands/architecture/scaffold.command.spec.js.map +1 -0
  35. package/dist/commands/completion/completion.command.spec.d.ts +1 -0
  36. package/dist/commands/completion/completion.command.spec.js +240 -0
  37. package/dist/commands/completion/completion.command.spec.js.map +1 -0
  38. package/dist/commands/docs/docs.command.spec.d.ts +1 -0
  39. package/dist/commands/docs/docs.command.spec.js +87 -0
  40. package/dist/commands/docs/docs.command.spec.js.map +1 -0
  41. package/dist/commands/drift/drift.command.spec.d.ts +1 -0
  42. package/dist/commands/drift/drift.command.spec.js +327 -0
  43. package/dist/commands/drift/drift.command.spec.js.map +1 -0
  44. package/dist/commands/gate/gate.command.d.ts +23 -0
  45. package/dist/commands/gate/gate.command.js +210 -0
  46. package/dist/commands/gate/gate.command.js.map +1 -0
  47. package/dist/commands/history/history.command.spec.d.ts +1 -0
  48. package/dist/commands/history/history.command.spec.js +392 -0
  49. package/dist/commands/history/history.command.spec.js.map +1 -0
  50. package/dist/commands/init/agents.command.spec.js +398 -0
  51. package/dist/commands/init/agents.command.spec.js.map +1 -1
  52. package/dist/commands/init/init.command.spec.d.ts +1 -0
  53. package/dist/commands/init/init.command.spec.js +272 -0
  54. package/dist/commands/init/init.command.spec.js.map +1 -0
  55. package/dist/commands/init/upgrade.command.spec.d.ts +1 -0
  56. package/dist/commands/init/upgrade.command.spec.js +378 -0
  57. package/dist/commands/init/upgrade.command.spec.js.map +1 -0
  58. package/dist/commands/mcp/mcp-serve.command.spec.d.ts +1 -0
  59. package/dist/commands/mcp/mcp-serve.command.spec.js +58 -0
  60. package/dist/commands/mcp/mcp-serve.command.spec.js.map +1 -0
  61. package/dist/commands/sdlc/gate-status.command.d.ts +3 -1
  62. package/dist/commands/sdlc/gate-status.command.js +78 -3
  63. package/dist/commands/sdlc/gate-status.command.js.map +1 -1
  64. package/dist/commands/sdlc/gate-status.command.spec.d.ts +1 -0
  65. package/dist/commands/sdlc/gate-status.command.spec.js +302 -0
  66. package/dist/commands/sdlc/gate-status.command.spec.js.map +1 -0
  67. package/dist/commands/sdlc/generate-domain.command.d.ts +2 -0
  68. package/dist/commands/sdlc/generate-domain.command.js +123 -12
  69. package/dist/commands/sdlc/generate-domain.command.js.map +1 -1
  70. package/dist/commands/sdlc/generate-domain.command.spec.d.ts +1 -0
  71. package/dist/commands/sdlc/generate-domain.command.spec.js +121 -0
  72. package/dist/commands/sdlc/generate-domain.command.spec.js.map +1 -0
  73. package/dist/commands/sdlc/handoff.command.js +2 -2
  74. package/dist/commands/sdlc/handoff.command.js.map +1 -1
  75. package/dist/commands/sdlc/handoff.command.spec.d.ts +1 -0
  76. package/dist/commands/sdlc/handoff.command.spec.js +395 -0
  77. package/dist/commands/sdlc/handoff.command.spec.js.map +1 -0
  78. package/dist/commands/sdlc/sdlc.command.js +40 -6
  79. package/dist/commands/sdlc/sdlc.command.js.map +1 -1
  80. package/dist/commands/sdlc/sdlc.command.spec.d.ts +1 -0
  81. package/dist/commands/sdlc/sdlc.command.spec.js +79 -0
  82. package/dist/commands/sdlc/sdlc.command.spec.js.map +1 -0
  83. package/dist/commands/standards/standards.command.spec.d.ts +1 -0
  84. package/dist/commands/standards/standards.command.spec.js +311 -0
  85. package/dist/commands/standards/standards.command.spec.js.map +1 -0
  86. package/dist/commands/validate/validate.command.d.ts +2 -0
  87. package/dist/commands/validate/validate.command.js +16 -2
  88. package/dist/commands/validate/validate.command.js.map +1 -1
  89. package/dist/commands/validate/validate.command.spec.d.ts +1 -0
  90. package/dist/commands/validate/validate.command.spec.js +368 -0
  91. package/dist/commands/validate/validate.command.spec.js.map +1 -0
  92. package/dist/core/abstractions/interfaces.d.ts +1 -0
  93. package/dist/core/abstractions/interfaces.js.map +1 -1
  94. package/dist/core/abstractions/providers/config-parser.provider.spec.d.ts +1 -0
  95. package/dist/core/abstractions/providers/config-parser.provider.spec.js +18 -0
  96. package/dist/core/abstractions/providers/config-parser.provider.spec.js.map +1 -0
  97. package/dist/core/abstractions/providers/logger.provider.spec.d.ts +1 -0
  98. package/dist/core/abstractions/providers/logger.provider.spec.js +212 -0
  99. package/dist/core/abstractions/providers/logger.provider.spec.js.map +1 -0
  100. package/dist/core/abstractions/providers/mock-filesystem.provider.d.ts +1 -0
  101. package/dist/core/abstractions/providers/mock-filesystem.provider.js +4 -0
  102. package/dist/core/abstractions/providers/mock-filesystem.provider.js.map +1 -1
  103. package/dist/core/abstractions/providers/mock-filesystem.provider.spec.d.ts +1 -0
  104. package/dist/core/abstractions/providers/mock-filesystem.provider.spec.js +56 -0
  105. package/dist/core/abstractions/providers/mock-filesystem.provider.spec.js.map +1 -0
  106. package/dist/core/abstractions/providers/node-filesystem.provider.d.ts +1 -0
  107. package/dist/core/abstractions/providers/node-filesystem.provider.js +4 -0
  108. package/dist/core/abstractions/providers/node-filesystem.provider.js.map +1 -1
  109. package/dist/core/architecture/nx-workspace.strategy.d.ts +3 -0
  110. package/dist/core/architecture/nx-workspace.strategy.js +35 -6
  111. package/dist/core/architecture/nx-workspace.strategy.js.map +1 -1
  112. package/dist/core/architecture/nx-workspace.strategy.spec.d.ts +1 -0
  113. package/dist/core/architecture/nx-workspace.strategy.spec.js +187 -0
  114. package/dist/core/architecture/nx-workspace.strategy.spec.js.map +1 -0
  115. package/dist/core/architecture/workspace-manager.strategy.d.ts +1 -0
  116. package/dist/core/di/container.spec.js +164 -0
  117. package/dist/core/di/container.spec.js.map +1 -1
  118. package/dist/core/generators/hexagonal-scaffolder.d.ts +6 -0
  119. package/dist/core/generators/hexagonal-scaffolder.js +260 -0
  120. package/dist/core/generators/hexagonal-scaffolder.js.map +1 -0
  121. package/dist/core/generators/hexagonal-scaffolder.spec.d.ts +1 -0
  122. package/dist/core/generators/hexagonal-scaffolder.spec.js +164 -0
  123. package/dist/core/generators/hexagonal-scaffolder.spec.js.map +1 -0
  124. package/dist/core/generators/mermaid-class-parser.d.ts +38 -0
  125. package/dist/core/generators/mermaid-class-parser.js +183 -0
  126. package/dist/core/generators/mermaid-class-parser.js.map +1 -0
  127. package/dist/core/generators/mermaid-class-parser.spec.d.ts +1 -0
  128. package/dist/core/generators/mermaid-class-parser.spec.js +148 -0
  129. package/dist/core/generators/mermaid-class-parser.spec.js.map +1 -0
  130. package/dist/core/mcp/metrics.service.spec.d.ts +1 -0
  131. package/dist/core/mcp/metrics.service.spec.js +159 -0
  132. package/dist/core/mcp/metrics.service.spec.js.map +1 -0
  133. package/dist/core/mcp/prompts/index.js +36 -0
  134. package/dist/core/mcp/prompts/index.js.map +1 -1
  135. package/dist/core/mcp/prompts/index.spec.d.ts +1 -0
  136. package/dist/core/mcp/prompts/index.spec.js +150 -0
  137. package/dist/core/mcp/prompts/index.spec.js.map +1 -0
  138. package/dist/core/mcp/resources/index.js +16 -0
  139. package/dist/core/mcp/resources/index.js.map +1 -1
  140. package/dist/core/mcp/resources/index.spec.d.ts +1 -0
  141. package/dist/core/mcp/resources/index.spec.js +212 -0
  142. package/dist/core/mcp/resources/index.spec.js.map +1 -0
  143. package/dist/core/mcp/server.d.ts +4 -1
  144. package/dist/core/mcp/server.js +250 -25
  145. package/dist/core/mcp/server.js.map +1 -1
  146. package/dist/core/mcp/server.spec.d.ts +1 -0
  147. package/dist/core/mcp/server.spec.js +579 -0
  148. package/dist/core/mcp/server.spec.js.map +1 -0
  149. package/dist/core/mcp/tools/agent.spec.d.ts +1 -0
  150. package/dist/core/mcp/tools/agent.spec.js +171 -0
  151. package/dist/core/mcp/tools/agent.spec.js.map +1 -0
  152. package/dist/core/mcp/tools/architecture.d.ts +2 -0
  153. package/dist/core/mcp/tools/architecture.js +68 -0
  154. package/dist/core/mcp/tools/architecture.js.map +1 -1
  155. package/dist/core/mcp/tools/architecture.spec.d.ts +1 -0
  156. package/dist/core/mcp/tools/architecture.spec.js +145 -0
  157. package/dist/core/mcp/tools/architecture.spec.js.map +1 -0
  158. package/dist/core/mcp/tools/gate.d.ts +1 -0
  159. package/dist/core/mcp/tools/gate.js +68 -0
  160. package/dist/core/mcp/tools/gate.js.map +1 -0
  161. package/dist/core/mcp/tools/moscow.d.ts +30 -0
  162. package/dist/core/mcp/tools/moscow.js +113 -0
  163. package/dist/core/mcp/tools/moscow.js.map +1 -0
  164. package/dist/core/mcp/tools/moscow.spec.d.ts +1 -0
  165. package/dist/core/mcp/tools/moscow.spec.js +209 -0
  166. package/dist/core/mcp/tools/moscow.spec.js.map +1 -0
  167. package/dist/core/mcp/tools/sdlc.js +2 -1
  168. package/dist/core/mcp/tools/sdlc.js.map +1 -1
  169. package/dist/core/mcp/tools/sdlc.spec.d.ts +1 -0
  170. package/dist/core/mcp/tools/sdlc.spec.js +170 -0
  171. package/dist/core/mcp/tools/sdlc.spec.js.map +1 -0
  172. package/dist/core/mcp/tools/validate.spec.d.ts +1 -0
  173. package/dist/core/mcp/tools/validate.spec.js +130 -0
  174. package/dist/core/mcp/tools/validate.spec.js.map +1 -0
  175. package/dist/core/mcp/watcher.service.spec.js +109 -8
  176. package/dist/core/mcp/watcher.service.spec.js.map +1 -1
  177. package/dist/core/metrics/dora-calculator.d.ts +18 -0
  178. package/dist/core/metrics/dora-calculator.js +146 -0
  179. package/dist/core/metrics/dora-calculator.js.map +1 -0
  180. package/dist/core/metrics/dora-calculator.spec.d.ts +1 -0
  181. package/dist/core/metrics/dora-calculator.spec.js +164 -0
  182. package/dist/core/metrics/dora-calculator.spec.js.map +1 -0
  183. package/dist/core/metrics/git-log-reader.d.ts +14 -0
  184. package/dist/core/metrics/git-log-reader.js +39 -0
  185. package/dist/core/metrics/git-log-reader.js.map +1 -0
  186. package/dist/core/metrics/git-log-reader.spec.d.ts +1 -0
  187. package/dist/core/metrics/git-log-reader.spec.js +108 -0
  188. package/dist/core/metrics/git-log-reader.spec.js.map +1 -0
  189. package/dist/core/observability/command-watcher.spec.d.ts +1 -0
  190. package/dist/core/observability/command-watcher.spec.js +123 -0
  191. package/dist/core/observability/command-watcher.spec.js.map +1 -0
  192. package/dist/core/observability/error-reporter.spec.d.ts +1 -0
  193. package/dist/core/observability/error-reporter.spec.js +291 -0
  194. package/dist/core/observability/error-reporter.spec.js.map +1 -0
  195. package/dist/core/observability/index.d.ts +1 -0
  196. package/dist/core/observability/index.js +3 -1
  197. package/dist/core/observability/index.js.map +1 -1
  198. package/dist/core/observability/structured-logger.spec.d.ts +1 -0
  199. package/dist/core/observability/structured-logger.spec.js +197 -0
  200. package/dist/core/observability/structured-logger.spec.js.map +1 -0
  201. package/dist/core/observability/timing.spec.d.ts +1 -0
  202. package/dist/core/observability/timing.spec.js +216 -0
  203. package/dist/core/observability/timing.spec.js.map +1 -0
  204. package/dist/core/observability/tool-usage-telemetry.service.d.ts +46 -0
  205. package/dist/core/observability/tool-usage-telemetry.service.js +181 -0
  206. package/dist/core/observability/tool-usage-telemetry.service.js.map +1 -0
  207. package/dist/core/services/command-history.service.d.ts +1 -0
  208. package/dist/core/services/command-history.service.js +4 -0
  209. package/dist/core/services/command-history.service.js.map +1 -1
  210. package/dist/core/services/command-history.service.spec.js +217 -126
  211. package/dist/core/services/command-history.service.spec.js.map +1 -1
  212. package/dist/core/upgrade/satellite-upgrade.service.spec.js +212 -132
  213. package/dist/core/upgrade/satellite-upgrade.service.spec.js.map +1 -1
  214. package/dist/core/validators/deep-architecture-analyzer.d.ts +58 -0
  215. package/dist/core/validators/deep-architecture-analyzer.js +333 -0
  216. package/dist/core/validators/deep-architecture-analyzer.js.map +1 -0
  217. package/dist/core/validators/deep-architecture-analyzer.spec.d.ts +1 -0
  218. package/dist/core/validators/deep-architecture-analyzer.spec.js +186 -0
  219. package/dist/core/validators/deep-architecture-analyzer.spec.js.map +1 -0
  220. package/dist/core/validators/evaluators/evaluator.interface.d.ts +14 -0
  221. package/dist/core/validators/evaluators/evaluator.interface.js +3 -0
  222. package/dist/core/validators/evaluators/evaluator.interface.js.map +1 -0
  223. package/dist/core/validators/evaluators/native-evaluator.d.ts +31 -0
  224. package/dist/core/validators/evaluators/native-evaluator.js +461 -0
  225. package/dist/core/validators/evaluators/native-evaluator.js.map +1 -0
  226. package/dist/core/validators/evaluators/opa-evaluator.d.ts +20 -0
  227. package/dist/core/validators/evaluators/opa-evaluator.js +249 -0
  228. package/dist/core/validators/evaluators/opa-evaluator.js.map +1 -0
  229. package/dist/core/validators/phase-gate-validator.service.d.ts +4 -0
  230. package/dist/core/validators/phase-gate-validator.service.js +76 -9
  231. package/dist/core/validators/phase-gate-validator.service.js.map +1 -1
  232. package/dist/core/validators/rule-evaluation-engine.d.ts +34 -0
  233. package/dist/core/validators/rule-evaluation-engine.js +187 -0
  234. package/dist/core/validators/rule-evaluation-engine.js.map +1 -0
  235. package/dist/core/validators/rule-evaluation-engine.spec.d.ts +1 -0
  236. package/dist/core/validators/rule-evaluation-engine.spec.js +243 -0
  237. package/dist/core/validators/rule-evaluation-engine.spec.js.map +1 -0
  238. package/dist/core/validators/ruleset-validator-architecture.spec.js +2 -2
  239. package/dist/core/validators/ruleset-validator-architecture.spec.js.map +1 -1
  240. package/dist/core/validators/ruleset-validator.service.d.ts +2 -0
  241. package/dist/core/validators/ruleset-validator.service.js +36 -11
  242. package/dist/core/validators/ruleset-validator.service.js.map +1 -1
  243. package/dist/core/validators/ruleset-validator.service.spec.js +347 -0
  244. package/dist/core/validators/ruleset-validator.service.spec.js.map +1 -1
  245. package/dist/domain/gate-evidence.d.ts +59 -0
  246. package/dist/domain/gate-evidence.js +38 -0
  247. package/dist/domain/gate-evidence.js.map +1 -0
  248. package/dist/domain/services/adr.service.d.ts +2 -2
  249. package/dist/domain/services/adr.service.js +12 -8
  250. package/dist/domain/services/adr.service.js.map +1 -1
  251. package/dist/domain/services/index.d.ts +1 -0
  252. package/dist/domain/services/index.js +3 -1
  253. package/dist/domain/services/index.js.map +1 -1
  254. package/dist/domain/services/moscow-prioritization.service.d.ts +44 -0
  255. package/dist/domain/services/moscow-prioritization.service.js +213 -0
  256. package/dist/domain/services/moscow-prioritization.service.js.map +1 -0
  257. package/dist/domain/services/moscow-prioritization.service.spec.d.ts +1 -0
  258. package/dist/domain/services/moscow-prioritization.service.spec.js +285 -0
  259. package/dist/domain/services/moscow-prioritization.service.spec.js.map +1 -0
  260. package/dist/domain/services/standards.service.spec.js +461 -1
  261. package/dist/domain/services/standards.service.spec.js.map +1 -1
  262. package/dist/infrastructure/adapters/webhook.adapter.d.ts +5 -0
  263. package/dist/infrastructure/adapters/webhook.adapter.js +19 -0
  264. package/dist/infrastructure/adapters/webhook.adapter.js.map +1 -0
  265. package/dist/infrastructure/cli/command-executor.spec.d.ts +1 -0
  266. package/dist/infrastructure/cli/command-executor.spec.js +149 -0
  267. package/dist/infrastructure/cli/command-executor.spec.js.map +1 -0
  268. package/dist/infrastructure/cli/providers/providers.spec.d.ts +1 -0
  269. package/dist/infrastructure/cli/providers/providers.spec.js +251 -0
  270. package/dist/infrastructure/cli/providers/providers.spec.js.map +1 -0
  271. package/package.json +23 -5
@@ -36,6 +36,29 @@ describe('DIContainer', () => {
36
36
  it('should throw when resolving unregistered service', () => {
37
37
  expect(() => container.resolve('non-existent')).toThrow('Service not registered');
38
38
  });
39
+ it('should register instance with symbol identifier', () => {
40
+ const symbolId = Symbol('test');
41
+ const instance = { data: 'symbol-test' };
42
+ container.registerInstance(symbolId, instance);
43
+ expect(container.resolve(symbolId)).toBe(instance);
44
+ });
45
+ it('should register instance with class identifier', () => {
46
+ class TestService {
47
+ constructor() {
48
+ this.name = 'test';
49
+ }
50
+ }
51
+ const instance = new TestService();
52
+ container.registerInstance(TestService, instance);
53
+ expect(container.resolve(TestService)).toBe(instance);
54
+ });
55
+ it('should overwrite existing registration', () => {
56
+ const instance1 = { value: 1 };
57
+ const instance2 = { value: 2 };
58
+ container.registerInstance('overwrite-test', instance1);
59
+ container.registerInstance('overwrite-test', instance2);
60
+ expect(container.resolve('overwrite-test')).toBe(instance2);
61
+ });
39
62
  });
40
63
  describe('registerSingleton', () => {
41
64
  it('should create singleton via factory', () => {
@@ -49,6 +72,14 @@ describe('DIContainer', () => {
49
72
  expect(instance1).toBe(instance2);
50
73
  expect(callCount).toBe(1);
51
74
  });
75
+ it('should cache singleton instance after first resolution', () => {
76
+ const factory = jest.fn().mockReturnValue({ id: 1 });
77
+ container.registerSingleton('cached', factory);
78
+ container.resolve('cached');
79
+ container.resolve('cached');
80
+ container.resolve('cached');
81
+ expect(factory).toHaveBeenCalledTimes(1);
82
+ });
52
83
  });
53
84
  describe('registerTransient', () => {
54
85
  it('should create new instance each time', () => {
@@ -65,12 +96,37 @@ describe('DIContainer', () => {
65
96
  expect(callCount).toBe(2);
66
97
  });
67
98
  });
99
+ describe('resolve', () => {
100
+ it('should throw when registration has no instance or factory', () => {
101
+ container.registrations.set('broken', { scope: 'singleton' });
102
+ expect(() => container.resolve('broken')).toThrow('Cannot resolve service');
103
+ });
104
+ it('should resolve singleton with factory on first call', () => {
105
+ const instance = { name: 'factory-singleton' };
106
+ container.registerSingleton('factory-singleton', () => instance);
107
+ const resolved = container.resolve('factory-singleton');
108
+ expect(resolved).toBe(instance);
109
+ });
110
+ it('should resolve transient with factory each call', () => {
111
+ container.registerTransient('factory-transient', () => ({ name: 'transient' }));
112
+ const resolved1 = container.resolve('factory-transient');
113
+ const resolved2 = container.resolve('factory-transient');
114
+ expect(resolved1).toEqual(resolved2);
115
+ expect(resolved1).not.toBe(resolved2);
116
+ });
117
+ });
68
118
  describe('createLogger', () => {
69
119
  it('should create logger via provider', () => {
70
120
  const logger = container.createLogger('TestContext');
71
121
  expect(logger).toBeDefined();
72
122
  expect(typeof logger.info).toBe('function');
73
123
  });
124
+ it('should create different loggers for different contexts', () => {
125
+ const logger1 = container.createLogger('Context1');
126
+ const logger2 = container.createLogger('Context2');
127
+ expect(logger1).toBeDefined();
128
+ expect(logger2).toBeDefined();
129
+ });
74
130
  });
75
131
  describe('createFileSystem', () => {
76
132
  it('should create file system via provider', () => {
@@ -90,6 +146,21 @@ describe('DIContainer', () => {
90
146
  expect(parser).toBeDefined();
91
147
  expect(typeof parser.parse).toBe('function');
92
148
  });
149
+ it('should default to yaml when no format specified', () => {
150
+ const parser = container.createConfigParser();
151
+ expect(parser).toBeDefined();
152
+ });
153
+ it('should use config parser provider cache', () => {
154
+ const mockProvider = {
155
+ createConfigParser: jest.fn().mockReturnValue({
156
+ parse: jest.fn(),
157
+ stringify: jest.fn(),
158
+ }),
159
+ };
160
+ container.setConfigParserProvider('yaml', mockProvider);
161
+ container.createConfigParser('yaml');
162
+ expect(mockProvider.createConfigParser).toHaveBeenCalledWith('yaml');
163
+ });
93
164
  });
94
165
  describe('setLoggerProvider', () => {
95
166
  it('should replace logger provider', () => {
@@ -100,6 +171,20 @@ describe('DIContainer', () => {
100
171
  const logger = container.createLogger('new-context');
101
172
  expect(logger).toBeDefined();
102
173
  });
174
+ it('should use new provider for subsequent logger creation', () => {
175
+ const createLoggerFn = jest.fn().mockReturnValue({
176
+ info: jest.fn(),
177
+ warn: jest.fn(),
178
+ error: jest.fn(),
179
+ debug: jest.fn(),
180
+ });
181
+ const mockProvider = {
182
+ createLogger: createLoggerFn,
183
+ };
184
+ container.setLoggerProvider(mockProvider);
185
+ container.createLogger('test');
186
+ expect(createLoggerFn).toHaveBeenCalledWith('test');
187
+ });
103
188
  });
104
189
  describe('setFileSystemProvider', () => {
105
190
  it('should replace file system provider', () => {
@@ -110,6 +195,63 @@ describe('DIContainer', () => {
110
195
  const fs = container.createFileSystem();
111
196
  expect(fs).toBeDefined();
112
197
  });
198
+ it('should use new provider for subsequent file system creation', () => {
199
+ const mockFs = createMockFileSystem();
200
+ const createFileSystemFn = jest.fn().mockReturnValue(mockFs);
201
+ const mockProvider = {
202
+ createFileSystem: createFileSystemFn,
203
+ };
204
+ container.setFileSystemProvider(mockProvider);
205
+ const fs = container.createFileSystem();
206
+ expect(createFileSystemFn).toHaveBeenCalled();
207
+ expect(fs).toBe(mockFs);
208
+ });
209
+ });
210
+ describe('setConfigParserProvider', () => {
211
+ it('should register config parser provider', () => {
212
+ const mockProvider = {
213
+ createConfigParser: jest.fn().mockReturnValue({
214
+ parse: jest.fn(),
215
+ stringify: jest.fn(),
216
+ }),
217
+ };
218
+ container.setConfigParserProvider('json', mockProvider);
219
+ const parser = container.createConfigParser('json');
220
+ expect(parser).toBeDefined();
221
+ });
222
+ it('should register provider for both cache and resolution', () => {
223
+ const mockProvider = {
224
+ createConfigParser: jest.fn().mockReturnValue({
225
+ parse: jest.fn(),
226
+ stringify: jest.fn(),
227
+ }),
228
+ };
229
+ container.setConfigParserProvider('yaml', mockProvider);
230
+ const resolved = container.resolve('yaml');
231
+ expect(resolved).toBe(mockProvider);
232
+ });
233
+ });
234
+ describe('default providers', () => {
235
+ it('should have ILoggerProvider registered by default', () => {
236
+ const provider = container.resolve('ILoggerProvider');
237
+ expect(provider).toBeDefined();
238
+ expect(typeof provider.createLogger).toBe('function');
239
+ });
240
+ it('should have IFileSystemProvider registered by default', () => {
241
+ const provider = container.resolve('IFileSystemProvider');
242
+ expect(provider).toBeDefined();
243
+ expect(typeof provider.createFileSystem).toBe('function');
244
+ });
245
+ it('should have yaml config parser registered by default', () => {
246
+ const provider = container.resolve('yaml');
247
+ expect(provider).toBeDefined();
248
+ expect(typeof provider.createConfigParser).toBe('function');
249
+ });
250
+ it('should have json config parser registered by default', () => {
251
+ const provider = container.resolve('json');
252
+ expect(provider).toBeDefined();
253
+ expect(typeof provider.createConfigParser).toBe('function');
254
+ });
113
255
  });
114
256
  describe('global container', () => {
115
257
  it('should return same instance with getContainer', () => {
@@ -123,6 +265,12 @@ describe('DIContainer', () => {
123
265
  const container2 = (0, container_1.getContainer)();
124
266
  expect(container1).not.toBe(container2);
125
267
  });
268
+ it('should create new container after reset', () => {
269
+ const container1 = (0, container_1.getContainer)();
270
+ (0, container_1.resetContainer)();
271
+ const container2 = (0, container_1.getContainer)();
272
+ expect(container2).toBeInstanceOf(container_1.DIContainer);
273
+ });
126
274
  });
127
275
  describe('createChildContainer', () => {
128
276
  it('should inherit providers from parent', () => {
@@ -132,6 +280,22 @@ describe('DIContainer', () => {
132
280
  const logger = child.createLogger('child');
133
281
  expect(logger).toBeDefined();
134
282
  });
283
+ it('should create independent child container', () => {
284
+ const parent = (0, container_1.getContainer)();
285
+ const child = (0, container_1.createChildContainer)();
286
+ expect(child).not.toBe(parent);
287
+ });
288
+ it('should inherit file system provider', () => {
289
+ const child = (0, container_1.createChildContainer)();
290
+ const fs = child.createFileSystem();
291
+ expect(fs).toBeDefined();
292
+ });
293
+ it('should have default providers initialized', () => {
294
+ const child = (0, container_1.createChildContainer)();
295
+ expect(() => child.createLogger('test')).not.toThrow();
296
+ expect(() => child.createFileSystem()).not.toThrow();
297
+ expect(() => child.createConfigParser('yaml')).not.toThrow();
298
+ });
135
299
  });
136
300
  });
137
301
  //# sourceMappingURL=container.spec.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"container.spec.js","sourceRoot":"","sources":["../../../src/core/di/container.spec.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"container.spec.js","sourceRoot":"","sources":["../../../src/core/di/container.spec.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,6 @@
1
+ import type { ClassDiagram } from './mermaid-class-parser';
2
+ export interface ScaffoldResult {
3
+ created: string[];
4
+ skipped: string[];
5
+ }
6
+ export declare function scaffoldHexagonal(diagram: ClassDiagram, targetDir: string, dryRun?: boolean): Promise<ScaffoldResult>;
@@ -0,0 +1,260 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || (function () {
19
+ var ownKeys = function(o) {
20
+ ownKeys = Object.getOwnPropertyNames || function (o) {
21
+ var ar = [];
22
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
+ return ar;
24
+ };
25
+ return ownKeys(o);
26
+ };
27
+ return function (mod) {
28
+ if (mod && mod.__esModule) return mod;
29
+ var result = {};
30
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
+ __setModuleDefault(result, mod);
32
+ return result;
33
+ };
34
+ })();
35
+ Object.defineProperty(exports, "__esModule", { value: true });
36
+ exports.scaffoldHexagonal = scaffoldHexagonal;
37
+ const path = __importStar(require("path"));
38
+ const fs = __importStar(require("fs-extra"));
39
+ function indent(n, s) {
40
+ const pad = ' '.repeat(n);
41
+ return s
42
+ .split('\n')
43
+ .map(l => (l.trim() ? pad + l : l))
44
+ .join('\n');
45
+ }
46
+ function renderParams(params) {
47
+ return params.map(p => `${p.name}: ${p.type}`).join(', ');
48
+ }
49
+ function renderMethodStub(m, isAsync = false) {
50
+ const sig = `${m.name}(${renderParams(m.params)}): ${isAsync ? `Promise<${m.returnType}>` : m.returnType}`;
51
+ return [
52
+ `${m.visibility === 'public' ? '' : m.visibility + ' '}${isAsync ? 'async ' : ''}${sig} {`,
53
+ ` throw new Error('Not implemented: ${m.name}');`,
54
+ `}`,
55
+ ].join('\n');
56
+ }
57
+ function renderConstructorParam(p) {
58
+ const access = p.visibility === 'public' ? 'public readonly ' : 'private ';
59
+ return `${access}${p.name}: ${p.type}`;
60
+ }
61
+ function generateEntity(cls) {
62
+ const ctorParams = cls.properties.map(renderConstructorParam).join(',\n ');
63
+ const methods = cls.methods
64
+ .map(m => indent(1, renderMethodStub(m)))
65
+ .join('\n\n');
66
+ return [
67
+ `/**`,
68
+ ` * ${cls.name} — Domain Entity`,
69
+ ` * Generated by: evolith sdlc generate`,
70
+ ` * Stereotype: ${cls.stereotype}`,
71
+ ` */`,
72
+ `export class ${cls.name} {`,
73
+ ctorParams
74
+ ? ` constructor(\n ${ctorParams},\n ) {}`
75
+ : ` constructor() {}`,
76
+ methods ? `\n${methods}` : '',
77
+ `}`,
78
+ ``,
79
+ ].filter(l => l !== undefined).join('\n');
80
+ }
81
+ function generateValueObject(cls) {
82
+ const ctorParams = cls.properties.map(renderConstructorParam).join(',\n ');
83
+ const methods = cls.methods
84
+ .filter(m => m.name !== 'validate')
85
+ .map(m => indent(1, renderMethodStub(m)))
86
+ .join('\n\n');
87
+ return [
88
+ `/**`,
89
+ ` * ${cls.name} — Value Object`,
90
+ ` * Generated by: evolith sdlc generate`,
91
+ ` */`,
92
+ `export class ${cls.name} {`,
93
+ ctorParams
94
+ ? ` constructor(\n ${ctorParams},\n ) {\n this.validate();\n }`
95
+ : ` constructor() {\n this.validate();\n }`,
96
+ ``,
97
+ ` private validate(): void {`,
98
+ ` // TODO: add validation rules for ${cls.name}`,
99
+ ` }`,
100
+ methods ? `\n${methods}` : '',
101
+ `}`,
102
+ ``,
103
+ ].join('\n');
104
+ }
105
+ function generateAggregate(cls) {
106
+ const ctorParams = cls.properties.map(renderConstructorParam).join(',\n ');
107
+ const methods = cls.methods
108
+ .map(m => indent(1, renderMethodStub(m)))
109
+ .join('\n\n');
110
+ return [
111
+ `/**`,
112
+ ` * ${cls.name} — Aggregate Root`,
113
+ ` * Generated by: evolith sdlc generate`,
114
+ ` */`,
115
+ `export class ${cls.name} {`,
116
+ ` private readonly _domainEvents: unknown[] = [];`,
117
+ ``,
118
+ ctorParams
119
+ ? ` constructor(\n ${ctorParams},\n ) {}`
120
+ : ` constructor() {}`,
121
+ ``,
122
+ ` get domainEvents(): unknown[] {`,
123
+ ` return [...this._domainEvents];`,
124
+ ` }`,
125
+ ``,
126
+ ` protected addDomainEvent(event: unknown): void {`,
127
+ ` this._domainEvents.push(event);`,
128
+ ` }`,
129
+ methods ? `\n${methods}` : '',
130
+ `}`,
131
+ ``,
132
+ ].join('\n');
133
+ }
134
+ function generateRepositoryInterface(cls, entityName) {
135
+ const methodSigs = cls.methods.map(m => {
136
+ const sig = `${m.name}(${renderParams(m.params)}): Promise<${m.returnType === 'void' ? 'void' : m.returnType}>`;
137
+ return ` ${sig};`;
138
+ });
139
+ const hasFindById = cls.methods.some(m => m.name === 'findById');
140
+ const hasSave = cls.methods.some(m => m.name === 'save');
141
+ if (!hasFindById)
142
+ methodSigs.unshift(` findById(id: string): Promise<${entityName} | null>;`);
143
+ if (!hasSave)
144
+ methodSigs.push(` save(entity: ${entityName}): Promise<void>;`);
145
+ return [
146
+ `/**`,
147
+ ` * I${cls.name} — Repository Interface`,
148
+ ` * Generated by: evolith sdlc generate`,
149
+ ` */`,
150
+ `import type { ${entityName} } from '../entities/${entityName}';`,
151
+ ``,
152
+ `export interface I${cls.name} {`,
153
+ ...methodSigs,
154
+ `}`,
155
+ ``,
156
+ ].join('\n');
157
+ }
158
+ function generateRepositoryImpl(cls, entityName) {
159
+ const methods = [
160
+ ` async findById(id: string): Promise<${entityName} | null> {`,
161
+ ` // TODO: implement persistence`,
162
+ ` throw new Error('Not implemented: findById');`,
163
+ ` }`,
164
+ ``,
165
+ ` async save(entity: ${entityName}): Promise<void> {`,
166
+ ` // TODO: implement persistence`,
167
+ ` throw new Error('Not implemented: save');`,
168
+ ` }`,
169
+ ];
170
+ cls.methods.forEach(m => {
171
+ if (m.name === 'findById' || m.name === 'save')
172
+ return;
173
+ methods.push('');
174
+ methods.push(` async ${m.name}(${renderParams(m.params)}): Promise<${m.returnType === 'void' ? 'void' : m.returnType}> {`);
175
+ methods.push(` throw new Error('Not implemented: ${m.name}');`);
176
+ methods.push(` }`);
177
+ });
178
+ return [
179
+ `/**`,
180
+ ` * ${cls.name} — Repository Implementation (stub)`,
181
+ ` * Generated by: evolith sdlc generate`,
182
+ ` * Replace with real persistence logic (TypeORM, Prisma, etc.)`,
183
+ ` */`,
184
+ `import type { ${entityName} } from '../../domain/entities/${entityName}';`,
185
+ `import type { I${cls.name} } from '../../domain/repositories/I${cls.name}';`,
186
+ ``,
187
+ `export class ${cls.name} implements I${cls.name} {`,
188
+ ...methods,
189
+ `}`,
190
+ ``,
191
+ ].join('\n');
192
+ }
193
+ function generateService(cls) {
194
+ const methods = cls.methods
195
+ .map(m => indent(1, renderMethodStub(m, true)))
196
+ .join('\n\n');
197
+ return [
198
+ `/**`,
199
+ ` * ${cls.name} — Domain Service`,
200
+ ` * Generated by: evolith sdlc generate`,
201
+ ` */`,
202
+ `export class ${cls.name} {`,
203
+ methods || ` // TODO: implement domain service methods`,
204
+ `}`,
205
+ ``,
206
+ ].join('\n');
207
+ }
208
+ function resolveEntityNameForRepo(cls, diagram) {
209
+ const rel = diagram.relationships.find(r => r.from === cls.name || r.to === cls.name);
210
+ if (rel) {
211
+ const other = rel.from === cls.name ? rel.to : rel.from;
212
+ const otherCls = diagram.classes.find(c => c.name === other);
213
+ if (otherCls && (otherCls.stereotype === 'Entity' || otherCls.stereotype === 'Aggregate')) {
214
+ return otherCls.name;
215
+ }
216
+ }
217
+ return cls.name.replace(/Repository$/i, '') || cls.name;
218
+ }
219
+ async function scaffoldHexagonal(diagram, targetDir, dryRun = false) {
220
+ const created = [];
221
+ const skipped = [];
222
+ async function write(relPath, content) {
223
+ const abs = path.join(targetDir, relPath);
224
+ if (await fs.pathExists(abs)) {
225
+ skipped.push(relPath);
226
+ return;
227
+ }
228
+ if (!dryRun) {
229
+ await fs.ensureDir(path.dirname(abs));
230
+ await fs.writeFile(abs, content, 'utf-8');
231
+ }
232
+ created.push(relPath);
233
+ }
234
+ for (const cls of diagram.classes) {
235
+ switch (cls.stereotype) {
236
+ case 'Entity':
237
+ await write(`src/domain/entities/${cls.name}.ts`, generateEntity(cls));
238
+ break;
239
+ case 'Aggregate':
240
+ await write(`src/domain/entities/${cls.name}.ts`, generateAggregate(cls));
241
+ break;
242
+ case 'ValueObject':
243
+ await write(`src/domain/value-objects/${cls.name}.ts`, generateValueObject(cls));
244
+ break;
245
+ case 'Repository': {
246
+ const entityName = resolveEntityNameForRepo(cls, diagram);
247
+ await write(`src/domain/repositories/I${cls.name}.ts`, generateRepositoryInterface(cls, entityName));
248
+ await write(`src/infrastructure/persistence/${cls.name}.ts`, generateRepositoryImpl(cls, entityName));
249
+ break;
250
+ }
251
+ case 'Service':
252
+ await write(`src/domain/services/${cls.name}.ts`, generateService(cls));
253
+ break;
254
+ default:
255
+ await write(`src/domain/entities/${cls.name}.ts`, generateEntity(cls));
256
+ }
257
+ }
258
+ return { created, skipped };
259
+ }
260
+ //# sourceMappingURL=hexagonal-scaffolder.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"hexagonal-scaffolder.js","sourceRoot":"","sources":["../../../src/core/generators/hexagonal-scaffolder.ts"],"names":[],"mappings":"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"}