eva4j 1.0.16 → 1.0.18

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 (151) hide show
  1. package/AGENTS.md +220 -5
  2. package/DOMAIN_YAML_GUIDE.md +188 -3
  3. package/FUTURE_FEATURES.md +33 -52
  4. package/QUICK_REFERENCE.md +8 -4
  5. package/bin/eva4j.js +70 -2
  6. package/config/defaults.json +1 -0
  7. package/docs/CAMUNDA_DMN_GUIDE.md +1380 -0
  8. package/docs/KAFKA_PRODUCTION_CONFIG.md +441 -0
  9. package/docs/RABBITMQ_PRODUCTION_CONFIG.md +227 -0
  10. package/docs/commands/ADD_RABBITMQ_CLIENT.md +192 -0
  11. package/docs/commands/EVALUATE_SYSTEM.md +290 -10
  12. package/docs/commands/GENERATE_RABBITMQ_EVENT.md +341 -0
  13. package/docs/commands/GENERATE_RABBITMQ_LISTENER.md +595 -0
  14. package/docs/commands/GENERATE_TEMPORAL_FLOW.md +52 -12
  15. package/docs/commands/INDEX.md +27 -3
  16. package/docs/prototype/TEMPORAL_COMMUNICATION_PATTERNS.md +731 -0
  17. package/docs/prototype/TEMPORAL_DESIGN_METHODOLOGY.md +740 -0
  18. package/docs/prototype/system/RISKS.md +277 -0
  19. package/docs/prototype/system/customers.yaml +133 -0
  20. package/docs/prototype/system/inventory.yaml +109 -0
  21. package/docs/prototype/system/notifications.yaml +131 -0
  22. package/docs/prototype/system/orders.yaml +241 -0
  23. package/docs/prototype/system/payments.yaml +256 -0
  24. package/docs/prototype/system/products.yaml +168 -0
  25. package/docs/prototype/system/system.yaml +269 -0
  26. package/examples/domain-endpoints-multi-aggregate.yaml +140 -0
  27. package/examples/domain-events.yaml +26 -0
  28. package/examples/domain-read-models.yaml +113 -0
  29. package/examples/system/customer.yaml +89 -0
  30. package/examples/system/orders.yaml +119 -0
  31. package/examples/system/product.yaml +27 -0
  32. package/examples/system/system.yaml +80 -0
  33. package/package.json +1 -1
  34. package/read-model-spec.md +664 -0
  35. package/src/agents/design-gap-analyst-temporal.agent.md +452 -0
  36. package/src/agents/design-gap-analyst.agent.md +383 -0
  37. package/src/agents/design-reviewer-temporal.agent.md +412 -0
  38. package/src/agents/design-reviewer.agent.md +34 -5
  39. package/src/agents/implement-use-cases.prompt.md +179 -0
  40. package/src/agents/ux-gap-analyst.agent.md +412 -0
  41. package/src/commands/add-rabbitmq-client.js +261 -0
  42. package/src/commands/add-temporal-client.js +22 -2
  43. package/src/commands/build.js +267 -11
  44. package/src/commands/evaluate-system.js +700 -13
  45. package/src/commands/generate-entities.js +560 -24
  46. package/src/commands/generate-http-exchange.js +3 -0
  47. package/src/commands/generate-kafka-event.js +3 -0
  48. package/src/commands/generate-kafka-listener.js +3 -0
  49. package/src/commands/generate-rabbitmq-event.js +665 -0
  50. package/src/commands/generate-rabbitmq-listener.js +205 -0
  51. package/src/commands/generate-record.js +2 -2
  52. package/src/commands/generate-resource.js +4 -1
  53. package/src/commands/generate-temporal-activity.js +970 -33
  54. package/src/commands/generate-temporal-flow.js +98 -38
  55. package/src/commands/generate-temporal-system.js +708 -0
  56. package/src/commands/generate-usecase.js +4 -1
  57. package/src/skills/build-system-yaml/SKILL.md +343 -2
  58. package/src/skills/build-system-yaml/references/domain-yaml-spec.md +253 -26
  59. package/src/skills/build-system-yaml/references/module-spec.md +90 -9
  60. package/src/skills/build-system-yaml/references/system-yaml-spec.md +36 -0
  61. package/src/skills/build-temporal-system/SKILL.md +752 -0
  62. package/src/skills/build-temporal-system/references/temporal-communication-patterns.md +167 -0
  63. package/src/skills/build-temporal-system/references/temporal-domain-yaml-spec.md +449 -0
  64. package/src/skills/build-temporal-system/references/temporal-module-spec.md +353 -0
  65. package/src/skills/build-temporal-system/references/temporal-system-yaml-spec.md +326 -0
  66. package/src/skills/implement-use-case/SKILL.md +350 -0
  67. package/src/skills/implement-use-case/references/use-case-patterns.md +980 -0
  68. package/src/skills/requirements-elicitation/SKILL.md +228 -0
  69. package/src/skills/requirements-elicitation/references/interview-framework.md +260 -0
  70. package/src/skills/requirements-elicitation/references/output-templates.md +368 -0
  71. package/src/utils/bounded-context-diagram.js +844 -0
  72. package/src/utils/config-manager.js +4 -2
  73. package/src/utils/domain-validator.js +495 -17
  74. package/src/utils/naming.js +20 -0
  75. package/src/utils/system-validator.js +169 -11
  76. package/src/utils/system-yaml-parser.js +318 -0
  77. package/src/utils/temporal-validator.js +497 -0
  78. package/src/utils/validator.js +3 -1
  79. package/src/utils/yaml-to-entity.js +281 -9
  80. package/templates/aggregate/AggregateRepository.java.ejs +4 -0
  81. package/templates/aggregate/AggregateRepositoryImpl.java.ejs +8 -0
  82. package/templates/aggregate/AggregateRoot.java.ejs +38 -4
  83. package/templates/aggregate/DomainEventHandler.java.ejs +116 -22
  84. package/templates/aggregate/JpaAggregateRoot.java.ejs +4 -4
  85. package/templates/aggregate/JpaEntity.java.ejs +2 -2
  86. package/templates/base/docker/rabbitmq-services.yaml.ejs +12 -0
  87. package/templates/base/resources/parameters/develop/kafka.yaml.ejs +5 -0
  88. package/templates/base/resources/parameters/develop/rabbitmq.yaml.ejs +15 -0
  89. package/templates/base/resources/parameters/develop/temporal.yaml.ejs +0 -3
  90. package/templates/base/resources/parameters/local/kafka.yaml.ejs +5 -0
  91. package/templates/base/resources/parameters/local/rabbitmq.yaml.ejs +15 -0
  92. package/templates/base/resources/parameters/local/temporal.yaml.ejs +0 -3
  93. package/templates/base/resources/parameters/production/kafka.yaml.ejs +39 -8
  94. package/templates/base/resources/parameters/production/rabbitmq.yaml.ejs +32 -0
  95. package/templates/base/resources/parameters/production/temporal.yaml.ejs +0 -3
  96. package/templates/base/resources/parameters/test/kafka.yaml.ejs +12 -6
  97. package/templates/base/resources/parameters/test/rabbitmq.yaml.ejs +15 -0
  98. package/templates/base/resources/parameters/test/temporal.yaml.ejs +0 -3
  99. package/templates/base/root/AGENTS.md.ejs +1 -1
  100. package/templates/crud/DeleteCommandHandler.java.ejs +19 -1
  101. package/templates/crud/EndpointsController.java.ejs +1 -1
  102. package/templates/crud/ScaffoldCommand.java.ejs +5 -2
  103. package/templates/crud/ScaffoldCommandHandler.java.ejs +3 -1
  104. package/templates/crud/ScaffoldQuery.java.ejs +5 -2
  105. package/templates/crud/ScaffoldQueryHandler.java.ejs +3 -1
  106. package/templates/crud/SubEntityRemoveCommand.java.ejs +1 -1
  107. package/templates/crud/UpdateCommandHandler.java.ejs +53 -2
  108. package/templates/evaluate/report.html.ejs +1447 -90
  109. package/templates/kafka-event/KafkaConfigBean.java.ejs +1 -1
  110. package/templates/kafka-event/KafkaMessageBroker.java.ejs +3 -3
  111. package/templates/ports/PortAclMapper.java.ejs +35 -0
  112. package/templates/ports/PortFeignAdapter.java.ejs +7 -22
  113. package/templates/ports/PortFeignClient.java.ejs +4 -0
  114. package/templates/ports/PortResponseDto.java.ejs +1 -1
  115. package/templates/rabbitmq-event/RabbitConfigBean.java.ejs +33 -0
  116. package/templates/rabbitmq-event/RabbitConfigExchange.java.ejs +12 -0
  117. package/templates/rabbitmq-event/RabbitMessageBroker.java.ejs +35 -0
  118. package/templates/rabbitmq-event/RabbitMessageBrokerMethod.java.ejs +9 -0
  119. package/templates/rabbitmq-listener/RabbitConfigConsumerBean.java.ejs +33 -0
  120. package/templates/rabbitmq-listener/RabbitConfigConsumerExchange.java.ejs +12 -0
  121. package/templates/rabbitmq-listener/RabbitListenerClass.java.ejs +82 -0
  122. package/templates/rabbitmq-listener/RabbitListenerSimple.java.ejs +56 -0
  123. package/templates/read-model/ReadModelDomain.java.ejs +46 -0
  124. package/templates/read-model/ReadModelJpa.java.ejs +58 -0
  125. package/templates/read-model/ReadModelJpaRepository.java.ejs +13 -0
  126. package/templates/read-model/ReadModelKafkaListener.java.ejs +64 -0
  127. package/templates/read-model/ReadModelRabbitListener.java.ejs +71 -0
  128. package/templates/read-model/ReadModelRepository.java.ejs +42 -0
  129. package/templates/read-model/ReadModelRepositoryImpl.java.ejs +85 -0
  130. package/templates/read-model/ReadModelSyncHandler.java.ejs +54 -0
  131. package/templates/shared/configurations/kafkaConfig/KafkaConfig.java.ejs +18 -4
  132. package/templates/shared/configurations/rabbitmqConfig/RabbitMQConfig.java.ejs +100 -0
  133. package/templates/shared/configurations/temporalConfig/TemporalConfig.java.ejs +2 -64
  134. package/templates/shared/configurations/temporalConfig/TemporalWorkerFactoryLifecycle.java.ejs +41 -0
  135. package/templates/temporal-activity/ActivityImpl.java.ejs +68 -2
  136. package/templates/temporal-activity/ActivityInput.java.ejs +14 -0
  137. package/templates/temporal-activity/ActivityInterface.java.ejs +7 -1
  138. package/templates/temporal-activity/ActivityOutput.java.ejs +14 -0
  139. package/templates/temporal-activity/NestedType.java.ejs +12 -0
  140. package/templates/temporal-activity/SharedActivityInput.java.ejs +14 -0
  141. package/templates/temporal-activity/SharedActivityInterface.java.ejs +15 -0
  142. package/templates/temporal-activity/SharedActivityOutput.java.ejs +14 -0
  143. package/templates/temporal-activity/SharedNestedType.java.ejs +12 -0
  144. package/templates/temporal-flow/ModuleHeavyActivity.java.ejs +6 -0
  145. package/templates/temporal-flow/ModuleLightActivity.java.ejs +6 -0
  146. package/templates/temporal-flow/ModuleTemporalWorkerConfig.java.ejs +58 -0
  147. package/templates/temporal-flow/WorkFlowImpl.java.ejs +172 -12
  148. package/templates/temporal-flow/WorkFlowInput.java.ejs +11 -0
  149. package/templates/temporal-flow/WorkFlowInterface.java.ejs +5 -4
  150. package/templates/temporal-flow/WorkFlowService.java.ejs +42 -12
  151. package/COMMAND_EVALUATION.md +0 -911
package/bin/eva4j.js CHANGED
@@ -6,16 +6,20 @@ const packageJson = require('../package.json');
6
6
  const createCommand = require('../src/commands/create');
7
7
  const addModuleCommand = require('../src/commands/add-module');
8
8
  const addKafkaClientCommand = require('../src/commands/add-kafka-client');
9
+ const addRabbitMQClientCommand = require('../src/commands/add-rabbitmq-client');
9
10
  const addTemporalClientCommand = require('../src/commands/add-temporal-client');
10
11
  const generateUsecaseCommand = require('../src/commands/generate-usecase');
11
12
  const generateHttpExchangeCommand = require('../src/commands/generate-http-exchange');
12
13
  const generateKafkaEventCommand = require('../src/commands/generate-kafka-event');
13
14
  const generateKafkaListenerCommand = require('../src/commands/generate-kafka-listener');
15
+ const generateRabbitMQEventCommand = require('../src/commands/generate-rabbitmq-event');
16
+ const generateRabbitMQListenerCommand = require('../src/commands/generate-rabbitmq-listener');
14
17
  const generateResourceCommand = require('../src/commands/generate-resource');
15
18
  const generateRecordCommand = require('../src/commands/generate-record');
16
19
  const generateEntitiesCommand = require('../src/commands/generate-entities');
17
20
  const generateTemporalFlowCommand = require('../src/commands/generate-temporal-flow');
18
21
  const generateTemporalActivityCommand = require('../src/commands/generate-temporal-activity');
22
+ const generateTemporalSystemCommand = require('../src/commands/generate-temporal-system');
19
23
  const buildCommand = require('../src/commands/build');
20
24
  const evaluateSystemCommand = require('../src/commands/evaluate-system');
21
25
  const infoCommand = require('../src/commands/info');
@@ -45,7 +49,7 @@ program
45
49
  // Add module command
46
50
  program
47
51
  .command('add <type> [name]')
48
- .description('Add components to the project. Use: module [name], kafka-client, temporal-client')
52
+ .description('Add components to the project. Use: module [name], kafka-client, rabbitmq-client, temporal-client')
49
53
  .action(async (type, name, options) => {
50
54
  if (type === 'kafka-client') {
51
55
  try {
@@ -57,6 +61,16 @@ program
57
61
  return;
58
62
  }
59
63
 
64
+ if (type === 'rabbitmq-client') {
65
+ try {
66
+ await addRabbitMQClientCommand(options);
67
+ } catch (error) {
68
+ console.error(chalk.red('Error:'), error.message);
69
+ process.exit(1);
70
+ }
71
+ return;
72
+ }
73
+
60
74
  if (type === 'temporal-client') {
61
75
  try {
62
76
  await addTemporalClientCommand(options);
@@ -72,6 +86,7 @@ program
72
86
  console.log(chalk.yellow('\nUsage:'));
73
87
  console.log(chalk.gray(' eva4j add module [module-name] # Interactive or with name'));
74
88
  console.log(chalk.gray(' eva4j add kafka-client'));
89
+ console.log(chalk.gray(' eva4j add rabbitmq-client'));
75
90
  console.log(chalk.gray(' eva4j add temporal-client'));
76
91
  console.log(chalk.gray('\nExamples:'));
77
92
  console.log(chalk.gray(' eva4j add module user'));
@@ -91,7 +106,7 @@ program
91
106
  program
92
107
  .command('generate <type> [module] [name]')
93
108
  .alias('g')
94
- .description('Generate components (usecase, http-exchange, kafka-event, kafka-listener, resource, record)')
109
+ .description('Generate components (usecase, http-exchange, kafka-event, kafka-listener, rabbitmq-event, rabbitmq-listener, resource, record)')
95
110
  .option('--force', 'Overwrite files even if they were manually modified (bypasses safe mode)')
96
111
  .action(async (type, module, name, options) => {
97
112
  if (type === 'usecase') {
@@ -166,6 +181,42 @@ program
166
181
  return;
167
182
  }
168
183
 
184
+ if (type === 'rabbitmq-event') {
185
+ if (!module) {
186
+ console.error(chalk.red('❌ Module name is required'));
187
+ console.log(chalk.gray('Usage: eva4j generate rabbitmq-event <module> [event-name]'));
188
+ console.log(chalk.gray('Examples:'));
189
+ console.log(chalk.gray(' eva4j generate rabbitmq-event user user-created'));
190
+ console.log(chalk.gray(' eva4j generate rabbitmq-event user # Will prompt for event name\n'));
191
+ process.exit(1);
192
+ }
193
+ try {
194
+ await generateRabbitMQEventCommand(module, name, options);
195
+ } catch (error) {
196
+ console.error(chalk.red('Error:'), error.message);
197
+ process.exit(1);
198
+ }
199
+ return;
200
+ }
201
+
202
+ if (type === 'rabbitmq-listener') {
203
+ if (!module) {
204
+ console.error(chalk.red('❌ Module name is required'));
205
+ console.log(chalk.gray('Usage: eva4j generate rabbitmq-listener <module>'));
206
+ console.log(chalk.gray('Examples:'));
207
+ console.log(chalk.gray(' eva4j generate rabbitmq-listener user'));
208
+ console.log(chalk.gray(' eva4j g rabbitmq-listener order\n'));
209
+ process.exit(1);
210
+ }
211
+ try {
212
+ await generateRabbitMQListenerCommand(module, options);
213
+ } catch (error) {
214
+ console.error(chalk.red('Error:'), error.message);
215
+ process.exit(1);
216
+ }
217
+ return;
218
+ }
219
+
169
220
  if (type === 'record') {
170
221
  // Record command doesn't require module/name as parameters
171
222
  // They will be prompted interactively
@@ -239,6 +290,16 @@ program
239
290
  return;
240
291
  }
241
292
 
293
+ if (type === 'temporal-system') {
294
+ try {
295
+ await generateTemporalSystemCommand(options);
296
+ } catch (error) {
297
+ console.error(chalk.red('Error:'), error.message);
298
+ process.exit(1);
299
+ }
300
+ return;
301
+ }
302
+
242
303
  if (type === 'resource') {
243
304
  if (!module) {
244
305
  console.error(chalk.red('❌ Module name is required'));
@@ -263,8 +324,11 @@ program
263
324
  console.log(chalk.gray(' eva4j generate http-exchange <port-name> <module>'));
264
325
  console.log(chalk.gray(' eva4j generate kafka-event <event-name> <module>'));
265
326
  console.log(chalk.gray(' eva4j generate kafka-listener <module>'));
327
+ console.log(chalk.gray(' eva4j generate rabbitmq-event <event-name> <module>'));
328
+ console.log(chalk.gray(' eva4j generate rabbitmq-listener <module>'));
266
329
  console.log(chalk.gray(' eva4j generate temporal-flow <module> [workflow-name]'));
267
330
  console.log(chalk.gray(' eva4j generate temporal-activity <module> [activity-name]'));
331
+ console.log(chalk.gray(' eva4j generate temporal-system'));
268
332
  console.log(chalk.gray(' eva4j generate resource <module>'));
269
333
  console.log(chalk.gray(' eva4j generate record'));
270
334
  console.log(chalk.gray(' eva4j generate entities <module>'));
@@ -273,8 +337,11 @@ program
273
337
  console.log(chalk.gray(' eva4j g http-exchange user-service-port user'));
274
338
  console.log(chalk.gray(' eva4j g kafka-event user-created user'));
275
339
  console.log(chalk.gray(' eva4j g kafka-listener user'));
340
+ console.log(chalk.gray(' eva4j g rabbitmq-event user-created user'));
341
+ console.log(chalk.gray(' eva4j g rabbitmq-listener user'));
276
342
  console.log(chalk.gray(' eva4j g temporal-flow order process-order'));
277
343
  console.log(chalk.gray(' eva4j g temporal-activity order register-order'));
344
+ console.log(chalk.gray(' eva4j g temporal-system # Reads from system/system.yaml'));
278
345
  console.log(chalk.gray(' eva4j g resource product'));
279
346
  console.log(chalk.gray(' eva4j g record # Reads JSON from clipboard'));
280
347
  console.log(chalk.gray(' eva4j g entities order # Generates from domain.yaml\n'));
@@ -359,6 +426,7 @@ program.on('--help', () => {
359
426
  console.log(chalk.gray(' $ eva4j add module user'));
360
427
  console.log(chalk.gray(' $ eva4j add module product'));
361
428
  console.log(chalk.gray(' $ eva4j add kafka-client'));
429
+ console.log(chalk.gray(' $ eva4j add rabbitmq-client'));
362
430
  console.log(chalk.gray(' $ eva4j generate usecase create-provider provider'));
363
431
  console.log(chalk.gray(' $ eva4j g usecase get-all-products product'));
364
432
  console.log(chalk.gray(' $ eva4j g http-exchange user-service-port user'));
@@ -8,6 +8,7 @@
8
8
  "temporalSdkVersion": "1.24.1",
9
9
  "temporalDockerVersion": "1.21.5",
10
10
  "kafkaConfluentVersion": "7.6.0",
11
+ "rabbitmqVersion": "4-management",
11
12
  "springdocVersion": "2.8.13",
12
13
  "gradleVersion": "8.7",
13
14
  "encoding": "UTF-8",