@auto-engineer/server-generator-apollo-emmett 0.8.3 → 0.8.5

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 (239) hide show
  1. package/.turbo/turbo-build.log +1 -1
  2. package/.turbo/turbo-test.log +3 -3
  3. package/.turbo/turbo-type-check.log +1 -1
  4. package/CHANGELOG.md +15 -0
  5. package/dist/src/codegen/extract/commands.d.ts.map +1 -0
  6. package/dist/src/codegen/extract/commands.js.map +1 -0
  7. package/dist/src/codegen/extract/data-sink.d.ts.map +1 -0
  8. package/dist/{codegen → src/codegen}/extract/data-sink.js +33 -10
  9. package/dist/src/codegen/extract/data-sink.js.map +1 -0
  10. package/dist/src/codegen/extract/events.d.ts.map +1 -0
  11. package/dist/src/codegen/extract/events.js.map +1 -0
  12. package/dist/src/codegen/extract/fields.d.ts.map +1 -0
  13. package/dist/src/codegen/extract/fields.js.map +1 -0
  14. package/dist/src/codegen/extract/graphql.d.ts.map +1 -0
  15. package/dist/src/codegen/extract/graphql.js.map +1 -0
  16. package/dist/src/codegen/extract/gwt.d.ts.map +1 -0
  17. package/dist/src/codegen/extract/gwt.js.map +1 -0
  18. package/dist/src/codegen/extract/index.d.ts.map +1 -0
  19. package/dist/src/codegen/extract/index.js.map +1 -0
  20. package/dist/src/codegen/extract/messages.d.ts.map +1 -0
  21. package/dist/src/codegen/extract/messages.js.map +1 -0
  22. package/dist/src/codegen/extract/projection.d.ts.map +1 -0
  23. package/dist/src/codegen/extract/projection.js.map +1 -0
  24. package/dist/src/codegen/extract/query.d.ts.map +1 -0
  25. package/dist/src/codegen/extract/query.js.map +1 -0
  26. package/dist/src/codegen/extract/states.d.ts.map +1 -0
  27. package/dist/src/codegen/extract/states.js.map +1 -0
  28. package/dist/src/codegen/scaffoldFromSchema.d.ts.map +1 -0
  29. package/dist/src/codegen/scaffoldFromSchema.integration.specs.d.ts.map +1 -0
  30. package/dist/src/codegen/scaffoldFromSchema.integration.specs.js.map +1 -0
  31. package/dist/src/codegen/scaffoldFromSchema.js.map +1 -0
  32. package/dist/src/codegen/templates/command/commands.specs.d.ts +2 -0
  33. package/dist/src/codegen/templates/command/commands.specs.d.ts.map +1 -0
  34. package/dist/src/codegen/templates/command/commands.specs.js +96 -0
  35. package/dist/src/codegen/templates/command/commands.specs.js.map +1 -0
  36. package/dist/src/codegen/templates/command/decide.specs.d.ts +2 -0
  37. package/dist/src/codegen/templates/command/decide.specs.d.ts.map +1 -0
  38. package/dist/src/codegen/templates/command/decide.specs.js +567 -0
  39. package/dist/src/codegen/templates/command/decide.specs.js.map +1 -0
  40. package/dist/src/codegen/templates/command/decide.specs.specs.d.ts +2 -0
  41. package/dist/src/codegen/templates/command/decide.specs.specs.d.ts.map +1 -0
  42. package/dist/src/codegen/templates/command/decide.specs.specs.js +278 -0
  43. package/dist/src/codegen/templates/command/decide.specs.specs.js.map +1 -0
  44. package/dist/src/codegen/templates/command/events.specs.d.ts +2 -0
  45. package/dist/src/codegen/templates/command/events.specs.d.ts.map +1 -0
  46. package/dist/src/codegen/templates/command/events.specs.js +112 -0
  47. package/dist/src/codegen/templates/command/events.specs.js.map +1 -0
  48. package/dist/src/codegen/templates/command/evolve.specs.d.ts +2 -0
  49. package/dist/src/codegen/templates/command/evolve.specs.d.ts.map +1 -0
  50. package/dist/src/codegen/templates/command/evolve.specs.js +108 -0
  51. package/dist/src/codegen/templates/command/evolve.specs.js.map +1 -0
  52. package/dist/src/codegen/templates/command/handle.specs.d.ts +2 -0
  53. package/dist/src/codegen/templates/command/handle.specs.d.ts.map +1 -0
  54. package/dist/src/codegen/templates/command/handle.specs.js +326 -0
  55. package/dist/src/codegen/templates/command/handle.specs.js.map +1 -0
  56. package/dist/src/codegen/templates/command/mutation.resolver.specs.d.ts +2 -0
  57. package/dist/src/codegen/templates/command/mutation.resolver.specs.d.ts.map +1 -0
  58. package/dist/src/codegen/templates/command/mutation.resolver.specs.js +121 -0
  59. package/dist/src/codegen/templates/command/mutation.resolver.specs.js.map +1 -0
  60. package/dist/src/codegen/templates/command/register.specs.d.ts +2 -0
  61. package/dist/src/codegen/templates/command/register.specs.d.ts.map +1 -0
  62. package/dist/src/codegen/templates/command/register.specs.js +113 -0
  63. package/dist/src/codegen/templates/command/register.specs.js.map +1 -0
  64. package/dist/src/codegen/templates/command/state.specs.d.ts +2 -0
  65. package/dist/src/codegen/templates/command/state.specs.d.ts.map +1 -0
  66. package/dist/src/codegen/templates/command/state.specs.js +133 -0
  67. package/dist/src/codegen/templates/command/state.specs.js.map +1 -0
  68. package/dist/src/codegen/templates/query/projection.specs.d.ts +2 -0
  69. package/dist/src/codegen/templates/query/projection.specs.d.ts.map +1 -0
  70. package/dist/src/codegen/templates/query/projection.specs.js +363 -0
  71. package/dist/src/codegen/templates/query/projection.specs.js.map +1 -0
  72. package/dist/src/codegen/templates/query/projection.specs.specs..d.ts +2 -0
  73. package/dist/src/codegen/templates/query/projection.specs.specs..d.ts.map +1 -0
  74. package/dist/src/codegen/templates/query/projection.specs.specs..js +293 -0
  75. package/dist/src/codegen/templates/query/projection.specs.specs..js.map +1 -0
  76. package/dist/src/codegen/templates/query/query.resolver.specs.d.ts +2 -0
  77. package/dist/src/codegen/templates/query/query.resolver.specs.d.ts.map +1 -0
  78. package/dist/src/codegen/templates/query/query.resolver.specs.js +249 -0
  79. package/dist/src/codegen/templates/query/query.resolver.specs.js.map +1 -0
  80. package/dist/src/codegen/templates/query/state.specs.d.ts +2 -0
  81. package/dist/src/codegen/templates/query/state.specs.d.ts.map +1 -0
  82. package/dist/src/codegen/templates/query/state.specs.js +67 -0
  83. package/dist/src/codegen/templates/query/state.specs.js.map +1 -0
  84. package/dist/src/codegen/templates/react/react.specs.d.ts +2 -0
  85. package/dist/src/codegen/templates/react/react.specs.d.ts.map +1 -0
  86. package/dist/src/codegen/templates/react/react.specs.js +265 -0
  87. package/dist/src/codegen/templates/react/react.specs.js.map +1 -0
  88. package/dist/src/codegen/templates/react/react.specs.specs.d.ts +2 -0
  89. package/dist/src/codegen/templates/react/react.specs.specs.d.ts.map +1 -0
  90. package/dist/src/codegen/templates/react/react.specs.specs.js +229 -0
  91. package/dist/src/codegen/templates/react/react.specs.specs.js.map +1 -0
  92. package/dist/src/codegen/templates/react/register.specs.d.ts +2 -0
  93. package/dist/src/codegen/templates/react/register.specs.d.ts.map +1 -0
  94. package/dist/src/codegen/templates/react/register.specs.js +246 -0
  95. package/dist/src/codegen/templates/react/register.specs.js.map +1 -0
  96. package/dist/src/codegen/test-data/specVariant1.d.ts.map +1 -0
  97. package/dist/src/codegen/test-data/specVariant1.js.map +1 -0
  98. package/dist/src/codegen/types.d.ts.map +1 -0
  99. package/dist/{codegen → src/codegen}/types.js.map +1 -1
  100. package/dist/src/codegen/utils/path.d.ts.map +1 -0
  101. package/dist/src/codegen/utils/path.js.map +1 -0
  102. package/dist/src/commands/generate-server.d.ts.map +1 -0
  103. package/dist/src/commands/generate-server.js.map +1 -0
  104. package/dist/src/domain/shared/ReadModel.d.ts.map +1 -0
  105. package/dist/src/domain/shared/ReadModel.js.map +1 -0
  106. package/dist/src/domain/shared/index.d.ts.map +1 -0
  107. package/dist/src/domain/shared/index.js.map +1 -0
  108. package/dist/src/domain/shared/reactorSpecification.d.ts.map +1 -0
  109. package/dist/src/domain/shared/reactorSpecification.js.map +1 -0
  110. package/dist/src/domain/shared/sendCommand.d.ts.map +1 -0
  111. package/dist/src/domain/shared/sendCommand.js.map +1 -0
  112. package/dist/src/domain/shared/types.d.ts.map +1 -0
  113. package/dist/src/domain/shared/types.js.map +1 -0
  114. package/dist/src/index.d.ts.map +1 -0
  115. package/dist/src/index.js.map +1 -0
  116. package/dist/src/server.d.ts.map +1 -0
  117. package/dist/src/server.js.map +1 -0
  118. package/dist/src/utils/index.d.ts.map +1 -0
  119. package/dist/src/utils/index.js.map +1 -0
  120. package/dist/src/utils/loadProjections.d.ts.map +1 -0
  121. package/dist/src/utils/loadProjections.js.map +1 -0
  122. package/dist/src/utils/loadRegisterFiles.d.ts.map +1 -0
  123. package/dist/src/utils/loadRegisterFiles.js.map +1 -0
  124. package/dist/src/utils/loadResolvers.d.ts.map +1 -0
  125. package/dist/src/utils/loadResolvers.js.map +1 -0
  126. package/{tsconfig.tsbuildinfo → dist/tsconfig.tsbuildinfo} +1 -1
  127. package/package.json +6 -7
  128. package/src/codegen/extract/data-sink.ts +49 -23
  129. package/tsconfig.json +3 -2
  130. package/dist/codegen/extract/commands.d.ts.map +0 -1
  131. package/dist/codegen/extract/commands.js.map +0 -1
  132. package/dist/codegen/extract/data-sink.d.ts.map +0 -1
  133. package/dist/codegen/extract/data-sink.js.map +0 -1
  134. package/dist/codegen/extract/events.d.ts.map +0 -1
  135. package/dist/codegen/extract/events.js.map +0 -1
  136. package/dist/codegen/extract/fields.d.ts.map +0 -1
  137. package/dist/codegen/extract/fields.js.map +0 -1
  138. package/dist/codegen/extract/graphql.d.ts.map +0 -1
  139. package/dist/codegen/extract/graphql.js.map +0 -1
  140. package/dist/codegen/extract/gwt.d.ts.map +0 -1
  141. package/dist/codegen/extract/gwt.js.map +0 -1
  142. package/dist/codegen/extract/index.d.ts.map +0 -1
  143. package/dist/codegen/extract/index.js.map +0 -1
  144. package/dist/codegen/extract/messages.d.ts.map +0 -1
  145. package/dist/codegen/extract/messages.js.map +0 -1
  146. package/dist/codegen/extract/projection.d.ts.map +0 -1
  147. package/dist/codegen/extract/projection.js.map +0 -1
  148. package/dist/codegen/extract/query.d.ts.map +0 -1
  149. package/dist/codegen/extract/query.js.map +0 -1
  150. package/dist/codegen/extract/states.d.ts.map +0 -1
  151. package/dist/codegen/extract/states.js.map +0 -1
  152. package/dist/codegen/scaffoldFromSchema.d.ts.map +0 -1
  153. package/dist/codegen/scaffoldFromSchema.integration.specs.d.ts.map +0 -1
  154. package/dist/codegen/scaffoldFromSchema.integration.specs.js.map +0 -1
  155. package/dist/codegen/scaffoldFromSchema.js.map +0 -1
  156. package/dist/codegen/test-data/specVariant1.d.ts.map +0 -1
  157. package/dist/codegen/test-data/specVariant1.js.map +0 -1
  158. package/dist/codegen/types.d.ts.map +0 -1
  159. package/dist/codegen/utils/path.d.ts.map +0 -1
  160. package/dist/codegen/utils/path.js.map +0 -1
  161. package/dist/commands/generate-server.d.ts.map +0 -1
  162. package/dist/commands/generate-server.js.map +0 -1
  163. package/dist/domain/shared/ReadModel.d.ts.map +0 -1
  164. package/dist/domain/shared/ReadModel.js.map +0 -1
  165. package/dist/domain/shared/index.d.ts.map +0 -1
  166. package/dist/domain/shared/index.js.map +0 -1
  167. package/dist/domain/shared/reactorSpecification.d.ts.map +0 -1
  168. package/dist/domain/shared/reactorSpecification.js.map +0 -1
  169. package/dist/domain/shared/sendCommand.d.ts.map +0 -1
  170. package/dist/domain/shared/sendCommand.js.map +0 -1
  171. package/dist/domain/shared/types.d.ts.map +0 -1
  172. package/dist/domain/shared/types.js.map +0 -1
  173. package/dist/index.d.ts.map +0 -1
  174. package/dist/index.js.map +0 -1
  175. package/dist/server.d.ts.map +0 -1
  176. package/dist/server.js.map +0 -1
  177. package/dist/utils/index.d.ts.map +0 -1
  178. package/dist/utils/index.js.map +0 -1
  179. package/dist/utils/loadProjections.d.ts.map +0 -1
  180. package/dist/utils/loadProjections.js.map +0 -1
  181. package/dist/utils/loadRegisterFiles.d.ts.map +0 -1
  182. package/dist/utils/loadRegisterFiles.js.map +0 -1
  183. package/dist/utils/loadResolvers.d.ts.map +0 -1
  184. package/dist/utils/loadResolvers.js.map +0 -1
  185. /package/dist/{codegen → src/codegen}/extract/commands.d.ts +0 -0
  186. /package/dist/{codegen → src/codegen}/extract/commands.js +0 -0
  187. /package/dist/{codegen → src/codegen}/extract/data-sink.d.ts +0 -0
  188. /package/dist/{codegen → src/codegen}/extract/events.d.ts +0 -0
  189. /package/dist/{codegen → src/codegen}/extract/events.js +0 -0
  190. /package/dist/{codegen → src/codegen}/extract/fields.d.ts +0 -0
  191. /package/dist/{codegen → src/codegen}/extract/fields.js +0 -0
  192. /package/dist/{codegen → src/codegen}/extract/graphql.d.ts +0 -0
  193. /package/dist/{codegen → src/codegen}/extract/graphql.js +0 -0
  194. /package/dist/{codegen → src/codegen}/extract/gwt.d.ts +0 -0
  195. /package/dist/{codegen → src/codegen}/extract/gwt.js +0 -0
  196. /package/dist/{codegen → src/codegen}/extract/index.d.ts +0 -0
  197. /package/dist/{codegen → src/codegen}/extract/index.js +0 -0
  198. /package/dist/{codegen → src/codegen}/extract/messages.d.ts +0 -0
  199. /package/dist/{codegen → src/codegen}/extract/messages.js +0 -0
  200. /package/dist/{codegen → src/codegen}/extract/projection.d.ts +0 -0
  201. /package/dist/{codegen → src/codegen}/extract/projection.js +0 -0
  202. /package/dist/{codegen → src/codegen}/extract/query.d.ts +0 -0
  203. /package/dist/{codegen → src/codegen}/extract/query.js +0 -0
  204. /package/dist/{codegen → src/codegen}/extract/states.d.ts +0 -0
  205. /package/dist/{codegen → src/codegen}/extract/states.js +0 -0
  206. /package/dist/{codegen → src/codegen}/scaffoldFromSchema.d.ts +0 -0
  207. /package/dist/{codegen → src/codegen}/scaffoldFromSchema.integration.specs.d.ts +0 -0
  208. /package/dist/{codegen → src/codegen}/scaffoldFromSchema.integration.specs.js +0 -0
  209. /package/dist/{codegen → src/codegen}/scaffoldFromSchema.js +0 -0
  210. /package/dist/{codegen → src/codegen}/test-data/specVariant1.d.ts +0 -0
  211. /package/dist/{codegen → src/codegen}/test-data/specVariant1.js +0 -0
  212. /package/dist/{codegen → src/codegen}/types.d.ts +0 -0
  213. /package/dist/{codegen → src/codegen}/types.js +0 -0
  214. /package/dist/{codegen → src/codegen}/utils/path.d.ts +0 -0
  215. /package/dist/{codegen → src/codegen}/utils/path.js +0 -0
  216. /package/dist/{commands → src/commands}/generate-server.d.ts +0 -0
  217. /package/dist/{commands → src/commands}/generate-server.js +0 -0
  218. /package/dist/{domain → src/domain}/shared/ReadModel.d.ts +0 -0
  219. /package/dist/{domain → src/domain}/shared/ReadModel.js +0 -0
  220. /package/dist/{domain → src/domain}/shared/index.d.ts +0 -0
  221. /package/dist/{domain → src/domain}/shared/index.js +0 -0
  222. /package/dist/{domain → src/domain}/shared/reactorSpecification.d.ts +0 -0
  223. /package/dist/{domain → src/domain}/shared/reactorSpecification.js +0 -0
  224. /package/dist/{domain → src/domain}/shared/sendCommand.d.ts +0 -0
  225. /package/dist/{domain → src/domain}/shared/sendCommand.js +0 -0
  226. /package/dist/{domain → src/domain}/shared/types.d.ts +0 -0
  227. /package/dist/{domain → src/domain}/shared/types.js +0 -0
  228. /package/dist/{index.d.ts → src/index.d.ts} +0 -0
  229. /package/dist/{index.js → src/index.js} +0 -0
  230. /package/dist/{server.d.ts → src/server.d.ts} +0 -0
  231. /package/dist/{server.js → src/server.js} +0 -0
  232. /package/dist/{utils → src/utils}/index.d.ts +0 -0
  233. /package/dist/{utils → src/utils}/index.js +0 -0
  234. /package/dist/{utils → src/utils}/loadProjections.d.ts +0 -0
  235. /package/dist/{utils → src/utils}/loadProjections.js +0 -0
  236. /package/dist/{utils → src/utils}/loadRegisterFiles.d.ts +0 -0
  237. /package/dist/{utils → src/utils}/loadRegisterFiles.js +0 -0
  238. /package/dist/{utils → src/utils}/loadResolvers.d.ts +0 -0
  239. /package/dist/{utils → src/utils}/loadResolvers.js +0 -0
@@ -0,0 +1,567 @@
1
+ import { describe, it, expect } from 'vitest';
2
+ import { generateScaffoldFilePlans } from '../../scaffoldFromSchema.js';
3
+ describe('decide.ts.ejs', () => {
4
+ it('should generate a valid decide file when both command and event exist', async () => {
5
+ const spec = {
6
+ variant: 'specs',
7
+ flows: [
8
+ {
9
+ name: 'Host creates a listing',
10
+ slices: [
11
+ {
12
+ type: 'command',
13
+ name: 'Create listing',
14
+ client: {
15
+ description: 'test',
16
+ specs: [],
17
+ },
18
+ server: {
19
+ description: 'test',
20
+ specs: {
21
+ name: 'Create listing command',
22
+ rules: [
23
+ {
24
+ description: 'Should create listing with valid data',
25
+ examples: [
26
+ {
27
+ description: 'User creates listing successfully',
28
+ when: {
29
+ commandRef: 'CreateListing',
30
+ exampleData: {
31
+ propertyId: 'listing_123',
32
+ title: 'Some apartment',
33
+ listedAt: '2024-01-15T10:00:00Z',
34
+ rating: 4.8,
35
+ metadata: { foo: 'bar' },
36
+ },
37
+ },
38
+ then: [
39
+ {
40
+ eventRef: 'ListingCreated',
41
+ exampleData: {
42
+ propertyId: 'listing_123',
43
+ listedAt: '2024-01-15T10:00:00Z',
44
+ rating: 4.8,
45
+ metadata: { foo: 'bar' },
46
+ },
47
+ },
48
+ ],
49
+ },
50
+ ],
51
+ },
52
+ ],
53
+ },
54
+ },
55
+ },
56
+ ],
57
+ },
58
+ ],
59
+ messages: [
60
+ {
61
+ type: 'command',
62
+ name: 'CreateListing',
63
+ fields: [],
64
+ },
65
+ {
66
+ type: 'event',
67
+ name: 'ListingCreated',
68
+ source: 'internal',
69
+ fields: [],
70
+ },
71
+ ],
72
+ };
73
+ const plans = await generateScaffoldFilePlans(spec.flows, spec.messages, undefined, 'src/domain/flows');
74
+ const decideFile = plans.find((p) => p.outputPath.endsWith('decide.ts'));
75
+ expect(decideFile?.contents).toMatchInlineSnapshot(`
76
+ "import { IllegalStateError } from '@event-driven-io/emmett';
77
+ import type { State } from './state.js';
78
+ import type { CreateListing } from './commands.js';
79
+ import type { ListingCreated } from './events.js';
80
+
81
+ export const decide = (command: CreateListing, state: State): ListingCreated => {
82
+ switch (command.type) {
83
+ case 'CreateListing': {
84
+ /**
85
+ * ## IMPLEMENTATION INSTRUCTIONS ##
86
+ *
87
+ * This command can directly emit one or more events based on the input.
88
+ *
89
+ * You should:
90
+ * - Validate the command input fields
91
+ * - Inspect the current domain \`state\` to determine if the command is allowed
92
+ * - If invalid, throw one of the following domain errors: \`NotFoundError\`, \`ValidationError\`, or \`IllegalStateError\`
93
+ * - If valid, return one or more events with the correct structure
94
+ *
95
+ * ⚠️ Only read from inputs — never mutate them. \`evolve.ts\` handles state updates.
96
+ */
97
+
98
+ // return {
99
+ // type: 'ListingCreated',
100
+ // data: { ...command.data },
101
+ // } as ListingCreated;
102
+
103
+ throw new IllegalStateError('Not yet implemented: ' + command.type);
104
+ }
105
+ default:
106
+ throw new IllegalStateError('Unexpected command type: ' + command.type);
107
+ }
108
+ };
109
+ "
110
+ `);
111
+ });
112
+ it('should include implementation instructions when prior events are required', async () => {
113
+ const spec = {
114
+ variant: 'specs',
115
+ flows: [
116
+ {
117
+ name: 'Host removes a listing',
118
+ slices: [
119
+ {
120
+ type: 'command',
121
+ name: 'Remove listing',
122
+ client: {
123
+ description: 'test',
124
+ specs: [],
125
+ },
126
+ server: {
127
+ description: 'test',
128
+ specs: {
129
+ name: 'Remove listing command',
130
+ rules: [
131
+ {
132
+ description: 'Should remove existing listing',
133
+ examples: [
134
+ {
135
+ description: 'Existing listing can be removed',
136
+ given: [
137
+ {
138
+ eventRef: 'ListingCreated',
139
+ exampleData: {
140
+ propertyId: 'listing_123',
141
+ listedAt: '2024-01-15T10:00:00Z',
142
+ },
143
+ },
144
+ ],
145
+ when: {
146
+ commandRef: 'RemoveListing',
147
+ exampleData: {
148
+ propertyId: 'listing_123',
149
+ },
150
+ },
151
+ then: [
152
+ {
153
+ eventRef: 'ListingRemoved',
154
+ exampleData: {
155
+ propertyId: 'listing_123',
156
+ removedAt: '2024-01-16T12:00:00Z',
157
+ },
158
+ },
159
+ ],
160
+ },
161
+ ],
162
+ },
163
+ ],
164
+ },
165
+ },
166
+ },
167
+ ],
168
+ },
169
+ ],
170
+ messages: [
171
+ {
172
+ type: 'command',
173
+ name: 'RemoveListing',
174
+ fields: [{ name: 'propertyId', type: 'string', required: true }],
175
+ },
176
+ {
177
+ type: 'event',
178
+ name: 'ListingCreated',
179
+ source: 'internal',
180
+ fields: [
181
+ { name: 'propertyId', type: 'string', required: true },
182
+ { name: 'listedAt', type: 'Date', required: true },
183
+ ],
184
+ },
185
+ {
186
+ type: 'event',
187
+ name: 'ListingRemoved',
188
+ source: 'internal',
189
+ fields: [
190
+ { name: 'propertyId', type: 'string', required: true },
191
+ { name: 'removedAt', type: 'Date', required: true },
192
+ ],
193
+ },
194
+ ],
195
+ };
196
+ const plans = await generateScaffoldFilePlans(spec.flows, spec.messages, undefined, 'src/domain/flows');
197
+ const decideFile = plans.find((p) => p.outputPath.endsWith('decide.ts'));
198
+ expect(decideFile?.contents).toMatchInlineSnapshot(`
199
+ "import { IllegalStateError } from '@event-driven-io/emmett';
200
+ import type { State } from './state.js';
201
+ import type { RemoveListing } from './commands.js';
202
+ import type { ListingRemoved } from './events.js';
203
+
204
+ export const decide = (command: RemoveListing, state: State): ListingRemoved => {
205
+ switch (command.type) {
206
+ case 'RemoveListing': {
207
+ /**
208
+ * ## IMPLEMENTATION INSTRUCTIONS ##
209
+ *
210
+ * This command requires evaluating prior state to determine if it can proceed.
211
+ *
212
+ * You should:
213
+ * - Validate the command input fields
214
+ * - Inspect the current domain \`state\` to determine if the command is allowed
215
+ * - If invalid, throw one of the following domain errors: \`NotFoundError\`, \`ValidationError\`, or \`IllegalStateError\`
216
+ * - If valid, return one or more events with the correct structure
217
+ *
218
+ * ⚠️ Only read from inputs — never mutate them. \`evolve.ts\` handles state updates.
219
+ */
220
+
221
+ // return {
222
+ // type: 'ListingRemoved',
223
+ // data: { ...command.data },
224
+ // } as ListingRemoved;
225
+
226
+ throw new IllegalStateError('Not yet implemented: ' + command.type);
227
+ }
228
+ default:
229
+ throw new IllegalStateError('Unexpected command type: ' + command.type);
230
+ }
231
+ };
232
+ "
233
+ `);
234
+ });
235
+ it('should generate a decide file that handles multiple GWTs including an error', async () => {
236
+ const spec = {
237
+ variant: 'specs',
238
+ flows: [
239
+ {
240
+ name: 'Host creates a listing',
241
+ slices: [
242
+ {
243
+ type: 'command',
244
+ name: 'Create listing',
245
+ client: {
246
+ description: 'test',
247
+ specs: [],
248
+ },
249
+ server: {
250
+ description: 'test',
251
+ specs: {
252
+ name: 'Create listing command',
253
+ rules: [
254
+ {
255
+ description: 'Should handle multiple scenarios including errors',
256
+ examples: [
257
+ {
258
+ description: 'User creates listing successfully',
259
+ when: {
260
+ commandRef: 'CreateListing',
261
+ exampleData: {
262
+ propertyId: 'listing_123',
263
+ title: 'Some Apartment',
264
+ listedAt: '2024-01-15T10:00:00Z',
265
+ rating: 4.8,
266
+ metadata: { foo: 'bar' },
267
+ },
268
+ },
269
+ then: [
270
+ {
271
+ eventRef: 'ListingCreated',
272
+ exampleData: {
273
+ propertyId: 'listing_123',
274
+ listedAt: '2024-01-15T10:00:00Z',
275
+ rating: 4.8,
276
+ metadata: { foo: 'bar' },
277
+ },
278
+ },
279
+ ],
280
+ },
281
+ {
282
+ description: 'User creates listing with empty title should fail',
283
+ when: {
284
+ commandRef: 'CreateListing',
285
+ exampleData: {
286
+ propertyId: 'listing_123',
287
+ title: '',
288
+ listedAt: '2024-01-15T10:00:00Z',
289
+ rating: 4.8,
290
+ metadata: {},
291
+ },
292
+ },
293
+ then: [
294
+ {
295
+ errorType: 'ValidationError',
296
+ message: 'Title must not be empty',
297
+ },
298
+ ],
299
+ },
300
+ ],
301
+ },
302
+ ],
303
+ },
304
+ },
305
+ },
306
+ ],
307
+ },
308
+ ],
309
+ messages: [
310
+ {
311
+ type: 'command',
312
+ name: 'CreateListing',
313
+ fields: [
314
+ { name: 'propertyId', type: 'string', required: true },
315
+ { name: 'title', type: 'string', required: true },
316
+ { name: 'listedAt', type: 'Date', required: true },
317
+ { name: 'rating', type: 'number', required: true },
318
+ { name: 'metadata', type: 'object', required: true },
319
+ ],
320
+ },
321
+ {
322
+ type: 'event',
323
+ name: 'ListingCreated',
324
+ source: 'internal',
325
+ fields: [
326
+ { name: 'propertyId', type: 'string', required: true },
327
+ { name: 'listedAt', type: 'Date', required: true },
328
+ { name: 'rating', type: 'number', required: true },
329
+ { name: 'metadata', type: 'object', required: true },
330
+ ],
331
+ },
332
+ ],
333
+ };
334
+ const plans = await generateScaffoldFilePlans(spec.flows, spec.messages, undefined, 'src/domain/flows');
335
+ const decideFile = plans.find((p) => p.outputPath.endsWith('decide.ts'));
336
+ expect(decideFile?.contents).toMatchInlineSnapshot(`
337
+ "import { IllegalStateError, ValidationError } from '@event-driven-io/emmett';
338
+ import type { State } from './state.js';
339
+ import type { CreateListing } from './commands.js';
340
+ import type { ListingCreated } from './events.js';
341
+
342
+ export const decide = (command: CreateListing, state: State): ListingCreated => {
343
+ switch (command.type) {
344
+ case 'CreateListing': {
345
+ /**
346
+ * ## IMPLEMENTATION INSTRUCTIONS ##
347
+ *
348
+ * This command can directly emit one or more events based on the input.
349
+ *
350
+ * You should:
351
+ * - Validate the command input fields
352
+ * - Inspect the current domain \`state\` to determine if the command is allowed
353
+ * - If invalid, throw one of the following domain errors: \`NotFoundError\`, \`ValidationError\`, or \`IllegalStateError\`
354
+ * - If valid, return one or more events with the correct structure
355
+ *
356
+ * ⚠️ Only read from inputs — never mutate them. \`evolve.ts\` handles state updates.
357
+ */
358
+
359
+ if (command.data.title === '') {
360
+ throw new ValidationError('Title must not be empty');
361
+ }
362
+
363
+ // return {
364
+ // type: 'ListingCreated',
365
+ // data: { ...command.data },
366
+ // } as ListingCreated;
367
+
368
+ throw new IllegalStateError('Not yet implemented: ' + command.type);
369
+ }
370
+ default:
371
+ throw new IllegalStateError('Unexpected command type: ' + command.type);
372
+ }
373
+ };
374
+ "
375
+ `);
376
+ });
377
+ it('should include integration return type and usage in decide function', async () => {
378
+ const spec = {
379
+ variant: 'specs',
380
+ flows: [
381
+ {
382
+ name: 'Assistant suggests items',
383
+ slices: [
384
+ {
385
+ type: 'command',
386
+ name: 'Suggest Items',
387
+ stream: 'session-${sessionId}',
388
+ client: {
389
+ description: 'test',
390
+ specs: [],
391
+ },
392
+ server: {
393
+ description: '',
394
+ data: [
395
+ {
396
+ target: {
397
+ type: 'Command',
398
+ name: 'SuggestItems',
399
+ },
400
+ destination: {
401
+ type: 'integration',
402
+ systems: ['AI'],
403
+ message: {
404
+ name: 'DoChat',
405
+ type: 'command',
406
+ },
407
+ },
408
+ _additionalInstructions: 'Ensure systemPrompt includes product catalogue guidance',
409
+ _withState: {
410
+ target: {
411
+ type: 'State',
412
+ name: 'Products',
413
+ },
414
+ origin: {
415
+ type: 'integration',
416
+ systems: ['product-catalog'],
417
+ },
418
+ },
419
+ },
420
+ {
421
+ target: {
422
+ type: 'Event',
423
+ name: 'ItemsSuggested',
424
+ },
425
+ destination: {
426
+ type: 'stream',
427
+ pattern: 'session-${sessionId}',
428
+ },
429
+ },
430
+ ],
431
+ specs: {
432
+ name: 'Suggest items command',
433
+ rules: [
434
+ {
435
+ description: 'Should suggest items successfully',
436
+ examples: [
437
+ {
438
+ description: 'User requests item suggestions',
439
+ when: {
440
+ commandRef: 'SuggestItems',
441
+ exampleData: {
442
+ sessionId: 'session-123',
443
+ prompt: 'What should I buy?',
444
+ },
445
+ },
446
+ then: [
447
+ {
448
+ eventRef: 'ItemsSuggested',
449
+ exampleData: {
450
+ sessionId: 'session-123',
451
+ items: [],
452
+ },
453
+ },
454
+ ],
455
+ },
456
+ ],
457
+ },
458
+ ],
459
+ },
460
+ },
461
+ },
462
+ ],
463
+ },
464
+ ],
465
+ messages: [
466
+ {
467
+ type: 'command',
468
+ name: 'SuggestItems',
469
+ fields: [
470
+ { name: 'sessionId', type: 'string', required: true },
471
+ { name: 'prompt', type: 'string', required: true },
472
+ ],
473
+ },
474
+ {
475
+ type: 'command',
476
+ name: 'DoChat',
477
+ fields: [
478
+ { name: 'sessionId', type: 'string', required: true },
479
+ { name: 'prompt', type: 'string', required: true },
480
+ { name: 'systemPrompt', type: 'string', required: false },
481
+ ],
482
+ },
483
+ {
484
+ type: 'event',
485
+ name: 'ItemsSuggested',
486
+ source: 'internal',
487
+ fields: [
488
+ { name: 'sessionId', type: 'string', required: true },
489
+ { name: 'items', type: 'Array<object>', required: true },
490
+ ],
491
+ },
492
+ {
493
+ type: 'state',
494
+ name: 'Products',
495
+ fields: [
496
+ {
497
+ name: 'products',
498
+ type: 'Array<{ id: string, name: string }>',
499
+ required: true,
500
+ },
501
+ ],
502
+ },
503
+ ],
504
+ integrations: [
505
+ {
506
+ name: 'AI',
507
+ source: '@auto-engineer/ai-integration',
508
+ description: '',
509
+ },
510
+ {
511
+ name: 'product-catalog',
512
+ source: '@auto-engineer/product-catalogue-integration',
513
+ description: '',
514
+ },
515
+ ],
516
+ };
517
+ const plans = await generateScaffoldFilePlans(spec.flows, spec.messages, spec.integrations);
518
+ const decideFile = plans.find((p) => p.outputPath.endsWith('decide.ts'));
519
+ expect(decideFile?.contents).toMatchInlineSnapshot(`
520
+ "import { IllegalStateError } from '@event-driven-io/emmett';
521
+ import type { State } from './state.js';
522
+ import type { SuggestItems } from './commands.js';
523
+ import type { ItemsSuggested } from './events.js';
524
+ import type { Products } from '@auto-engineer/product-catalogue-integration';
525
+
526
+ export const decide = (command: SuggestItems, state: State, products?: Products): ItemsSuggested => {
527
+ switch (command.type) {
528
+ case 'SuggestItems': {
529
+ /**
530
+ * ## IMPLEMENTATION INSTRUCTIONS ##
531
+ *
532
+ * This command can directly emit one or more events based on the input.
533
+ *
534
+ * You should:
535
+ * - Validate the command input fields
536
+ * - Inspect the current domain \`state\` to determine if the command is allowed
537
+ * - Use \`products\` (integration result) to enrich or filter the output
538
+ * - If invalid, throw one of the following domain errors: \`NotFoundError\`, \`ValidationError\`, or \`IllegalStateError\`
539
+ * - If valid, return one or more events with the correct structure
540
+ *
541
+ * ⚠️ Only read from inputs — never mutate them. \`evolve.ts\` handles state updates.
542
+ *
543
+ * Integration result shape (Products):
544
+ * products?.data = {
545
+ * products: Array<{
546
+ * id: string;
547
+ * name: string };
548
+ * }>;
549
+ * }
550
+ */
551
+
552
+ // return {
553
+ // type: 'ItemsSuggested',
554
+ // data: { ...command.data },
555
+ // } as ItemsSuggested;
556
+
557
+ throw new IllegalStateError('Not yet implemented: ' + command.type);
558
+ }
559
+ default:
560
+ throw new IllegalStateError('Unexpected command type: ' + command.type);
561
+ }
562
+ };
563
+ "
564
+ `);
565
+ });
566
+ });
567
+ //# sourceMappingURL=decide.specs.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"decide.specs.js","sourceRoot":"","sources":["../../../../../src/codegen/templates/command/decide.specs.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=decide.specs.specs.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"decide.specs.specs.d.ts","sourceRoot":"","sources":["../../../../../src/codegen/templates/command/decide.specs.specs.ts"],"names":[],"mappings":""}