@pikku/cli 0.9.14 → 0.9.16-next.0

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 (445) hide show
  1. package/.pikku/channel/pikku-channel-types.gen.ts +92 -0
  2. package/.pikku/cli/pikku-cli-types.gen.ts +71 -0
  3. package/.pikku/cli/pikku-cli-wirings-meta.gen.ts +5 -0
  4. package/.pikku/cli/pikku-cli-wirings.gen.ts +4 -0
  5. package/.pikku/function/pikku-function-types.gen.ts +292 -0
  6. package/.pikku/function/pikku-functions-meta.gen.ts +817 -0
  7. package/.pikku/function/pikku-functions-meta.min.gen.ts +176 -0
  8. package/.pikku/function/pikku-functions.gen.ts +74 -0
  9. package/.pikku/http/pikku-http-types.gen.ts +61 -0
  10. package/.pikku/mcp/pikku-mcp-types.gen.ts +138 -0
  11. package/.pikku/pikku-bootstrap.gen.ts +9 -0
  12. package/.pikku/pikku-services.gen.ts +24 -0
  13. package/.pikku/pikku-types.gen.ts +28 -0
  14. package/.pikku/queue/pikku-queue-types.gen.ts +28 -0
  15. package/.pikku/rpc/pikku-rpc-wirings-map.gen.d.ts +46 -0
  16. package/.pikku/rpc/pikku-rpc-wirings-map.internal.gen.d.ts +80 -0
  17. package/.pikku/rpc/pikku-rpc-wirings-meta.internal.gen.ts +40 -0
  18. package/.pikku/scheduler/pikku-scheduler-types.gen.ts +26 -0
  19. package/.pikku/schemas/register.gen.ts +47 -0
  20. package/.pikku/schemas/schemas/PikkuCLIConfig.schema.json +1 -0
  21. package/.pikku/schemas/schemas/PikkuCLIOutput.schema.json +1 -0
  22. package/.pikku/schemas/schemas/PikkuChannelsOutput.schema.json +1 -0
  23. package/.pikku/schemas/schemas/PikkuFunctionsOutput.schema.json +1 -0
  24. package/.pikku/schemas/schemas/PikkuHTTPOutput.schema.json +1 -0
  25. package/.pikku/schemas/schemas/PikkuMCPOutput.schema.json +1 -0
  26. package/.pikku/schemas/schemas/PikkuMiddlewareOutput.schema.json +1 -0
  27. package/.pikku/schemas/schemas/PikkuQueueOutput.schema.json +1 -0
  28. package/.pikku/schemas/schemas/PikkuRPCOutput.schema.json +1 -0
  29. package/.pikku/schemas/schemas/PikkuSchedulerOutput.schema.json +1 -0
  30. package/.pikku/schemas/schemas/PikkuSchemasOutput.schema.json +1 -0
  31. package/CHANGELOG.md +15 -0
  32. package/bin/pikku.ts +45 -14
  33. package/build.sh +53 -0
  34. package/cli.schema.json +1 -382
  35. package/dist/.pikku/channel/pikku-channel-types.gen.d.ts +65 -0
  36. package/dist/.pikku/channel/pikku-channel-types.gen.js +54 -0
  37. package/dist/.pikku/cli/pikku-cli-types.gen.d.ts +55 -0
  38. package/dist/.pikku/cli/pikku-cli-types.gen.js +30 -0
  39. package/dist/.pikku/cli/pikku-cli-wirings-meta.gen.js +5 -0
  40. package/dist/.pikku/cli/pikku-cli-wirings.gen.d.ts +4 -0
  41. package/dist/.pikku/cli/pikku-cli-wirings.gen.js +5 -0
  42. package/dist/.pikku/function/pikku-function-types.gen.d.ts +259 -0
  43. package/dist/.pikku/function/pikku-function-types.gen.js +175 -0
  44. package/dist/.pikku/function/pikku-functions-meta.gen.d.ts +1 -0
  45. package/dist/.pikku/function/pikku-functions-meta.gen.js +817 -0
  46. package/dist/.pikku/function/pikku-functions-meta.min.gen.d.ts +1 -0
  47. package/dist/.pikku/function/pikku-functions-meta.min.gen.js +176 -0
  48. package/dist/.pikku/function/pikku-functions.gen.d.ts +1 -0
  49. package/dist/.pikku/function/pikku-functions.gen.js +73 -0
  50. package/dist/.pikku/http/pikku-http-types.gen.d.ts +49 -0
  51. package/dist/.pikku/http/pikku-http-types.gen.js +41 -0
  52. package/dist/.pikku/mcp/pikku-mcp-types.gen.d.ts +88 -0
  53. package/dist/.pikku/mcp/pikku-mcp-types.gen.js +71 -0
  54. package/dist/.pikku/pikku-bootstrap.gen.d.ts +9 -0
  55. package/dist/.pikku/pikku-bootstrap.gen.js +9 -0
  56. package/dist/.pikku/pikku-services.gen.d.ts +16 -0
  57. package/dist/.pikku/pikku-services.gen.js +11 -0
  58. package/dist/.pikku/pikku-types.gen.d.ts +14 -0
  59. package/dist/.pikku/pikku-types.gen.js +21 -0
  60. package/dist/.pikku/queue/pikku-queue-types.gen.d.ts +24 -0
  61. package/dist/.pikku/queue/pikku-queue-types.gen.js +17 -0
  62. package/dist/.pikku/rpc/pikku-bootstrap-rpc.gen.d.ts +6 -0
  63. package/dist/.pikku/rpc/pikku-bootstrap-rpc.gen.js +6 -0
  64. package/dist/.pikku/rpc/pikku-rpc-wirings-meta.internal.gen.d.ts +1 -0
  65. package/dist/.pikku/rpc/pikku-rpc-wirings-meta.internal.gen.js +40 -0
  66. package/dist/.pikku/scheduler/pikku-scheduler-types.gen.d.ts +22 -0
  67. package/dist/.pikku/scheduler/pikku-scheduler-types.gen.js +17 -0
  68. package/dist/.pikku/schemas/register.gen.d.ts +1 -0
  69. package/dist/.pikku/schemas/register.gen.js +26 -0
  70. package/dist/.pikku/schemas/schemas/PikkuCLIConfig.schema.json +1 -0
  71. package/dist/.pikku/schemas/schemas/PikkuCLIOutput.schema.json +1 -0
  72. package/dist/.pikku/schemas/schemas/PikkuChannelsOutput.schema.json +1 -0
  73. package/dist/.pikku/schemas/schemas/PikkuFunctionsOutput.schema.json +1 -0
  74. package/dist/.pikku/schemas/schemas/PikkuHTTPOutput.schema.json +1 -0
  75. package/dist/.pikku/schemas/schemas/PikkuMCPOutput.schema.json +1 -0
  76. package/dist/.pikku/schemas/schemas/PikkuMiddlewareOutput.schema.json +1 -0
  77. package/dist/.pikku/schemas/schemas/PikkuQueueOutput.schema.json +1 -0
  78. package/dist/.pikku/schemas/schemas/PikkuRPCOutput.schema.json +1 -0
  79. package/dist/.pikku/schemas/schemas/PikkuSchedulerOutput.schema.json +1 -0
  80. package/dist/.pikku/schemas/schemas/PikkuSchemasOutput.schema.json +1 -0
  81. package/dist/bin/pikku.d.ts +1 -1
  82. package/dist/bin/pikku.js +32 -14
  83. package/dist/src/cli.wiring.d.ts +1 -0
  84. package/dist/src/cli.wiring.js +75 -0
  85. package/dist/src/functions/commands/all.d.ts +1 -0
  86. package/dist/src/functions/commands/all.js +104 -0
  87. package/dist/src/functions/commands/watch.d.ts +1 -0
  88. package/dist/src/functions/commands/watch.js +47 -0
  89. package/dist/src/functions/runtimes/nextjs/pikku-command-nextjs.d.ts +1 -0
  90. package/dist/src/{runtimes → functions/runtimes}/nextjs/pikku-command-nextjs.js +28 -9
  91. package/dist/src/functions/wirings/channels/pikku-channels.d.ts +1 -0
  92. package/dist/src/functions/wirings/channels/pikku-channels.js +24 -0
  93. package/dist/src/functions/wirings/channels/pikku-command-channel-types.d.ts +1 -0
  94. package/dist/src/functions/wirings/channels/pikku-command-channel-types.js +21 -0
  95. package/dist/src/functions/wirings/channels/pikku-command-channels-map.d.ts +1 -0
  96. package/dist/src/functions/wirings/channels/pikku-command-channels-map.js +23 -0
  97. package/dist/src/functions/wirings/channels/pikku-command-channels.d.ts +1 -0
  98. package/dist/src/functions/wirings/channels/pikku-command-channels.js +25 -0
  99. package/dist/src/functions/wirings/channels/pikku-command-websocket-typed.d.ts +1 -0
  100. package/dist/src/functions/wirings/channels/pikku-command-websocket-typed.js +24 -0
  101. package/dist/src/functions/wirings/channels/serialize-channel-types.d.ts +4 -0
  102. package/dist/src/functions/wirings/channels/serialize-channel-types.js +95 -0
  103. package/dist/src/{wirings → functions/wirings}/channels/serialize-typed-channel-map.js +2 -2
  104. package/dist/src/functions/wirings/cli/pikku-command-cli-entry.d.ts +1 -0
  105. package/dist/src/functions/wirings/cli/pikku-command-cli-entry.js +100 -0
  106. package/dist/src/functions/wirings/cli/pikku-command-cli-types.d.ts +1 -0
  107. package/dist/src/functions/wirings/cli/pikku-command-cli-types.js +33 -0
  108. package/dist/src/functions/wirings/cli/pikku-command-cli.d.ts +1 -0
  109. package/dist/src/functions/wirings/cli/pikku-command-cli.js +24 -0
  110. package/dist/src/functions/wirings/cli/serialize-channel-cli-client.d.ts +7 -0
  111. package/dist/src/functions/wirings/cli/serialize-channel-cli-client.js +54 -0
  112. package/dist/src/functions/wirings/cli/serialize-channel-cli.d.ts +9 -0
  113. package/dist/src/functions/wirings/cli/serialize-channel-cli.js +84 -0
  114. package/dist/src/functions/wirings/cli/serialize-cli-types.d.ts +4 -0
  115. package/dist/src/functions/wirings/cli/serialize-cli-types.js +74 -0
  116. package/dist/src/functions/wirings/cli/serialize-local-cli-bootstrap.d.ts +14 -0
  117. package/dist/src/functions/wirings/cli/serialize-local-cli-bootstrap.js +46 -0
  118. package/dist/src/functions/wirings/fetch/index.d.ts +1 -0
  119. package/dist/src/functions/wirings/fetch/index.js +24 -0
  120. package/dist/src/functions/wirings/functions/pikku-command-function-types-split.d.ts +1 -0
  121. package/dist/src/functions/wirings/functions/pikku-command-function-types-split.js +32 -0
  122. package/dist/src/functions/wirings/functions/pikku-command-function-types.d.ts +1 -0
  123. package/dist/src/functions/wirings/functions/pikku-command-function-types.js +20 -0
  124. package/dist/src/functions/wirings/functions/pikku-command-functions.d.ts +1 -0
  125. package/dist/src/functions/wirings/functions/pikku-command-functions.js +28 -0
  126. package/dist/src/{wirings → functions/wirings}/functions/pikku-command-services.d.ts +1 -2
  127. package/dist/src/{wirings → functions/wirings}/functions/pikku-command-services.js +27 -10
  128. package/dist/src/functions/wirings/functions/pikku-function-types.d.ts +1 -0
  129. package/dist/src/functions/wirings/functions/pikku-function-types.js +20 -0
  130. package/dist/src/functions/wirings/functions/schemas.d.ts +4 -0
  131. package/dist/src/functions/wirings/functions/schemas.js +22 -0
  132. package/dist/src/{wirings → functions/wirings}/functions/serialize-function-imports.js +4 -21
  133. package/dist/src/functions/wirings/functions/serialize-function-types.d.ts +4 -0
  134. package/dist/src/functions/wirings/functions/serialize-function-types.js +295 -0
  135. package/dist/src/functions/wirings/functions/serialize-pikku-types-hub.d.ts +4 -0
  136. package/dist/src/functions/wirings/functions/serialize-pikku-types-hub.js +31 -0
  137. package/dist/src/{wirings → functions/wirings}/http/openapi-spec-generator.d.ts +2 -1
  138. package/dist/src/{wirings → functions/wirings}/http/openapi-spec-generator.js +2 -2
  139. package/dist/src/functions/wirings/http/pikku-command-http-map.d.ts +1 -0
  140. package/dist/src/functions/wirings/http/pikku-command-http-map.js +23 -0
  141. package/dist/src/functions/wirings/http/pikku-command-http-routes.d.ts +1 -0
  142. package/dist/src/functions/wirings/http/pikku-command-http-routes.js +25 -0
  143. package/dist/src/functions/wirings/http/pikku-command-http-types.d.ts +1 -0
  144. package/dist/src/functions/wirings/http/pikku-command-http-types.js +21 -0
  145. package/dist/src/functions/wirings/http/pikku-command-openapi.d.ts +1 -0
  146. package/dist/src/functions/wirings/http/pikku-command-openapi.js +34 -0
  147. package/dist/src/functions/wirings/http/pikku-http-routes.d.ts +1 -0
  148. package/dist/src/functions/wirings/http/pikku-http-routes.js +25 -0
  149. package/dist/src/functions/wirings/http/serialize-http-types.d.ts +4 -0
  150. package/dist/src/functions/wirings/http/serialize-http-types.js +64 -0
  151. package/dist/src/{wirings → functions/wirings}/http/serialize-typed-http-map.js +2 -2
  152. package/dist/src/functions/wirings/mcp/pikku-command-mcp-json.d.ts +1 -0
  153. package/dist/src/functions/wirings/mcp/pikku-command-mcp-json.js +28 -0
  154. package/dist/src/functions/wirings/mcp/pikku-command-mcp-types.d.ts +1 -0
  155. package/dist/src/functions/wirings/mcp/pikku-command-mcp-types.js +21 -0
  156. package/dist/src/functions/wirings/mcp/pikku-command-mcp.d.ts +1 -0
  157. package/dist/src/{wirings → functions/wirings}/mcp/pikku-command-mcp.js +22 -5
  158. package/dist/src/{wirings → functions/wirings}/mcp/serialize-mcp-json.d.ts +1 -1
  159. package/dist/src/functions/wirings/mcp/serialize-mcp-types.d.ts +4 -0
  160. package/dist/src/functions/wirings/mcp/serialize-mcp-types.js +141 -0
  161. package/dist/src/functions/wirings/middleware/pikku-command-middleware.d.ts +1 -0
  162. package/dist/src/functions/wirings/middleware/pikku-command-middleware.js +38 -0
  163. package/dist/src/functions/wirings/middleware/serialize-middleware-groups-meta.d.ts +8 -0
  164. package/dist/src/functions/wirings/middleware/serialize-middleware-groups-meta.js +50 -0
  165. package/dist/src/functions/wirings/middleware/serialize-middleware-imports.d.ts +2 -0
  166. package/dist/src/functions/wirings/middleware/serialize-middleware-imports.js +43 -0
  167. package/dist/src/functions/wirings/queue/pikku-command-queue-map.d.ts +1 -0
  168. package/dist/src/functions/wirings/queue/pikku-command-queue-map.js +23 -0
  169. package/dist/src/functions/wirings/queue/pikku-command-queue-service.d.ts +1 -0
  170. package/dist/src/functions/wirings/queue/pikku-command-queue-service.js +24 -0
  171. package/dist/src/functions/wirings/queue/pikku-command-queue-types.d.ts +1 -0
  172. package/dist/src/functions/wirings/queue/pikku-command-queue-types.js +21 -0
  173. package/dist/src/functions/wirings/queue/pikku-command-queue.d.ts +1 -0
  174. package/dist/src/functions/wirings/queue/pikku-command-queue.js +26 -0
  175. package/dist/src/functions/wirings/queue/pikku-queue-map.d.ts +1 -0
  176. package/dist/src/functions/wirings/queue/pikku-queue-map.js +23 -0
  177. package/dist/src/functions/wirings/queue/pikku-queue.d.ts +1 -0
  178. package/dist/src/functions/wirings/queue/pikku-queue.js +25 -0
  179. package/dist/src/{wirings → functions/wirings}/queue/serialize-queue-map.js +2 -2
  180. package/dist/src/functions/wirings/queue/serialize-queue-types.d.ts +4 -0
  181. package/dist/src/functions/wirings/queue/serialize-queue-types.js +31 -0
  182. package/dist/src/functions/wirings/rpc/pikku-command-rpc-client.d.ts +1 -0
  183. package/dist/src/functions/wirings/rpc/pikku-command-rpc-client.js +25 -0
  184. package/dist/src/functions/wirings/rpc/pikku-command-rpc-map.d.ts +2 -0
  185. package/dist/src/functions/wirings/rpc/pikku-command-rpc-map.js +36 -0
  186. package/dist/src/functions/wirings/rpc/pikku-command-rpc.d.ts +1 -0
  187. package/dist/src/functions/wirings/rpc/pikku-command-rpc.js +22 -0
  188. package/dist/src/{wirings → functions/wirings}/rpc/serialize-typed-rpc-map.js +2 -2
  189. package/dist/src/functions/wirings/scheduler/pikku-command-scheduler-types.d.ts +1 -0
  190. package/dist/src/functions/wirings/scheduler/pikku-command-scheduler-types.js +21 -0
  191. package/dist/src/functions/wirings/scheduler/pikku-command-scheduler.d.ts +1 -0
  192. package/dist/src/functions/wirings/scheduler/pikku-command-scheduler.js +26 -0
  193. package/dist/src/functions/wirings/scheduler/serialize-scheduler-types.d.ts +4 -0
  194. package/dist/src/functions/wirings/scheduler/serialize-scheduler-types.js +29 -0
  195. package/dist/src/middleware/log-command-info-and-time.d.ts +19 -0
  196. package/dist/src/middleware/log-command-info-and-time.js +27 -0
  197. package/dist/src/serialize-pikku-types.js +2 -2
  198. package/dist/src/services/cli-logger-forwarder.service.d.ts +26 -0
  199. package/dist/src/services/cli-logger-forwarder.service.js +55 -0
  200. package/dist/src/services/cli-logger.service.d.ts +19 -0
  201. package/dist/src/services/cli-logger.service.js +66 -0
  202. package/dist/src/services.d.ts +15 -0
  203. package/dist/src/services.js +64 -0
  204. package/dist/src/utils/check-required-types.d.ts +10 -0
  205. package/dist/src/utils/check-required-types.js +31 -0
  206. package/dist/src/utils/custom-types-generator.d.ts +2 -0
  207. package/dist/src/utils/custom-types-generator.js +37 -0
  208. package/dist/src/utils/file-import-path.d.ts +1 -0
  209. package/dist/src/utils/file-import-path.js +43 -0
  210. package/dist/src/utils/file-imports-serializer.d.ts +1 -0
  211. package/dist/src/utils/file-imports-serializer.js +13 -0
  212. package/dist/src/utils/file-writer.d.ts +6 -0
  213. package/dist/src/utils/file-writer.js +40 -0
  214. package/dist/src/utils/generate-bootstrap-file.d.ts +3 -0
  215. package/dist/src/utils/generate-bootstrap-file.js +21 -0
  216. package/dist/src/utils/pikku-cli-config.d.ts +5 -0
  217. package/dist/src/utils/pikku-cli-config.js +243 -0
  218. package/dist/src/utils/pikku-files-and-methods.d.ts +21 -0
  219. package/dist/src/utils/pikku-files-and-methods.js +70 -0
  220. package/dist/src/{schema-generator.d.ts → utils/schema-generator.d.ts} +1 -1
  221. package/dist/src/{schema-generator.js → utils/schema-generator.js} +1 -1
  222. package/dist/src/{serialize-import-map.js → utils/serialize-import-map.js} +1 -1
  223. package/dist/tsconfig.tsbuildinfo +1 -1
  224. package/package.json +6 -6
  225. package/pikku.config.json +24 -0
  226. package/src/cli.wiring.ts +75 -0
  227. package/src/functions/commands/all.ts +141 -0
  228. package/src/functions/commands/watch.ts +58 -0
  229. package/src/functions/runtimes/nextjs/pikku-command-nextjs.ts +111 -0
  230. package/src/functions/wirings/channels/pikku-channels.ts +40 -0
  231. package/src/functions/wirings/channels/pikku-command-channel-types.ts +27 -0
  232. package/src/functions/wirings/channels/pikku-command-channels-map.ts +31 -0
  233. package/src/functions/wirings/channels/pikku-command-channels.ts +45 -0
  234. package/src/functions/wirings/channels/pikku-command-websocket-typed.ts +33 -0
  235. package/src/functions/wirings/channels/serialize-channel-types.ts +95 -0
  236. package/src/{wirings → functions/wirings}/channels/serialize-typed-channel-map.ts +2 -2
  237. package/src/functions/wirings/cli/pikku-command-cli-entry.ts +173 -0
  238. package/src/functions/wirings/cli/pikku-command-cli-types.ts +50 -0
  239. package/src/functions/wirings/cli/pikku-command-cli.ts +41 -0
  240. package/src/functions/wirings/cli/serialize-channel-cli-client.ts +72 -0
  241. package/src/functions/wirings/cli/serialize-channel-cli.ts +123 -0
  242. package/src/functions/wirings/cli/serialize-cli-types.ts +80 -0
  243. package/src/functions/wirings/cli/serialize-local-cli-bootstrap.ts +75 -0
  244. package/src/functions/wirings/fetch/index.ts +32 -0
  245. package/src/functions/wirings/functions/pikku-command-function-types-split.ts +51 -0
  246. package/src/functions/wirings/functions/pikku-command-function-types.ts +45 -0
  247. package/src/functions/wirings/functions/pikku-command-functions.ts +61 -0
  248. package/src/{wirings → functions/wirings}/functions/pikku-command-services.ts +41 -44
  249. package/src/functions/wirings/functions/pikku-function-types.ts +45 -0
  250. package/src/functions/wirings/functions/schemas.ts +47 -0
  251. package/src/{wirings → functions/wirings}/functions/serialize-function-imports.ts +4 -30
  252. package/src/functions/wirings/functions/serialize-function-types.ts +303 -0
  253. package/src/functions/wirings/functions/serialize-pikku-types-hub.ts +39 -0
  254. package/src/{wirings → functions/wirings}/http/openapi-spec-generator.ts +3 -1
  255. package/src/functions/wirings/http/pikku-command-http-map.ts +32 -0
  256. package/src/functions/wirings/http/pikku-command-http-routes.ts +41 -0
  257. package/src/functions/wirings/http/pikku-command-http-types.ts +27 -0
  258. package/src/functions/wirings/http/pikku-command-openapi.ts +57 -0
  259. package/src/functions/wirings/http/pikku-http-routes.ts +40 -0
  260. package/src/functions/wirings/http/serialize-http-types.ts +64 -0
  261. package/src/{wirings → functions/wirings}/http/serialize-typed-http-map.ts +2 -2
  262. package/src/functions/wirings/mcp/pikku-command-mcp-json.ts +38 -0
  263. package/src/functions/wirings/mcp/pikku-command-mcp-types.ts +27 -0
  264. package/src/{wirings → functions/wirings}/mcp/pikku-command-mcp.ts +55 -46
  265. package/src/{wirings → functions/wirings}/mcp/serialize-mcp-json.ts +1 -1
  266. package/src/functions/wirings/mcp/serialize-mcp-types.ts +141 -0
  267. package/src/functions/wirings/middleware/pikku-command-middleware.ts +65 -0
  268. package/src/functions/wirings/middleware/serialize-middleware-groups-meta.ts +61 -0
  269. package/src/functions/wirings/middleware/serialize-middleware-imports.ts +78 -0
  270. package/src/functions/wirings/queue/pikku-command-queue-map.ts +31 -0
  271. package/src/functions/wirings/queue/pikku-command-queue-service.ts +33 -0
  272. package/src/functions/wirings/queue/pikku-command-queue-types.ts +27 -0
  273. package/src/functions/wirings/queue/pikku-command-queue.ts +46 -0
  274. package/src/functions/wirings/queue/pikku-queue-map.ts +31 -0
  275. package/src/functions/wirings/queue/pikku-queue.ts +44 -0
  276. package/src/{wirings → functions/wirings}/queue/serialize-queue-map.ts +2 -2
  277. package/src/functions/wirings/queue/serialize-queue-types.ts +31 -0
  278. package/src/functions/wirings/rpc/pikku-command-rpc-client.ts +32 -0
  279. package/src/functions/wirings/rpc/pikku-command-rpc-map.ts +52 -0
  280. package/src/functions/wirings/rpc/pikku-command-rpc.ts +28 -0
  281. package/src/{wirings → functions/wirings}/rpc/serialize-typed-rpc-map.ts +2 -2
  282. package/src/functions/wirings/scheduler/pikku-command-scheduler-types.ts +27 -0
  283. package/src/functions/wirings/scheduler/pikku-command-scheduler.ts +46 -0
  284. package/src/functions/wirings/scheduler/serialize-scheduler-types.ts +29 -0
  285. package/src/middleware/log-command-info-and-time.ts +61 -0
  286. package/src/serialize-pikku-types.ts +2 -2
  287. package/src/services/cli-logger-forwarder.service.ts +77 -0
  288. package/src/services/cli-logger.service.ts +78 -0
  289. package/src/services.ts +111 -0
  290. package/src/utils/check-required-types.ts +53 -0
  291. package/src/utils/custom-types-generator.ts +49 -0
  292. package/src/{utils.test.ts → utils/file-import-path.test.ts} +1 -1
  293. package/src/utils/file-import-path.ts +53 -0
  294. package/src/utils/file-imports-serializer.ts +25 -0
  295. package/src/utils/file-writer.ts +56 -0
  296. package/src/utils/generate-bootstrap-file.ts +43 -0
  297. package/src/utils/pikku-cli-config.ts +356 -0
  298. package/src/utils/pikku-files-and-methods.ts +148 -0
  299. package/src/{schema-generator.ts → utils/schema-generator.ts} +3 -1
  300. package/src/{serialize-import-map.ts → utils/serialize-import-map.ts} +1 -1
  301. package/tsconfig.json +2 -2
  302. package/types/application-types.d.ts +20 -0
  303. package/types/config.d.ts +192 -0
  304. package/bin/pikku-all.ts +0 -349
  305. package/bin/pikku-fetch.ts +0 -27
  306. package/bin/pikku-nextjs.ts +0 -44
  307. package/bin/pikku-openapi.ts +0 -31
  308. package/bin/pikku-queue-service.ts +0 -28
  309. package/bin/pikku-rpc.ts +0 -28
  310. package/bin/pikku-schemas.ts +0 -31
  311. package/bin/pikku-websocket.ts +0 -28
  312. package/dist/bin/pikku-all.d.ts +0 -4
  313. package/dist/bin/pikku-all.js +0 -194
  314. package/dist/bin/pikku-fetch.d.ts +0 -4
  315. package/dist/bin/pikku-fetch.js +0 -19
  316. package/dist/bin/pikku-nextjs.d.ts +0 -4
  317. package/dist/bin/pikku-nextjs.js +0 -24
  318. package/dist/bin/pikku-openapi.d.ts +0 -2
  319. package/dist/bin/pikku-openapi.js +0 -19
  320. package/dist/bin/pikku-queue-service.d.ts +0 -4
  321. package/dist/bin/pikku-queue-service.js +0 -19
  322. package/dist/bin/pikku-rpc.d.ts +0 -4
  323. package/dist/bin/pikku-rpc.js +0 -19
  324. package/dist/bin/pikku-schemas.d.ts +0 -2
  325. package/dist/bin/pikku-schemas.js +0 -21
  326. package/dist/bin/pikku-websocket.d.ts +0 -4
  327. package/dist/bin/pikku-websocket.js +0 -19
  328. package/dist/src/inspector-glob.d.ts +0 -2
  329. package/dist/src/inspector-glob.js +0 -12
  330. package/dist/src/pikku-cli-config.d.ts +0 -56
  331. package/dist/src/pikku-cli-config.js +0 -203
  332. package/dist/src/pikku-command-schemas.d.ts +0 -2
  333. package/dist/src/pikku-command-schemas.js +0 -8
  334. package/dist/src/runtimes/nextjs/pikku-command-nextjs.d.ts +0 -2
  335. package/dist/src/schemas.d.ts +0 -2
  336. package/dist/src/schemas.js +0 -8
  337. package/dist/src/types.d.ts +0 -5
  338. package/dist/src/utils.d.ts +0 -60
  339. package/dist/src/utils.js +0 -248
  340. package/dist/src/wirings/channels/pikku-channels.d.ts +0 -2
  341. package/dist/src/wirings/channels/pikku-channels.js +0 -9
  342. package/dist/src/wirings/channels/pikku-command-channels-map.d.ts +0 -2
  343. package/dist/src/wirings/channels/pikku-command-channels-map.js +0 -8
  344. package/dist/src/wirings/channels/pikku-command-channels.d.ts +0 -2
  345. package/dist/src/wirings/channels/pikku-command-channels.js +0 -9
  346. package/dist/src/wirings/channels/pikku-command-websocket-typed.d.ts +0 -2
  347. package/dist/src/wirings/channels/pikku-command-websocket-typed.js +0 -15
  348. package/dist/src/wirings/fetch/index.d.ts +0 -2
  349. package/dist/src/wirings/fetch/index.js +0 -12
  350. package/dist/src/wirings/functions/pikku-command-function-types.d.ts +0 -2
  351. package/dist/src/wirings/functions/pikku-command-function-types.js +0 -13
  352. package/dist/src/wirings/functions/pikku-command-functions.d.ts +0 -2
  353. package/dist/src/wirings/functions/pikku-command-functions.js +0 -14
  354. package/dist/src/wirings/functions/pikku-function-types.d.ts +0 -2
  355. package/dist/src/wirings/functions/pikku-function-types.js +0 -13
  356. package/dist/src/wirings/http/pikku-command-http-map.d.ts +0 -2
  357. package/dist/src/wirings/http/pikku-command-http-map.js +0 -8
  358. package/dist/src/wirings/http/pikku-command-http-routes.d.ts +0 -2
  359. package/dist/src/wirings/http/pikku-command-http-routes.js +0 -9
  360. package/dist/src/wirings/http/pikku-command-openapi.d.ts +0 -2
  361. package/dist/src/wirings/http/pikku-command-openapi.js +0 -20
  362. package/dist/src/wirings/http/pikku-http-routes.d.ts +0 -2
  363. package/dist/src/wirings/http/pikku-http-routes.js +0 -9
  364. package/dist/src/wirings/mcp/pikku-command-mcp-json.d.ts +0 -2
  365. package/dist/src/wirings/mcp/pikku-command-mcp-json.js +0 -13
  366. package/dist/src/wirings/mcp/pikku-command-mcp.d.ts +0 -2
  367. package/dist/src/wirings/queue/pikku-command-queue-map.d.ts +0 -2
  368. package/dist/src/wirings/queue/pikku-command-queue-map.js +0 -8
  369. package/dist/src/wirings/queue/pikku-command-queue-service.d.ts +0 -2
  370. package/dist/src/wirings/queue/pikku-command-queue-service.js +0 -15
  371. package/dist/src/wirings/queue/pikku-command-queue.d.ts +0 -2
  372. package/dist/src/wirings/queue/pikku-command-queue.js +0 -10
  373. package/dist/src/wirings/queue/pikku-queue-map.d.ts +0 -2
  374. package/dist/src/wirings/queue/pikku-queue-map.js +0 -8
  375. package/dist/src/wirings/queue/pikku-queue.d.ts +0 -2
  376. package/dist/src/wirings/queue/pikku-queue.js +0 -10
  377. package/dist/src/wirings/rpc/pikku-command-rpc-client.d.ts +0 -2
  378. package/dist/src/wirings/rpc/pikku-command-rpc-client.js +0 -15
  379. package/dist/src/wirings/rpc/pikku-command-rpc-map.d.ts +0 -3
  380. package/dist/src/wirings/rpc/pikku-command-rpc-map.js +0 -14
  381. package/dist/src/wirings/rpc/pikku-command-rpc.d.ts +0 -2
  382. package/dist/src/wirings/rpc/pikku-command-rpc.js +0 -8
  383. package/dist/src/wirings/scheduler/pikku-command-scheduler.d.ts +0 -2
  384. package/dist/src/wirings/scheduler/pikku-command-scheduler.js +0 -10
  385. package/src/inspector-glob.ts +0 -30
  386. package/src/pikku-cli-config.ts +0 -387
  387. package/src/pikku-command-schemas.ts +0 -35
  388. package/src/runtimes/nextjs/pikku-command-nextjs.ts +0 -110
  389. package/src/schemas.ts +0 -35
  390. package/src/types.ts +0 -16
  391. package/src/utils.ts +0 -420
  392. package/src/wirings/channels/pikku-channels.ts +0 -41
  393. package/src/wirings/channels/pikku-command-channels-map.ts +0 -26
  394. package/src/wirings/channels/pikku-command-channels.ts +0 -39
  395. package/src/wirings/channels/pikku-command-websocket-typed.ts +0 -36
  396. package/src/wirings/fetch/index.ts +0 -33
  397. package/src/wirings/functions/pikku-command-function-types.ts +0 -53
  398. package/src/wirings/functions/pikku-command-functions.ts +0 -48
  399. package/src/wirings/functions/pikku-function-types.ts +0 -52
  400. package/src/wirings/http/pikku-command-http-map.ts +0 -27
  401. package/src/wirings/http/pikku-command-http-routes.ts +0 -40
  402. package/src/wirings/http/pikku-command-openapi.ts +0 -55
  403. package/src/wirings/http/pikku-http-routes.ts +0 -40
  404. package/src/wirings/mcp/pikku-command-mcp-json.ts +0 -33
  405. package/src/wirings/queue/pikku-command-queue-map.ts +0 -26
  406. package/src/wirings/queue/pikku-command-queue-service.ts +0 -36
  407. package/src/wirings/queue/pikku-command-queue.ts +0 -45
  408. package/src/wirings/queue/pikku-queue-map.ts +0 -26
  409. package/src/wirings/queue/pikku-queue.ts +0 -43
  410. package/src/wirings/rpc/pikku-command-rpc-client.ts +0 -35
  411. package/src/wirings/rpc/pikku-command-rpc-map.ts +0 -49
  412. package/src/wirings/rpc/pikku-command-rpc.ts +0 -24
  413. package/src/wirings/scheduler/pikku-command-scheduler.ts +0 -43
  414. /package/dist/{src/types.js → .pikku/cli/pikku-cli-wirings-meta.gen.d.ts} +0 -0
  415. /package/dist/src/{runtimes → functions/runtimes}/nextjs/serialize-nextjs-backend-wrapper.d.ts +0 -0
  416. /package/dist/src/{runtimes → functions/runtimes}/nextjs/serialize-nextjs-backend-wrapper.js +0 -0
  417. /package/dist/src/{runtimes → functions/runtimes}/nextjs/serialize-nextjs-http-wrapper.d.ts +0 -0
  418. /package/dist/src/{runtimes → functions/runtimes}/nextjs/serialize-nextjs-http-wrapper.js +0 -0
  419. /package/dist/src/{wirings → functions/wirings}/channels/serialize-typed-channel-map.d.ts +0 -0
  420. /package/dist/src/{wirings → functions/wirings}/channels/serialize-websocket-wrapper.d.ts +0 -0
  421. /package/dist/src/{wirings → functions/wirings}/channels/serialize-websocket-wrapper.js +0 -0
  422. /package/dist/src/{wirings → functions/wirings}/functions/serialize-function-imports.d.ts +0 -0
  423. /package/dist/src/{wirings → functions/wirings}/http/serialize-fetch-wrapper.d.ts +0 -0
  424. /package/dist/src/{wirings → functions/wirings}/http/serialize-fetch-wrapper.js +0 -0
  425. /package/dist/src/{wirings → functions/wirings}/http/serialize-typed-http-map.d.ts +0 -0
  426. /package/dist/src/{wirings → functions/wirings}/mcp/serialize-mcp-json.js +0 -0
  427. /package/dist/src/{wirings → functions/wirings}/queue/serialize-queue-map.d.ts +0 -0
  428. /package/dist/src/{wirings → functions/wirings}/queue/serialize-queue-meta.d.ts +0 -0
  429. /package/dist/src/{wirings → functions/wirings}/queue/serialize-queue-meta.js +0 -0
  430. /package/dist/src/{wirings → functions/wirings}/queue/serialize-queue-wrapper.d.ts +0 -0
  431. /package/dist/src/{wirings → functions/wirings}/queue/serialize-queue-wrapper.js +0 -0
  432. /package/dist/src/{wirings → functions/wirings}/rpc/serialize-rpc-wrapper.d.ts +0 -0
  433. /package/dist/src/{wirings → functions/wirings}/rpc/serialize-rpc-wrapper.js +0 -0
  434. /package/dist/src/{wirings → functions/wirings}/rpc/serialize-typed-rpc-map.d.ts +0 -0
  435. /package/dist/src/{wirings → functions/wirings}/scheduler/serialize-scheduler-meta.d.ts +0 -0
  436. /package/dist/src/{wirings → functions/wirings}/scheduler/serialize-scheduler-meta.js +0 -0
  437. /package/dist/src/{serialize-import-map.d.ts → utils/serialize-import-map.d.ts} +0 -0
  438. /package/src/{runtimes → functions/runtimes}/nextjs/serialize-nextjs-backend-wrapper.ts +0 -0
  439. /package/src/{runtimes → functions/runtimes}/nextjs/serialize-nextjs-http-wrapper.ts +0 -0
  440. /package/src/{wirings → functions/wirings}/channels/serialize-websocket-wrapper.ts +0 -0
  441. /package/src/{wirings → functions/wirings}/http/serialize-fetch-wrapper.ts +0 -0
  442. /package/src/{wirings → functions/wirings}/queue/serialize-queue-meta.ts +0 -0
  443. /package/src/{wirings → functions/wirings}/queue/serialize-queue-wrapper.ts +0 -0
  444. /package/src/{wirings → functions/wirings}/rpc/serialize-rpc-wrapper.ts +0 -0
  445. /package/src/{wirings → functions/wirings}/scheduler/serialize-scheduler-meta.ts +0 -0
@@ -0,0 +1,25 @@
1
+ import { pikkuSessionlessFunc } from '../../../../.pikku/pikku-types.gen.js';
2
+ import { serializeFileImports } from '../../../utils/file-imports-serializer.js';
3
+ import { writeFileInDir } from '../../../utils/file-writer.js';
4
+ import { logCommandInfoAndTime } from '../../../middleware/log-command-info-and-time.js';
5
+ export const pikkuChannels = pikkuSessionlessFunc({
6
+ func: async ({ logger, config, getInspectorState }) => {
7
+ const visitState = await getInspectorState();
8
+ const { channelsWiringFile, channelsWiringMetaFile, packageMappings } = config;
9
+ const { channels } = visitState;
10
+ await writeFileInDir(logger, channelsWiringFile, serializeFileImports('addChannel', channelsWiringFile, channels.files, packageMappings));
11
+ await writeFileInDir(logger, channelsWiringMetaFile, `import { pikkuState } from '@pikku/core'\npikkuState('channel', 'meta', ${JSON.stringify(channels.meta, null, 2)})`);
12
+ return true;
13
+ },
14
+ middleware: [
15
+ logCommandInfoAndTime({
16
+ commandStart: 'Finding Channels',
17
+ commandEnd: 'Found channels',
18
+ skipCondition: async ({ getInspectorState }) => {
19
+ const visitState = await getInspectorState();
20
+ return visitState.channels.files.size === 0;
21
+ },
22
+ skipMessage: 'none found',
23
+ }),
24
+ ],
25
+ });
@@ -0,0 +1 @@
1
+ export declare const pikkuWebSocketTyped: any;
@@ -0,0 +1,24 @@
1
+ import { pikkuSessionlessFunc } from '../../../../.pikku/pikku-types.gen.js';
2
+ import { getFileImportRelativePath } from '../../../utils/file-import-path.js';
3
+ import { writeFileInDir } from '../../../utils/file-writer.js';
4
+ import { logCommandInfoAndTime } from '../../../middleware/log-command-info-and-time.js';
5
+ import { serializeWebsocketWrapper } from './serialize-websocket-wrapper.js';
6
+ export const pikkuWebSocketTyped = pikkuSessionlessFunc({
7
+ func: async ({ logger, config }) => {
8
+ const { websocketFile, channelsMapDeclarationFile, packageMappings } = config;
9
+ if (!websocketFile) {
10
+ throw new Error("fetchFile is isn't set in the pikku config");
11
+ }
12
+ const channelsMapDeclarationPath = getFileImportRelativePath(websocketFile, channelsMapDeclarationFile, packageMappings);
13
+ const content = [serializeWebsocketWrapper(channelsMapDeclarationPath)];
14
+ await writeFileInDir(logger, websocketFile, content.join('\n'));
15
+ },
16
+ middleware: [
17
+ logCommandInfoAndTime({
18
+ commandStart: 'Generating websocket wrapper',
19
+ commandEnd: 'Generated websocket wrapper',
20
+ skipCondition: ({ config }) => config.websocketFile === undefined,
21
+ skipMessage: "websocketFile isn't set in the pikku config",
22
+ }),
23
+ ],
24
+ });
@@ -0,0 +1,4 @@
1
+ /**
2
+ * Generates type definitions for WebSocket channel wirings
3
+ */
4
+ export declare const serializeChannelTypes: (functionTypesImportPath: string) => string;
@@ -0,0 +1,95 @@
1
+ /**
2
+ * Generates type definitions for WebSocket channel wirings
3
+ */
4
+ export const serializeChannelTypes = (functionTypesImportPath) => {
5
+ return `/**
6
+ * This file was generated by the @pikku/cli
7
+ * Channel-specific type definitions for tree-shaking optimization
8
+ */
9
+
10
+ import { CoreChannel, wireChannel as wireChannelCore } from '@pikku/core/channel'
11
+ import { CorePikkuFunctionConfig } from '@pikku/core'
12
+ import { AssertHTTPWiringParams } from '@pikku/core/http'
13
+ import type { PikkuFunction, PikkuFunctionSessionless, PikkuPermission, PikkuMiddleware } from '${functionTypesImportPath}'
14
+
15
+ /**
16
+ * Type definition for WebSocket channels with typed data exchange.
17
+ * Supports connection, disconnection, and message handling.
18
+ *
19
+ * @template ChannelData - Type of data exchanged through the channel
20
+ * @template Channel - String literal type for the channel name
21
+ */
22
+ type ChannelWiringFunction<I, O, C = {}> = PikkuFunctionSessionless<I, O, C> | PikkuFunction<I, O, C>
23
+ type ChannelWiring<ChannelData, Channel extends string> = CoreChannel<ChannelData, Channel, ChannelWiringFunction<void, unknown> | ChannelWiringFunction<void, unknown, ChannelData>, ChannelWiringFunction<void, void> | ChannelWiringFunction<void, void, ChannelData>, ChannelWiringFunction<any, any> | ChannelWiringFunction<any, any, ChannelData>, PikkuPermission, PikkuMiddleware>
24
+
25
+ /**
26
+ * Creates a function that handles WebSocket channel connections.
27
+ * Called when a client connects to a channel.
28
+ *
29
+ * @template Out - Output type for connection response
30
+ * @template ChannelData - Type of data associated with the channel
31
+ * @param func - Function definition, either direct function or configuration object
32
+ * @returns The unwrapped function for internal use
33
+ */
34
+ export const pikkuChannelConnectionFunc = <Out = unknown, ChannelData = unknown>(
35
+ func:
36
+ | PikkuFunctionSessionless<void, Out, ChannelData>
37
+ | {
38
+ func: PikkuFunctionSessionless<void, Out, ChannelData>
39
+ name?: string
40
+ }
41
+ ) => {
42
+ return typeof func === 'function' ? func : func.func
43
+ }
44
+
45
+ /**
46
+ * Creates a function that handles WebSocket channel disconnections.
47
+ * Called when a client disconnects from a channel.
48
+ *
49
+ * @template ChannelData - Type of data associated with the channel
50
+ * @param func - Function definition, either direct function or configuration object
51
+ * @returns The unwrapped function for internal use
52
+ */
53
+ export const pikkuChannelDisconnectionFunc = <ChannelData = unknown>(
54
+ func:
55
+ | PikkuFunctionSessionless<void, void, ChannelData>
56
+ | {
57
+ func: PikkuFunction<void, void, ChannelData>
58
+ name?: string
59
+ }
60
+ ) => {
61
+ return typeof func === 'function' ? func : func.func
62
+ }
63
+
64
+ /**
65
+ * Creates a function that handles WebSocket channel messages.
66
+ * Called when a message is received on a channel.
67
+ *
68
+ * @template In - Input type for channel messages
69
+ * @template Out - Output type for channel responses
70
+ * @template ChannelData - Type of data associated with the channel
71
+ * @param func - Function definition, either direct function or configuration object
72
+ * @returns The unwrapped function for internal use
73
+ */
74
+ export const pikkuChannelFunc = <In = unknown, Out = unknown, ChannelData = unknown>(
75
+ func:
76
+ | PikkuFunctionSessionless<In, Out, ChannelData>
77
+ | CorePikkuFunctionConfig<PikkuFunction<In, Out, ChannelData>, PikkuPermission<In>>
78
+ ) => {
79
+ return typeof func === 'function' ? func : func.func
80
+ }
81
+
82
+ /**
83
+ * Registers a WebSocket channel with the Pikku framework.
84
+ *
85
+ * @template ChannelData - Type of data associated with the channel
86
+ * @template Channel - String literal type for the channel name
87
+ * @param channel - Channel definition with connection, disconnection, and message handlers
88
+ */
89
+ export const wireChannel = <ChannelData, Channel extends string>(
90
+ channel: ChannelWiring<ChannelData, Channel> & AssertHTTPWiringParams<ChannelData, Channel>
91
+ ) => {
92
+ wireChannelCore(channel as any) // TODO
93
+ }
94
+ `;
95
+ };
@@ -1,5 +1,5 @@
1
- import { serializeImportMap } from '../../serialize-import-map.js';
2
- import { generateCustomTypes } from '../../utils.js';
1
+ import { serializeImportMap } from '../../../utils/serialize-import-map.js';
2
+ import { generateCustomTypes } from '../../../utils/custom-types-generator.js';
3
3
  export const serializeTypedChannelsMap = (relativeToPath, packageMappings, typesMap, functionsMeta, channelsMeta) => {
4
4
  const { channels, requiredTypes } = generateChannels(functionsMeta, channelsMeta);
5
5
  typesMap.customTypes.forEach(({ references }) => {
@@ -0,0 +1 @@
1
+ export declare const pikkuCLIEntry: any;
@@ -0,0 +1,100 @@
1
+ import { pikkuSessionlessFunc } from '../../../../.pikku/pikku-types.gen.js';
2
+ import { writeFileInDir } from '../../../utils/file-writer.js';
3
+ import { checkRequiredTypes } from '../../../utils/check-required-types.js';
4
+ import { logCommandInfoAndTime } from '../../../middleware/log-command-info-and-time.js';
5
+ import { join } from 'node:path';
6
+ import { serializeLocalCLIBootstrap } from './serialize-local-cli-bootstrap.js';
7
+ import { serializeChannelCLI } from './serialize-channel-cli.js';
8
+ import { serializeChannelCLIClient } from './serialize-channel-cli-client.js';
9
+ export const pikkuCLIEntry = pikkuSessionlessFunc({
10
+ func: async ({ logger, config, getInspectorState }) => {
11
+ const visitState = await getInspectorState();
12
+ // Check if CLI entrypoints are configured
13
+ if (!config.cli?.entrypoints ||
14
+ Object.keys(config.cli.entrypoints).length === 0) {
15
+ logger.info({
16
+ message: 'No CLI entrypoints configured in config.cli.entrypoints, skipping CLI bootstrap generation',
17
+ type: 'skip',
18
+ });
19
+ return;
20
+ }
21
+ // Generate bootstrap files for each configured entrypoint
22
+ for (const [programName, entrypointConfigs] of Object.entries(config.cli.entrypoints)) {
23
+ const programMeta = visitState.cli.meta[programName];
24
+ if (!programMeta) {
25
+ logger.warn(`CLI program '${programName}' not found in metadata, skipping`);
26
+ continue;
27
+ }
28
+ // Normalize to array
29
+ const configs = Array.isArray(entrypointConfigs)
30
+ ? entrypointConfigs
31
+ : [entrypointConfigs];
32
+ for (const entrypointConfig of configs) {
33
+ // Normalize entrypoint config to get type
34
+ const entrypointType = typeof entrypointConfig === 'string'
35
+ ? 'cli'
36
+ : entrypointConfig.type || 'cli';
37
+ // Handle channel type entrypoint
38
+ if (entrypointType === 'channel') {
39
+ if (typeof entrypointConfig === 'string' ||
40
+ entrypointConfig.type !== 'channel') {
41
+ throw new Error('Channel entrypoint must be a channel type object');
42
+ }
43
+ const channelWirePath = entrypointConfig.wirePath;
44
+ const channelClientPath = entrypointConfig.path;
45
+ const channelName = entrypointConfig.name;
46
+ const channelRoute = entrypointConfig.route;
47
+ const channelWireFile = join(config.rootDir, channelWirePath);
48
+ const channelCode = serializeChannelCLI(programName, programMeta, channelWireFile, visitState.functions.files, config.packageMappings, config.channelsTypesFile, config.functionTypesFile, channelName, channelRoute);
49
+ await writeFileInDir(logger, channelWireFile, channelCode);
50
+ logger.debug(`Serialized CLI channel for ${programName}: ${channelWireFile}`);
51
+ // Generate client code if clientPath is provided
52
+ if (channelClientPath) {
53
+ const channelClientFile = join(config.rootDir, channelClientPath);
54
+ const clientCode = serializeChannelCLIClient(programName, programMeta, channelClientFile, config, config.bootstrapFiles.cli, channelRoute);
55
+ await writeFileInDir(logger, channelClientFile, clientCode);
56
+ logger.debug(`Serialized CLI channel client for ${programName}: ${channelClientFile}`);
57
+ }
58
+ continue;
59
+ }
60
+ // Handle CLI type entrypoint (default)
61
+ const entrypointPath = typeof entrypointConfig === 'string'
62
+ ? entrypointConfig
63
+ : entrypointConfig.type === 'cli'
64
+ ? entrypointConfig.path
65
+ : undefined;
66
+ if (!entrypointPath) {
67
+ throw new Error(`CLI entrypoint must have a path: ${JSON.stringify(entrypointConfig)}`);
68
+ }
69
+ const bootstrapFile = join(config.rootDir, entrypointPath);
70
+ // Get service factories for local mode
71
+ // Check for required types
72
+ checkRequiredTypes(visitState.filesAndMethodsErrors, {
73
+ config: true,
74
+ singletonServicesFactory: true,
75
+ sessionServicesFactory: true,
76
+ });
77
+ const { pikkuConfigFactory, singletonServicesFactory, sessionServicesFactory, } = visitState.filesAndMethods;
78
+ if (!pikkuConfigFactory ||
79
+ !singletonServicesFactory ||
80
+ !sessionServicesFactory) {
81
+ throw new Error('Required types not found');
82
+ }
83
+ const bootstrapCode = serializeLocalCLIBootstrap(programName, programMeta, bootstrapFile, config, pikkuConfigFactory, singletonServicesFactory, sessionServicesFactory);
84
+ await writeFileInDir(logger, bootstrapFile, bootstrapCode);
85
+ logger.debug(`Serialized CLI bootstrap for ${programName}: ${bootstrapFile}`);
86
+ }
87
+ }
88
+ },
89
+ middleware: [
90
+ logCommandInfoAndTime({
91
+ commandStart: 'Serializing CLI',
92
+ commandEnd: 'Serialized CLI',
93
+ skipCondition: async ({ getInspectorState }) => {
94
+ const visitState = await getInspectorState();
95
+ return visitState.cli.files.size === 0;
96
+ },
97
+ skipMessage: 'none found',
98
+ }),
99
+ ],
100
+ });
@@ -0,0 +1 @@
1
+ export declare const pikkuCLITypes: any;
@@ -0,0 +1,33 @@
1
+ import { pikkuSessionlessFunc } from '../../../../.pikku/pikku-types.gen.js';
2
+ import { writeFileInDir } from '../../../utils/file-writer.js';
3
+ import { getFileImportRelativePath } from '../../../utils/file-import-path.js';
4
+ import { logCommandInfoAndTime } from '../../../middleware/log-command-info-and-time.js';
5
+ import { serializeCLITypes } from './serialize-cli-types.js';
6
+ import { checkRequiredTypes } from '../../../utils/check-required-types.js';
7
+ export const pikkuCLITypes = pikkuSessionlessFunc({
8
+ func: async ({ logger, config, getInspectorState }) => {
9
+ const { cliTypesFile, functionTypesFile, packageMappings } = config;
10
+ const visitState = await getInspectorState();
11
+ const functionTypesImportPath = getFileImportRelativePath(cliTypesFile, functionTypesFile, packageMappings);
12
+ // Check for required types
13
+ checkRequiredTypes(visitState.filesAndMethodsErrors, {
14
+ userSessionType: true,
15
+ sessionServiceType: true,
16
+ singletonServicesType: true,
17
+ });
18
+ const { userSessionType, singletonServicesType } = visitState.filesAndMethods;
19
+ if (!userSessionType || !singletonServicesType) {
20
+ throw new Error('Required types not found');
21
+ }
22
+ const content = serializeCLITypes(functionTypesImportPath, `import type { ${userSessionType.type} } from '${getFileImportRelativePath(cliTypesFile, userSessionType.typePath, packageMappings)}'`, userSessionType.type, `import type { ${singletonServicesType.type} } from '${getFileImportRelativePath(cliTypesFile, singletonServicesType.typePath, packageMappings)}'`, singletonServicesType.type);
23
+ await writeFileInDir(logger, cliTypesFile, content);
24
+ },
25
+ middleware: [
26
+ logCommandInfoAndTime({
27
+ commandStart: 'Creating CLI types',
28
+ commandEnd: 'Created CLI types',
29
+ skipCondition: false,
30
+ skipMessage: '',
31
+ }),
32
+ ],
33
+ });
@@ -0,0 +1 @@
1
+ export declare const pikkuCLI: any;
@@ -0,0 +1,24 @@
1
+ import { pikkuSessionlessFunc } from '../../../../.pikku/pikku-types.gen.js';
2
+ import { serializeFileImports } from '../../../utils/file-imports-serializer.js';
3
+ import { writeFileInDir } from '../../../utils/file-writer.js';
4
+ import { logCommandInfoAndTime } from '../../../middleware/log-command-info-and-time.js';
5
+ export const pikkuCLI = pikkuSessionlessFunc({
6
+ func: async ({ logger, config, getInspectorState }) => {
7
+ const visitState = await getInspectorState();
8
+ const { cliWiringsFile, cliWiringMetaFile, packageMappings } = config;
9
+ const { cli } = visitState;
10
+ // Generate CLI wirings file
11
+ await writeFileInDir(logger, cliWiringsFile, serializeFileImports('wireCLI', cliWiringsFile, cli.files, packageMappings));
12
+ // Generate CLI metadata file
13
+ await writeFileInDir(logger, cliWiringMetaFile, `import { pikkuState } from '@pikku/core'\npikkuState('cli', 'meta', ${JSON.stringify(cli.meta, null, 2)})`);
14
+ return true;
15
+ },
16
+ middleware: [
17
+ logCommandInfoAndTime({
18
+ commandStart: 'Finding CLI commands',
19
+ commandEnd: 'Found CLI commands',
20
+ skipCondition: false,
21
+ skipMessage: 'none found',
22
+ }),
23
+ ],
24
+ });
@@ -0,0 +1,7 @@
1
+ import { CLIProgramMeta } from '@pikku/core';
2
+ import { Config } from '../../../../types/application-types.js';
3
+ /**
4
+ * Serializes a CLI-over-Channel client bootstrap file
5
+ * Similar to local CLI bootstrap but uses WebSocket connection
6
+ */
7
+ export declare function serializeChannelCLIClient(programName: string, programMeta: CLIProgramMeta, clientFile: string, config: Config, cliBootstrapPath: string, channelRoute?: string): string;
@@ -0,0 +1,54 @@
1
+ import { getFileImportRelativePath } from '../../../utils/file-import-path.js';
2
+ /**
3
+ * Serializes a CLI-over-Channel client bootstrap file
4
+ * Similar to local CLI bootstrap but uses WebSocket connection
5
+ */
6
+ export function serializeChannelCLIClient(programName, programMeta, clientFile, config, cliBootstrapPath, channelRoute) {
7
+ const capitalizedName = programName.charAt(0).toUpperCase() + programName.slice(1).replace(/-/g, '');
8
+ const finalChannelRoute = channelRoute || `/cli/${programName}`;
9
+ // Get relative import path to CLI bootstrap (for metadata)
10
+ const bootstrapImportPath = getFileImportRelativePath(clientFile, cliBootstrapPath, config.packageMappings);
11
+ // TODO: Collect renderer imports and create renderers map
12
+ // For now, renderers are not implemented
13
+ return `/**
14
+ * This file was generated by the @pikku/cli
15
+ */
16
+ import { executeCLIViaChannel } from '@pikku/core/cli/channel'
17
+ import { CorePikkuWebsocket } from '@pikku/websocket'
18
+ import '${bootstrapImportPath}'
19
+
20
+ /**
21
+ * ${capitalizedName} CLI Client (via WebSocket Channel)
22
+ * Executes CLI commands over a WebSocket connection
23
+ */
24
+ export async function ${capitalizedName}CLIClient(
25
+ url: string,
26
+ args?: string[]
27
+ ): Promise<void> {
28
+ // Create WebSocket connection
29
+ const pikkuWS = new CorePikkuWebsocket(url)
30
+
31
+ // TODO: Import and register renderers when renderer tracking is implemented
32
+ const renderers = {}
33
+
34
+ await executeCLIViaChannel({
35
+ programName: '${programName}',
36
+ pikkuWS,
37
+ args,
38
+ renderers,
39
+ })
40
+ }
41
+
42
+ // Export as default for easy importing
43
+ export default ${capitalizedName}CLIClient
44
+
45
+ // For direct execution (if this file is run directly)
46
+ if (import.meta.url === \`file://\${process.argv[1]}\`) {
47
+ const url = process.env.PIKKU_WS_URL || 'ws://localhost:3000${finalChannelRoute}'
48
+ ${capitalizedName}CLIClient(url).catch(error => {
49
+ console.error('Fatal error:', error.message)
50
+ process.exit(1)
51
+ })
52
+ }
53
+ `;
54
+ }
@@ -0,0 +1,9 @@
1
+ import { CLIProgramMeta } from '@pikku/core';
2
+ /**
3
+ * Serializes a wireChannel call from CLI metadata
4
+ * This creates a WebSocket backend for all CLI commands
5
+ */
6
+ export declare function serializeChannelCLI(programName: string, programMeta: CLIProgramMeta, channelFile: string, functionFiles: Map<string, {
7
+ path: string;
8
+ exportedName: string;
9
+ }>, packageMappings: Record<string, string>, channelTypesFile: string, functionTypesFile: string, channelName?: string, channelRoute?: string): string;
@@ -0,0 +1,84 @@
1
+ import { getFileImportRelativePath } from '../../../utils/file-import-path.js';
2
+ /**
3
+ * Serializes a wireChannel call from CLI metadata
4
+ * This creates a WebSocket backend for all CLI commands
5
+ */
6
+ export function serializeChannelCLI(programName, programMeta, channelFile, functionFiles, packageMappings, channelTypesFile, functionTypesFile, channelName, channelRoute) {
7
+ const finalChannelName = channelName || `${programName}-cli`;
8
+ const finalChannelRoute = channelRoute || `/cli/${programName}`;
9
+ // Flatten all commands into a single routing map
10
+ const commandMap = {};
11
+ const collectCommands = (commands, path = []) => {
12
+ for (const [name, cmd] of Object.entries(commands)) {
13
+ const fullPath = [...path, name];
14
+ const commandKey = fullPath.join('.');
15
+ if (cmd.pikkuFuncName) {
16
+ commandMap[commandKey] = {
17
+ pikkuFuncName: cmd.pikkuFuncName,
18
+ };
19
+ }
20
+ // Recursively process subcommands
21
+ if (cmd.subcommands) {
22
+ collectCommands(cmd.subcommands, fullPath);
23
+ }
24
+ }
25
+ };
26
+ collectCommands(programMeta.commands);
27
+ // Generate the wireChannel call
28
+ const commandEntries = Object.entries(commandMap)
29
+ .map(([commandKey, { pikkuFuncName }]) => {
30
+ return ` '${commandKey}': ${pikkuFuncName}`;
31
+ })
32
+ .join(',\n');
33
+ // Generate imports from function file locations
34
+ const funcNames = [
35
+ ...new Set(Object.values(commandMap).map((v) => v.pikkuFuncName)),
36
+ ];
37
+ const imports = funcNames
38
+ .map((pikkuFuncName) => {
39
+ const fileInfo = functionFiles.get(pikkuFuncName);
40
+ if (!fileInfo) {
41
+ throw new Error(`Function not found in files map: ${pikkuFuncName}`);
42
+ }
43
+ const importPath = getFileImportRelativePath(channelFile, fileInfo.path, packageMappings);
44
+ return `import { ${fileInfo.exportedName} } from '${importPath}'`;
45
+ })
46
+ .join('\n');
47
+ // Get relative paths to type files
48
+ const channelTypesPath = getFileImportRelativePath(channelFile, channelTypesFile, packageMappings);
49
+ const functionTypesPath = getFileImportRelativePath(channelFile, functionTypesFile, packageMappings);
50
+ return `/**
51
+ * This file was generated by the @pikku/cli
52
+ * WebSocket channel backend for '${programName}' CLI commands
53
+ */
54
+ import { wireChannel } from '${channelTypesPath}'
55
+ import { PikkuMiddleware } from '${functionTypesPath}'
56
+ ${imports}
57
+
58
+ // Middleware to close channel after command execution
59
+ const closeAfterExecution: PikkuMiddleware = async (_services, interaction, next) => {
60
+ try {
61
+ const result = await next()
62
+ return result
63
+ } finally {
64
+ // Close the channel after function completes
65
+ if (interaction.channel) {
66
+ await interaction.channel.close()
67
+ }
68
+ }
69
+ }
70
+
71
+ wireChannel({
72
+ name: '${finalChannelName}',
73
+ route: '${finalChannelRoute}',
74
+ auth: false,
75
+ middleware: [closeAfterExecution],
76
+ onMessageWiring: {
77
+ command: {
78
+ ${commandEntries}
79
+ }
80
+ },
81
+ tags: ['cli', '${programName}']
82
+ })
83
+ `;
84
+ }
@@ -0,0 +1,4 @@
1
+ /**
2
+ * Generates type definitions for CLI wirings
3
+ */
4
+ export declare const serializeCLITypes: (functionTypesImportPath: string, userSessionTypeImport: string, userSessionTypeName: string, singletonServicesTypeImport: string, singletonServicesTypeName: string) => string;
@@ -0,0 +1,74 @@
1
+ /**
2
+ * Generates type definitions for CLI wirings
3
+ */
4
+ export const serializeCLITypes = (functionTypesImportPath, userSessionTypeImport, userSessionTypeName, singletonServicesTypeImport, singletonServicesTypeName) => {
5
+ return `/**
6
+ * This file was generated by the @pikku/cli
7
+ * CLI-specific type definitions for tree-shaking optimization
8
+ */
9
+
10
+ import { CoreCLI, wireCLI as wireCLICore, CorePikkuCLIRender, CoreCLICommandConfig } from '@pikku/core'
11
+ import type { PikkuFunctionConfig, PikkuMiddleware } from '${functionTypesImportPath}'
12
+ ${userSessionTypeImport}
13
+ ${singletonServicesTypeImport}
14
+
15
+ ${singletonServicesTypeName !== 'SingletonServices' ? `type SingletonServices = ${singletonServicesTypeName}` : ''}
16
+ ${userSessionTypeName !== 'Session' ? `type Session = ${userSessionTypeName}` : ''}
17
+
18
+ /**
19
+ * Type-safe CLI renderer definition that can access your application's services.
20
+ * Use this to define custom renderers for CLI command output.
21
+ *
22
+ * @template Data - The output data type from the CLI command
23
+ * @template RequiredServices - The services required for this renderer
24
+ */
25
+ type PikkuCLIRender<Data, RequiredServices extends SingletonServices = SingletonServices> = CorePikkuCLIRender<Data, RequiredServices, Session>
26
+
27
+ /**
28
+ * CLI command configuration with project-specific types.
29
+ * Uses CoreCLICommandConfig from @pikku/core with local middleware and render types.
30
+ */
31
+ type CLICommandConfig<Func extends PikkuFunctionConfig<any, any>> = CoreCLICommandConfig<Func, PikkuMiddleware, PikkuCLIRender<any>>
32
+
33
+ /**
34
+ * Result type for CLI command configuration
35
+ */
36
+ type CLICommandResult<Func extends PikkuFunctionConfig<any, any>> = CLICommandConfig<Func>
37
+
38
+ /**
39
+ * Type definition for CLI applications with commands and global options.
40
+ *
41
+ * @template Commands - Type describing the command structure
42
+ * @template GlobalOptions - Type for global CLI options
43
+ */
44
+ type CLIWiring<Commands extends Record<string, CoreCLICommandConfig<any, PikkuMiddleware, PikkuCLIRender<any>>>, GlobalOptions> = CoreCLI<Commands, GlobalOptions, PikkuMiddleware, PikkuCLIRender<any>>
45
+
46
+ /**
47
+ * Registers a CLI application with the Pikku framework.
48
+ * Creates command-line interfaces with type-safe commands and options.
49
+ *
50
+ * @template Commands - Type describing the command structure
51
+ * @template GlobalOptions - Type for global CLI options
52
+ * @param cli - CLI definition with program name, commands, and global options
53
+ */
54
+ export const wireCLI = <Commands extends Record<string, CoreCLICommandConfig<any, PikkuMiddleware, PikkuCLIRender<any>>>, GlobalOptions>(
55
+ cli: CLIWiring<Commands, GlobalOptions>
56
+ ) => {
57
+ wireCLICore(cli as any)
58
+ }
59
+
60
+ /**
61
+ * Creates a CLI command definition with automatic option inference from the function's input type.
62
+ * This allows TypeScript to automatically derive CLI options from the function signature.
63
+ *
64
+ * @template Func - The Pikku function config type to create a CLI command for
65
+ * @param config - CLI command configuration
66
+ * @returns CLI command configuration with inferred types
67
+ */
68
+ export const pikkuCLICommand = <Func extends PikkuFunctionConfig<any, any>>(
69
+ config: CLICommandConfig<Func>
70
+ ): CLICommandResult<Func> => {
71
+ return config as any
72
+ }
73
+ `;
74
+ };
@@ -0,0 +1,14 @@
1
+ import { Config } from '../../../../types/application-types.js';
2
+ /**
3
+ * Serializes the local (in-program) CLI bootstrap code
4
+ */
5
+ export declare function serializeLocalCLIBootstrap(programName: string, _programMeta: any, bootstrapFile: string, config: Config, pikkuConfigFactory: {
6
+ file: string;
7
+ variable: string;
8
+ }, singletonServicesFactory: {
9
+ file: string;
10
+ variable: string;
11
+ }, sessionServicesFactory: {
12
+ file: string;
13
+ variable: string;
14
+ }): string;
@@ -0,0 +1,46 @@
1
+ import { getFileImportRelativePath } from '../../../utils/file-import-path.js';
2
+ /**
3
+ * Serializes the local (in-program) CLI bootstrap code
4
+ */
5
+ export function serializeLocalCLIBootstrap(programName, _programMeta, bootstrapFile, config, pikkuConfigFactory, singletonServicesFactory, sessionServicesFactory) {
6
+ const capitalizedName = programName.charAt(0).toUpperCase() + programName.slice(1).replace(/-/g, '');
7
+ // Get relative import paths
8
+ const pikkuConfigPath = getFileImportRelativePath(bootstrapFile, pikkuConfigFactory.file, config.packageMappings);
9
+ const singletonServicesPath = getFileImportRelativePath(bootstrapFile, singletonServicesFactory.file, config.packageMappings);
10
+ const sessionServicesPath = getFileImportRelativePath(bootstrapFile, sessionServicesFactory.file, config.packageMappings);
11
+ const cliBootstrapPath = getFileImportRelativePath(bootstrapFile, config.bootstrapFiles.cli, config.packageMappings);
12
+ return `/**
13
+ * This file was generated by the @pikku/cli
14
+ */
15
+ import { executeCLI } from '@pikku/core'
16
+ import { ${pikkuConfigFactory.variable} as createConfig } from '${pikkuConfigPath}'
17
+ import { ${singletonServicesFactory.variable} as createSingletonServices } from '${singletonServicesPath}'
18
+ import { ${sessionServicesFactory.variable} as createSessionServices } from '${sessionServicesPath}'
19
+ import '${cliBootstrapPath}'
20
+
21
+ /**
22
+ * ${capitalizedName} CLI function
23
+ * Handles command line arguments and executes the appropriate function
24
+ */
25
+ export async function ${capitalizedName}CLI(args?: string[]): Promise<void> {
26
+ await executeCLI({
27
+ programName: '${programName}',
28
+ args,
29
+ createConfig,
30
+ createSingletonServices,
31
+ createSessionServices,
32
+ })
33
+ }
34
+
35
+ // Export as default for easy importing
36
+ export default ${capitalizedName}CLI
37
+
38
+ // For direct execution (if this file is run directly)
39
+ if (import.meta.url === \`file://\${process.argv[1]}\`) {
40
+ ${capitalizedName}CLI().catch(error => {
41
+ console.error('Fatal error:', error.message)
42
+ process.exit(1)
43
+ })
44
+ }
45
+ `;
46
+ }
@@ -0,0 +1 @@
1
+ export declare const pikkuFetch: any;