@pikku/cli 0.9.15 → 0.10.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 (504) hide show
  1. package/.pikku/channel/pikku-channel-types.gen.ts +91 -0
  2. package/.pikku/channel/pikku-channels-map.gen.d.ts +44 -0
  3. package/.pikku/channel/pikku-channels-meta.gen.ts +5 -0
  4. package/.pikku/channel/pikku-channels.gen.ts +4 -0
  5. package/.pikku/cli/pikku-cli-channel.gen.ts +34 -0
  6. package/.pikku/cli/pikku-cli-client.gen.ts +43 -0
  7. package/.pikku/cli/pikku-cli-types.gen.ts +70 -0
  8. package/.pikku/cli/pikku-cli-wirings-meta.gen.ts +145 -0
  9. package/.pikku/cli/pikku-cli-wirings.gen.ts +6 -0
  10. package/.pikku/cli/pikku-cli.gen.ts +41 -0
  11. package/.pikku/function/pikku-function-types.gen.ts +440 -0
  12. package/.pikku/function/pikku-functions-meta.gen.ts +845 -0
  13. package/.pikku/function/pikku-functions-meta.min.gen.ts +181 -0
  14. package/.pikku/function/pikku-functions.gen.ts +76 -0
  15. package/.pikku/http/pikku-http-types.gen.ts +86 -0
  16. package/.pikku/http/pikku-http-wirings-map.gen.d.ts +43 -0
  17. package/.pikku/http/pikku-http-wirings-meta.gen.ts +13 -0
  18. package/.pikku/http/pikku-http-wirings.gen.ts +4 -0
  19. package/.pikku/mcp/pikku-mcp-types.gen.ts +140 -0
  20. package/.pikku/mcp/pikku-mcp-wirings-meta.gen.ts +7 -0
  21. package/.pikku/mcp/pikku-mcp-wirings.gen.ts +4 -0
  22. package/.pikku/mcp/pikku-mcp.gen.json +5 -0
  23. package/.pikku/pikku-bootstrap.gen.ts +19 -0
  24. package/.pikku/pikku-services.gen.ts +20 -0
  25. package/.pikku/pikku-types.gen.ts +27 -0
  26. package/.pikku/pikku-websocket.gen.ts +76 -0
  27. package/.pikku/queue/pikku-queue-types.gen.ts +27 -0
  28. package/.pikku/queue/pikku-queue-workers-wirings-map.gen.d.ts +57 -0
  29. package/.pikku/queue/pikku-queue-workers-wirings-meta.gen.ts +5 -0
  30. package/.pikku/queue/pikku-queue-workers-wirings.gen.ts +4 -0
  31. package/.pikku/rpc/pikku-rpc-wirings-map.gen.d.ts +47 -0
  32. package/.pikku/rpc/pikku-rpc-wirings-map.internal.gen.d.ts +82 -0
  33. package/.pikku/rpc/pikku-rpc-wirings-meta.internal.gen.ts +41 -0
  34. package/.pikku/scheduler/pikku-scheduler-types.gen.ts +25 -0
  35. package/.pikku/scheduler/pikku-schedulers-wirings-meta.gen.ts +5 -0
  36. package/.pikku/scheduler/pikku-schedulers-wirings.gen.ts +4 -0
  37. package/.pikku/schemas/register.gen.ts +51 -0
  38. package/.pikku/schemas/schemas/PikkuCLIConfig.schema.json +1 -0
  39. package/.pikku/schemas/schemas/PikkuCLIOutput.schema.json +1 -0
  40. package/.pikku/schemas/schemas/PikkuChannelsOutput.schema.json +1 -0
  41. package/.pikku/schemas/schemas/PikkuFunctionsOutput.schema.json +1 -0
  42. package/.pikku/schemas/schemas/PikkuHTTPOutput.schema.json +1 -0
  43. package/.pikku/schemas/schemas/PikkuMCPOutput.schema.json +1 -0
  44. package/.pikku/schemas/schemas/PikkuMiddlewareOutput.schema.json +1 -0
  45. package/.pikku/schemas/schemas/PikkuPermissionsOutput.schema.json +1 -0
  46. package/.pikku/schemas/schemas/PikkuQueueOutput.schema.json +1 -0
  47. package/.pikku/schemas/schemas/PikkuRPCOutput.schema.json +1 -0
  48. package/.pikku/schemas/schemas/PikkuSchedulerOutput.schema.json +1 -0
  49. package/.pikku/schemas/schemas/PikkuSchemasOutput.schema.json +1 -0
  50. package/CHANGELOG.md +15 -0
  51. package/bin/pikku.ts +97 -14
  52. package/build.sh +53 -0
  53. package/cli.schema.json +1 -382
  54. package/dist/.pikku/channel/pikku-channel-types.gen.d.ts +56 -0
  55. package/dist/.pikku/channel/pikku-channel-types.gen.js +52 -0
  56. package/dist/.pikku/channel/pikku-channels-meta.gen.js +5 -0
  57. package/dist/.pikku/channel/pikku-channels.gen.d.ts +4 -0
  58. package/dist/.pikku/channel/pikku-channels.gen.js +5 -0
  59. package/dist/.pikku/cli/pikku-cli-channel.gen.d.ts +1 -0
  60. package/dist/.pikku/cli/pikku-cli-channel.gen.js +33 -0
  61. package/dist/.pikku/cli/pikku-cli-client.gen.d.ts +10 -0
  62. package/dist/.pikku/cli/pikku-cli-client.gen.js +34 -0
  63. package/dist/.pikku/cli/pikku-cli-types.gen.d.ts +52 -0
  64. package/dist/.pikku/cli/pikku-cli-types.gen.js +31 -0
  65. package/dist/.pikku/cli/pikku-cli-wirings-meta.gen.d.ts +1 -0
  66. package/dist/.pikku/cli/pikku-cli-wirings-meta.gen.js +145 -0
  67. package/dist/.pikku/cli/pikku-cli-wirings.gen.d.ts +5 -0
  68. package/dist/.pikku/cli/pikku-cli-wirings.gen.js +6 -0
  69. package/dist/.pikku/cli/pikku-cli.gen.d.ts +10 -0
  70. package/dist/.pikku/cli/pikku-cli.gen.js +38 -0
  71. package/dist/.pikku/function/pikku-function-types.gen.d.ts +380 -0
  72. package/dist/.pikku/function/pikku-function-types.gen.js +271 -0
  73. package/dist/.pikku/function/pikku-functions-meta.gen.d.ts +1 -0
  74. package/dist/.pikku/function/pikku-functions-meta.gen.js +845 -0
  75. package/dist/.pikku/function/pikku-functions-meta.min.gen.d.ts +1 -0
  76. package/dist/.pikku/function/pikku-functions-meta.min.gen.js +181 -0
  77. package/dist/.pikku/function/pikku-functions.gen.d.ts +1 -0
  78. package/dist/.pikku/function/pikku-functions.gen.js +75 -0
  79. package/dist/.pikku/http/pikku-http-types.gen.d.ts +68 -0
  80. package/dist/.pikku/http/pikku-http-types.gen.js +62 -0
  81. package/dist/.pikku/http/pikku-http-wirings-meta.gen.d.ts +1 -0
  82. package/dist/.pikku/http/pikku-http-wirings-meta.gen.js +13 -0
  83. package/dist/.pikku/http/pikku-http-wirings.gen.d.ts +4 -0
  84. package/dist/.pikku/http/pikku-http-wirings.gen.js +5 -0
  85. package/dist/.pikku/mcp/pikku-mcp-types.gen.d.ts +91 -0
  86. package/dist/.pikku/mcp/pikku-mcp-types.gen.js +71 -0
  87. package/dist/.pikku/mcp/pikku-mcp-wirings-meta.gen.d.ts +1 -0
  88. package/dist/.pikku/mcp/pikku-mcp-wirings-meta.gen.js +7 -0
  89. package/dist/.pikku/mcp/pikku-mcp-wirings.gen.d.ts +4 -0
  90. package/dist/.pikku/mcp/pikku-mcp-wirings.gen.js +5 -0
  91. package/dist/.pikku/pikku-bootstrap.gen.d.ts +19 -0
  92. package/dist/.pikku/pikku-bootstrap.gen.js +19 -0
  93. package/dist/.pikku/pikku-services.gen.d.ts +13 -0
  94. package/dist/.pikku/pikku-services.gen.js +5 -0
  95. package/dist/.pikku/pikku-types.gen.d.ts +13 -0
  96. package/dist/.pikku/pikku-types.gen.js +20 -0
  97. package/dist/.pikku/pikku-websocket.gen.d.ts +31 -0
  98. package/dist/.pikku/pikku-websocket.gen.js +49 -0
  99. package/dist/.pikku/queue/pikku-queue-types.gen.d.ts +23 -0
  100. package/dist/.pikku/queue/pikku-queue-types.gen.js +16 -0
  101. package/dist/.pikku/queue/pikku-queue-workers-wirings-meta.gen.d.ts +1 -0
  102. package/dist/.pikku/queue/pikku-queue-workers-wirings-meta.gen.js +5 -0
  103. package/dist/.pikku/queue/pikku-queue-workers-wirings.gen.d.ts +4 -0
  104. package/dist/.pikku/queue/pikku-queue-workers-wirings.gen.js +5 -0
  105. package/dist/.pikku/rpc/pikku-rpc-wirings-meta.internal.gen.d.ts +1 -0
  106. package/dist/.pikku/rpc/pikku-rpc-wirings-meta.internal.gen.js +41 -0
  107. package/dist/.pikku/scheduler/pikku-scheduler-types.gen.d.ts +21 -0
  108. package/dist/.pikku/scheduler/pikku-scheduler-types.gen.js +16 -0
  109. package/dist/.pikku/scheduler/pikku-schedulers-wirings-meta.gen.d.ts +1 -0
  110. package/dist/.pikku/scheduler/pikku-schedulers-wirings-meta.gen.js +5 -0
  111. package/dist/.pikku/scheduler/pikku-schedulers-wirings.gen.d.ts +4 -0
  112. package/dist/.pikku/scheduler/pikku-schedulers-wirings.gen.js +5 -0
  113. package/dist/.pikku/schemas/register.gen.d.ts +1 -0
  114. package/dist/.pikku/schemas/register.gen.js +28 -0
  115. package/dist/.pikku/schemas/schemas/PikkuCLIConfig.schema.json +1 -0
  116. package/dist/.pikku/schemas/schemas/PikkuCLIOutput.schema.json +1 -0
  117. package/dist/.pikku/schemas/schemas/PikkuChannelsOutput.schema.json +1 -0
  118. package/dist/.pikku/schemas/schemas/PikkuFunctionsOutput.schema.json +1 -0
  119. package/dist/.pikku/schemas/schemas/PikkuHTTPOutput.schema.json +1 -0
  120. package/dist/.pikku/schemas/schemas/PikkuMCPOutput.schema.json +1 -0
  121. package/dist/.pikku/schemas/schemas/PikkuMiddlewareOutput.schema.json +1 -0
  122. package/dist/.pikku/schemas/schemas/PikkuPermissionsOutput.schema.json +1 -0
  123. package/dist/.pikku/schemas/schemas/PikkuQueueOutput.schema.json +1 -0
  124. package/dist/.pikku/schemas/schemas/PikkuRPCOutput.schema.json +1 -0
  125. package/dist/.pikku/schemas/schemas/PikkuSchedulerOutput.schema.json +1 -0
  126. package/dist/.pikku/schemas/schemas/PikkuSchemasOutput.schema.json +1 -0
  127. package/dist/bin/pikku.js +63 -14
  128. package/dist/src/cli.wiring.d.ts +1 -0
  129. package/dist/src/cli.wiring.js +99 -0
  130. package/dist/src/functions/commands/all.d.ts +1 -0
  131. package/dist/src/functions/commands/all.js +114 -0
  132. package/dist/src/functions/commands/watch.d.ts +1 -0
  133. package/dist/src/functions/commands/watch.js +47 -0
  134. package/dist/src/functions/runtimes/nextjs/pikku-command-nextjs.d.ts +1 -0
  135. package/dist/src/{runtimes → functions/runtimes}/nextjs/pikku-command-nextjs.js +33 -12
  136. package/dist/src/functions/runtimes/nextjs/serialize-nextjs-backend-wrapper.d.ts +1 -0
  137. package/dist/src/{runtimes → functions/runtimes}/nextjs/serialize-nextjs-backend-wrapper.js +2 -2
  138. package/dist/src/functions/wirings/channels/pikku-channels.d.ts +1 -0
  139. package/dist/src/functions/wirings/channels/pikku-channels.js +19 -0
  140. package/dist/src/functions/wirings/channels/pikku-command-channel-types.d.ts +1 -0
  141. package/dist/src/functions/wirings/channels/pikku-command-channel-types.js +19 -0
  142. package/dist/src/functions/wirings/channels/pikku-command-channels-map.d.ts +1 -0
  143. package/dist/src/functions/wirings/channels/pikku-command-channels-map.js +18 -0
  144. package/dist/src/functions/wirings/channels/pikku-command-channels.d.ts +1 -0
  145. package/dist/src/functions/wirings/channels/pikku-command-channels.js +20 -0
  146. package/dist/src/functions/wirings/channels/pikku-command-websocket-typed.d.ts +1 -0
  147. package/dist/src/functions/wirings/channels/pikku-command-websocket-typed.js +27 -0
  148. package/dist/src/functions/wirings/channels/serialize-channel-types.d.ts +4 -0
  149. package/dist/src/functions/wirings/channels/serialize-channel-types.js +94 -0
  150. package/dist/src/{wirings → functions/wirings}/channels/serialize-typed-channel-map.js +6 -3
  151. package/dist/src/functions/wirings/cli/pikku-command-cli-entry.d.ts +1 -0
  152. package/dist/src/functions/wirings/cli/pikku-command-cli-entry.js +123 -0
  153. package/dist/src/functions/wirings/cli/pikku-command-cli-types.d.ts +1 -0
  154. package/dist/src/functions/wirings/cli/pikku-command-cli-types.js +31 -0
  155. package/dist/src/functions/wirings/cli/pikku-command-cli.d.ts +1 -0
  156. package/dist/src/functions/wirings/cli/pikku-command-cli.js +22 -0
  157. package/dist/src/functions/wirings/cli/serialize-channel-cli-client.d.ts +11 -0
  158. package/dist/src/functions/wirings/cli/serialize-channel-cli-client.js +131 -0
  159. package/dist/src/functions/wirings/cli/serialize-channel-cli.d.ts +9 -0
  160. package/dist/src/functions/wirings/cli/serialize-channel-cli.js +67 -0
  161. package/dist/src/functions/wirings/cli/serialize-cli-types.d.ts +4 -0
  162. package/dist/src/functions/wirings/cli/serialize-cli-types.js +73 -0
  163. package/dist/src/functions/wirings/cli/serialize-local-cli-bootstrap.d.ts +14 -0
  164. package/dist/src/functions/wirings/cli/serialize-local-cli-bootstrap.js +51 -0
  165. package/dist/src/functions/wirings/fetch/index.d.ts +1 -0
  166. package/dist/src/functions/wirings/fetch/index.js +27 -0
  167. package/dist/src/functions/wirings/functions/pikku-command-function-types-split.d.ts +1 -0
  168. package/dist/src/functions/wirings/functions/pikku-command-function-types-split.js +33 -0
  169. package/dist/src/functions/wirings/functions/pikku-command-function-types.d.ts +1 -0
  170. package/dist/src/functions/wirings/functions/pikku-command-function-types.js +18 -0
  171. package/dist/src/functions/wirings/functions/pikku-command-functions.d.ts +1 -0
  172. package/dist/src/functions/wirings/functions/pikku-command-functions.js +26 -0
  173. package/dist/src/functions/wirings/functions/pikku-command-services.d.ts +2 -0
  174. package/dist/src/{wirings → functions/wirings}/functions/pikku-command-services.js +36 -29
  175. package/dist/src/functions/wirings/functions/pikku-function-types.d.ts +1 -0
  176. package/dist/src/functions/wirings/functions/pikku-function-types.js +18 -0
  177. package/dist/src/functions/wirings/functions/schemas.d.ts +4 -0
  178. package/dist/src/functions/wirings/functions/schemas.js +20 -0
  179. package/dist/src/{wirings → functions/wirings}/functions/serialize-function-imports.js +4 -21
  180. package/dist/src/functions/wirings/functions/serialize-function-types.d.ts +4 -0
  181. package/dist/src/functions/wirings/functions/serialize-function-types.js +443 -0
  182. package/dist/src/functions/wirings/functions/serialize-pikku-types-hub.d.ts +4 -0
  183. package/dist/src/functions/wirings/functions/serialize-pikku-types-hub.js +30 -0
  184. package/dist/src/{wirings → functions/wirings}/http/openapi-spec-generator.d.ts +4 -2
  185. package/dist/src/{wirings → functions/wirings}/http/openapi-spec-generator.js +2 -2
  186. package/dist/src/functions/wirings/http/pikku-command-http-map.d.ts +1 -0
  187. package/dist/src/functions/wirings/http/pikku-command-http-map.js +18 -0
  188. package/dist/src/functions/wirings/http/pikku-command-http-routes.d.ts +1 -0
  189. package/dist/src/functions/wirings/http/pikku-command-http-routes.js +20 -0
  190. package/dist/src/functions/wirings/http/pikku-command-http-types.d.ts +1 -0
  191. package/dist/src/functions/wirings/http/pikku-command-http-types.js +19 -0
  192. package/dist/src/functions/wirings/http/pikku-command-openapi.d.ts +1 -0
  193. package/dist/src/functions/wirings/http/pikku-command-openapi.js +37 -0
  194. package/dist/src/functions/wirings/http/pikku-http-routes.d.ts +1 -0
  195. package/dist/src/functions/wirings/http/pikku-http-routes.js +20 -0
  196. package/dist/src/functions/wirings/http/serialize-http-types.d.ts +4 -0
  197. package/dist/src/functions/wirings/http/serialize-http-types.js +89 -0
  198. package/dist/src/{wirings → functions/wirings}/http/serialize-typed-http-map.js +2 -2
  199. package/dist/src/functions/wirings/mcp/pikku-command-mcp-json.d.ts +1 -0
  200. package/dist/src/functions/wirings/mcp/pikku-command-mcp-json.js +23 -0
  201. package/dist/src/functions/wirings/mcp/pikku-command-mcp-types.d.ts +1 -0
  202. package/dist/src/functions/wirings/mcp/pikku-command-mcp-types.js +19 -0
  203. package/dist/src/functions/wirings/mcp/pikku-command-mcp.d.ts +1 -0
  204. package/dist/src/{wirings → functions/wirings}/mcp/pikku-command-mcp.js +17 -5
  205. package/dist/src/{wirings → functions/wirings}/mcp/serialize-mcp-json.d.ts +2 -2
  206. package/dist/src/functions/wirings/mcp/serialize-mcp-types.d.ts +4 -0
  207. package/dist/src/functions/wirings/mcp/serialize-mcp-types.js +143 -0
  208. package/dist/src/functions/wirings/middleware/pikku-command-middleware.d.ts +1 -0
  209. package/dist/src/functions/wirings/middleware/pikku-command-middleware.js +36 -0
  210. package/dist/src/functions/wirings/middleware/serialize-middleware-groups-meta.d.ts +8 -0
  211. package/dist/src/functions/wirings/middleware/serialize-middleware-groups-meta.js +44 -0
  212. package/dist/src/functions/wirings/middleware/serialize-middleware-imports.d.ts +2 -0
  213. package/dist/src/functions/wirings/middleware/serialize-middleware-imports.js +43 -0
  214. package/dist/src/functions/wirings/permissions/pikku-command-permissions.d.ts +1 -0
  215. package/dist/src/functions/wirings/permissions/pikku-command-permissions.js +28 -0
  216. package/dist/src/functions/wirings/permissions/serialize-permissions-imports.d.ts +2 -0
  217. package/dist/src/functions/wirings/permissions/serialize-permissions-imports.js +43 -0
  218. package/dist/src/functions/wirings/queue/pikku-command-queue-map.d.ts +1 -0
  219. package/dist/src/functions/wirings/queue/pikku-command-queue-map.js +18 -0
  220. package/dist/src/functions/wirings/queue/pikku-command-queue-service.d.ts +1 -0
  221. package/dist/src/functions/wirings/queue/pikku-command-queue-service.js +27 -0
  222. package/dist/src/functions/wirings/queue/pikku-command-queue-types.d.ts +1 -0
  223. package/dist/src/functions/wirings/queue/pikku-command-queue-types.js +19 -0
  224. package/dist/src/functions/wirings/queue/pikku-command-queue.d.ts +1 -0
  225. package/dist/src/functions/wirings/queue/pikku-command-queue.js +21 -0
  226. package/dist/src/functions/wirings/queue/pikku-queue-map.d.ts +1 -0
  227. package/dist/src/functions/wirings/queue/pikku-queue-map.js +18 -0
  228. package/dist/src/functions/wirings/queue/pikku-queue.d.ts +1 -0
  229. package/dist/src/functions/wirings/queue/pikku-queue.js +21 -0
  230. package/dist/src/{wirings → functions/wirings}/queue/serialize-queue-map.js +2 -2
  231. package/dist/src/{wirings → functions/wirings}/queue/serialize-queue-meta.d.ts +1 -1
  232. package/dist/src/functions/wirings/queue/serialize-queue-types.d.ts +4 -0
  233. package/dist/src/functions/wirings/queue/serialize-queue-types.js +30 -0
  234. package/dist/src/functions/wirings/rpc/pikku-command-rpc-client.d.ts +1 -0
  235. package/dist/src/functions/wirings/rpc/pikku-command-rpc-client.js +27 -0
  236. package/dist/src/functions/wirings/rpc/pikku-command-rpc-map.d.ts +2 -0
  237. package/dist/src/functions/wirings/rpc/pikku-command-rpc-map.js +32 -0
  238. package/dist/src/functions/wirings/rpc/pikku-command-rpc.d.ts +1 -0
  239. package/dist/src/functions/wirings/rpc/pikku-command-rpc.js +20 -0
  240. package/dist/src/{wirings → functions/wirings}/rpc/serialize-typed-rpc-map.js +2 -2
  241. package/dist/src/functions/wirings/scheduler/pikku-command-scheduler-types.d.ts +1 -0
  242. package/dist/src/functions/wirings/scheduler/pikku-command-scheduler-types.js +19 -0
  243. package/dist/src/functions/wirings/scheduler/pikku-command-scheduler.d.ts +1 -0
  244. package/dist/src/functions/wirings/scheduler/pikku-command-scheduler.js +21 -0
  245. package/dist/src/functions/wirings/scheduler/serialize-scheduler-types.d.ts +4 -0
  246. package/dist/src/functions/wirings/scheduler/serialize-scheduler-types.js +28 -0
  247. package/dist/src/middleware/log-command-info-and-time.d.ts +13 -0
  248. package/dist/src/middleware/log-command-info-and-time.js +15 -0
  249. package/dist/src/services/cli-logger-forwarder.service.d.ts +30 -0
  250. package/dist/src/services/cli-logger-forwarder.service.js +64 -0
  251. package/dist/src/services/cli-logger.service.d.ts +23 -0
  252. package/dist/src/services/cli-logger.service.js +77 -0
  253. package/dist/src/services.d.ts +20 -0
  254. package/dist/src/services.js +162 -0
  255. package/dist/src/utils/check-required-types.d.ts +10 -0
  256. package/dist/src/utils/check-required-types.js +31 -0
  257. package/dist/src/utils/custom-types-generator.d.ts +2 -0
  258. package/dist/src/utils/custom-types-generator.js +43 -0
  259. package/dist/src/utils/file-import-path.d.ts +1 -0
  260. package/dist/src/utils/file-import-path.js +43 -0
  261. package/dist/src/utils/file-imports-serializer.d.ts +1 -0
  262. package/dist/src/utils/file-imports-serializer.js +13 -0
  263. package/dist/src/utils/file-writer.d.ts +9 -0
  264. package/dist/src/utils/file-writer.js +50 -0
  265. package/dist/src/utils/generate-bootstrap-file.d.ts +3 -0
  266. package/dist/src/utils/generate-bootstrap-file.js +21 -0
  267. package/dist/src/utils/get-cli-version.d.ts +5 -0
  268. package/dist/src/utils/get-cli-version.js +27 -0
  269. package/dist/src/utils/pikku-cli-config.d.ts +4 -0
  270. package/dist/src/utils/pikku-cli-config.js +224 -0
  271. package/dist/src/utils/pikku-files-and-methods.d.ts +21 -0
  272. package/dist/src/utils/pikku-files-and-methods.js +70 -0
  273. package/dist/src/{schema-generator.d.ts → utils/schema-generator.d.ts} +1 -1
  274. package/dist/src/{schema-generator.js → utils/schema-generator.js} +4 -3
  275. package/dist/src/{serialize-import-map.js → utils/serialize-import-map.js} +1 -4
  276. package/dist/tsconfig.tsbuildinfo +1 -1
  277. package/package.json +13 -11
  278. package/pikku.config.json +26 -0
  279. package/src/cli.wiring.ts +102 -0
  280. package/src/functions/commands/all.ts +153 -0
  281. package/src/functions/commands/watch.ts +58 -0
  282. package/src/functions/runtimes/nextjs/pikku-command-nextjs.ts +111 -0
  283. package/src/{runtimes → functions/runtimes}/nextjs/serialize-nextjs-backend-wrapper.ts +2 -2
  284. package/src/functions/wirings/channels/pikku-channels.ts +35 -0
  285. package/src/functions/wirings/channels/pikku-command-channel-types.ts +25 -0
  286. package/src/functions/wirings/channels/pikku-command-channels-map.ts +26 -0
  287. package/src/functions/wirings/channels/pikku-command-channels.ts +40 -0
  288. package/src/functions/wirings/channels/pikku-command-websocket-typed.ts +37 -0
  289. package/src/functions/wirings/channels/serialize-channel-types.ts +94 -0
  290. package/src/{wirings → functions/wirings}/channels/serialize-typed-channel-map.ts +6 -3
  291. package/src/functions/wirings/cli/pikku-command-cli-entry.ts +216 -0
  292. package/src/functions/wirings/cli/pikku-command-cli-types.ts +48 -0
  293. package/src/functions/wirings/cli/pikku-command-cli.ts +39 -0
  294. package/src/functions/wirings/cli/serialize-channel-cli-client.ts +171 -0
  295. package/src/functions/wirings/cli/serialize-channel-cli.ts +102 -0
  296. package/src/functions/wirings/cli/serialize-cli-types.ts +79 -0
  297. package/src/functions/wirings/cli/serialize-local-cli-bootstrap.ts +80 -0
  298. package/src/functions/wirings/fetch/index.ts +36 -0
  299. package/src/functions/wirings/functions/pikku-command-function-types-split.ts +60 -0
  300. package/src/functions/wirings/functions/pikku-command-function-types.ts +43 -0
  301. package/src/functions/wirings/functions/pikku-command-functions.ts +59 -0
  302. package/src/functions/wirings/functions/pikku-command-services.ts +111 -0
  303. package/src/functions/wirings/functions/pikku-function-types.ts +43 -0
  304. package/src/functions/wirings/functions/schemas.ts +45 -0
  305. package/src/{wirings → functions/wirings}/functions/serialize-function-imports.ts +4 -30
  306. package/src/functions/wirings/functions/serialize-function-types.ts +453 -0
  307. package/src/functions/wirings/functions/serialize-pikku-types-hub.ts +38 -0
  308. package/src/{wirings → functions/wirings}/http/openapi-spec-generator.ts +5 -2
  309. package/src/functions/wirings/http/pikku-command-http-map.ts +27 -0
  310. package/src/functions/wirings/http/pikku-command-http-routes.ts +36 -0
  311. package/src/functions/wirings/http/pikku-command-http-types.ts +25 -0
  312. package/src/functions/wirings/http/pikku-command-openapi.ts +62 -0
  313. package/src/functions/wirings/http/pikku-http-routes.ts +35 -0
  314. package/src/functions/wirings/http/serialize-http-types.ts +89 -0
  315. package/src/{wirings → functions/wirings}/http/serialize-typed-http-map.ts +2 -2
  316. package/src/functions/wirings/mcp/pikku-command-mcp-json.ts +33 -0
  317. package/src/functions/wirings/mcp/pikku-command-mcp-types.ts +25 -0
  318. package/src/{wirings → functions/wirings}/mcp/pikku-command-mcp.ts +50 -46
  319. package/src/{wirings → functions/wirings}/mcp/serialize-mcp-json.ts +2 -2
  320. package/src/functions/wirings/mcp/serialize-mcp-types.ts +143 -0
  321. package/src/functions/wirings/middleware/pikku-command-middleware.ts +63 -0
  322. package/src/functions/wirings/middleware/serialize-middleware-groups-meta.ts +55 -0
  323. package/src/functions/wirings/middleware/serialize-middleware-imports.ts +78 -0
  324. package/src/functions/wirings/permissions/pikku-command-permissions.ts +49 -0
  325. package/src/functions/wirings/permissions/serialize-permissions-imports.test.ts +274 -0
  326. package/src/functions/wirings/permissions/serialize-permissions-imports.ts +78 -0
  327. package/src/functions/wirings/queue/pikku-command-queue-map.ts +26 -0
  328. package/src/functions/wirings/queue/pikku-command-queue-service.ts +37 -0
  329. package/src/functions/wirings/queue/pikku-command-queue-types.ts +25 -0
  330. package/src/functions/wirings/queue/pikku-command-queue.ts +41 -0
  331. package/src/functions/wirings/queue/pikku-queue-map.ts +26 -0
  332. package/src/functions/wirings/queue/pikku-queue.ts +41 -0
  333. package/src/{wirings → functions/wirings}/queue/serialize-queue-map.ts +2 -2
  334. package/src/{wirings → functions/wirings}/queue/serialize-queue-meta.ts +1 -1
  335. package/src/functions/wirings/queue/serialize-queue-types.ts +30 -0
  336. package/src/functions/wirings/rpc/pikku-command-rpc-client.ts +35 -0
  337. package/src/functions/wirings/rpc/pikku-command-rpc-map.ts +48 -0
  338. package/src/functions/wirings/rpc/pikku-command-rpc.ts +26 -0
  339. package/src/{wirings → functions/wirings}/rpc/serialize-typed-rpc-map.ts +2 -2
  340. package/src/functions/wirings/scheduler/pikku-command-scheduler-types.ts +25 -0
  341. package/src/functions/wirings/scheduler/pikku-command-scheduler.ts +41 -0
  342. package/src/functions/wirings/scheduler/serialize-scheduler-types.ts +28 -0
  343. package/src/middleware/log-command-info-and-time.ts +35 -0
  344. package/src/services/cli-logger-forwarder.service.ts +90 -0
  345. package/src/services/cli-logger.service.ts +93 -0
  346. package/src/services.ts +240 -0
  347. package/src/utils/check-required-types.ts +53 -0
  348. package/src/utils/custom-types-generator.ts +55 -0
  349. package/src/{utils.test.ts → utils/file-import-path.test.ts} +1 -1
  350. package/src/utils/file-import-path.ts +53 -0
  351. package/src/utils/file-imports-serializer.ts +25 -0
  352. package/src/utils/file-writer.ts +72 -0
  353. package/src/utils/generate-bootstrap-file.ts +43 -0
  354. package/src/utils/get-cli-version.ts +28 -0
  355. package/src/utils/pikku-cli-config.ts +327 -0
  356. package/src/utils/pikku-files-and-methods.ts +148 -0
  357. package/src/{schema-generator.ts → utils/schema-generator.ts} +10 -4
  358. package/src/{serialize-import-map.ts → utils/serialize-import-map.ts} +1 -5
  359. package/tsconfig.json +2 -2
  360. package/types/application-types.d.ts +23 -0
  361. package/types/config.d.ts +204 -0
  362. package/bin/pikku-all.ts +0 -349
  363. package/bin/pikku-fetch.ts +0 -27
  364. package/bin/pikku-nextjs.ts +0 -44
  365. package/bin/pikku-openapi.ts +0 -31
  366. package/bin/pikku-queue-service.ts +0 -28
  367. package/bin/pikku-rpc.ts +0 -28
  368. package/bin/pikku-schemas.ts +0 -31
  369. package/bin/pikku-websocket.ts +0 -28
  370. package/dist/bin/pikku-all.d.ts +0 -4
  371. package/dist/bin/pikku-all.js +0 -194
  372. package/dist/bin/pikku-fetch.d.ts +0 -4
  373. package/dist/bin/pikku-fetch.js +0 -19
  374. package/dist/bin/pikku-nextjs.d.ts +0 -4
  375. package/dist/bin/pikku-nextjs.js +0 -24
  376. package/dist/bin/pikku-openapi.d.ts +0 -2
  377. package/dist/bin/pikku-openapi.js +0 -19
  378. package/dist/bin/pikku-queue-service.d.ts +0 -4
  379. package/dist/bin/pikku-queue-service.js +0 -19
  380. package/dist/bin/pikku-rpc.d.ts +0 -4
  381. package/dist/bin/pikku-rpc.js +0 -19
  382. package/dist/bin/pikku-schemas.d.ts +0 -2
  383. package/dist/bin/pikku-schemas.js +0 -21
  384. package/dist/bin/pikku-websocket.d.ts +0 -4
  385. package/dist/bin/pikku-websocket.js +0 -19
  386. package/dist/src/inspector-glob.d.ts +0 -2
  387. package/dist/src/inspector-glob.js +0 -12
  388. package/dist/src/pikku-cli-config.d.ts +0 -56
  389. package/dist/src/pikku-cli-config.js +0 -203
  390. package/dist/src/pikku-command-schemas.d.ts +0 -2
  391. package/dist/src/pikku-command-schemas.js +0 -8
  392. package/dist/src/runtimes/nextjs/pikku-command-nextjs.d.ts +0 -2
  393. package/dist/src/runtimes/nextjs/serialize-nextjs-backend-wrapper.d.ts +0 -1
  394. package/dist/src/schemas.d.ts +0 -2
  395. package/dist/src/schemas.js +0 -8
  396. package/dist/src/serialize-pikku-types.d.ts +0 -4
  397. package/dist/src/serialize-pikku-types.js +0 -605
  398. package/dist/src/types.d.ts +0 -5
  399. package/dist/src/utils.d.ts +0 -60
  400. package/dist/src/utils.js +0 -248
  401. package/dist/src/wirings/channels/pikku-channels.d.ts +0 -2
  402. package/dist/src/wirings/channels/pikku-channels.js +0 -9
  403. package/dist/src/wirings/channels/pikku-command-channels-map.d.ts +0 -2
  404. package/dist/src/wirings/channels/pikku-command-channels-map.js +0 -8
  405. package/dist/src/wirings/channels/pikku-command-channels.d.ts +0 -2
  406. package/dist/src/wirings/channels/pikku-command-channels.js +0 -9
  407. package/dist/src/wirings/channels/pikku-command-websocket-typed.d.ts +0 -2
  408. package/dist/src/wirings/channels/pikku-command-websocket-typed.js +0 -15
  409. package/dist/src/wirings/fetch/index.d.ts +0 -2
  410. package/dist/src/wirings/fetch/index.js +0 -12
  411. package/dist/src/wirings/functions/pikku-command-function-types.d.ts +0 -2
  412. package/dist/src/wirings/functions/pikku-command-function-types.js +0 -13
  413. package/dist/src/wirings/functions/pikku-command-functions.d.ts +0 -2
  414. package/dist/src/wirings/functions/pikku-command-functions.js +0 -14
  415. package/dist/src/wirings/functions/pikku-command-services.d.ts +0 -3
  416. package/dist/src/wirings/functions/pikku-function-types.d.ts +0 -2
  417. package/dist/src/wirings/functions/pikku-function-types.js +0 -13
  418. package/dist/src/wirings/http/pikku-command-http-map.d.ts +0 -2
  419. package/dist/src/wirings/http/pikku-command-http-map.js +0 -8
  420. package/dist/src/wirings/http/pikku-command-http-routes.d.ts +0 -2
  421. package/dist/src/wirings/http/pikku-command-http-routes.js +0 -9
  422. package/dist/src/wirings/http/pikku-command-openapi.d.ts +0 -2
  423. package/dist/src/wirings/http/pikku-command-openapi.js +0 -20
  424. package/dist/src/wirings/http/pikku-http-routes.d.ts +0 -2
  425. package/dist/src/wirings/http/pikku-http-routes.js +0 -9
  426. package/dist/src/wirings/mcp/pikku-command-mcp-json.d.ts +0 -2
  427. package/dist/src/wirings/mcp/pikku-command-mcp-json.js +0 -13
  428. package/dist/src/wirings/mcp/pikku-command-mcp.d.ts +0 -2
  429. package/dist/src/wirings/queue/pikku-command-queue-map.d.ts +0 -2
  430. package/dist/src/wirings/queue/pikku-command-queue-map.js +0 -8
  431. package/dist/src/wirings/queue/pikku-command-queue-service.d.ts +0 -2
  432. package/dist/src/wirings/queue/pikku-command-queue-service.js +0 -15
  433. package/dist/src/wirings/queue/pikku-command-queue.d.ts +0 -2
  434. package/dist/src/wirings/queue/pikku-command-queue.js +0 -10
  435. package/dist/src/wirings/queue/pikku-queue-map.d.ts +0 -2
  436. package/dist/src/wirings/queue/pikku-queue-map.js +0 -8
  437. package/dist/src/wirings/queue/pikku-queue.d.ts +0 -2
  438. package/dist/src/wirings/queue/pikku-queue.js +0 -10
  439. package/dist/src/wirings/rpc/pikku-command-rpc-client.d.ts +0 -2
  440. package/dist/src/wirings/rpc/pikku-command-rpc-client.js +0 -15
  441. package/dist/src/wirings/rpc/pikku-command-rpc-map.d.ts +0 -3
  442. package/dist/src/wirings/rpc/pikku-command-rpc-map.js +0 -14
  443. package/dist/src/wirings/rpc/pikku-command-rpc.d.ts +0 -2
  444. package/dist/src/wirings/rpc/pikku-command-rpc.js +0 -8
  445. package/dist/src/wirings/scheduler/pikku-command-scheduler.d.ts +0 -2
  446. package/dist/src/wirings/scheduler/pikku-command-scheduler.js +0 -10
  447. package/src/inspector-glob.ts +0 -30
  448. package/src/pikku-cli-config.ts +0 -387
  449. package/src/pikku-command-schemas.ts +0 -35
  450. package/src/runtimes/nextjs/pikku-command-nextjs.ts +0 -110
  451. package/src/schemas.ts +0 -35
  452. package/src/serialize-pikku-types.ts +0 -613
  453. package/src/types.ts +0 -16
  454. package/src/utils.ts +0 -420
  455. package/src/wirings/channels/pikku-channels.ts +0 -41
  456. package/src/wirings/channels/pikku-command-channels-map.ts +0 -26
  457. package/src/wirings/channels/pikku-command-channels.ts +0 -39
  458. package/src/wirings/channels/pikku-command-websocket-typed.ts +0 -36
  459. package/src/wirings/fetch/index.ts +0 -33
  460. package/src/wirings/functions/pikku-command-function-types.ts +0 -53
  461. package/src/wirings/functions/pikku-command-functions.ts +0 -48
  462. package/src/wirings/functions/pikku-command-services.ts +0 -125
  463. package/src/wirings/functions/pikku-function-types.ts +0 -52
  464. package/src/wirings/http/pikku-command-http-map.ts +0 -27
  465. package/src/wirings/http/pikku-command-http-routes.ts +0 -40
  466. package/src/wirings/http/pikku-command-openapi.ts +0 -55
  467. package/src/wirings/http/pikku-http-routes.ts +0 -40
  468. package/src/wirings/mcp/pikku-command-mcp-json.ts +0 -33
  469. package/src/wirings/queue/pikku-command-queue-map.ts +0 -26
  470. package/src/wirings/queue/pikku-command-queue-service.ts +0 -36
  471. package/src/wirings/queue/pikku-command-queue.ts +0 -45
  472. package/src/wirings/queue/pikku-queue-map.ts +0 -26
  473. package/src/wirings/queue/pikku-queue.ts +0 -43
  474. package/src/wirings/rpc/pikku-command-rpc-client.ts +0 -35
  475. package/src/wirings/rpc/pikku-command-rpc-map.ts +0 -49
  476. package/src/wirings/rpc/pikku-command-rpc.ts +0 -24
  477. package/src/wirings/scheduler/pikku-command-scheduler.ts +0 -43
  478. /package/dist/{src/types.js → .pikku/channel/pikku-channels-meta.gen.d.ts} +0 -0
  479. /package/dist/src/{runtimes → functions/runtimes}/nextjs/serialize-nextjs-http-wrapper.d.ts +0 -0
  480. /package/dist/src/{runtimes → functions/runtimes}/nextjs/serialize-nextjs-http-wrapper.js +0 -0
  481. /package/dist/src/{wirings → functions/wirings}/channels/serialize-typed-channel-map.d.ts +0 -0
  482. /package/dist/src/{wirings → functions/wirings}/channels/serialize-websocket-wrapper.d.ts +0 -0
  483. /package/dist/src/{wirings → functions/wirings}/channels/serialize-websocket-wrapper.js +0 -0
  484. /package/dist/src/{wirings → functions/wirings}/functions/serialize-function-imports.d.ts +0 -0
  485. /package/dist/src/{wirings → functions/wirings}/http/serialize-fetch-wrapper.d.ts +0 -0
  486. /package/dist/src/{wirings → functions/wirings}/http/serialize-fetch-wrapper.js +0 -0
  487. /package/dist/src/{wirings → functions/wirings}/http/serialize-typed-http-map.d.ts +0 -0
  488. /package/dist/src/{wirings → functions/wirings}/mcp/serialize-mcp-json.js +0 -0
  489. /package/dist/src/{wirings → functions/wirings}/queue/serialize-queue-map.d.ts +0 -0
  490. /package/dist/src/{wirings → functions/wirings}/queue/serialize-queue-meta.js +0 -0
  491. /package/dist/src/{wirings → functions/wirings}/queue/serialize-queue-wrapper.d.ts +0 -0
  492. /package/dist/src/{wirings → functions/wirings}/queue/serialize-queue-wrapper.js +0 -0
  493. /package/dist/src/{wirings → functions/wirings}/rpc/serialize-rpc-wrapper.d.ts +0 -0
  494. /package/dist/src/{wirings → functions/wirings}/rpc/serialize-rpc-wrapper.js +0 -0
  495. /package/dist/src/{wirings → functions/wirings}/rpc/serialize-typed-rpc-map.d.ts +0 -0
  496. /package/dist/src/{wirings → functions/wirings}/scheduler/serialize-scheduler-meta.d.ts +0 -0
  497. /package/dist/src/{wirings → functions/wirings}/scheduler/serialize-scheduler-meta.js +0 -0
  498. /package/dist/src/{serialize-import-map.d.ts → utils/serialize-import-map.d.ts} +0 -0
  499. /package/src/{runtimes → functions/runtimes}/nextjs/serialize-nextjs-http-wrapper.ts +0 -0
  500. /package/src/{wirings → functions/wirings}/channels/serialize-websocket-wrapper.ts +0 -0
  501. /package/src/{wirings → functions/wirings}/http/serialize-fetch-wrapper.ts +0 -0
  502. /package/src/{wirings → functions/wirings}/queue/serialize-queue-wrapper.ts +0 -0
  503. /package/src/{wirings → functions/wirings}/rpc/serialize-rpc-wrapper.ts +0 -0
  504. /package/src/{wirings → functions/wirings}/scheduler/serialize-scheduler-meta.ts +0 -0
@@ -0,0 +1,216 @@
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 {
9
+ serializeChannelCLIClient,
10
+ collectRendererNames,
11
+ } from './serialize-channel-cli-client.js'
12
+ import { existsSync } from 'fs'
13
+ import { rm } from 'fs/promises'
14
+ import { ErrorCode } from '@pikku/inspector'
15
+
16
+ export const pikkuCLIEntry: any = pikkuSessionlessFunc<void, void>({
17
+ func: async ({ logger, config, getInspectorState }) => {
18
+ const visitState = await getInspectorState()
19
+
20
+ // Check if CLI entrypoints are configured
21
+ if (
22
+ !config.cli?.entrypoints ||
23
+ Object.keys(config.cli.entrypoints).length === 0
24
+ ) {
25
+ logger.info({
26
+ message:
27
+ 'No CLI entrypoints configured in config.cli.entrypoints, skipping CLI bootstrap generation',
28
+ type: 'skip',
29
+ })
30
+ return
31
+ }
32
+
33
+ // Generate bootstrap files for each configured entrypoint
34
+ for (const [programName, entrypointConfigs] of Object.entries(
35
+ config.cli.entrypoints
36
+ )) {
37
+ const programMeta = visitState.cli.meta.programs[programName]
38
+
39
+ if (!programMeta) {
40
+ logger.warn(
41
+ `CLI program '${programName}' not found in metadata, skipping`
42
+ )
43
+ continue
44
+ }
45
+
46
+ // Normalize to array
47
+ const configs = Array.isArray(entrypointConfigs)
48
+ ? entrypointConfigs
49
+ : [entrypointConfigs]
50
+
51
+ for (const entrypointConfig of configs) {
52
+ // Normalize entrypoint config to get type
53
+ const entrypointType =
54
+ typeof entrypointConfig === 'string'
55
+ ? 'cli'
56
+ : entrypointConfig.type || 'cli'
57
+
58
+ // Handle channel type entrypoint
59
+ if (entrypointType === 'channel') {
60
+ if (
61
+ typeof entrypointConfig === 'string' ||
62
+ entrypointConfig.type !== 'channel'
63
+ ) {
64
+ throw new Error('Channel entrypoint must be a channel type object')
65
+ }
66
+
67
+ const channelWirePath = entrypointConfig.wirePath
68
+ const channelClientPath = entrypointConfig.path
69
+ const channelName = entrypointConfig.name
70
+ const channelRoute = entrypointConfig.route
71
+
72
+ const channelWireFile = join(config.rootDir, channelWirePath)
73
+
74
+ const channelCode = serializeChannelCLI(
75
+ programName,
76
+ programMeta,
77
+ channelWireFile,
78
+ visitState.functions.files,
79
+ config.packageMappings,
80
+ config.channelsTypesFile,
81
+ config.functionTypesFile,
82
+ channelName,
83
+ channelRoute
84
+ )
85
+
86
+ await writeFileInDir(logger, channelWireFile, channelCode)
87
+ logger.debug(
88
+ `Serialized CLI channel for ${programName}: ${channelWireFile}`
89
+ )
90
+
91
+ // Generate client code if clientPath is provided
92
+ if (channelClientPath) {
93
+ const channelClientFile = join(config.rootDir, channelClientPath)
94
+
95
+ // Validate that renderers don't depend on services (client-side renderers can't access server services)
96
+ const rendererNames = collectRendererNames(programMeta)
97
+ const problematicRenderers: Array<{
98
+ name: string
99
+ services: string[]
100
+ }> = []
101
+
102
+ for (const rendererName of rendererNames) {
103
+ const rendererMeta = visitState.cli.meta.renderers[rendererName]
104
+ if (rendererMeta?.services?.services?.length > 0) {
105
+ problematicRenderers.push({
106
+ name: rendererName,
107
+ services: rendererMeta.services.services,
108
+ })
109
+ }
110
+ }
111
+
112
+ // If any renderers depend on services, abort client generation
113
+ if (problematicRenderers.length > 0) {
114
+ const details = problematicRenderers
115
+ .map(
116
+ (r) => ` - ${r.name} depends on: ${r.services.join(', ')}`
117
+ )
118
+ .join('\n')
119
+
120
+ logger.critical(
121
+ ErrorCode.CLI_CLIENTSIDE_RENDERER_HAS_SERVICES,
122
+ `Cannot generate CLI channel client for '${programName}': renderers cannot depend on services (client-side execution)\n${details}\n\nRenderers used in CLI-over-channel must be service-free since they execute on the client.`
123
+ )
124
+
125
+ // Delete existing client file if it exists
126
+ if (existsSync(channelClientFile)) {
127
+ await rm(channelClientFile)
128
+ logger.debug(
129
+ `Deleted existing CLI channel client: ${channelClientFile}`
130
+ )
131
+ }
132
+
133
+ continue
134
+ }
135
+
136
+ const clientCode = serializeChannelCLIClient(
137
+ programName,
138
+ programMeta,
139
+ channelClientFile,
140
+ config,
141
+ config.bootstrapFile,
142
+ channelRoute,
143
+ visitState.cli.meta.renderers
144
+ )
145
+
146
+ await writeFileInDir(logger, channelClientFile, clientCode)
147
+ logger.debug(
148
+ `Serialized CLI channel client for ${programName}: ${channelClientFile}`
149
+ )
150
+ }
151
+
152
+ continue
153
+ }
154
+
155
+ // Handle CLI type entrypoint (default)
156
+ const entrypointPath =
157
+ typeof entrypointConfig === 'string'
158
+ ? entrypointConfig
159
+ : entrypointConfig.type === 'cli'
160
+ ? entrypointConfig.path
161
+ : undefined
162
+
163
+ if (!entrypointPath) {
164
+ throw new Error(
165
+ `CLI entrypoint must have a path: ${JSON.stringify(entrypointConfig)}`
166
+ )
167
+ }
168
+
169
+ const bootstrapFile = join(config.rootDir, entrypointPath)
170
+
171
+ // Get service factories for local mode
172
+ // Check for required types
173
+ checkRequiredTypes(visitState.filesAndMethodsErrors, {
174
+ config: true,
175
+ singletonServicesFactory: true,
176
+ sessionServicesFactory: true,
177
+ })
178
+
179
+ const {
180
+ pikkuConfigFactory,
181
+ singletonServicesFactory,
182
+ sessionServicesFactory,
183
+ } = visitState.filesAndMethods
184
+
185
+ if (
186
+ !pikkuConfigFactory ||
187
+ !singletonServicesFactory ||
188
+ !sessionServicesFactory
189
+ ) {
190
+ throw new Error('Required types not found')
191
+ }
192
+
193
+ const bootstrapCode = serializeLocalCLIBootstrap(
194
+ programName,
195
+ programMeta,
196
+ bootstrapFile,
197
+ config,
198
+ pikkuConfigFactory,
199
+ singletonServicesFactory,
200
+ sessionServicesFactory
201
+ )
202
+
203
+ await writeFileInDir(logger, bootstrapFile, bootstrapCode)
204
+ logger.debug(
205
+ `Serialized CLI bootstrap for ${programName}: ${bootstrapFile}`
206
+ )
207
+ }
208
+ }
209
+ },
210
+ middleware: [
211
+ logCommandInfoAndTime({
212
+ commandStart: 'Serializing CLI',
213
+ commandEnd: 'Serialized CLI',
214
+ }),
215
+ ],
216
+ })
@@ -0,0 +1,48 @@
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
+
8
+ export const pikkuCLITypes: any = pikkuSessionlessFunc<void, void>({
9
+ func: async ({ logger, config, getInspectorState }) => {
10
+ const { cliTypesFile, functionTypesFile, packageMappings } = config
11
+ const visitState = await getInspectorState()
12
+
13
+ const functionTypesImportPath = getFileImportRelativePath(
14
+ cliTypesFile,
15
+ functionTypesFile,
16
+ packageMappings
17
+ )
18
+
19
+ // Check for required types
20
+ checkRequiredTypes(visitState.filesAndMethodsErrors, {
21
+ userSessionType: true,
22
+ sessionServiceType: true,
23
+ singletonServicesType: true,
24
+ })
25
+
26
+ const { userSessionType, singletonServicesType } =
27
+ visitState.filesAndMethods
28
+
29
+ if (!userSessionType || !singletonServicesType) {
30
+ throw new Error('Required types not found')
31
+ }
32
+
33
+ const content = serializeCLITypes(
34
+ functionTypesImportPath,
35
+ `import type { ${userSessionType.type} } from '${getFileImportRelativePath(cliTypesFile, userSessionType.typePath, packageMappings)}'`,
36
+ userSessionType.type,
37
+ `import type { ${singletonServicesType.type} } from '${getFileImportRelativePath(cliTypesFile, singletonServicesType.typePath, packageMappings)}'`,
38
+ singletonServicesType.type
39
+ )
40
+ await writeFileInDir(logger, cliTypesFile, content)
41
+ },
42
+ middleware: [
43
+ logCommandInfoAndTime({
44
+ commandStart: 'Creating CLI types',
45
+ commandEnd: 'Created CLI types',
46
+ }),
47
+ ],
48
+ })
@@ -0,0 +1,39 @@
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
+
6
+ export const pikkuCLI: any = pikkuSessionlessFunc<void, boolean | undefined>({
7
+ func: async ({ logger, config, getInspectorState }) => {
8
+ const visitState = await getInspectorState()
9
+ const { cliWiringsFile, cliWiringMetaFile, packageMappings } = config
10
+ const { cli } = visitState
11
+
12
+ // Generate CLI wirings file
13
+ await writeFileInDir(
14
+ logger,
15
+ cliWiringsFile,
16
+ serializeFileImports(
17
+ 'wireCLI',
18
+ cliWiringsFile,
19
+ cli.files,
20
+ packageMappings
21
+ )
22
+ )
23
+
24
+ // Generate CLI metadata file
25
+ await writeFileInDir(
26
+ logger,
27
+ cliWiringMetaFile,
28
+ `import { pikkuState } from '@pikku/core'\npikkuState('cli', 'meta', ${JSON.stringify(cli.meta, null, 2)})`
29
+ )
30
+
31
+ return true
32
+ },
33
+ middleware: [
34
+ logCommandInfoAndTime({
35
+ commandStart: 'Finding CLI commands',
36
+ commandEnd: 'Found CLI commands',
37
+ }),
38
+ ],
39
+ })
@@ -0,0 +1,171 @@
1
+ import { CLIProgramMeta, CLICommandMeta } from '@pikku/core/cli'
2
+ import { getFileImportRelativePath } from '../../../utils/file-import-path.js'
3
+ import { Config } from '../../../../types/application-types.js'
4
+
5
+ /**
6
+ * Collect all unique renderer names from CLI metadata (populated by inspector)
7
+ */
8
+ export function collectRendererNames(programMeta: CLIProgramMeta): Set<string> {
9
+ const rendererNames = new Set<string>()
10
+
11
+ // Add program-level default renderer
12
+ if (programMeta.defaultRenderName) {
13
+ rendererNames.add(programMeta.defaultRenderName)
14
+ }
15
+
16
+ // Recursively collect renderer names from commands
17
+ function collectFromCommand(command: CLICommandMeta): void {
18
+ if (command.renderName) {
19
+ rendererNames.add(command.renderName)
20
+ }
21
+
22
+ // Recursively process subcommands
23
+ if (command.subcommands) {
24
+ for (const subCommand of Object.values(command.subcommands)) {
25
+ collectFromCommand(subCommand)
26
+ }
27
+ }
28
+ }
29
+
30
+ // Process all commands
31
+ for (const command of Object.values(programMeta.commands)) {
32
+ collectFromCommand(command)
33
+ }
34
+
35
+ return rendererNames
36
+ }
37
+
38
+ /**
39
+ * Build a renderers map for CLI commands
40
+ */
41
+ function buildRenderersMap(programMeta: CLIProgramMeta): string {
42
+ const entries: string[] = []
43
+
44
+ // Build map entries for each command that has a renderer
45
+ function addCommandRenderer(command: CLICommandMeta, path: string[]): void {
46
+ const commandId = path.join('.')
47
+ if (command.renderName) {
48
+ entries.push(` '${commandId}': ${command.renderName}`)
49
+ }
50
+
51
+ // Recursively process subcommands
52
+ if (command.subcommands) {
53
+ for (const [subName, subCommand] of Object.entries(command.subcommands)) {
54
+ addCommandRenderer(subCommand, [...path, subName])
55
+ }
56
+ }
57
+ }
58
+
59
+ // Process all commands
60
+ for (const [commandName, command] of Object.entries(programMeta.commands)) {
61
+ addCommandRenderer(command, [commandName])
62
+ }
63
+
64
+ if (entries.length === 0) {
65
+ return '{}'
66
+ }
67
+
68
+ return `{\n${entries.join(',\n')}\n }`
69
+ }
70
+
71
+ /**
72
+ * Serializes a CLI-over-Channel client bootstrap file
73
+ * Similar to local CLI bootstrap but uses WebSocket connection
74
+ */
75
+ export function serializeChannelCLIClient(
76
+ programName: string,
77
+ programMeta: CLIProgramMeta,
78
+ clientFile: string,
79
+ config: Config,
80
+ cliBootstrapPath: string,
81
+ channelRoute?: string,
82
+ renderersMeta?: Record<string, any>
83
+ ): string {
84
+ const capitalizedName =
85
+ programName.charAt(0).toUpperCase() + programName.slice(1).replace(/-/g, '')
86
+ const finalChannelRoute = channelRoute || `/cli/${programName}`
87
+
88
+ // Get relative import path to CLI bootstrap (for metadata)
89
+ const bootstrapImportPath = getFileImportRelativePath(
90
+ clientFile,
91
+ cliBootstrapPath,
92
+ config.packageMappings
93
+ )
94
+
95
+ // Collect all unique renderer names from CLI metadata (populated by inspector)
96
+ const rendererNames = collectRendererNames(programMeta)
97
+
98
+ // Generate renderer imports from their source files
99
+ let rendererImports = ''
100
+ if (rendererNames.size > 0 && renderersMeta) {
101
+ const importsByFile = new Map<string, string[]>()
102
+
103
+ for (const rendererName of rendererNames) {
104
+ const meta = renderersMeta[rendererName]
105
+ if (meta?.exportedName && meta?.filePath) {
106
+ const relativePath = getFileImportRelativePath(
107
+ clientFile,
108
+ meta.filePath,
109
+ config.packageMappings
110
+ )
111
+ if (!importsByFile.has(relativePath)) {
112
+ importsByFile.set(relativePath, [])
113
+ }
114
+ importsByFile.get(relativePath)!.push(meta.exportedName)
115
+ }
116
+ }
117
+
118
+ // Generate import statements
119
+ for (const [path, names] of importsByFile) {
120
+ rendererImports += `import { ${names.join(', ')} } from '${path}'\n`
121
+ }
122
+ }
123
+
124
+ // Build renderers map
125
+ const renderersMap = buildRenderersMap(programMeta)
126
+
127
+ // Determine default renderer
128
+ const defaultRendererCode = programMeta.defaultRenderName
129
+ ? `,\n defaultRenderer: ${programMeta.defaultRenderName}`
130
+ : ''
131
+
132
+ return `
133
+ import { executeCLIViaChannel } from '@pikku/core/cli/channel'
134
+ import { CorePikkuWebsocket } from '@pikku/websocket'
135
+ import '${bootstrapImportPath}'
136
+ ${rendererImports}
137
+ /**
138
+ * ${capitalizedName} CLI Client (via WebSocket Channel)
139
+ * Executes CLI commands over a WebSocket connection
140
+ */
141
+ export async function ${capitalizedName}CLIClient(
142
+ url: string,
143
+ args?: string[]
144
+ ): Promise<void> {
145
+ // Create WebSocket connection
146
+ const pikkuWS = new CorePikkuWebsocket(url)
147
+
148
+ // Register renderers for CLI commands
149
+ const renderers = ${renderersMap}
150
+
151
+ await executeCLIViaChannel({
152
+ programName: '${programName}',
153
+ pikkuWS,
154
+ args,
155
+ renderers${defaultRendererCode},
156
+ })
157
+ }
158
+
159
+ // Export as default for easy importing
160
+ export default ${capitalizedName}CLIClient
161
+
162
+ // For direct execution (if this file is run directly)
163
+ if (import.meta.url === \`file://\${process.argv[1]}\`) {
164
+ const url = process.env.PIKKU_WS_URL || 'ws://localhost:3000${finalChannelRoute}'
165
+ ${capitalizedName}CLIClient(url, process.argv.slice(2)).catch(error => {
166
+ console.error('Fatal error:', error.message)
167
+ process.exit(1)
168
+ })
169
+ }
170
+ `
171
+ }
@@ -0,0 +1,102 @@
1
+ import { CLIProgramMeta } from '@pikku/core/cli'
2
+ import { getFileImportRelativePath } from '../../../utils/file-import-path.js'
3
+
4
+ /**
5
+ * Serializes a wireChannel call from CLI metadata
6
+ * This creates a WebSocket backend for all CLI commands
7
+ */
8
+ export function serializeChannelCLI(
9
+ programName: string,
10
+ programMeta: CLIProgramMeta,
11
+ channelFile: string,
12
+ functionFiles: Map<string, { path: string; exportedName: string }>,
13
+ packageMappings: Record<string, string>,
14
+ channelTypesFile: string,
15
+ functionTypesFile: string,
16
+ channelName?: string,
17
+ channelRoute?: string
18
+ ): string {
19
+ const finalChannelName = channelName || `${programName}-cli`
20
+ const finalChannelRoute = channelRoute || `/cli/${programName}`
21
+ // Flatten all commands into a single routing map
22
+ const commandMap: Record<
23
+ string,
24
+ { pikkuFuncName: string; importPath?: string }
25
+ > = {}
26
+
27
+ const collectCommands = (
28
+ commands: Record<string, any>,
29
+ path: string[] = []
30
+ ) => {
31
+ for (const [name, cmd] of Object.entries(commands)) {
32
+ const fullPath = [...path, name]
33
+ const commandKey = fullPath.join('.')
34
+
35
+ if (cmd.pikkuFuncName) {
36
+ commandMap[commandKey] = {
37
+ pikkuFuncName: cmd.pikkuFuncName,
38
+ }
39
+ }
40
+
41
+ // Recursively process subcommands
42
+ if (cmd.subcommands) {
43
+ collectCommands(cmd.subcommands, fullPath)
44
+ }
45
+ }
46
+ }
47
+
48
+ collectCommands(programMeta.commands)
49
+
50
+ // Generate the wireChannel call
51
+ const commandEntries = Object.entries(commandMap)
52
+ .map(([commandKey, { pikkuFuncName }]) => {
53
+ return ` '${commandKey}': ${pikkuFuncName}`
54
+ })
55
+ .join(',\n')
56
+
57
+ // Generate imports from function file locations
58
+ const funcNames = [
59
+ ...new Set(Object.values(commandMap).map((v) => v.pikkuFuncName)),
60
+ ]
61
+ const imports = funcNames
62
+ .map((pikkuFuncName) => {
63
+ const fileInfo = functionFiles.get(pikkuFuncName)
64
+ if (!fileInfo) {
65
+ throw new Error(`Function not found in files map: ${pikkuFuncName}`)
66
+ }
67
+
68
+ const importPath = getFileImportRelativePath(
69
+ channelFile,
70
+ fileInfo.path,
71
+ packageMappings
72
+ )
73
+ return `import { ${fileInfo.exportedName} } from '${importPath}'`
74
+ })
75
+ .join('\n')
76
+
77
+ // Get relative path to channel types file
78
+ const channelTypesPath = getFileImportRelativePath(
79
+ channelFile,
80
+ channelTypesFile,
81
+ packageMappings
82
+ )
83
+
84
+ return `/**
85
+ * WebSocket channel backend for '${programName}' CLI commands
86
+ */
87
+ import { wireChannel } from '${channelTypesPath}'
88
+ ${imports}
89
+
90
+ wireChannel({
91
+ name: '${finalChannelName}',
92
+ route: '${finalChannelRoute}',
93
+ auth: false,
94
+ onMessageWiring: {
95
+ command: {
96
+ ${commandEntries}
97
+ }
98
+ },
99
+ tags: ['cli', '${programName}']
100
+ })
101
+ `
102
+ }
@@ -0,0 +1,79 @@
1
+ /**
2
+ * Generates type definitions for CLI wirings
3
+ */
4
+ export const serializeCLITypes = (
5
+ functionTypesImportPath: string,
6
+ userSessionTypeImport: string,
7
+ userSessionTypeName: string,
8
+ singletonServicesTypeImport: string,
9
+ singletonServicesTypeName: string
10
+ ) => {
11
+ return `/**
12
+
13
+ * CLI-specific type definitions for tree-shaking optimization
14
+ */
15
+
16
+ import { CoreCLI, wireCLI as wireCLICore, CorePikkuCLIRender, CoreCLICommandConfig } from '@pikku/core/cli'
17
+ import type { PikkuFunctionConfig, PikkuMiddleware } from '${functionTypesImportPath}'
18
+ ${userSessionTypeImport}
19
+ ${singletonServicesTypeImport}
20
+
21
+ ${singletonServicesTypeName !== 'SingletonServices' ? `type SingletonServices = ${singletonServicesTypeName}` : ''}
22
+ ${userSessionTypeName !== 'Session' ? `type Session = ${userSessionTypeName}` : ''}
23
+
24
+ /**
25
+ * Type-safe CLI renderer definition that can access your application's services.
26
+ * Use this to define custom renderers for CLI command output.
27
+ *
28
+ * @template Data - The output data type from the CLI command
29
+ * @template RequiredServices - The services required for this renderer
30
+ */
31
+ type PikkuCLIRender<Data, RequiredServices extends SingletonServices = SingletonServices> = CorePikkuCLIRender<Data, RequiredServices, Session>
32
+
33
+ /**
34
+ * CLI command configuration with project-specific types.
35
+ * Uses CoreCLICommandConfig from @pikku/core with local middleware and render types.
36
+ */
37
+ type CLICommandConfig<Func extends PikkuFunctionConfig<In, Out>, In = any, Out = any, Params extends string = string> = CoreCLICommandConfig<Func, PikkuMiddleware, PikkuCLIRender<any>, Params>
38
+
39
+ /**
40
+ * Type definition for CLI applications with commands and global options.
41
+ *
42
+ * @template Commands - Type describing the command structure
43
+ * @template GlobalOptions - Type for global CLI options
44
+ */
45
+ type CLIWiring<Commands extends Record<string, CoreCLICommandConfig<any, PikkuMiddleware, PikkuCLIRender<any>, any>>, GlobalOptions> = CoreCLI<Commands, GlobalOptions, PikkuMiddleware, PikkuCLIRender<any>>
46
+
47
+ /**
48
+ * Registers a CLI application with the Pikku framework.
49
+ * Creates command-line interfaces with type-safe commands and options.
50
+ *
51
+ * @template Commands - Type describing the command structure
52
+ * @template GlobalOptions - Type for global CLI options
53
+ * @param cli - CLI definition with program name, commands, and global options
54
+ */
55
+ export const wireCLI = <Commands extends Record<string, CoreCLICommandConfig<any, PikkuMiddleware, PikkuCLIRender<any>, any>>, GlobalOptions>(
56
+ cli: CLIWiring<Commands, GlobalOptions>
57
+ ) => {
58
+ wireCLICore(cli as any)
59
+ }
60
+
61
+ /**
62
+ * Creates a CLI command definition with automatic option inference from the function's input type.
63
+ * This allows TypeScript to automatically derive CLI options from the function signature.
64
+ *
65
+ * @template FuncConfig - The Pikku function config type
66
+ * @template Params - The parameters string literal type
67
+ * @param config - CLI command configuration
68
+ * @returns CLI command configuration with inferred types
69
+ */
70
+ export const pikkuCLICommand = <
71
+ FuncConfig extends PikkuFunctionConfig<any, any>,
72
+ Params extends string
73
+ >(
74
+ config: CLICommandConfig<FuncConfig, any, any, Params>
75
+ ): CoreCLICommandConfig<FuncConfig, PikkuMiddleware, PikkuCLIRender<any>, string> => {
76
+ return config as any
77
+ }
78
+ `
79
+ }