@pikku/cli 0.11.2 → 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 (301) hide show
  1. package/.pikku/channel/pikku-channel-types.gen.ts +63 -6
  2. package/.pikku/channel/pikku-channels-map.gen.d.ts +4 -4
  3. package/.pikku/channel/pikku-channels-meta.gen.ts +4 -2
  4. package/.pikku/channel/pikku-channels.gen.ts +1 -1
  5. package/.pikku/cli/pikku-cli-channel.ts +1 -1
  6. package/.pikku/cli/pikku-cli-client.gen.ts +1 -1
  7. package/.pikku/cli/pikku-cli-types.gen.ts +1 -1
  8. package/.pikku/cli/pikku-cli-wirings-meta.gen.json +2 -1
  9. package/.pikku/cli/pikku-cli-wirings-meta.gen.ts +2 -2
  10. package/.pikku/cli/pikku-cli-wirings.gen.ts +1 -1
  11. package/.pikku/cli/pikku-cli.gen.ts +1 -1
  12. package/.pikku/forge/pikku-forge-types.gen.ts +83 -0
  13. package/.pikku/function/pikku-function-types.gen.ts +181 -35
  14. package/.pikku/function/pikku-functions-meta-verbose.gen.json +1030 -0
  15. package/.pikku/function/pikku-functions-meta.gen.json +88 -420
  16. package/.pikku/function/pikku-functions-meta.gen.ts +2 -2
  17. package/.pikku/http/pikku-http-types.gen.ts +19 -3
  18. package/.pikku/http/pikku-http-wirings-map.gen.d.ts +4 -4
  19. package/.pikku/http/pikku-http-wirings-meta.gen.json +9 -0
  20. package/.pikku/http/pikku-http-wirings-meta.gen.ts +4 -10
  21. package/.pikku/http/pikku-http-wirings.gen.ts +1 -1
  22. package/.pikku/mcp/pikku-mcp-types.gen.ts +69 -17
  23. package/.pikku/mcp/pikku-mcp-wirings-meta.gen.ts +4 -4
  24. package/.pikku/mcp/pikku-mcp-wirings.gen.ts +1 -1
  25. package/.pikku/pikku-bootstrap.gen.ts +7 -9
  26. package/.pikku/pikku-services.gen.ts +3 -2
  27. package/.pikku/pikku-types.gen.ts +4 -1
  28. package/.pikku/pikku-websocket.gen.ts +1 -1
  29. package/.pikku/queue/pikku-queue-types.gen.ts +1 -1
  30. package/.pikku/queue/pikku-queue-workers-wirings-map.gen.d.ts +4 -4
  31. package/.pikku/queue/pikku-queue-workers-wirings-meta.gen.ts +2 -2
  32. package/.pikku/queue/pikku-queue-workers-wirings.gen.ts +1 -1
  33. package/.pikku/rpc/pikku-remote-rpc-workers.gen.ts +4 -1
  34. package/.pikku/rpc/pikku-rpc-wirings-map.gen.d.ts +12 -7
  35. package/.pikku/rpc/pikku-rpc-wirings-map.internal.gen.d.ts +15 -9
  36. package/.pikku/scheduler/pikku-scheduler-types.gen.ts +1 -1
  37. package/.pikku/scheduler/pikku-schedulers-wirings-meta.gen.ts +2 -2
  38. package/.pikku/scheduler/pikku-schedulers-wirings.gen.ts +1 -1
  39. package/.pikku/schemas/register.gen.ts +9 -1
  40. package/.pikku/schemas/schemas/PikkuCLIConfig.schema.json +1 -1
  41. package/.pikku/schemas/schemas/PikkuCLIOutput.schema.json +1 -1
  42. package/.pikku/schemas/schemas/PikkuChannelsOutput.schema.json +1 -1
  43. package/.pikku/schemas/schemas/PikkuForgeNodesOutput.schema.json +1 -0
  44. package/.pikku/schemas/schemas/PikkuFunctionsOutput.schema.json +1 -1
  45. package/.pikku/schemas/schemas/PikkuHTTPOutput.schema.json +1 -1
  46. package/.pikku/schemas/schemas/PikkuMCPOutput.schema.json +1 -1
  47. package/.pikku/schemas/schemas/PikkuMiddlewareOutput.schema.json +1 -1
  48. package/.pikku/schemas/schemas/PikkuPackageOutput.schema.json +1 -0
  49. package/.pikku/schemas/schemas/PikkuPermissionsOutput.schema.json +1 -1
  50. package/.pikku/schemas/schemas/PikkuPublicRPCOutput.schema.json +1 -1
  51. package/.pikku/schemas/schemas/PikkuQueueOutput.schema.json +1 -1
  52. package/.pikku/schemas/schemas/PikkuRPCOutput.schema.json +1 -1
  53. package/.pikku/schemas/schemas/PikkuRemoteRPCOutput.schema.json +1 -1
  54. package/.pikku/schemas/schemas/PikkuSchedulerOutput.schema.json +1 -1
  55. package/.pikku/schemas/schemas/PikkuSchemasOutput.schema.json +1 -1
  56. package/.pikku/schemas/schemas/PikkuWorkflowOutput.schema.json +1 -1
  57. package/.pikku/services/config.gen.json +11 -6
  58. package/.pikku/services/getInspectorState.gen.json +2 -2
  59. package/.pikku/services/jwt.gen.json +2 -2
  60. package/.pikku/services/logger.gen.json +2 -2
  61. package/.pikku/services/queueService.gen.json +2 -2
  62. package/.pikku/services/schedulerService.gen.json +2 -2
  63. package/.pikku/services/schema.gen.json +2 -2
  64. package/.pikku/services/secrets.gen.json +13 -0
  65. package/.pikku/services/variables.gen.json +2 -2
  66. package/.pikku/services/workflowService.gen.json +6 -6
  67. package/.pikku/workflow/pikku-workflow-map.gen.d.ts +2 -36
  68. package/.pikku/workflow/pikku-workflow-types.gen.ts +297 -45
  69. package/.pikku/workflow/pikku-workflow-wirings-meta.gen.ts +5 -4
  70. package/.pikku/workflow/pikku-workflow-wirings.gen.ts +1 -6
  71. package/CHANGELOG.md +23 -1
  72. package/cli.schema.json +1 -1
  73. package/dist/.pikku/channel/pikku-channel-types.gen.d.ts +47 -5
  74. package/dist/.pikku/channel/pikku-channel-types.gen.js +3 -13
  75. package/dist/.pikku/channel/pikku-channels-meta.gen.js +3 -2
  76. package/dist/.pikku/channel/pikku-channels.gen.d.ts +1 -1
  77. package/dist/.pikku/channel/pikku-channels.gen.js +1 -1
  78. package/dist/.pikku/cli/pikku-cli-channel.js +1 -1
  79. package/dist/.pikku/cli/pikku-cli-client.gen.d.ts +1 -1
  80. package/dist/.pikku/cli/pikku-cli-client.gen.js +1 -1
  81. package/dist/.pikku/cli/pikku-cli-types.gen.d.ts +1 -1
  82. package/dist/.pikku/cli/pikku-cli-types.gen.js +1 -1
  83. package/dist/.pikku/cli/pikku-cli-wirings-meta.gen.js +2 -2
  84. package/dist/.pikku/cli/pikku-cli-wirings-meta.gen.json +2 -1
  85. package/dist/.pikku/cli/pikku-cli-wirings.gen.d.ts +1 -1
  86. package/dist/.pikku/cli/pikku-cli-wirings.gen.js +1 -1
  87. package/dist/.pikku/cli/pikku-cli.gen.d.ts +1 -1
  88. package/dist/.pikku/cli/pikku-cli.gen.js +1 -1
  89. package/dist/.pikku/forge/pikku-forge-types.gen.d.ts +72 -0
  90. package/dist/.pikku/forge/pikku-forge-types.gen.js +55 -0
  91. package/dist/.pikku/function/pikku-function-types.gen.d.ts +123 -31
  92. package/dist/.pikku/function/pikku-function-types.gen.js +37 -51
  93. package/dist/.pikku/function/pikku-functions-meta.gen.js +2 -2
  94. package/dist/.pikku/function/pikku-functions-meta.gen.json +88 -420
  95. package/dist/.pikku/http/pikku-http-types.gen.d.ts +18 -3
  96. package/dist/.pikku/http/pikku-http-types.gen.js +1 -1
  97. package/dist/.pikku/http/pikku-http-wirings-meta.gen.js +3 -10
  98. package/dist/.pikku/http/pikku-http-wirings-meta.gen.json +9 -0
  99. package/dist/.pikku/http/pikku-http-wirings.gen.d.ts +1 -1
  100. package/dist/.pikku/http/pikku-http-wirings.gen.js +1 -1
  101. package/dist/.pikku/mcp/pikku-mcp-types.gen.d.ts +54 -14
  102. package/dist/.pikku/mcp/pikku-mcp-types.gen.js +7 -31
  103. package/dist/.pikku/mcp/pikku-mcp-wirings-meta.gen.js +4 -4
  104. package/dist/.pikku/mcp/pikku-mcp-wirings.gen.d.ts +1 -1
  105. package/dist/.pikku/mcp/pikku-mcp-wirings.gen.js +1 -1
  106. package/dist/.pikku/pikku-bootstrap.gen.d.ts +7 -9
  107. package/dist/.pikku/pikku-bootstrap.gen.js +7 -9
  108. package/dist/.pikku/pikku-services.gen.d.ts +3 -2
  109. package/dist/.pikku/pikku-services.gen.js +1 -0
  110. package/dist/.pikku/pikku-types.gen.d.ts +2 -1
  111. package/dist/.pikku/pikku-types.gen.js +3 -1
  112. package/dist/.pikku/pikku-websocket.gen.d.ts +1 -1
  113. package/dist/.pikku/pikku-websocket.gen.js +1 -1
  114. package/dist/.pikku/queue/pikku-queue-types.gen.d.ts +1 -1
  115. package/dist/.pikku/queue/pikku-queue-types.gen.js +1 -1
  116. package/dist/.pikku/queue/pikku-queue-workers-wirings-meta.gen.js +2 -2
  117. package/dist/.pikku/queue/pikku-queue-workers-wirings.gen.d.ts +1 -1
  118. package/dist/.pikku/queue/pikku-queue-workers-wirings.gen.js +1 -1
  119. package/dist/.pikku/rpc/pikku-remote-rpc-workers.gen.d.ts +4 -1
  120. package/dist/.pikku/rpc/pikku-remote-rpc-workers.gen.js +4 -1
  121. package/dist/.pikku/scheduler/pikku-scheduler-types.gen.d.ts +1 -1
  122. package/dist/.pikku/scheduler/pikku-scheduler-types.gen.js +1 -1
  123. package/dist/.pikku/scheduler/pikku-schedulers-wirings-meta.gen.js +2 -2
  124. package/dist/.pikku/scheduler/pikku-schedulers-wirings.gen.d.ts +1 -1
  125. package/dist/.pikku/scheduler/pikku-schedulers-wirings.gen.js +1 -1
  126. package/dist/.pikku/schemas/register.gen.js +5 -1
  127. package/dist/.pikku/schemas/schemas/PikkuCLIConfig.schema.json +1 -1
  128. package/dist/.pikku/schemas/schemas/PikkuCLIOutput.schema.json +1 -1
  129. package/dist/.pikku/schemas/schemas/PikkuChannelsOutput.schema.json +1 -1
  130. package/dist/.pikku/schemas/schemas/PikkuForgeNodesOutput.schema.json +1 -0
  131. package/dist/.pikku/schemas/schemas/PikkuFunctionsOutput.schema.json +1 -1
  132. package/dist/.pikku/schemas/schemas/PikkuHTTPOutput.schema.json +1 -1
  133. package/dist/.pikku/schemas/schemas/PikkuMCPOutput.schema.json +1 -1
  134. package/dist/.pikku/schemas/schemas/PikkuMiddlewareOutput.schema.json +1 -1
  135. package/dist/.pikku/schemas/schemas/PikkuPackageOutput.schema.json +1 -0
  136. package/dist/.pikku/schemas/schemas/PikkuPermissionsOutput.schema.json +1 -1
  137. package/dist/.pikku/schemas/schemas/PikkuPublicRPCOutput.schema.json +1 -1
  138. package/dist/.pikku/schemas/schemas/PikkuQueueOutput.schema.json +1 -1
  139. package/dist/.pikku/schemas/schemas/PikkuRPCOutput.schema.json +1 -1
  140. package/dist/.pikku/schemas/schemas/PikkuRemoteRPCOutput.schema.json +1 -1
  141. package/dist/.pikku/schemas/schemas/PikkuSchedulerOutput.schema.json +1 -1
  142. package/dist/.pikku/schemas/schemas/PikkuSchemasOutput.schema.json +1 -1
  143. package/dist/.pikku/schemas/schemas/PikkuWorkflowOutput.schema.json +1 -1
  144. package/dist/.pikku/workflow/pikku-workflow-types.gen.d.ts +207 -37
  145. package/dist/.pikku/workflow/pikku-workflow-types.gen.js +104 -28
  146. package/dist/.pikku/workflow/pikku-workflow-wirings-meta.gen.js +3 -3
  147. package/dist/.pikku/workflow/pikku-workflow-wirings.gen.d.ts +2 -6
  148. package/dist/.pikku/workflow/pikku-workflow-wirings.gen.js +2 -6
  149. package/dist/src/functions/commands/all.js +117 -79
  150. package/dist/src/functions/commands/bootstrap.js +2 -9
  151. package/dist/src/functions/runtimes/nextjs/pikku-command-nextjs.js +0 -1
  152. package/dist/src/functions/runtimes/nextjs/serialize-nextjs-backend-wrapper.js +49 -35
  153. package/dist/src/functions/runtimes/nextjs/serialize-nextjs-http-wrapper.js +49 -35
  154. package/dist/src/functions/wirings/channels/pikku-channels.js +1 -1
  155. package/dist/src/functions/wirings/channels/pikku-command-channels.js +18 -2
  156. package/dist/src/functions/wirings/channels/serialize-channel-types.js +62 -5
  157. package/dist/src/functions/wirings/channels/serialize-typed-channel-map.js +1 -2
  158. package/dist/src/functions/wirings/cli/pikku-command-cli.js +10 -2
  159. package/dist/src/functions/wirings/forge/pikku-command-forge-nodes.d.ts +1 -0
  160. package/dist/src/functions/wirings/forge/pikku-command-forge-nodes.js +90 -0
  161. package/dist/src/functions/wirings/forge/pikku-command-forge-types.d.ts +1 -0
  162. package/dist/src/functions/wirings/forge/pikku-command-forge-types.js +26 -0
  163. package/dist/src/functions/wirings/forge/serialize-forge-types.d.ts +4 -0
  164. package/dist/src/functions/wirings/forge/serialize-forge-types.js +90 -0
  165. package/dist/src/functions/wirings/functions/pikku-command-function-types-split.js +1 -1
  166. package/dist/src/functions/wirings/functions/pikku-command-function-types.js +7 -2
  167. package/dist/src/functions/wirings/functions/pikku-command-functions.js +33 -18
  168. package/dist/src/functions/wirings/functions/pikku-command-services.js +1 -1
  169. package/dist/src/functions/wirings/functions/pikku-function-types.js +2 -2
  170. package/dist/src/functions/wirings/functions/schemas.d.ts +1 -1
  171. package/dist/src/functions/wirings/functions/schemas.js +5 -4
  172. package/dist/src/functions/wirings/functions/serialize-function-imports.d.ts +3 -1
  173. package/dist/src/functions/wirings/functions/serialize-function-imports.js +7 -3
  174. package/dist/src/functions/wirings/functions/serialize-function-types.d.ts +1 -1
  175. package/dist/src/functions/wirings/functions/serialize-function-types.js +181 -34
  176. package/dist/src/functions/wirings/functions/serialize-pikku-types-hub.d.ts +1 -1
  177. package/dist/src/functions/wirings/functions/serialize-pikku-types-hub.js +19 -21
  178. package/dist/src/functions/wirings/http/openapi-spec-generator.js +1 -1
  179. package/dist/src/functions/wirings/http/pikku-command-http-routes.js +18 -2
  180. package/dist/src/functions/wirings/http/pikku-command-openapi.js +2 -2
  181. package/dist/src/functions/wirings/http/pikku-http-routes.js +1 -1
  182. package/dist/src/functions/wirings/http/serialize-http-types.js +18 -2
  183. package/dist/src/functions/wirings/http/serialize-typed-http-map.js +33 -8
  184. package/dist/src/functions/wirings/mcp/pikku-command-mcp.js +15 -6
  185. package/dist/src/functions/wirings/mcp/serialize-mcp-json.js +3 -2
  186. package/dist/src/functions/wirings/mcp/serialize-mcp-types.js +68 -16
  187. package/dist/src/functions/wirings/middleware/pikku-command-middleware.js +5 -2
  188. package/dist/src/functions/wirings/package/pikku-command-package.d.ts +1 -0
  189. package/dist/src/functions/wirings/package/pikku-command-package.js +58 -0
  190. package/dist/src/functions/wirings/package/serialize-package.d.ts +5 -0
  191. package/dist/src/functions/wirings/package/serialize-package.js +32 -0
  192. package/dist/src/functions/wirings/queue/pikku-command-queue.js +10 -2
  193. package/dist/src/functions/wirings/queue/pikku-queue.js +1 -9
  194. package/dist/src/functions/wirings/queue/serialize-queue-map.js +20 -3
  195. package/dist/src/functions/wirings/queue/serialize-queue-meta.js +1 -1
  196. package/dist/src/functions/wirings/rpc/pikku-command-rpc-map.js +4 -4
  197. package/dist/src/functions/wirings/rpc/pikku-command-rpc.js +1 -1
  198. package/dist/src/functions/wirings/rpc/serialize-remote-rpc.js +3 -0
  199. package/dist/src/functions/wirings/rpc/serialize-rpc-wrapper.js +1 -1
  200. package/dist/src/functions/wirings/rpc/serialize-typed-rpc-map.d.ts +1 -1
  201. package/dist/src/functions/wirings/rpc/serialize-typed-rpc-map.js +54 -8
  202. package/dist/src/functions/wirings/scheduler/pikku-command-scheduler.js +10 -1
  203. package/dist/src/functions/wirings/scheduler/serialize-scheduler-meta.js +1 -1
  204. package/dist/src/functions/wirings/workflow/pikku-command-workflow.js +56 -18
  205. package/dist/src/functions/wirings/workflow/serialize-workflow-map.d.ts +3 -0
  206. package/dist/src/functions/wirings/workflow/serialize-workflow-map.js +30 -32
  207. package/dist/src/functions/wirings/workflow/serialize-workflow-meta.d.ts +1 -3
  208. package/dist/src/functions/wirings/workflow/serialize-workflow-meta.js +43 -18
  209. package/dist/src/functions/wirings/workflow/serialize-workflow-registration.d.ts +7 -0
  210. package/dist/src/functions/wirings/workflow/serialize-workflow-registration.js +53 -0
  211. package/dist/src/functions/wirings/workflow/serialize-workflow-types.d.ts +3 -1
  212. package/dist/src/functions/wirings/workflow/serialize-workflow-types.js +299 -45
  213. package/dist/src/functions/wirings/workflow/serialize-workflow-workers.d.ts +1 -1
  214. package/dist/src/functions/wirings/workflow/serialize-workflow-workers.js +14 -27
  215. package/dist/src/services.js +4 -1
  216. package/dist/src/utils/command-summary.d.ts +2 -0
  217. package/dist/src/utils/command-summary.js +2 -0
  218. package/dist/src/utils/custom-types-generator.js +13 -15
  219. package/dist/src/utils/generate-bootstrap-file.js +1 -1
  220. package/dist/src/utils/pikku-cli-config.js +37 -9
  221. package/dist/src/utils/schema-generator.d.ts +4 -3
  222. package/dist/src/utils/schema-generator.js +135 -15
  223. package/dist/src/utils/strip-verbose-meta.d.ts +43 -0
  224. package/dist/src/utils/strip-verbose-meta.js +210 -0
  225. package/dist/tsconfig.tsbuildinfo +1 -1
  226. package/package.json +7 -4
  227. package/src/functions/commands/all.ts +144 -97
  228. package/src/functions/commands/bootstrap.ts +2 -10
  229. package/src/functions/runtimes/nextjs/pikku-command-nextjs.ts +0 -1
  230. package/src/functions/runtimes/nextjs/serialize-nextjs-backend-wrapper.ts +49 -35
  231. package/src/functions/runtimes/nextjs/serialize-nextjs-http-wrapper.ts +49 -35
  232. package/src/functions/wirings/channels/pikku-channels.ts +1 -1
  233. package/src/functions/wirings/channels/pikku-command-channels.ts +46 -3
  234. package/src/functions/wirings/channels/serialize-channel-types.ts +62 -5
  235. package/src/functions/wirings/channels/serialize-typed-channel-map.ts +3 -2
  236. package/src/functions/wirings/cli/pikku-command-cli.ts +21 -2
  237. package/src/functions/wirings/forge/pikku-command-forge-nodes.ts +135 -0
  238. package/src/functions/wirings/forge/pikku-command-forge-types.ts +38 -0
  239. package/src/functions/wirings/forge/serialize-forge-types.ts +94 -0
  240. package/src/functions/wirings/functions/pikku-command-function-types-split.ts +3 -2
  241. package/src/functions/wirings/functions/pikku-command-function-types.ts +17 -10
  242. package/src/functions/wirings/functions/pikku-command-functions.ts +47 -37
  243. package/src/functions/wirings/functions/pikku-command-services.ts +1 -1
  244. package/src/functions/wirings/functions/pikku-function-types.ts +3 -1
  245. package/src/functions/wirings/functions/schemas.ts +14 -4
  246. package/src/functions/wirings/functions/serialize-function-imports.ts +12 -3
  247. package/src/functions/wirings/functions/serialize-function-types.ts +182 -34
  248. package/src/functions/wirings/functions/serialize-pikku-types-hub.ts +27 -26
  249. package/src/functions/wirings/http/openapi-spec-generator.ts +1 -1
  250. package/src/functions/wirings/http/pikku-command-http-routes.ts +46 -2
  251. package/src/functions/wirings/http/pikku-command-openapi.ts +3 -2
  252. package/src/functions/wirings/http/pikku-http-routes.ts +1 -1
  253. package/src/functions/wirings/http/serialize-http-types.ts +18 -2
  254. package/src/functions/wirings/http/serialize-typed-http-map.ts +32 -8
  255. package/src/functions/wirings/mcp/pikku-command-mcp.ts +32 -10
  256. package/src/functions/wirings/mcp/serialize-mcp-json.ts +8 -6
  257. package/src/functions/wirings/mcp/serialize-mcp-types.ts +68 -16
  258. package/src/functions/wirings/middleware/pikku-command-middleware.ts +6 -2
  259. package/src/functions/wirings/package/pikku-command-package.ts +81 -0
  260. package/src/functions/wirings/package/serialize-package.ts +69 -0
  261. package/src/functions/wirings/queue/pikku-command-queue.ts +22 -2
  262. package/src/functions/wirings/queue/pikku-queue.ts +1 -10
  263. package/src/functions/wirings/queue/serialize-queue-map.ts +18 -3
  264. package/src/functions/wirings/queue/serialize-queue-meta.ts +1 -1
  265. package/src/functions/wirings/rpc/pikku-command-rpc-map.ts +7 -4
  266. package/src/functions/wirings/rpc/pikku-command-rpc.ts +1 -1
  267. package/src/functions/wirings/rpc/serialize-remote-rpc.ts +3 -0
  268. package/src/functions/wirings/rpc/serialize-rpc-wrapper.ts +1 -1
  269. package/src/functions/wirings/rpc/serialize-typed-rpc-map.ts +74 -8
  270. package/src/functions/wirings/scheduler/pikku-command-scheduler.ts +22 -1
  271. package/src/functions/wirings/scheduler/serialize-scheduler-meta.ts +1 -1
  272. package/src/functions/wirings/workflow/pikku-command-workflow.ts +104 -37
  273. package/src/functions/wirings/workflow/serialize-workflow-map.ts +38 -40
  274. package/src/functions/wirings/workflow/serialize-workflow-meta.ts +66 -26
  275. package/src/functions/wirings/workflow/serialize-workflow-registration.ts +83 -0
  276. package/src/functions/wirings/workflow/serialize-workflow-types.ts +299 -45
  277. package/src/functions/wirings/workflow/serialize-workflow-workers.ts +14 -27
  278. package/src/services.ts +8 -1
  279. package/src/utils/command-summary.ts +4 -0
  280. package/src/utils/custom-types-generator.ts +15 -15
  281. package/src/utils/generate-bootstrap-file.ts +1 -1
  282. package/src/utils/pikku-cli-config.ts +51 -18
  283. package/src/utils/schema-generator.ts +185 -22
  284. package/src/utils/strip-verbose-meta.ts +254 -0
  285. package/types/config.d.ts +37 -3
  286. package/.pikku/function/pikku-functions-meta.min.gen.json +0 -212
  287. package/.pikku/function/pikku-functions-meta.min.gen.ts +0 -6
  288. package/dist/.pikku/function/pikku-functions-meta.min.gen.d.ts +0 -1
  289. package/dist/.pikku/function/pikku-functions-meta.min.gen.js +0 -6
  290. package/dist/.pikku/function/pikku-functions-meta.min.gen.json +0 -212
  291. package/dist/src/functions/wirings/workflow/pikku-command-workflow-map.d.ts +0 -1
  292. package/dist/src/functions/wirings/workflow/pikku-command-workflow-map.js +0 -12
  293. package/dist/src/functions/wirings/workflow/pikku-command-workflow-types.d.ts +0 -1
  294. package/dist/src/functions/wirings/workflow/pikku-command-workflow-types.js +0 -13
  295. package/dist/src/functions/wirings/workflow/serialize-workflow-wirings.d.ts +0 -8
  296. package/dist/src/functions/wirings/workflow/serialize-workflow-wirings.js +0 -30
  297. package/src/functions/wirings/workflow/pikku-command-workflow-map.ts +0 -24
  298. package/src/functions/wirings/workflow/pikku-command-workflow-types.ts +0 -29
  299. package/src/functions/wirings/workflow/serialize-workflow-wirings.ts +0 -47
  300. /package/.pikku/{workflow/pikku-workflow-wirings-meta.gen.json → channel/pikku-channels-meta.gen.json} +0 -0
  301. /package/dist/.pikku/{workflow/pikku-workflow-wirings-meta.gen.json → channel/pikku-channels-meta.gen.json} +0 -0
@@ -1,31 +1,46 @@
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 { generateRuntimeMeta, serializeFunctionImports, } from './serialize-function-imports.js';
4
+ import { serializeFunctionImports } from './serialize-function-imports.js';
5
5
  import { getFileImportRelativePath } from '../../../utils/file-import-path.js';
6
+ import { stripVerboseFields, hasVerboseFields, } from '../../../utils/strip-verbose-meta.js';
6
7
  export const pikkuFunctions = pikkuSessionlessFunc({
7
8
  func: async ({ logger, config, getInspectorState }) => {
8
9
  const { functions, rpc } = await getInspectorState();
9
- const { functionsMetaFile, functionsMetaJsonFile, functionsMetaMinFile, functionsMetaMinJsonFile, functionsFile, packageMappings, schema, } = config;
10
- await writeFileInDir(logger, functionsMetaJsonFile, JSON.stringify(functions.meta, null, 2));
11
- const fullJsonImportPath = getFileImportRelativePath(functionsMetaFile, functionsMetaJsonFile, packageMappings);
10
+ const { functionsMetaFile, functionsMetaJsonFile, functionsFile, packageMappings, schema, } = config;
11
+ // Write minimal JSON (runtime-only fields)
12
+ const minimalMeta = stripVerboseFields(functions.meta);
13
+ await writeFileInDir(logger, functionsMetaJsonFile, JSON.stringify(minimalMeta, null, 2));
14
+ // Write verbose JSON only if it has additional fields
15
+ if (hasVerboseFields(functions.meta)) {
16
+ const verbosePath = functionsMetaJsonFile.replace(/\.gen\.json$/, '-verbose.gen.json');
17
+ await writeFileInDir(logger, verbosePath, JSON.stringify(functions.meta, null, 2));
18
+ }
19
+ const jsonImportPath = getFileImportRelativePath(functionsMetaFile, functionsMetaJsonFile, packageMappings);
12
20
  const supportsImportAttributes = schema?.supportsImportAttributes ?? false;
13
- const fullImportStatement = supportsImportAttributes
14
- ? `import metaData from '${fullJsonImportPath}' with { type: 'json' }`
15
- : `import metaData from '${fullJsonImportPath}'`;
16
- await writeFileInDir(logger, functionsMetaFile, `import { pikkuState, FunctionsMeta } from '@pikku/core'\n${fullImportStatement}\npikkuState('function', 'meta', metaData as FunctionsMeta)`);
17
- const runtimeMeta = generateRuntimeMeta(functions.meta);
18
- await writeFileInDir(logger, functionsMetaMinJsonFile, JSON.stringify(runtimeMeta, null, 2));
19
- const minJsonImportPath = getFileImportRelativePath(functionsMetaMinFile, functionsMetaMinJsonFile, packageMappings);
20
- const minImportStatement = supportsImportAttributes
21
- ? `import metaData from '${minJsonImportPath}' with { type: 'json' }`
22
- : `import metaData from '${minJsonImportPath}'`;
23
- await writeFileInDir(logger, functionsMetaMinFile, `import { pikkuState, FunctionsRuntimeMeta } from '@pikku/core'\n${minImportStatement}\npikkuState('function', 'meta', metaData as FunctionsRuntimeMeta)`);
21
+ const importStatement = supportsImportAttributes
22
+ ? `import metaData from '${jsonImportPath}' with { type: 'json' }`
23
+ : `import metaData from '${jsonImportPath}'`;
24
+ const packageName = config.externalPackageName
25
+ ? `'${config.externalPackageName}'`
26
+ : 'null';
27
+ await writeFileInDir(logger, functionsMetaFile, `import { pikkuState, FunctionsMeta } from '@pikku/core'\n${importStatement}\npikkuState(${packageName}, 'function', 'meta', metaData as FunctionsMeta)`);
28
+ // For external packages, register ALL functions (they'll be invoked by consumers)
29
+ // For main packages, only register functions that are invoked via internal RPCs
30
+ const isExternalPackage = !!config.externalPackageName;
24
31
  const hasRPCs = rpc.exposedFiles.size > 0 || rpc.internalFiles.size > 0;
25
- if (hasRPCs) {
26
- await writeFileInDir(logger, functionsFile, serializeFunctionImports(functionsFile, rpc.internalFiles, functions.meta, packageMappings));
32
+ const hasFunctions = functions.files.size > 0;
33
+ const shouldGenerateFunctionsFile = isExternalPackage
34
+ ? hasFunctions
35
+ : hasRPCs;
36
+ if (shouldGenerateFunctionsFile) {
37
+ // For external packages, use all function files; for main packages, use internal RPC files
38
+ const filesToRegister = isExternalPackage
39
+ ? functions.files
40
+ : rpc.internalFiles;
41
+ await writeFileInDir(logger, functionsFile, serializeFunctionImports(functionsFile, filesToRegister, functions.meta, packageMappings, config.externalPackageName));
27
42
  }
28
- return hasRPCs;
43
+ return shouldGenerateFunctionsFile;
29
44
  },
30
45
  middleware: [
31
46
  logCommandInfoAndTime({
@@ -30,7 +30,7 @@ export const serializeServicesMap = (allSingletonServices, allWireServices, requ
30
30
  }
31
31
  });
32
32
  // Services that are always required internally by the framework
33
- const defaultServices = ['config', 'logger', 'variables', 'schema'];
33
+ const defaultServices = ['config', 'logger', 'variables', 'schema', 'secrets'];
34
34
  defaultServices.forEach((service) => usedServices.add(service));
35
35
  // Create singleton services map: all singleton services with true/false based on usage
36
36
  const singletonServicesMap = {};
@@ -5,8 +5,8 @@ import { logCommandInfoAndTime } from '../../../middleware/log-command-info-and-
5
5
  import { serializePikkuTypesHub } from './serialize-pikku-types-hub.js';
6
6
  export const pikkuFunctionTypes = pikkuSessionlessFunc({
7
7
  func: async ({ logger, config }) => {
8
- const { typesDeclarationFile: typesFile, packageMappings, functionTypesFile, httpTypesFile, channelsTypesFile, schedulersTypesFile, queueTypesFile, mcpTypesFile, cliTypesFile, } = config;
9
- const content = serializePikkuTypesHub(getFileImportRelativePath(typesFile, functionTypesFile, packageMappings), getFileImportRelativePath(typesFile, httpTypesFile, packageMappings), getFileImportRelativePath(typesFile, channelsTypesFile, packageMappings), getFileImportRelativePath(typesFile, schedulersTypesFile, packageMappings), getFileImportRelativePath(typesFile, queueTypesFile, packageMappings), getFileImportRelativePath(typesFile, mcpTypesFile, packageMappings), getFileImportRelativePath(typesFile, cliTypesFile, packageMappings));
8
+ const { typesDeclarationFile: typesFile, packageMappings, functionTypesFile, httpTypesFile, channelsTypesFile, schedulersTypesFile, queueTypesFile, mcpTypesFile, cliTypesFile, forgeTypesFile, } = config;
9
+ const content = serializePikkuTypesHub(getFileImportRelativePath(typesFile, functionTypesFile, packageMappings), getFileImportRelativePath(typesFile, httpTypesFile, packageMappings), getFileImportRelativePath(typesFile, channelsTypesFile, packageMappings), getFileImportRelativePath(typesFile, schedulersTypesFile, packageMappings), getFileImportRelativePath(typesFile, queueTypesFile, packageMappings), getFileImportRelativePath(typesFile, mcpTypesFile, packageMappings), getFileImportRelativePath(typesFile, cliTypesFile, packageMappings), getFileImportRelativePath(typesFile, forgeTypesFile, packageMappings));
10
10
  await writeFileInDir(logger, typesFile, content);
11
11
  },
12
12
  middleware: [
@@ -1,4 +1,4 @@
1
1
  /**
2
- * Generate JSON schemas from TypeScript types
2
+ * Generate JSON schemas from TypeScript types and Zod schemas
3
3
  */
4
4
  export declare const pikkuSchemas: any;
@@ -1,14 +1,15 @@
1
1
  import { pikkuSessionlessFunc } from '../../../../.pikku/pikku-types.gen.js';
2
- import { saveSchemas, generateSchemas, } from '../../../utils/schema-generator.js';
2
+ import { saveSchemas, generateSchemas, generateZodSchemas, } from '../../../utils/schema-generator.js';
3
3
  import { logCommandInfoAndTime } from '../../../middleware/log-command-info-and-time.js';
4
4
  /**
5
- * Generate JSON schemas from TypeScript types
5
+ * Generate JSON schemas from TypeScript types and Zod schemas
6
6
  */
7
7
  export const pikkuSchemas = pikkuSessionlessFunc({
8
8
  func: async ({ logger, config, getInspectorState }) => {
9
9
  const visitState = await getInspectorState();
10
- const schemas = await generateSchemas(logger, config.tsconfig, visitState.functions.typesMap, visitState.functions.meta, visitState.http.meta, config.schemasFromTypes, config.schema?.additionalProperties);
11
- await saveSchemas(logger, config.schemaDirectory, schemas, visitState.functions.typesMap, visitState.functions.meta, config.schema?.supportsImportAttributes || true, config.schemasFromTypes);
10
+ const schemas = await generateSchemas(logger, config.tsconfig, visitState.functions.typesMap, visitState.functions.meta, visitState.http.meta, config.schemasFromTypes, config.schema?.additionalProperties, visitState.zodLookup);
11
+ const zodSchemas = await generateZodSchemas(logger, visitState.zodLookup, visitState.functions.typesMap);
12
+ await saveSchemas(logger, config.schemaDirectory, { ...schemas, ...zodSchemas }, visitState.functions.typesMap, visitState.functions.meta, config.schema?.supportsImportAttributes || true, config.schemasFromTypes, visitState.zodLookup, config.externalPackageName || null);
12
13
  return true;
13
14
  },
14
15
  middleware: [
@@ -2,5 +2,7 @@ import { FunctionsMeta, FunctionsRuntimeMeta } from '@pikku/core';
2
2
  export declare const serializeFunctionImports: (outputPath: string, functionsMap: Map<string, {
3
3
  path: string;
4
4
  exportedName: string;
5
- }>, functionsMeta: FunctionsMeta, packageMappings?: Record<string, string>) => string;
5
+ }>, functionsMeta: FunctionsMeta, packageMappings?: Record<string, string>,
6
+ /** Package name for external packages (e.g., '@pikku/templates-function-external') */
7
+ externalPackageName?: string) => string;
6
8
  export declare const generateRuntimeMeta: (functions: FunctionsMeta) => FunctionsRuntimeMeta;
@@ -1,5 +1,7 @@
1
1
  import { getFileImportRelativePath } from '../../../utils/file-import-path.js';
2
- export const serializeFunctionImports = (outputPath, functionsMap, functionsMeta, packageMappings = {}) => {
2
+ export const serializeFunctionImports = (outputPath, functionsMap, functionsMeta, packageMappings = {},
3
+ /** Package name for external packages (e.g., '@pikku/templates-function-external') */
4
+ externalPackageName) => {
3
5
  const serializedImports = [
4
6
  `/* Import and register functions used by RPCs */`,
5
7
  `import { addFunction } from '@pikku/core'`,
@@ -7,18 +9,20 @@ export const serializeFunctionImports = (outputPath, functionsMap, functionsMeta
7
9
  const serializedRegistrations = [];
8
10
  // Sort by function name for consistent output
9
11
  const sortedEntries = Array.from(functionsMap.entries()).sort((a, b) => a[0].localeCompare(b[0]));
12
+ // Third argument to addFunction is the package name (null for main package)
13
+ const packageArg = externalPackageName ? `, '${externalPackageName}'` : '';
10
14
  for (const [name, { path, exportedName }] of sortedEntries) {
11
15
  const filePath = getFileImportRelativePath(outputPath, path, packageMappings);
12
16
  // pikkuFunc/pikkuSessionlessFunc/pikkuVoidFunc always return config objects
13
17
  // For directly exported functions, we can just import and register them
14
18
  if (name === exportedName) {
15
19
  serializedImports.push(`import { ${exportedName} } from '${filePath}'`);
16
- serializedRegistrations.push(`addFunction('${name}', ${exportedName})`);
20
+ serializedRegistrations.push(`addFunction('${name}', ${exportedName}${packageArg})`);
17
21
  }
18
22
  // For renamed functions, we need to import and alias them
19
23
  else {
20
24
  serializedImports.push(`import { ${exportedName} as ${name} } from '${filePath}'`);
21
- serializedRegistrations.push(`addFunction('${name}', ${name})`);
25
+ serializedRegistrations.push(`addFunction('${name}', ${name}${packageArg})`);
22
26
  }
23
27
  }
24
28
  // Add a blank line between imports and registrations
@@ -1,4 +1,4 @@
1
1
  /**
2
2
  * Generates core function, middleware, and permission type definitions
3
3
  */
4
- export declare const serializeFunctionTypes: (userSessionTypeImport: string, userSessionTypeName: string, singletonServicesTypeImport: string, singletonServicesTypeName: string, wireServicesTypeImport: string, wireServicesTypeName: string, rpcMapTypeImport: string, requiredServicesTypeImport: string, configTypeImport: string) => string;
4
+ export declare const serializeFunctionTypes: (userSessionTypeImport: string, userSessionTypeName: string, singletonServicesTypeImport: string, singletonServicesTypeName: string, wireServicesTypeImport: string, wireServicesTypeName: string, rpcMapTypeImport: string, requiredServicesTypeImport: string, configTypeImport: string, packageName?: string) => string;
@@ -1,12 +1,13 @@
1
1
  /**
2
2
  * Generates core function, middleware, and permission type definitions
3
3
  */
4
- export const serializeFunctionTypes = (userSessionTypeImport, userSessionTypeName, singletonServicesTypeImport, singletonServicesTypeName, wireServicesTypeImport, wireServicesTypeName, rpcMapTypeImport, requiredServicesTypeImport, configTypeImport) => {
4
+ export const serializeFunctionTypes = (userSessionTypeImport, userSessionTypeName, singletonServicesTypeImport, singletonServicesTypeName, wireServicesTypeImport, wireServicesTypeName, rpcMapTypeImport, requiredServicesTypeImport, configTypeImport, packageName) => {
5
+ const packageNameValue = packageName ? `'${packageName}'` : 'null';
5
6
  return `/**
6
7
  * Core function, middleware, and permission types for all wirings
7
8
  */
8
9
 
9
- import { CorePikkuFunctionConfig, CorePikkuPermission, CorePikkuMiddleware, CorePermissionGroup, addMiddleware as addMiddlewareCore, addPermission as addPermissionCore, PikkuWire, PickRequired } from '@pikku/core'
10
+ import { CorePikkuFunctionConfig, CorePikkuPermission, CorePikkuMiddleware, CorePermissionGroup, addMiddleware as addMiddlewareCore, addPermission as addPermissionCore, PikkuWire, PickRequired, ZodLike, CreateWireServices } from '@pikku/core'
10
11
  import { CorePikkuFunction, CorePikkuFunctionSessionless } from '@pikku/core/function'
11
12
 
12
13
  ${userSessionTypeImport}
@@ -208,6 +209,11 @@ export type PikkuFunction<
208
209
  PickRequired<PikkuWire<In, Out, true, Session, TypedPikkuRPC, null, any>, RequiredWires>
209
210
  >
210
211
 
212
+ /**
213
+ * Helper type to infer the output type from a Zod schema
214
+ */
215
+ export type InferZodOutput<T> = T extends ZodLike<infer U> ? U : never
216
+
211
217
  /**
212
218
  * Configuration object for Pikku functions with optional middleware, permissions, tags, and documentation.
213
219
  * This type wraps CorePikkuFunctionConfig with the user's custom types.
@@ -220,64 +226,166 @@ export type PikkuFunctionConfig<
220
226
  In = unknown,
221
227
  Out = unknown,
222
228
  RequiredWires extends keyof PikkuWire = never,
223
- PikkuFunc extends PikkuFunction<In, Out, RequiredWires> | PikkuFunctionSessionless<In, Out, RequiredWires> = PikkuFunction<In, Out, RequiredWires> | PikkuFunctionSessionless<In, Out, RequiredWires>
224
- > = CorePikkuFunctionConfig<PikkuFunc, PikkuPermission<In>, PikkuMiddleware>
229
+ PikkuFunc extends PikkuFunction<In, Out, RequiredWires> | PikkuFunctionSessionless<In, Out, RequiredWires> = PikkuFunction<In, Out, RequiredWires> | PikkuFunctionSessionless<In, Out, RequiredWires>,
230
+ InputSchema extends ZodLike | undefined = undefined,
231
+ OutputSchema extends ZodLike | undefined = undefined
232
+ > = CorePikkuFunctionConfig<PikkuFunc, PikkuPermission<In>, PikkuMiddleware, InputSchema, OutputSchema>
233
+
234
+ /**
235
+ * Configuration object for Pikku functions with Zod schema validation.
236
+ * Use this when you want to define input/output schemas using Zod.
237
+ * Types are automatically inferred from the schemas.
238
+ */
239
+ export type PikkuFunctionConfigWithSchema<
240
+ InputSchema extends ZodLike,
241
+ OutputSchema extends ZodLike | undefined = undefined,
242
+ RequiredWires extends keyof PikkuWire = never
243
+ > = {
244
+ name?: string
245
+ tags?: string[]
246
+ expose?: boolean
247
+ internal?: boolean
248
+ func: PikkuFunction<
249
+ InferZodOutput<InputSchema>,
250
+ OutputSchema extends ZodLike ? InferZodOutput<OutputSchema> : unknown,
251
+ RequiredWires
252
+ > | PikkuFunctionSessionless<
253
+ InferZodOutput<InputSchema>,
254
+ OutputSchema extends ZodLike ? InferZodOutput<OutputSchema> : unknown,
255
+ RequiredWires
256
+ >
257
+ auth?: boolean
258
+ permissions?: CorePermissionGroup<PikkuPermission<InferZodOutput<InputSchema>>>
259
+ middleware?: PikkuMiddleware[]
260
+ input: InputSchema
261
+ output?: OutputSchema
262
+ }
225
263
 
226
264
  /**
227
265
  * Creates a Pikku function that can be either session-aware or sessionless.
228
266
  * This is the main function wrapper for creating API endpoints.
229
267
  *
230
- * @template In - Input type for the function
231
- * @template Out - Output type for the function
268
+ * Supports two patterns:
269
+ * 1. Generic types: \`pikkuFunc<Input, Output>({ func: ... })\`
270
+ * 2. Zod schemas: \`pikkuFunc({ input: z.object(...), output: z.object(...), func: ... })\`
271
+ *
272
+ * @template In - Input type for the function (inferred from schema if provided)
273
+ * @template Out - Output type for the function (inferred from schema if provided)
232
274
  * @param func - Function definition, either direct function or configuration object
233
275
  * @returns The normalized configuration object
234
276
  *
235
277
  * @example
236
- * \\\`\\\`\\\`typescript
237
- * const createUser = pikkuFunc<{name: string, email: string}, {id: number, message: string}>({
238
- * func: async ({db, logger}, input, wire) => {
239
- * const session = await wire.session.get()
240
- * logger.info('Creating user', input.name)
278
+ * \`\`\`typescript
279
+ * // Pattern 1: Using generic types
280
+ * const createUser = pikkuFunc<{name: string, email: string}, {id: number}>({
281
+ * func: async ({db}, input) => {
241
282
  * const user = await db.users.create(input)
242
- * return {id: user.id, message: \\\`User \\\${input.name} created successfully\\\`}
243
- * },
244
- * auth: true
283
+ * return { id: user.id }
284
+ * }
245
285
  * })
246
- * \\\`\\\`\\\`
286
+ *
287
+ * // Pattern 2: Using Zod schemas (types inferred automatically)
288
+ * const createUserInput = z.object({ name: z.string(), email: z.string() })
289
+ * const createUserOutput = z.object({ id: z.number() })
290
+ *
291
+ * const createUser = pikkuFunc({
292
+ * input: createUserInput,
293
+ * output: createUserOutput,
294
+ * func: async ({db}, input) => {
295
+ * // input is typed as { name: string, email: string }
296
+ * const user = await db.users.create(input)
297
+ * return { id: user.id } // must match output schema
298
+ * }
299
+ * })
300
+ * \`\`\`
247
301
  */
248
- export const pikkuFunc = <In, Out = unknown>(
302
+ export function pikkuFunc<
303
+ InputSchema extends ZodLike,
304
+ OutputSchema extends ZodLike | undefined = undefined
305
+ >(
306
+ config: PikkuFunctionConfigWithSchema<InputSchema, OutputSchema, 'session' | 'rpc'>
307
+ ): PikkuFunctionConfig<InferZodOutput<InputSchema>, OutputSchema extends ZodLike ? InferZodOutput<OutputSchema> : unknown, 'session' | 'rpc'>
308
+ export function pikkuFunc<In, Out = unknown>(
249
309
  func:
250
310
  | PikkuFunction<In, Out, 'session' | 'rpc'>
251
311
  | PikkuFunctionConfig<In, Out, 'session' | 'rpc'>
252
- ) => {
312
+ ): PikkuFunctionConfig<In, Out, 'session' | 'rpc'>
313
+ export function pikkuFunc(func: any) {
253
314
  return typeof func === 'function' ? { func } : func
254
315
  }
255
316
 
317
+ /**
318
+ * Configuration object for sessionless Pikku functions with Zod schema validation.
319
+ */
320
+ export type PikkuFunctionSessionlessConfigWithSchema<
321
+ InputSchema extends ZodLike,
322
+ OutputSchema extends ZodLike | undefined = undefined,
323
+ RequiredWires extends keyof PikkuWire = never
324
+ > = {
325
+ name?: string
326
+ description?: string
327
+ tags?: string[]
328
+ expose?: boolean
329
+ internal?: boolean
330
+ func: PikkuFunctionSessionless<
331
+ InferZodOutput<InputSchema>,
332
+ OutputSchema extends ZodLike ? InferZodOutput<OutputSchema> : unknown,
333
+ RequiredWires
334
+ >
335
+ auth?: boolean
336
+ permissions?: CorePermissionGroup<PikkuPermission<InferZodOutput<InputSchema>>>
337
+ middleware?: PikkuMiddleware[]
338
+ input: InputSchema
339
+ output?: OutputSchema
340
+ }
341
+
256
342
  /**
257
343
  * Creates a sessionless Pikku function that doesn't require user authentication.
258
344
  * Use this for public endpoints, webhooks, or background tasks.
259
345
  *
260
- * @template In - Input type for the function
261
- * @template Out - Output type for the function
346
+ * Supports two patterns:
347
+ * 1. Generic types: \`pikkuSessionlessFunc<Input, Output>({ func: ... })\`
348
+ * 2. Zod schemas: \`pikkuSessionlessFunc({ input: z.object(...), func: ... })\`
349
+ *
350
+ * @template In - Input type for the function (inferred from schema if provided)
351
+ * @template Out - Output type for the function (inferred from schema if provided)
262
352
  * @param func - Function definition, either direct function or configuration object
263
353
  * @returns The normalized configuration object
264
354
  *
265
355
  * @example
266
- * \\\`\\\`\\\`typescript
267
- * const healthCheck = pikkuSessionlessFunc<void, {status: string, timestamp: string}>({
268
- * func: async ({logger}, input) => {
269
- * logger.info('Health check requested')
270
- * return {status: 'healthy', timestamp: new Date().toISOString()}
271
- * },
272
- * name: 'healthCheck'
356
+ * \`\`\`typescript
357
+ * // Pattern 1: Using generic types
358
+ * const healthCheck = pikkuSessionlessFunc<void, {status: string}>({
359
+ * func: async ({logger}) => {
360
+ * return { status: 'healthy' }
361
+ * }
362
+ * })
363
+ *
364
+ * // Pattern 2: Using Zod schemas
365
+ * const greetInput = z.object({ name: z.string() })
366
+ * const greetOutput = z.object({ message: z.string() })
367
+ *
368
+ * const greet = pikkuSessionlessFunc({
369
+ * input: greetInput,
370
+ * output: greetOutput,
371
+ * func: async (_services, { name }) => {
372
+ * return { message: \`Hello, \${name}!\` }
373
+ * }
273
374
  * })
274
- * \\\`\\\`\\\`
375
+ * \`\`\`
275
376
  */
276
- export const pikkuSessionlessFunc = <In, Out = unknown>(
377
+ export function pikkuSessionlessFunc<
378
+ InputSchema extends ZodLike,
379
+ OutputSchema extends ZodLike | undefined = undefined
380
+ >(
381
+ config: PikkuFunctionSessionlessConfigWithSchema<InputSchema, OutputSchema, 'session' | 'rpc'>
382
+ ): PikkuFunctionConfig<InferZodOutput<InputSchema>, OutputSchema extends ZodLike ? InferZodOutput<OutputSchema> : unknown, 'session' | 'rpc'>
383
+ export function pikkuSessionlessFunc<In, Out = unknown>(
277
384
  func:
278
385
  | PikkuFunctionSessionless<In, Out, 'session' | 'rpc'>
279
386
  | PikkuFunctionConfig<In, Out, 'session' | 'rpc'>
280
- ) => {
387
+ ): PikkuFunctionConfig<In, Out, 'session' | 'rpc'>
388
+ export function pikkuSessionlessFunc(func: any) {
281
389
  return typeof func === 'function' ? { func } : func
282
390
  }
283
391
 
@@ -289,13 +397,13 @@ export const pikkuSessionlessFunc = <In, Out = unknown>(
289
397
  * @returns The normalized configuration object
290
398
  *
291
399
  * @example
292
- * \\\`\\\`\\\`typescript
400
+ * \`\`\`typescript
293
401
  * const cleanupTempFiles = pikkuVoidFunc(async ({fileSystem, logger}) => {
294
402
  * logger.info('Starting cleanup of temporary files')
295
403
  * await fileSystem.deleteDirectory('/tmp/uploads')
296
404
  * logger.info('Cleanup completed')
297
405
  * })
298
- * \\\`\\\`\\\`
406
+ * \`\`\`
299
407
  */
300
408
  export const pikkuVoidFunc = (
301
409
  func:
@@ -305,6 +413,45 @@ export const pikkuVoidFunc = (
305
413
  return typeof func === 'function' ? { func } : func
306
414
  }
307
415
 
416
+ /**
417
+ * Creates a wrapper function for external package functions that are exposed via RPC.
418
+ * This allows you to wire external functions to any wiring type (HTTP, queue, etc.)
419
+ * without type compatibility issues.
420
+ *
421
+ * @template Name - The RPC method name (must be a key in FlattenedRPCMap)
422
+ * @param rpcName - The name of the RPC method to invoke
423
+ * @returns A Pikku function that proxies calls to the external RPC method
424
+ *
425
+ * @example
426
+ * \`\`\`typescript
427
+ * // Wire an external function via HTTP
428
+ * wireHTTP({
429
+ * auth: false,
430
+ * method: 'get',
431
+ * route: '/external/hello',
432
+ * func: external('ext:hello'),
433
+ * tags: ['external'],
434
+ * })
435
+ * \`\`\`
436
+ */
437
+ export const external = <Name extends keyof FlattenedRPCMap>(
438
+ rpcName: Name
439
+ ): PikkuFunctionConfig<
440
+ FlattenedRPCMap[Name]['input'],
441
+ FlattenedRPCMap[Name]['output'],
442
+ 'session' | 'rpc'
443
+ > => {
444
+ return {
445
+ func: (async (_services: any, data: any, { rpc }: any) => {
446
+ return rpc.invoke(rpcName, data)
447
+ }) as any
448
+ } as PikkuFunctionConfig<
449
+ FlattenedRPCMap[Name]['input'],
450
+ FlattenedRPCMap[Name]['output'],
451
+ 'session' | 'rpc'
452
+ >
453
+ }
454
+
308
455
  /**
309
456
  * Creates a Pikku config factory.
310
457
  * Use this to define your application's configuration factory.
@@ -370,7 +517,7 @@ export const pikkuWireServices = (
370
517
  services: SingletonServices,
371
518
  wire: any
372
519
  ) => Promise<RequiredWireServices>
373
- ) => func
520
+ ): CreateWireServices => func as unknown as CreateWireServices
374
521
 
375
522
  /**
376
523
  * Adds global middleware for a specific tag.
@@ -396,7 +543,7 @@ export const pikkuWireServices = (
396
543
  * \`\`\`
397
544
  */
398
545
  export const addMiddleware = (tag: string, middleware: PikkuMiddleware[]) => {
399
- addMiddlewareCore(tag, middleware as any)
546
+ addMiddlewareCore(tag, middleware as any, ${packageNameValue})
400
547
  }
401
548
 
402
549
  /**
@@ -423,7 +570,7 @@ export const addMiddleware = (tag: string, middleware: PikkuMiddleware[]) => {
423
570
  * \`\`\`
424
571
  */
425
572
  export const addPermission = <In = unknown>(tag: string, permissions: CorePermissionGroup<PikkuPermission<In>> | PikkuPermission<In>[]) => {
426
- addPermissionCore(tag, permissions as any)
573
+ addPermissionCore(tag, permissions as any, ${packageNameValue})
427
574
  }
428
575
  `;
429
576
  };
@@ -1,4 +1,4 @@
1
1
  /**
2
2
  * Generates the main pikku-types.gen.ts file as a re-export hub
3
3
  */
4
- export declare const serializePikkuTypesHub: (functionTypesImportPath: string, httpTypesImportPath: string, channelTypesImportPath: string, schedulerTypesImportPath: string, queueTypesImportPath: string, mcpTypesImportPath: string, cliTypesImportPath: string) => string;
4
+ export declare const serializePikkuTypesHub: (functionTypesImportPath: string, httpTypesImportPath: string | null, channelTypesImportPath: string | null, schedulerTypesImportPath: string | null, queueTypesImportPath: string | null, mcpTypesImportPath: string | null, cliTypesImportPath: string | null, forgeTypesImportPath: string | null) => string;
@@ -1,30 +1,28 @@
1
1
  /**
2
2
  * Generates the main pikku-types.gen.ts file as a re-export hub
3
3
  */
4
- export const serializePikkuTypesHub = (functionTypesImportPath, httpTypesImportPath, channelTypesImportPath, schedulerTypesImportPath, queueTypesImportPath, mcpTypesImportPath, cliTypesImportPath) => {
4
+ export const serializePikkuTypesHub = (functionTypesImportPath, httpTypesImportPath, channelTypesImportPath, schedulerTypesImportPath, queueTypesImportPath, mcpTypesImportPath, cliTypesImportPath, forgeTypesImportPath) => {
5
+ const exports = [
6
+ {
7
+ comment: 'Core function, middleware, and permission types',
8
+ path: functionTypesImportPath,
9
+ },
10
+ { comment: 'HTTP wiring types', path: httpTypesImportPath },
11
+ { comment: 'Channel wiring types', path: channelTypesImportPath },
12
+ { comment: 'Scheduler wiring types', path: schedulerTypesImportPath },
13
+ { comment: 'Queue wiring types', path: queueTypesImportPath },
14
+ { comment: 'MCP wiring types', path: mcpTypesImportPath },
15
+ { comment: 'CLI wiring types', path: cliTypesImportPath },
16
+ { comment: 'Forge wiring types', path: forgeTypesImportPath },
17
+ ];
18
+ const exportStatements = exports
19
+ .filter((e) => e.path)
20
+ .map((e) => `// ${e.comment}\nexport * from '${e.path}'`)
21
+ .join('\n\n');
5
22
  return `/**
6
23
  * Main type export hub - re-exports all wiring-specific types
7
24
  */
8
25
 
9
- // Core function, middleware, and permission types
10
- export * from '${functionTypesImportPath}'
11
-
12
- // HTTP wiring types
13
- export * from '${httpTypesImportPath}'
14
-
15
- // Channel wiring types
16
- export * from '${channelTypesImportPath}'
17
-
18
- // Scheduler wiring types
19
- export * from '${schedulerTypesImportPath}'
20
-
21
- // Queue wiring types
22
- export * from '${queueTypesImportPath}'
23
-
24
- // MCP wiring types
25
- export * from '${mcpTypesImportPath}'
26
-
27
- // CLI wiring types
28
- export * from '${cliTypesImportPath}'
26
+ ${exportStatements}
29
27
  `;
30
28
  };
@@ -2,7 +2,7 @@ import { pikkuState } from '@pikku/core';
2
2
  import _convertSchema from '@openapi-contrib/json-schema-to-openapi-schema';
3
3
  const convertSchema = 'default' in _convertSchema ? _convertSchema.default : _convertSchema;
4
4
  const getErrorResponseForConstructorName = (constructorName) => {
5
- const errors = Array.from(pikkuState('misc', 'errors').entries());
5
+ const errors = Array.from(pikkuState(null, 'misc', 'errors').entries());
6
6
  const foundError = errors.find(([e]) => e.name === constructorName);
7
7
  if (foundError) {
8
8
  return foundError[1];
@@ -2,13 +2,29 @@ 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 { getFileImportRelativePath } from '../../../utils/file-import-path.js';
6
+ import { stripVerboseFields, hasVerboseFields, } from '../../../utils/strip-verbose-meta.js';
5
7
  export const pikkuHTTP = pikkuSessionlessFunc({
6
8
  func: async ({ logger, config, getInspectorState }) => {
7
9
  const visitState = await getInspectorState();
8
- const { httpWiringsFile, httpWiringMetaFile, packageMappings } = config;
10
+ const { httpWiringsFile, httpWiringMetaFile, httpWiringMetaJsonFile, packageMappings, schema, } = config;
9
11
  const { http } = visitState;
10
12
  await writeFileInDir(logger, httpWiringsFile, serializeFileImports('wireHTTP', httpWiringsFile, http.files, packageMappings));
11
- await writeFileInDir(logger, httpWiringMetaFile, `import { pikkuState } from '@pikku/core'\npikkuState('http', 'meta', ${JSON.stringify(http.meta, null, 2)})`);
13
+ // Write minimal JSON (runtime-only fields)
14
+ const minimalMeta = stripVerboseFields(http.meta);
15
+ await writeFileInDir(logger, httpWiringMetaJsonFile, JSON.stringify(minimalMeta, null, 2));
16
+ // Write verbose JSON only if it has additional fields
17
+ if (hasVerboseFields(http.meta)) {
18
+ const verbosePath = httpWiringMetaJsonFile.replace(/\.gen\.json$/, '-verbose.gen.json');
19
+ await writeFileInDir(logger, verbosePath, JSON.stringify(http.meta, null, 2));
20
+ }
21
+ // Generate TypeScript file that imports the minimal JSON
22
+ const jsonImportPath = getFileImportRelativePath(httpWiringMetaFile, httpWiringMetaJsonFile, packageMappings);
23
+ const supportsImportAttributes = schema?.supportsImportAttributes ?? false;
24
+ const importStatement = supportsImportAttributes
25
+ ? `import metaData from '${jsonImportPath}' with { type: 'json' }`
26
+ : `import metaData from '${jsonImportPath}'`;
27
+ await writeFileInDir(logger, httpWiringMetaFile, `import { pikkuState } from '@pikku/core'\nimport type { HTTPWiringsMeta } from '@pikku/core/http'\n${importStatement}\npikkuState(null, 'http', 'meta', metaData as HTTPWiringsMeta)`);
12
28
  return true;
13
29
  },
14
30
  middleware: [
@@ -15,8 +15,8 @@ export const pikkuOpenAPI = pikkuSessionlessFunc({
15
15
  });
16
16
  return;
17
17
  }
18
- const { http, functions } = await getInspectorState();
19
- const schemas = await generateSchemas(logger, tsconfig, functions.typesMap, functions.meta, http.meta, schemasFromTypes, config.schema?.additionalProperties);
18
+ const { http, functions, zodLookup } = await getInspectorState();
19
+ const schemas = await generateSchemas(logger, tsconfig, functions.typesMap, functions.meta, http.meta, schemasFromTypes, config.schema?.additionalProperties, zodLookup);
20
20
  const openAPISpec = await generateOpenAPISpec(logger, functions.meta, http.meta, schemas, openAPI.additionalInfo);
21
21
  if (openAPI.outputFile.endsWith('.json')) {
22
22
  await writeFileInDir(logger, openAPI.outputFile, JSON.stringify(openAPISpec, null, 2), { ignoreModifyComment: true });
@@ -15,7 +15,7 @@ export const pikkuHTTP = pikkuSessionlessFunc({
15
15
  const importStatement = supportsImportAttributes
16
16
  ? `import metaData from '${jsonImportPath}' with { type: 'json' }`
17
17
  : `import metaData from '${jsonImportPath}'`;
18
- await writeFileInDir(logger, httpWiringMetaFile, `import { pikkuState, HTTPWiringsMeta } from '@pikku/core'\n${importStatement}\npikkuState('http', 'meta', metaData as HTTPWiringsMeta)`);
18
+ await writeFileInDir(logger, httpWiringMetaFile, `import { pikkuState, HTTPWiringsMeta } from '@pikku/core'\n${importStatement}\npikkuState(null, 'http', 'meta', metaData as HTTPWiringsMeta)`);
19
19
  return true;
20
20
  },
21
21
  middleware: [