@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,53 @@
1
+ import { FilesAndMethodsErrors } from '@pikku/inspector'
2
+
3
+ export type RequiredTypes = Partial<{
4
+ config: boolean
5
+ sessionServiceType: boolean
6
+ singletonServicesType: boolean
7
+ userSessionType: boolean
8
+ singletonServicesFactory: boolean
9
+ sessionServicesFactory: boolean
10
+ }>
11
+
12
+ export const checkRequiredTypes = (
13
+ errors: FilesAndMethodsErrors,
14
+ requires: RequiredTypes = {}
15
+ ): void => {
16
+ // Only throw if there are errors AND we require those types
17
+ const hasRequiredErrors = Array.from(errors.keys()).some((message) => {
18
+ if (requires.config && message.includes('CoreConfig')) return true
19
+ if (requires.sessionServiceType && message.includes('CoreServices'))
20
+ return true
21
+ if (
22
+ requires.singletonServicesType &&
23
+ message.includes('CoreSingletonServices')
24
+ )
25
+ return true
26
+ if (requires.userSessionType && message.includes('CoreUserSession'))
27
+ return true
28
+ if (
29
+ requires.singletonServicesFactory &&
30
+ message.includes('CreateSingletonServices')
31
+ )
32
+ return true
33
+ if (
34
+ requires.sessionServicesFactory &&
35
+ message.includes('CreateSessionServices')
36
+ )
37
+ return true
38
+ return false
39
+ })
40
+
41
+ if (hasRequiredErrors) {
42
+ const result: string[] = ['Found errors:']
43
+ errors.forEach((filesAndMethods, message) => {
44
+ result.push(`- ${message}`)
45
+ filesAndMethods.forEach((methods, file) => {
46
+ result.push(
47
+ `\t* methods: ${methods.map(({ variable, type }) => `${variable}: ${type}`).join(', ')}`
48
+ )
49
+ })
50
+ })
51
+ throw new Error(result.join('\n'))
52
+ }
53
+ }
@@ -0,0 +1,49 @@
1
+ import { TypesMap } from '@pikku/inspector'
2
+
3
+ export function generateCustomTypes(
4
+ typesMap: TypesMap,
5
+ requiredTypes: Set<string>
6
+ ) {
7
+ return `
8
+ // Custom types are those that are defined directly within generics
9
+ // or are broken into simpler types
10
+ ${Array.from(typesMap.customTypes.entries())
11
+ .map(([name, { type, references }]) => {
12
+ references.forEach((name) => {
13
+ requiredTypes.add(name)
14
+ })
15
+
16
+ // Extract type names from the type string that might not be in references
17
+ const typeString = type
18
+ // Use regex to extract potential type names (PascalCase identifiers)
19
+ const typeNameRegex = /\b[A-Z][a-zA-Z0-9]*\b/g
20
+ const potentialTypes = typeString.match(typeNameRegex) || []
21
+
22
+ potentialTypes.forEach((typeName) => {
23
+ // Skip string literals and common keywords
24
+ if (
25
+ typeString.includes(`"${typeName}"`) ||
26
+ ['Pick', 'Omit', 'Partial', 'Required', 'Record', 'Readonly'].includes(
27
+ typeName
28
+ )
29
+ ) {
30
+ return
31
+ }
32
+
33
+ // Try to find this type in the typesMap and add it if found
34
+ try {
35
+ const typeMeta = typesMap.getTypeMeta(typeName)
36
+ if (typeMeta.path) {
37
+ // Add originalName to preserve canonical import name
38
+ requiredTypes.add(typeMeta.originalName)
39
+ }
40
+ } catch (e) {
41
+ // Type not found in map (ambient/builtin type) - ignore it
42
+ // Do NOT add to requiredTypes to avoid crashes in serializeImportMap
43
+ }
44
+ })
45
+
46
+ return `export type ${name} = ${type}`
47
+ })
48
+ .join('\n')}`
49
+ }
@@ -1,6 +1,6 @@
1
1
  import { strict as assert } from 'assert'
2
2
  import { describe, test } from 'node:test'
3
- import { getFileImportRelativePath } from './utils.js'
3
+ import { getFileImportRelativePath } from './file-import-path.js'
4
4
 
5
5
  describe('getFileImportRelativePath', () => {
6
6
  test('should return relative path for files in same directory', () => {
@@ -0,0 +1,53 @@
1
+ import { relative, dirname, resolve } from 'path'
2
+
3
+ export const getFileImportRelativePath = (
4
+ from: string,
5
+ to: string,
6
+ packageMappings: Record<string, string>
7
+ ): string => {
8
+ let filePath = relative(dirname(from), to)
9
+ if (!/^\.+\//.test(filePath)) {
10
+ filePath = `./${filePath}`
11
+ }
12
+
13
+ // If the path includes node_modules, strip everything before and including node_modules/
14
+ if (filePath.includes('node_modules')) {
15
+ const nodeModulesIndex = filePath.indexOf('node_modules/')
16
+ if (nodeModulesIndex !== -1) {
17
+ filePath = filePath.substring(nodeModulesIndex + 'node_modules/'.length)
18
+ }
19
+ return filePath.replace('.ts', '.js')
20
+ }
21
+
22
+ const absolutePath = resolve(dirname(from), to)
23
+ const fromAbsolutePath = resolve(dirname(from))
24
+
25
+ // Check if both files are in the same package directory
26
+ // If so, skip packageMappings to use relative paths
27
+ let inSamePackage = false
28
+ for (const [path] of Object.entries(packageMappings)) {
29
+ if (absolutePath.includes(path) && fromAbsolutePath.includes(path)) {
30
+ inSamePackage = true
31
+ break
32
+ }
33
+ }
34
+
35
+ // Only apply packageMappings if files are not in the same package
36
+ if (!inSamePackage) {
37
+ // let usesPackageName = false
38
+ for (const [path, packageName] of Object.entries(packageMappings)) {
39
+ if (absolutePath.includes(path)) {
40
+ // usesPackageName = true
41
+ // Use string slicing instead of regex to avoid ReDoS and ensure correct behavior
42
+ const pathIndex = absolutePath.indexOf(path)
43
+ filePath = packageName + absolutePath.slice(pathIndex + path.length)
44
+ break
45
+ }
46
+ }
47
+ }
48
+
49
+ // if (usesPackageName) {
50
+ // return filePath.replace('.ts', '')
51
+ // }
52
+ return filePath.replace('.ts', '.js')
53
+ }
@@ -0,0 +1,25 @@
1
+ import { getFileImportRelativePath } from './file-import-path.js'
2
+
3
+ export const serializeFileImports = (
4
+ importType: string,
5
+ outputPath: string,
6
+ files: Set<string>,
7
+ packageMappings: Record<string, string> = {}
8
+ ) => {
9
+ const serializedOutput: string[] = [
10
+ `/* The files with an ${importType} function call */`,
11
+ ]
12
+
13
+ Array.from(files)
14
+ .sort()
15
+ .forEach((path) => {
16
+ const filePath = getFileImportRelativePath(
17
+ outputPath,
18
+ path,
19
+ packageMappings
20
+ )
21
+ serializedOutput.push(`import '${filePath}'`)
22
+ })
23
+
24
+ return serializedOutput.join('\n')
25
+ }
@@ -0,0 +1,56 @@
1
+ import { dirname } from 'path'
2
+ import { mkdir, readFile, writeFile } from 'fs/promises'
3
+ import { CLILogger } from '../services/cli-logger.service.js'
4
+
5
+ // TODO: add version back in once the ESM dust settles
6
+ export const DO_NOT_MODIFY_COMMENT = `/**
7
+ * This file was generated by the @pikku/cli
8
+ */
9
+ `
10
+
11
+ export const writeFileInDir = async (
12
+ logger: CLILogger,
13
+ path: string,
14
+ content: string,
15
+ {
16
+ ignoreModifyComment = false,
17
+ logWrite = true,
18
+ }: { ignoreModifyComment?: boolean; logWrite?: boolean } = {}
19
+ ) => {
20
+ if (path.includes('.json')) {
21
+ ignoreModifyComment = true
22
+ }
23
+
24
+ if (content.includes('server-only')) {
25
+ content = content.replace(
26
+ "'server-only'",
27
+ `'server-only'\n\n${ignoreModifyComment ? '' : DO_NOT_MODIFY_COMMENT}`
28
+ )
29
+ } else {
30
+ content = `${ignoreModifyComment ? '' : DO_NOT_MODIFY_COMMENT}${content}`
31
+ }
32
+
33
+ // Try to read existing file content
34
+ let existingContent: string | undefined
35
+ try {
36
+ existingContent = await readFile(path, 'utf-8')
37
+ } catch (error) {
38
+ // Only suppress ENOENT (file not found) errors
39
+ // Rethrow permission, I/O, encoding, or other errors
40
+ const nodeError = error as NodeJS.ErrnoException
41
+ if (nodeError.code !== 'ENOENT') {
42
+ throw error
43
+ }
44
+ // File doesn't exist, so we need to write it
45
+ }
46
+
47
+ // Only write if content has changed or file doesn't exist
48
+ if (existingContent !== content) {
49
+ await mkdir(dirname(path), { recursive: true })
50
+ await writeFile(path, content, 'utf-8')
51
+
52
+ if (logWrite) {
53
+ logger.info({ message: `✓ File written to ${path}`, type: 'success' })
54
+ }
55
+ }
56
+ }
@@ -0,0 +1,43 @@
1
+ import { Config } from '../../types/application-types.js'
2
+ import { CLILogger } from '../services/cli-logger.service.js'
3
+ import { getFileImportRelativePath } from './file-import-path.js'
4
+ import { writeFileInDir } from './file-writer.js'
5
+
6
+ export const generateBootstrapFile = async (
7
+ logger: CLILogger,
8
+ config: Config,
9
+ bootstrapFile: string,
10
+ specificImports: string[],
11
+ schemas?: boolean,
12
+ hasMiddleware?: boolean
13
+ ) => {
14
+ // Common imports that every bootstrap file needs
15
+ const commonImports: string[] = []
16
+
17
+ // Add middleware first (must be registered before functions meta)
18
+ if (hasMiddleware) {
19
+ commonImports.push(config.middlewareFile)
20
+ }
21
+
22
+ commonImports.push(config.functionsMetaMinFile, config.functionsFile)
23
+
24
+ // Add schema if it exists
25
+ if (schemas) {
26
+ commonImports.push(`${config.schemaDirectory}/register.gen.ts`)
27
+ }
28
+
29
+ // Combine common imports with specific imports
30
+ const allImports = [...commonImports, ...specificImports]
31
+
32
+ await writeFileInDir(
33
+ logger,
34
+ bootstrapFile,
35
+ allImports
36
+ .map(
37
+ (to) =>
38
+ `import '${getFileImportRelativePath(bootstrapFile, to, config.packageMappings)}'`
39
+ )
40
+ .sort((to) => (to.includes('meta') ? -1 : 1)) // Ensure meta files are at the top
41
+ .join('\n')
42
+ )
43
+ }
@@ -0,0 +1,356 @@
1
+ import { join, dirname, resolve, isAbsolute } from 'path'
2
+ import { readdir, readFile } from 'fs/promises'
3
+ import { PikkuCLIConfig } from '../../types/config.js'
4
+ import { InspectorFilters } from '@pikku/inspector'
5
+ import { PikkuWiringTypes } from '@pikku/core'
6
+ import { CLILogger } from '../services/cli-logger.service.js'
7
+
8
+ const CONFIG_DIR_FILES = [
9
+ 'nextBackendFile',
10
+ 'nextHTTPFile',
11
+ 'fetchFile',
12
+ 'websocketFile',
13
+ 'rpcWiringsFile',
14
+ 'queueWiringsFile',
15
+ 'mcpJsonFile',
16
+ ]
17
+
18
+ export const getPikkuCLIConfig = async (
19
+ logger: CLILogger,
20
+ configFile: string | undefined = undefined,
21
+ requiredFields: Array<keyof PikkuCLIConfig>,
22
+ filters: InspectorFilters = {},
23
+ exitProcess: boolean = false
24
+ ): Promise<PikkuCLIConfig> => {
25
+ const config = await _getPikkuCLIConfig(
26
+ logger,
27
+ configFile,
28
+ requiredFields,
29
+ filters,
30
+ exitProcess
31
+ )
32
+ return config
33
+ }
34
+
35
+ const _getPikkuCLIConfig = async (
36
+ logger: CLILogger,
37
+ configFile: string | undefined = undefined,
38
+ requiredFields: Array<keyof PikkuCLIConfig>,
39
+ filters: InspectorFilters = {},
40
+ exitProcess: boolean = false
41
+ ): Promise<PikkuCLIConfig> => {
42
+ if (!configFile) {
43
+ let execDirectory = process.cwd()
44
+ const files = await readdir(execDirectory)
45
+ const file = files.find((file) => /pikku\.config\.(ts|js|json)$/.test(file))
46
+ if (!file) {
47
+ throw new Error('Config file pikku.config.json not found')
48
+ }
49
+ configFile = join(execDirectory, file)
50
+ }
51
+
52
+ try {
53
+ let result: PikkuCLIConfig
54
+ const file = await readFile(configFile, 'utf-8')
55
+ const configDir = dirname(configFile)
56
+ const config: PikkuCLIConfig = JSON.parse(file)
57
+ if (config.extends) {
58
+ const extendedConfig = await getPikkuCLIConfig(
59
+ logger,
60
+ resolve(configDir, config.extends),
61
+ [],
62
+ filters,
63
+ exitProcess
64
+ )
65
+ result = {
66
+ ...extendedConfig,
67
+ ...config,
68
+ configDir,
69
+ packageMappings: {
70
+ ...extendedConfig.packageMappings,
71
+ ...config.packageMappings,
72
+ },
73
+ }
74
+ } else {
75
+ result = {
76
+ ...config,
77
+ configDir,
78
+ packageMappings: config.packageMappings || {},
79
+ rootDir: config.rootDir
80
+ ? resolve(configDir, config.rootDir)
81
+ : configDir,
82
+ }
83
+ }
84
+
85
+ // Create transport/event directories
86
+ const functionDir = join(result.outDir, 'function')
87
+ const httpDir = join(result.outDir, 'http')
88
+ const channelDir = join(result.outDir, 'channel')
89
+ const rpcDir = join(result.outDir, 'rpc')
90
+ const schedulerDir = join(result.outDir, 'scheduler')
91
+ const queueDir = join(result.outDir, 'queue')
92
+ const mcpDir = join(result.outDir, 'mcp')
93
+ const cliDir = join(result.outDir, 'cli')
94
+ const middlewareDir = join(result.outDir, 'middleware')
95
+
96
+ // Create directories if they don't exist (will be done lazily when files are written)
97
+
98
+ if (!result.schemaDirectory) {
99
+ result.schemaDirectory = join(result.outDir, 'schemas')
100
+ }
101
+
102
+ // Functions
103
+ if (!result.functionsFile) {
104
+ result.functionsFile = join(functionDir, 'pikku-functions.gen.ts')
105
+ }
106
+ if (!result.functionsMetaFile) {
107
+ result.functionsMetaFile = join(
108
+ functionDir,
109
+ 'pikku-functions-meta.gen.ts'
110
+ )
111
+ }
112
+ if (!result.functionsMetaMinFile) {
113
+ result.functionsMetaMinFile = join(
114
+ functionDir,
115
+ 'pikku-functions-meta.min.gen.ts'
116
+ )
117
+ }
118
+ if (!result.functionTypesFile) {
119
+ result.functionTypesFile = join(
120
+ functionDir,
121
+ 'pikku-function-types.gen.ts'
122
+ )
123
+ }
124
+ if (!result.typesDeclarationFile) {
125
+ result.typesDeclarationFile = join(result.outDir, 'pikku-types.gen.ts')
126
+ }
127
+
128
+ // HTTP
129
+ if (!result.httpWiringsFile) {
130
+ result.httpWiringsFile = join(httpDir, 'pikku-http-wirings.gen.ts')
131
+ }
132
+ if (!result.httpWiringMetaFile) {
133
+ result.httpWiringMetaFile = join(
134
+ httpDir,
135
+ 'pikku-http-wirings-meta.gen.ts'
136
+ )
137
+ }
138
+ if (!result.httpMapDeclarationFile) {
139
+ result.httpMapDeclarationFile = join(
140
+ httpDir,
141
+ 'pikku-http-wirings-map.gen.d.ts'
142
+ )
143
+ }
144
+ if (!result.httpTypesFile) {
145
+ result.httpTypesFile = join(httpDir, 'pikku-http-types.gen.ts')
146
+ }
147
+
148
+ // Channels/WebSocket
149
+ if (!result.channelsWiringFile) {
150
+ result.channelsWiringFile = join(channelDir, 'pikku-channels.gen.ts')
151
+ }
152
+ if (!result.channelsWiringMetaFile) {
153
+ result.channelsWiringMetaFile = join(
154
+ channelDir,
155
+ 'pikku-channels-meta.gen.ts'
156
+ )
157
+ }
158
+ if (!result.channelsMapDeclarationFile) {
159
+ result.channelsMapDeclarationFile = join(
160
+ channelDir,
161
+ 'pikku-channels-map.gen.d.ts'
162
+ )
163
+ }
164
+ if (!result.channelsTypesFile) {
165
+ result.channelsTypesFile = join(channelDir, 'pikku-channel-types.gen.ts')
166
+ }
167
+
168
+ // RPC (internal and external)
169
+ if (!result.rpcInternalWiringMetaFile) {
170
+ result.rpcInternalWiringMetaFile = join(
171
+ rpcDir,
172
+ 'pikku-rpc-wirings-meta.internal.gen.ts'
173
+ )
174
+ }
175
+
176
+ if (!result.rpcInternalMapDeclarationFile) {
177
+ result.rpcInternalMapDeclarationFile = join(
178
+ rpcDir,
179
+ 'pikku-rpc-wirings-map.internal.gen.d.ts'
180
+ )
181
+ }
182
+
183
+ if (!result.rpcMapDeclarationFile) {
184
+ result.rpcMapDeclarationFile = join(
185
+ rpcDir,
186
+ 'pikku-rpc-wirings-map.gen.d.ts'
187
+ )
188
+ }
189
+
190
+ // Scheduler
191
+ if (!result.schedulersWiringFile) {
192
+ result.schedulersWiringFile = join(
193
+ schedulerDir,
194
+ 'pikku-schedulers-wirings.gen.ts'
195
+ )
196
+ }
197
+ if (!result.schedulersWiringMetaFile) {
198
+ result.schedulersWiringMetaFile = join(
199
+ schedulerDir,
200
+ 'pikku-schedulers-wirings-meta.gen.ts'
201
+ )
202
+ }
203
+ if (!result.schedulersTypesFile) {
204
+ result.schedulersTypesFile = join(
205
+ schedulerDir,
206
+ 'pikku-scheduler-types.gen.ts'
207
+ )
208
+ }
209
+
210
+ // Queue
211
+ if (!result.queueWorkersWiringFile) {
212
+ result.queueWorkersWiringFile = join(
213
+ queueDir,
214
+ 'pikku-queue-workers-wirings.gen.ts'
215
+ )
216
+ }
217
+ if (!result.queueWorkersWiringMetaFile) {
218
+ result.queueWorkersWiringMetaFile = join(
219
+ queueDir,
220
+ 'pikku-queue-workers-wirings-meta.gen.ts'
221
+ )
222
+ }
223
+ if (!result.queueMapDeclarationFile) {
224
+ result.queueMapDeclarationFile = join(
225
+ queueDir,
226
+ 'pikku-queue-workers-wirings-map.gen.d.ts'
227
+ )
228
+ }
229
+ if (!result.queueTypesFile) {
230
+ result.queueTypesFile = join(queueDir, 'pikku-queue-types.gen.ts')
231
+ }
232
+
233
+ // Services
234
+ if (!result.servicesFile) {
235
+ result.servicesFile = join(result.outDir, 'pikku-services.gen.ts')
236
+ }
237
+
238
+ // Middleware
239
+ if (!result.middlewareFile) {
240
+ result.middlewareFile = join(middlewareDir, 'pikku-middleware.gen.ts')
241
+ }
242
+ if (!result.middlewareGroupsMetaFile) {
243
+ result.middlewareGroupsMetaFile = join(
244
+ middlewareDir,
245
+ 'pikku-middleware-groups-meta.gen.ts'
246
+ )
247
+ }
248
+
249
+ // Bootstrap files
250
+ if (!result.bootstrapFile) {
251
+ result.bootstrapFile = join(result.outDir, 'pikku-bootstrap.gen.ts')
252
+ }
253
+
254
+ // MCP
255
+ if (!result.mcpWiringsMetaFile) {
256
+ result.mcpWiringsMetaFile = join(mcpDir, 'pikku-mcp-wirings-meta.gen.ts')
257
+ }
258
+ if (!result.mcpWiringsFile) {
259
+ result.mcpWiringsFile = join(mcpDir, 'pikku-mcp-wirings.gen.ts')
260
+ }
261
+ if (!result.mcpJsonFile) {
262
+ result.mcpJsonFile = join(mcpDir, 'pikku-mcp.gen.json')
263
+ }
264
+ if (!result.mcpTypesFile) {
265
+ result.mcpTypesFile = join(mcpDir, 'pikku-mcp-types.gen.ts')
266
+ }
267
+
268
+ // CLI
269
+ if (!result.cliWiringsFile) {
270
+ result.cliWiringsFile = join(cliDir, 'pikku-cli-wirings.gen.ts')
271
+ }
272
+ if (!result.cliWiringMetaFile) {
273
+ result.cliWiringMetaFile = join(cliDir, 'pikku-cli-wirings-meta.gen.ts')
274
+ }
275
+ if (!result.cliBootstrapFile) {
276
+ result.cliBootstrapFile = join(cliDir, 'pikku-cli-bootstrap.gen.ts')
277
+ }
278
+ if (!result.cliTypesFile) {
279
+ result.cliTypesFile = join(cliDir, 'pikku-cli-types.gen.ts')
280
+ }
281
+
282
+ result.bootstrapFiles = result.bootstrapFiles || {}
283
+ for (const key of Object.keys(PikkuWiringTypes)) {
284
+ const eventDir = join(result.outDir, key.toLowerCase())
285
+ result.bootstrapFiles[key] = join(
286
+ eventDir,
287
+ `pikku-bootstrap-${key}.gen.ts`
288
+ )
289
+ }
290
+
291
+ if (requiredFields.length > 0) {
292
+ validateCLIConfig(result, requiredFields)
293
+ }
294
+
295
+ for (const objectKey of Object.keys(result)) {
296
+ if (objectKey.endsWith('File') || objectKey.endsWith('Directory')) {
297
+ const relativeTo = CONFIG_DIR_FILES.includes(objectKey)
298
+ ? result.configDir
299
+ : result.rootDir
300
+ // Only normalize string values to avoid corrupting nested objects
301
+ if (result[objectKey] && typeof result[objectKey] === 'string') {
302
+ if (!isAbsolute(result[objectKey])) {
303
+ result[objectKey] = join(relativeTo, result[objectKey])
304
+ }
305
+ }
306
+ }
307
+ }
308
+
309
+ // Separately normalize bootstrapFiles (Record<string, string>)
310
+ if (result.bootstrapFiles && typeof result.bootstrapFiles === 'object') {
311
+ for (const [key, value] of Object.entries(result.bootstrapFiles)) {
312
+ if (typeof value === 'string' && !isAbsolute(value)) {
313
+ result.bootstrapFiles[key] = join(result.rootDir, value)
314
+ }
315
+ }
316
+ }
317
+
318
+ result.filters = result.filters || {}
319
+ if (filters.tags && filters.tags.length > 0) {
320
+ result.filters.tags = filters.tags
321
+ }
322
+ if (filters.types && filters.types.length > 0) {
323
+ result.filters.types = filters.types
324
+ }
325
+ if (filters.directories && filters.directories.length > 0) {
326
+ result.filters.directories = filters.directories
327
+ }
328
+
329
+ if (!isAbsolute(result.tsconfig)) {
330
+ result.tsconfig = join(result.rootDir, result.tsconfig)
331
+ }
332
+
333
+ return result
334
+ } catch (e: any) {
335
+ logger.error(e)
336
+ throw new Error(`Config file not found: ${configFile}`)
337
+ }
338
+ }
339
+
340
+ export const validateCLIConfig = (
341
+ cliConfig: PikkuCLIConfig,
342
+ required: Array<keyof PikkuCLIConfig>
343
+ ) => {
344
+ let errors: string[] = []
345
+ for (const key of required) {
346
+ if (!cliConfig[key]) {
347
+ errors.push(key)
348
+ }
349
+ }
350
+
351
+ if (errors.length > 0) {
352
+ throw new Error(
353
+ `${errors.join(', ')} ${errors.length === 1 ? 'is' : 'are'} required in pikku.config.json`
354
+ )
355
+ }
356
+ }