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.
- package/AGENTS.md +220 -5
- package/DOMAIN_YAML_GUIDE.md +188 -3
- package/FUTURE_FEATURES.md +33 -52
- package/QUICK_REFERENCE.md +8 -4
- package/bin/eva4j.js +70 -2
- package/config/defaults.json +1 -0
- package/docs/CAMUNDA_DMN_GUIDE.md +1380 -0
- package/docs/KAFKA_PRODUCTION_CONFIG.md +441 -0
- package/docs/RABBITMQ_PRODUCTION_CONFIG.md +227 -0
- package/docs/commands/ADD_RABBITMQ_CLIENT.md +192 -0
- package/docs/commands/EVALUATE_SYSTEM.md +290 -10
- package/docs/commands/GENERATE_RABBITMQ_EVENT.md +341 -0
- package/docs/commands/GENERATE_RABBITMQ_LISTENER.md +595 -0
- package/docs/commands/GENERATE_TEMPORAL_FLOW.md +52 -12
- package/docs/commands/INDEX.md +27 -3
- package/docs/prototype/TEMPORAL_COMMUNICATION_PATTERNS.md +731 -0
- package/docs/prototype/TEMPORAL_DESIGN_METHODOLOGY.md +740 -0
- package/docs/prototype/system/RISKS.md +277 -0
- package/docs/prototype/system/customers.yaml +133 -0
- package/docs/prototype/system/inventory.yaml +109 -0
- package/docs/prototype/system/notifications.yaml +131 -0
- package/docs/prototype/system/orders.yaml +241 -0
- package/docs/prototype/system/payments.yaml +256 -0
- package/docs/prototype/system/products.yaml +168 -0
- package/docs/prototype/system/system.yaml +269 -0
- package/examples/domain-endpoints-multi-aggregate.yaml +140 -0
- package/examples/domain-events.yaml +26 -0
- package/examples/domain-read-models.yaml +113 -0
- package/examples/system/customer.yaml +89 -0
- package/examples/system/orders.yaml +119 -0
- package/examples/system/product.yaml +27 -0
- package/examples/system/system.yaml +80 -0
- package/package.json +1 -1
- package/read-model-spec.md +664 -0
- package/src/agents/design-gap-analyst-temporal.agent.md +452 -0
- package/src/agents/design-gap-analyst.agent.md +383 -0
- package/src/agents/design-reviewer-temporal.agent.md +412 -0
- package/src/agents/design-reviewer.agent.md +34 -5
- package/src/agents/implement-use-cases.prompt.md +179 -0
- package/src/agents/ux-gap-analyst.agent.md +412 -0
- package/src/commands/add-rabbitmq-client.js +261 -0
- package/src/commands/add-temporal-client.js +22 -2
- package/src/commands/build.js +267 -11
- package/src/commands/evaluate-system.js +700 -13
- package/src/commands/generate-entities.js +560 -24
- package/src/commands/generate-http-exchange.js +3 -0
- package/src/commands/generate-kafka-event.js +3 -0
- package/src/commands/generate-kafka-listener.js +3 -0
- package/src/commands/generate-rabbitmq-event.js +665 -0
- package/src/commands/generate-rabbitmq-listener.js +205 -0
- package/src/commands/generate-record.js +2 -2
- package/src/commands/generate-resource.js +4 -1
- package/src/commands/generate-temporal-activity.js +970 -33
- package/src/commands/generate-temporal-flow.js +98 -38
- package/src/commands/generate-temporal-system.js +708 -0
- package/src/commands/generate-usecase.js +4 -1
- package/src/skills/build-system-yaml/SKILL.md +343 -2
- package/src/skills/build-system-yaml/references/domain-yaml-spec.md +253 -26
- package/src/skills/build-system-yaml/references/module-spec.md +90 -9
- package/src/skills/build-system-yaml/references/system-yaml-spec.md +36 -0
- package/src/skills/build-temporal-system/SKILL.md +752 -0
- package/src/skills/build-temporal-system/references/temporal-communication-patterns.md +167 -0
- package/src/skills/build-temporal-system/references/temporal-domain-yaml-spec.md +449 -0
- package/src/skills/build-temporal-system/references/temporal-module-spec.md +353 -0
- package/src/skills/build-temporal-system/references/temporal-system-yaml-spec.md +326 -0
- package/src/skills/implement-use-case/SKILL.md +350 -0
- package/src/skills/implement-use-case/references/use-case-patterns.md +980 -0
- package/src/skills/requirements-elicitation/SKILL.md +228 -0
- package/src/skills/requirements-elicitation/references/interview-framework.md +260 -0
- package/src/skills/requirements-elicitation/references/output-templates.md +368 -0
- package/src/utils/bounded-context-diagram.js +844 -0
- package/src/utils/config-manager.js +4 -2
- package/src/utils/domain-validator.js +495 -17
- package/src/utils/naming.js +20 -0
- package/src/utils/system-validator.js +169 -11
- package/src/utils/system-yaml-parser.js +318 -0
- package/src/utils/temporal-validator.js +497 -0
- package/src/utils/validator.js +3 -1
- package/src/utils/yaml-to-entity.js +281 -9
- package/templates/aggregate/AggregateRepository.java.ejs +4 -0
- package/templates/aggregate/AggregateRepositoryImpl.java.ejs +8 -0
- package/templates/aggregate/AggregateRoot.java.ejs +38 -4
- package/templates/aggregate/DomainEventHandler.java.ejs +116 -22
- package/templates/aggregate/JpaAggregateRoot.java.ejs +4 -4
- package/templates/aggregate/JpaEntity.java.ejs +2 -2
- package/templates/base/docker/rabbitmq-services.yaml.ejs +12 -0
- package/templates/base/resources/parameters/develop/kafka.yaml.ejs +5 -0
- package/templates/base/resources/parameters/develop/rabbitmq.yaml.ejs +15 -0
- package/templates/base/resources/parameters/develop/temporal.yaml.ejs +0 -3
- package/templates/base/resources/parameters/local/kafka.yaml.ejs +5 -0
- package/templates/base/resources/parameters/local/rabbitmq.yaml.ejs +15 -0
- package/templates/base/resources/parameters/local/temporal.yaml.ejs +0 -3
- package/templates/base/resources/parameters/production/kafka.yaml.ejs +39 -8
- package/templates/base/resources/parameters/production/rabbitmq.yaml.ejs +32 -0
- package/templates/base/resources/parameters/production/temporal.yaml.ejs +0 -3
- package/templates/base/resources/parameters/test/kafka.yaml.ejs +12 -6
- package/templates/base/resources/parameters/test/rabbitmq.yaml.ejs +15 -0
- package/templates/base/resources/parameters/test/temporal.yaml.ejs +0 -3
- package/templates/base/root/AGENTS.md.ejs +1 -1
- package/templates/crud/DeleteCommandHandler.java.ejs +19 -1
- package/templates/crud/EndpointsController.java.ejs +1 -1
- package/templates/crud/ScaffoldCommand.java.ejs +5 -2
- package/templates/crud/ScaffoldCommandHandler.java.ejs +3 -1
- package/templates/crud/ScaffoldQuery.java.ejs +5 -2
- package/templates/crud/ScaffoldQueryHandler.java.ejs +3 -1
- package/templates/crud/SubEntityRemoveCommand.java.ejs +1 -1
- package/templates/crud/UpdateCommandHandler.java.ejs +53 -2
- package/templates/evaluate/report.html.ejs +1447 -90
- package/templates/kafka-event/KafkaConfigBean.java.ejs +1 -1
- package/templates/kafka-event/KafkaMessageBroker.java.ejs +3 -3
- package/templates/ports/PortAclMapper.java.ejs +35 -0
- package/templates/ports/PortFeignAdapter.java.ejs +7 -22
- package/templates/ports/PortFeignClient.java.ejs +4 -0
- package/templates/ports/PortResponseDto.java.ejs +1 -1
- package/templates/rabbitmq-event/RabbitConfigBean.java.ejs +33 -0
- package/templates/rabbitmq-event/RabbitConfigExchange.java.ejs +12 -0
- package/templates/rabbitmq-event/RabbitMessageBroker.java.ejs +35 -0
- package/templates/rabbitmq-event/RabbitMessageBrokerMethod.java.ejs +9 -0
- package/templates/rabbitmq-listener/RabbitConfigConsumerBean.java.ejs +33 -0
- package/templates/rabbitmq-listener/RabbitConfigConsumerExchange.java.ejs +12 -0
- package/templates/rabbitmq-listener/RabbitListenerClass.java.ejs +82 -0
- package/templates/rabbitmq-listener/RabbitListenerSimple.java.ejs +56 -0
- package/templates/read-model/ReadModelDomain.java.ejs +46 -0
- package/templates/read-model/ReadModelJpa.java.ejs +58 -0
- package/templates/read-model/ReadModelJpaRepository.java.ejs +13 -0
- package/templates/read-model/ReadModelKafkaListener.java.ejs +64 -0
- package/templates/read-model/ReadModelRabbitListener.java.ejs +71 -0
- package/templates/read-model/ReadModelRepository.java.ejs +42 -0
- package/templates/read-model/ReadModelRepositoryImpl.java.ejs +85 -0
- package/templates/read-model/ReadModelSyncHandler.java.ejs +54 -0
- package/templates/shared/configurations/kafkaConfig/KafkaConfig.java.ejs +18 -4
- package/templates/shared/configurations/rabbitmqConfig/RabbitMQConfig.java.ejs +100 -0
- package/templates/shared/configurations/temporalConfig/TemporalConfig.java.ejs +2 -64
- package/templates/shared/configurations/temporalConfig/TemporalWorkerFactoryLifecycle.java.ejs +41 -0
- package/templates/temporal-activity/ActivityImpl.java.ejs +68 -2
- package/templates/temporal-activity/ActivityInput.java.ejs +14 -0
- package/templates/temporal-activity/ActivityInterface.java.ejs +7 -1
- package/templates/temporal-activity/ActivityOutput.java.ejs +14 -0
- package/templates/temporal-activity/NestedType.java.ejs +12 -0
- package/templates/temporal-activity/SharedActivityInput.java.ejs +14 -0
- package/templates/temporal-activity/SharedActivityInterface.java.ejs +15 -0
- package/templates/temporal-activity/SharedActivityOutput.java.ejs +14 -0
- package/templates/temporal-activity/SharedNestedType.java.ejs +12 -0
- package/templates/temporal-flow/ModuleHeavyActivity.java.ejs +6 -0
- package/templates/temporal-flow/ModuleLightActivity.java.ejs +6 -0
- package/templates/temporal-flow/ModuleTemporalWorkerConfig.java.ejs +58 -0
- package/templates/temporal-flow/WorkFlowImpl.java.ejs +172 -12
- package/templates/temporal-flow/WorkFlowInput.java.ejs +11 -0
- package/templates/temporal-flow/WorkFlowInterface.java.ejs +5 -4
- package/templates/temporal-flow/WorkFlowService.java.ejs +42 -12
- 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'));
|
package/config/defaults.json
CHANGED