@auto-engineer/server-generator-apollo-emmett 0.1.1

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 (272) hide show
  1. package/.tmp/server-test-output/server/package.json +26 -0
  2. package/.tmp/server-test-output/server/scripts/generate-schema.ts +31 -0
  3. package/.tmp/server-test-output/server/src/domain/flows/add-item/create-item/commands.ts +8 -0
  4. package/.tmp/server-test-output/server/src/domain/flows/add-item/create-item/decide.specs.ts +36 -0
  5. package/.tmp/server-test-output/server/src/domain/flows/add-item/create-item/decide.ts +33 -0
  6. package/.tmp/server-test-output/server/src/domain/flows/add-item/create-item/events.ts +10 -0
  7. package/.tmp/server-test-output/server/src/domain/flows/add-item/create-item/evolve.ts +28 -0
  8. package/.tmp/server-test-output/server/src/domain/flows/add-item/create-item/handle.ts +24 -0
  9. package/.tmp/server-test-output/server/src/domain/flows/add-item/create-item/mutation.resolver.ts +25 -0
  10. package/.tmp/server-test-output/server/src/domain/flows/add-item/create-item/register.ts +7 -0
  11. package/.tmp/server-test-output/server/src/domain/flows/add-item/create-item/state.ts +47 -0
  12. package/.tmp/server-test-output/server/src/domain/flows/add-item/get-available-items/projection.specs.ts +46 -0
  13. package/.tmp/server-test-output/server/src/domain/flows/add-item/get-available-items/projection.ts +38 -0
  14. package/.tmp/server-test-output/server/src/domain/flows/add-item/get-available-items/query.resolver.ts +39 -0
  15. package/.tmp/server-test-output/server/src/domain/flows/add-item/get-available-items/state.ts +5 -0
  16. package/.tmp/server-test-output/server/src/domain/flows/add-item/notify-new-item/commands.ts +8 -0
  17. package/.tmp/server-test-output/server/src/domain/flows/add-item/notify-new-item/decide.specs.ts +36 -0
  18. package/.tmp/server-test-output/server/src/domain/flows/add-item/notify-new-item/decide.ts +33 -0
  19. package/.tmp/server-test-output/server/src/domain/flows/add-item/notify-new-item/events.ts +3 -0
  20. package/.tmp/server-test-output/server/src/domain/flows/add-item/notify-new-item/evolve.ts +28 -0
  21. package/.tmp/server-test-output/server/src/domain/flows/add-item/notify-new-item/handle.ts +24 -0
  22. package/.tmp/server-test-output/server/src/domain/flows/add-item/notify-new-item/mutation.resolver.ts +25 -0
  23. package/.tmp/server-test-output/server/src/domain/flows/add-item/notify-new-item/register.ts +7 -0
  24. package/.tmp/server-test-output/server/src/domain/flows/add-item/notify-new-item/state.ts +47 -0
  25. package/.tmp/server-test-output/server/src/domain/flows/add-item/notify-on-new-item/react.specs.ts +49 -0
  26. package/.tmp/server-test-output/server/src/domain/flows/add-item/notify-on-new-item/react.ts +43 -0
  27. package/.tmp/server-test-output/server/src/domain/flows/add-item/notify-on-new-item/register.ts +24 -0
  28. package/.tmp/server-test-output/server/src/domain/shared/ReadModel.ts +26 -0
  29. package/.tmp/server-test-output/server/src/domain/shared/index.ts +4 -0
  30. package/.tmp/server-test-output/server/src/domain/shared/reactorSpecification.ts +257 -0
  31. package/.tmp/server-test-output/server/src/domain/shared/sendCommand.ts +21 -0
  32. package/.tmp/server-test-output/server/src/domain/shared/types.ts +31 -0
  33. package/.tmp/server-test-output/server/src/server.ts +43 -0
  34. package/.tmp/server-test-output/server/src/utils/index.ts +3 -0
  35. package/.tmp/server-test-output/server/src/utils/loadProjections.ts +30 -0
  36. package/.tmp/server-test-output/server/src/utils/loadRegisterFiles.ts +41 -0
  37. package/.tmp/server-test-output/server/src/utils/loadResolvers.ts +36 -0
  38. package/.tmp/server-test-output/server/tsconfig.json +19 -0
  39. package/.tmp/server-test-output/server/vitest.config.ts +7 -0
  40. package/.turbo/turbo-build.log +5 -0
  41. package/.turbo/turbo-format.log +57 -0
  42. package/.turbo/turbo-lint.log +5 -0
  43. package/.turbo/turbo-test.log +113 -0
  44. package/.turbo/turbo-type-check.log +4 -0
  45. package/CHANGELOG.md +141 -0
  46. package/DEBUG.md +177 -0
  47. package/LICENSE +10 -0
  48. package/README.md +185 -0
  49. package/dist/cli-manifest.d.ts +3 -0
  50. package/dist/cli-manifest.d.ts.map +1 -0
  51. package/dist/cli-manifest.js +8 -0
  52. package/dist/cli-manifest.js.map +1 -0
  53. package/dist/codegen/extract/commands.d.ts +19 -0
  54. package/dist/codegen/extract/commands.d.ts.map +1 -0
  55. package/dist/codegen/extract/commands.js +52 -0
  56. package/dist/codegen/extract/commands.js.map +1 -0
  57. package/dist/codegen/extract/data-sink.d.ts +6 -0
  58. package/dist/codegen/extract/data-sink.d.ts.map +1 -0
  59. package/dist/codegen/extract/data-sink.js +39 -0
  60. package/dist/codegen/extract/data-sink.js.map +1 -0
  61. package/dist/codegen/extract/events.d.ts +10 -0
  62. package/dist/codegen/extract/events.d.ts.map +1 -0
  63. package/dist/codegen/extract/events.js +32 -0
  64. package/dist/codegen/extract/events.js.map +1 -0
  65. package/dist/codegen/extract/fields.d.ts +3 -0
  66. package/dist/codegen/extract/fields.d.ts.map +1 -0
  67. package/dist/codegen/extract/fields.js +9 -0
  68. package/dist/codegen/extract/fields.js.map +1 -0
  69. package/dist/codegen/extract/graphql.d.ts +14 -0
  70. package/dist/codegen/extract/graphql.d.ts.map +1 -0
  71. package/dist/codegen/extract/graphql.js +81 -0
  72. package/dist/codegen/extract/graphql.js.map +1 -0
  73. package/dist/codegen/extract/gwt.d.ts +6 -0
  74. package/dist/codegen/extract/gwt.d.ts.map +1 -0
  75. package/dist/codegen/extract/gwt.js +61 -0
  76. package/dist/codegen/extract/gwt.js.map +1 -0
  77. package/dist/codegen/extract/index.d.ts +8 -0
  78. package/dist/codegen/extract/index.d.ts.map +1 -0
  79. package/dist/codegen/extract/index.js +8 -0
  80. package/dist/codegen/extract/index.js.map +1 -0
  81. package/dist/codegen/extract/messages.d.ts +24 -0
  82. package/dist/codegen/extract/messages.d.ts.map +1 -0
  83. package/dist/codegen/extract/messages.js +131 -0
  84. package/dist/codegen/extract/messages.js.map +1 -0
  85. package/dist/codegen/extract/projection.d.ts +4 -0
  86. package/dist/codegen/extract/projection.d.ts.map +1 -0
  87. package/dist/codegen/extract/projection.js +30 -0
  88. package/dist/codegen/extract/projection.js.map +1 -0
  89. package/dist/codegen/extract/query.d.ts +11 -0
  90. package/dist/codegen/extract/query.d.ts.map +1 -0
  91. package/dist/codegen/extract/query.js +11 -0
  92. package/dist/codegen/extract/query.js.map +1 -0
  93. package/dist/codegen/extract/states.d.ts +5 -0
  94. package/dist/codegen/extract/states.d.ts.map +1 -0
  95. package/dist/codegen/extract/states.js +35 -0
  96. package/dist/codegen/extract/states.js.map +1 -0
  97. package/dist/codegen/scaffoldFromSchema.d.ts +9 -0
  98. package/dist/codegen/scaffoldFromSchema.d.ts.map +1 -0
  99. package/dist/codegen/scaffoldFromSchema.integration.specs.d.ts +2 -0
  100. package/dist/codegen/scaffoldFromSchema.integration.specs.d.ts.map +1 -0
  101. package/dist/codegen/scaffoldFromSchema.integration.specs.js +59 -0
  102. package/dist/codegen/scaffoldFromSchema.integration.specs.js.map +1 -0
  103. package/dist/codegen/scaffoldFromSchema.js +326 -0
  104. package/dist/codegen/scaffoldFromSchema.js.map +1 -0
  105. package/dist/codegen/templates/command/commands.specs.ts +90 -0
  106. package/dist/codegen/templates/command/commands.ts.ejs +11 -0
  107. package/dist/codegen/templates/command/decide.specs.specs.ts +265 -0
  108. package/dist/codegen/templates/command/decide.specs.ts +542 -0
  109. package/dist/codegen/templates/command/decide.specs.ts.ejs +51 -0
  110. package/dist/codegen/templates/command/decide.ts.ejs +107 -0
  111. package/dist/codegen/templates/command/events.specs.ts +106 -0
  112. package/dist/codegen/templates/command/events.ts.ejs +14 -0
  113. package/dist/codegen/templates/command/evolve.specs.ts +102 -0
  114. package/dist/codegen/templates/command/evolve.ts.ejs +39 -0
  115. package/dist/codegen/templates/command/handle.specs.ts +313 -0
  116. package/dist/codegen/templates/command/handle.ts.ejs +111 -0
  117. package/dist/codegen/templates/command/mutation.resolver.specs.ts +115 -0
  118. package/dist/codegen/templates/command/mutation.resolver.ts.ejs +25 -0
  119. package/dist/codegen/templates/command/register.specs.ts +107 -0
  120. package/dist/codegen/templates/command/register.ts.ejs +12 -0
  121. package/dist/codegen/templates/command/state.specs.ts +127 -0
  122. package/dist/codegen/templates/command/state.ts.ejs +47 -0
  123. package/dist/codegen/templates/query/projection.specs.specs..ts +276 -0
  124. package/dist/codegen/templates/query/projection.specs.ts +348 -0
  125. package/dist/codegen/templates/query/projection.specs.ts.ejs +71 -0
  126. package/dist/codegen/templates/query/projection.ts.ejs +121 -0
  127. package/dist/codegen/templates/query/query.resolver.specs.ts +254 -0
  128. package/dist/codegen/templates/query/query.resolver.ts.ejs +98 -0
  129. package/dist/codegen/templates/query/state.specs.ts +70 -0
  130. package/dist/codegen/templates/query/state.ts.ejs +7 -0
  131. package/dist/codegen/templates/react/react.specs.specs.ts +214 -0
  132. package/dist/codegen/templates/react/react.specs.ts +241 -0
  133. package/dist/codegen/templates/react/react.specs.ts.ejs +80 -0
  134. package/dist/codegen/templates/react/react.ts.ejs +56 -0
  135. package/dist/codegen/templates/react/register.specs.ts +222 -0
  136. package/dist/codegen/templates/react/register.ts.ejs +39 -0
  137. package/dist/codegen/test-data/specVariant1.d.ts +4 -0
  138. package/dist/codegen/test-data/specVariant1.d.ts.map +1 -0
  139. package/dist/codegen/test-data/specVariant1.js +185 -0
  140. package/dist/codegen/test-data/specVariant1.js.map +1 -0
  141. package/dist/codegen/types.d.ts +35 -0
  142. package/dist/codegen/types.d.ts.map +1 -0
  143. package/dist/codegen/types.js +2 -0
  144. package/dist/codegen/types.js.map +1 -0
  145. package/dist/codegen/utils/path.d.ts +4 -0
  146. package/dist/codegen/utils/path.d.ts.map +1 -0
  147. package/dist/codegen/utils/path.js +18 -0
  148. package/dist/codegen/utils/path.js.map +1 -0
  149. package/dist/commands/generate-server.d.ts +81 -0
  150. package/dist/commands/generate-server.d.ts.map +1 -0
  151. package/dist/commands/generate-server.js +383 -0
  152. package/dist/commands/generate-server.js.map +1 -0
  153. package/dist/domain/shared/ReadModel.d.ts +10 -0
  154. package/dist/domain/shared/ReadModel.d.ts.map +1 -0
  155. package/dist/domain/shared/ReadModel.js +19 -0
  156. package/dist/domain/shared/ReadModel.js.map +1 -0
  157. package/dist/domain/shared/ReadModel.ts +26 -0
  158. package/dist/domain/shared/index.d.ts +5 -0
  159. package/dist/domain/shared/index.d.ts.map +1 -0
  160. package/dist/domain/shared/index.js +5 -0
  161. package/dist/domain/shared/index.js.map +1 -0
  162. package/dist/domain/shared/index.ts +4 -0
  163. package/dist/domain/shared/reactorSpecification.d.ts +35 -0
  164. package/dist/domain/shared/reactorSpecification.d.ts.map +1 -0
  165. package/dist/domain/shared/reactorSpecification.js +155 -0
  166. package/dist/domain/shared/reactorSpecification.js.map +1 -0
  167. package/dist/domain/shared/reactorSpecification.ts +257 -0
  168. package/dist/domain/shared/sendCommand.d.ts +4 -0
  169. package/dist/domain/shared/sendCommand.d.ts.map +1 -0
  170. package/dist/domain/shared/sendCommand.js +17 -0
  171. package/dist/domain/shared/sendCommand.js.map +1 -0
  172. package/dist/domain/shared/sendCommand.ts +21 -0
  173. package/dist/domain/shared/types.d.ts +19 -0
  174. package/dist/domain/shared/types.d.ts.map +1 -0
  175. package/dist/domain/shared/types.js +39 -0
  176. package/dist/domain/shared/types.js.map +1 -0
  177. package/dist/domain/shared/types.ts +31 -0
  178. package/dist/index.d.ts +3 -0
  179. package/dist/index.d.ts.map +1 -0
  180. package/dist/index.js +3 -0
  181. package/dist/index.js.map +1 -0
  182. package/dist/server.d.ts +2 -0
  183. package/dist/server.d.ts.map +1 -0
  184. package/dist/server.js +33 -0
  185. package/dist/server.js.map +1 -0
  186. package/dist/server.ts +43 -0
  187. package/dist/utils/index.d.ts +4 -0
  188. package/dist/utils/index.d.ts.map +1 -0
  189. package/dist/utils/index.js +4 -0
  190. package/dist/utils/index.js.map +1 -0
  191. package/dist/utils/index.ts +3 -0
  192. package/dist/utils/loadProjections.d.ts +3 -0
  193. package/dist/utils/loadProjections.d.ts.map +1 -0
  194. package/dist/utils/loadProjections.js +23 -0
  195. package/dist/utils/loadProjections.js.map +1 -0
  196. package/dist/utils/loadProjections.ts +30 -0
  197. package/dist/utils/loadRegisterFiles.d.ts +6 -0
  198. package/dist/utils/loadRegisterFiles.d.ts.map +1 -0
  199. package/dist/utils/loadRegisterFiles.js +28 -0
  200. package/dist/utils/loadRegisterFiles.js.map +1 -0
  201. package/dist/utils/loadRegisterFiles.ts +41 -0
  202. package/dist/utils/loadResolvers.d.ts +5 -0
  203. package/dist/utils/loadResolvers.d.ts.map +1 -0
  204. package/dist/utils/loadResolvers.js +27 -0
  205. package/dist/utils/loadResolvers.js.map +1 -0
  206. package/dist/utils/loadResolvers.ts +36 -0
  207. package/package.json +55 -0
  208. package/src/cli-manifest.ts +9 -0
  209. package/src/codegen/extract/commands.ts +79 -0
  210. package/src/codegen/extract/data-sink.ts +45 -0
  211. package/src/codegen/extract/events.ts +46 -0
  212. package/src/codegen/extract/fields.ts +17 -0
  213. package/src/codegen/extract/graphql.ts +103 -0
  214. package/src/codegen/extract/gwt.ts +75 -0
  215. package/src/codegen/extract/index.ts +7 -0
  216. package/src/codegen/extract/messages.ts +196 -0
  217. package/src/codegen/extract/projection.ts +47 -0
  218. package/src/codegen/extract/query.ts +18 -0
  219. package/src/codegen/extract/states.ts +45 -0
  220. package/src/codegen/scaffoldFromSchema.integration.specs.ts +71 -0
  221. package/src/codegen/scaffoldFromSchema.ts +440 -0
  222. package/src/codegen/templates/command/commands.specs.ts +90 -0
  223. package/src/codegen/templates/command/commands.ts.ejs +11 -0
  224. package/src/codegen/templates/command/decide.specs.specs.ts +265 -0
  225. package/src/codegen/templates/command/decide.specs.ts +542 -0
  226. package/src/codegen/templates/command/decide.specs.ts.ejs +51 -0
  227. package/src/codegen/templates/command/decide.ts.ejs +107 -0
  228. package/src/codegen/templates/command/events.specs.ts +106 -0
  229. package/src/codegen/templates/command/events.ts.ejs +14 -0
  230. package/src/codegen/templates/command/evolve.specs.ts +102 -0
  231. package/src/codegen/templates/command/evolve.ts.ejs +39 -0
  232. package/src/codegen/templates/command/handle.specs.ts +313 -0
  233. package/src/codegen/templates/command/handle.ts.ejs +111 -0
  234. package/src/codegen/templates/command/mutation.resolver.specs.ts +115 -0
  235. package/src/codegen/templates/command/mutation.resolver.ts.ejs +25 -0
  236. package/src/codegen/templates/command/register.specs.ts +107 -0
  237. package/src/codegen/templates/command/register.ts.ejs +12 -0
  238. package/src/codegen/templates/command/state.specs.ts +127 -0
  239. package/src/codegen/templates/command/state.ts.ejs +47 -0
  240. package/src/codegen/templates/query/projection.specs.specs..ts +276 -0
  241. package/src/codegen/templates/query/projection.specs.ts +348 -0
  242. package/src/codegen/templates/query/projection.specs.ts.ejs +71 -0
  243. package/src/codegen/templates/query/projection.ts.ejs +121 -0
  244. package/src/codegen/templates/query/query.resolver.specs.ts +254 -0
  245. package/src/codegen/templates/query/query.resolver.ts.ejs +98 -0
  246. package/src/codegen/templates/query/state.specs.ts +70 -0
  247. package/src/codegen/templates/query/state.ts.ejs +7 -0
  248. package/src/codegen/templates/react/react.specs.specs.ts +214 -0
  249. package/src/codegen/templates/react/react.specs.ts +241 -0
  250. package/src/codegen/templates/react/react.specs.ts.ejs +80 -0
  251. package/src/codegen/templates/react/react.ts.ejs +56 -0
  252. package/src/codegen/templates/react/register.specs.ts +222 -0
  253. package/src/codegen/templates/react/register.ts.ejs +39 -0
  254. package/src/codegen/test-data/specVariant1.json +212 -0
  255. package/src/codegen/test-data/specVariant1.ts +188 -0
  256. package/src/codegen/test-data/specVariant2.json +396 -0
  257. package/src/codegen/types.ts +35 -0
  258. package/src/codegen/utils/path.ts +20 -0
  259. package/src/commands/generate-server.ts +517 -0
  260. package/src/domain/shared/ReadModel.ts +26 -0
  261. package/src/domain/shared/index.ts +4 -0
  262. package/src/domain/shared/reactorSpecification.ts +257 -0
  263. package/src/domain/shared/sendCommand.ts +21 -0
  264. package/src/domain/shared/types.ts +31 -0
  265. package/src/index.ts +2 -0
  266. package/src/server.ts +43 -0
  267. package/src/utils/index.ts +3 -0
  268. package/src/utils/loadProjections.ts +30 -0
  269. package/src/utils/loadRegisterFiles.ts +41 -0
  270. package/src/utils/loadResolvers.ts +36 -0
  271. package/tsconfig.json +12 -0
  272. package/tsconfig.tsbuildinfo +1 -0
@@ -0,0 +1,396 @@
1
+ {
2
+ "variant": "specs",
3
+ "flows": [
4
+ {
5
+ "name": "Seasonal Assistant",
6
+ "slices": [
7
+ {
8
+ "type": "command",
9
+ "name": "enters shopping criteria into assistant",
10
+ "client": {
11
+ "specs": [
12
+ {
13
+ "description": "Assistant Chat Interface",
14
+ "should": [
15
+ "allow shopper to describe their shopping needs in natural language",
16
+ "provide a text input for entering criteria",
17
+ "show examples of what to include (age, interests, budget)"
18
+ ]
19
+ }
20
+ ]
21
+ },
22
+ "clientDescription": "",
23
+ "server": {
24
+ "specs": [
25
+ {
26
+ "description": "When shopper submits criteria, a shopping session is started",
27
+ "should": [],
28
+ "when": {
29
+ "type": "EnterShoppingCriteria",
30
+ "data": {
31
+ "shopperId": "shopper-123",
32
+ "criteria": "I need back-to-school items for my 7-year-old daughter who loves soccer and crafts, and my 12-year-old son who is into computers and Magic the Gathering."
33
+ },
34
+ "__messageCategory": "command"
35
+ },
36
+ "then": [
37
+ {
38
+ "type": "ShoppingCriteriaEntered",
39
+ "data": {
40
+ "sessionId": "session-abc",
41
+ "shopperId": "shopper-123",
42
+ "criteria": "I need back-to-school items for my 7-year-old daughter who loves soccer and crafts, and my 12-year-old son who is into computers and Magic the Gathering.",
43
+ "timestamp": "2025-07-17T12:07:47.400Z"
44
+ },
45
+ "__messageCategory": "event"
46
+ }
47
+ ]
48
+ }
49
+ ],
50
+ "data": [
51
+ {
52
+ "target": {
53
+ "type": "Event",
54
+ "name": "ShoppingCriteriaEntered"
55
+ },
56
+ "destination": {
57
+ "type": "stream",
58
+ "pattern": "shopping-session-{id}"
59
+ },
60
+ "__type": "sink"
61
+ }
62
+ ]
63
+ },
64
+ "serverDescription": ""
65
+ },
66
+ {
67
+ "type": "reaction",
68
+ "name": "finds items in product catalogue",
69
+ "server": {
70
+ "specs": [
71
+ {
72
+ "description": "When shopping criteria are entered, request wishlist creation",
73
+ "should": [],
74
+ "when": [
75
+ {
76
+ "type": "ShoppingCriteriaEntered",
77
+ "data": {
78
+ "sessionId": "session-abc",
79
+ "shopperId": "shopper-123",
80
+ "criteria": "I need back-to-school items for my 7-year-old daughter who loves soccer and crafts, and my 12-year-old son who is into computers and Magic the Gathering.",
81
+ "timestamp": "2025-07-17T12:07:47.400Z"
82
+ },
83
+ "__messageCategory": "event"
84
+ }
85
+ ],
86
+ "then": [
87
+ {
88
+ "type": "DoChat",
89
+ "data": {
90
+ "sessionId": "session-abc",
91
+ "prompt": "I need back-to-school items for my 7-year-old daughter who loves soccer and crafts, and my 12-year-old son who is into computers and Magic the Gathering."
92
+ },
93
+ "__messageCategory": "command"
94
+ }
95
+ ]
96
+ }
97
+ ]
98
+ },
99
+ "serverDescription": ""
100
+ },
101
+ {
102
+ "type": "command",
103
+ "name": "Do Chat",
104
+ "server": {
105
+ "specs": [
106
+ {
107
+ "description": "When chat is triggered, AI suggests items based on product catalog",
108
+ "should": [],
109
+ "when": {
110
+ "type": "DoChat",
111
+ "data": {
112
+ "sessionId": "session-abc",
113
+ "prompt": "I need back-to-school items for my 7-year-old daughter who loves soccer and crafts, and my 12-year-old son who is into computers and Magic the Gathering."
114
+ },
115
+ "__messageCategory": "command"
116
+ },
117
+ "then": [
118
+ {
119
+ "type": "ChatCompleted",
120
+ "data": {
121
+ "sessionId": "session-abc",
122
+ "suggestedItems": [
123
+ {
124
+ "productId": "prod-soccer-ball",
125
+ "name": "Super Soccer Ball",
126
+ "quantity": 1,
127
+ "reason": "Perfect for your daughter who loves soccer"
128
+ },
129
+ {
130
+ "productId": "prod-craft-kit",
131
+ "name": "Deluxe Craft Kit",
132
+ "quantity": 1,
133
+ "reason": "Great for creative activities and crafts"
134
+ },
135
+ {
136
+ "productId": "prod-laptop-bag",
137
+ "name": "Tech Laptop Backpack",
138
+ "quantity": 1,
139
+ "reason": "Essential for your son's school computer needs"
140
+ },
141
+ {
142
+ "productId": "prod-mtg-starter",
143
+ "name": "Magic the Gathering Starter Set",
144
+ "quantity": 1,
145
+ "reason": "Ideal starter set for Magic the Gathering enthusiasts"
146
+ }
147
+ ],
148
+ "timestamp": "2025-07-17T12:07:47.400Z"
149
+ },
150
+ "__messageCategory": "event"
151
+ }
152
+ ]
153
+ }
154
+ ],
155
+ "data": [
156
+ {
157
+ "target": {
158
+ "type": "Command",
159
+ "name": "DoChat"
160
+ },
161
+ "destination": {
162
+ "type": "integration",
163
+ "systems": ["AI"]
164
+ },
165
+ "__type": "sink"
166
+ },
167
+ {
168
+ "target": {
169
+ "type": "State",
170
+ "name": "Products"
171
+ },
172
+ "origin": {
173
+ "type": "integration",
174
+ "systems": ["ProductCatalogService"]
175
+ },
176
+ "__type": "source"
177
+ }
178
+ ]
179
+ },
180
+ "serverDescription": ""
181
+ },
182
+ {
183
+ "type": "query",
184
+ "name": "views suggested items",
185
+ "request": {
186
+ "kind": "Document",
187
+ "definitions": [
188
+ {
189
+ "kind": "OperationDefinition",
190
+ "operation": "query",
191
+ "name": { "kind": "Name", "value": "GetSuggestedItems" },
192
+ "variableDefinitions": [
193
+ {
194
+ "kind": "VariableDefinition",
195
+ "variable": {
196
+ "kind": "Variable",
197
+ "name": { "kind": "Name", "value": "sessionId" }
198
+ },
199
+ "type": {
200
+ "kind": "NonNullType",
201
+ "type": {
202
+ "kind": "NamedType",
203
+ "name": { "kind": "Name", "value": "ID" }
204
+ }
205
+ },
206
+ "directives": []
207
+ }
208
+ ],
209
+ "directives": [],
210
+ "selectionSet": {
211
+ "kind": "SelectionSet",
212
+ "selections": [
213
+ {
214
+ "kind": "Field",
215
+ "name": { "kind": "Name", "value": "suggestedItems" },
216
+ "arguments": [
217
+ {
218
+ "kind": "Argument",
219
+ "name": { "kind": "Name", "value": "sessionId" },
220
+ "value": {
221
+ "kind": "Variable",
222
+ "name": { "kind": "Name", "value": "sessionId" }
223
+ }
224
+ }
225
+ ],
226
+ "selectionSet": {
227
+ "kind": "SelectionSet",
228
+ "selections": [
229
+ {
230
+ "kind": "Field",
231
+ "name": { "kind": "Name", "value": "items" },
232
+ "selectionSet": {
233
+ "kind": "SelectionSet",
234
+ "selections": [
235
+ { "kind": "Field", "name": { "kind": "Name", "value": "productId" } },
236
+ { "kind": "Field", "name": { "kind": "Name", "value": "name" } },
237
+ { "kind": "Field", "name": { "kind": "Name", "value": "quantity" } },
238
+ { "kind": "Field", "name": { "kind": "Name", "value": "reason" } }
239
+ ]
240
+ }
241
+ }
242
+ ]
243
+ }
244
+ }
245
+ ]
246
+ }
247
+ }
248
+ ],
249
+ "loc": { "start": 0, "end": 229 }
250
+ },
251
+ "client": {
252
+ "specs": [
253
+ {
254
+ "description": "Suggested Items Screen",
255
+ "should": [
256
+ "display all suggested items with names and reasons",
257
+ "show quantity selectors for each item",
258
+ "have an \"Add to Cart\" button for selected items",
259
+ "allow removing items from the suggestions"
260
+ ]
261
+ }
262
+ ]
263
+ },
264
+ "clientDescription": "",
265
+ "server": {
266
+ "specs": [
267
+ {
268
+ "description": "Suggested items are available for viewing",
269
+ "should": [],
270
+ "when": {
271
+ "type": "ChatCompleted",
272
+ "data": {
273
+ "sessionId": "session-abc",
274
+ "suggestedItems": [
275
+ {
276
+ "productId": "prod-soccer-ball",
277
+ "name": "Super Soccer Ball",
278
+ "quantity": 1,
279
+ "reason": "Perfect for your daughter who loves soccer"
280
+ },
281
+ {
282
+ "productId": "prod-craft-kit",
283
+ "name": "Deluxe Craft Kit",
284
+ "quantity": 1,
285
+ "reason": "Great for creative activities and crafts"
286
+ },
287
+ {
288
+ "productId": "prod-laptop-bag",
289
+ "name": "Tech Laptop Backpack",
290
+ "quantity": 1,
291
+ "reason": "Essential for your son's school computer needs"
292
+ },
293
+ {
294
+ "productId": "prod-mtg-starter",
295
+ "name": "Magic the Gathering Starter Set",
296
+ "quantity": 1,
297
+ "reason": "Ideal starter set for Magic the Gathering enthusiasts"
298
+ }
299
+ ],
300
+ "timestamp": "2025-07-17T12:07:47.401Z"
301
+ },
302
+ "__messageCategory": "event"
303
+ },
304
+ "then": [
305
+ {
306
+ "type": "SuggestedItems",
307
+ "data": {
308
+ "sessionId": "session-abc",
309
+ "items": [
310
+ { "productId": "prod-soccer-ball", "quantity": 1 },
311
+ { "productId": "prod-craft-kit", "quantity": 1 },
312
+ { "productId": "prod-laptop-bag", "quantity": 1 },
313
+ { "productId": "prod-mtg-starter", "quantity": 1 }
314
+ ]
315
+ },
316
+ "__messageCategory": "state"
317
+ }
318
+ ]
319
+ }
320
+ ],
321
+ "data": [
322
+ {
323
+ "target": {
324
+ "type": "State",
325
+ "name": "SuggestedItems"
326
+ },
327
+ "origin": {
328
+ "type": "projection",
329
+ "name": "SuggestedItemsProjection"
330
+ },
331
+ "__type": "source"
332
+ }
333
+ ]
334
+ },
335
+ "serverDescription": ""
336
+ },
337
+ {
338
+ "type": "command",
339
+ "name": "accepts items and adds to their cart",
340
+ "client": {
341
+ "specs": [
342
+ {
343
+ "description": "Suggested Items Screen",
344
+ "should": [
345
+ "allow selecting specific items to add",
346
+ "update quantities before adding to cart",
347
+ "provide feedback when items are added"
348
+ ]
349
+ }
350
+ ]
351
+ },
352
+ "clientDescription": "",
353
+ "server": {
354
+ "specs": [
355
+ {
356
+ "description": "When shopper accepts items, they are added to cart",
357
+ "should": [],
358
+ "when": {
359
+ "type": "AddItemsToCart",
360
+ "data": {
361
+ "sessionId": "session-abc",
362
+ "items": [
363
+ { "productId": "prod-soccer-ball", "quantity": 1 },
364
+ { "productId": "prod-craft-kit", "quantity": 1 },
365
+ { "productId": "prod-laptop-bag", "quantity": 1 },
366
+ { "productId": "prod-mtg-starter", "quantity": 1 }
367
+ ]
368
+ },
369
+ "__messageCategory": "command"
370
+ },
371
+ "then": [
372
+ {
373
+ "type": "ItemsAddedToCart",
374
+ "data": {
375
+ "cartId": "cart-xyz",
376
+ "shopperId": "shopper-123",
377
+ "items": [
378
+ { "productId": "prod-soccer-ball", "quantity": 1 },
379
+ { "productId": "prod-craft-kit", "quantity": 1 },
380
+ { "productId": "prod-laptop-bag", "quantity": 1 },
381
+ { "productId": "prod-mtg-starter", "quantity": 1 }
382
+ ],
383
+ "timestamp": "2025-07-17T12:07:47.401Z"
384
+ },
385
+ "__messageCategory": "event"
386
+ }
387
+ ]
388
+ }
389
+ ]
390
+ },
391
+ "serverDescription": ""
392
+ }
393
+ ]
394
+ }
395
+ ]
396
+ }
@@ -0,0 +1,35 @@
1
+ import { CommandExample, EventExample } from '@auto-engineer/flow';
2
+
3
+ export interface Message {
4
+ type: string;
5
+ fields: Field[];
6
+ source?: 'when' | 'given' | 'then';
7
+ sourceFlowName?: string;
8
+ sourceSliceName?: string;
9
+ }
10
+
11
+ export interface Field {
12
+ name: string;
13
+ tsType: string;
14
+ required: boolean;
15
+ }
16
+
17
+ export interface MessageDefinition {
18
+ type: 'command' | 'event' | 'state';
19
+ name: string;
20
+ fields?: Array<{
21
+ name: string;
22
+ type: string;
23
+ required?: boolean;
24
+ description?: string;
25
+ defaultValue?: unknown;
26
+ }>;
27
+ metadata?: unknown;
28
+ description?: string;
29
+ }
30
+
31
+ export interface GwtCondition {
32
+ given?: EventExample[];
33
+ when: CommandExample;
34
+ then: Array<EventExample | { errorType: string; message?: string }>;
35
+ }
@@ -0,0 +1,20 @@
1
+ import path from 'path';
2
+ import { mkdir } from 'fs/promises';
3
+ import { existsSync } from 'fs';
4
+
5
+ export function toKebabCase(str: string): string {
6
+ return str
7
+ .replace(/([a-z])([A-Z])/g, '$1-$2')
8
+ .replace(/\s+/g, '-')
9
+ .toLowerCase();
10
+ }
11
+
12
+ export function ensureDirPath(...segments: string[]): string {
13
+ return path.join(...segments);
14
+ }
15
+
16
+ export async function ensureDirExists(dirPath: string): Promise<void> {
17
+ if (!existsSync(dirPath)) {
18
+ await mkdir(dirPath, { recursive: true });
19
+ }
20
+ }