@motiadev/core 0.13.2-beta.163 → 0.13.2-beta.164-562802

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 (522) hide show
  1. package/dist/index.d.mts +38 -0
  2. package/dist/index.mjs +30 -0
  3. package/dist/src/adapters/defaults/cron/in-memory-cron-adapter.d.mts +17 -0
  4. package/dist/src/adapters/defaults/cron/in-memory-cron-adapter.d.mts.map +1 -0
  5. package/dist/src/adapters/defaults/cron/in-memory-cron-adapter.mjs +51 -0
  6. package/dist/src/adapters/defaults/cron/in-memory-cron-adapter.mjs.map +1 -0
  7. package/dist/src/adapters/defaults/event/in-memory-queue-event-adapter.d.mts +19 -0
  8. package/dist/src/adapters/defaults/event/in-memory-queue-event-adapter.d.mts.map +1 -0
  9. package/dist/src/adapters/defaults/event/in-memory-queue-event-adapter.mjs +54 -0
  10. package/dist/src/adapters/defaults/event/in-memory-queue-event-adapter.mjs.map +1 -0
  11. package/dist/src/adapters/defaults/index.d.mts +8 -0
  12. package/dist/src/adapters/defaults/index.mjs +10 -0
  13. package/dist/src/adapters/defaults/state/file-state-adapter.d.mts +27 -0
  14. package/dist/src/adapters/defaults/state/file-state-adapter.d.mts.map +1 -0
  15. package/dist/src/adapters/defaults/state/file-state-adapter.mjs +105 -0
  16. package/dist/src/adapters/defaults/state/file-state-adapter.mjs.map +1 -0
  17. package/dist/src/adapters/defaults/state/memory-state-adapter.d.mts +20 -0
  18. package/dist/src/adapters/defaults/state/memory-state-adapter.d.mts.map +1 -0
  19. package/dist/src/adapters/defaults/state/memory-state-adapter.mjs +58 -0
  20. package/dist/src/adapters/defaults/state/memory-state-adapter.mjs.map +1 -0
  21. package/dist/src/adapters/defaults/state/utils.mjs +40 -0
  22. package/dist/src/adapters/defaults/state/utils.mjs.map +1 -0
  23. package/dist/src/adapters/defaults/stream/file-stream-adapter-manager.d.mts +13 -0
  24. package/dist/src/adapters/defaults/stream/file-stream-adapter-manager.d.mts.map +1 -0
  25. package/dist/src/adapters/defaults/stream/file-stream-adapter-manager.mjs +16 -0
  26. package/dist/src/adapters/defaults/stream/file-stream-adapter-manager.mjs.map +1 -0
  27. package/dist/src/adapters/defaults/stream/file-stream-adapter.d.mts +24 -0
  28. package/dist/src/adapters/defaults/stream/file-stream-adapter.d.mts.map +1 -0
  29. package/dist/src/adapters/defaults/stream/file-stream-adapter.mjs +84 -0
  30. package/dist/src/adapters/defaults/stream/file-stream-adapter.mjs.map +1 -0
  31. package/dist/src/adapters/defaults/stream/memory-stream-adapter-manager.d.mts +10 -0
  32. package/dist/src/adapters/defaults/stream/memory-stream-adapter-manager.d.mts.map +1 -0
  33. package/dist/src/adapters/defaults/stream/memory-stream-adapter-manager.mjs +12 -0
  34. package/dist/src/adapters/defaults/stream/memory-stream-adapter-manager.mjs.map +1 -0
  35. package/dist/src/adapters/defaults/stream/memory-stream-adapter.d.mts +20 -0
  36. package/dist/src/adapters/defaults/stream/memory-stream-adapter.d.mts.map +1 -0
  37. package/dist/src/adapters/defaults/stream/memory-stream-adapter.mjs +58 -0
  38. package/dist/src/adapters/defaults/stream/memory-stream-adapter.mjs.map +1 -0
  39. package/dist/src/adapters/interfaces/cron-adapter.interface.d.mts +32 -0
  40. package/dist/src/adapters/interfaces/cron-adapter.interface.d.mts.map +1 -0
  41. package/dist/src/adapters/interfaces/event-adapter.interface.d.mts +19 -0
  42. package/dist/src/adapters/interfaces/event-adapter.interface.d.mts.map +1 -0
  43. package/dist/src/adapters/interfaces/observability-adapter.interface.d.mts +27 -0
  44. package/dist/src/adapters/interfaces/observability-adapter.interface.d.mts.map +1 -0
  45. package/dist/src/adapters/interfaces/state-adapter.interface.d.mts +28 -0
  46. package/dist/src/adapters/interfaces/state-adapter.interface.d.mts.map +1 -0
  47. package/dist/src/adapters/interfaces/stream-adapter-manager.interface.d.mts +10 -0
  48. package/dist/src/adapters/interfaces/stream-adapter-manager.interface.d.mts.map +1 -0
  49. package/dist/src/adapters/interfaces/stream-adapter.interface.d.mts +26 -0
  50. package/dist/src/adapters/interfaces/stream-adapter.interface.d.mts.map +1 -0
  51. package/dist/src/adapters/interfaces/stream-adapter.interface.mjs +17 -0
  52. package/dist/src/adapters/interfaces/stream-adapter.interface.mjs.map +1 -0
  53. package/dist/src/analytics/utils.d.mts +9 -0
  54. package/dist/src/analytics/utils.d.mts.map +1 -0
  55. package/dist/src/analytics/utils.mjs +35 -0
  56. package/dist/src/analytics/utils.mjs.map +1 -0
  57. package/dist/src/call-step-file.mjs +213 -0
  58. package/dist/src/call-step-file.mjs.map +1 -0
  59. package/dist/src/config.d.mts +7 -0
  60. package/dist/src/config.d.mts.map +1 -0
  61. package/dist/src/config.mjs +6 -0
  62. package/dist/src/config.mjs.map +1 -0
  63. package/dist/src/cron-handler.d.mts +18 -0
  64. package/dist/src/cron-handler.d.mts.map +1 -0
  65. package/dist/src/cron-handler.mjs +103 -0
  66. package/dist/src/cron-handler.mjs.map +1 -0
  67. package/dist/src/endpoints/analytics-endpoint.mjs +29 -0
  68. package/dist/src/endpoints/analytics-endpoint.mjs.map +1 -0
  69. package/dist/src/endpoints/flows-config-endpoint.mjs +38 -0
  70. package/dist/src/endpoints/flows-config-endpoint.mjs.map +1 -0
  71. package/dist/src/endpoints/flows-endpoint.mjs +39 -0
  72. package/dist/src/endpoints/flows-endpoint.mjs.map +1 -0
  73. package/dist/src/endpoints/step-endpoint.mjs +41 -0
  74. package/dist/src/endpoints/step-endpoint.mjs.map +1 -0
  75. package/dist/src/generate-trace-id.mjs +13 -0
  76. package/dist/src/generate-trace-id.mjs.map +1 -0
  77. package/dist/src/get-step-config.d.mts +9 -0
  78. package/dist/src/get-step-config.d.mts.map +1 -0
  79. package/dist/src/get-step-config.mjs +63 -0
  80. package/dist/src/get-step-config.mjs.map +1 -0
  81. package/dist/src/get-step-language.mjs +14 -0
  82. package/dist/src/get-step-language.mjs.map +1 -0
  83. package/dist/src/guards.d.mts +10 -0
  84. package/dist/src/guards.d.mts.map +1 -0
  85. package/dist/src/guards.mjs +9 -0
  86. package/dist/src/guards.mjs.map +1 -0
  87. package/dist/src/helper/flows-helper.mjs +126 -0
  88. package/dist/src/helper/flows-helper.mjs.map +1 -0
  89. package/dist/src/infrastructure-validator/defaults.mjs +17 -0
  90. package/dist/src/infrastructure-validator/defaults.mjs.map +1 -0
  91. package/dist/src/infrastructure-validator/index.d.mts +3 -0
  92. package/dist/src/infrastructure-validator/index.mjs +4 -0
  93. package/dist/src/infrastructure-validator/schemas.d.mts +1 -0
  94. package/dist/src/infrastructure-validator/schemas.mjs +77 -0
  95. package/dist/src/infrastructure-validator/schemas.mjs.map +1 -0
  96. package/dist/src/infrastructure-validator/types.d.mts +14 -0
  97. package/dist/src/infrastructure-validator/types.d.mts.map +1 -0
  98. package/dist/src/infrastructure-validator/validations.d.mts +7 -0
  99. package/dist/src/infrastructure-validator/validations.d.mts.map +1 -0
  100. package/dist/src/infrastructure-validator/validations.mjs +29 -0
  101. package/dist/src/infrastructure-validator/validations.mjs.map +1 -0
  102. package/dist/src/language-runner.mjs +55 -0
  103. package/dist/src/language-runner.mjs.map +1 -0
  104. package/dist/src/locked-data.d.mts +81 -0
  105. package/dist/src/locked-data.d.mts.map +1 -0
  106. package/dist/src/locked-data.mjs +223 -0
  107. package/dist/src/locked-data.mjs.map +1 -0
  108. package/dist/src/logger-factory.d.mts +16 -0
  109. package/dist/src/logger-factory.d.mts.map +1 -0
  110. package/dist/src/logger-factory.mjs +33 -0
  111. package/dist/src/logger-factory.mjs.map +1 -0
  112. package/dist/src/logger.d.mts +28 -0
  113. package/dist/src/logger.d.mts.map +1 -0
  114. package/dist/src/logger.mjs +64 -0
  115. package/dist/src/logger.mjs.map +1 -0
  116. package/dist/src/mermaid-generator.d.mts +9 -0
  117. package/dist/src/mermaid-generator.d.mts.map +1 -0
  118. package/dist/src/mermaid-generator.mjs +126 -0
  119. package/dist/src/mermaid-generator.mjs.map +1 -0
  120. package/dist/src/motia.d.mts +36 -0
  121. package/dist/src/motia.d.mts.map +1 -0
  122. package/dist/src/motia.mjs +6 -0
  123. package/dist/src/motia.mjs.map +1 -0
  124. package/dist/src/node/can-access.d.mts +1 -0
  125. package/dist/src/node/can-access.mjs +36 -0
  126. package/dist/src/node/can-access.mjs.map +1 -0
  127. package/dist/src/node/get-config.d.mts +1 -0
  128. package/dist/src/node/get-config.mjs +49 -0
  129. package/dist/src/node/get-config.mjs.map +1 -0
  130. package/dist/src/node/logger.mjs +47 -0
  131. package/dist/src/node/logger.mjs.map +1 -0
  132. package/dist/src/node/middleware-compose.mjs +10 -0
  133. package/dist/src/node/middleware-compose.mjs.map +1 -0
  134. package/dist/src/node/node-runner.d.mts +1 -0
  135. package/dist/src/node/node-runner.mjs +94 -0
  136. package/dist/src/node/node-runner.mjs.map +1 -0
  137. package/dist/src/node/rpc-state-manager.mjs +35 -0
  138. package/dist/src/node/rpc-state-manager.mjs.map +1 -0
  139. package/dist/src/node/rpc.mjs +55 -0
  140. package/dist/src/node/rpc.mjs.map +1 -0
  141. package/dist/src/observability/create-trace.mjs +26 -0
  142. package/dist/src/observability/create-trace.mjs.map +1 -0
  143. package/dist/src/observability/index.d.mts +7 -0
  144. package/dist/src/observability/index.d.mts.map +1 -0
  145. package/dist/src/observability/no-tracer.d.mts +15 -0
  146. package/dist/src/observability/no-tracer.d.mts.map +1 -0
  147. package/dist/src/observability/no-tracer.mjs +15 -0
  148. package/dist/src/observability/no-tracer.mjs.map +1 -0
  149. package/dist/src/observability/redis-trace-stream-adapter.mjs +76 -0
  150. package/dist/src/observability/redis-trace-stream-adapter.mjs.map +1 -0
  151. package/dist/src/observability/stream-tracer.mjs +87 -0
  152. package/dist/src/observability/stream-tracer.mjs.map +1 -0
  153. package/dist/src/observability/trace-manager.mjs +24 -0
  154. package/dist/src/observability/trace-manager.mjs.map +1 -0
  155. package/dist/src/observability/tracer.mjs +87 -0
  156. package/dist/src/observability/tracer.mjs.map +1 -0
  157. package/dist/src/observability/types.d.mts +14 -0
  158. package/dist/src/observability/types.d.mts.map +1 -0
  159. package/dist/src/pretty-print.mjs +50 -0
  160. package/dist/src/pretty-print.mjs.map +1 -0
  161. package/dist/src/printer.d.mts +65 -0
  162. package/dist/src/printer.d.mts.map +1 -0
  163. package/dist/src/printer.mjs +147 -0
  164. package/dist/src/printer.mjs.map +1 -0
  165. package/dist/src/process-communication/communication-config.mjs +26 -0
  166. package/dist/src/process-communication/communication-config.mjs.map +1 -0
  167. package/dist/src/process-communication/process-manager.mjs +67 -0
  168. package/dist/src/process-communication/process-manager.mjs.map +1 -0
  169. package/dist/src/queue-manager.d.mts +37 -0
  170. package/dist/src/queue-manager.d.mts.map +1 -0
  171. package/dist/src/queue-manager.mjs +209 -0
  172. package/dist/src/queue-manager.mjs.map +1 -0
  173. package/dist/src/run-stream-can-access.mjs +59 -0
  174. package/dist/src/run-stream-can-access.mjs.map +1 -0
  175. package/dist/src/schema-utils.mjs +30 -0
  176. package/dist/src/schema-utils.mjs.map +1 -0
  177. package/dist/src/server.d.mts +40 -0
  178. package/dist/src/server.d.mts.map +1 -0
  179. package/dist/src/server.mjs +332 -0
  180. package/dist/src/server.mjs.map +1 -0
  181. package/dist/src/socket-server/helpers.mjs +35 -0
  182. package/dist/src/socket-server/helpers.mjs.map +1 -0
  183. package/dist/src/socket-server.mjs +127 -0
  184. package/dist/src/socket-server.mjs.map +1 -0
  185. package/dist/src/state/create-state-adapter.d.mts +11 -0
  186. package/dist/src/state/create-state-adapter.d.mts.map +1 -0
  187. package/dist/src/state/create-state-adapter.mjs +11 -0
  188. package/dist/src/state/create-state-adapter.mjs.map +1 -0
  189. package/dist/src/step-handler-rpc-processor.mjs +56 -0
  190. package/dist/src/step-handler-rpc-processor.mjs.map +1 -0
  191. package/dist/src/step-handler-rpc-stdin-processor.mjs +71 -0
  192. package/dist/src/step-handler-rpc-stdin-processor.mjs.map +1 -0
  193. package/dist/src/step-handlers.d.mts +13 -0
  194. package/dist/src/step-handlers.d.mts.map +1 -0
  195. package/dist/src/step-handlers.mjs +93 -0
  196. package/dist/src/step-handlers.mjs.map +1 -0
  197. package/dist/src/step-validator.d.mts +15 -0
  198. package/dist/src/step-validator.d.mts.map +1 -0
  199. package/dist/src/step-validator.mjs +118 -0
  200. package/dist/src/step-validator.mjs.map +1 -0
  201. package/dist/src/steps/emit.step.mjs +20 -0
  202. package/dist/src/steps/emit.step.mjs.map +1 -0
  203. package/dist/src/steps/index.mjs +14 -0
  204. package/dist/src/steps/index.mjs.map +1 -0
  205. package/dist/src/streams/flows-config-stream.mjs +46 -0
  206. package/dist/src/streams/flows-config-stream.mjs.map +1 -0
  207. package/dist/src/streams/flows-stream.mjs +33 -0
  208. package/dist/src/streams/flows-stream.mjs.map +1 -0
  209. package/dist/src/streams/redis-logs-stream.d.mts +3 -0
  210. package/dist/src/streams/redis-logs-stream.mjs +97 -0
  211. package/dist/src/streams/redis-logs-stream.mjs.map +1 -0
  212. package/dist/src/streams/stream-factory.d.mts +7 -0
  213. package/dist/src/streams/stream-factory.d.mts.map +1 -0
  214. package/dist/src/types/app-config-types.d.mts +48 -0
  215. package/dist/src/types/app-config-types.d.mts.map +1 -0
  216. package/dist/src/types/generate-type-from-schema.mjs +30 -0
  217. package/dist/src/types/generate-type-from-schema.mjs.map +1 -0
  218. package/dist/src/types/generate-types-from-response.mjs +12 -0
  219. package/dist/src/types/generate-types-from-response.mjs.map +1 -0
  220. package/dist/src/types/generate-types.mjs +101 -0
  221. package/dist/src/types/generate-types.mjs.map +1 -0
  222. package/dist/src/types/merge-schemas.mjs +102 -0
  223. package/dist/src/types/merge-schemas.mjs.map +1 -0
  224. package/dist/src/types/schema.types.d.mts +13 -0
  225. package/dist/src/types/schema.types.d.mts.map +1 -0
  226. package/dist/src/types/schema.types.mjs +14 -0
  227. package/dist/src/types/schema.types.mjs.map +1 -0
  228. package/dist/src/types-stream.d.mts +46 -0
  229. package/dist/src/types-stream.d.mts.map +1 -0
  230. package/dist/src/types.d.mts +188 -0
  231. package/dist/src/types.d.mts.map +1 -0
  232. package/dist/src/utils.mjs +13 -0
  233. package/dist/src/utils.mjs.map +1 -0
  234. package/dist/src/validate-event-input.mjs +76 -0
  235. package/dist/src/validate-event-input.mjs.map +1 -0
  236. package/jest.config.cjs +20 -0
  237. package/package.json +21 -8
  238. package/tsdown.config.ts +53 -0
  239. package/dist/index.d.ts +0 -30
  240. package/dist/index.d.ts.map +0 -1
  241. package/dist/index.js +0 -72
  242. package/dist/jest.config.d.ts +0 -8
  243. package/dist/jest.config.d.ts.map +0 -1
  244. package/dist/src/adapters/defaults/cron/in-memory-cron-adapter.d.ts +0 -13
  245. package/dist/src/adapters/defaults/cron/in-memory-cron-adapter.d.ts.map +0 -1
  246. package/dist/src/adapters/defaults/cron/in-memory-cron-adapter.js +0 -53
  247. package/dist/src/adapters/defaults/event/in-memory-queue-event-adapter.d.ts +0 -15
  248. package/dist/src/adapters/defaults/event/in-memory-queue-event-adapter.d.ts.map +0 -1
  249. package/dist/src/adapters/defaults/event/in-memory-queue-event-adapter.js +0 -49
  250. package/dist/src/adapters/defaults/index.d.ts +0 -9
  251. package/dist/src/adapters/defaults/index.d.ts.map +0 -1
  252. package/dist/src/adapters/defaults/index.js +0 -19
  253. package/dist/src/adapters/defaults/state/file-state-adapter.d.ts +0 -23
  254. package/dist/src/adapters/defaults/state/file-state-adapter.d.ts.map +0 -1
  255. package/dist/src/adapters/defaults/state/file-state-adapter.js +0 -149
  256. package/dist/src/adapters/defaults/state/memory-state-adapter.d.ts +0 -16
  257. package/dist/src/adapters/defaults/state/memory-state-adapter.d.ts.map +0 -1
  258. package/dist/src/adapters/defaults/state/memory-state-adapter.js +0 -69
  259. package/dist/src/adapters/defaults/state/utils.d.ts +0 -4
  260. package/dist/src/adapters/defaults/state/utils.d.ts.map +0 -1
  261. package/dist/src/adapters/defaults/state/utils.js +0 -66
  262. package/dist/src/adapters/defaults/stream/file-stream-adapter-manager.d.ts +0 -9
  263. package/dist/src/adapters/defaults/stream/file-stream-adapter-manager.d.ts.map +0 -1
  264. package/dist/src/adapters/defaults/stream/file-stream-adapter-manager.js +0 -14
  265. package/dist/src/adapters/defaults/stream/file-stream-adapter.d.ts +0 -22
  266. package/dist/src/adapters/defaults/stream/file-stream-adapter.d.ts.map +0 -1
  267. package/dist/src/adapters/defaults/stream/file-stream-adapter.js +0 -125
  268. package/dist/src/adapters/defaults/stream/index.d.ts +0 -5
  269. package/dist/src/adapters/defaults/stream/index.d.ts.map +0 -1
  270. package/dist/src/adapters/defaults/stream/index.js +0 -11
  271. package/dist/src/adapters/defaults/stream/memory-stream-adapter-manager.d.ts +0 -6
  272. package/dist/src/adapters/defaults/stream/memory-stream-adapter-manager.d.ts.map +0 -1
  273. package/dist/src/adapters/defaults/stream/memory-stream-adapter-manager.js +0 -10
  274. package/dist/src/adapters/defaults/stream/memory-stream-adapter.d.ts +0 -16
  275. package/dist/src/adapters/defaults/stream/memory-stream-adapter.d.ts.map +0 -1
  276. package/dist/src/adapters/defaults/stream/memory-stream-adapter.js +0 -55
  277. package/dist/src/adapters/interfaces/cron-adapter.interface.d.ts +0 -29
  278. package/dist/src/adapters/interfaces/cron-adapter.interface.d.ts.map +0 -1
  279. package/dist/src/adapters/interfaces/cron-adapter.interface.js +0 -2
  280. package/dist/src/adapters/interfaces/event-adapter.interface.d.ts +0 -15
  281. package/dist/src/adapters/interfaces/event-adapter.interface.d.ts.map +0 -1
  282. package/dist/src/adapters/interfaces/event-adapter.interface.js +0 -2
  283. package/dist/src/adapters/interfaces/index.d.ts +0 -7
  284. package/dist/src/adapters/interfaces/index.d.ts.map +0 -1
  285. package/dist/src/adapters/interfaces/index.js +0 -5
  286. package/dist/src/adapters/interfaces/observability-adapter.interface.d.ts +0 -23
  287. package/dist/src/adapters/interfaces/observability-adapter.interface.d.ts.map +0 -1
  288. package/dist/src/adapters/interfaces/observability-adapter.interface.js +0 -2
  289. package/dist/src/adapters/interfaces/state-adapter.interface.d.ts +0 -24
  290. package/dist/src/adapters/interfaces/state-adapter.interface.d.ts.map +0 -1
  291. package/dist/src/adapters/interfaces/state-adapter.interface.js +0 -2
  292. package/dist/src/adapters/interfaces/stream-adapter-manager.interface.d.ts +0 -6
  293. package/dist/src/adapters/interfaces/stream-adapter-manager.interface.d.ts.map +0 -1
  294. package/dist/src/adapters/interfaces/stream-adapter-manager.interface.js +0 -2
  295. package/dist/src/adapters/interfaces/stream-adapter.interface.d.ts +0 -22
  296. package/dist/src/adapters/interfaces/stream-adapter.interface.d.ts.map +0 -1
  297. package/dist/src/adapters/interfaces/stream-adapter.interface.js +0 -16
  298. package/dist/src/analytics/utils.d.ts +0 -6
  299. package/dist/src/analytics/utils.d.ts.map +0 -1
  300. package/dist/src/analytics/utils.js +0 -51
  301. package/dist/src/call-step-file.d.ts +0 -16
  302. package/dist/src/call-step-file.d.ts.map +0 -1
  303. package/dist/src/call-step-file.js +0 -194
  304. package/dist/src/config.d.ts +0 -3
  305. package/dist/src/config.d.ts.map +0 -1
  306. package/dist/src/config.js +0 -5
  307. package/dist/src/config.types.d.ts +0 -17
  308. package/dist/src/config.types.d.ts.map +0 -1
  309. package/dist/src/config.types.js +0 -2
  310. package/dist/src/cron-handler.d.ts +0 -14
  311. package/dist/src/cron-handler.d.ts.map +0 -1
  312. package/dist/src/cron-handler.js +0 -132
  313. package/dist/src/endpoints/analytics-endpoint.d.ts +0 -3
  314. package/dist/src/endpoints/analytics-endpoint.d.ts.map +0 -1
  315. package/dist/src/endpoints/analytics-endpoint.js +0 -28
  316. package/dist/src/endpoints/flows-config-endpoint.d.ts +0 -4
  317. package/dist/src/endpoints/flows-config-endpoint.d.ts.map +0 -1
  318. package/dist/src/endpoints/flows-config-endpoint.js +0 -34
  319. package/dist/src/endpoints/flows-endpoint.d.ts +0 -3
  320. package/dist/src/endpoints/flows-endpoint.d.ts.map +0 -1
  321. package/dist/src/endpoints/flows-endpoint.js +0 -29
  322. package/dist/src/endpoints/step-endpoint.d.ts +0 -4
  323. package/dist/src/endpoints/step-endpoint.d.ts.map +0 -1
  324. package/dist/src/endpoints/step-endpoint.js +0 -45
  325. package/dist/src/generate-trace-id.d.ts +0 -3
  326. package/dist/src/generate-trace-id.d.ts.map +0 -1
  327. package/dist/src/generate-trace-id.js +0 -14
  328. package/dist/src/get-step-config.d.ts +0 -5
  329. package/dist/src/get-step-config.d.ts.map +0 -1
  330. package/dist/src/get-step-config.js +0 -68
  331. package/dist/src/get-step-language.d.ts +0 -2
  332. package/dist/src/get-step-language.d.ts.map +0 -1
  333. package/dist/src/get-step-language.js +0 -27
  334. package/dist/src/guards.d.ts +0 -6
  335. package/dist/src/guards.d.ts.map +0 -1
  336. package/dist/src/guards.js +0 -11
  337. package/dist/src/helper/flows-helper.d.ts +0 -6
  338. package/dist/src/helper/flows-helper.d.ts.map +0 -1
  339. package/dist/src/helper/flows-helper.js +0 -143
  340. package/dist/src/infrastructure-validator/defaults.d.ts +0 -4
  341. package/dist/src/infrastructure-validator/defaults.d.ts.map +0 -1
  342. package/dist/src/infrastructure-validator/defaults.js +0 -16
  343. package/dist/src/infrastructure-validator/index.d.ts +0 -4
  344. package/dist/src/infrastructure-validator/index.d.ts.map +0 -1
  345. package/dist/src/infrastructure-validator/index.js +0 -13
  346. package/dist/src/infrastructure-validator/schemas.d.ts +0 -45
  347. package/dist/src/infrastructure-validator/schemas.d.ts.map +0 -1
  348. package/dist/src/infrastructure-validator/schemas.js +0 -100
  349. package/dist/src/infrastructure-validator/types.d.ts +0 -21
  350. package/dist/src/infrastructure-validator/types.d.ts.map +0 -1
  351. package/dist/src/infrastructure-validator/types.js +0 -2
  352. package/dist/src/infrastructure-validator/validations.d.ts +0 -4
  353. package/dist/src/infrastructure-validator/validations.d.ts.map +0 -1
  354. package/dist/src/infrastructure-validator/validations.js +0 -62
  355. package/dist/src/language-runner.d.ts +0 -15
  356. package/dist/src/language-runner.d.ts.map +0 -1
  357. package/dist/src/language-runner.js +0 -31
  358. package/dist/src/locked-data.d.ts +0 -78
  359. package/dist/src/locked-data.d.ts.map +0 -1
  360. package/dist/src/locked-data.js +0 -284
  361. package/dist/src/logger-factory.d.ts +0 -19
  362. package/dist/src/logger-factory.d.ts.map +0 -1
  363. package/dist/src/logger-factory.js +0 -27
  364. package/dist/src/logger.d.ts +0 -26
  365. package/dist/src/logger.d.ts.map +0 -1
  366. package/dist/src/logger.js +0 -60
  367. package/dist/src/mermaid-generator.d.ts +0 -5
  368. package/dist/src/mermaid-generator.d.ts.map +0 -1
  369. package/dist/src/mermaid-generator.js +0 -203
  370. package/dist/src/motia.d.ts +0 -32
  371. package/dist/src/motia.d.ts.map +0 -1
  372. package/dist/src/motia.js +0 -4
  373. package/dist/src/node/can-access.d.ts +0 -2
  374. package/dist/src/node/can-access.d.ts.map +0 -1
  375. package/dist/src/node/can-access.js +0 -44
  376. package/dist/src/node/get-config.d.ts +0 -2
  377. package/dist/src/node/get-config.d.ts.map +0 -1
  378. package/dist/src/node/get-config.js +0 -64
  379. package/dist/src/node/logger.d.ts +0 -16
  380. package/dist/src/node/logger.d.ts.map +0 -1
  381. package/dist/src/node/logger.js +0 -48
  382. package/dist/src/node/middleware-compose.d.ts +0 -2
  383. package/dist/src/node/middleware-compose.d.ts.map +0 -1
  384. package/dist/src/node/middleware-compose.js +0 -10
  385. package/dist/src/node/node-runner.d.ts +0 -2
  386. package/dist/src/node/node-runner.d.ts.map +0 -1
  387. package/dist/src/node/node-runner.js +0 -83
  388. package/dist/src/node/rpc-state-manager.d.ts +0 -12
  389. package/dist/src/node/rpc-state-manager.d.ts.map +0 -1
  390. package/dist/src/node/rpc-state-manager.js +0 -24
  391. package/dist/src/node/rpc.d.ts +0 -10
  392. package/dist/src/node/rpc.d.ts.map +0 -1
  393. package/dist/src/node/rpc.js +0 -50
  394. package/dist/src/observability/create-trace.d.ts +0 -4
  395. package/dist/src/observability/create-trace.d.ts.map +0 -1
  396. package/dist/src/observability/create-trace.js +0 -22
  397. package/dist/src/observability/index.d.ts +0 -4
  398. package/dist/src/observability/index.d.ts.map +0 -1
  399. package/dist/src/observability/index.js +0 -2
  400. package/dist/src/observability/no-tracer.d.ts +0 -10
  401. package/dist/src/observability/no-tracer.d.ts.map +0 -1
  402. package/dist/src/observability/no-tracer.js +0 -14
  403. package/dist/src/observability/redis-trace-stream-adapter.d.ts +0 -17
  404. package/dist/src/observability/redis-trace-stream-adapter.d.ts.map +0 -1
  405. package/dist/src/observability/redis-trace-stream-adapter.js +0 -65
  406. package/dist/src/observability/stream-tracer.d.ts +0 -22
  407. package/dist/src/observability/stream-tracer.d.ts.map +0 -1
  408. package/dist/src/observability/stream-tracer.js +0 -97
  409. package/dist/src/observability/trace-manager.d.ts +0 -13
  410. package/dist/src/observability/trace-manager.d.ts.map +0 -1
  411. package/dist/src/observability/trace-manager.js +0 -23
  412. package/dist/src/observability/tracer.d.ts +0 -19
  413. package/dist/src/observability/tracer.d.ts.map +0 -1
  414. package/dist/src/observability/tracer.js +0 -95
  415. package/dist/src/observability/types.d.ts +0 -75
  416. package/dist/src/observability/types.d.ts.map +0 -1
  417. package/dist/src/observability/types.js +0 -2
  418. package/dist/src/pretty-print.d.ts +0 -2
  419. package/dist/src/pretty-print.d.ts.map +0 -1
  420. package/dist/src/pretty-print.js +0 -63
  421. package/dist/src/printer.d.ts +0 -61
  422. package/dist/src/printer.d.ts.map +0 -1
  423. package/dist/src/printer.js +0 -164
  424. package/dist/src/process-communication/communication-config.d.ts +0 -8
  425. package/dist/src/process-communication/communication-config.d.ts.map +0 -1
  426. package/dist/src/process-communication/communication-config.js +0 -18
  427. package/dist/src/process-communication/process-manager.d.ts +0 -32
  428. package/dist/src/process-communication/process-manager.d.ts.map +0 -1
  429. package/dist/src/process-communication/process-manager.js +0 -88
  430. package/dist/src/process-communication/rpc-processor-interface.d.ts +0 -10
  431. package/dist/src/process-communication/rpc-processor-interface.d.ts.map +0 -1
  432. package/dist/src/process-communication/rpc-processor-interface.js +0 -2
  433. package/dist/src/queue-manager.d.ts +0 -42
  434. package/dist/src/queue-manager.d.ts.map +0 -1
  435. package/dist/src/queue-manager.js +0 -252
  436. package/dist/src/ruby/get-ruby-config.d.ts +0 -3
  437. package/dist/src/ruby/get-ruby-config.d.ts.map +0 -1
  438. package/dist/src/ruby/get-ruby-config.js +0 -34
  439. package/dist/src/run-stream-can-access.d.ts +0 -10
  440. package/dist/src/run-stream-can-access.d.ts.map +0 -1
  441. package/dist/src/run-stream-can-access.js +0 -59
  442. package/dist/src/schema-utils.d.ts +0 -9
  443. package/dist/src/schema-utils.d.ts.map +0 -1
  444. package/dist/src/schema-utils.js +0 -80
  445. package/dist/src/server.d.ts +0 -37
  446. package/dist/src/server.d.ts.map +0 -1
  447. package/dist/src/server.js +0 -318
  448. package/dist/src/socket-server/helpers.d.ts +0 -53
  449. package/dist/src/socket-server/helpers.d.ts.map +0 -1
  450. package/dist/src/socket-server/helpers.js +0 -28
  451. package/dist/src/socket-server.d.ts +0 -21
  452. package/dist/src/socket-server.d.ts.map +0 -1
  453. package/dist/src/socket-server.js +0 -127
  454. package/dist/src/state/create-state-adapter.d.ts +0 -8
  455. package/dist/src/state/create-state-adapter.d.ts.map +0 -1
  456. package/dist/src/state/create-state-adapter.js +0 -8
  457. package/dist/src/step-handler-rpc-processor.d.ts +0 -22
  458. package/dist/src/step-handler-rpc-processor.d.ts.map +0 -1
  459. package/dist/src/step-handler-rpc-processor.js +0 -63
  460. package/dist/src/step-handler-rpc-stdin-processor.d.ts +0 -23
  461. package/dist/src/step-handler-rpc-stdin-processor.d.ts.map +0 -1
  462. package/dist/src/step-handler-rpc-stdin-processor.js +0 -83
  463. package/dist/src/step-handlers.d.ts +0 -9
  464. package/dist/src/step-handlers.d.ts.map +0 -1
  465. package/dist/src/step-handlers.js +0 -77
  466. package/dist/src/step-validator.d.ts +0 -15
  467. package/dist/src/step-validator.d.ts.map +0 -1
  468. package/dist/src/step-validator.js +0 -135
  469. package/dist/src/steps/emit.step.d.ts +0 -12
  470. package/dist/src/steps/emit.step.d.ts.map +0 -1
  471. package/dist/src/steps/emit.step.js +0 -27
  472. package/dist/src/steps/index.d.ts +0 -3
  473. package/dist/src/steps/index.d.ts.map +0 -1
  474. package/dist/src/steps/index.js +0 -16
  475. package/dist/src/streams/flows-config-stream.d.ts +0 -14
  476. package/dist/src/streams/flows-config-stream.d.ts.map +0 -1
  477. package/dist/src/streams/flows-config-stream.js +0 -49
  478. package/dist/src/streams/flows-stream.d.ts +0 -12
  479. package/dist/src/streams/flows-stream.d.ts.map +0 -1
  480. package/dist/src/streams/flows-stream.js +0 -35
  481. package/dist/src/streams/redis-logs-stream.d.ts +0 -31
  482. package/dist/src/streams/redis-logs-stream.d.ts.map +0 -1
  483. package/dist/src/streams/redis-logs-stream.js +0 -84
  484. package/dist/src/streams/stream-factory.d.ts +0 -3
  485. package/dist/src/streams/stream-factory.d.ts.map +0 -1
  486. package/dist/src/streams/stream-factory.js +0 -2
  487. package/dist/src/types/app-config-types.d.ts +0 -44
  488. package/dist/src/types/app-config-types.d.ts.map +0 -1
  489. package/dist/src/types/app-config-types.js +0 -2
  490. package/dist/src/types/flows-config-types.d.ts +0 -10
  491. package/dist/src/types/flows-config-types.d.ts.map +0 -1
  492. package/dist/src/types/flows-config-types.js +0 -2
  493. package/dist/src/types/flows-types.d.ts +0 -39
  494. package/dist/src/types/flows-types.d.ts.map +0 -1
  495. package/dist/src/types/flows-types.js +0 -2
  496. package/dist/src/types/generate-type-from-schema.d.ts +0 -3
  497. package/dist/src/types/generate-type-from-schema.d.ts.map +0 -1
  498. package/dist/src/types/generate-type-from-schema.js +0 -49
  499. package/dist/src/types/generate-types-from-response.d.ts +0 -3
  500. package/dist/src/types/generate-types-from-response.d.ts.map +0 -1
  501. package/dist/src/types/generate-types-from-response.js +0 -13
  502. package/dist/src/types/generate-types.d.ts +0 -13
  503. package/dist/src/types/generate-types.d.ts.map +0 -1
  504. package/dist/src/types/generate-types.js +0 -127
  505. package/dist/src/types/merge-schemas.d.ts +0 -5
  506. package/dist/src/types/merge-schemas.d.ts.map +0 -1
  507. package/dist/src/types/merge-schemas.js +0 -183
  508. package/dist/src/types/schema.types.d.ts +0 -9
  509. package/dist/src/types/schema.types.d.ts.map +0 -1
  510. package/dist/src/types/schema.types.js +0 -14
  511. package/dist/src/types-stream.d.ts +0 -42
  512. package/dist/src/types-stream.d.ts.map +0 -1
  513. package/dist/src/types-stream.js +0 -2
  514. package/dist/src/types.d.ts +0 -184
  515. package/dist/src/types.d.ts.map +0 -1
  516. package/dist/src/types.js +0 -17
  517. package/dist/src/utils.d.ts +0 -3
  518. package/dist/src/utils.d.ts.map +0 -1
  519. package/dist/src/utils.js +0 -12
  520. package/dist/src/validate-event-input.d.ts +0 -3
  521. package/dist/src/validate-event-input.d.ts.map +0 -1
  522. package/dist/src/validate-event-input.js +0 -74
@@ -0,0 +1,223 @@
1
+ import { isApiStep, isCronStep, isEventStep } from "./guards.mjs";
2
+ import { PLUGIN_FLOW_ID } from "./motia.mjs";
3
+ import { validateStep } from "./step-validator.mjs";
4
+ import { generateTypeFromSchema } from "./types/generate-type-from-schema.mjs";
5
+ import { generateTypesFromSteps, generateTypesFromStreams, generateTypesString } from "./types/generate-types.mjs";
6
+ import fs from "fs";
7
+ import path from "path";
8
+
9
+ //#region src/locked-data.ts
10
+ var LockedData = class {
11
+ constructor(baseDir, streamAdapter, printer, redisClient) {
12
+ this.baseDir = baseDir;
13
+ this.streamAdapter = streamAdapter;
14
+ this.printer = printer;
15
+ this.redisClient = redisClient;
16
+ this.flows = {};
17
+ this.activeSteps = [];
18
+ this.devSteps = [];
19
+ this.stepsMap = {};
20
+ this.handlers = {
21
+ "flow-created": [],
22
+ "flow-removed": [],
23
+ "flow-updated": []
24
+ };
25
+ this.stepHandlers = {
26
+ "step-created": [],
27
+ "step-removed": [],
28
+ "step-updated": []
29
+ };
30
+ this.streamHandlers = {
31
+ "stream-created": [],
32
+ "stream-removed": [],
33
+ "stream-updated": []
34
+ };
35
+ this.streams = {};
36
+ }
37
+ applyStreamWrapper(streamWrapper) {
38
+ this.streamWrapper = streamWrapper;
39
+ }
40
+ setStreamAuthConfig(config) {
41
+ this.streamAuthConfig = config ? { authenticate: config.authenticate } : void 0;
42
+ this.streamAuthContextType = config?.contextSchema ? generateTypeFromSchema(config.contextSchema) : void 0;
43
+ }
44
+ getStreamAuthConfig() {
45
+ return this.streamAuthConfig;
46
+ }
47
+ saveTypes() {
48
+ const typesString = generateTypesString(generateTypesFromSteps(this.activeSteps, this.printer), generateTypesFromStreams(this.streams), this.streamAuthContextType);
49
+ fs.writeFileSync(path.join(this.baseDir, "types.d.ts"), typesString);
50
+ }
51
+ on(event, handler) {
52
+ this.handlers[event].push(handler);
53
+ }
54
+ onStep(event, handler) {
55
+ this.stepHandlers[event].push(handler);
56
+ }
57
+ onStream(event, handler) {
58
+ this.streamHandlers[event].push(handler);
59
+ }
60
+ getActiveSteps() {
61
+ return this.activeSteps.filter((step) => !step.config.flows?.includes(PLUGIN_FLOW_ID));
62
+ }
63
+ eventSteps() {
64
+ return this.getActiveSteps().filter(isEventStep);
65
+ }
66
+ apiSteps() {
67
+ return this.getActiveSteps().filter(isApiStep);
68
+ }
69
+ cronSteps() {
70
+ return this.getActiveSteps().filter(isCronStep);
71
+ }
72
+ pythonSteps() {
73
+ return this.getActiveSteps().filter((step) => step.filePath.endsWith(".py"));
74
+ }
75
+ tsSteps() {
76
+ return this.getActiveSteps().filter((step) => step.filePath.endsWith(".ts"));
77
+ }
78
+ getStreams() {
79
+ const streams = {};
80
+ for (const [key, value] of Object.entries(this.streams)) streams[key] = value.factory;
81
+ return streams;
82
+ }
83
+ listStreams() {
84
+ return Object.values(this.streams);
85
+ }
86
+ getStreamByName(streamName) {
87
+ return this.streams[streamName];
88
+ }
89
+ findStream(path$1) {
90
+ return Object.values(this.streams).find((stream) => stream.filePath === path$1);
91
+ }
92
+ updateStep(oldStep, newStep, options = {}) {
93
+ if (!this.isValidStep(newStep)) {
94
+ this.deleteStep(oldStep);
95
+ return false;
96
+ }
97
+ if (oldStep.config.type !== newStep.config.type) {
98
+ this.activeSteps = this.activeSteps.filter((s) => s.filePath !== oldStep.filePath);
99
+ this.devSteps = this.devSteps.filter((s) => s.filePath !== oldStep.filePath);
100
+ if (newStep.config.type === "noop") this.devSteps.push(newStep);
101
+ else this.activeSteps.push(newStep);
102
+ }
103
+ const savedStep = this.stepsMap[newStep.filePath];
104
+ const addedFlows = newStep.config.flows?.filter((flowName) => !oldStep.config.flows?.includes(flowName)) ?? [];
105
+ const removedFlows = oldStep.config.flows?.filter((flowName) => !newStep.config.flows?.includes(flowName)) ?? [];
106
+ const untouchedFlows = oldStep.config.flows?.filter((flowName) => newStep.config.flows?.includes(flowName)) ?? [];
107
+ savedStep.config = newStep.config;
108
+ untouchedFlows.forEach((flowName) => this.onFlowUpdated(flowName));
109
+ for (const flowName of addedFlows) if (!this.flows[flowName]) this.createFlow(flowName).steps.push(savedStep);
110
+ else {
111
+ this.flows[flowName].steps.push(savedStep);
112
+ this.onFlowUpdated(flowName);
113
+ }
114
+ for (const flowName of removedFlows) {
115
+ const flowSteps = this.flows[flowName].steps;
116
+ this.flows[flowName].steps = flowSteps.filter(({ filePath }) => filePath !== newStep.filePath);
117
+ if (this.flows[flowName].steps.length === 0) this.removeFlow(flowName);
118
+ else this.onFlowUpdated(flowName);
119
+ }
120
+ if (!options.disableTypeCreation) this.saveTypes();
121
+ this.stepHandlers["step-updated"].forEach((handler) => handler(newStep));
122
+ this.printer.printStepUpdated(newStep);
123
+ return true;
124
+ }
125
+ createStep(step, options = {}) {
126
+ if (!this.isValidStep(step)) return false;
127
+ this.stepsMap[step.filePath] = step;
128
+ if (step.config.type === "noop") this.devSteps.push(step);
129
+ else this.activeSteps.push(step);
130
+ for (const flowName of step.config.flows ?? []) if (!this.flows[flowName]) this.createFlow(flowName).steps.push(step);
131
+ else {
132
+ this.flows[flowName].steps.push(step);
133
+ this.onFlowUpdated(flowName);
134
+ }
135
+ if (!options.disableTypeCreation) this.saveTypes();
136
+ this.stepHandlers["step-created"].forEach((handler) => handler(step));
137
+ this.printer.printStepCreated(step);
138
+ return true;
139
+ }
140
+ deleteStep(step, options = {}) {
141
+ this.activeSteps = this.activeSteps.filter(({ filePath }) => filePath !== step.filePath);
142
+ this.devSteps = this.devSteps.filter(({ filePath }) => filePath !== step.filePath);
143
+ delete this.stepsMap[step.filePath];
144
+ for (const flowName of step.config.flows ?? []) {
145
+ const stepFlows = this.flows[flowName]?.steps;
146
+ if (stepFlows) this.flows[flowName].steps = stepFlows.filter(({ filePath }) => filePath !== step.filePath);
147
+ if (this.flows[flowName].steps.length === 0) this.removeFlow(flowName);
148
+ else this.onFlowUpdated(flowName);
149
+ }
150
+ if (!options.disableTypeCreation) this.saveTypes();
151
+ this.stepHandlers["step-removed"].forEach((handler) => handler(step));
152
+ this.printer.printStepRemoved(step);
153
+ }
154
+ createFactoryWrapper(stream, factory) {
155
+ return () => {
156
+ return (this.streamWrapper ? this.streamWrapper(stream.config.name, factory) : factory)();
157
+ };
158
+ }
159
+ createStream(baseStream, options = {}) {
160
+ const stream = baseStream;
161
+ this.streams[stream.config.name] = stream;
162
+ this.streamHandlers["stream-created"].forEach((handler) => handler(stream));
163
+ if (stream.config.baseConfig.storageType === "default") stream.factory = this.createFactoryWrapper(stream, () => this.createStreamAdapter(stream.config.name));
164
+ else stream.factory = this.createFactoryWrapper(stream, stream.config.baseConfig.factory);
165
+ if (!stream.hidden) {
166
+ this.printer.printStreamCreated(stream);
167
+ if (!options.disableTypeCreation) this.saveTypes();
168
+ }
169
+ return stream.factory;
170
+ }
171
+ deleteStream(stream, options = {}) {
172
+ Object.entries(this.streams).forEach(([streamName, { filePath }]) => {
173
+ if (stream.filePath === filePath) delete this.streams[streamName];
174
+ });
175
+ this.streamHandlers["stream-removed"].forEach((handler) => handler(stream));
176
+ if (!stream.hidden) {
177
+ this.printer.printStreamRemoved(stream);
178
+ if (!options.disableTypeCreation) this.saveTypes();
179
+ }
180
+ }
181
+ updateStream(oldStream, stream, options = {}) {
182
+ if (oldStream.config.name !== stream.config.name) delete this.streams[oldStream.config.name];
183
+ if (stream.config.baseConfig.storageType === "default") stream.factory = this.createFactoryWrapper(stream, () => this.createStreamAdapter(stream.config.name));
184
+ else stream.factory = this.createFactoryWrapper(stream, stream.config.baseConfig.factory);
185
+ this.streams[stream.config.name] = stream;
186
+ this.streamHandlers["stream-updated"].forEach((handler) => handler(stream));
187
+ if (!stream.hidden) {
188
+ this.printer.printStreamUpdated(stream);
189
+ if (!options.disableTypeCreation) this.saveTypes();
190
+ }
191
+ }
192
+ createFlow(flowName) {
193
+ const flow = {
194
+ name: flowName,
195
+ description: "",
196
+ steps: []
197
+ };
198
+ this.flows[flowName] = flow;
199
+ this.handlers["flow-created"].forEach((handler) => handler(flowName));
200
+ this.printer.printFlowCreated(flowName);
201
+ return flow;
202
+ }
203
+ removeFlow(flowName) {
204
+ delete this.flows[flowName];
205
+ this.handlers["flow-removed"].forEach((handler) => handler(flowName));
206
+ this.printer.printFlowRemoved(flowName);
207
+ }
208
+ onFlowUpdated(flowName) {
209
+ this.handlers["flow-updated"].forEach((handler) => handler(flowName));
210
+ }
211
+ isValidStep(step) {
212
+ const validationResult = validateStep(step);
213
+ if (!validationResult.success) this.printer.printValidationError(step.filePath, validationResult);
214
+ return validationResult.success;
215
+ }
216
+ createStreamAdapter(streamName) {
217
+ return this.streamAdapter.createStream(streamName);
218
+ }
219
+ };
220
+
221
+ //#endregion
222
+ export { LockedData };
223
+ //# sourceMappingURL=locked-data.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"locked-data.mjs","names":["baseDir: string","streamAdapter: StreamAdapterManager","printer: Printer","redisClient: RedisClientType","streams: Record<string, StreamFactory<unknown>>","path"],"sources":["../../src/locked-data.ts"],"sourcesContent":["import fs from 'fs'\nimport path from 'path'\nimport type { RedisClientType } from 'redis'\nimport type { StreamAdapter } from './adapters/interfaces/stream-adapter.interface'\nimport type { StreamAdapterManager } from './adapters/interfaces/stream-adapter-manager.interface'\nimport { isApiStep, isCronStep, isEventStep } from './guards'\nimport { PLUGIN_FLOW_ID } from './motia'\nimport type { Printer } from './printer'\nimport { validateStep } from './step-validator'\nimport type { StreamFactory } from './streams/stream-factory'\nimport type { ApiRouteConfig, CronConfig, EventConfig, Flow, Step } from './types'\nimport type { StreamAuthConfig } from './types/app-config-types'\nimport { generateTypeFromSchema } from './types/generate-type-from-schema'\nimport { generateTypesFromSteps, generateTypesFromStreams, generateTypesString } from './types/generate-types'\nimport type { JsonSchema } from './types/schema.types'\nimport type { Stream } from './types-stream'\n\ntype FlowEvent = 'flow-created' | 'flow-removed' | 'flow-updated'\ntype StepEvent = 'step-created' | 'step-removed' | 'step-updated'\ntype StreamEvent = 'stream-created' | 'stream-removed' | 'stream-updated'\n\ntype StreamWrapper<TData> = (streamName: string, factory: StreamFactory<TData>) => StreamFactory<TData>\n\nexport class LockedData {\n public flows: Record<string, Flow>\n public activeSteps: Step[]\n public devSteps: Step[]\n\n private stepsMap: Record<string, Step>\n private handlers: Record<FlowEvent, ((flowName: string) => void)[]>\n private stepHandlers: Record<StepEvent, ((step: Step) => void)[]>\n private streamHandlers: Record<StreamEvent, ((stream: Stream) => void)[]>\n private streams: Record<string, Stream>\n\n private streamWrapper?: StreamWrapper<any>\n private streamAuthContextType?: string\n private streamAuthConfig?: { authenticate: StreamAuthConfig['authenticate'] }\n\n constructor(\n public readonly baseDir: string,\n public readonly streamAdapter: StreamAdapterManager,\n private readonly printer: Printer,\n public readonly redisClient: RedisClientType,\n ) {\n this.flows = {}\n this.activeSteps = []\n this.devSteps = []\n this.stepsMap = {}\n\n this.handlers = {\n 'flow-created': [],\n 'flow-removed': [],\n 'flow-updated': [],\n }\n\n this.stepHandlers = {\n 'step-created': [],\n 'step-removed': [],\n 'step-updated': [],\n }\n\n this.streamHandlers = {\n 'stream-created': [],\n 'stream-removed': [],\n 'stream-updated': [],\n }\n\n this.streams = {}\n }\n\n applyStreamWrapper<TData>(streamWrapper: StreamWrapper<TData>): void {\n this.streamWrapper = streamWrapper\n }\n\n setStreamAuthConfig(config?: { authenticate: StreamAuthConfig['authenticate']; contextSchema?: JsonSchema }): void {\n this.streamAuthConfig = config ? { authenticate: config.authenticate } : undefined\n this.streamAuthContextType = config?.contextSchema ? generateTypeFromSchema(config.contextSchema) : undefined\n }\n\n getStreamAuthConfig() {\n return this.streamAuthConfig\n }\n\n saveTypes() {\n const types = generateTypesFromSteps(this.activeSteps, this.printer)\n const streams = generateTypesFromStreams(this.streams)\n const typesString = generateTypesString(types, streams, this.streamAuthContextType)\n fs.writeFileSync(path.join(this.baseDir, 'types.d.ts'), typesString)\n }\n\n on(event: FlowEvent, handler: (flowName: string) => void) {\n this.handlers[event].push(handler)\n }\n\n onStep(event: StepEvent, handler: (step: Step) => void) {\n this.stepHandlers[event].push(handler)\n }\n\n onStream(event: StreamEvent, handler: (stream: Stream) => void) {\n this.streamHandlers[event].push(handler)\n }\n\n getActiveSteps() {\n return this.activeSteps.filter((step) => !step.config.flows?.includes(PLUGIN_FLOW_ID))\n }\n\n eventSteps(): Step<EventConfig>[] {\n return this.getActiveSteps().filter(isEventStep)\n }\n\n apiSteps(): Step<ApiRouteConfig>[] {\n return this.getActiveSteps().filter(isApiStep)\n }\n\n cronSteps(): Step<CronConfig>[] {\n return this.getActiveSteps().filter(isCronStep)\n }\n\n pythonSteps(): Step[] {\n return this.getActiveSteps().filter((step) => step.filePath.endsWith('.py'))\n }\n\n tsSteps(): Step[] {\n return this.getActiveSteps().filter((step) => step.filePath.endsWith('.ts'))\n }\n\n getStreams(): Record<string, StreamFactory<any>> {\n const streams: Record<string, StreamFactory<unknown>> = {}\n\n for (const [key, value] of Object.entries(this.streams)) {\n streams[key] = value.factory\n }\n\n return streams\n }\n\n listStreams(): Stream[] {\n return Object.values(this.streams)\n }\n\n getStreamByName(streamName: string): Stream | undefined {\n return this.streams[streamName]\n }\n\n findStream(path: string): Stream | undefined {\n return Object.values(this.streams).find((stream) => stream.filePath === path)\n }\n\n updateStep(oldStep: Step, newStep: Step, options: { disableTypeCreation?: boolean } = {}): boolean {\n if (!this.isValidStep(newStep)) {\n this.deleteStep(oldStep)\n\n return false\n }\n\n if (oldStep.config.type !== newStep.config.type) {\n this.activeSteps = this.activeSteps.filter((s) => s.filePath !== oldStep.filePath)\n this.devSteps = this.devSteps.filter((s) => s.filePath !== oldStep.filePath)\n\n if (newStep.config.type === 'noop') {\n this.devSteps.push(newStep)\n } else {\n this.activeSteps.push(newStep)\n }\n }\n\n const savedStep = this.stepsMap[newStep.filePath]\n const addedFlows = newStep.config.flows?.filter((flowName) => !oldStep.config.flows?.includes(flowName)) ?? []\n const removedFlows = oldStep.config.flows?.filter((flowName) => !newStep.config.flows?.includes(flowName)) ?? []\n const untouchedFlows = oldStep.config.flows?.filter((flowName) => newStep.config.flows?.includes(flowName)) ?? []\n savedStep.config = newStep.config\n\n untouchedFlows.forEach((flowName) => this.onFlowUpdated(flowName))\n\n for (const flowName of addedFlows) {\n if (!this.flows[flowName]) {\n const flow = this.createFlow(flowName)\n flow.steps.push(savedStep)\n } else {\n this.flows[flowName].steps.push(savedStep)\n this.onFlowUpdated(flowName)\n }\n }\n\n for (const flowName of removedFlows) {\n const flowSteps = this.flows[flowName].steps\n this.flows[flowName].steps = flowSteps.filter(({ filePath }) => filePath !== newStep.filePath)\n\n if (this.flows[flowName].steps.length === 0) {\n this.removeFlow(flowName)\n } else {\n this.onFlowUpdated(flowName)\n }\n }\n\n if (!options.disableTypeCreation) {\n this.saveTypes()\n }\n\n this.stepHandlers['step-updated'].forEach((handler) => handler(newStep))\n this.printer.printStepUpdated(newStep)\n\n return true\n }\n\n createStep(step: Step, options: { disableTypeCreation?: boolean } = {}): boolean {\n if (!this.isValidStep(step)) {\n return false\n }\n\n this.stepsMap[step.filePath] = step\n\n if (step.config.type === 'noop') {\n this.devSteps.push(step)\n } else {\n this.activeSteps.push(step)\n }\n\n for (const flowName of step.config.flows ?? []) {\n if (!this.flows[flowName]) {\n const flow = this.createFlow(flowName)\n flow.steps.push(step)\n } else {\n this.flows[flowName].steps.push(step)\n this.onFlowUpdated(flowName)\n }\n }\n\n if (!options.disableTypeCreation) {\n this.saveTypes()\n }\n\n this.stepHandlers['step-created'].forEach((handler) => handler(step))\n this.printer.printStepCreated(step)\n\n return true\n }\n\n deleteStep(step: Step, options: { disableTypeCreation?: boolean } = {}): void {\n // Remove step from active and dev steps\n this.activeSteps = this.activeSteps.filter(({ filePath }) => filePath !== step.filePath)\n this.devSteps = this.devSteps.filter(({ filePath }) => filePath !== step.filePath)\n\n delete this.stepsMap[step.filePath]\n\n for (const flowName of step.config.flows ?? []) {\n const stepFlows = this.flows[flowName]?.steps\n\n if (stepFlows) {\n this.flows[flowName].steps = stepFlows.filter(({ filePath }) => filePath !== step.filePath)\n }\n\n if (this.flows[flowName].steps.length === 0) {\n this.removeFlow(flowName)\n } else {\n this.onFlowUpdated(flowName)\n }\n }\n\n if (!options.disableTypeCreation) {\n this.saveTypes()\n }\n\n this.stepHandlers['step-removed'].forEach((handler) => handler(step))\n this.printer.printStepRemoved(step)\n }\n\n private createFactoryWrapper<TData>(stream: Stream, factory: StreamFactory<TData>): StreamFactory<TData> {\n return () => {\n const streamFactory = this.streamWrapper //\n ? this.streamWrapper(stream.config.name, factory)\n : factory\n return streamFactory()\n }\n }\n\n createStream<TData>(\n baseStream: Omit<Stream, 'factory'>,\n options: { disableTypeCreation?: boolean } = {},\n ): StreamFactory<TData> {\n const stream = baseStream as Stream\n\n this.streams[stream.config.name] = stream\n this.streamHandlers['stream-created'].forEach((handler) => handler(stream))\n\n if (stream.config.baseConfig.storageType === 'default') {\n stream.factory = this.createFactoryWrapper(stream, () => this.createStreamAdapter(stream.config.name))\n } else {\n stream.factory = this.createFactoryWrapper(stream, stream.config.baseConfig.factory)\n }\n\n if (!stream.hidden) {\n this.printer.printStreamCreated(stream)\n\n if (!options.disableTypeCreation) {\n this.saveTypes()\n }\n }\n\n return stream.factory as StreamFactory<TData>\n }\n\n deleteStream(stream: Stream, options: { disableTypeCreation?: boolean } = {}): void {\n Object.entries(this.streams).forEach(([streamName, { filePath }]) => {\n if (stream.filePath === filePath) {\n delete this.streams[streamName]\n }\n })\n\n this.streamHandlers['stream-removed'].forEach((handler) => handler(stream))\n\n if (!stream.hidden) {\n this.printer.printStreamRemoved(stream)\n\n if (!options.disableTypeCreation) {\n this.saveTypes()\n }\n }\n }\n\n updateStream(oldStream: Stream, stream: Stream, options: { disableTypeCreation?: boolean } = {}): void {\n if (oldStream.config.name !== stream.config.name) {\n delete this.streams[oldStream.config.name]\n }\n\n if (stream.config.baseConfig.storageType === 'default') {\n stream.factory = this.createFactoryWrapper(stream, () => this.createStreamAdapter(stream.config.name))\n } else {\n stream.factory = this.createFactoryWrapper(stream, stream.config.baseConfig.factory)\n }\n\n this.streams[stream.config.name] = stream\n this.streamHandlers['stream-updated'].forEach((handler) => handler(stream))\n\n if (!stream.hidden) {\n this.printer.printStreamUpdated(stream)\n\n if (!options.disableTypeCreation) {\n this.saveTypes()\n }\n }\n }\n\n private createFlow(flowName: string): Flow {\n const flow = { name: flowName, description: '', steps: [] }\n this.flows[flowName] = flow\n this.handlers['flow-created'].forEach((handler) => handler(flowName))\n this.printer.printFlowCreated(flowName)\n\n return flow\n }\n\n private removeFlow(flowName: string): void {\n delete this.flows[flowName]\n this.handlers['flow-removed'].forEach((handler) => handler(flowName))\n this.printer.printFlowRemoved(flowName)\n }\n\n private onFlowUpdated(flowName: string): void {\n this.handlers['flow-updated'].forEach((handler) => handler(flowName))\n }\n\n private isValidStep(step: Step): boolean {\n const validationResult = validateStep(step)\n\n if (!validationResult.success) {\n this.printer.printValidationError(step.filePath, validationResult)\n }\n\n return validationResult.success\n }\n\n private createStreamAdapter<TData>(streamName: string): StreamAdapter<TData> {\n return this.streamAdapter.createStream<TData>(streamName)\n }\n}\n"],"mappings":"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"}
@@ -0,0 +1,16 @@
1
+ import { Logger } from "./logger.mjs";
2
+ import "./types-stream.mjs";
3
+ import "./streams/redis-logs-stream.mjs";
4
+
5
+ //#region src/logger-factory.d.ts
6
+ type CreateLogger = {
7
+ traceId: string;
8
+ flows?: string[];
9
+ stepName: string;
10
+ };
11
+ interface LoggerFactory {
12
+ create: (args: CreateLogger) => Logger;
13
+ }
14
+ //#endregion
15
+ export { LoggerFactory };
16
+ //# sourceMappingURL=logger-factory.d.mts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"logger-factory.d.mts","names":[],"sources":["../../src/logger-factory.ts"],"sourcesContent":[],"mappings":";;;;;KAKK,YAAA;;EAAA,KAAA,CAAA,EAAA,MAAA,EAAY;EAMA,QAAA,EAAA,MAAa;;UAAb,aAAA;iBACA,iBAAiB"}
@@ -0,0 +1,33 @@
1
+ import { Logger } from "./logger.mjs";
2
+ import { randomUUID } from "crypto";
3
+
4
+ //#region src/logger-factory.ts
5
+ var BaseLoggerFactory = class {
6
+ constructor(isVerbose, logStream) {
7
+ this.isVerbose = isVerbose;
8
+ this.logStream = logStream;
9
+ }
10
+ create({ stepName, traceId, flows }) {
11
+ const streamListener = (level, msg, args) => {
12
+ const id = randomUUID();
13
+ this.logStream.set("default", id, {
14
+ id,
15
+ ...args ?? {},
16
+ level,
17
+ time: Date.now(),
18
+ msg,
19
+ traceId,
20
+ flows: flows ?? []
21
+ });
22
+ };
23
+ return new Logger(this.isVerbose, {
24
+ traceId,
25
+ flows,
26
+ step: stepName
27
+ }, [streamListener]);
28
+ }
29
+ };
30
+
31
+ //#endregion
32
+ export { BaseLoggerFactory };
33
+ //# sourceMappingURL=logger-factory.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"logger-factory.mjs","names":["isVerbose: boolean","logStream: MotiaStream<Log>","streamListener: LogListener"],"sources":["../../src/logger-factory.ts"],"sourcesContent":["import { randomUUID } from 'crypto'\nimport { Logger, type LogListener } from './logger'\nimport type { Log } from './streams/redis-logs-stream'\nimport type { MotiaStream } from './types-stream'\n\ntype CreateLogger = {\n traceId: string\n flows?: string[]\n stepName: string\n}\n\nexport interface LoggerFactory {\n create: (args: CreateLogger) => Logger\n}\n\nexport class BaseLoggerFactory implements LoggerFactory {\n constructor(\n private readonly isVerbose: boolean,\n private readonly logStream: MotiaStream<Log>,\n ) {}\n\n create({ stepName, traceId, flows }: CreateLogger): Logger {\n const streamListener: LogListener = (level, msg, args) => {\n const id = randomUUID()\n\n this.logStream.set('default', id, {\n id,\n ...(args ?? {}),\n level,\n time: Date.now(),\n msg,\n traceId,\n flows: flows ?? [],\n })\n }\n\n return new Logger(this.isVerbose, { traceId, flows, step: stepName }, [streamListener])\n }\n}\n"],"mappings":";;;;AAeA,IAAa,oBAAb,MAAwD;CACtD,YACE,AAAiBA,WACjB,AAAiBC,WACjB;EAFiB;EACA;;CAGnB,OAAO,EAAE,UAAU,SAAS,SAA+B;EACzD,MAAMC,kBAA+B,OAAO,KAAK,SAAS;GACxD,MAAM,KAAK,YAAY;AAEvB,QAAK,UAAU,IAAI,WAAW,IAAI;IAChC;IACA,GAAI,QAAQ,EAAE;IACd;IACA,MAAM,KAAK,KAAK;IAChB;IACA;IACA,OAAO,SAAS,EAAE;IACnB,CAAC;;AAGJ,SAAO,IAAI,OAAO,KAAK,WAAW;GAAE;GAAS;GAAO,MAAM;GAAU,EAAE,CAAC,eAAe,CAAC"}
@@ -0,0 +1,28 @@
1
+ //#region src/logger.d.ts
2
+ type LogListener = (level: string, msg: string, args?: unknown) => void;
3
+ declare class Logger {
4
+ readonly isVerbose: boolean;
5
+ private readonly meta;
6
+ private readonly coreListeners;
7
+ /**
8
+ * Why do we need two level of listeners?
9
+ *
10
+ * Core listeners pass along to children loggers.
11
+ *
12
+ * However, base listeners do not pass along to children loggers.
13
+ * Those are specific to each logger in the hierarchy.
14
+ */
15
+ private readonly listeners;
16
+ constructor(isVerbose?: boolean, meta?: Record<string, unknown>, coreListeners?: LogListener[]);
17
+ child(meta: Record<string, unknown>): Logger;
18
+ private _log;
19
+ info(message: string, args?: unknown): void;
20
+ error(message: string, args?: unknown): void;
21
+ debug(message: string, args?: unknown): void;
22
+ warn(message: string, args?: unknown): void;
23
+ log(args: any): void;
24
+ addListener(listener: LogListener): void;
25
+ }
26
+ //#endregion
27
+ export { Logger };
28
+ //# sourceMappingURL=logger.d.mts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"logger.d.mts","names":[],"sources":["../../src/logger.ts"],"sourcesContent":[],"mappings":";KAQY,WAAA;AAAA,cAEC,MAAA,CAFU;EAEV,SAAM,SAAA,EAAA,OAAA;EAaQ,iBAAA,IAAA;EACS,iBAAA,aAAA;EAGtB;;;;;;;;;0CAJa,yCACS;cAGtB,0BAA0B;;;;;;;wBAuChB"}
@@ -0,0 +1,64 @@
1
+ import { prettyPrint } from "./pretty-print.mjs";
2
+
3
+ //#region src/logger.ts
4
+ const logLevel = process.env.LOG_LEVEL ?? "info";
5
+ const isDebugEnabled = logLevel === "debug";
6
+ const isInfoEnabled = ["info", "debug"].includes(logLevel);
7
+ const isWarnEnabled = [
8
+ "warn",
9
+ "info",
10
+ "debug",
11
+ "trace"
12
+ ].includes(logLevel);
13
+ var Logger = class Logger {
14
+ constructor(isVerbose = false, meta = {}, coreListeners = []) {
15
+ this.isVerbose = isVerbose;
16
+ this.meta = meta;
17
+ this.coreListeners = coreListeners;
18
+ this.listeners = [];
19
+ }
20
+ child(meta) {
21
+ return new Logger(this.isVerbose, {
22
+ ...this.meta,
23
+ ...meta
24
+ }, this.coreListeners);
25
+ }
26
+ _log(level, msg, args) {
27
+ const time = Date.now();
28
+ const meta = {
29
+ ...this.meta,
30
+ ...args ?? {}
31
+ };
32
+ prettyPrint({
33
+ level,
34
+ time,
35
+ msg,
36
+ ...meta
37
+ }, !this.isVerbose);
38
+ this.coreListeners.forEach((listener) => listener(level, msg, meta));
39
+ this.listeners.forEach((listener) => listener(level, msg, meta));
40
+ }
41
+ info(message, args) {
42
+ if (isInfoEnabled) this._log("info", message, args);
43
+ }
44
+ error(message, args) {
45
+ this._log("error", message, args);
46
+ }
47
+ debug(message, args) {
48
+ if (isDebugEnabled) this._log("debug", message, args);
49
+ }
50
+ warn(message, args) {
51
+ if (isWarnEnabled) this._log("warn", message, args);
52
+ }
53
+ log(args) {
54
+ this._log(args.level ?? "info", args.msg, args);
55
+ }
56
+ addListener(listener) {
57
+ this.listeners.push(listener);
58
+ }
59
+ };
60
+ const globalLogger = new Logger();
61
+
62
+ //#endregion
63
+ export { Logger, globalLogger };
64
+ //# sourceMappingURL=logger.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"logger.mjs","names":["isVerbose: boolean","meta: Record<string, unknown>","coreListeners: LogListener[]"],"sources":["../../src/logger.ts"],"sourcesContent":["import { prettyPrint } from './pretty-print'\n\nconst logLevel = process.env.LOG_LEVEL ?? 'info'\n\nconst isDebugEnabled = logLevel === 'debug'\nconst isInfoEnabled = ['info', 'debug'].includes(logLevel)\nconst isWarnEnabled = ['warn', 'info', 'debug', 'trace'].includes(logLevel)\n\nexport type LogListener = (level: string, msg: string, args?: unknown) => void\n\nexport class Logger {\n /**\n * Why do we need two level of listeners?\n *\n * Core listeners pass along to children loggers.\n *\n * However, base listeners do not pass along to children loggers.\n * Those are specific to each logger in the hierarchy.\n */\n private readonly listeners: LogListener[] = []\n\n constructor(\n readonly isVerbose: boolean = false,\n private readonly meta: Record<string, unknown> = {},\n private readonly coreListeners: LogListener[] = [],\n ) {}\n\n child(meta: Record<string, unknown>): Logger {\n return new Logger(this.isVerbose, { ...this.meta, ...meta }, this.coreListeners)\n }\n\n private _log(level: string, msg: string, args?: any) {\n const time = Date.now()\n const meta = { ...this.meta, ...(args ?? {}) }\n prettyPrint({ level, time, msg, ...meta }, !this.isVerbose)\n\n this.coreListeners.forEach((listener) => listener(level, msg, meta))\n this.listeners.forEach((listener) => listener(level, msg, meta))\n }\n\n info(message: string, args?: unknown) {\n if (isInfoEnabled) {\n this._log('info', message, args)\n }\n }\n\n error(message: string, args?: unknown) {\n this._log('error', message, args)\n }\n\n debug(message: string, args?: unknown) {\n if (isDebugEnabled) {\n this._log('debug', message, args)\n }\n }\n\n warn(message: string, args?: unknown) {\n if (isWarnEnabled) {\n this._log('warn', message, args)\n }\n }\n\n log(args: any) {\n this._log(args.level ?? 'info', args.msg, args)\n }\n\n addListener(listener: LogListener) {\n this.listeners.push(listener)\n }\n}\n\nexport const globalLogger = new Logger()\n"],"mappings":";;;AAEA,MAAM,WAAW,QAAQ,IAAI,aAAa;AAE1C,MAAM,iBAAiB,aAAa;AACpC,MAAM,gBAAgB,CAAC,QAAQ,QAAQ,CAAC,SAAS,SAAS;AAC1D,MAAM,gBAAgB;CAAC;CAAQ;CAAQ;CAAS;CAAQ,CAAC,SAAS,SAAS;AAI3E,IAAa,SAAb,MAAa,OAAO;CAWlB,YACE,AAASA,YAAqB,OAC9B,AAAiBC,OAAgC,EAAE,EACnD,AAAiBC,gBAA+B,EAAE,EAClD;EAHS;EACQ;EACA;mBALyB,EAAE;;CAQ9C,MAAM,MAAuC;AAC3C,SAAO,IAAI,OAAO,KAAK,WAAW;GAAE,GAAG,KAAK;GAAM,GAAG;GAAM,EAAE,KAAK,cAAc;;CAGlF,AAAQ,KAAK,OAAe,KAAa,MAAY;EACnD,MAAM,OAAO,KAAK,KAAK;EACvB,MAAM,OAAO;GAAE,GAAG,KAAK;GAAM,GAAI,QAAQ,EAAE;GAAG;AAC9C,cAAY;GAAE;GAAO;GAAM;GAAK,GAAG;GAAM,EAAE,CAAC,KAAK,UAAU;AAE3D,OAAK,cAAc,SAAS,aAAa,SAAS,OAAO,KAAK,KAAK,CAAC;AACpE,OAAK,UAAU,SAAS,aAAa,SAAS,OAAO,KAAK,KAAK,CAAC;;CAGlE,KAAK,SAAiB,MAAgB;AACpC,MAAI,cACF,MAAK,KAAK,QAAQ,SAAS,KAAK;;CAIpC,MAAM,SAAiB,MAAgB;AACrC,OAAK,KAAK,SAAS,SAAS,KAAK;;CAGnC,MAAM,SAAiB,MAAgB;AACrC,MAAI,eACF,MAAK,KAAK,SAAS,SAAS,KAAK;;CAIrC,KAAK,SAAiB,MAAgB;AACpC,MAAI,cACF,MAAK,KAAK,QAAQ,SAAS,KAAK;;CAIpC,IAAI,MAAW;AACb,OAAK,KAAK,KAAK,SAAS,QAAQ,KAAK,KAAK,KAAK;;CAGjD,YAAY,UAAuB;AACjC,OAAK,UAAU,KAAK,SAAS;;;AAIjC,MAAa,eAAe,IAAI,QAAQ"}
@@ -0,0 +1,9 @@
1
+ import { LockedData } from "./locked-data.mjs";
2
+
3
+ //#region src/mermaid-generator.d.ts
4
+ declare const createMermaidGenerator: (baseDir: string) => {
5
+ initialize: (lockedData: LockedData) => void;
6
+ };
7
+ //#endregion
8
+ export { createMermaidGenerator };
9
+ //# sourceMappingURL=mermaid-generator.d.mts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mermaid-generator.d.mts","names":[],"sources":["../../src/mermaid-generator.ts"],"sourcesContent":[],"mappings":";;;cAwMa;2BAkBqB;AAlBlC,CAAA"}
@@ -0,0 +1,126 @@
1
+ import { isApiStep, isCronStep, isEventStep, isNoopStep } from "./guards.mjs";
2
+ import fs from "fs";
3
+ import path from "path";
4
+
5
+ //#region src/mermaid-generator.ts
6
+ const ensureDiagramsDirectory = (diagramsDir) => {
7
+ if (!fs.existsSync(diagramsDir)) fs.mkdirSync(diagramsDir, { recursive: true });
8
+ };
9
+ const getNodeId = (step, baseDir) => {
10
+ return path.relative(baseDir, step.filePath).replace(/\.(ts|js|tsx|jsx)$/, "").replace(/[^a-zA-Z0-9]/g, "_");
11
+ };
12
+ const getNodeLabel = (step) => {
13
+ const displayName = step.config.name || path.basename(step.filePath, path.extname(step.filePath));
14
+ let prefix = "";
15
+ if (isApiStep(step)) prefix = "🌐 ";
16
+ else if (isEventStep(step)) prefix = "⚡ ";
17
+ else if (isCronStep(step)) prefix = "⏰ ";
18
+ else if (isNoopStep(step)) prefix = "⚙️ ";
19
+ return `["${prefix}${displayName}"]`;
20
+ };
21
+ const getNodeStyle = (step) => {
22
+ if (isApiStep(step)) return ":::apiStyle";
23
+ if (isEventStep(step)) return ":::eventStyle";
24
+ if (isCronStep(step)) return ":::cronStyle";
25
+ if (isNoopStep(step)) return ":::noopStyle";
26
+ return "";
27
+ };
28
+ const generateConnections = (emits, sourceStep, steps, sourceId, baseDir) => {
29
+ const connections = [];
30
+ if (!emits || !Array.isArray(emits) || emits.length === 0) return "";
31
+ const stepSubscribesToTopic = (step, topic) => {
32
+ if (isEventStep(step) && step.config.subscribes && Array.isArray(step.config.subscribes) && step.config.subscribes.includes(topic)) return true;
33
+ if ((isNoopStep(step) || isApiStep(step)) && step.config.virtualSubscribes && Array.isArray(step.config.virtualSubscribes) && step.config.virtualSubscribes.includes(topic)) return true;
34
+ return false;
35
+ };
36
+ emits.forEach((emit) => {
37
+ const topic = typeof emit === "string" ? emit : emit.topic;
38
+ const label = typeof emit === "string" ? topic : emit.label || topic;
39
+ steps.forEach((targetStep) => {
40
+ if (stepSubscribesToTopic(targetStep, topic)) {
41
+ const targetId = getNodeId(targetStep, baseDir);
42
+ connections.push(` ${sourceId} -->|${label}| ${targetId}`);
43
+ }
44
+ });
45
+ });
46
+ return connections.join("\n");
47
+ };
48
+ const generateFlowDiagram = (flowName, steps, baseDir) => {
49
+ let diagram = `flowchart TD\n`;
50
+ diagram += [
51
+ ` classDef apiStyle fill:#f96,stroke:#333,stroke-width:2px,color:#fff`,
52
+ ` classDef eventStyle fill:#69f,stroke:#333,stroke-width:2px,color:#fff`,
53
+ ` classDef cronStyle fill:#9c6,stroke:#333,stroke-width:2px,color:#fff`,
54
+ ` classDef noopStyle fill:#3f3a50,stroke:#333,stroke-width:2px,color:#fff`
55
+ ].join("\n") + "\n";
56
+ if (!steps || steps.length === 0) return diagram + " empty[No steps in this flow]";
57
+ steps.forEach((step) => {
58
+ const nodeId = getNodeId(step, baseDir);
59
+ const nodeLabel = getNodeLabel(step);
60
+ const nodeStyle = getNodeStyle(step);
61
+ diagram += ` ${nodeId}${nodeLabel}${nodeStyle}\n`;
62
+ });
63
+ let connectionsStr = "";
64
+ steps.forEach((sourceStep) => {
65
+ const sourceId = getNodeId(sourceStep, baseDir);
66
+ function processEmissions(emissionsArray, stepSource, stepsCollection, sourceIdentifier) {
67
+ if (emissionsArray && Array.isArray(emissionsArray)) return generateConnections(emissionsArray, stepSource, stepsCollection, sourceIdentifier, baseDir);
68
+ return "";
69
+ }
70
+ const supportsEmits = isApiStep(sourceStep) || isEventStep(sourceStep) || isCronStep(sourceStep);
71
+ const supportsVirtualEmits = supportsEmits || isNoopStep(sourceStep);
72
+ if (supportsEmits) {
73
+ const emitConnections = processEmissions(sourceStep.config.emits, sourceStep, steps, sourceId);
74
+ if (emitConnections) connectionsStr += emitConnections + "\n";
75
+ }
76
+ if (supportsVirtualEmits) {
77
+ const virtualEmitConnections = processEmissions(sourceStep.config.virtualEmits, sourceStep, steps, sourceId);
78
+ if (virtualEmitConnections) connectionsStr += virtualEmitConnections + "\n";
79
+ }
80
+ });
81
+ diagram += connectionsStr;
82
+ return diagram;
83
+ };
84
+ const saveDiagram = (diagramsDir, flowName, diagram) => {
85
+ const filePath = path.join(diagramsDir, `${flowName}.mmd`);
86
+ fs.writeFileSync(filePath, diagram);
87
+ };
88
+ const removeDiagram = (diagramsDir, flowName) => {
89
+ const filePath = path.join(diagramsDir, `${flowName}.mmd`);
90
+ if (fs.existsSync(filePath)) fs.unlinkSync(filePath);
91
+ };
92
+ const generateAndSaveDiagram = (diagramsDir, flowName, flow, baseDir) => {
93
+ saveDiagram(diagramsDir, flowName, generateFlowDiagram(flowName, flow.steps, baseDir));
94
+ };
95
+ const createMermaidGenerator = (baseDir) => {
96
+ const diagramsDir = path.join(baseDir, ".mermaid");
97
+ ensureDiagramsDirectory(diagramsDir);
98
+ const handleFlowCreated = (flowName, flow) => {
99
+ generateAndSaveDiagram(diagramsDir, flowName, flow, baseDir);
100
+ };
101
+ const handleFlowUpdated = (flowName, flow) => {
102
+ generateAndSaveDiagram(diagramsDir, flowName, flow, baseDir);
103
+ };
104
+ const handleFlowRemoved = (flowName) => {
105
+ removeDiagram(diagramsDir, flowName);
106
+ };
107
+ const initialize = (lockedData) => {
108
+ lockedData.on("flow-created", (flowName) => {
109
+ handleFlowCreated(flowName, lockedData.flows[flowName]);
110
+ });
111
+ lockedData.on("flow-updated", (flowName) => {
112
+ handleFlowUpdated(flowName, lockedData.flows[flowName]);
113
+ });
114
+ lockedData.on("flow-removed", (flowName) => {
115
+ handleFlowRemoved(flowName);
116
+ });
117
+ if (lockedData.flows && typeof lockedData.flows === "object") Object.entries(lockedData.flows).forEach(([flowName, flow]) => {
118
+ generateAndSaveDiagram(diagramsDir, flowName, flow, baseDir);
119
+ });
120
+ };
121
+ return { initialize };
122
+ };
123
+
124
+ //#endregion
125
+ export { createMermaidGenerator };
126
+ //# sourceMappingURL=mermaid-generator.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mermaid-generator.mjs","names":["connections: string[]"],"sources":["../../src/mermaid-generator.ts"],"sourcesContent":["import fs from 'fs'\nimport path from 'path'\nimport { isApiStep, isCronStep, isEventStep, isNoopStep } from './guards'\nimport type { LockedData } from './locked-data'\nimport type { Flow, Step } from './types'\n\n// Pure function to ensure diagrams directory exists\nconst ensureDiagramsDirectory = (diagramsDir: string): void => {\n if (!fs.existsSync(diagramsDir)) {\n fs.mkdirSync(diagramsDir, { recursive: true })\n }\n}\n\n// Pure function to get node ID\nconst getNodeId = (step: Step, baseDir: string): string => {\n // Get relative path from the base directory\n const relativePath = path.relative(baseDir, step.filePath)\n\n // Remove common file extensions\n const pathWithoutExtension = relativePath.replace(/\\.(ts|js|tsx|jsx)$/, '')\n\n // Replace slashes with underscores and dots with underscores\n // Only keep alphanumeric characters and underscores\n return pathWithoutExtension.replace(/[^a-zA-Z0-9]/g, '_')\n}\n\n// Pure function to get node label\nconst getNodeLabel = (step: Step): string => {\n // Get display name for node\n const displayName = step.config.name || path.basename(step.filePath, path.extname(step.filePath))\n\n // Add node type prefix to help distinguish types\n let prefix = ''\n if (isApiStep(step)) prefix = '🌐 '\n else if (isEventStep(step)) prefix = '⚡ '\n else if (isCronStep(step)) prefix = '⏰ '\n else if (isNoopStep(step)) prefix = '⚙️ '\n\n // Create a node label with the step name\n return `[\"${prefix}${displayName}\"]`\n}\n\n// Pure function to get node style\nconst getNodeStyle = (step: Step): string => {\n // Apply style class based on step type\n if (isApiStep(step)) return ':::apiStyle'\n if (isEventStep(step)) return ':::eventStyle'\n if (isCronStep(step)) return ':::cronStyle'\n if (isNoopStep(step)) return ':::noopStyle'\n return ''\n}\n\n// Pure function to generate connections\nconst generateConnections = (\n emits: Array<string | { topic: string; label?: string }>,\n sourceStep: Step,\n steps: Step[],\n sourceId: string,\n baseDir: string,\n): string => {\n const connections: string[] = []\n\n if (!emits || !Array.isArray(emits) || emits.length === 0) {\n return ''\n }\n\n // Helper function to check if a step subscribes to a topic\n const stepSubscribesToTopic = (step: Step, topic: string): boolean => {\n // Event steps use regular subscribes\n if (\n isEventStep(step) &&\n step.config.subscribes &&\n Array.isArray(step.config.subscribes) &&\n step.config.subscribes.includes(topic)\n ) {\n return true\n }\n\n // Noop and API steps use virtualSubscribes\n if (\n (isNoopStep(step) || isApiStep(step)) &&\n step.config.virtualSubscribes &&\n Array.isArray(step.config.virtualSubscribes) &&\n step.config.virtualSubscribes.includes(topic)\n ) {\n return true\n }\n\n return false\n }\n\n emits.forEach((emit) => {\n const topic = typeof emit === 'string' ? emit : emit.topic\n const label = typeof emit === 'string' ? topic : emit.label || topic\n\n steps.forEach((targetStep) => {\n if (stepSubscribesToTopic(targetStep, topic)) {\n const targetId = getNodeId(targetStep, baseDir)\n connections.push(` ${sourceId} -->|${label}| ${targetId}`)\n }\n })\n })\n\n return connections.join('\\n')\n}\n\n// Pure function to generate flow diagram\nconst generateFlowDiagram = (flowName: string, steps: Step[], baseDir: string): string => {\n // Start mermaid flowchart with top-down direction\n let diagram = `flowchart TD\\n`\n\n // Add class definitions for styling with explicit text color\n const classDefinitions = [\n ` classDef apiStyle fill:#f96,stroke:#333,stroke-width:2px,color:#fff`,\n ` classDef eventStyle fill:#69f,stroke:#333,stroke-width:2px,color:#fff`,\n ` classDef cronStyle fill:#9c6,stroke:#333,stroke-width:2px,color:#fff`,\n ` classDef noopStyle fill:#3f3a50,stroke:#333,stroke-width:2px,color:#fff`,\n ]\n diagram += classDefinitions.join('\\n') + '\\n'\n\n // Check if we have any steps\n if (!steps || steps.length === 0) {\n return diagram + ' empty[No steps in this flow]'\n }\n\n // Create node definitions with proper format\n steps.forEach((step) => {\n const nodeId = getNodeId(step, baseDir)\n const nodeLabel = getNodeLabel(step)\n const nodeStyle = getNodeStyle(step)\n diagram += ` ${nodeId}${nodeLabel}${nodeStyle}\\n`\n })\n\n // Create connections between nodes\n let connectionsStr = ''\n\n steps.forEach((sourceStep) => {\n const sourceId = getNodeId(sourceStep, baseDir)\n\n // Helper function to process emissions if they exist\n function processEmissions(\n emissionsArray: Array<string | { topic: string; label?: string }> | undefined,\n stepSource: Step,\n stepsCollection: Step[],\n sourceIdentifier: string,\n ): string {\n if (emissionsArray && Array.isArray(emissionsArray)) {\n return generateConnections(emissionsArray, stepSource, stepsCollection, sourceIdentifier, baseDir)\n }\n return ''\n }\n\n // Semantic variables to clarify which step types support which emission types\n const supportsEmits = isApiStep(sourceStep) || isEventStep(sourceStep) || isCronStep(sourceStep)\n const supportsVirtualEmits = supportsEmits || isNoopStep(sourceStep)\n\n // Process regular emissions if supported\n if (supportsEmits) {\n const emitConnections = processEmissions(sourceStep.config.emits, sourceStep, steps, sourceId)\n if (emitConnections) {\n connectionsStr += emitConnections + '\\n'\n }\n }\n\n // Process virtual emissions if supported\n if (supportsVirtualEmits) {\n const virtualEmitConnections = processEmissions(sourceStep.config.virtualEmits, sourceStep, steps, sourceId)\n if (virtualEmitConnections) {\n connectionsStr += virtualEmitConnections + '\\n'\n }\n }\n })\n\n // Add connections to the diagram\n diagram += connectionsStr\n\n return diagram\n}\n\n// Function to save a diagram to a file\nconst saveDiagram = (diagramsDir: string, flowName: string, diagram: string): void => {\n const filePath = path.join(diagramsDir, `${flowName}.mmd`)\n fs.writeFileSync(filePath, diagram)\n}\n\n// Function to remove a diagram file\nconst removeDiagram = (diagramsDir: string, flowName: string): void => {\n const filePath = path.join(diagramsDir, `${flowName}.mmd`)\n if (fs.existsSync(filePath)) {\n fs.unlinkSync(filePath)\n }\n}\n\n// Function to generate and save a diagram\nconst generateAndSaveDiagram = (diagramsDir: string, flowName: string, flow: Flow, baseDir: string): void => {\n const diagram = generateFlowDiagram(flowName, flow.steps, baseDir)\n saveDiagram(diagramsDir, flowName, diagram)\n}\n\n// Main exported function that creates the mermaid generator\nexport const createMermaidGenerator = (baseDir: string) => {\n const diagramsDir = path.join(baseDir, '.mermaid')\n ensureDiagramsDirectory(diagramsDir)\n\n // Event handlers\n const handleFlowCreated = (flowName: string, flow: Flow): void => {\n generateAndSaveDiagram(diagramsDir, flowName, flow, baseDir)\n }\n\n const handleFlowUpdated = (flowName: string, flow: Flow): void => {\n generateAndSaveDiagram(diagramsDir, flowName, flow, baseDir)\n }\n\n const handleFlowRemoved = (flowName: string): void => {\n removeDiagram(diagramsDir, flowName)\n }\n\n // Initialize function to hook into LockedData events\n const initialize = (lockedData: LockedData): void => {\n // Hook into flow events\n lockedData.on('flow-created', (flowName: string) => {\n handleFlowCreated(flowName, lockedData.flows[flowName])\n })\n\n lockedData.on('flow-updated', (flowName: string) => {\n handleFlowUpdated(flowName, lockedData.flows[flowName])\n })\n\n lockedData.on('flow-removed', (flowName: string) => {\n handleFlowRemoved(flowName)\n })\n\n // Generate diagrams for all existing flows\n if (lockedData.flows && typeof lockedData.flows === 'object') {\n Object.entries(lockedData.flows).forEach(([flowName, flow]) => {\n generateAndSaveDiagram(diagramsDir, flowName, flow as Flow, baseDir)\n })\n }\n }\n\n // Return the public API\n return {\n initialize,\n }\n}\n"],"mappings":"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"}
@@ -0,0 +1,36 @@
1
+ import { TracerFactory } from "./observability/index.mjs";
2
+ import { EventAdapter } from "./adapters/interfaces/event-adapter.interface.mjs";
3
+ import { StateAdapter } from "./adapters/interfaces/state-adapter.interface.mjs";
4
+ import { Printer } from "./printer.mjs";
5
+ import { LockedData } from "./locked-data.mjs";
6
+ import { LoggerFactory } from "./logger-factory.mjs";
7
+ import { ApiResponse, ApiRouteConfig, ApiRouteHandler, InternalStateManager } from "./types.mjs";
8
+ import { Express } from "express";
9
+
10
+ //#region src/motia.d.ts
11
+ type Motia = {
12
+ loggerFactory: LoggerFactory;
13
+ eventAdapter: EventAdapter;
14
+ state: InternalStateManager;
15
+ lockedData: LockedData;
16
+ printer: Printer;
17
+ tracerFactory: TracerFactory;
18
+ app: Express;
19
+ stateAdapter: StateAdapter;
20
+ };
21
+ type PluginApiConfig = {
22
+ method: ApiRouteConfig['method'];
23
+ path: string;
24
+ };
25
+ type UnregisterMotiaPluginApi = () => void;
26
+ type MotiaPluginContext = {
27
+ printer: Printer;
28
+ state: StateAdapter;
29
+ lockedData: LockedData;
30
+ tracerFactory: TracerFactory;
31
+ registerApi: <TRequestBody = unknown, TResponseBody extends ApiResponse<number, unknown> = ApiResponse<number, unknown>, TEmitData = never>(config: PluginApiConfig, handler: ApiRouteHandler<TRequestBody, TResponseBody, TEmitData>) => UnregisterMotiaPluginApi;
32
+ };
33
+ declare const PLUGIN_FLOW_ID = "_plugin";
34
+ //#endregion
35
+ export { Motia, MotiaPluginContext, PLUGIN_FLOW_ID, PluginApiConfig, UnregisterMotiaPluginApi };
36
+ //# sourceMappingURL=motia.d.mts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"motia.d.mts","names":[],"sources":["../../src/motia.ts"],"sourcesContent":[],"mappings":";;;;;;;;;;KASY,KAAA;iBACK;EADL,YAAK,EAED,YAFC;EACA,KAAA,EAER,oBAFQ;EACD,UAAA,EAEF,UAFE;EACP,OAAA,EAEE,OAFF;EACK,aAAA,EAEG,aAFH;EACH,GAAA,EAGJ,OAHI;EACM,YAAA,EAGD,YAHC;CAEV;AACS,KAGJ,eAAA,GAHI;EAAY,MAAA,EAIlB,cAJkB,CAAA,QAAA,CAAA;EAGhB,IAAA,EAAA,MAAA;AAKZ,CAAA;AAEY,KAFA,wBAAA,GAEkB,GAAA,GAAA,IAAA;AACnB,KADC,kBAAA,GACD;EACF,OAAA,EADE,OACF;EACK,KAAA,EADL,YACK;EACG,UAAA,EADH,UACG;EAGS,aAAA,EAHT,aAGS;EAA+B,WAAA,EAAA,CAAA,eAAA,OAAA,EAAA,sBAA/B,WAA+B,CAAA,MAAA,EAAA,OAAA,CAAA,GAAA,WAAA,CAAA,MAAA,EAAA,OAAA,CAAA,EAAA,YAAA,KAAA,CAAA,CAAA,MAAA,EAG7C,eAH6C,EAAA,OAAA,EAI5C,eAJ4C,CAI5B,YAJ4B,EAId,aAJc,EAIC,SAJD,CAAA,EAAA,GAKlD,wBALkD;CAG7C;AACiB,cAIhB,cAAA,GAJgB,SAAA"}
@@ -0,0 +1,6 @@
1
+ //#region src/motia.ts
2
+ const PLUGIN_FLOW_ID = "_plugin";
3
+
4
+ //#endregion
5
+ export { PLUGIN_FLOW_ID };
6
+ //# sourceMappingURL=motia.mjs.map