@eventcatalog/core 0.1.18 → 0.2.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 (358) hide show
  1. package/.next/BUILD_ID +1 -1
  2. package/.next/build-manifest.json +126 -43
  3. package/.next/cache/.tsbuildinfo +1 -1
  4. package/.next/cache/config.json +3 -3
  5. package/.next/cache/eslint/.cache_1bay4w0 +1 -1
  6. package/.next/cache/next-server.js.nft.json +1 -1
  7. package/.next/cache/webpack/client-production/0.pack +0 -0
  8. package/.next/cache/webpack/client-production/index.pack +0 -0
  9. package/.next/cache/webpack/server-production/0.pack +0 -0
  10. package/.next/cache/webpack/server-production/index.pack +0 -0
  11. package/.next/next-server.js.nft.json +1 -1
  12. package/.next/prerender-manifest.json +1 -1
  13. package/.next/routes-manifest.json +1 -1
  14. package/.next/server/chunks/{730.js → 189.js} +184 -2
  15. package/.next/server/chunks/267.js +255 -0
  16. package/.next/server/chunks/{681.js → 29.js} +277 -40
  17. package/.next/server/chunks/484.js +12 -3
  18. package/.next/server/chunks/50.js +392 -0
  19. package/.next/server/chunks/526.js +15 -4
  20. package/.next/server/chunks/565.js +3 -3
  21. package/.next/server/chunks/778.js +76 -0
  22. package/.next/server/chunks/797.js +92 -0
  23. package/.next/server/chunks/854.js +103 -0
  24. package/.next/server/chunks/938.js +3 -2
  25. package/.next/server/chunks/944.js +102 -153
  26. package/.next/server/pages/404.html +1 -1
  27. package/.next/server/pages/500.html +1 -1
  28. package/.next/server/pages/_app.js +48 -27
  29. package/.next/server/pages/domains/Shopping/events/AddedItemToCart/logs.html +1 -0
  30. package/.next/server/pages/domains/Shopping/events/AddedItemToCart/logs.json +1 -0
  31. package/.next/server/pages/domains/Shopping/events/AddedItemToCart/v/0.0.1.html +60 -0
  32. package/.next/server/pages/domains/Shopping/events/AddedItemToCart/v/0.0.1.json +1 -0
  33. package/.next/server/pages/domains/Shopping/events/AddedItemToCart/v/0.0.2.html +67 -0
  34. package/.next/server/pages/domains/Shopping/events/AddedItemToCart/v/0.0.2.json +1 -0
  35. package/.next/server/pages/domains/Shopping/events/AddedItemToCart.html +67 -0
  36. package/.next/server/pages/domains/Shopping/events/AddedItemToCart.json +1 -0
  37. package/.next/server/pages/domains/Shopping/events/RemovedItemFromCart/logs.html +1 -0
  38. package/{out/_next/data/KZ2mEdt5MUAVDtbybTBw1 → .next/server/pages/domains/Shopping}/events/RemovedItemFromCart/logs.json +0 -0
  39. package/.next/server/pages/domains/Shopping/events/RemovedItemFromCart.html +49 -0
  40. package/.next/server/pages/domains/Shopping/events/RemovedItemFromCart.json +1 -0
  41. package/.next/server/pages/domains/Shopping.html +2 -0
  42. package/.next/server/pages/domains/Shopping.json +1 -0
  43. package/.next/server/pages/domains/[domain]/events/[name]/logs.js +243 -0
  44. package/.next/server/pages/domains/[domain]/events/[name]/logs.js.nft.json +1 -0
  45. package/.next/server/pages/domains/[domain]/events/[name]/v/[version].js +352 -0
  46. package/.next/server/pages/domains/[domain]/events/[name]/v/[version].js.nft.json +1 -0
  47. package/.next/server/pages/domains/[domain]/events/[name].js +270 -0
  48. package/.next/server/pages/domains/[domain]/events/[name].js.nft.json +1 -0
  49. package/.next/server/pages/domains/[domain]/services/[name].js +318 -0
  50. package/.next/server/pages/domains/[domain]/services/[name].js.nft.json +1 -0
  51. package/.next/server/pages/domains/[domain].js +504 -0
  52. package/.next/server/pages/domains/[domain].js.nft.json +1 -0
  53. package/.next/server/pages/domains.html +2 -0
  54. package/.next/server/pages/domains.js +318 -0
  55. package/.next/server/pages/domains.js.nft.json +1 -0
  56. package/.next/server/pages/domains.json +1 -0
  57. package/.next/server/pages/events/OrderComplete/logs.html +1 -1
  58. package/.next/server/pages/events/OrderComplete.html +2 -2
  59. package/.next/server/pages/events/OrderComplete.json +1 -1
  60. package/.next/server/pages/events/OrderConfirmed/logs.html +1 -1
  61. package/.next/server/pages/events/OrderConfirmed.html +2 -2
  62. package/.next/server/pages/events/OrderConfirmed.json +1 -1
  63. package/.next/server/pages/events/OrderRequested/logs.html +1 -1
  64. package/.next/server/pages/events/OrderRequested.html +2 -2
  65. package/.next/server/pages/events/OrderRequested.json +1 -1
  66. package/.next/server/pages/events/PaymentProcessed/logs.html +1 -1
  67. package/.next/server/pages/events/PaymentProcessed.html +2 -2
  68. package/.next/server/pages/events/PaymentProcessed.json +1 -1
  69. package/.next/server/pages/events/RemovedItemFromCart/logs.html +1 -1
  70. package/.next/server/pages/events/RemovedItemFromCart.html +2 -2
  71. package/.next/server/pages/events/RemovedItemFromCart.json +1 -1
  72. package/.next/server/pages/events/ShipmentDelivered/logs.html +1 -1
  73. package/.next/server/pages/events/ShipmentDelivered.html +2 -2
  74. package/.next/server/pages/events/ShipmentDelivered.json +1 -1
  75. package/.next/server/pages/events/ShipmentDispatched/logs.html +1 -1
  76. package/.next/server/pages/events/ShipmentDispatched.html +2 -2
  77. package/.next/server/pages/events/ShipmentDispatched.json +1 -1
  78. package/.next/server/pages/events/ShipmentPrepared/logs.html +1 -1
  79. package/.next/server/pages/events/ShipmentPrepared.html +2 -2
  80. package/.next/server/pages/events/ShipmentPrepared.json +1 -1
  81. package/.next/server/pages/events/[name]/logs.js +1 -243
  82. package/.next/server/pages/events/[name]/logs.js.nft.json +1 -1
  83. package/.next/server/pages/events/[name]/v/[version].js +10 -5
  84. package/.next/server/pages/events/[name]/v/[version].js.nft.json +1 -1
  85. package/.next/server/pages/events/[name].js +2 -2
  86. package/.next/server/pages/events/[name].js.nft.json +1 -1
  87. package/.next/server/pages/events.html +5 -4
  88. package/.next/server/pages/events.js +39 -14
  89. package/.next/server/pages/events.js.nft.json +1 -1
  90. package/.next/server/pages/events.json +1 -1
  91. package/.next/server/pages/index.html +1 -1
  92. package/.next/server/pages/overview.html +1 -1
  93. package/.next/server/pages/overview.js +4 -4
  94. package/.next/server/pages/overview.js.nft.json +1 -1
  95. package/.next/server/pages/overview.json +1 -1
  96. package/.next/server/pages/services/Payment Service.html +2 -2
  97. package/.next/server/pages/services/Payment Service.json +1 -1
  98. package/.next/server/pages/services/Shipping Service.html +2 -2
  99. package/.next/server/pages/services/Shipping Service.json +1 -1
  100. package/.next/server/pages/services/[name].js +1 -505
  101. package/.next/server/pages/services/[name].js.nft.json +1 -1
  102. package/.next/server/pages/services.html +2 -4
  103. package/.next/server/pages/services.js +1 -1
  104. package/.next/server/pages/services.js.nft.json +1 -1
  105. package/.next/server/pages/services.json +1 -1
  106. package/.next/server/pages/users/[id].js +35 -13
  107. package/.next/server/pages/users/[id].js.nft.json +1 -1
  108. package/.next/server/pages/users/dboyne.html +7 -7
  109. package/.next/server/pages/users/dboyne.json +1 -1
  110. package/.next/server/pages/users/mSmith.html +6 -4
  111. package/.next/server/pages/users/mSmith.json +1 -1
  112. package/.next/server/pages/visualiser.html +5 -5
  113. package/.next/server/pages/visualiser.js +149 -149
  114. package/.next/server/pages/visualiser.js.nft.json +1 -1
  115. package/.next/server/pages/visualiser.json +1 -1
  116. package/.next/server/pages-manifest.json +6 -0
  117. package/.next/static/UitC3v9gRidvUVAvz9F2F/_buildManifest.js +1 -0
  118. package/.next/static/{KZ2mEdt5MUAVDtbybTBw1 → UitC3v9gRidvUVAvz9F2F}/_middlewareManifest.js +0 -0
  119. package/.next/static/UitC3v9gRidvUVAvz9F2F/_ssgManifest.js +1 -0
  120. package/.next/static/chunks/109-716dea1303010b4f.js +1 -0
  121. package/.next/static/chunks/169-b33dfdaf2847d062.js +1 -0
  122. package/.next/static/chunks/178-e9a666e11fb7c88d.js +1 -0
  123. package/.next/static/chunks/585-aa9262ea1bcf9d5b.js +1 -0
  124. package/.next/static/chunks/650-555944cc1eb7714e.js +1 -0
  125. package/.next/static/chunks/962-17a425b16c23bd0f.js +1 -0
  126. package/.next/static/chunks/pages/_app-d88c877888678e85.js +1 -0
  127. package/.next/static/chunks/pages/domains/[domain]/events/[name]/logs-7317f2121b8f0d8c.js +1 -0
  128. package/.next/static/chunks/pages/domains/[domain]/events/[name]/v/[version]-a7fa6002267ccd3b.js +1 -0
  129. package/.next/static/chunks/pages/domains/[domain]/events/[name]-a5fb5b26471e703b.js +1 -0
  130. package/.next/static/chunks/pages/domains/[domain]/services/[name]-80d6d803e5466b81.js +1 -0
  131. package/.next/static/chunks/pages/domains/[domain]-e39d527b56fd45c8.js +1 -0
  132. package/.next/static/chunks/pages/domains-6ab78cb1bc2f4200.js +1 -0
  133. package/.next/static/chunks/pages/events/[name]/v/[version]-93d978734b0dc0a3.js +1 -0
  134. package/.next/static/chunks/pages/events/{[name]-813780e7042af288.js → [name]-d3d2a03948b8dfeb.js} +1 -1
  135. package/.next/static/chunks/pages/events-5a41c37b360b2fce.js +1 -0
  136. package/.next/static/chunks/pages/{overview-2f0bfad06c84e437.js → overview-dc5e91549c7e3d52.js} +1 -1
  137. package/.next/static/chunks/pages/services/[name]-148079bb388f8c53.js +1 -0
  138. package/.next/static/chunks/pages/services-7fe5a823f1b25f18.js +1 -0
  139. package/.next/static/chunks/pages/users/[id]-b255611073ef76e0.js +1 -0
  140. package/.next/static/chunks/pages/visualiser-2fc8224670ac5dff.js +1 -0
  141. package/.next/static/chunks/webpack-b17b8ef11b94ba66.js +1 -0
  142. package/.next/static/css/{6774df2af1f71309.css → 70ede87da43120f8.css} +1 -1
  143. package/.next/trace +57 -56
  144. package/CHANGELOG.md +20 -0
  145. package/components/Grids/DomainGrid.tsx +53 -0
  146. package/components/Grids/EventGrid.tsx +12 -5
  147. package/components/Grids/ServiceGrid.tsx +3 -3
  148. package/components/Header.tsx +2 -1
  149. package/components/Mdx/NodeGraph/GraphElements.tsx +1 -1
  150. package/components/Mdx/NodeGraph/GraphLayout.ts +6 -2
  151. package/components/Mdx/NodeGraph/NodeGraph.tsx +13 -3
  152. package/components/Mdx/NodeGraph/__tests__/GraphElements.spec.ts +8 -4
  153. package/components/Mdx/NodeGraph/__tests__/GraphLayout.spec.ts +2 -2
  154. package/components/Sidebars/DomainSidebar.tsx +55 -0
  155. package/components/Sidebars/EventSidebar.tsx +61 -111
  156. package/components/Sidebars/ServiceSidebar.tsx +47 -125
  157. package/components/Sidebars/components/ExternalLinks.tsx +28 -0
  158. package/components/Sidebars/components/ItemList.tsx +32 -0
  159. package/components/Sidebars/components/Owners.tsx +38 -0
  160. package/components/Sidebars/components/Tags.tsx +45 -0
  161. package/lib/__tests__/assets/domains/User/events/UserCreated/index.md +16 -0
  162. package/lib/__tests__/assets/domains/User/events/UserRemoved/examples/Basic.cs +31 -0
  163. package/lib/__tests__/assets/domains/User/events/UserRemoved/examples/Basic.js +1 -0
  164. package/lib/__tests__/assets/domains/User/events/UserRemoved/index.md +16 -0
  165. package/lib/__tests__/assets/domains/User/events/UserRemoved/schema.json +4 -0
  166. package/lib/__tests__/assets/domains/User/index.md +12 -0
  167. package/lib/__tests__/assets/domains/User/services/User Service/index.md +15 -0
  168. package/lib/__tests__/assets/events/AddedItemToCart/index.md +0 -2
  169. package/lib/__tests__/assets/services/Basket Service/index.md +1 -1
  170. package/lib/__tests__/domains.spec.ts +267 -0
  171. package/lib/__tests__/events.spec.ts +216 -90
  172. package/lib/__tests__/graphs.spec.ts +4 -4
  173. package/lib/__tests__/services.spec.ts +62 -7
  174. package/lib/domains.ts +148 -0
  175. package/lib/events.ts +69 -22
  176. package/lib/graphs.ts +6 -3
  177. package/lib/services.ts +52 -13
  178. package/out/404/index.html +1 -1
  179. package/out/_next/data/UitC3v9gRidvUVAvz9F2F/domains/Shopping/events/AddedItemToCart/logs.json +1 -0
  180. package/out/_next/data/UitC3v9gRidvUVAvz9F2F/domains/Shopping/events/AddedItemToCart/v/0.0.1.json +1 -0
  181. package/out/_next/data/UitC3v9gRidvUVAvz9F2F/domains/Shopping/events/AddedItemToCart/v/0.0.2.json +1 -0
  182. package/out/_next/data/UitC3v9gRidvUVAvz9F2F/domains/Shopping/events/AddedItemToCart.json +1 -0
  183. package/out/_next/data/UitC3v9gRidvUVAvz9F2F/domains/Shopping/events/RemovedItemFromCart/logs.json +1 -0
  184. package/out/_next/data/UitC3v9gRidvUVAvz9F2F/domains/Shopping/events/RemovedItemFromCart.json +1 -0
  185. package/out/_next/data/UitC3v9gRidvUVAvz9F2F/domains/Shopping.json +1 -0
  186. package/out/_next/data/UitC3v9gRidvUVAvz9F2F/domains.json +1 -0
  187. package/out/_next/data/{KZ2mEdt5MUAVDtbybTBw1 → UitC3v9gRidvUVAvz9F2F}/events/OrderComplete/logs.json +0 -0
  188. package/out/_next/data/UitC3v9gRidvUVAvz9F2F/events/OrderComplete.json +1 -0
  189. package/out/_next/data/{KZ2mEdt5MUAVDtbybTBw1 → UitC3v9gRidvUVAvz9F2F}/events/OrderConfirmed/logs.json +0 -0
  190. package/out/_next/data/UitC3v9gRidvUVAvz9F2F/events/OrderConfirmed.json +1 -0
  191. package/out/_next/data/{KZ2mEdt5MUAVDtbybTBw1 → UitC3v9gRidvUVAvz9F2F}/events/OrderRequested/logs.json +0 -0
  192. package/out/_next/data/UitC3v9gRidvUVAvz9F2F/events/OrderRequested.json +1 -0
  193. package/out/_next/data/{KZ2mEdt5MUAVDtbybTBw1 → UitC3v9gRidvUVAvz9F2F}/events/PaymentProcessed/logs.json +0 -0
  194. package/out/_next/data/UitC3v9gRidvUVAvz9F2F/events/PaymentProcessed.json +1 -0
  195. package/out/_next/data/UitC3v9gRidvUVAvz9F2F/events/RemovedItemFromCart/logs.json +1 -0
  196. package/out/_next/data/UitC3v9gRidvUVAvz9F2F/events/RemovedItemFromCart.json +1 -0
  197. package/out/_next/data/{KZ2mEdt5MUAVDtbybTBw1 → UitC3v9gRidvUVAvz9F2F}/events/ShipmentDelivered/logs.json +0 -0
  198. package/out/_next/data/UitC3v9gRidvUVAvz9F2F/events/ShipmentDelivered.json +1 -0
  199. package/out/_next/data/{KZ2mEdt5MUAVDtbybTBw1 → UitC3v9gRidvUVAvz9F2F}/events/ShipmentDispatched/logs.json +0 -0
  200. package/out/_next/data/UitC3v9gRidvUVAvz9F2F/events/ShipmentDispatched.json +1 -0
  201. package/out/_next/data/{KZ2mEdt5MUAVDtbybTBw1 → UitC3v9gRidvUVAvz9F2F}/events/ShipmentPrepared/logs.json +0 -0
  202. package/out/_next/data/UitC3v9gRidvUVAvz9F2F/events/ShipmentPrepared.json +1 -0
  203. package/out/_next/data/UitC3v9gRidvUVAvz9F2F/events.json +1 -0
  204. package/out/_next/data/UitC3v9gRidvUVAvz9F2F/overview.json +1 -0
  205. package/out/_next/data/UitC3v9gRidvUVAvz9F2F/services/Payment Service.json +1 -0
  206. package/out/_next/data/UitC3v9gRidvUVAvz9F2F/services/Shipping Service.json +1 -0
  207. package/out/_next/data/UitC3v9gRidvUVAvz9F2F/services.json +1 -0
  208. package/out/_next/data/UitC3v9gRidvUVAvz9F2F/users/dboyne.json +1 -0
  209. package/out/_next/data/UitC3v9gRidvUVAvz9F2F/users/mSmith.json +1 -0
  210. package/out/_next/data/UitC3v9gRidvUVAvz9F2F/visualiser.json +1 -0
  211. package/out/_next/static/UitC3v9gRidvUVAvz9F2F/_buildManifest.js +1 -0
  212. package/out/_next/static/{KZ2mEdt5MUAVDtbybTBw1 → UitC3v9gRidvUVAvz9F2F}/_middlewareManifest.js +0 -0
  213. package/out/_next/static/UitC3v9gRidvUVAvz9F2F/_ssgManifest.js +1 -0
  214. package/out/_next/static/chunks/109-716dea1303010b4f.js +1 -0
  215. package/out/_next/static/chunks/169-b33dfdaf2847d062.js +1 -0
  216. package/out/_next/static/chunks/178-e9a666e11fb7c88d.js +1 -0
  217. package/out/_next/static/chunks/585-aa9262ea1bcf9d5b.js +1 -0
  218. package/out/_next/static/chunks/650-555944cc1eb7714e.js +1 -0
  219. package/out/_next/static/chunks/962-17a425b16c23bd0f.js +1 -0
  220. package/out/_next/static/chunks/pages/_app-d88c877888678e85.js +1 -0
  221. package/out/_next/static/chunks/pages/domains/[domain]/events/[name]/logs-7317f2121b8f0d8c.js +1 -0
  222. package/out/_next/static/chunks/pages/domains/[domain]/events/[name]/v/[version]-a7fa6002267ccd3b.js +1 -0
  223. package/out/_next/static/chunks/pages/domains/[domain]/events/[name]-a5fb5b26471e703b.js +1 -0
  224. package/out/_next/static/chunks/pages/domains/[domain]/services/[name]-80d6d803e5466b81.js +1 -0
  225. package/out/_next/static/chunks/pages/domains/[domain]-e39d527b56fd45c8.js +1 -0
  226. package/out/_next/static/chunks/pages/domains-6ab78cb1bc2f4200.js +1 -0
  227. package/out/_next/static/chunks/pages/events/[name]/v/[version]-93d978734b0dc0a3.js +1 -0
  228. package/out/_next/static/chunks/pages/events/{[name]-813780e7042af288.js → [name]-d3d2a03948b8dfeb.js} +1 -1
  229. package/out/_next/static/chunks/pages/events-5a41c37b360b2fce.js +1 -0
  230. package/out/_next/static/chunks/pages/{overview-2f0bfad06c84e437.js → overview-dc5e91549c7e3d52.js} +1 -1
  231. package/out/_next/static/chunks/pages/services/[name]-148079bb388f8c53.js +1 -0
  232. package/out/_next/static/chunks/pages/services-7fe5a823f1b25f18.js +1 -0
  233. package/out/_next/static/chunks/pages/users/[id]-b255611073ef76e0.js +1 -0
  234. package/out/_next/static/chunks/pages/visualiser-2fc8224670ac5dff.js +1 -0
  235. package/out/_next/static/chunks/webpack-b17b8ef11b94ba66.js +1 -0
  236. package/out/_next/static/css/{6774df2af1f71309.css → 70ede87da43120f8.css} +1 -1
  237. package/out/domains/Shopping/events/AddedItemToCart/index.html +67 -0
  238. package/out/domains/Shopping/events/AddedItemToCart/logs/index.html +1 -0
  239. package/out/domains/Shopping/events/AddedItemToCart/v/0.0.1/index.html +60 -0
  240. package/out/domains/Shopping/events/AddedItemToCart/v/0.0.2/index.html +67 -0
  241. package/out/domains/Shopping/events/RemovedItemFromCart/index.html +49 -0
  242. package/out/domains/Shopping/events/RemovedItemFromCart/logs/index.html +1 -0
  243. package/out/domains/Shopping/index.html +2 -0
  244. package/out/domains/index.html +2 -0
  245. package/out/events/OrderComplete/index.html +2 -2
  246. package/out/events/OrderComplete/logs/index.html +1 -1
  247. package/out/events/OrderConfirmed/index.html +2 -2
  248. package/out/events/OrderConfirmed/logs/index.html +1 -1
  249. package/out/events/OrderRequested/index.html +2 -2
  250. package/out/events/OrderRequested/logs/index.html +1 -1
  251. package/out/events/PaymentProcessed/index.html +2 -2
  252. package/out/events/PaymentProcessed/logs/index.html +1 -1
  253. package/out/events/RemovedItemFromCart/index.html +2 -2
  254. package/out/events/RemovedItemFromCart/logs/index.html +1 -1
  255. package/out/events/ShipmentDelivered/index.html +2 -2
  256. package/out/events/ShipmentDelivered/logs/index.html +1 -1
  257. package/out/events/ShipmentDispatched/index.html +2 -2
  258. package/out/events/ShipmentDispatched/logs/index.html +1 -1
  259. package/out/events/ShipmentPrepared/index.html +2 -2
  260. package/out/events/ShipmentPrepared/logs/index.html +1 -1
  261. package/out/events/index.html +5 -4
  262. package/out/index.html +1 -1
  263. package/out/overview/index.html +1 -1
  264. package/out/services/Payment Service/index.html +2 -2
  265. package/out/services/Shipping Service/index.html +2 -2
  266. package/out/services/index.html +2 -4
  267. package/out/users/dboyne/index.html +7 -7
  268. package/out/users/mSmith/index.html +6 -4
  269. package/out/visualiser/index.html +5 -5
  270. package/package.json +2 -2
  271. package/pages/_app.tsx +59 -37
  272. package/pages/domains/[domain]/events/[name]/logs.tsx +29 -0
  273. package/pages/domains/[domain]/events/[name]/v/[version].tsx +39 -0
  274. package/pages/domains/[domain]/events/[name].tsx +46 -0
  275. package/pages/domains/[domain]/index.tsx +138 -0
  276. package/pages/domains/[domain]/services/[name].tsx +42 -0
  277. package/pages/domains.tsx +64 -0
  278. package/pages/events/[name]/logs.tsx +6 -4
  279. package/pages/events/[name]/v/[version].tsx +3 -2
  280. package/pages/events/[name].tsx +26 -12
  281. package/pages/events.tsx +59 -33
  282. package/pages/overview.tsx +3 -3
  283. package/pages/services/[name].tsx +8 -8
  284. package/pages/users/[id].tsx +15 -5
  285. package/pages/visualiser.tsx +98 -82
  286. package/scripts/move-schemas-for-download.js +27 -10
  287. package/styles/globals.css +16 -2
  288. package/tailwind.config.js +11 -1
  289. package/.next/server/pages/events/AddedItemToCart/logs.html +0 -1
  290. package/.next/server/pages/events/AddedItemToCart/logs.json +0 -1
  291. package/.next/server/pages/events/AddedItemToCart/v/0.0.1.html +0 -58
  292. package/.next/server/pages/events/AddedItemToCart/v/0.0.1.json +0 -1
  293. package/.next/server/pages/events/AddedItemToCart/v/0.0.2.html +0 -65
  294. package/.next/server/pages/events/AddedItemToCart/v/0.0.2.json +0 -1
  295. package/.next/server/pages/events/AddedItemToCart.html +0 -65
  296. package/.next/server/pages/events/AddedItemToCart.json +0 -1
  297. package/.next/server/pages/services/Basket Service.html +0 -2
  298. package/.next/server/pages/services/Basket Service.json +0 -1
  299. package/.next/server/pages/services/Data Lake.html +0 -2
  300. package/.next/server/pages/services/Data Lake.json +0 -1
  301. package/.next/static/KZ2mEdt5MUAVDtbybTBw1/_buildManifest.js +0 -1
  302. package/.next/static/KZ2mEdt5MUAVDtbybTBw1/_ssgManifest.js +0 -1
  303. package/.next/static/chunks/109-a08539311d3d6672.js +0 -1
  304. package/.next/static/chunks/178-87f01d17ab32dd4f.js +0 -1
  305. package/.next/static/chunks/252-08ab418f9b6821dd.js +0 -1
  306. package/.next/static/chunks/650-343888e13f994a09.js +0 -1
  307. package/.next/static/chunks/962-20c87db3880df896.js +0 -1
  308. package/.next/static/chunks/pages/_app-2ce3055a6b681f1a.js +0 -1
  309. package/.next/static/chunks/pages/events/[name]/v/[version]-33051dbc32f5fe4e.js +0 -1
  310. package/.next/static/chunks/pages/events-1f39499146c9c75f.js +0 -1
  311. package/.next/static/chunks/pages/services/[name]-142d7fa515cfc532.js +0 -1
  312. package/.next/static/chunks/pages/services-f52121c6dc1211aa.js +0 -1
  313. package/.next/static/chunks/pages/users/[id]-d3140bb155f8fb45.js +0 -1
  314. package/.next/static/chunks/pages/visualiser-e4e3757e74f19df7.js +0 -1
  315. package/.next/static/chunks/webpack-49abfa9a972ed5a3.js +0 -1
  316. package/out/_next/data/KZ2mEdt5MUAVDtbybTBw1/events/AddedItemToCart/logs.json +0 -1
  317. package/out/_next/data/KZ2mEdt5MUAVDtbybTBw1/events/AddedItemToCart/v/0.0.1.json +0 -1
  318. package/out/_next/data/KZ2mEdt5MUAVDtbybTBw1/events/AddedItemToCart/v/0.0.2.json +0 -1
  319. package/out/_next/data/KZ2mEdt5MUAVDtbybTBw1/events/AddedItemToCart.json +0 -1
  320. package/out/_next/data/KZ2mEdt5MUAVDtbybTBw1/events/OrderComplete.json +0 -1
  321. package/out/_next/data/KZ2mEdt5MUAVDtbybTBw1/events/OrderConfirmed.json +0 -1
  322. package/out/_next/data/KZ2mEdt5MUAVDtbybTBw1/events/OrderRequested.json +0 -1
  323. package/out/_next/data/KZ2mEdt5MUAVDtbybTBw1/events/PaymentProcessed.json +0 -1
  324. package/out/_next/data/KZ2mEdt5MUAVDtbybTBw1/events/RemovedItemFromCart.json +0 -1
  325. package/out/_next/data/KZ2mEdt5MUAVDtbybTBw1/events/ShipmentDelivered.json +0 -1
  326. package/out/_next/data/KZ2mEdt5MUAVDtbybTBw1/events/ShipmentDispatched.json +0 -1
  327. package/out/_next/data/KZ2mEdt5MUAVDtbybTBw1/events/ShipmentPrepared.json +0 -1
  328. package/out/_next/data/KZ2mEdt5MUAVDtbybTBw1/events.json +0 -1
  329. package/out/_next/data/KZ2mEdt5MUAVDtbybTBw1/overview.json +0 -1
  330. package/out/_next/data/KZ2mEdt5MUAVDtbybTBw1/services/Basket Service.json +0 -1
  331. package/out/_next/data/KZ2mEdt5MUAVDtbybTBw1/services/Data Lake.json +0 -1
  332. package/out/_next/data/KZ2mEdt5MUAVDtbybTBw1/services/Payment Service.json +0 -1
  333. package/out/_next/data/KZ2mEdt5MUAVDtbybTBw1/services/Shipping Service.json +0 -1
  334. package/out/_next/data/KZ2mEdt5MUAVDtbybTBw1/services.json +0 -1
  335. package/out/_next/data/KZ2mEdt5MUAVDtbybTBw1/users/dboyne.json +0 -1
  336. package/out/_next/data/KZ2mEdt5MUAVDtbybTBw1/users/mSmith.json +0 -1
  337. package/out/_next/data/KZ2mEdt5MUAVDtbybTBw1/visualiser.json +0 -1
  338. package/out/_next/static/KZ2mEdt5MUAVDtbybTBw1/_buildManifest.js +0 -1
  339. package/out/_next/static/KZ2mEdt5MUAVDtbybTBw1/_ssgManifest.js +0 -1
  340. package/out/_next/static/chunks/109-a08539311d3d6672.js +0 -1
  341. package/out/_next/static/chunks/178-87f01d17ab32dd4f.js +0 -1
  342. package/out/_next/static/chunks/252-08ab418f9b6821dd.js +0 -1
  343. package/out/_next/static/chunks/650-343888e13f994a09.js +0 -1
  344. package/out/_next/static/chunks/962-20c87db3880df896.js +0 -1
  345. package/out/_next/static/chunks/pages/_app-2ce3055a6b681f1a.js +0 -1
  346. package/out/_next/static/chunks/pages/events/[name]/v/[version]-33051dbc32f5fe4e.js +0 -1
  347. package/out/_next/static/chunks/pages/events-1f39499146c9c75f.js +0 -1
  348. package/out/_next/static/chunks/pages/services/[name]-142d7fa515cfc532.js +0 -1
  349. package/out/_next/static/chunks/pages/services-f52121c6dc1211aa.js +0 -1
  350. package/out/_next/static/chunks/pages/users/[id]-d3140bb155f8fb45.js +0 -1
  351. package/out/_next/static/chunks/pages/visualiser-e4e3757e74f19df7.js +0 -1
  352. package/out/_next/static/chunks/webpack-49abfa9a972ed5a3.js +0 -1
  353. package/out/events/AddedItemToCart/index.html +0 -65
  354. package/out/events/AddedItemToCart/logs/index.html +0 -1
  355. package/out/events/AddedItemToCart/v/0.0.1/index.html +0 -58
  356. package/out/events/AddedItemToCart/v/0.0.2/index.html +0 -65
  357. package/out/services/Basket Service/index.html +0 -2
  358. package/out/services/Data Lake/index.html +0 -2
@@ -48,8 +48,8 @@ click My_Service href "/docs/services/My Service" "Go to My Service" _self`);
48
48
  const event = {
49
49
  name: 'My Event',
50
50
  version: '0.0.1',
51
- producers: ['Service 1'],
52
- consumers: ['Service 2'],
51
+ producerNames: ['Service 1'],
52
+ consumerNames: ['Service 2'],
53
53
  };
54
54
 
55
55
  const result = buildMermaidFlowChartForEvent(event);
@@ -77,8 +77,8 @@ click My_Event href "/docs/events/My Event" "Go to My Event" _self`);
77
77
  const event = {
78
78
  name: 'My Event',
79
79
  version: '0.0.1',
80
- producers: ['Service 1 With Spaces'],
81
- consumers: [],
80
+ producerNames: ['Service 1 With Spaces'],
81
+ consumerNames: [],
82
82
  };
83
83
  const result = buildMermaidFlowChartForEvent(event);
84
84
  expect(result).toContain(`Service_1_With_Spaces[Service 1 With Spaces]:::producer-->My_Event[My Event]:::event`);
@@ -33,6 +33,7 @@ describe('services', () => {
33
33
  url: 'https://github.com/boyney123/pretend-basket-service',
34
34
  },
35
35
  subscribes: [],
36
+ domain: null,
36
37
  summary: 'CRUD based API to handle Basket interactions for users of the shopping website.\n',
37
38
  tags: [],
38
39
  },
@@ -40,6 +41,7 @@ describe('services', () => {
40
41
  name: 'Email Platform',
41
42
  summary: 'Internal Email system. Used to send emails to 1000s of customers. Hosted in AWS\n',
42
43
  owners: ['dboyne'],
44
+ domain: null,
43
45
  repository: {
44
46
  url: 'https://github.com/boyney123/EmailPlatform',
45
47
  language: 'JavaScript',
@@ -58,16 +60,36 @@ describe('services', () => {
58
60
  name: 'EmailSent',
59
61
  version: '0.0.1',
60
62
  summary: 'Tells us when an email has been sent\n',
61
- producers: ['Email Platform'],
62
- consumers: [],
63
+ producerNames: ['Email Platform'],
64
+ consumerNames: [],
63
65
  externalLinks: [],
64
66
  historicVersions: [],
67
+ domain: null,
65
68
  owners: ['dboyne', 'mSmith'],
66
69
  },
67
70
  ],
68
71
  subscribes: [],
69
72
  externalLinks: [],
70
73
  },
74
+ {
75
+ name: 'User Service',
76
+ summary: 'CRUD based API to handle User information\n',
77
+ domain: 'User',
78
+ owners: ['mSmith'],
79
+ repository: {
80
+ language: 'JavaScript',
81
+ url: 'https://github.com/boyney123/pretend-basket-service',
82
+ },
83
+ tags: [],
84
+ externalLinks: [
85
+ {
86
+ label: 'AsyncAPI Specification',
87
+ url: 'https://studio.asyncapi.com/#schema-lightMeasuredPayload',
88
+ },
89
+ ],
90
+ publishes: [],
91
+ subscribes: [],
92
+ },
71
93
  ]);
72
94
  });
73
95
  });
@@ -90,6 +112,7 @@ describe('services', () => {
90
112
  url: 'https://github.com/boyney123/EmailPlatform',
91
113
  language: 'JavaScript',
92
114
  },
115
+ domain: null,
93
116
  tags: [
94
117
  {
95
118
  label: 'defaultContentType:application/json',
@@ -104,9 +127,10 @@ describe('services', () => {
104
127
  name: 'EmailSent',
105
128
  version: '0.0.1',
106
129
  summary: 'Tells us when an email has been sent\n',
107
- producers: ['Email Platform'],
108
- consumers: [],
130
+ producerNames: ['Email Platform'],
131
+ consumerNames: [],
109
132
  historicVersions: [],
133
+ domain: null,
110
134
  externalLinks: [],
111
135
  owners: ['dboyne', 'mSmith'],
112
136
  },
@@ -120,12 +144,13 @@ describe('services', () => {
120
144
 
121
145
  describe('getServiceByName', () => {
122
146
  it('returns an event and markdown by the given event name', async () => {
123
- const { service, markdown } = await getServiceByName('Email Platform');
147
+ const { service, markdown } = await getServiceByName({ serviceName: 'Email Platform' });
124
148
 
125
149
  expect(service).toEqual({
126
150
  name: 'Email Platform',
127
151
  summary: 'Internal Email system. Used to send emails to 1000s of customers. Hosted in AWS\n',
128
152
  owners: ['dboyne'],
153
+ domain: null,
129
154
  repository: {
130
155
  url: 'https://github.com/boyney123/EmailPlatform',
131
156
  language: 'JavaScript',
@@ -144,9 +169,10 @@ describe('services', () => {
144
169
  name: 'EmailSent',
145
170
  version: '0.0.1',
146
171
  summary: 'Tells us when an email has been sent\n',
147
- producers: ['Email Platform'],
148
- consumers: [],
172
+ producerNames: ['Email Platform'],
173
+ consumerNames: [],
149
174
  historicVersions: [],
175
+ domain: null,
150
176
  externalLinks: [],
151
177
  owners: ['dboyne', 'mSmith'],
152
178
  },
@@ -158,5 +184,34 @@ describe('services', () => {
158
184
  // @ts-ignore
159
185
  expect(markdown.content).toMatchMarkdown('# Testing');
160
186
  });
187
+
188
+ describe('services within domains', () => {
189
+ it('returns an event and markdown by the given event name', async () => {
190
+ const { service, markdown } = await getServiceByName({ serviceName: 'User Service', domain: 'User' });
191
+
192
+ expect(service).toEqual({
193
+ name: 'User Service',
194
+ summary: 'CRUD based API to handle User information\n',
195
+ domain: 'User',
196
+ owners: ['mSmith'],
197
+ repository: {
198
+ language: 'JavaScript',
199
+ url: 'https://github.com/boyney123/pretend-basket-service',
200
+ },
201
+ tags: [],
202
+ externalLinks: [
203
+ {
204
+ label: 'AsyncAPI Specification',
205
+ url: 'https://studio.asyncapi.com/#schema-lightMeasuredPayload',
206
+ },
207
+ ],
208
+ publishes: [],
209
+ subscribes: [],
210
+ });
211
+
212
+ // @ts-ignore
213
+ expect(markdown.content).toMatchMarkdown('# Testing');
214
+ });
215
+ });
161
216
  });
162
217
  });
package/lib/domains.ts ADDED
@@ -0,0 +1,148 @@
1
+ import path from 'path';
2
+ import fs from 'fs';
3
+ import type { Event } from '@eventcatalog/types';
4
+ import { Domain } from '@eventcatalog/types';
5
+ import { serialize } from 'next-mdx-remote/serialize';
6
+ import { getAllEventsFromPath } from './events';
7
+ import { getAllServicesFromPath } from './services';
8
+ import { readMarkdownFile, getLastModifiedDateOfFile } from '@/lib/file-reader';
9
+
10
+ import { MarkdownFile } from '../types/index';
11
+
12
+ const buildDomain = (domainFrontMatter: any): Domain => {
13
+ const { name, summary, owners = [], tags = [], externalLinks = [] } = domainFrontMatter;
14
+ return { name, summary, owners, tags, externalLinks };
15
+ };
16
+
17
+ export const getUniqueDomainNamesFromEvents = (events: Event[]) => {
18
+ const allDomains = events.filter((event) => !!event.domain).map((event) => event.domain);
19
+ // @ts-ignore
20
+ return [...new Set(allDomains)];
21
+ };
22
+
23
+ export const getAllDomainsByOwnerId = async (ownerId): Promise<Domain[]> => {
24
+ const domainsWithMarkdown = await getAllDomains();
25
+
26
+ const domains = domainsWithMarkdown.map((item) => item.domain);
27
+ const domainsOwnedByUser = domains.filter((domain) => domain.owners.some((id) => id === ownerId));
28
+ return domainsOwnedByUser.map((domain) => ({
29
+ ...domain,
30
+ }));
31
+ };
32
+
33
+ export const getAllEventsFromDomains = () => {
34
+ const domainsDir = path.join(process.env.PROJECT_DIR, 'domains');
35
+
36
+ if (!fs.existsSync(domainsDir)) return [];
37
+
38
+ const domains = fs.readdirSync(domainsDir);
39
+
40
+ return domains.reduce((allEventsFromDomains, domainFolder) => {
41
+ const domainDir = path.join(domainsDir, domainFolder);
42
+ const eventsForDomainDir = path.join(domainDir, 'events');
43
+ const domainHasEvents = fs.existsSync(eventsForDomainDir);
44
+
45
+ if (domainHasEvents) {
46
+ const domainEvents = getAllEventsFromPath(eventsForDomainDir);
47
+
48
+ // Add domains onto events
49
+ const eventsWithDomain = domainEvents.map((event) => ({ ...event, domain: domainFolder }));
50
+
51
+ return [...allEventsFromDomains, ...eventsWithDomain];
52
+ }
53
+
54
+ return allEventsFromDomains;
55
+ }, []);
56
+ };
57
+
58
+ export const getAllServicesFromDomains = () => {
59
+ const domainsDir = path.join(process.env.PROJECT_DIR, 'domains');
60
+ if (!fs.existsSync(domainsDir)) return [];
61
+ const domains = fs.readdirSync(domainsDir);
62
+
63
+ return domains.reduce((allServicesFromDomains, domainFolder) => {
64
+ const domainDir = path.join(domainsDir, domainFolder);
65
+ const servicesForDomainDir = path.join(domainDir, 'services');
66
+ const domainHasServices = fs.existsSync(servicesForDomainDir);
67
+
68
+ if (domainHasServices) {
69
+ const domainServices = getAllServicesFromPath(servicesForDomainDir);
70
+
71
+ // Add domains onto events
72
+ const eventsWithDomain = domainServices.map((event) => ({ ...event, domain: domainFolder }));
73
+
74
+ return [...allServicesFromDomains, ...eventsWithDomain];
75
+ }
76
+
77
+ return allServicesFromDomains;
78
+ }, []);
79
+ };
80
+
81
+ export const getDomainByName = async ({
82
+ domainName,
83
+ }: {
84
+ domainName: string;
85
+ }): Promise<{ domain: Domain; markdown: MarkdownFile }> => {
86
+ try {
87
+ const domainsDir = path.join(process.env.PROJECT_DIR, 'domains');
88
+ const domainDirectory = path.join(domainsDir, domainName);
89
+
90
+ const { data, content } = readMarkdownFile(path.join(domainDirectory, `index.md`));
91
+ const domain = buildDomain(data);
92
+
93
+ const mdxSource = await serialize(content);
94
+
95
+ const eventsForDomain = getAllEventsFromPath(path.join(domainDirectory, 'events'));
96
+ const servicesForDomain = getAllServicesFromPath(path.join(domainDirectory, 'services'));
97
+
98
+ return {
99
+ // @ts-ignore
100
+ domain: {
101
+ ...domain,
102
+ events: eventsForDomain,
103
+ services: servicesForDomain,
104
+ },
105
+ markdown: {
106
+ content,
107
+ lastModifiedDate: getLastModifiedDateOfFile(path.join(domainDirectory, `index.md`)),
108
+ source: mdxSource,
109
+ },
110
+ };
111
+ } catch (error) {
112
+ console.log('Failed to get domain by name', domainName);
113
+ return Promise.reject();
114
+ }
115
+ };
116
+
117
+ export const getDomainByPath = async (domainDirectory: string): Promise<{ domain: Domain; markdown: MarkdownFile }> => {
118
+ const { data, content } = readMarkdownFile(path.join(domainDirectory, `index.md`));
119
+ const domain = buildDomain(data);
120
+
121
+ const mdxSource = await serialize(content);
122
+
123
+ const eventsForDomain = getAllEventsFromPath(path.join(domainDirectory, 'events'));
124
+ const servicesForDomain = getAllServicesFromPath(path.join(domainDirectory, 'services'));
125
+
126
+ return {
127
+ // @ts-ignore
128
+ domain: {
129
+ ...domain,
130
+ events: eventsForDomain,
131
+ services: servicesForDomain,
132
+ },
133
+ markdown: {
134
+ content,
135
+ lastModifiedDate: getLastModifiedDateOfFile(path.join(domainDirectory, `index.md`)),
136
+ source: mdxSource,
137
+ },
138
+ };
139
+ };
140
+
141
+ export const getAllDomainsFromPath = async (domainsDir: string) => {
142
+ if (!fs.existsSync(domainsDir)) return [];
143
+ const folders = fs.readdirSync(domainsDir);
144
+ const allDomains = folders.map((folder) => getDomainByPath(path.join(domainsDir, folder)));
145
+ return Promise.all(allDomains);
146
+ };
147
+
148
+ export const getAllDomains = () => getAllDomainsFromPath(path.join(process.env.PROJECT_DIR, 'domains'));
package/lib/events.ts CHANGED
@@ -9,11 +9,22 @@ import { MarkdownFile } from '@/types/index';
9
9
  import { extentionToLanguageMap } from './file-reader';
10
10
 
11
11
  import { getLastModifiedDateOfFile, getSchemaFromDir, readMarkdownFile } from '@/lib/file-reader';
12
- import { getAllServices } from './services';
12
+
13
+ import { getAllServices, hydrateEventProducersAndConsumers } from './services';
14
+ import { getAllEventsFromDomains } from './domains';
13
15
 
14
16
  const parseEventFrontMatterIntoEvent = (eventFrontMatter: any): Event => {
15
- const { name, version, summary, producers = [], consumers = [], owners = [], externalLinks = [] } = eventFrontMatter;
16
- return { name, version, summary, producers, consumers, owners, externalLinks };
17
+ const {
18
+ name,
19
+ version,
20
+ summary,
21
+ domain = null,
22
+ producers = [],
23
+ consumers = [],
24
+ owners = [],
25
+ externalLinks = [],
26
+ } = eventFrontMatter;
27
+ return { name, version, summary, domain, producerNames: producers, consumerNames: consumers, owners, externalLinks };
17
28
  };
18
29
 
19
30
  const versionsForEvents = (pathToEvent) => {
@@ -27,8 +38,13 @@ const versionsForEvents = (pathToEvent) => {
27
38
  return [];
28
39
  };
29
40
 
30
- export const getLogsForEvent = (eventName) => {
31
- const eventsDir = path.join(process.env.PROJECT_DIR, 'events');
41
+ export const getLogsForEvent = ({ eventName, domain }: { eventName: string; domain?: string }) => {
42
+ let eventsDir = path.join(process.env.PROJECT_DIR, 'events');
43
+
44
+ if (domain) {
45
+ eventsDir = path.join(process.env.PROJECT_DIR, 'domains', domain, 'events');
46
+ }
47
+
32
48
  const historicVersions = versionsForEvents(path.join(eventsDir, eventName));
33
49
 
34
50
  const allVersions = historicVersions.map((version) => ({
@@ -129,17 +145,29 @@ const getEventExamplesFromDir = (pathToExamples) => {
129
145
  return examples;
130
146
  };
131
147
 
132
- export const getAllEvents = (): Event[] => {
133
- const eventsDir = path.join(process.env.PROJECT_DIR, 'events');
148
+ export const getEventByPath = (eventDir: string): Event => {
149
+ const { data } = readMarkdownFile(path.join(eventDir, 'index.md'));
150
+ const historicVersions = versionsForEvents(path.join(eventDir));
151
+ return {
152
+ ...parseEventFrontMatterIntoEvent(data),
153
+ historicVersions,
154
+ };
155
+ };
156
+
157
+ export const getAllEventsFromPath = (eventsDir: string): Event[] => {
158
+ if (!fs.existsSync(eventsDir)) return [];
134
159
  const folders = fs.readdirSync(eventsDir);
135
- return folders.map((folder) => {
136
- const { data } = readMarkdownFile(path.join(eventsDir, folder, 'index.md'));
137
- const historicVersions = versionsForEvents(path.join(eventsDir, folder));
138
- return {
139
- ...parseEventFrontMatterIntoEvent(data),
140
- historicVersions,
141
- };
142
- });
160
+ return folders.map((folder) => getEventByPath(path.join(eventsDir, folder)));
161
+ };
162
+
163
+ export const getAllEvents = (): Event[] => {
164
+ const allEventsFromDomainFolders = getAllEventsFromDomains();
165
+ const eventsWithoutDomains = getAllEventsFromPath(path.join(process.env.PROJECT_DIR, 'events'));
166
+
167
+ const events = [...eventsWithoutDomains, ...allEventsFromDomainFolders];
168
+ const sortedEvents = events.sort((a, b) => a.name.localeCompare(b.name));
169
+
170
+ return sortedEvents;
143
171
  };
144
172
 
145
173
  export const getAllOwners = (): string[] => {
@@ -158,15 +186,30 @@ export const getAllEventsAndVersionsFlattened = () => {
158
186
  // eventsWithVersionsFlattened.push({ eventName: event.name, version: event.version })
159
187
 
160
188
  if (event.historicVersions) {
161
- event.historicVersions.forEach((version) => eventsWithVersionsFlattened.push({ eventName: event.name, version }));
189
+ event.historicVersions.forEach((version) =>
190
+ eventsWithVersionsFlattened.push({ eventName: event.name, version, domain: event.domain })
191
+ );
162
192
  }
163
193
 
164
194
  return eventsWithVersionsFlattened;
165
195
  }, []);
166
196
  };
167
197
 
168
- export const getEventByName = async (eventName: string, version?: string): Promise<{ event: Event; markdown: MarkdownFile }> => {
169
- const eventsDir = path.join(process.env.PROJECT_DIR, 'events');
198
+ export const getEventByName = async ({
199
+ eventName,
200
+ version,
201
+ domain,
202
+ }: {
203
+ eventName: string;
204
+ version?: string;
205
+ domain?: string;
206
+ }): Promise<{ event: Event; markdown: MarkdownFile }> => {
207
+ let eventsDir = path.join(process.env.PROJECT_DIR, 'events');
208
+
209
+ if (domain) {
210
+ eventsDir = path.join(process.env.PROJECT_DIR, 'domains', domain, 'events');
211
+ }
212
+
170
213
  const eventDirectory = path.join(eventsDir, eventName);
171
214
  let versionDirectory = null;
172
215
 
@@ -179,12 +222,16 @@ export const getEventByName = async (eventName: string, version?: string): Promi
179
222
  try {
180
223
  const { data, content } = readMarkdownFile(path.join(directoryToLoadForEvent, `index.md`));
181
224
  const event = parseEventFrontMatterIntoEvent(data);
225
+ const services = getAllServices();
226
+ const consumersAndProducersAsServices = hydrateEventProducersAndConsumers(event, services);
182
227
 
183
228
  const mdxSource = await serialize(content);
184
229
 
185
230
  return {
186
231
  event: {
187
232
  ...event,
233
+ ...consumersAndProducersAsServices,
234
+ domain: domain || null,
188
235
  historicVersions: versionsForEvents(eventDirectory),
189
236
  schema: getSchemaFromDir(directoryToLoadForEvent),
190
237
  examples: getEventExamplesFromDir(path.join(directoryToLoadForEvent, `examples`)),
@@ -204,8 +251,8 @@ export const getEventByName = async (eventName: string, version?: string): Promi
204
251
 
205
252
  export const getUniqueServicesNamesFromEvents = (events: Event[]) => {
206
253
  const allConsumersAndProducers = events.reduce((domains, event) => {
207
- const { consumers = [], producers = [] } = event;
208
- return domains.concat(consumers).concat(producers);
254
+ const { consumerNames = [], producerNames = [] } = event;
255
+ return domains.concat(consumerNames).concat(producerNames);
209
256
  }, []);
210
257
 
211
258
  const data = allConsumersAndProducers.map((service) => service);
@@ -225,8 +272,8 @@ export const getAllEventsThatHaveRelationshipWithService = (
225
272
  ): { publishes: Event[]; subscribes: Event[] } => {
226
273
  const relationshipsBetweenEvents = events.reduce(
227
274
  (data, event) => {
228
- const serviceSubscribesToEvent = event.consumers.some((id) => id === service.name);
229
- const servicePublishesEvent = event.producers.some((id) => id === service.name);
275
+ const serviceSubscribesToEvent = event.consumerNames.some((id) => id === service.name);
276
+ const servicePublishesEvent = event.producerNames.some((id) => id === service.name);
230
277
 
231
278
  return {
232
279
  publishes: servicePublishesEvent ? data.publishes.concat(event) : data.publishes,
package/lib/graphs.ts CHANGED
@@ -31,14 +31,17 @@ click ${centerNode.id} href "${centerNode.link}" "Go to ${centerNode.name}" _sel
31
31
  * @param {string} rootNodeColor of the root node
32
32
  * @returns {string} Mermaid Graph
33
33
  */
34
- export const buildMermaidFlowChartForEvent = ({ name: eventName, producers, consumers }: Event, rootNodeColor = '#2563eb') => {
34
+ export const buildMermaidFlowChartForEvent = (
35
+ { name: eventName, producerNames, consumerNames }: Event,
36
+ rootNodeColor = '#2563eb'
37
+ ) => {
35
38
  // Transforms services & event into a graph model
36
- const leftNodes = producers.map(truncateNode).map((node) => ({
39
+ const leftNodes = producerNames.map(truncateNode).map((node) => ({
37
40
  id: node.replace(/ /g, '_'),
38
41
  name: node,
39
42
  link: generateLink(node, 'services'),
40
43
  }));
41
- const rightNodes = consumers.map(truncateNode).map((node) => ({
44
+ const rightNodes = consumerNames.map(truncateNode).map((node) => ({
42
45
  id: node.replace(/ /g, '_'),
43
46
  name: node,
44
47
  link: generateLink(node, 'services'),
package/lib/services.ts CHANGED
@@ -1,33 +1,45 @@
1
1
  import fs from 'fs';
2
2
  import path from 'path';
3
3
  import { serialize } from 'next-mdx-remote/serialize';
4
- import { Service } from '@eventcatalog/types';
4
+ import { Service, Event } from '@eventcatalog/types';
5
5
  import { readMarkdownFile, getLastModifiedDateOfFile } from '@/lib/file-reader';
6
6
  import { MarkdownFile } from '../types/index';
7
7
 
8
8
  import { getAllEvents, getAllEventsThatHaveRelationshipWithService } from '@/lib/events';
9
+ import { getAllServicesFromDomains } from '@/lib/domains';
9
10
 
10
11
  const buildService = (eventFrontMatter: any): Service => {
11
- const { name, summary, owners = [], repository = {}, tags = [], externalLinks = [] } = eventFrontMatter;
12
- return { name, summary, owners, repository, tags, externalLinks };
12
+ const { name, summary, domain = null, owners = [], repository = {}, tags = [], externalLinks = [] } = eventFrontMatter;
13
+ return { name, summary, domain, owners, repository, tags, externalLinks };
13
14
  };
14
15
 
15
- export const getAllServices = (): Service[] => {
16
- const servicesDir = path.join(process.env.PROJECT_DIR, 'services');
16
+ export const getServiceByPath = (serviceDirPath: string): Service => {
17
+ const { data } = readMarkdownFile(path.join(serviceDirPath, 'index.md'));
18
+ return buildService(data);
19
+ };
17
20
 
18
- const folders = fs.readdirSync(servicesDir);
19
- const services = folders.map((folder) => readMarkdownFile(path.join(servicesDir, folder, 'index.md')));
21
+ export const getAllServicesFromPath = (serviceDir: string): Service[] => {
22
+ if (!fs.existsSync(serviceDir)) return [];
23
+ const folders = fs.readdirSync(serviceDir);
20
24
  const events = getAllEvents();
25
+ const services = folders.map((folder) => getServiceByPath(path.join(serviceDir, folder)));
21
26
 
22
- const parsedServices = services.map((frontMatter) => buildService(frontMatter.data));
23
-
24
- // @ts-ignore
25
- return parsedServices.map((service) => ({
27
+ // // @ts-ignore
28
+ return services.map((service) => ({
26
29
  ...service,
27
30
  ...getAllEventsThatHaveRelationshipWithService(service, events),
28
31
  }));
29
32
  };
30
33
 
34
+ export const getAllServices = (): Service[] => {
35
+ const allServicesFromDomainFolders = getAllServicesFromDomains();
36
+ const servicesWithoutDomains = getAllServicesFromPath(path.join(process.env.PROJECT_DIR, 'services'));
37
+
38
+ const services = [...allServicesFromDomainFolders, ...servicesWithoutDomains];
39
+ const sortedServices = services.sort((a, b) => a.name.localeCompare(b.name));
40
+ return sortedServices;
41
+ };
42
+
31
43
  export const getAllServicesByOwnerId = async (ownerId): Promise<Service[]> => {
32
44
  const services = await getAllServices();
33
45
  const servicesOwnedByUser = services.filter((service) => service.owners.some((id) => id === ownerId));
@@ -36,9 +48,20 @@ export const getAllServicesByOwnerId = async (ownerId): Promise<Service[]> => {
36
48
  }));
37
49
  };
38
50
 
39
- export const getServiceByName = async (serviceName): Promise<{ service: Service; markdown: MarkdownFile }> => {
51
+ export const getServiceByName = async ({
52
+ serviceName,
53
+ domain = null,
54
+ }: {
55
+ serviceName: string;
56
+ domain?: string;
57
+ }): Promise<{ service: Service; markdown: MarkdownFile }> => {
40
58
  try {
41
- const servicesDir = path.join(process.env.PROJECT_DIR, 'services');
59
+ let servicesDir = path.join(process.env.PROJECT_DIR, 'services');
60
+
61
+ if (domain) {
62
+ servicesDir = path.join(process.env.PROJECT_DIR, 'domains', domain, 'services');
63
+ }
64
+
42
65
  const serviceDirectory = path.join(servicesDir, serviceName);
43
66
  const { data, content } = readMarkdownFile(path.join(serviceDirectory, `index.md`));
44
67
  const service = buildService(data);
@@ -51,6 +74,7 @@ export const getServiceByName = async (serviceName): Promise<{ service: Service;
51
74
  // @ts-ignore
52
75
  service: {
53
76
  ...service,
77
+ domain,
54
78
  ...getAllEventsThatHaveRelationshipWithService(service, events),
55
79
  },
56
80
  markdown: {
@@ -64,3 +88,18 @@ export const getServiceByName = async (serviceName): Promise<{ service: Service;
64
88
  return Promise.reject();
65
89
  }
66
90
  };
91
+
92
+ export const hydrateEventProducersAndConsumers = (
93
+ event: Event,
94
+ services: Service[]
95
+ ): { producers: Service[]; consumers: Service[] } => {
96
+ const findServiceByName = (name) => services.find((service) => service.name === name);
97
+
98
+ const producers = event.producerNames.map((name) => findServiceByName(name)).filter((service) => !!service);
99
+ const consumers = event.consumerNames.map((name) => findServiceByName(name)).filter((service) => !!service);
100
+
101
+ return {
102
+ producers: producers.length > 0 ? producers : [],
103
+ consumers: consumers.length > 0 ? consumers : [],
104
+ };
105
+ };
@@ -1 +1 @@
1
- <!DOCTYPE html><html><head><meta name="viewport" content="width=device-width"/><meta charSet="utf-8"/><script src="//unpkg.com/three"></script><script src="//unpkg.com/three/examples/js/renderers/CSS2DRenderer.js"></script><link rel="stylesheet" href="https://cdn.bootcss.com/font-awesome/4.7.0/css/font-awesome.css"/><meta name="description" content="An open source project to Discover, Explore and Document your Event Driven Architectures."/><meta property="og:url" content="https://eventcatalog.dev/"/><meta property="og:type" content="website"/><meta property="og:title" content="EventCatalog | Discover, Explore and Document your Event Driven Architectures."/><meta property="og:description" content="An open source tool powered by markdown to document your Event Driven Architecture."/><meta property="og:image" content="https://eventcatalog.dev/img/opengraph.png"/><meta property="og:image:alt" content="EventCatalog | Discover, Explore and Document your Event Driven Architectures."/><meta property="og:image:width" content="1200"/><meta property="og:image:height" content="600"/><meta property="og:locale" content="en-GB"/><meta name="author" content="David Boyne"/><link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/highlight.js/9.13.1/styles/atom-one-light.min.css"/><title>404: This page could not be found</title><meta name="next-head-count" content="18"/><link rel="preload" href="/_next/static/css/6774df2af1f71309.css" as="style"/><link rel="stylesheet" href="/_next/static/css/6774df2af1f71309.css" data-n-g=""/><noscript data-n-css=""></noscript><script defer="" nomodule="" src="/_next/static/chunks/polyfills-5cd94c89d3acac5f.js"></script><script src="/_next/static/chunks/webpack-49abfa9a972ed5a3.js" defer=""></script><script src="/_next/static/chunks/framework-576ec6a1c1386453.js" defer=""></script><script src="/_next/static/chunks/main-0015f560a7edeb35.js" defer=""></script><script src="/_next/static/chunks/pages/_app-2ce3055a6b681f1a.js" defer=""></script><script src="/_next/static/chunks/pages/_error-5a714c45c50a8db4.js" defer=""></script><script src="/_next/static/KZ2mEdt5MUAVDtbybTBw1/_buildManifest.js" defer=""></script><script src="/_next/static/KZ2mEdt5MUAVDtbybTBw1/_ssgManifest.js" defer=""></script><script src="/_next/static/KZ2mEdt5MUAVDtbybTBw1/_middlewareManifest.js" defer=""></script></head><body><div id="__next" data-reactroot=""><div class="bg-gray-800"><div class="max-w-7xl mx-auto "><div class="relative flex items-center justify-between h-16"><div class="flex-1 flex items-center justify-center sm:items-stretch sm:justify-start"><div class="flex-shrink-0 flex items-center text-white font-bold"><a class="flex items-center" href="/"><img alt="logo" class="text-white w-8 inline-block mr-3" src="/logo.svg"/><span class="text-xl">EventCatalog</span></a></div></div><div class="hidden sm:block sm:ml-6"><div class="flex space-x-4"><a class="text-gray-300 hover:bg-gray-700 hover:text-white px-3 py-2 rounded-md text-sm font-medium" href="/events/">Events</a><a class="text-gray-300 hover:bg-gray-700 hover:text-white px-3 py-2 rounded-md text-sm font-medium" href="/services/">Services</a><a class="text-gray-300 hover:bg-gray-700 hover:text-white px-3 py-2 rounded-md text-sm font-medium" href="/visualiser/">Visualiser</a><a class="text-gray-300 hover:bg-gray-700 hover:text-white px-3 py-2 rounded-md text-sm font-medium" href="/overview/">3D Node Graph</a></div></div></div></div></div><div style="color:#000;background:#fff;font-family:-apple-system, BlinkMacSystemFont, Roboto, &quot;Segoe UI&quot;, &quot;Fira Sans&quot;, Avenir, &quot;Helvetica Neue&quot;, &quot;Lucida Grande&quot;, sans-serif;height:100vh;text-align:center;display:flex;flex-direction:column;align-items:center;justify-content:center"><div><style>body { margin: 0 }</style><h1 style="display:inline-block;border-right:1px solid rgba(0, 0, 0,.3);margin:0;margin-right:20px;padding:10px 23px 10px 0;font-size:24px;font-weight:500;vertical-align:top">404</h1><div style="display:inline-block;text-align:left;line-height:49px;height:49px;vertical-align:middle"><h2 style="font-size:14px;font-weight:normal;line-height:inherit;margin:0;padding:0">This page could not be found<!-- -->.</h2></div></div></div><footer class="bg-gray-800"><div class="max-w-7xl mx-auto py-12 px-4 overflow-hidden sm:px-6 lg:px-8"><nav class="-mx-5 -my-2 flex flex-wrap justify-center" aria-label="Footer"><div class="px-5 py-2"><a href="/events" class="text-base text-gray-500 hover:text-gray-400">Events</a></div><div class="px-5 py-2"><a href="/services" class="text-base text-gray-500 hover:text-gray-400">Services</a></div><div class="px-5 py-2"><a href="/visualiser" class="text-base text-gray-500 hover:text-gray-400">Visualiser</a></div><div class="px-5 py-2"><a href="/overview" class="text-base text-gray-500 hover:text-gray-400">3D Node Graph</a></div><div class="px-5 py-2"><a href="https://github.com/boyney123/eventcatalog-demo/edit/master" class="text-base text-gray-500 hover:text-gray-400">GitHub</a></div></nav><p class="mt-8 text-center text-base text-gray-400">Copyright © <!-- -->2022<!-- --> <!-- -->Your Company<!-- -->. Built with<!-- --> <a class="underline" href="https://eventcatalog.dev" target="_blank" rel="noreferrer">EventCatalog.</a></p></div></footer></div><script id="__NEXT_DATA__" type="application/json">{"props":{"pageProps":{"statusCode":404}},"page":"/_error","query":{},"buildId":"KZ2mEdt5MUAVDtbybTBw1","nextExport":true,"isFallback":false,"gip":true,"scriptLoader":[]}</script></body></html>
1
+ <!DOCTYPE html><html><head><meta name="viewport" content="width=device-width"/><meta charSet="utf-8"/><script src="//unpkg.com/three"></script><script src="//unpkg.com/three/examples/js/renderers/CSS2DRenderer.js"></script><link rel="stylesheet" href="https://cdn.bootcss.com/font-awesome/4.7.0/css/font-awesome.css"/><meta name="description" content="Discover, Explore and Document your Event Driven Architectures"/><link rel="icon" href="/favicon.ico"/><meta property="og:url" content="https://eventcatalog.dev/"/><meta property="og:type" content="website"/><meta property="og:title" content="EventCatalog"/><meta property="og:description" content="Discover, Explore and Document your Event Driven Architectures"/><meta property="og:image" content="https://eventcatalog.dev/img/opengraph.png"/><meta property="og:image:alt" content="EventCatalog | Discover, Explore and Document your Event Driven Architectures"/><meta property="og:image:width" content="1200"/><meta property="og:image:height" content="600"/><meta property="og:locale" content="en-GB"/><meta name="author" content="David Boyne"/><link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/highlight.js/9.13.1/styles/atom-one-light.min.css"/><title>404: This page could not be found</title><meta name="next-head-count" content="19"/><link rel="preload" href="/_next/static/css/70ede87da43120f8.css" as="style"/><link rel="stylesheet" href="/_next/static/css/70ede87da43120f8.css" data-n-g=""/><noscript data-n-css=""></noscript><script defer="" nomodule="" src="/_next/static/chunks/polyfills-5cd94c89d3acac5f.js"></script><script src="/_next/static/chunks/webpack-b17b8ef11b94ba66.js" defer=""></script><script src="/_next/static/chunks/framework-576ec6a1c1386453.js" defer=""></script><script src="/_next/static/chunks/main-0015f560a7edeb35.js" defer=""></script><script src="/_next/static/chunks/pages/_app-d88c877888678e85.js" defer=""></script><script src="/_next/static/chunks/pages/_error-5a714c45c50a8db4.js" defer=""></script><script src="/_next/static/UitC3v9gRidvUVAvz9F2F/_buildManifest.js" defer=""></script><script src="/_next/static/UitC3v9gRidvUVAvz9F2F/_ssgManifest.js" defer=""></script><script src="/_next/static/UitC3v9gRidvUVAvz9F2F/_middlewareManifest.js" defer=""></script></head><body><div id="__next" data-reactroot=""><div class="bg-gray-800"><div class="max-w-7xl mx-auto "><div class="relative flex items-center justify-between h-16"><div class="flex-1 flex items-center justify-center sm:items-stretch sm:justify-start"><div class="flex-shrink-0 flex items-center text-white font-bold"><a class="flex items-center" href="/"><img alt="logo" class="text-white w-8 inline-block mr-3" src="/logo.svg"/><span class="text-xl">EventCatalog</span></a></div></div><div class="hidden sm:block sm:ml-6"><div class="flex space-x-4"><a class="text-gray-300 hover:bg-gray-700 hover:text-white px-3 py-2 rounded-md text-sm font-medium" href="/events/">Events</a><a class="text-gray-300 hover:bg-gray-700 hover:text-white px-3 py-2 rounded-md text-sm font-medium" href="/services/">Services</a><a class="text-gray-300 hover:bg-gray-700 hover:text-white px-3 py-2 rounded-md text-sm font-medium" href="/domains/">Domains</a><a class="text-gray-300 hover:bg-gray-700 hover:text-white px-3 py-2 rounded-md text-sm font-medium" href="/visualiser/">Visualiser</a><a class="text-gray-300 hover:bg-gray-700 hover:text-white px-3 py-2 rounded-md text-sm font-medium" href="/overview/">3D Node Graph</a></div></div></div></div></div><div style="color:#000;background:#fff;font-family:-apple-system, BlinkMacSystemFont, Roboto, &quot;Segoe UI&quot;, &quot;Fira Sans&quot;, Avenir, &quot;Helvetica Neue&quot;, &quot;Lucida Grande&quot;, sans-serif;height:100vh;text-align:center;display:flex;flex-direction:column;align-items:center;justify-content:center"><div><style>body { margin: 0 }</style><h1 style="display:inline-block;border-right:1px solid rgba(0, 0, 0,.3);margin:0;margin-right:20px;padding:10px 23px 10px 0;font-size:24px;font-weight:500;vertical-align:top">404</h1><div style="display:inline-block;text-align:left;line-height:49px;height:49px;vertical-align:middle"><h2 style="font-size:14px;font-weight:normal;line-height:inherit;margin:0;padding:0">This page could not be found<!-- -->.</h2></div></div></div><footer class="bg-gray-800"><div class="max-w-7xl mx-auto py-12 px-4 overflow-hidden sm:px-6 lg:px-8"><nav class="-mx-5 -my-2 flex flex-wrap justify-center" aria-label="Footer"><div class="px-5 py-2"><a href="/events" class="text-base text-gray-500 hover:text-gray-400">Events</a></div><div class="px-5 py-2"><a href="/services" class="text-base text-gray-500 hover:text-gray-400">Services</a></div><div class="px-5 py-2"><a href="/visualiser" class="text-base text-gray-500 hover:text-gray-400">Visualiser</a></div><div class="px-5 py-2"><a href="/overview" class="text-base text-gray-500 hover:text-gray-400">3D Node Graph</a></div><div class="px-5 py-2"><a href="https://github.com/boyney123/eventcatalog-demo/edit/master" class="text-base text-gray-500 hover:text-gray-400">GitHub</a></div></nav><p class="mt-8 text-center text-base text-gray-400">Copyright © <!-- -->2022<!-- --> <!-- -->Your Company<!-- -->. Built with<!-- --> <a class="underline" href="https://eventcatalog.dev" target="_blank" rel="noreferrer">EventCatalog.</a></p></div></footer></div><script id="__NEXT_DATA__" type="application/json">{"props":{"pageProps":{"statusCode":404}},"page":"/_error","query":{},"buildId":"UitC3v9gRidvUVAvz9F2F","nextExport":true,"isFallback":false,"gip":true,"scriptLoader":[]}</script></body></html>
@@ -0,0 +1 @@
1
+ {"pageProps":{"changes":[{"versions":["0.0.2","0.0.2"],"changelog":{"content":null},"value":"Index: schema.json (0.0.2)\n===================================================================\n--- schema.json (0.0.2)\n+++ schema.json (0.0.2)\n@@ -36,9 +36,9 @@\n \"quantity\": {\n \"type\": \"number\",\n \"description\": \"How many items the user wants to add to their shopping cart\",\n \"minimum\": 1,\n- \"maximum\": 100,\n+ \"maximum\": 1000,\n \"default\": 1\n }\n }\n }\n"},{"versions":["0.0.1","0.0.2"],"changelog":{"content":null},"value":"===================================================================\n--- schema.json (0.0.1)\n+++ schema.json (0.0.2)\n@@ -31,8 +31,15 @@\n },\n \"itemId\": {\n \"type\": \"string\",\n \"description\": \"The ID of the shopping item\"\n+ },\n+ \"quantity\": {\n+ \"type\": \"number\",\n+ \"description\": \"How many items the user wants to add to their shopping cart\",\n+ \"minimum\": 1,\n+ \"maximum\": 100,\n+ \"default\": 1\n }\n }\n }\n }\n"}],"name":"AddedItemToCart","currentVersion":"0.0.2"},"__N_SSG":true}
@@ -0,0 +1 @@
1
+ {"pageProps":{"event":{"name":"AddedItemToCart","version":"0.0.1","summary":"Holds information about what the user added to their shopping cart.\n","domain":"Shopping","producerNames":["Basket Service"],"consumerNames":["Data Lake"],"owners":["dboyne","mSmith"],"externalLinks":[],"producers":[],"consumers":[],"historicVersions":["0.0.2","0.0.1"],"schema":{"snippet":"{\n \"$id\": \"https://example.com/AddedItemToCart.json\",\n \"$schema\": \"https://json-schema.org/draft/2020-12/schema\",\n \"title\": \"AddedItemToCart\",\n \"type\": \"object\",\n \"properties\": {\n \"metadata\": {\n \"type\": \"object\",\n \"properties\": {\n \"correlationId\": {\n \"type\": \"string\",\n \"description\": \"The ID of the user\"\n },\n \"domain\": {\n \"type\": \"string\",\n \"description\": \"The domain of the event\"\n },\n \"service\": {\n \"type\": \"string\",\n \"description\": \"The name of the service that triggered the event\"\n }\n },\n \"required\": [\"correlationId\", \"domain\"]\n },\n \"data\": {\n \"type\": \"object\",\n \"properties\": {\n \"userId\": {\n \"type\": \"string\",\n \"description\": \"The ID of the user\"\n },\n \"itemId\": {\n \"type\": \"string\",\n \"description\": \"The ID of the shopping item\"\n }\n }\n }\n }\n}\n","language":"json","extension":"json"},"examples":[]},"markdown":{"content":"\n<Admonition>When firing this event make sure you set the `correlation-id` in the headers. Our schemas have standard metadata make sure you read and follow it.</Admonition>\n\n### Details\n\nThis event can be triggered multiple times per customer. Everytime the customer adds an item to their shopping cart this event will be triggered.\n\nWe have a frontend application that allows users to buy things from our store. This front end interacts directly with the `Basket Service` to add items to the cart. The `Basket Service` will raise the events.\n\n\n### Consumer / Producer Diagram\n\n<Mermaid />\n\n<Schema />","source":{"compiledSource":"var c=Object.defineProperty,p=Object.defineProperties;var l=Object.getOwnPropertyDescriptors;var i=Object.getOwnPropertySymbols;var a=Object.prototype.hasOwnProperty,s=Object.prototype.propertyIsEnumerable;var d=(e,t,o)=>t in e?c(e,t,{enumerable:!0,configurable:!0,writable:!0,value:o}):e[t]=o,r=(e,t)=>{for(var o in t||(t={}))a.call(t,o)&&d(e,o,t[o]);if(i)for(var o of i(t))s.call(t,o)&&d(e,o,t[o]);return e},m=(e,t)=>p(e,l(t));var h=(e,t)=>{var o={};for(var n in e)a.call(e,n)&&t.indexOf(n)<0&&(o[n]=e[n]);if(e!=null&&i)for(var n of i(e))t.indexOf(n)<0&&s.call(e,n)&&(o[n]=e[n]);return o};const makeShortcode=e=>function(o){return console.warn(\"Component \"+e+\" was not imported, exported, or provided by MDXProvider as global scope\"),mdx(\"div\",r({},o))},Admonition=makeShortcode(\"Admonition\"),Mermaid=makeShortcode(\"Mermaid\"),Schema=makeShortcode(\"Schema\"),layoutProps={},MDXLayout=\"wrapper\";function MDXContent(o){var n=o,{components:e}=n,t=h(n,[\"components\"]);return mdx(MDXLayout,m(r(r({},layoutProps),t),{components:e,mdxType:\"MDXLayout\"}),mdx(Admonition,{mdxType:\"Admonition\"},\"When firing this event make sure you set the `correlation-id` in the headers. Our schemas have standard metadata make sure you read and follow it.\"),mdx(\"h3\",null,\"Details\"),mdx(\"p\",null,\"This event can be triggered multiple times per customer. Everytime the customer adds an item to their shopping cart this event will be triggered.\"),mdx(\"p\",null,\"We have a frontend application that allows users to buy things from our store. This front end interacts directly with the \",mdx(\"inlineCode\",{parentName:\"p\"},\"Basket Service\"),\" to add items to the cart. The \",mdx(\"inlineCode\",{parentName:\"p\"},\"Basket Service\"),\" will raise the events.\"),mdx(\"h3\",null,\"Consumer / Producer Diagram\"),mdx(Mermaid,{mdxType:\"Mermaid\"}),mdx(Schema,{mdxType:\"Schema\"}))}MDXContent.isMDXComponent=!0;\n","scope":{}},"lastModifiedDate":"2022/2/28"},"eventPath":"/domains/Shopping/events/AddedItemToCart","breadCrumbs":[{"name":"Domain","href":"/events","current":false},{"name":"Shopping","href":"/domains/Shopping","current":false},{"name":"Events","href":"/events?domain=Shopping","current":false},{"name":"AddedItemToCart","href":"/domains/Shopping/events/AddedItemToCart","current":false},{"name":"v0.0.1","href":"/domains/Shopping/events/AddedItemToCart/v/0.0.1","current":true}],"loadedVersion":"0.0.1"},"__N_SSG":true}