@pikku/cli 0.11.1 → 0.11.3

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/.pikku/channel/pikku-channel-types.gen.ts +73 -17
  2. package/.pikku/channel/pikku-channels-map.gen.d.ts +11 -11
  3. package/.pikku/channel/pikku-channels-meta.gen.json +1 -0
  4. package/.pikku/channel/pikku-channels-meta.gen.ts +4 -2
  5. package/.pikku/channel/pikku-channels.gen.ts +1 -1
  6. package/.pikku/cli/pikku-cli-channel.ts +2 -2
  7. package/.pikku/cli/pikku-cli-client.gen.ts +1 -3
  8. package/.pikku/cli/pikku-cli-types.gen.ts +3 -3
  9. package/.pikku/cli/pikku-cli-wirings-meta.gen.json +147 -0
  10. package/.pikku/cli/pikku-cli-wirings-meta.gen.ts +4 -157
  11. package/.pikku/cli/pikku-cli-wirings.gen.ts +3 -3
  12. package/.pikku/cli/pikku-cli.gen.ts +3 -3
  13. package/.pikku/forge/pikku-forge-types.gen.ts +83 -0
  14. package/.pikku/function/pikku-function-types.gen.ts +223 -91
  15. package/.pikku/function/pikku-functions-meta-verbose.gen.json +1030 -0
  16. package/.pikku/function/pikku-functions-meta.gen.json +656 -0
  17. package/.pikku/function/pikku-functions-meta.gen.ts +4 -970
  18. package/.pikku/http/pikku-http-types.gen.ts +20 -4
  19. package/.pikku/http/pikku-http-wirings-map.gen.d.ts +11 -11
  20. package/.pikku/http/pikku-http-wirings-meta.gen.json +9 -0
  21. package/.pikku/http/pikku-http-wirings-meta.gen.ts +4 -10
  22. package/.pikku/http/pikku-http-wirings.gen.ts +1 -1
  23. package/.pikku/mcp/pikku-mcp-types.gen.ts +72 -20
  24. package/.pikku/mcp/pikku-mcp-wirings-meta.gen.json +5 -0
  25. package/.pikku/mcp/pikku-mcp-wirings-meta.gen.ts +6 -4
  26. package/.pikku/mcp/pikku-mcp-wirings.gen.ts +1 -1
  27. package/.pikku/pikku-bootstrap.gen.ts +7 -12
  28. package/.pikku/pikku-services.gen.ts +6 -7
  29. package/.pikku/pikku-types.gen.ts +4 -1
  30. package/.pikku/pikku-websocket.gen.ts +1 -1
  31. package/.pikku/queue/pikku-queue-types.gen.ts +2 -2
  32. package/.pikku/queue/pikku-queue-workers-wirings-map.gen.d.ts +11 -11
  33. package/.pikku/queue/pikku-queue-workers-wirings-meta.gen.json +1 -0
  34. package/.pikku/queue/pikku-queue-workers-wirings-meta.gen.ts +5 -7
  35. package/.pikku/queue/pikku-queue-workers-wirings.gen.ts +1 -1
  36. package/.pikku/rpc/pikku-remote-rpc-workers.gen.ts +5 -2
  37. package/.pikku/rpc/pikku-rpc-wirings-map.gen.d.ts +19 -14
  38. package/.pikku/rpc/pikku-rpc-wirings-map.internal.gen.d.ts +46 -39
  39. package/.pikku/scheduler/pikku-scheduler-types.gen.ts +2 -2
  40. package/.pikku/scheduler/pikku-schedulers-wirings-meta.gen.json +1 -0
  41. package/.pikku/scheduler/pikku-schedulers-wirings-meta.gen.ts +5 -2
  42. package/.pikku/scheduler/pikku-schedulers-wirings.gen.ts +1 -1
  43. package/.pikku/schemas/register.gen.ts +31 -23
  44. package/.pikku/schemas/schemas/PikkuCLIConfig.schema.json +1 -1
  45. package/.pikku/schemas/schemas/PikkuCLIOutput.schema.json +1 -1
  46. package/.pikku/schemas/schemas/PikkuChannelsOutput.schema.json +1 -1
  47. package/.pikku/schemas/schemas/PikkuForgeNodesOutput.schema.json +1 -0
  48. package/.pikku/schemas/schemas/PikkuFunctionsOutput.schema.json +1 -1
  49. package/.pikku/schemas/schemas/PikkuHTTPOutput.schema.json +1 -1
  50. package/.pikku/schemas/schemas/PikkuMCPOutput.schema.json +1 -1
  51. package/.pikku/schemas/schemas/PikkuMiddlewareOutput.schema.json +1 -1
  52. package/.pikku/schemas/schemas/PikkuPackageOutput.schema.json +1 -0
  53. package/.pikku/schemas/schemas/PikkuPermissionsOutput.schema.json +1 -1
  54. package/.pikku/schemas/schemas/PikkuPublicRPCOutput.schema.json +1 -1
  55. package/.pikku/schemas/schemas/PikkuQueueOutput.schema.json +1 -1
  56. package/.pikku/schemas/schemas/PikkuRPCOutput.schema.json +1 -1
  57. package/.pikku/schemas/schemas/PikkuRemoteRPCOutput.schema.json +1 -1
  58. package/.pikku/schemas/schemas/PikkuSchedulerOutput.schema.json +1 -1
  59. package/.pikku/schemas/schemas/PikkuSchemasOutput.schema.json +1 -1
  60. package/.pikku/schemas/schemas/PikkuWorkflowOutput.schema.json +1 -1
  61. package/.pikku/services/config.gen.json +104 -0
  62. package/.pikku/services/getInspectorState.gen.json +10 -0
  63. package/.pikku/services/jwt.gen.json +13 -0
  64. package/.pikku/services/logger.gen.json +25 -0
  65. package/.pikku/services/queueService.gen.json +14 -0
  66. package/.pikku/services/schedulerService.gen.json +17 -0
  67. package/.pikku/services/schema.gen.json +14 -0
  68. package/.pikku/services/secrets.gen.json +13 -0
  69. package/.pikku/services/variables.gen.json +13 -0
  70. package/.pikku/services/workflowService.gen.json +31 -0
  71. package/.pikku/workflow/pikku-workflow-map.gen.d.ts +2 -36
  72. package/.pikku/workflow/pikku-workflow-types.gen.ts +305 -48
  73. package/.pikku/workflow/pikku-workflow-wirings-meta.gen.ts +6 -2
  74. package/.pikku/workflow/pikku-workflow-wirings.gen.ts +1 -2
  75. package/CHANGELOG.md +44 -1
  76. package/bin/pikku.ts +6 -32
  77. package/build.sh +53 -31
  78. package/cli.schema.json +1 -1
  79. package/dist/.pikku/channel/pikku-channel-types.gen.d.ts +51 -10
  80. package/dist/.pikku/channel/pikku-channel-types.gen.js +3 -13
  81. package/dist/.pikku/channel/pikku-channels-meta.gen.js +3 -2
  82. package/dist/.pikku/channel/pikku-channels-meta.gen.json +1 -0
  83. package/dist/.pikku/channel/pikku-channels.gen.d.ts +1 -1
  84. package/dist/.pikku/channel/pikku-channels.gen.js +1 -1
  85. package/dist/.pikku/cli/pikku-cli-channel.js +2 -2
  86. package/dist/.pikku/cli/pikku-cli-client.gen.d.ts +1 -1
  87. package/dist/.pikku/cli/pikku-cli-client.gen.js +1 -3
  88. package/dist/.pikku/cli/pikku-cli-types.gen.d.ts +3 -3
  89. package/dist/.pikku/cli/pikku-cli-types.gen.js +1 -1
  90. package/dist/.pikku/cli/pikku-cli-wirings-meta.gen.js +3 -157
  91. package/dist/.pikku/cli/pikku-cli-wirings-meta.gen.json +147 -0
  92. package/dist/.pikku/cli/pikku-cli-wirings.gen.d.ts +2 -2
  93. package/dist/.pikku/cli/pikku-cli-wirings.gen.js +2 -2
  94. package/dist/.pikku/cli/pikku-cli.gen.d.ts +1 -1
  95. package/dist/.pikku/cli/pikku-cli.gen.js +3 -3
  96. package/dist/.pikku/forge/pikku-forge-types.gen.d.ts +72 -0
  97. package/dist/.pikku/forge/pikku-forge-types.gen.js +55 -0
  98. package/dist/.pikku/function/pikku-function-types.gen.d.ts +141 -99
  99. package/dist/.pikku/function/pikku-function-types.gen.js +52 -62
  100. package/dist/.pikku/function/pikku-functions-meta.gen.js +3 -969
  101. package/dist/.pikku/function/pikku-functions-meta.gen.json +656 -0
  102. package/dist/.pikku/http/pikku-http-types.gen.d.ts +19 -4
  103. package/dist/.pikku/http/pikku-http-types.gen.js +1 -1
  104. package/dist/.pikku/http/pikku-http-wirings-meta.gen.js +3 -10
  105. package/dist/.pikku/http/pikku-http-wirings-meta.gen.json +9 -0
  106. package/dist/.pikku/http/pikku-http-wirings.gen.d.ts +1 -1
  107. package/dist/.pikku/http/pikku-http-wirings.gen.js +1 -1
  108. package/dist/.pikku/mcp/pikku-mcp-types.gen.d.ts +57 -17
  109. package/dist/.pikku/mcp/pikku-mcp-types.gen.js +7 -31
  110. package/dist/.pikku/mcp/pikku-mcp-wirings-meta.gen.js +5 -4
  111. package/dist/.pikku/mcp/pikku-mcp-wirings-meta.gen.json +5 -0
  112. package/dist/.pikku/mcp/pikku-mcp-wirings.gen.d.ts +1 -1
  113. package/dist/.pikku/mcp/pikku-mcp-wirings.gen.js +1 -1
  114. package/dist/.pikku/pikku-bootstrap.gen.d.ts +7 -12
  115. package/dist/.pikku/pikku-bootstrap.gen.js +7 -12
  116. package/dist/.pikku/pikku-services.gen.d.ts +5 -7
  117. package/dist/.pikku/pikku-services.gen.js +3 -5
  118. package/dist/.pikku/pikku-types.gen.d.ts +2 -1
  119. package/dist/.pikku/pikku-types.gen.js +3 -1
  120. package/dist/.pikku/pikku-websocket.gen.d.ts +1 -1
  121. package/dist/.pikku/pikku-websocket.gen.js +1 -1
  122. package/dist/.pikku/queue/pikku-queue-types.gen.d.ts +2 -2
  123. package/dist/.pikku/queue/pikku-queue-types.gen.js +1 -1
  124. package/dist/.pikku/queue/pikku-queue-workers-wirings-meta.gen.js +3 -7
  125. package/dist/.pikku/queue/pikku-queue-workers-wirings-meta.gen.json +1 -0
  126. package/dist/.pikku/queue/pikku-queue-workers-wirings.gen.d.ts +1 -1
  127. package/dist/.pikku/queue/pikku-queue-workers-wirings.gen.js +1 -1
  128. package/dist/.pikku/rpc/pikku-remote-rpc-workers.gen.d.ts +9 -9
  129. package/dist/.pikku/rpc/pikku-remote-rpc-workers.gen.js +5 -2
  130. package/dist/.pikku/scheduler/pikku-scheduler-types.gen.d.ts +2 -2
  131. package/dist/.pikku/scheduler/pikku-scheduler-types.gen.js +1 -1
  132. package/dist/.pikku/scheduler/pikku-schedulers-wirings-meta.gen.js +3 -2
  133. package/dist/.pikku/scheduler/pikku-schedulers-wirings-meta.gen.json +1 -0
  134. package/dist/.pikku/scheduler/pikku-schedulers-wirings.gen.d.ts +1 -1
  135. package/dist/.pikku/scheduler/pikku-schedulers-wirings.gen.js +1 -1
  136. package/dist/.pikku/schemas/register.gen.js +19 -15
  137. package/dist/.pikku/schemas/schemas/PikkuCLIConfig.schema.json +1 -1
  138. package/dist/.pikku/schemas/schemas/PikkuCLIOutput.schema.json +1 -1
  139. package/dist/.pikku/schemas/schemas/PikkuChannelsOutput.schema.json +1 -1
  140. package/dist/.pikku/schemas/schemas/PikkuForgeNodesOutput.schema.json +1 -0
  141. package/dist/.pikku/schemas/schemas/PikkuFunctionsOutput.schema.json +1 -1
  142. package/dist/.pikku/schemas/schemas/PikkuHTTPOutput.schema.json +1 -1
  143. package/dist/.pikku/schemas/schemas/PikkuMCPOutput.schema.json +1 -1
  144. package/dist/.pikku/schemas/schemas/PikkuMiddlewareOutput.schema.json +1 -1
  145. package/dist/.pikku/schemas/schemas/PikkuPackageOutput.schema.json +1 -0
  146. package/dist/.pikku/schemas/schemas/PikkuPermissionsOutput.schema.json +1 -1
  147. package/dist/.pikku/schemas/schemas/PikkuPublicRPCOutput.schema.json +1 -1
  148. package/dist/.pikku/schemas/schemas/PikkuQueueOutput.schema.json +1 -1
  149. package/dist/.pikku/schemas/schemas/PikkuRPCOutput.schema.json +1 -1
  150. package/dist/.pikku/schemas/schemas/PikkuRemoteRPCOutput.schema.json +1 -1
  151. package/dist/.pikku/schemas/schemas/PikkuSchedulerOutput.schema.json +1 -1
  152. package/dist/.pikku/schemas/schemas/PikkuSchemasOutput.schema.json +1 -1
  153. package/dist/.pikku/schemas/schemas/PikkuWorkflowOutput.schema.json +1 -1
  154. package/dist/.pikku/workflow/pikku-workflow-types.gen.d.ts +213 -39
  155. package/dist/.pikku/workflow/pikku-workflow-types.gen.js +106 -16
  156. package/dist/.pikku/workflow/pikku-workflow-wirings-meta.gen.js +3 -2
  157. package/dist/.pikku/workflow/pikku-workflow-wirings.gen.d.ts +1 -1
  158. package/dist/.pikku/workflow/pikku-workflow-wirings.gen.js +1 -2
  159. package/dist/bin/pikku.js +5 -26
  160. package/dist/src/cli.wiring.js +4 -4
  161. package/dist/src/functions/commands/all.js +172 -94
  162. package/dist/src/functions/commands/bootstrap.js +21 -16
  163. package/dist/src/functions/commands/watch.js +6 -3
  164. package/dist/src/functions/runtimes/nextjs/pikku-command-nextjs.js +12 -8
  165. package/dist/src/functions/runtimes/nextjs/serialize-nextjs-backend-wrapper.d.ts +1 -1
  166. package/dist/src/functions/runtimes/nextjs/serialize-nextjs-backend-wrapper.js +74 -22
  167. package/dist/src/functions/runtimes/nextjs/serialize-nextjs-http-wrapper.d.ts +1 -1
  168. package/dist/src/functions/runtimes/nextjs/serialize-nextjs-http-wrapper.js +72 -20
  169. package/dist/src/functions/wirings/channels/pikku-channels.js +9 -2
  170. package/dist/src/functions/wirings/channels/pikku-command-channels.js +18 -2
  171. package/dist/src/functions/wirings/channels/serialize-channel-types.js +72 -16
  172. package/dist/src/functions/wirings/channels/serialize-typed-channel-map.js +1 -2
  173. package/dist/src/functions/wirings/cli/pikku-command-cli-entry.js +4 -4
  174. package/dist/src/functions/wirings/cli/pikku-command-cli-types.js +1 -1
  175. package/dist/src/functions/wirings/cli/pikku-command-cli.js +17 -3
  176. package/dist/src/functions/wirings/cli/serialize-channel-cli.js +1 -1
  177. package/dist/src/functions/wirings/cli/serialize-cli-types.js +2 -2
  178. package/dist/src/functions/wirings/cli/serialize-local-cli-bootstrap.d.ts +1 -1
  179. package/dist/src/functions/wirings/cli/serialize-local-cli-bootstrap.js +4 -4
  180. package/dist/src/functions/wirings/forge/pikku-command-forge-nodes.d.ts +1 -0
  181. package/dist/src/functions/wirings/forge/pikku-command-forge-nodes.js +90 -0
  182. package/dist/src/functions/wirings/forge/pikku-command-forge-types.d.ts +1 -0
  183. package/dist/src/functions/wirings/forge/pikku-command-forge-types.js +26 -0
  184. package/dist/src/functions/wirings/forge/serialize-forge-types.d.ts +4 -0
  185. package/dist/src/functions/wirings/forge/serialize-forge-types.js +90 -0
  186. package/dist/src/functions/wirings/functions/pikku-command-function-types-split.js +4 -4
  187. package/dist/src/functions/wirings/functions/pikku-command-function-types.js +7 -2
  188. package/dist/src/functions/wirings/functions/pikku-command-functions.js +35 -10
  189. package/dist/src/functions/wirings/functions/pikku-command-services.d.ts +1 -1
  190. package/dist/src/functions/wirings/functions/pikku-command-services.js +24 -24
  191. package/dist/src/functions/wirings/functions/pikku-function-types.js +2 -2
  192. package/dist/src/functions/wirings/functions/schemas.d.ts +1 -1
  193. package/dist/src/functions/wirings/functions/schemas.js +5 -4
  194. package/dist/src/functions/wirings/functions/serialize-function-imports.d.ts +3 -1
  195. package/dist/src/functions/wirings/functions/serialize-function-imports.js +7 -3
  196. package/dist/src/functions/wirings/functions/serialize-function-types.d.ts +1 -1
  197. package/dist/src/functions/wirings/functions/serialize-function-types.js +224 -91
  198. package/dist/src/functions/wirings/functions/serialize-pikku-types-hub.d.ts +1 -1
  199. package/dist/src/functions/wirings/functions/serialize-pikku-types-hub.js +19 -21
  200. package/dist/src/functions/wirings/http/openapi-spec-generator.js +5 -5
  201. package/dist/src/functions/wirings/http/pikku-command-http-routes.js +18 -2
  202. package/dist/src/functions/wirings/http/pikku-command-openapi.js +2 -2
  203. package/dist/src/functions/wirings/http/pikku-http-routes.js +9 -2
  204. package/dist/src/functions/wirings/http/serialize-http-types.js +19 -3
  205. package/dist/src/functions/wirings/http/serialize-typed-http-map.js +33 -8
  206. package/dist/src/functions/wirings/mcp/pikku-command-mcp.js +29 -6
  207. package/dist/src/functions/wirings/mcp/serialize-mcp-json.js +3 -2
  208. package/dist/src/functions/wirings/mcp/serialize-mcp-types.js +71 -19
  209. package/dist/src/functions/wirings/middleware/pikku-command-middleware.js +29 -2
  210. package/dist/src/functions/wirings/middleware/serialize-middleware-groups-meta.d.ts +5 -2
  211. package/dist/src/functions/wirings/middleware/serialize-middleware-groups-meta.js +5 -13
  212. package/dist/src/functions/wirings/package/pikku-command-package.d.ts +1 -0
  213. package/dist/src/functions/wirings/package/pikku-command-package.js +58 -0
  214. package/dist/src/functions/wirings/package/serialize-package.d.ts +5 -0
  215. package/dist/src/functions/wirings/package/serialize-package.js +32 -0
  216. package/dist/src/functions/wirings/queue/pikku-command-queue.js +17 -3
  217. package/dist/src/functions/wirings/queue/pikku-queue.js +9 -11
  218. package/dist/src/functions/wirings/queue/serialize-queue-map.js +20 -3
  219. package/dist/src/functions/wirings/queue/serialize-queue-meta.d.ts +2 -1
  220. package/dist/src/functions/wirings/queue/serialize-queue-meta.js +10 -1
  221. package/dist/src/functions/wirings/queue/serialize-queue-types.js +1 -1
  222. package/dist/src/functions/wirings/rpc/pikku-command-rpc-map.js +4 -4
  223. package/dist/src/functions/wirings/rpc/pikku-command-rpc.js +9 -2
  224. package/dist/src/functions/wirings/rpc/serialize-public-rpc.js +11 -4
  225. package/dist/src/functions/wirings/rpc/serialize-remote-rpc.js +4 -1
  226. package/dist/src/functions/wirings/rpc/serialize-rpc-wrapper.js +3 -3
  227. package/dist/src/functions/wirings/rpc/serialize-typed-rpc-map.d.ts +1 -1
  228. package/dist/src/functions/wirings/rpc/serialize-typed-rpc-map.js +54 -8
  229. package/dist/src/functions/wirings/scheduler/pikku-command-scheduler.js +15 -3
  230. package/dist/src/functions/wirings/scheduler/serialize-scheduler-meta.d.ts +2 -1
  231. package/dist/src/functions/wirings/scheduler/serialize-scheduler-meta.js +11 -1
  232. package/dist/src/functions/wirings/scheduler/serialize-scheduler-types.js +1 -1
  233. package/dist/src/functions/wirings/services/pikku-command-service-metadata.d.ts +1 -0
  234. package/dist/src/functions/wirings/services/pikku-command-service-metadata.js +22 -0
  235. package/dist/src/functions/wirings/workflow/pikku-command-workflow.js +58 -16
  236. package/dist/src/functions/wirings/workflow/serialize-workflow-map.d.ts +3 -0
  237. package/dist/src/functions/wirings/workflow/serialize-workflow-map.js +30 -32
  238. package/dist/src/functions/wirings/workflow/serialize-workflow-meta.d.ts +1 -2
  239. package/dist/src/functions/wirings/workflow/serialize-workflow-meta.js +43 -8
  240. package/dist/src/functions/wirings/workflow/serialize-workflow-registration.d.ts +7 -0
  241. package/dist/src/functions/wirings/workflow/serialize-workflow-registration.js +53 -0
  242. package/dist/src/functions/wirings/workflow/serialize-workflow-types.d.ts +4 -2
  243. package/dist/src/functions/wirings/workflow/serialize-workflow-types.js +308 -49
  244. package/dist/src/functions/wirings/workflow/serialize-workflow-workers.d.ts +1 -1
  245. package/dist/src/functions/wirings/workflow/serialize-workflow-workers.js +16 -29
  246. package/dist/src/middleware/log-command-info-and-time.d.ts +2 -2
  247. package/dist/src/middleware/log-command-info-and-time.js +1 -4
  248. package/dist/src/services/cli-logger-forwarder.service.js +1 -1
  249. package/dist/src/services.d.ts +2 -7
  250. package/dist/src/services.js +18 -13
  251. package/dist/src/utils/check-required-types.d.ts +2 -2
  252. package/dist/src/utils/check-required-types.js +2 -3
  253. package/dist/src/utils/command-summary.d.ts +2 -0
  254. package/dist/src/utils/command-summary.js +2 -0
  255. package/dist/src/utils/custom-types-generator.js +13 -15
  256. package/dist/src/utils/generate-bootstrap-file.js +1 -1
  257. package/dist/src/utils/pikku-cli-config.js +65 -4
  258. package/dist/src/utils/pikku-files-and-methods.d.ts +2 -2
  259. package/dist/src/utils/pikku-files-and-methods.js +4 -4
  260. package/dist/src/utils/schema-generator.d.ts +4 -3
  261. package/dist/src/utils/schema-generator.js +135 -15
  262. package/dist/src/utils/strip-verbose-meta.d.ts +43 -0
  263. package/dist/src/utils/strip-verbose-meta.js +210 -0
  264. package/dist/tsconfig.tsbuildinfo +1 -1
  265. package/package.json +11 -9
  266. package/src/cli.wiring.ts +4 -4
  267. package/src/functions/commands/all.ts +203 -107
  268. package/src/functions/commands/bootstrap.ts +23 -16
  269. package/src/functions/commands/watch.ts +6 -3
  270. package/src/functions/runtimes/nextjs/pikku-command-nextjs.ts +26 -6
  271. package/src/functions/runtimes/nextjs/serialize-nextjs-backend-wrapper.ts +75 -22
  272. package/src/functions/runtimes/nextjs/serialize-nextjs-http-wrapper.ts +72 -19
  273. package/src/functions/wirings/channels/pikku-channels.ts +27 -3
  274. package/src/functions/wirings/channels/pikku-command-channels.ts +46 -3
  275. package/src/functions/wirings/channels/serialize-channel-types.ts +72 -16
  276. package/src/functions/wirings/channels/serialize-typed-channel-map.ts +3 -2
  277. package/src/functions/wirings/cli/pikku-command-cli-entry.ts +4 -4
  278. package/src/functions/wirings/cli/pikku-command-cli-types.ts +1 -1
  279. package/src/functions/wirings/cli/pikku-command-cli.ts +45 -3
  280. package/src/functions/wirings/cli/serialize-channel-cli.ts +1 -1
  281. package/src/functions/wirings/cli/serialize-cli-types.ts +2 -2
  282. package/src/functions/wirings/cli/serialize-local-cli-bootstrap.ts +5 -5
  283. package/src/functions/wirings/forge/pikku-command-forge-nodes.ts +135 -0
  284. package/src/functions/wirings/forge/pikku-command-forge-types.ts +38 -0
  285. package/src/functions/wirings/forge/serialize-forge-types.ts +94 -0
  286. package/src/functions/wirings/functions/pikku-command-function-types-split.ts +9 -8
  287. package/src/functions/wirings/functions/pikku-command-function-types.ts +17 -10
  288. package/src/functions/wirings/functions/pikku-command-functions.ts +59 -14
  289. package/src/functions/wirings/functions/pikku-command-services.ts +26 -26
  290. package/src/functions/wirings/functions/pikku-function-types.ts +3 -1
  291. package/src/functions/wirings/functions/schemas.ts +14 -4
  292. package/src/functions/wirings/functions/serialize-function-imports.ts +12 -3
  293. package/src/functions/wirings/functions/serialize-function-types.ts +227 -93
  294. package/src/functions/wirings/functions/serialize-pikku-types-hub.ts +27 -26
  295. package/src/functions/wirings/http/openapi-spec-generator.ts +15 -6
  296. package/src/functions/wirings/http/pikku-command-http-routes.ts +46 -2
  297. package/src/functions/wirings/http/pikku-command-openapi.ts +3 -2
  298. package/src/functions/wirings/http/pikku-http-routes.ts +28 -2
  299. package/src/functions/wirings/http/serialize-http-types.ts +19 -3
  300. package/src/functions/wirings/http/serialize-typed-http-map.ts +32 -8
  301. package/src/functions/wirings/mcp/pikku-command-mcp.ts +58 -10
  302. package/src/functions/wirings/mcp/serialize-mcp-json.ts +8 -6
  303. package/src/functions/wirings/mcp/serialize-mcp-types.ts +71 -19
  304. package/src/functions/wirings/middleware/pikku-command-middleware.ts +39 -2
  305. package/src/functions/wirings/middleware/serialize-middleware-groups-meta.ts +4 -19
  306. package/src/functions/wirings/package/pikku-command-package.ts +81 -0
  307. package/src/functions/wirings/package/serialize-package.ts +69 -0
  308. package/src/functions/wirings/permissions/pikku-command-permissions.ts +2 -2
  309. package/src/functions/wirings/queue/pikku-command-queue.ts +47 -2
  310. package/src/functions/wirings/queue/pikku-queue.ts +26 -10
  311. package/src/functions/wirings/queue/serialize-queue-map.ts +18 -3
  312. package/src/functions/wirings/queue/serialize-queue-meta.ts +15 -1
  313. package/src/functions/wirings/queue/serialize-queue-types.ts +1 -1
  314. package/src/functions/wirings/rpc/pikku-command-rpc-map.ts +7 -4
  315. package/src/functions/wirings/rpc/pikku-command-rpc.ts +25 -2
  316. package/src/functions/wirings/rpc/serialize-public-rpc.ts +11 -4
  317. package/src/functions/wirings/rpc/serialize-remote-rpc.ts +4 -1
  318. package/src/functions/wirings/rpc/serialize-rpc-wrapper.ts +3 -3
  319. package/src/functions/wirings/rpc/serialize-typed-rpc-map.ts +74 -8
  320. package/src/functions/wirings/scheduler/pikku-command-scheduler.ts +51 -4
  321. package/src/functions/wirings/scheduler/serialize-scheduler-meta.ts +20 -1
  322. package/src/functions/wirings/scheduler/serialize-scheduler-types.ts +1 -1
  323. package/src/functions/wirings/services/pikku-command-service-metadata.ts +25 -0
  324. package/src/functions/wirings/workflow/pikku-command-workflow.ts +114 -19
  325. package/src/functions/wirings/workflow/serialize-workflow-map.ts +38 -40
  326. package/src/functions/wirings/workflow/serialize-workflow-meta.ts +68 -11
  327. package/src/functions/wirings/workflow/serialize-workflow-registration.ts +83 -0
  328. package/src/functions/wirings/workflow/serialize-workflow-types.ts +311 -49
  329. package/src/functions/wirings/workflow/serialize-workflow-workers.ts +16 -29
  330. package/src/middleware/log-command-info-and-time.ts +3 -6
  331. package/src/services/cli-logger-forwarder.service.ts +1 -1
  332. package/src/services.ts +23 -16
  333. package/src/utils/check-required-types.ts +4 -7
  334. package/src/utils/command-summary.ts +4 -0
  335. package/src/utils/custom-types-generator.ts +15 -15
  336. package/src/utils/generate-bootstrap-file.ts +1 -1
  337. package/src/utils/pikku-cli-config.ts +105 -5
  338. package/src/utils/pikku-files-and-methods.ts +10 -13
  339. package/src/utils/schema-generator.ts +185 -22
  340. package/src/utils/strip-verbose-meta.ts +254 -0
  341. package/types/application-types.d.ts +1 -1
  342. package/types/config.d.ts +47 -2
  343. package/.pikku/function/pikku-functions-meta.min.gen.ts +0 -211
  344. package/.pikku/function/pikku-functions.gen.ts +0 -84
  345. package/.pikku/rpc/pikku-rpc-wirings-meta.internal.gen.ts +0 -47
  346. package/dist/.pikku/function/pikku-functions-meta.min.gen.d.ts +0 -1
  347. package/dist/.pikku/function/pikku-functions-meta.min.gen.js +0 -211
  348. package/dist/.pikku/function/pikku-functions.gen.d.ts +0 -1
  349. package/dist/.pikku/function/pikku-functions.gen.js +0 -83
  350. package/dist/.pikku/rpc/pikku-rpc-wirings-meta.internal.gen.d.ts +0 -1
  351. package/dist/.pikku/rpc/pikku-rpc-wirings-meta.internal.gen.js +0 -47
  352. package/dist/.pikku/schemas/schemas/PikkuRemoteInternalRPCInput.schema.json +0 -1
  353. package/dist/src/functions/wirings/workflow/pikku-command-workflow-map.d.ts +0 -1
  354. package/dist/src/functions/wirings/workflow/pikku-command-workflow-map.js +0 -12
  355. package/dist/src/functions/wirings/workflow/pikku-command-workflow-types.d.ts +0 -1
  356. package/dist/src/functions/wirings/workflow/pikku-command-workflow-types.js +0 -11
  357. package/src/functions/wirings/workflow/pikku-command-workflow-map.ts +0 -24
  358. package/src/functions/wirings/workflow/pikku-command-workflow-types.ts +0 -22
@@ -2,13 +2,27 @@ import { pikkuSessionlessFunc } from '../../../../.pikku/pikku-types.gen.js';
2
2
  import { serializeFileImports } from '../../../utils/file-imports-serializer.js';
3
3
  import { writeFileInDir } from '../../../utils/file-writer.js';
4
4
  import { logCommandInfoAndTime } from '../../../middleware/log-command-info-and-time.js';
5
- import { serializeQueueMeta } from './serialize-queue-meta.js';
5
+ import { serializeQueueMeta, serializeQueueMetaTS, } from './serialize-queue-meta.js';
6
+ import { getFileImportRelativePath } from '../../../utils/file-import-path.js';
7
+ import { stripVerboseFields, hasVerboseFields, } from '../../../utils/strip-verbose-meta.js';
6
8
  export const pikkuQueue = pikkuSessionlessFunc({
7
9
  func: async ({ logger, config, getInspectorState }) => {
8
10
  const visitState = await getInspectorState();
9
- const { queueWorkersWiringFile, queueWorkersWiringMetaFile, packageMappings, } = config;
11
+ const { queueWorkersWiringFile, queueWorkersWiringMetaFile, queueWorkersWiringMetaJsonFile, packageMappings, schema, } = config;
10
12
  const { queueWorkers } = visitState;
11
- await writeFileInDir(logger, queueWorkersWiringMetaFile, serializeQueueMeta(queueWorkers.meta));
13
+ const fullMeta = serializeQueueMeta(queueWorkers.meta);
14
+ // Write minimal JSON file (runtime-only fields)
15
+ const minimalMeta = stripVerboseFields(fullMeta);
16
+ await writeFileInDir(logger, queueWorkersWiringMetaJsonFile, JSON.stringify(minimalMeta, null, 2));
17
+ // Write verbose JSON only if it has additional fields
18
+ if (hasVerboseFields(fullMeta)) {
19
+ const verbosePath = queueWorkersWiringMetaJsonFile.replace(/\.gen\.json$/, '-verbose.gen.json');
20
+ await writeFileInDir(logger, verbosePath, JSON.stringify(fullMeta, null, 2));
21
+ }
22
+ // Calculate relative path from TS file to JSON file
23
+ const jsonImportPath = getFileImportRelativePath(queueWorkersWiringMetaFile, queueWorkersWiringMetaJsonFile, packageMappings);
24
+ // Write TypeScript file that imports JSON
25
+ await writeFileInDir(logger, queueWorkersWiringMetaFile, serializeQueueMetaTS(jsonImportPath, schema?.supportsImportAttributes ?? false));
12
26
  await writeFileInDir(logger, queueWorkersWiringFile, serializeFileImports('addQueueWorkers', queueWorkersWiringFile, queueWorkers.files, packageMappings));
13
27
  return true;
14
28
  },
@@ -2,21 +2,19 @@ import { pikkuSessionlessFunc } from '../../../../.pikku/pikku-types.gen.js';
2
2
  import { serializeFileImports } from '../../../utils/file-imports-serializer.js';
3
3
  import { writeFileInDir } from '../../../utils/file-writer.js';
4
4
  import { logCommandInfoAndTime } from '../../../middleware/log-command-info-and-time.js';
5
- import { serializeQueueMeta } from './serialize-queue-meta.js';
5
+ import { serializeQueueMeta, serializeQueueMetaTS, } from './serialize-queue-meta.js';
6
+ import { getFileImportRelativePath } from '../../../utils/file-import-path.js';
6
7
  export const pikkuQueue = pikkuSessionlessFunc({
7
8
  func: async ({ logger, config, getInspectorState }) => {
8
9
  const visitState = await getInspectorState();
9
- const { queueWorkersWiringFile, queueWorkersWiringMetaFile, packageMappings, } = config;
10
+ const { queueWorkersWiringFile, queueWorkersWiringMetaFile, queueWorkersWiringMetaJsonFile, packageMappings, schema, } = config;
10
11
  const { queueWorkers } = visitState;
11
- // Add remote RPC worker to queue metadata if it exists
12
- const queueMeta = { ...queueWorkers.meta };
13
- if (config.rpc?.remoteRpcWorkersPath) {
14
- queueMeta['pikku-remote-internal-rpc'] = {
15
- pikkuFuncName: 'pikkuRemoteInternalRPC',
16
- queueName: 'pikku-remote-internal-rpc',
17
- };
18
- }
19
- await writeFileInDir(logger, queueWorkersWiringMetaFile, serializeQueueMeta(queueMeta));
12
+ // Write JSON file
13
+ await writeFileInDir(logger, queueWorkersWiringMetaJsonFile, JSON.stringify(serializeQueueMeta(queueWorkers.meta), null, 2));
14
+ // Calculate relative path from TS file to JSON file
15
+ const jsonImportPath = getFileImportRelativePath(queueWorkersWiringMetaFile, queueWorkersWiringMetaJsonFile, packageMappings);
16
+ // Write TypeScript file that imports JSON
17
+ await writeFileInDir(logger, queueWorkersWiringMetaFile, serializeQueueMetaTS(jsonImportPath, schema?.supportsImportAttributes ?? false));
20
18
  await writeFileInDir(logger, queueWorkersWiringFile, serializeFileImports('addQueueWorkers', queueWorkersWiringFile, queueWorkers.files, packageMappings));
21
19
  return true;
22
20
  },
@@ -8,7 +8,7 @@ export const serializeQueueMap = (relativeToPath, packageMappings, typesMap, fun
8
8
  return `/**
9
9
  * This provides the structure needed for typescript to be aware of Queue workers and their input/output types
10
10
  */
11
-
11
+
12
12
  ${serializedImportMap}
13
13
  ${serializedCustomTypes}
14
14
 
@@ -57,8 +57,25 @@ function generateQueues(queueWorkersMeta, functionsMeta, typesMap, requiredTypes
57
57
  const input = functionMeta.inputs ? functionMeta.inputs[0] : undefined;
58
58
  const output = functionMeta.outputs ? functionMeta.outputs[0] : undefined;
59
59
  // Store the input and output types for QueueHandler
60
- const inputType = input ? typesMap.getTypeMeta(input).uniqueName : 'null';
61
- const outputType = output ? typesMap.getTypeMeta(output).uniqueName : 'null';
60
+ // For zod-derived schemas, the type might not be in typesMap, so use the schema name directly
61
+ let inputType = 'null';
62
+ if (input) {
63
+ try {
64
+ inputType = typesMap.getTypeMeta(input).uniqueName;
65
+ }
66
+ catch {
67
+ inputType = input;
68
+ }
69
+ }
70
+ let outputType = 'null';
71
+ if (output) {
72
+ try {
73
+ outputType = typesMap.getTypeMeta(output).uniqueName;
74
+ }
75
+ catch {
76
+ outputType = output;
77
+ }
78
+ }
62
79
  requiredTypes.add(inputType);
63
80
  requiredTypes.add(outputType);
64
81
  // Add Queue entry
@@ -1,2 +1,3 @@
1
1
  import { QueueWorkersMeta } from '@pikku/core/queue';
2
- export declare const serializeQueueMeta: (queueWorkersMeta: QueueWorkersMeta) => string;
2
+ export declare const serializeQueueMeta: (queueWorkersMeta: QueueWorkersMeta) => QueueWorkersMeta;
3
+ export declare const serializeQueueMetaTS: (jsonImportPath: string, supportsImportAttributes: boolean) => string;
@@ -1,6 +1,15 @@
1
1
  export const serializeQueueMeta = (queueWorkersMeta) => {
2
+ return queueWorkersMeta;
3
+ };
4
+ export const serializeQueueMetaTS = (jsonImportPath, supportsImportAttributes) => {
5
+ const importStatement = supportsImportAttributes
6
+ ? `import metaData from '${jsonImportPath}' with { type: 'json' }`
7
+ : `import metaData from '${jsonImportPath}'`;
2
8
  const serializedOutput = [];
3
9
  serializedOutput.push("import { pikkuState } from '@pikku/core'");
4
- serializedOutput.push(`pikkuState('queue', 'meta', ${JSON.stringify(queueWorkersMeta, null, 2)})`);
10
+ serializedOutput.push("import { QueueWorkersMeta } from '@pikku/core/queue'");
11
+ serializedOutput.push(importStatement);
12
+ serializedOutput.push('');
13
+ serializedOutput.push("pikkuState(null, 'queue', 'meta', metaData as QueueWorkersMeta)");
5
14
  return serializedOutput.join('\n');
6
15
  };
@@ -15,7 +15,7 @@ import type { PikkuFunctionConfig } from '${functionTypesImportPath}'
15
15
  * @template In - Input type for the queue job
16
16
  * @template Out - Output type for the queue job
17
17
  */
18
- type QueueWiring<In, Out> = CoreQueueWorker<PikkuFunctionConfig<In, Out>>
18
+ type QueueWiring<In, Out> = CoreQueueWorker<PikkuFunctionConfig<In, Out, 'session' | 'rpc'>>
19
19
 
20
20
  /**
21
21
  * Registers a queue worker with the Pikku framework.
@@ -5,8 +5,8 @@ import { serializeTypedRPCMap } from './serialize-typed-rpc-map.js';
5
5
  export const pikkuRPCInternalMap = pikkuSessionlessFunc({
6
6
  func: async ({ logger, config, getInspectorState }) => {
7
7
  const { functions, rpc } = await getInspectorState();
8
- const { rpcInternalMapDeclarationFile, packageMappings } = config;
9
- const content = serializeTypedRPCMap(rpcInternalMapDeclarationFile, packageMappings, functions.typesMap, functions.meta, rpc.internalMeta);
8
+ const { rpcInternalMapDeclarationFile, packageMappings, externalPackages } = config;
9
+ const content = serializeTypedRPCMap(rpcInternalMapDeclarationFile, packageMappings, functions.typesMap, functions.meta, rpc.internalMeta, externalPackages);
10
10
  await writeFileInDir(logger, rpcInternalMapDeclarationFile, content);
11
11
  },
12
12
  middleware: [
@@ -19,8 +19,8 @@ export const pikkuRPCInternalMap = pikkuSessionlessFunc({
19
19
  export const pikkuRPCExposedMap = pikkuSessionlessFunc({
20
20
  func: async ({ logger, config, getInspectorState }) => {
21
21
  const { functions, rpc } = await getInspectorState();
22
- const { rpcMapDeclarationFile, packageMappings } = config;
23
- const content = serializeTypedRPCMap(rpcMapDeclarationFile, packageMappings, functions.typesMap, functions.meta, rpc.exposedMeta);
22
+ const { rpcMapDeclarationFile, packageMappings, externalPackages } = config;
23
+ const content = serializeTypedRPCMap(rpcMapDeclarationFile, packageMappings, functions.typesMap, functions.meta, rpc.exposedMeta, externalPackages);
24
24
  await writeFileInDir(logger, rpcMapDeclarationFile, content);
25
25
  },
26
26
  middleware: [
@@ -1,12 +1,19 @@
1
1
  import { pikkuSessionlessFunc } from '../../../../.pikku/pikku-types.gen.js';
2
2
  import { writeFileInDir } from '../../../utils/file-writer.js';
3
3
  import { logCommandInfoAndTime } from '../../../middleware/log-command-info-and-time.js';
4
+ import { getFileImportRelativePath } from '../../../utils/file-import-path.js';
4
5
  export const pikkuRPC = pikkuSessionlessFunc({
5
6
  func: async ({ logger, config, getInspectorState }) => {
6
7
  const { rpc } = await getInspectorState();
7
- const { rpcInternalWiringMetaFile } = config;
8
+ const { rpcInternalWiringMetaFile, rpcInternalWiringMetaJsonFile, packageMappings, schema, } = config;
8
9
  if (rpc.internalFiles.size > 0) {
9
- await writeFileInDir(logger, rpcInternalWiringMetaFile, `import { pikkuState } from '@pikku/core'\npikkuState('rpc', 'meta', ${JSON.stringify(rpc.internalMeta, null, 2)})`);
10
+ await writeFileInDir(logger, rpcInternalWiringMetaJsonFile, JSON.stringify(rpc.internalMeta, null, 2));
11
+ const jsonImportPath = getFileImportRelativePath(rpcInternalWiringMetaFile, rpcInternalWiringMetaJsonFile, packageMappings);
12
+ const supportsImportAttributes = schema?.supportsImportAttributes ?? false;
13
+ const importStatement = supportsImportAttributes
14
+ ? `import metaData from '${jsonImportPath}' with { type: 'json' }`
15
+ : `import metaData from '${jsonImportPath}'`;
16
+ await writeFileInDir(logger, rpcInternalWiringMetaFile, `import { pikkuState } from '@pikku/core'\n${importStatement}\npikkuState(null, 'rpc', 'meta', metaData as Record<string, string>)`);
10
17
  return true;
11
18
  }
12
19
  return false;
@@ -13,16 +13,23 @@ import { pikkuSessionlessFunc, wireHTTP } from '${pathToPikkuTypes}'
13
13
  * This is used for public HTTP access to exposed server functions
14
14
  */
15
15
  export const rpcCaller = pikkuSessionlessFunc<
16
- { name: string, data?: any },
16
+ { rpcName: string, data?: any },
17
17
  any
18
18
  >({
19
- func: async ({ rpc }, { name, data }) => {
20
- return await (rpc.invokeExposed as any)(name, data)
19
+ func: async (services, { rpcName, data }, { rpc }) => {
20
+ return await (rpc.invokeExposed as any)(rpcName, data)
21
21
  },
22
22
  })
23
23
 
24
24
  wireHTTP({
25
- route: '/rpc',
25
+ route: "/rpc/:rpcName",
26
+ method: "options",
27
+ auth: false,
28
+ func: pikkuSessionlessFunc<{ rpcName: string }>(async () => void 0),
29
+ });
30
+
31
+ wireHTTP({
32
+ route: '/rpc/:rpcName',
26
33
  method: 'post',
27
34
  func: rpcCaller,
28
35
  })
@@ -11,12 +11,15 @@ import { pikkuSessionlessFunc, wireQueueWorker } from '${pathToPikkuTypes}'
11
11
  /**
12
12
  * Generic remote RPC worker that invokes any internal RPC by name
13
13
  * This is used for executing internal RPCs via a queue or HTTP (e.g., scheduled tasks, background jobs, internal services)
14
+ *
15
+ * TODO: Security risk - this allows any RPC to be invoked by name. Should validate
16
+ * that rpcName is in an allowlist of permitted internal RPCs to prevent unauthorized access.
14
17
  */
15
18
  export const pikkuRemoteInternalRPC = pikkuSessionlessFunc<
16
19
  { rpcName: string, data?: any },
17
20
  any
18
21
  >({
19
- func: async ({ rpc }, { rpcName, data }) => {
22
+ func: async (_services, { rpcName, data }, { rpc }) => {
20
23
  return await (rpc.invoke as any)(rpcName, data)
21
24
  },
22
25
  internal: true,
@@ -54,12 +54,12 @@ export class PikkuRPC {
54
54
  * This is a generic method that routes to the appropriate server function
55
55
  * based on the function name and passes the provided data.
56
56
  *
57
- * @param name - The name of the server function to invoke
57
+ * @param rpcName - The name of the server function to invoke
58
58
  * @param data - The data to pass to the server function
59
59
  * @returns A promise that resolves with the function's return value
60
60
  */
61
- invoke: RPCInvoke = async (name, data) => {
62
- return await this.pikkuFetch.post('/rpc' as any, { name, data }) as any
61
+ invoke: RPCInvoke = async (rpcName, data) => {
62
+ return await this.pikkuFetch.post(\`/rpc/\${rpcName}\` as any, { rpcName: String(rpcName), data }) as any
63
63
  }
64
64
  }
65
65
 
@@ -1,3 +1,3 @@
1
1
  import { TypesMap } from '@pikku/inspector';
2
2
  import { FunctionsMeta } from '@pikku/core';
3
- export declare const serializeTypedRPCMap: (relativeToPath: string, packageMappings: Record<string, string>, typesMap: TypesMap, functionsMeta: FunctionsMeta, rpcMeta: Record<string, string>) => string;
3
+ export declare const serializeTypedRPCMap: (relativeToPath: string, packageMappings: Record<string, string>, typesMap: TypesMap, functionsMeta: FunctionsMeta, rpcMeta: Record<string, string>, externalPackages?: Record<string, string>) => string;
@@ -1,14 +1,16 @@
1
1
  import { serializeImportMap } from '../../../utils/serialize-import-map.js';
2
2
  import { generateCustomTypes } from '../../../utils/custom-types-generator.js';
3
- export const serializeTypedRPCMap = (relativeToPath, packageMappings, typesMap, functionsMeta, rpcMeta) => {
3
+ export const serializeTypedRPCMap = (relativeToPath, packageMappings, typesMap, functionsMeta, rpcMeta, externalPackages) => {
4
4
  const requiredTypes = new Set();
5
5
  const serializedCustomTypes = generateCustomTypes(typesMap, requiredTypes);
6
6
  const serializedRPCs = generateRPCs(rpcMeta, functionsMeta, typesMap, requiredTypes);
7
7
  const serializedImportMap = serializeImportMap(relativeToPath, packageMappings, typesMap, requiredTypes);
8
+ const externalPackageImports = generateExternalPackageImports(externalPackages, relativeToPath);
9
+ const mergedRPCMap = generateMergedRPCMap(externalPackages);
8
10
  return `/**
9
11
  * This provides the structure needed for typescript to be aware of RPCs and their return types
10
12
  */
11
-
13
+
12
14
  ${serializedImportMap}
13
15
  ${serializedCustomTypes}
14
16
 
@@ -18,14 +20,16 @@ interface RPCHandler<I, O> {
18
20
  }
19
21
 
20
22
  ${serializedRPCs}
23
+ ${externalPackageImports}
24
+ ${mergedRPCMap}
21
25
 
22
- export type RPCInvoke = <Name extends keyof RPCMap>(
26
+ export type RPCInvoke = <Name extends keyof FlattenedRPCMap>(
23
27
  name: Name,
24
- data: RPCMap[Name]['input'],
28
+ data: FlattenedRPCMap[Name]['input'],
25
29
  options?: {
26
30
  location?: 'local' | 'remote' | 'auto'
27
31
  }
28
- ) => Promise<RPCMap[Name]['output']>
32
+ ) => Promise<FlattenedRPCMap[Name]['output']>
29
33
 
30
34
  // Import WorkflowMap for workflow typing
31
35
  import type { WorkflowMap } from '../workflow/pikku-workflow-map.gen.js'
@@ -42,6 +46,46 @@ export type TypedPikkuRPC = {
42
46
  }
43
47
  `;
44
48
  };
49
+ function generateExternalPackageImports(externalPackages, relativeToPath) {
50
+ if (!externalPackages || Object.keys(externalPackages).length === 0) {
51
+ return '';
52
+ }
53
+ let imports = '\n// External package RPC maps\n';
54
+ for (const [namespace, packageName] of Object.entries(externalPackages)) {
55
+ // Import the RPCMap from each external package's internal RPC map
56
+ // Use .js extension - package.json exports will resolve to .d.ts for types
57
+ imports += `import type { RPCMap as ${toPascalCase(namespace)}RPCMap } from '${packageName}/.pikku/rpc/pikku-rpc-wirings-map.internal.gen.js'\n`;
58
+ }
59
+ return imports;
60
+ }
61
+ function generateMergedRPCMap(externalPackages) {
62
+ if (!externalPackages || Object.keys(externalPackages).length === 0) {
63
+ return `
64
+ // No external packages, use RPCMap directly
65
+ export type FlattenedRPCMap = RPCMap
66
+ `;
67
+ }
68
+ // TypeScript utility to flatten namespaced RPC maps
69
+ const utilityTypes = `
70
+ // Utility type to prefix keys with namespace
71
+ type PrefixKeys<T, Prefix extends string> = {
72
+ [K in keyof T as \`\${Prefix}:\${string & K}\`]: T[K]
73
+ }
74
+
75
+ // Merge all RPC maps with namespace prefixes
76
+ export type FlattenedRPCMap =
77
+ RPCMap${Object.keys(externalPackages)
78
+ .map((namespace) => ` & PrefixKeys<${toPascalCase(namespace)}RPCMap, '${namespace}'>`)
79
+ .join('')}
80
+ `;
81
+ return utilityTypes;
82
+ }
83
+ function toPascalCase(str) {
84
+ return str
85
+ .split(/[-_]/)
86
+ .map((word) => word.charAt(0).toUpperCase() + word.slice(1).toLowerCase())
87
+ .join('');
88
+ }
45
89
  function generateRPCs(rpcMeta, functionsMeta, typesMap, requiredTypes) {
46
90
  // Initialize an object to collect RPCs
47
91
  const rpcsObj = {};
@@ -54,14 +98,15 @@ function generateRPCs(rpcMeta, functionsMeta, typesMap, requiredTypes) {
54
98
  const input = functionMeta.inputs ? functionMeta.inputs[0] : undefined;
55
99
  const output = functionMeta.outputs ? functionMeta.outputs[0] : undefined;
56
100
  // Store the input and output types for RPCHandler
57
- // Use 'any' for types not in typesMap (e.g., inline types in generated workflow workers)
101
+ // For zod-derived schemas, the type might not be in typesMap, so use the schema name directly
58
102
  let inputType = 'null';
59
103
  if (input) {
60
104
  try {
61
105
  inputType = typesMap.getTypeMeta(input).uniqueName;
62
106
  }
63
107
  catch {
64
- inputType = 'any';
108
+ // Type not in typesMap - use the name directly (e.g., zod-derived types)
109
+ inputType = input;
65
110
  }
66
111
  }
67
112
  let outputType = 'null';
@@ -70,7 +115,8 @@ function generateRPCs(rpcMeta, functionsMeta, typesMap, requiredTypes) {
70
115
  outputType = typesMap.getTypeMeta(output).uniqueName;
71
116
  }
72
117
  catch {
73
- outputType = 'any';
118
+ // Type not in typesMap - use the name directly (e.g., zod-derived types)
119
+ outputType = output;
74
120
  }
75
121
  }
76
122
  requiredTypes.add(inputType);
@@ -2,13 +2,25 @@ import { pikkuSessionlessFunc } from '../../../../.pikku/pikku-types.gen.js';
2
2
  import { serializeFileImports } from '../../../utils/file-imports-serializer.js';
3
3
  import { writeFileInDir } from '../../../utils/file-writer.js';
4
4
  import { logCommandInfoAndTime } from '../../../middleware/log-command-info-and-time.js';
5
- import { serializeSchedulerMeta } from './serialize-scheduler-meta.js';
5
+ import { serializeSchedulerMeta, serializeSchedulerMetaTS, } from './serialize-scheduler-meta.js';
6
+ import { getFileImportRelativePath } from '../../../utils/file-import-path.js';
7
+ import { stripVerboseFields, hasVerboseFields, } from '../../../utils/strip-verbose-meta.js';
6
8
  export const pikkuScheduler = pikkuSessionlessFunc({
7
9
  func: async ({ logger, config, getInspectorState }) => {
8
10
  const visitState = await getInspectorState();
9
- const { schedulersWiringFile, schedulersWiringMetaFile, packageMappings } = config;
11
+ const { schedulersWiringFile, schedulersWiringMetaFile, schedulersWiringMetaJsonFile, packageMappings, schema, } = config;
10
12
  const { scheduledTasks } = visitState;
11
- await writeFileInDir(logger, schedulersWiringMetaFile, serializeSchedulerMeta(scheduledTasks.meta));
13
+ const fullMeta = serializeSchedulerMeta(scheduledTasks.meta);
14
+ // Write minimal JSON (runtime-only fields)
15
+ const minimalMeta = stripVerboseFields(fullMeta);
16
+ await writeFileInDir(logger, schedulersWiringMetaJsonFile, JSON.stringify(minimalMeta, null, 2));
17
+ // Write verbose JSON only if it has additional fields
18
+ if (hasVerboseFields(fullMeta)) {
19
+ const verbosePath = schedulersWiringMetaJsonFile.replace(/\.gen\.json$/, '-verbose.gen.json');
20
+ await writeFileInDir(logger, verbosePath, JSON.stringify(fullMeta, null, 2));
21
+ }
22
+ const jsonImportPath = getFileImportRelativePath(schedulersWiringMetaFile, schedulersWiringMetaJsonFile, packageMappings);
23
+ await writeFileInDir(logger, schedulersWiringMetaFile, serializeSchedulerMetaTS(scheduledTasks.meta, jsonImportPath, schema?.supportsImportAttributes ?? false));
12
24
  await writeFileInDir(logger, schedulersWiringFile, serializeFileImports('addScheduledTasks', schedulersWiringFile, scheduledTasks.files, packageMappings));
13
25
  return true;
14
26
  },
@@ -1,2 +1,3 @@
1
1
  import { ScheduledTasksMeta } from '@pikku/core/scheduler';
2
- export declare const serializeSchedulerMeta: (scheduledTasksMeta: ScheduledTasksMeta) => string;
2
+ export declare const serializeSchedulerMeta: (scheduledTasksMeta: ScheduledTasksMeta) => ScheduledTasksMeta;
3
+ export declare const serializeSchedulerMetaTS: (scheduledTasksMeta: ScheduledTasksMeta, jsonImportPath: string, supportsImportAttributes: any) => string;
@@ -1,7 +1,17 @@
1
1
  export const serializeSchedulerMeta = (scheduledTasksMeta) => {
2
+ return scheduledTasksMeta;
3
+ };
4
+ export const serializeSchedulerMetaTS = (scheduledTasksMeta, jsonImportPath, supportsImportAttributes) => {
5
+ const importStatement = supportsImportAttributes
6
+ ? `import metaData from '${jsonImportPath}' with { type: 'json' }`
7
+ : `import metaData from '${jsonImportPath}'`;
2
8
  const serializedOutput = [];
3
9
  serializedOutput.push("import { pikkuState } from '@pikku/core'");
4
- serializedOutput.push(`pikkuState('scheduler', 'meta', ${JSON.stringify(scheduledTasksMeta, null, 2)})`);
10
+ serializedOutput.push("import { ScheduledTasksMeta } from '@pikku/core/scheduler'");
11
+ serializedOutput.push(importStatement);
12
+ serializedOutput.push('');
13
+ serializedOutput.push("pikkuState(null, 'scheduler', 'meta', metaData as ScheduledTasksMeta)");
14
+ serializedOutput.push('');
5
15
  const scheduledTasksMetaValues = Object.values(scheduledTasksMeta);
6
16
  if (scheduledTasksMetaValues.length > 0) {
7
17
  serializedOutput.push(`export type ScheduledTaskNames = '${scheduledTasksMetaValues.map((s) => s.name).join("' | '")}'`);
@@ -13,7 +13,7 @@ import type { PikkuFunctionConfig, PikkuMiddleware } from '${functionTypesImport
13
13
  * Type definition for scheduled tasks that run at specified intervals.
14
14
  * These are sessionless functions that execute based on cron expressions.
15
15
  */
16
- type SchedulerWiring = CoreScheduledTask<PikkuFunctionConfig<void, void>, PikkuMiddleware>
16
+ type SchedulerWiring = CoreScheduledTask<PikkuFunctionConfig<void, void, 'session' | 'rpc'>, PikkuMiddleware>
17
17
 
18
18
  /**
19
19
  * Registers a scheduled task with the Pikku framework.
@@ -0,0 +1 @@
1
+ export declare const pikkuServiceMetadata: any;
@@ -0,0 +1,22 @@
1
+ import { pikkuSessionlessFunc } from '../../../../.pikku/pikku-types.gen.js';
2
+ import { logCommandInfoAndTime } from '../../../middleware/log-command-info-and-time.js';
3
+ import { writeAllServiceMetadata } from '@pikku/inspector';
4
+ export const pikkuServiceMetadata = pikkuSessionlessFunc({
5
+ func: async ({ logger, config, getInspectorState }) => {
6
+ const state = await getInspectorState();
7
+ // Only write service metadata if there are services to document
8
+ if (state.serviceMetadata && state.serviceMetadata.length > 0) {
9
+ writeAllServiceMetadata(state.serviceMetadata, config.outDir);
10
+ logger.debug(`• Wrote ${state.serviceMetadata.length} service metadata files`);
11
+ }
12
+ else {
13
+ logger.debug('• No service metadata to write');
14
+ }
15
+ },
16
+ middleware: [
17
+ logCommandInfoAndTime({
18
+ commandStart: 'Generating service metadata',
19
+ commandEnd: 'Generated service metadata',
20
+ }),
21
+ ],
22
+ });
@@ -1,22 +1,29 @@
1
1
  import { pikkuSessionlessFunc } from '../../../../.pikku/pikku-types.gen.js';
2
- import { ErrorCode } from '@pikku/inspector';
3
- import { serializeFileImports } from '../../../utils/file-imports-serializer.js';
2
+ import { convertDslToGraph, ErrorCode } from '@pikku/inspector';
4
3
  import { writeFileInDir } from '../../../utils/file-writer.js';
5
4
  import { logCommandInfoAndTime } from '../../../middleware/log-command-info-and-time.js';
6
- import { serializeWorkflowMeta } from './serialize-workflow-meta.js';
7
5
  import { serializeWorkflowTypes } from './serialize-workflow-types.js';
6
+ import { serializeWorkflowRegistration } from './serialize-workflow-registration.js';
8
7
  import { serializeWorkflowMap } from './serialize-workflow-map.js';
8
+ import { serializeWorkflowMeta } from './serialize-workflow-meta.js';
9
9
  import { serializeWorkflowWorkers } from './serialize-workflow-workers.js';
10
10
  import { getFileImportRelativePath } from '../../../utils/file-import-path.js';
11
+ import { stripVerboseFields, hasVerboseFields, } from '../../../utils/strip-verbose-meta.js';
11
12
  import { join } from 'path';
12
13
  export const pikkuWorkflow = pikkuSessionlessFunc({
13
14
  func: async ({ logger, config, getInspectorState }) => {
14
15
  const visitState = await getInspectorState();
15
- const { workflowsWiringFile, workflowsWiringMetaFile, workflowMapDeclarationFile, workflowTypesFile, functionTypesFile, typesDeclarationFile, packageMappings, } = config;
16
+ const { workflowsWiringFile, workflowsWiringMetaFile, workflowMetaDir, workflowMapDeclarationFile, workflowTypesFile, functionTypesFile, typesDeclarationFile, packageMappings, schema, } = config;
16
17
  const { workflows, functions: functionState } = visitState;
17
18
  const { typesMap } = functionState;
18
- // Validate that workflowService service is configured if workflows are defined
19
- const hasWorkflows = Object.keys(workflows.meta).length > 0;
19
+ // Get all workflow names (both DSL and graph-based)
20
+ const dslWorkflowNames = Object.keys(workflows.meta);
21
+ const graphWorkflowNames = Object.keys(workflows.graphMeta);
22
+ const allWorkflowNames = [
23
+ ...new Set([...dslWorkflowNames, ...graphWorkflowNames]),
24
+ ];
25
+ const hasWorkflows = allWorkflowNames.length > 0;
26
+ // Validate that workflowService is configured if workflows are defined
20
27
  if (hasWorkflows) {
21
28
  const hasWorkflowState = visitState.serviceAggregation.allSingletonServices.includes('workflowService');
22
29
  if (!hasWorkflowState) {
@@ -24,15 +31,50 @@ export const pikkuWorkflow = pikkuSessionlessFunc({
24
31
  throw new Error('WorkflowState service not configured but workflows are defined');
25
32
  }
26
33
  }
27
- // Write workflow metadata
28
- await writeFileInDir(logger, workflowsWiringMetaFile, serializeWorkflowMeta(workflows.meta));
29
- // Write workflow wirings (imports)
30
- await writeFileInDir(logger, workflowsWiringFile, serializeFileImports('wireWorkflow', workflowsWiringFile, workflows.files, packageMappings));
31
- // Write workflow types
34
+ // Generate individual JSON files for each workflow (convert DSL to graph format)
35
+ if (hasWorkflows && workflowMetaDir) {
36
+ // Write individual JSON files for DSL workflows
37
+ const dslMeta = workflows.meta;
38
+ for (const [name, meta] of Object.entries(dslMeta)) {
39
+ const graphMeta = convertDslToGraph(name, meta);
40
+ // Write minimal version (runtime-only fields)
41
+ const minimalMeta = stripVerboseFields(graphMeta);
42
+ const minimalPath = join(workflowMetaDir, `${name}.gen.json`);
43
+ await writeFileInDir(logger, minimalPath, JSON.stringify(minimalMeta, null, 2), { ignoreModifyComment: true });
44
+ // Write verbose version only if it has additional fields
45
+ if (hasVerboseFields(graphMeta)) {
46
+ const verbosePath = join(workflowMetaDir, `${name}-verbose.gen.json`);
47
+ await writeFileInDir(logger, verbosePath, JSON.stringify(graphMeta, null, 2), { ignoreModifyComment: true });
48
+ }
49
+ }
50
+ // Write individual JSON files for graph workflows
51
+ for (const [name, graphMeta] of Object.entries(workflows.graphMeta)) {
52
+ // Write minimal version (runtime-only fields)
53
+ const minimalMeta = stripVerboseFields(graphMeta);
54
+ const minimalPath = join(workflowMetaDir, `${name}.gen.json`);
55
+ await writeFileInDir(logger, minimalPath, JSON.stringify(minimalMeta, null, 2), { ignoreModifyComment: true });
56
+ // Write verbose version only if it has additional fields
57
+ if (hasVerboseFields(graphMeta)) {
58
+ const verbosePath = join(workflowMetaDir, `${name}-verbose.gen.json`);
59
+ await writeFileInDir(logger, verbosePath, JSON.stringify(graphMeta, null, 2), { ignoreModifyComment: true });
60
+ }
61
+ }
62
+ }
63
+ // Generate workflow meta aggregation file
64
+ if (workflowsWiringMetaFile && workflowMetaDir) {
65
+ await writeFileInDir(logger, workflowsWiringMetaFile, serializeWorkflowMeta(workflowsWiringMetaFile, workflowMetaDir, allWorkflowNames, packageMappings, schema?.supportsImportAttributes ?? false, config.externalPackageName));
66
+ }
67
+ // Generate workflow registration (meta + DSL workflow registrations)
68
+ const metaImportPath = getFileImportRelativePath(workflowsWiringFile, workflowsWiringMetaFile, packageMappings);
69
+ await writeFileInDir(logger, workflowsWiringFile, serializeWorkflowRegistration(workflowsWiringFile, metaImportPath, allWorkflowNames, workflows.files, workflows.graphFiles, packageMappings, config.externalPackageName));
70
+ // Generate workflow types (DSL + graph helpers in one file)
32
71
  const functionTypesImportPath = getFileImportRelativePath(workflowTypesFile, functionTypesFile, packageMappings);
33
- await writeFileInDir(logger, workflowTypesFile, serializeWorkflowTypes(functionTypesImportPath));
34
- // Write workflow map (type-safe client API)
72
+ const rpcMapImportPath = getFileImportRelativePath(workflowTypesFile, config.rpcInternalMapDeclarationFile, packageMappings);
73
+ await writeFileInDir(logger, workflowTypesFile, serializeWorkflowTypes(functionTypesImportPath, rpcMapImportPath));
74
+ // Generate workflow map (I/O types for type-safe client)
75
+ // Always generate even if empty - RPC map imports WorkflowMap
35
76
  await writeFileInDir(logger, workflowMapDeclarationFile, serializeWorkflowMap(workflowMapDeclarationFile, packageMappings, typesMap, functionState.meta, workflows.meta));
77
+ // Generate workflow workers if configured
36
78
  if (config.workflows) {
37
79
  if (config.workflows.singleQueue) {
38
80
  const workflowPath = join(config.rootDir, config.workflows.path);
@@ -44,12 +86,12 @@ export const pikkuWorkflow = pikkuSessionlessFunc({
44
86
  return false;
45
87
  }
46
88
  }
47
- return true;
89
+ return hasWorkflows;
48
90
  },
49
91
  middleware: [
50
92
  logCommandInfoAndTime({
51
- commandStart: 'Finding Workflows',
52
- commandEnd: 'Found Workflows',
93
+ commandStart: 'Generating Workflows',
94
+ commandEnd: 'Generated Workflows',
53
95
  }),
54
96
  ],
55
97
  });
@@ -1,3 +1,6 @@
1
+ /**
2
+ * Generate workflow map type definitions for type-safe client API
3
+ */
1
4
  import type { WorkflowsMeta } from '@pikku/core/workflow';
2
5
  import { TypesMap } from '@pikku/inspector';
3
6
  import { FunctionsMeta } from '@pikku/core';