@pikku/cli 0.11.1 → 0.11.2

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 (257) hide show
  1. package/.pikku/channel/pikku-channel-types.gen.ts +11 -12
  2. package/.pikku/channel/pikku-channels-map.gen.d.ts +8 -8
  3. package/.pikku/channel/pikku-channels-meta.gen.ts +1 -1
  4. package/.pikku/channel/pikku-channels.gen.ts +1 -1
  5. package/.pikku/cli/pikku-cli-channel.ts +2 -2
  6. package/.pikku/cli/pikku-cli-client.gen.ts +1 -3
  7. package/.pikku/cli/pikku-cli-types.gen.ts +3 -3
  8. package/.pikku/cli/pikku-cli-wirings-meta.gen.json +146 -0
  9. package/.pikku/cli/pikku-cli-wirings-meta.gen.ts +4 -157
  10. package/.pikku/cli/pikku-cli-wirings.gen.ts +3 -3
  11. package/.pikku/cli/pikku-cli.gen.ts +3 -3
  12. package/.pikku/function/pikku-function-types.gen.ts +49 -63
  13. package/.pikku/function/pikku-functions-meta.gen.json +988 -0
  14. package/.pikku/function/pikku-functions-meta.gen.ts +4 -970
  15. package/.pikku/function/pikku-functions-meta.min.gen.json +212 -0
  16. package/.pikku/function/pikku-functions-meta.min.gen.ts +4 -209
  17. package/.pikku/http/pikku-http-types.gen.ts +2 -2
  18. package/.pikku/http/pikku-http-wirings-map.gen.d.ts +8 -8
  19. package/.pikku/http/pikku-http-wirings-meta.gen.ts +1 -1
  20. package/.pikku/http/pikku-http-wirings.gen.ts +1 -1
  21. package/.pikku/mcp/pikku-mcp-types.gen.ts +13 -13
  22. package/.pikku/mcp/pikku-mcp-wirings-meta.gen.json +5 -0
  23. package/.pikku/mcp/pikku-mcp-wirings-meta.gen.ts +6 -4
  24. package/.pikku/mcp/pikku-mcp-wirings.gen.ts +1 -1
  25. package/.pikku/pikku-bootstrap.gen.ts +1 -4
  26. package/.pikku/pikku-services.gen.ts +4 -6
  27. package/.pikku/pikku-types.gen.ts +1 -1
  28. package/.pikku/pikku-websocket.gen.ts +1 -1
  29. package/.pikku/queue/pikku-queue-types.gen.ts +2 -2
  30. package/.pikku/queue/pikku-queue-workers-wirings-map.gen.d.ts +8 -8
  31. package/.pikku/queue/pikku-queue-workers-wirings-meta.gen.json +1 -0
  32. package/.pikku/queue/pikku-queue-workers-wirings-meta.gen.ts +5 -7
  33. package/.pikku/queue/pikku-queue-workers-wirings.gen.ts +1 -1
  34. package/.pikku/rpc/pikku-remote-rpc-workers.gen.ts +2 -2
  35. package/.pikku/rpc/pikku-rpc-wirings-map.gen.d.ts +8 -8
  36. package/.pikku/rpc/pikku-rpc-wirings-map.internal.gen.d.ts +34 -33
  37. package/.pikku/scheduler/pikku-scheduler-types.gen.ts +2 -2
  38. package/.pikku/scheduler/pikku-schedulers-wirings-meta.gen.json +1 -0
  39. package/.pikku/scheduler/pikku-schedulers-wirings-meta.gen.ts +5 -2
  40. package/.pikku/scheduler/pikku-schedulers-wirings.gen.ts +1 -1
  41. package/.pikku/schemas/register.gen.ts +25 -25
  42. package/.pikku/schemas/schemas/PikkuCLIConfig.schema.json +1 -1
  43. package/.pikku/services/config.gen.json +99 -0
  44. package/.pikku/services/getInspectorState.gen.json +10 -0
  45. package/.pikku/services/jwt.gen.json +13 -0
  46. package/.pikku/services/logger.gen.json +25 -0
  47. package/.pikku/services/queueService.gen.json +14 -0
  48. package/.pikku/services/schedulerService.gen.json +17 -0
  49. package/.pikku/services/schema.gen.json +14 -0
  50. package/.pikku/services/variables.gen.json +13 -0
  51. package/.pikku/services/workflowService.gen.json +31 -0
  52. package/.pikku/workflow/pikku-workflow-map.gen.d.ts +8 -8
  53. package/.pikku/workflow/pikku-workflow-types.gen.ts +36 -31
  54. package/.pikku/workflow/pikku-workflow-wirings-meta.gen.json +1 -0
  55. package/.pikku/workflow/pikku-workflow-wirings-meta.gen.ts +5 -2
  56. package/.pikku/workflow/pikku-workflow-wirings.gen.ts +6 -2
  57. package/CHANGELOG.md +21 -0
  58. package/bin/pikku.ts +6 -32
  59. package/build.sh +53 -31
  60. package/cli.schema.json +1 -1
  61. package/dist/.pikku/channel/pikku-channel-types.gen.d.ts +6 -7
  62. package/dist/.pikku/channel/pikku-channel-types.gen.js +1 -1
  63. package/dist/.pikku/channel/pikku-channels-meta.gen.js +1 -1
  64. package/dist/.pikku/channel/pikku-channels.gen.d.ts +1 -1
  65. package/dist/.pikku/channel/pikku-channels.gen.js +1 -1
  66. package/dist/.pikku/cli/pikku-cli-channel.js +2 -2
  67. package/dist/.pikku/cli/pikku-cli-client.gen.d.ts +1 -1
  68. package/dist/.pikku/cli/pikku-cli-client.gen.js +1 -3
  69. package/dist/.pikku/cli/pikku-cli-types.gen.d.ts +3 -3
  70. package/dist/.pikku/cli/pikku-cli-types.gen.js +1 -1
  71. package/dist/.pikku/cli/pikku-cli-wirings-meta.gen.js +3 -157
  72. package/dist/.pikku/cli/pikku-cli-wirings-meta.gen.json +146 -0
  73. package/dist/.pikku/cli/pikku-cli-wirings.gen.d.ts +2 -2
  74. package/dist/.pikku/cli/pikku-cli-wirings.gen.js +2 -2
  75. package/dist/.pikku/cli/pikku-cli.gen.d.ts +1 -1
  76. package/dist/.pikku/cli/pikku-cli.gen.js +3 -3
  77. package/dist/.pikku/function/pikku-function-types.gen.d.ts +29 -79
  78. package/dist/.pikku/function/pikku-function-types.gen.js +19 -15
  79. package/dist/.pikku/function/pikku-functions-meta.gen.js +3 -969
  80. package/dist/.pikku/function/pikku-functions-meta.gen.json +988 -0
  81. package/dist/.pikku/function/pikku-functions-meta.min.gen.js +3 -208
  82. package/dist/.pikku/function/pikku-functions-meta.min.gen.json +212 -0
  83. package/dist/.pikku/http/pikku-http-types.gen.d.ts +2 -2
  84. package/dist/.pikku/http/pikku-http-types.gen.js +1 -1
  85. package/dist/.pikku/http/pikku-http-wirings-meta.gen.js +1 -1
  86. package/dist/.pikku/http/pikku-http-wirings.gen.d.ts +1 -1
  87. package/dist/.pikku/http/pikku-http-wirings.gen.js +1 -1
  88. package/dist/.pikku/mcp/pikku-mcp-types.gen.d.ts +13 -13
  89. package/dist/.pikku/mcp/pikku-mcp-types.gen.js +1 -1
  90. package/dist/.pikku/mcp/pikku-mcp-wirings-meta.gen.js +5 -4
  91. package/dist/.pikku/mcp/pikku-mcp-wirings-meta.gen.json +5 -0
  92. package/dist/.pikku/mcp/pikku-mcp-wirings.gen.d.ts +1 -1
  93. package/dist/.pikku/mcp/pikku-mcp-wirings.gen.js +1 -1
  94. package/dist/.pikku/pikku-bootstrap.gen.d.ts +1 -4
  95. package/dist/.pikku/pikku-bootstrap.gen.js +1 -4
  96. package/dist/.pikku/pikku-services.gen.d.ts +3 -6
  97. package/dist/.pikku/pikku-services.gen.js +2 -5
  98. package/dist/.pikku/pikku-types.gen.d.ts +1 -1
  99. package/dist/.pikku/pikku-types.gen.js +1 -1
  100. package/dist/.pikku/pikku-websocket.gen.d.ts +1 -1
  101. package/dist/.pikku/pikku-websocket.gen.js +1 -1
  102. package/dist/.pikku/queue/pikku-queue-types.gen.d.ts +2 -2
  103. package/dist/.pikku/queue/pikku-queue-types.gen.js +1 -1
  104. package/dist/.pikku/queue/pikku-queue-workers-wirings-meta.gen.js +3 -7
  105. package/dist/.pikku/queue/pikku-queue-workers-wirings-meta.gen.json +1 -0
  106. package/dist/.pikku/queue/pikku-queue-workers-wirings.gen.d.ts +1 -1
  107. package/dist/.pikku/queue/pikku-queue-workers-wirings.gen.js +1 -1
  108. package/dist/.pikku/rpc/pikku-remote-rpc-workers.gen.d.ts +6 -9
  109. package/dist/.pikku/rpc/pikku-remote-rpc-workers.gen.js +2 -2
  110. package/dist/.pikku/scheduler/pikku-scheduler-types.gen.d.ts +2 -2
  111. package/dist/.pikku/scheduler/pikku-scheduler-types.gen.js +1 -1
  112. package/dist/.pikku/scheduler/pikku-schedulers-wirings-meta.gen.js +3 -2
  113. package/dist/.pikku/scheduler/pikku-schedulers-wirings-meta.gen.json +1 -0
  114. package/dist/.pikku/scheduler/pikku-schedulers-wirings.gen.d.ts +1 -1
  115. package/dist/.pikku/scheduler/pikku-schedulers-wirings.gen.js +1 -1
  116. package/dist/.pikku/schemas/register.gen.js +15 -15
  117. package/dist/.pikku/schemas/schemas/PikkuCLIConfig.schema.json +1 -1
  118. package/dist/.pikku/workflow/pikku-workflow-types.gen.d.ts +29 -25
  119. package/dist/.pikku/workflow/pikku-workflow-types.gen.js +22 -8
  120. package/dist/.pikku/workflow/pikku-workflow-wirings-meta.gen.js +3 -2
  121. package/dist/.pikku/workflow/pikku-workflow-wirings-meta.gen.json +1 -0
  122. package/dist/.pikku/workflow/pikku-workflow-wirings.gen.d.ts +6 -2
  123. package/dist/.pikku/workflow/pikku-workflow-wirings.gen.js +6 -3
  124. package/dist/bin/pikku.js +5 -26
  125. package/dist/src/cli.wiring.js +4 -4
  126. package/dist/src/functions/commands/all.js +82 -42
  127. package/dist/src/functions/commands/bootstrap.js +22 -10
  128. package/dist/src/functions/commands/watch.js +6 -3
  129. package/dist/src/functions/runtimes/nextjs/pikku-command-nextjs.js +12 -7
  130. package/dist/src/functions/runtimes/nextjs/serialize-nextjs-backend-wrapper.d.ts +1 -1
  131. package/dist/src/functions/runtimes/nextjs/serialize-nextjs-backend-wrapper.js +42 -4
  132. package/dist/src/functions/runtimes/nextjs/serialize-nextjs-http-wrapper.d.ts +1 -1
  133. package/dist/src/functions/runtimes/nextjs/serialize-nextjs-http-wrapper.js +40 -2
  134. package/dist/src/functions/wirings/channels/pikku-channels.js +9 -2
  135. package/dist/src/functions/wirings/channels/serialize-channel-types.js +10 -11
  136. package/dist/src/functions/wirings/cli/pikku-command-cli-entry.js +4 -4
  137. package/dist/src/functions/wirings/cli/pikku-command-cli-types.js +1 -1
  138. package/dist/src/functions/wirings/cli/pikku-command-cli.js +9 -3
  139. package/dist/src/functions/wirings/cli/serialize-channel-cli.js +1 -1
  140. package/dist/src/functions/wirings/cli/serialize-cli-types.js +2 -2
  141. package/dist/src/functions/wirings/cli/serialize-local-cli-bootstrap.d.ts +1 -1
  142. package/dist/src/functions/wirings/cli/serialize-local-cli-bootstrap.js +4 -4
  143. package/dist/src/functions/wirings/functions/pikku-command-function-types-split.js +4 -4
  144. package/dist/src/functions/wirings/functions/pikku-command-functions.js +15 -5
  145. package/dist/src/functions/wirings/functions/pikku-command-services.d.ts +1 -1
  146. package/dist/src/functions/wirings/functions/pikku-command-services.js +23 -23
  147. package/dist/src/functions/wirings/functions/schemas.js +1 -1
  148. package/dist/src/functions/wirings/functions/serialize-function-types.d.ts +1 -1
  149. package/dist/src/functions/wirings/functions/serialize-function-types.js +50 -64
  150. package/dist/src/functions/wirings/http/openapi-spec-generator.js +4 -4
  151. package/dist/src/functions/wirings/http/pikku-http-routes.js +9 -2
  152. package/dist/src/functions/wirings/http/serialize-http-types.js +1 -1
  153. package/dist/src/functions/wirings/mcp/pikku-command-mcp.js +18 -4
  154. package/dist/src/functions/wirings/mcp/serialize-mcp-types.js +12 -12
  155. package/dist/src/functions/wirings/middleware/pikku-command-middleware.js +26 -2
  156. package/dist/src/functions/wirings/middleware/serialize-middleware-groups-meta.d.ts +5 -2
  157. package/dist/src/functions/wirings/middleware/serialize-middleware-groups-meta.js +5 -13
  158. package/dist/src/functions/wirings/queue/pikku-command-queue.js +9 -3
  159. package/dist/src/functions/wirings/queue/pikku-queue.js +9 -3
  160. package/dist/src/functions/wirings/queue/serialize-queue-meta.d.ts +2 -1
  161. package/dist/src/functions/wirings/queue/serialize-queue-meta.js +10 -1
  162. package/dist/src/functions/wirings/queue/serialize-queue-types.js +1 -1
  163. package/dist/src/functions/wirings/rpc/pikku-command-rpc.js +9 -2
  164. package/dist/src/functions/wirings/rpc/serialize-public-rpc.js +11 -4
  165. package/dist/src/functions/wirings/rpc/serialize-remote-rpc.js +1 -1
  166. package/dist/src/functions/wirings/rpc/serialize-rpc-wrapper.js +3 -3
  167. package/dist/src/functions/wirings/scheduler/pikku-command-scheduler.js +6 -3
  168. package/dist/src/functions/wirings/scheduler/serialize-scheduler-meta.d.ts +2 -1
  169. package/dist/src/functions/wirings/scheduler/serialize-scheduler-meta.js +11 -1
  170. package/dist/src/functions/wirings/scheduler/serialize-scheduler-types.js +1 -1
  171. package/dist/src/functions/wirings/services/pikku-command-service-metadata.d.ts +1 -0
  172. package/dist/src/functions/wirings/services/pikku-command-service-metadata.js +22 -0
  173. package/dist/src/functions/wirings/workflow/pikku-command-workflow-types.js +3 -1
  174. package/dist/src/functions/wirings/workflow/pikku-command-workflow.js +12 -8
  175. package/dist/src/functions/wirings/workflow/serialize-workflow-meta.d.ts +2 -1
  176. package/dist/src/functions/wirings/workflow/serialize-workflow-meta.js +11 -1
  177. package/dist/src/functions/wirings/workflow/serialize-workflow-types.d.ts +1 -1
  178. package/dist/src/functions/wirings/workflow/serialize-workflow-types.js +36 -31
  179. package/dist/src/functions/wirings/workflow/serialize-workflow-wirings.d.ts +8 -0
  180. package/dist/src/functions/wirings/workflow/serialize-workflow-wirings.js +30 -0
  181. package/dist/src/functions/wirings/workflow/serialize-workflow-workers.js +2 -2
  182. package/dist/src/middleware/log-command-info-and-time.d.ts +2 -2
  183. package/dist/src/middleware/log-command-info-and-time.js +1 -4
  184. package/dist/src/services/cli-logger-forwarder.service.js +1 -1
  185. package/dist/src/services.d.ts +2 -7
  186. package/dist/src/services.js +14 -12
  187. package/dist/src/utils/check-required-types.d.ts +2 -2
  188. package/dist/src/utils/check-required-types.js +2 -3
  189. package/dist/src/utils/pikku-cli-config.js +35 -2
  190. package/dist/src/utils/pikku-files-and-methods.d.ts +2 -2
  191. package/dist/src/utils/pikku-files-and-methods.js +4 -4
  192. package/dist/src/utils/schema-generator.d.ts +1 -1
  193. package/dist/src/utils/schema-generator.js +1 -1
  194. package/dist/tsconfig.tsbuildinfo +1 -1
  195. package/package.json +7 -8
  196. package/src/cli.wiring.ts +4 -4
  197. package/src/functions/commands/all.ts +94 -45
  198. package/src/functions/commands/bootstrap.ts +25 -10
  199. package/src/functions/commands/watch.ts +6 -3
  200. package/src/functions/runtimes/nextjs/pikku-command-nextjs.ts +26 -5
  201. package/src/functions/runtimes/nextjs/serialize-nextjs-backend-wrapper.ts +43 -4
  202. package/src/functions/runtimes/nextjs/serialize-nextjs-http-wrapper.ts +40 -1
  203. package/src/functions/wirings/channels/pikku-channels.ts +27 -3
  204. package/src/functions/wirings/channels/serialize-channel-types.ts +10 -11
  205. package/src/functions/wirings/cli/pikku-command-cli-entry.ts +4 -4
  206. package/src/functions/wirings/cli/pikku-command-cli-types.ts +1 -1
  207. package/src/functions/wirings/cli/pikku-command-cli.ts +26 -3
  208. package/src/functions/wirings/cli/serialize-channel-cli.ts +1 -1
  209. package/src/functions/wirings/cli/serialize-cli-types.ts +2 -2
  210. package/src/functions/wirings/cli/serialize-local-cli-bootstrap.ts +5 -5
  211. package/src/functions/wirings/functions/pikku-command-function-types-split.ts +6 -6
  212. package/src/functions/wirings/functions/pikku-command-functions.ts +39 -4
  213. package/src/functions/wirings/functions/pikku-command-services.ts +25 -25
  214. package/src/functions/wirings/functions/schemas.ts +2 -2
  215. package/src/functions/wirings/functions/serialize-function-types.ts +51 -65
  216. package/src/functions/wirings/http/openapi-spec-generator.ts +14 -5
  217. package/src/functions/wirings/http/pikku-http-routes.ts +28 -2
  218. package/src/functions/wirings/http/serialize-http-types.ts +1 -1
  219. package/src/functions/wirings/mcp/pikku-command-mcp.ts +30 -4
  220. package/src/functions/wirings/mcp/serialize-mcp-types.ts +12 -12
  221. package/src/functions/wirings/middleware/pikku-command-middleware.ts +35 -2
  222. package/src/functions/wirings/middleware/serialize-middleware-groups-meta.ts +4 -19
  223. package/src/functions/wirings/permissions/pikku-command-permissions.ts +2 -2
  224. package/src/functions/wirings/queue/pikku-command-queue.ts +27 -2
  225. package/src/functions/wirings/queue/pikku-queue.ts +27 -2
  226. package/src/functions/wirings/queue/serialize-queue-meta.ts +15 -1
  227. package/src/functions/wirings/queue/serialize-queue-types.ts +1 -1
  228. package/src/functions/wirings/rpc/pikku-command-rpc.ts +25 -2
  229. package/src/functions/wirings/rpc/serialize-public-rpc.ts +11 -4
  230. package/src/functions/wirings/rpc/serialize-remote-rpc.ts +1 -1
  231. package/src/functions/wirings/rpc/serialize-rpc-wrapper.ts +3 -3
  232. package/src/functions/wirings/scheduler/pikku-command-scheduler.ts +30 -4
  233. package/src/functions/wirings/scheduler/serialize-scheduler-meta.ts +20 -1
  234. package/src/functions/wirings/scheduler/serialize-scheduler-types.ts +1 -1
  235. package/src/functions/wirings/services/pikku-command-service-metadata.ts +25 -0
  236. package/src/functions/wirings/workflow/pikku-command-workflow-types.ts +8 -1
  237. package/src/functions/wirings/workflow/pikku-command-workflow.ts +36 -8
  238. package/src/functions/wirings/workflow/serialize-workflow-meta.ts +18 -1
  239. package/src/functions/wirings/workflow/serialize-workflow-types.ts +39 -31
  240. package/src/functions/wirings/workflow/serialize-workflow-wirings.ts +47 -0
  241. package/src/functions/wirings/workflow/serialize-workflow-workers.ts +2 -2
  242. package/src/middleware/log-command-info-and-time.ts +3 -6
  243. package/src/services/cli-logger-forwarder.service.ts +1 -1
  244. package/src/services.ts +15 -15
  245. package/src/utils/check-required-types.ts +4 -7
  246. package/src/utils/pikku-cli-config.ts +69 -2
  247. package/src/utils/pikku-files-and-methods.ts +10 -13
  248. package/src/utils/schema-generator.ts +2 -2
  249. package/types/application-types.d.ts +1 -1
  250. package/types/config.d.ts +12 -1
  251. package/.pikku/function/pikku-functions.gen.ts +0 -84
  252. package/.pikku/rpc/pikku-rpc-wirings-meta.internal.gen.ts +0 -47
  253. package/dist/.pikku/function/pikku-functions.gen.d.ts +0 -1
  254. package/dist/.pikku/function/pikku-functions.gen.js +0 -83
  255. package/dist/.pikku/rpc/pikku-rpc-wirings-meta.internal.gen.d.ts +0 -1
  256. package/dist/.pikku/rpc/pikku-rpc-wirings-meta.internal.gen.js +0 -47
  257. package/dist/.pikku/schemas/schemas/PikkuRemoteInternalRPCInput.schema.json +0 -1
@@ -3,38 +3,79 @@ import { pikkuVoidFunc } from '../../../.pikku/pikku-types.gen.js';
3
3
  import { getFileImportRelativePath } from '../../utils/file-import-path.js';
4
4
  import { writeFileInDir } from '../../utils/file-writer.js';
5
5
  import { CommandSummary } from '../../utils/command-summary.js';
6
+ // Import all command functions directly
7
+ import { pikkuFunctionTypes } from '../wirings/functions/pikku-command-function-types.js';
8
+ import { pikkuFunctionTypesSplit } from '../wirings/functions/pikku-command-function-types-split.js';
9
+ import { pikkuHTTPTypes } from '../wirings/http/pikku-command-http-types.js';
10
+ import { pikkuChannelTypes } from '../wirings/channels/pikku-command-channel-types.js';
11
+ import { pikkuSchedulerTypes } from '../wirings/scheduler/pikku-command-scheduler-types.js';
12
+ import { pikkuQueueTypes } from '../wirings/queue/pikku-command-queue-types.js';
13
+ import { pikkuWorkflowTypes } from '../wirings/workflow/pikku-command-workflow-types.js';
14
+ import { pikkuMCPTypes } from '../wirings/mcp/pikku-command-mcp-types.js';
15
+ import { pikkuCLITypes } from '../wirings/cli/pikku-command-cli-types.js';
16
+ import { pikkuFunctions } from '../wirings/functions/pikku-command-functions.js';
17
+ import { pikkuMiddleware } from '../wirings/middleware/pikku-command-middleware.js';
18
+ import { pikkuPermissions } from '../wirings/permissions/pikku-command-permissions.js';
19
+ import { pikkuServices } from '../wirings/functions/pikku-command-services.js';
20
+ import { pikkuServiceMetadata } from '../wirings/services/pikku-command-service-metadata.js';
21
+ import { pikkuRPC } from '../wirings/rpc/pikku-command-rpc.js';
22
+ import { pikkuRPCExposedMap, pikkuRPCInternalMap, } from '../wirings/rpc/pikku-command-rpc-map.js';
23
+ import { pikkuPublicRPC } from '../wirings/rpc/pikku-command-public-rpc.js';
24
+ import { pikkuRPCClient } from '../wirings/rpc/pikku-command-rpc-client.js';
25
+ import { pikkuSchemas } from '../wirings/functions/schemas.js';
26
+ import { pikkuHTTP } from '../wirings/http/pikku-command-http-routes.js';
27
+ import { pikkuHTTPMap } from '../wirings/http/pikku-command-http-map.js';
28
+ import { pikkuFetch } from '../wirings/fetch/index.js';
29
+ import { pikkuScheduler } from '../wirings/scheduler/pikku-command-scheduler.js';
30
+ import { pikkuWorkflow } from '../wirings/workflow/pikku-command-workflow.js';
31
+ import { pikkuRemoteRPC } from '../wirings/rpc/pikku-command-remote-rpc.js';
32
+ import { pikkuWorkflowMap } from '../wirings/workflow/pikku-command-workflow-map.js';
33
+ import { pikkuQueue } from '../wirings/queue/pikku-command-queue.js';
34
+ import { pikkuQueueMap } from '../wirings/queue/pikku-command-queue-map.js';
35
+ import { pikkuQueueService } from '../wirings/queue/pikku-command-queue-service.js';
36
+ import { pikkuChannels } from '../wirings/channels/pikku-command-channels.js';
37
+ import { pikkuChannelsMap } from '../wirings/channels/pikku-command-channels-map.js';
38
+ import { pikkuWebSocketTyped } from '../wirings/channels/pikku-command-websocket-typed.js';
39
+ import { pikkuMCP } from '../wirings/mcp/pikku-command-mcp.js';
40
+ import { pikkuMCPJSON } from '../wirings/mcp/pikku-command-mcp-json.js';
41
+ import { pikkuCLI } from '../wirings/cli/pikku-command-cli.js';
42
+ import { pikkuCLIEntry } from '../wirings/cli/pikku-command-cli-entry.js';
43
+ import { pikkuNext } from '../runtimes/nextjs/pikku-command-nextjs.js';
44
+ import { pikkuOpenAPI } from '../wirings/http/pikku-command-openapi.js';
6
45
  export const all = pikkuVoidFunc({
7
- func: async ({ logger, config, rpc, getInspectorState }) => {
46
+ func: async ({ logger, config, getInspectorState }) => {
47
+ const wire = {};
48
+ const services = { logger, config, getInspectorState };
8
49
  const summary = new CommandSummary('all');
9
50
  const allImports = [];
10
51
  let typesDeclarationFileExists = true;
11
52
  if (!existsSync(config.typesDeclarationFile)) {
12
53
  typesDeclarationFileExists = false;
13
54
  }
14
- await rpc.invoke('pikkuFunctionTypes', null);
55
+ await pikkuFunctionTypes.func(services, null, wire);
15
56
  // This is needed since the wireHTTP function will add the routes to the visitState
16
57
  if (!typesDeclarationFileExists) {
17
58
  logger.debug(`• Type file first created, inspecting again...`);
18
59
  await getInspectorState(true);
19
60
  }
20
61
  // Generate wiring-specific type files for tree-shaking
21
- await rpc.invoke('pikkuFunctionTypesSplit', null);
22
- await rpc.invoke('pikkuHTTPTypes', null);
23
- await rpc.invoke('pikkuChannelTypes', null);
24
- await rpc.invoke('pikkuSchedulerTypes', null);
25
- await rpc.invoke('pikkuQueueTypes', null);
26
- await rpc.invoke('pikkuWorkflowTypes', null);
27
- await rpc.invoke('pikkuMCPTypes', null);
28
- await rpc.invoke('pikkuCLITypes', null);
29
- const hasFunctionRegistrations = await rpc.invoke('pikkuFunctions', null);
62
+ await pikkuFunctionTypesSplit.func(services, null, wire);
63
+ await pikkuHTTPTypes.func(services, null, wire);
64
+ await pikkuChannelTypes.func(services, null, wire);
65
+ await pikkuSchedulerTypes.func(services, null, wire);
66
+ await pikkuQueueTypes.func(services, null, wire);
67
+ await pikkuWorkflowTypes.func(services, null, wire);
68
+ await pikkuMCPTypes.func(services, null, wire);
69
+ await pikkuCLITypes.func(services, null, wire);
70
+ const hasFunctionRegistrations = await pikkuFunctions.func(services, wire, null);
30
71
  // Generate and register middleware
31
- const middleware = await rpc.invoke('pikkuMiddleware', null);
72
+ const middleware = await pikkuMiddleware.func(services, null, wire);
32
73
  // Middleware must be imported before functions meta to ensure registration happens first
33
74
  if (middleware) {
34
75
  allImports.push(config.middlewareFile);
35
76
  }
36
77
  // Generate and register permissions
37
- const permissions = await rpc.invoke('pikkuPermissions', null);
78
+ const permissions = await pikkuPermissions.func(services, null, wire);
38
79
  // Permissions must be imported before functions meta to ensure registration happens first
39
80
  if (permissions) {
40
81
  allImports.push(config.permissionsFile);
@@ -46,79 +87,78 @@ export const all = pikkuVoidFunc({
46
87
  allImports.push(config.functionsFile);
47
88
  }
48
89
  // Generate services map
49
- await rpc.invoke('pikkuServices', null);
50
- const hasInternalRPCs = await rpc.invoke('pikkuRPC', null);
51
- await rpc.invoke('pikkuRPCInternalMap', null);
52
- await rpc.invoke('pikkuRPCExposedMap', null);
53
- await rpc.invoke('pikkuRPCClient', null);
90
+ await pikkuServices.func(services, null, wire);
91
+ // Generate service metadata JSON files for AI consumption
92
+ await pikkuServiceMetadata.func(services, null, wire);
93
+ const hasInternalRPCs = await pikkuRPC.func(services, null, wire);
94
+ await pikkuRPCInternalMap.func(services, null, wire);
95
+ await pikkuRPCExposedMap.func(services, null, wire);
96
+ await pikkuPublicRPC.func(services, null, wire);
97
+ await pikkuRPCClient.func(services, null, wire);
54
98
  if (hasInternalRPCs) {
55
99
  allImports.push(config.rpcInternalWiringMetaFile);
56
100
  }
57
- const schemas = await rpc.invoke('pikkuSchemas', null);
101
+ const schemas = await pikkuSchemas.func(services, null, wire);
58
102
  if (schemas) {
59
103
  allImports.push(`${config.schemaDirectory}/register.gen.ts`);
60
104
  }
61
105
  // Generate HTTP
62
- const http = await rpc.invoke('pikkuHTTP', null);
106
+ const http = await pikkuHTTP.func(services, null, wire);
63
107
  if (http) {
64
- await rpc.invoke('pikkuHTTPMap', null);
65
- await rpc.invoke('pikkuFetch', null);
108
+ await pikkuHTTPMap.func(services, null, wire);
109
+ await pikkuFetch.func(services, null, wire);
66
110
  allImports.push(config.httpWiringMetaFile, config.httpWiringsFile);
67
111
  }
68
112
  // Generate Scheduler
69
- const scheduler = await rpc.invoke('pikkuScheduler', null);
113
+ const scheduler = await pikkuScheduler.func(services, null, wire);
70
114
  if (scheduler) {
71
115
  allImports.push(config.schedulersWiringMetaFile, config.schedulersWiringFile);
72
116
  }
73
117
  // Generate Workflows
74
- const workflows = await rpc.invoke('pikkuWorkflow', null);
118
+ const workflows = await pikkuWorkflow.func(services, null, wire);
75
119
  // Generate Remote RPC Workers (must be before queue discovery so wireQueueWorker calls are picked up)
76
- const remoteRPC = await rpc.invoke('pikkuRemoteRPC', null);
120
+ const remoteRPC = await pikkuRemoteRPC.func(services, null, wire);
77
121
  // Reinspect to pick up generated workflow workers and remote RPC workers BEFORE generating maps
78
122
  if (workflows || remoteRPC) {
79
123
  await getInspectorState(true);
80
124
  }
81
125
  if (workflows) {
82
- await rpc.invoke('pikkuWorkflowMap', null);
126
+ await pikkuWorkflowMap.func(services, null, wire);
83
127
  allImports.push(config.workflowsWiringMetaFile, config.workflowsWiringFile);
84
128
  }
85
- if (remoteRPC && config.rpc?.remoteRpcWorkersPath) {
86
- // Only add to imports if we actually generated the file
87
- allImports.push(config.rpc.remoteRpcWorkersPath);
88
- }
89
129
  // Generate Queues
90
- const queues = await rpc.invoke('pikkuQueue', null);
130
+ const queues = await pikkuQueue.func(services, null, wire);
91
131
  if (queues) {
92
- await rpc.invoke('pikkuQueueMap', null);
93
- await rpc.invoke('pikkuQueueService', null);
132
+ await pikkuQueueMap.func(services, null, wire);
133
+ await pikkuQueueService.func(services, null, wire);
94
134
  allImports.push(config.queueWorkersWiringMetaFile, config.queueWorkersWiringFile);
95
135
  }
96
136
  // Generate Channels
97
- const channels = await rpc.invoke('pikkuChannels', null);
137
+ const channels = await pikkuChannels.func(services, null, wire);
98
138
  if (channels) {
99
- await rpc.invoke('pikkuChannelsMap', null);
100
- await rpc.invoke('pikkuWebSocketTyped', null);
139
+ await pikkuChannelsMap.func(services, null, wire);
140
+ await pikkuWebSocketTyped.func(services, null, wire);
101
141
  allImports.push(config.channelsWiringMetaFile, config.channelsWiringFile);
102
142
  }
103
143
  // Generate MCP
104
- const mcp = await rpc.invoke('pikkuMCP', null);
144
+ const mcp = await pikkuMCP.func(services, null, wire);
105
145
  if (mcp) {
106
- await rpc.invoke('pikkuMCPJSON', null);
146
+ await pikkuMCPJSON.func(services, null, wire);
107
147
  allImports.push(config.mcpWiringsMetaFile, config.mcpWiringsFile);
108
148
  }
109
149
  // Generate CLI
110
- const cli = await rpc.invoke('pikkuCLI', null);
150
+ const cli = await pikkuCLI.func(services, null, wire);
111
151
  if (cli) {
112
- await rpc.invoke('pikkuCLIEntry', null);
152
+ await pikkuCLIEntry.func(services, null, wire);
113
153
  allImports.push(config.cliWiringMetaFile, config.cliWiringsFile);
114
154
  }
115
155
  if (config.nextBackendFile || config.nextHTTPFile) {
116
- await rpc.invoke('pikkuNext', null);
156
+ await pikkuNext.func(services, null, wire);
117
157
  }
118
158
  if (config.openAPI) {
119
159
  logger.debug(`• OpenAPI requires a reinspection to pickup new generated types..`);
120
160
  await getInspectorState(true);
121
- await rpc.invoke('pikkuOpenAPI', null);
161
+ await pikkuOpenAPI.func(services, null, wire);
122
162
  }
123
163
  // Generate main bootstrap file (pass all imports directly since this is the main file)
124
164
  await writeFileInDir(logger, config.bootstrapFile, allImports
@@ -1,21 +1,33 @@
1
1
  import { pikkuVoidFunc } from '../../../.pikku/pikku-types.gen.js';
2
+ // Import command functions directly
3
+ import { pikkuFunctionTypes } from '../wirings/functions/pikku-command-function-types.js';
4
+ import { pikkuFunctionTypesSplit } from '../wirings/functions/pikku-command-function-types-split.js';
5
+ import { pikkuHTTPTypes } from '../wirings/http/pikku-command-http-types.js';
6
+ import { pikkuChannelTypes } from '../wirings/channels/pikku-command-channel-types.js';
7
+ import { pikkuSchedulerTypes } from '../wirings/scheduler/pikku-command-scheduler-types.js';
8
+ import { pikkuQueueTypes } from '../wirings/queue/pikku-command-queue-types.js';
9
+ import { pikkuWorkflowTypes } from '../wirings/workflow/pikku-command-workflow-types.js';
10
+ import { pikkuMCPTypes } from '../wirings/mcp/pikku-command-mcp-types.js';
11
+ import { pikkuCLITypes } from '../wirings/cli/pikku-command-cli-types.js';
2
12
  export const bootstrap = pikkuVoidFunc({
3
- func: async ({ logger, config, rpc, getInspectorState }) => {
13
+ func: async ({ logger, config, getInspectorState }) => {
14
+ const wire = {};
15
+ const services = { logger, config, getInspectorState };
4
16
  // Initialize inspector state in bootstrap mode with core types only
5
17
  // This allows bootstrap to run immediately without inspecting the codebase
6
18
  // All subsequent RPC commands will use this cached state
7
19
  await getInspectorState(false, false, true);
8
- await rpc.invoke('pikkuFunctionTypes', null);
20
+ await pikkuFunctionTypes.func(services, null, wire);
9
21
  // Generate wiring-specific type files for tree-shaking
10
22
  // These use the bootstrap mode state with core types
11
- await rpc.invoke('pikkuFunctionTypesSplit', null);
12
- await rpc.invoke('pikkuHTTPTypes', null);
13
- await rpc.invoke('pikkuChannelTypes', null);
14
- await rpc.invoke('pikkuSchedulerTypes', null);
15
- await rpc.invoke('pikkuQueueTypes', null);
16
- await rpc.invoke('pikkuWorkflowTypes', null);
17
- await rpc.invoke('pikkuMCPTypes', null);
18
- await rpc.invoke('pikkuCLITypes', null);
23
+ await pikkuFunctionTypesSplit.func(services, null, wire);
24
+ await pikkuHTTPTypes.func(services, null, wire);
25
+ await pikkuChannelTypes.func(services, null, wire);
26
+ await pikkuSchedulerTypes.func(services, null, wire);
27
+ await pikkuQueueTypes.func(services, null, wire);
28
+ await pikkuWorkflowTypes.func(services, null, wire);
29
+ await pikkuMCPTypes.func(services, null, wire);
30
+ await pikkuCLITypes.func(services, null, wire);
19
31
  // Check for critical errors and exit if any were logged
20
32
  if (logger.hasCriticalErrors()) {
21
33
  process.exit(1);
@@ -1,7 +1,9 @@
1
1
  import { pikkuVoidFunc } from '../../../.pikku/pikku-types.gen.js';
2
2
  import chokidar from 'chokidar';
3
+ import { all } from './all.js';
3
4
  export const watch = pikkuVoidFunc({
4
- func: async ({ logger, config, rpc }) => {
5
+ func: async ({ logger, config, getInspectorState }) => {
6
+ const services = { logger, config, getInspectorState };
5
7
  const configWatcher = chokidar.watch(config.srcDirectories, {
6
8
  ignoreInitial: true,
7
9
  ignored: /.*\.gen\.tsx?/,
@@ -18,14 +20,15 @@ export const watch = pikkuVoidFunc({
18
20
  const handle = async () => {
19
21
  try {
20
22
  const start = Date.now();
21
- await rpc.invoke('all', null);
23
+ await all.func(services, null, {});
22
24
  logger.info({
23
25
  message: `✓ Generated in ${Date.now() - start}ms`,
24
26
  type: 'timing',
25
27
  });
26
28
  }
27
29
  catch (err) {
28
- logger.error(err);
30
+ console.error(err);
31
+ logger.error('Error running watch');
29
32
  }
30
33
  };
31
34
  await handle();
@@ -7,7 +7,7 @@ import { serializeNextJsBackendWrapper as serializeNextBackendWrapper } from './
7
7
  import { serializeNextJsHTTPWrapper as serializeNextHTTPWrapper } from './serialize-nextjs-http-wrapper.js';
8
8
  export const pikkuNext = pikkuSessionlessFunc({
9
9
  func: async ({ logger, config, getInspectorState }) => {
10
- const { nextBackendFile, nextHTTPFile, httpMapDeclarationFile, packageMappings, fetchFile, } = config;
10
+ const { nextBackendFile, nextHTTPFile, httpMapDeclarationFile, rpcMapDeclarationFile, packageMappings, fetchFile, } = config;
11
11
  // If both files are undefined, clean up any existing files and return
12
12
  if (!nextBackendFile && !nextHTTPFile) {
13
13
  logger.info({
@@ -20,31 +20,36 @@ export const pikkuNext = pikkuSessionlessFunc({
20
20
  if (nextHTTPFile && !fetchFile) {
21
21
  throw new Error('fetchFile is required in pikku config in order for nextJS http wrapper to work');
22
22
  }
23
+ if ((nextBackendFile || nextHTTPFile) && !rpcMapDeclarationFile) {
24
+ throw new Error('rpcMapDeclarationFile is required in pikku config in order for nextJS wrapper to work');
25
+ }
23
26
  if (nextBackendFile) {
24
27
  // Check for required types
25
28
  checkRequiredTypes(visitState.filesAndMethodsErrors, {
26
29
  config: true,
27
30
  singletonServicesFactory: true,
28
- sessionServicesFactory: true,
31
+ wireServicesFactory: true,
29
32
  });
30
- const { pikkuConfigFactory, singletonServicesFactory, sessionServicesFactory, } = visitState.filesAndMethods;
33
+ const { pikkuConfigFactory, singletonServicesFactory, wireServicesFactory, } = visitState.filesAndMethods;
31
34
  if (!pikkuConfigFactory ||
32
35
  !singletonServicesFactory ||
33
- !sessionServicesFactory) {
36
+ !wireServicesFactory) {
34
37
  throw new Error('Required types not found');
35
38
  }
36
39
  const pikkuConfigImport = `import { ${pikkuConfigFactory.variable} as createConfig } from '${getFileImportRelativePath(nextBackendFile, pikkuConfigFactory.file, packageMappings)}'`;
37
40
  const singletonServicesImport = `import { ${singletonServicesFactory.variable} as createSingletonServices } from '${getFileImportRelativePath(nextBackendFile, singletonServicesFactory.file, packageMappings)}'`;
38
- const sessionServicesImport = `import { ${sessionServicesFactory.variable} as createSessionServices } from '${getFileImportRelativePath(nextBackendFile, sessionServicesFactory.file, packageMappings)}'`;
41
+ const wireServicesImport = `import { ${wireServicesFactory.variable} as createWireServices } from '${getFileImportRelativePath(nextBackendFile, wireServicesFactory.file, packageMappings)}'`;
39
42
  const bootstrapPath = getFileImportRelativePath(nextBackendFile, config.bootstrapFile, packageMappings);
40
43
  const routesMapDeclarationPath = getFileImportRelativePath(nextBackendFile, httpMapDeclarationFile, packageMappings);
41
- const content = serializeNextBackendWrapper(bootstrapPath, routesMapDeclarationPath, pikkuConfigImport, singletonServicesImport, sessionServicesImport);
44
+ const rpcMapDeclarationPath = getFileImportRelativePath(nextBackendFile, rpcMapDeclarationFile, packageMappings);
45
+ const content = serializeNextBackendWrapper(bootstrapPath, routesMapDeclarationPath, rpcMapDeclarationPath, pikkuConfigImport, singletonServicesImport, wireServicesImport);
42
46
  await writeFileInDir(logger, nextBackendFile, content);
43
47
  }
44
48
  if (nextHTTPFile && fetchFile) {
45
49
  const routesMapDeclarationPath = getFileImportRelativePath(nextHTTPFile, httpMapDeclarationFile, packageMappings);
50
+ const rpcMapDeclarationPath = getFileImportRelativePath(nextHTTPFile, rpcMapDeclarationFile, packageMappings);
46
51
  const fetchPath = getFileImportRelativePath(nextHTTPFile, fetchFile, packageMappings);
47
- const content = serializeNextHTTPWrapper(routesMapDeclarationPath, fetchPath);
52
+ const content = serializeNextHTTPWrapper(routesMapDeclarationPath, rpcMapDeclarationPath, fetchPath);
48
53
  await writeFileInDir(logger, nextHTTPFile, content);
49
54
  }
50
55
  },
@@ -1 +1 @@
1
- export declare const serializeNextJsBackendWrapper: (bootstrapPath: string, routesMapPath: string, configImport: string, singleServicesFactoryImport: string, sessionServicesImport: string) => string;
1
+ export declare const serializeNextJsBackendWrapper: (bootstrapPath: string, routesMapPath: string, rpcMapPath: string, configImport: string, singleServicesFactoryImport: string, wireServicesImport: string) => string;
@@ -1,4 +1,4 @@
1
- export const serializeNextJsBackendWrapper = (bootstrapPath, routesMapPath, configImport, singleServicesFactoryImport, sessionServicesImport) => {
1
+ export const serializeNextJsBackendWrapper = (bootstrapPath, routesMapPath, rpcMapPath, configImport, singleServicesFactoryImport, wireServicesImport) => {
2
2
  return `'server-only'
3
3
 
4
4
  /**
@@ -8,12 +8,13 @@ export const serializeNextJsBackendWrapper = (bootstrapPath, routesMapPath, conf
8
8
  import { PikkuNextJS } from '@pikku/next'
9
9
  import { NextRequest } from 'next/server.js'
10
10
  import type { HTTPWiringsMap, HTTPWiringHandlerOf, HTTPWiringsWithMethod } from '${routesMapPath}'
11
+ import type { RPCMap } from '${rpcMapPath}'
11
12
 
12
13
  type RouteContext = { params: Promise<Record<string, string | string[]>> }
13
14
 
14
15
  ${configImport}
15
16
  ${singleServicesFactoryImport}
16
- ${sessionServicesImport}
17
+ ${wireServicesImport}
17
18
 
18
19
  import '${bootstrapPath}'
19
20
 
@@ -34,7 +35,7 @@ export const pikku = (_options?: any) => {
34
35
  _pikku = new PikkuNextJS(
35
36
  createConfig as any,
36
37
  createSingletonServices as any,
37
- createSessionServices
38
+ createWireServices
38
39
  )
39
40
  }
40
41
 
@@ -174,13 +175,50 @@ export const pikku = (_options?: any) => {
174
175
  return staticActionRequest(route, 'GET', data)
175
176
  }
176
177
 
178
+ // RPC Requests
179
+
180
+ /**
181
+ * Type definition for RPC invocation with dynamic context.
182
+ */
183
+ type RPCInvoke = <Name extends keyof RPCMap>(
184
+ name: Name,
185
+ data: RPCMap[Name]['input']
186
+ ) => Promise<RPCMap[Name]['output']>
187
+
188
+ /**
189
+ * Makes a dynamic RPC request.
190
+ *
191
+ * @template Name - The RPC function name from the RPCMap.
192
+ * @param name - The RPC function identifier.
193
+ * @param data - The input data for the RPC request.
194
+ * @returns A promise that resolves to the output of the RPC handler.
195
+ */
196
+ const rpc: RPCInvoke = async (name, data) => {
197
+ return dynamicActionRequest(\`/rpc/\${name}\` as any, 'POST', { data }) as any
198
+ }
199
+
200
+ /**
201
+ * Makes a static RPC request.
202
+ * Note: In HTTP wrapper context, both rpc and staticRPC behave the same way.
203
+ *
204
+ * @template Name - The RPC function name from the RPCMap.
205
+ * @param name - The RPC function identifier.
206
+ * @param data - The input data for the RPC request.
207
+ * @returns A promise that resolves to the output of the RPC handler.
208
+ */
209
+ const staticRPC: RPCInvoke = async (name, data) => {
210
+ return staticActionRequest(\`/rpc/\${name}\` as any, 'POST', { data }) as any
211
+ }
212
+
177
213
  return {
214
+ rpc,
178
215
  get: dynamicGet,
179
216
  post: dynamicPost,
180
217
  patch: dynamicPatch,
181
218
  del: dynamicDel,
182
219
  staticGet,
183
220
  staticPost,
221
+ staticRPC,
184
222
  }
185
223
  }
186
224
 
@@ -204,7 +242,7 @@ export const pikkuAPIRequest = (
204
242
  _pikku = new PikkuNextJS(
205
243
  createConfig as any,
206
244
  createSingletonServices as any,
207
- createSessionServices
245
+ createWireServices
208
246
  )
209
247
  }
210
248
  if (_removeAPIPrefix) {
@@ -1 +1 @@
1
- export declare const serializeNextJsHTTPWrapper: (routesMapPath: string, pikkuFetchImport: string) => string;
1
+ export declare const serializeNextJsHTTPWrapper: (routesMapPath: string, rpcMapPath: string, pikkuFetchImport: string) => string;
@@ -1,4 +1,4 @@
1
- export const serializeNextJsHTTPWrapper = (routesMapPath, pikkuFetchImport) => {
1
+ export const serializeNextJsHTTPWrapper = (routesMapPath, rpcMapPath, pikkuFetchImport) => {
2
2
  return `'server-only'
3
3
 
4
4
  /**
@@ -7,6 +7,7 @@ export const serializeNextJsHTTPWrapper = (routesMapPath, pikkuFetchImport) => {
7
7
  */
8
8
  import { CorePikkuFetchOptions } from '@pikku/fetch'
9
9
  import type { HTTPWiringsMap, HTTPWiringHandlerOf, HTTPWiringsWithMethod } from '${routesMapPath}'
10
+ import type { RPCMap } from '${rpcMapPath}'
10
11
  import { PikkuFetch } from '${pikkuFetchImport}'
11
12
 
12
13
  let _pikku: PikkuFetch | undefined
@@ -146,13 +147,50 @@ export const pikku = (options?: CorePikkuFetchOptions) => {
146
147
  return staticActionRequest(route, 'GET', data)
147
148
  }
148
149
 
150
+ // RPC Requests
151
+
152
+ /**
153
+ * Type definition for RPC invocation.
154
+ */
155
+ type RPCInvoke = <Name extends keyof RPCMap>(
156
+ name: Name,
157
+ data: RPCMap[Name]['input']
158
+ ) => Promise<RPCMap[Name]['output']>
159
+
160
+ /**
161
+ * Makes a dynamic RPC request.
162
+ *
163
+ * @template Name - The RPC function name from the RPCMap.
164
+ * @param name - The RPC function identifier.
165
+ * @param data - The input data for the RPC request.
166
+ * @returns A promise that resolves to the output of the RPC handler.
167
+ */
168
+ const rpc: RPCInvoke = async (rpcName, data) => {
169
+ return dynamicActionRequest(\`/rpc/\${rpcName}\` as any, 'POST', { data }) as any
170
+ }
171
+
172
+ /**
173
+ * Makes a static RPC request.
174
+ * Note: In HTTP wrapper context, both rpc and rpcStatic behave the same way.
175
+ *
176
+ * @template Name - The RPC function name from the RPCMap.
177
+ * @param name - The RPC function identifier.
178
+ * @param data - The input data for the RPC request.
179
+ * @returns A promise that resolves to the output of the RPC handler.
180
+ */
181
+ const staticRPC: RPCInvoke = async (rpcName, data) => {
182
+ return staticActionRequest(\`/rpc/\${rpcName}\` as any, 'POST', { data }) as any
183
+ }
184
+
149
185
  return {
186
+ rpc,
150
187
  get: dynamicGet,
151
188
  post: dynamicPost,
152
189
  patch: dynamicPatch,
153
190
  del: dynamicDel,
154
191
  staticGet,
155
- staticPost
192
+ staticPost,
193
+ staticRPC
156
194
  }
157
195
  }
158
196
  `;
@@ -2,13 +2,20 @@ import { pikkuVoidFunc } from '../../../../.pikku/pikku-types.gen.js';
2
2
  import { serializeFileImports } from '../../../utils/file-imports-serializer.js';
3
3
  import { writeFileInDir } from '../../../utils/file-writer.js';
4
4
  import { logCommandInfoAndTime } from '../../../middleware/log-command-info-and-time.js';
5
+ import { getFileImportRelativePath } from '../../../utils/file-import-path.js';
5
6
  export const pikkuChannels = pikkuVoidFunc({
6
7
  func: async ({ logger, config, getInspectorState }) => {
7
8
  const visitState = await getInspectorState();
8
- const { channelsWiringFile, channelsWiringMetaFile, packageMappings } = config;
9
+ const { channelsWiringFile, channelsWiringMetaFile, channelsWiringMetaJsonFile, packageMappings, schema, } = config;
9
10
  const { channels } = visitState;
10
11
  await writeFileInDir(logger, channelsWiringFile, serializeFileImports('addChannel', channelsWiringFile, channels.files, packageMappings));
11
- await writeFileInDir(logger, channelsWiringMetaFile, `import { pikkuState } from '@pikku/core'\npikkuState('channel', 'meta', ${JSON.stringify(channels.meta, null, 2)})`);
12
+ await writeFileInDir(logger, channelsWiringMetaJsonFile, JSON.stringify(channels.meta, null, 2));
13
+ const jsonImportPath = getFileImportRelativePath(channelsWiringMetaFile, channelsWiringMetaJsonFile, packageMappings);
14
+ const supportsImportAttributes = schema?.supportsImportAttributes ?? false;
15
+ const importStatement = supportsImportAttributes
16
+ ? `import metaData from '${jsonImportPath}' with { type: 'json' }`
17
+ : `import metaData from '${jsonImportPath}'`;
18
+ await writeFileInDir(logger, channelsWiringMetaFile, `import { pikkuState } from '@pikku/core'\nimport { ChannelsMeta } from '@pikku/core/channel'\n${importStatement}\npikkuState('channel', 'meta', metaData as ChannelsMeta)`);
12
19
  },
13
20
  middleware: [
14
21
  logCommandInfoAndTime({
@@ -8,9 +8,8 @@ export const serializeChannelTypes = (functionTypesImportPath) => {
8
8
  */
9
9
 
10
10
  import { CoreChannel, wireChannel as wireChannelCore } from '@pikku/core/channel'
11
- import { CorePikkuFunctionConfig } from '@pikku/core'
12
11
  import { AssertHTTPWiringParams } from '@pikku/core/http'
13
- import type { PikkuFunction, PikkuFunctionSessionless, PikkuPermission, PikkuMiddleware } from '${functionTypesImportPath}'
12
+ import type { PikkuFunctionConfig, PikkuFunctionSessionless, PikkuPermission, PikkuMiddleware } from '${functionTypesImportPath}'
14
13
 
15
14
  /**
16
15
  * Type definition for WebSocket channels with typed data exchange.
@@ -23,9 +22,9 @@ import type { PikkuFunction, PikkuFunctionSessionless, PikkuPermission, PikkuMid
23
22
  type ChannelWiring<ChannelData, Channel extends string> = CoreChannel<
24
23
  ChannelData,
25
24
  Channel,
26
- CorePikkuFunctionConfig<PikkuFunctionSessionless<void, any, ChannelData>, PikkuPermission<void>, PikkuMiddleware>,
27
- CorePikkuFunctionConfig<PikkuFunctionSessionless<void, void, ChannelData>, PikkuPermission<void>, PikkuMiddleware>,
28
- CorePikkuFunctionConfig<PikkuFunctionSessionless<any, any, ChannelData> | PikkuFunction<any, any, ChannelData>, PikkuPermission<any>, PikkuMiddleware>,
25
+ PikkuFunctionConfig<void, any, 'channel' | 'session' | 'rpc'>,
26
+ PikkuFunctionConfig<void, void, 'channel' | 'session' | 'rpc'>,
27
+ PikkuFunctionConfig<any, any, 'channel' | 'session' | 'rpc'>,
29
28
  PikkuPermission,
30
29
  PikkuMiddleware
31
30
  >
@@ -40,8 +39,8 @@ type ChannelWiring<ChannelData, Channel extends string> = CoreChannel<
40
39
  */
41
40
  export const pikkuChannelConnectionFunc = <Out = unknown>(
42
41
  func:
43
- | PikkuFunctionSessionless<void, Out, unknown>
44
- | CorePikkuFunctionConfig<PikkuFunctionSessionless<void, Out, unknown>, PikkuPermission<void>, PikkuMiddleware>
42
+ | PikkuFunctionSessionless<void, Out, 'channel' | 'session' | 'rpc'>
43
+ | PikkuFunctionConfig<void, Out, 'channel' | 'session' | 'rpc'>
45
44
  ) => {
46
45
  return typeof func === 'function' ? { func } : func
47
46
  }
@@ -55,8 +54,8 @@ export const pikkuChannelConnectionFunc = <Out = unknown>(
55
54
  */
56
55
  export const pikkuChannelDisconnectionFunc = (
57
56
  func:
58
- | PikkuFunctionSessionless<void, void, unknown>
59
- | CorePikkuFunctionConfig<PikkuFunctionSessionless<void, void, unknown>, PikkuPermission<void>, PikkuMiddleware>
57
+ | PikkuFunctionSessionless<void, void, 'channel'>
58
+ | PikkuFunctionConfig<void, void, 'channel' | 'session' | 'rpc'>
60
59
  ) => {
61
60
  return typeof func === 'function' ? { func } : func
62
61
  }
@@ -73,8 +72,8 @@ export const pikkuChannelDisconnectionFunc = (
73
72
  */
74
73
  export const pikkuChannelFunc = <In, Out = unknown>(
75
74
  func:
76
- | PikkuFunctionSessionless<In, Out, unknown>
77
- | CorePikkuFunctionConfig<PikkuFunctionSessionless<In, Out, unknown>, PikkuPermission<In>, PikkuMiddleware>
75
+ | PikkuFunctionSessionless<In, Out, 'channel' | 'session' | 'rpc'>
76
+ | PikkuFunctionConfig<In, Out, 'channel' | 'session' | 'rpc'>
78
77
  ) => {
79
78
  return typeof func === 'function' ? { func } : func
80
79
  }
@@ -100,15 +100,15 @@ export const pikkuCLIEntry = pikkuSessionlessFunc({
100
100
  checkRequiredTypes(visitState.filesAndMethodsErrors, {
101
101
  config: true,
102
102
  singletonServicesFactory: true,
103
- sessionServicesFactory: true,
103
+ wireServicesFactory: true,
104
104
  });
105
- const { pikkuConfigFactory, singletonServicesFactory, sessionServicesFactory, } = visitState.filesAndMethods;
105
+ const { pikkuConfigFactory, singletonServicesFactory, wireServicesFactory, } = visitState.filesAndMethods;
106
106
  if (!pikkuConfigFactory ||
107
107
  !singletonServicesFactory ||
108
- !sessionServicesFactory) {
108
+ !wireServicesFactory) {
109
109
  throw new Error('Required types not found');
110
110
  }
111
- const bootstrapCode = serializeLocalCLIBootstrap(programName, programMeta, bootstrapFile, config, pikkuConfigFactory, singletonServicesFactory, sessionServicesFactory);
111
+ const bootstrapCode = serializeLocalCLIBootstrap(programName, programMeta, bootstrapFile, config, pikkuConfigFactory, singletonServicesFactory, wireServicesFactory);
112
112
  await writeFileInDir(logger, bootstrapFile, bootstrapCode);
113
113
  logger.debug(`Serialized CLI bootstrap for ${programName}: ${bootstrapFile}`);
114
114
  }
@@ -12,7 +12,7 @@ export const pikkuCLITypes = pikkuSessionlessFunc({
12
12
  // Check for required types
13
13
  checkRequiredTypes(visitState.filesAndMethodsErrors, {
14
14
  userSessionType: true,
15
- sessionServiceType: true,
15
+ wireServiceType: true,
16
16
  singletonServicesType: true,
17
17
  });
18
18
  const { userSessionType, singletonServicesType } = visitState.filesAndMethods;
@@ -2,15 +2,21 @@ import { pikkuSessionlessFunc } from '../../../../.pikku/pikku-types.gen.js';
2
2
  import { serializeFileImports } from '../../../utils/file-imports-serializer.js';
3
3
  import { writeFileInDir } from '../../../utils/file-writer.js';
4
4
  import { logCommandInfoAndTime } from '../../../middleware/log-command-info-and-time.js';
5
+ import { getFileImportRelativePath } from '../../../utils/file-import-path.js';
5
6
  export const pikkuCLI = pikkuSessionlessFunc({
6
7
  func: async ({ logger, config, getInspectorState }) => {
7
8
  const visitState = await getInspectorState();
8
- const { cliWiringsFile, cliWiringMetaFile, packageMappings } = config;
9
+ const { cliWiringsFile, cliWiringMetaFile, cliWiringMetaJsonFile, packageMappings, schema, } = config;
9
10
  const { cli } = visitState;
10
11
  // Generate CLI wirings file
11
12
  await writeFileInDir(logger, cliWiringsFile, serializeFileImports('wireCLI', cliWiringsFile, cli.files, packageMappings));
12
- // Generate CLI metadata file
13
- await writeFileInDir(logger, cliWiringMetaFile, `import { pikkuState } from '@pikku/core'\npikkuState('cli', 'meta', ${JSON.stringify(cli.meta, null, 2)})`);
13
+ await writeFileInDir(logger, cliWiringMetaJsonFile, JSON.stringify(cli.meta, null, 2));
14
+ const jsonImportPath = getFileImportRelativePath(cliWiringMetaFile, cliWiringMetaJsonFile, packageMappings);
15
+ const supportsImportAttributes = schema?.supportsImportAttributes ?? false;
16
+ const importStatement = supportsImportAttributes
17
+ ? `import metaData from '${jsonImportPath}' with { type: 'json' }`
18
+ : `import metaData from '${jsonImportPath}'`;
19
+ await writeFileInDir(logger, cliWiringMetaFile, `import { pikkuState } from '@pikku/core'\nimport { CLIMeta } from '@pikku/core/cli'\n${importStatement}\npikkuState('cli', 'meta', metaData as CLIMeta)`);
14
20
  return true;
15
21
  },
16
22
  middleware: [