@pikku/cli 0.11.0 → 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 (262) hide show
  1. package/.pikku/channel/pikku-channel-types.gen.ts +11 -12
  2. package/.pikku/channel/pikku-channels-map.gen.d.ts +9 -9
  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 +92 -0
  6. package/.pikku/cli/pikku-cli-client.gen.ts +54 -0
  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 -34
  10. package/.pikku/cli/pikku-cli-wirings.gen.ts +2 -1
  11. package/.pikku/cli/pikku-cli.gen.ts +41 -0
  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 +9 -9
  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 +6 -8
  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 +9 -9
  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 +9 -9
  36. package/.pikku/rpc/pikku-rpc-wirings-map.internal.gen.d.ts +41 -40
  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 +27 -27
  42. package/.pikku/schemas/schemas/PikkuCLIConfig.schema.json +1 -1
  43. package/.pikku/schemas/schemas/PikkuChannelsOutput.schema.json +1 -1
  44. package/.pikku/schemas/schemas/PikkuSchemasOutput.schema.json +1 -1
  45. package/.pikku/services/config.gen.json +99 -0
  46. package/.pikku/services/getInspectorState.gen.json +10 -0
  47. package/.pikku/services/jwt.gen.json +13 -0
  48. package/.pikku/services/logger.gen.json +25 -0
  49. package/.pikku/services/queueService.gen.json +14 -0
  50. package/.pikku/services/schedulerService.gen.json +17 -0
  51. package/.pikku/services/schema.gen.json +14 -0
  52. package/.pikku/services/variables.gen.json +13 -0
  53. package/.pikku/services/workflowService.gen.json +31 -0
  54. package/.pikku/workflow/pikku-workflow-map.gen.d.ts +9 -9
  55. package/.pikku/workflow/pikku-workflow-types.gen.ts +36 -31
  56. package/.pikku/workflow/pikku-workflow-wirings-meta.gen.json +1 -0
  57. package/.pikku/workflow/pikku-workflow-wirings-meta.gen.ts +5 -2
  58. package/.pikku/workflow/pikku-workflow-wirings.gen.ts +6 -2
  59. package/CHANGELOG.md +27 -1
  60. package/bin/pikku.ts +6 -32
  61. package/build.sh +53 -31
  62. package/cli.schema.json +1 -1
  63. package/dist/.pikku/channel/pikku-channel-types.gen.d.ts +6 -7
  64. package/dist/.pikku/channel/pikku-channel-types.gen.js +1 -1
  65. package/dist/.pikku/channel/pikku-channels-meta.gen.js +1 -1
  66. package/dist/.pikku/channel/pikku-channels.gen.d.ts +1 -1
  67. package/dist/.pikku/channel/pikku-channels.gen.js +1 -1
  68. package/dist/.pikku/cli/pikku-cli-channel.js +91 -0
  69. package/dist/.pikku/cli/pikku-cli-client.gen.d.ts +10 -0
  70. package/dist/.pikku/cli/pikku-cli-client.gen.js +44 -0
  71. package/dist/.pikku/cli/pikku-cli-types.gen.d.ts +3 -3
  72. package/dist/.pikku/cli/pikku-cli-types.gen.js +1 -1
  73. package/dist/.pikku/cli/pikku-cli-wirings-meta.gen.js +3 -34
  74. package/dist/.pikku/cli/pikku-cli-wirings-meta.gen.json +146 -0
  75. package/dist/.pikku/cli/pikku-cli-wirings.gen.d.ts +2 -1
  76. package/dist/.pikku/cli/pikku-cli-wirings.gen.js +2 -1
  77. package/dist/.pikku/cli/pikku-cli.gen.d.ts +10 -0
  78. package/dist/.pikku/cli/pikku-cli.gen.js +38 -0
  79. package/dist/.pikku/function/pikku-function-types.gen.d.ts +29 -79
  80. package/dist/.pikku/function/pikku-function-types.gen.js +19 -15
  81. package/dist/.pikku/function/pikku-functions-meta.gen.js +3 -969
  82. package/dist/.pikku/function/pikku-functions-meta.gen.json +988 -0
  83. package/dist/.pikku/function/pikku-functions-meta.min.gen.js +3 -208
  84. package/dist/.pikku/function/pikku-functions-meta.min.gen.json +212 -0
  85. package/dist/.pikku/http/pikku-http-types.gen.d.ts +2 -2
  86. package/dist/.pikku/http/pikku-http-types.gen.js +1 -1
  87. package/dist/.pikku/http/pikku-http-wirings-meta.gen.js +1 -1
  88. package/dist/.pikku/http/pikku-http-wirings.gen.d.ts +1 -1
  89. package/dist/.pikku/http/pikku-http-wirings.gen.js +1 -1
  90. package/dist/.pikku/mcp/pikku-mcp-types.gen.d.ts +13 -13
  91. package/dist/.pikku/mcp/pikku-mcp-types.gen.js +1 -1
  92. package/dist/.pikku/mcp/pikku-mcp-wirings-meta.gen.js +5 -4
  93. package/dist/.pikku/mcp/pikku-mcp-wirings-meta.gen.json +5 -0
  94. package/dist/.pikku/mcp/pikku-mcp-wirings.gen.d.ts +1 -1
  95. package/dist/.pikku/mcp/pikku-mcp-wirings.gen.js +1 -1
  96. package/dist/.pikku/pikku-bootstrap.gen.d.ts +1 -4
  97. package/dist/.pikku/pikku-bootstrap.gen.js +1 -4
  98. package/dist/.pikku/pikku-services.gen.d.ts +5 -8
  99. package/dist/.pikku/pikku-services.gen.js +3 -6
  100. package/dist/.pikku/pikku-types.gen.d.ts +1 -1
  101. package/dist/.pikku/pikku-types.gen.js +1 -1
  102. package/dist/.pikku/pikku-websocket.gen.d.ts +1 -1
  103. package/dist/.pikku/pikku-websocket.gen.js +1 -1
  104. package/dist/.pikku/queue/pikku-queue-types.gen.d.ts +2 -2
  105. package/dist/.pikku/queue/pikku-queue-types.gen.js +1 -1
  106. package/dist/.pikku/queue/pikku-queue-workers-wirings-meta.gen.js +3 -7
  107. package/dist/.pikku/queue/pikku-queue-workers-wirings-meta.gen.json +1 -0
  108. package/dist/.pikku/queue/pikku-queue-workers-wirings.gen.d.ts +1 -1
  109. package/dist/.pikku/queue/pikku-queue-workers-wirings.gen.js +1 -1
  110. package/dist/.pikku/rpc/pikku-remote-rpc-workers.gen.d.ts +6 -9
  111. package/dist/.pikku/rpc/pikku-remote-rpc-workers.gen.js +2 -2
  112. package/dist/.pikku/scheduler/pikku-scheduler-types.gen.d.ts +2 -2
  113. package/dist/.pikku/scheduler/pikku-scheduler-types.gen.js +1 -1
  114. package/dist/.pikku/scheduler/pikku-schedulers-wirings-meta.gen.js +3 -2
  115. package/dist/.pikku/scheduler/pikku-schedulers-wirings-meta.gen.json +1 -0
  116. package/dist/.pikku/scheduler/pikku-schedulers-wirings.gen.d.ts +1 -1
  117. package/dist/.pikku/scheduler/pikku-schedulers-wirings.gen.js +1 -1
  118. package/dist/.pikku/schemas/register.gen.js +17 -17
  119. package/dist/.pikku/schemas/schemas/PikkuCLIConfig.schema.json +1 -1
  120. package/dist/.pikku/schemas/schemas/PikkuChannelsOutput.schema.json +1 -1
  121. package/dist/.pikku/schemas/schemas/PikkuSchemasOutput.schema.json +1 -1
  122. package/dist/.pikku/workflow/pikku-workflow-types.gen.d.ts +29 -25
  123. package/dist/.pikku/workflow/pikku-workflow-types.gen.js +22 -8
  124. package/dist/.pikku/workflow/pikku-workflow-wirings-meta.gen.js +3 -2
  125. package/dist/.pikku/workflow/pikku-workflow-wirings-meta.gen.json +1 -0
  126. package/dist/.pikku/workflow/pikku-workflow-wirings.gen.d.ts +6 -2
  127. package/dist/.pikku/workflow/pikku-workflow-wirings.gen.js +6 -3
  128. package/dist/bin/pikku.js +5 -28
  129. package/dist/src/cli.wiring.js +108 -106
  130. package/dist/src/functions/commands/all.js +82 -42
  131. package/dist/src/functions/commands/bootstrap.js +22 -10
  132. package/dist/src/functions/commands/watch.js +6 -3
  133. package/dist/src/functions/runtimes/nextjs/pikku-command-nextjs.js +12 -7
  134. package/dist/src/functions/runtimes/nextjs/serialize-nextjs-backend-wrapper.d.ts +1 -1
  135. package/dist/src/functions/runtimes/nextjs/serialize-nextjs-backend-wrapper.js +42 -4
  136. package/dist/src/functions/runtimes/nextjs/serialize-nextjs-http-wrapper.d.ts +1 -1
  137. package/dist/src/functions/runtimes/nextjs/serialize-nextjs-http-wrapper.js +40 -2
  138. package/dist/src/functions/wirings/channels/pikku-channels.js +9 -2
  139. package/dist/src/functions/wirings/channels/serialize-channel-types.js +10 -11
  140. package/dist/src/functions/wirings/cli/pikku-command-cli-entry.js +4 -4
  141. package/dist/src/functions/wirings/cli/pikku-command-cli-types.js +1 -1
  142. package/dist/src/functions/wirings/cli/pikku-command-cli.js +9 -3
  143. package/dist/src/functions/wirings/cli/serialize-channel-cli.js +1 -1
  144. package/dist/src/functions/wirings/cli/serialize-cli-types.js +2 -2
  145. package/dist/src/functions/wirings/cli/serialize-local-cli-bootstrap.d.ts +1 -1
  146. package/dist/src/functions/wirings/cli/serialize-local-cli-bootstrap.js +4 -4
  147. package/dist/src/functions/wirings/functions/pikku-command-function-types-split.js +4 -4
  148. package/dist/src/functions/wirings/functions/pikku-command-functions.js +15 -5
  149. package/dist/src/functions/wirings/functions/pikku-command-services.d.ts +1 -1
  150. package/dist/src/functions/wirings/functions/pikku-command-services.js +23 -23
  151. package/dist/src/functions/wirings/functions/schemas.js +1 -1
  152. package/dist/src/functions/wirings/functions/serialize-function-types.d.ts +1 -1
  153. package/dist/src/functions/wirings/functions/serialize-function-types.js +50 -64
  154. package/dist/src/functions/wirings/http/openapi-spec-generator.js +4 -4
  155. package/dist/src/functions/wirings/http/pikku-http-routes.js +9 -2
  156. package/dist/src/functions/wirings/http/serialize-http-types.js +1 -1
  157. package/dist/src/functions/wirings/mcp/pikku-command-mcp.js +18 -4
  158. package/dist/src/functions/wirings/mcp/serialize-mcp-types.js +12 -12
  159. package/dist/src/functions/wirings/middleware/pikku-command-middleware.js +26 -2
  160. package/dist/src/functions/wirings/middleware/serialize-middleware-groups-meta.d.ts +5 -2
  161. package/dist/src/functions/wirings/middleware/serialize-middleware-groups-meta.js +5 -13
  162. package/dist/src/functions/wirings/queue/pikku-command-queue.js +9 -3
  163. package/dist/src/functions/wirings/queue/pikku-queue.js +9 -3
  164. package/dist/src/functions/wirings/queue/serialize-queue-meta.d.ts +2 -1
  165. package/dist/src/functions/wirings/queue/serialize-queue-meta.js +10 -1
  166. package/dist/src/functions/wirings/queue/serialize-queue-types.js +1 -1
  167. package/dist/src/functions/wirings/rpc/pikku-command-rpc.js +9 -2
  168. package/dist/src/functions/wirings/rpc/serialize-public-rpc.js +11 -4
  169. package/dist/src/functions/wirings/rpc/serialize-remote-rpc.js +1 -1
  170. package/dist/src/functions/wirings/rpc/serialize-rpc-wrapper.js +3 -3
  171. package/dist/src/functions/wirings/scheduler/pikku-command-scheduler.js +6 -3
  172. package/dist/src/functions/wirings/scheduler/serialize-scheduler-meta.d.ts +2 -1
  173. package/dist/src/functions/wirings/scheduler/serialize-scheduler-meta.js +11 -1
  174. package/dist/src/functions/wirings/scheduler/serialize-scheduler-types.js +1 -1
  175. package/dist/src/functions/wirings/services/pikku-command-service-metadata.d.ts +1 -0
  176. package/dist/src/functions/wirings/services/pikku-command-service-metadata.js +22 -0
  177. package/dist/src/functions/wirings/workflow/pikku-command-workflow-types.js +3 -1
  178. package/dist/src/functions/wirings/workflow/pikku-command-workflow.js +12 -8
  179. package/dist/src/functions/wirings/workflow/serialize-workflow-meta.d.ts +2 -1
  180. package/dist/src/functions/wirings/workflow/serialize-workflow-meta.js +11 -1
  181. package/dist/src/functions/wirings/workflow/serialize-workflow-types.d.ts +1 -1
  182. package/dist/src/functions/wirings/workflow/serialize-workflow-types.js +36 -31
  183. package/dist/src/functions/wirings/workflow/serialize-workflow-wirings.d.ts +8 -0
  184. package/dist/src/functions/wirings/workflow/serialize-workflow-wirings.js +30 -0
  185. package/dist/src/functions/wirings/workflow/serialize-workflow-workers.js +2 -2
  186. package/dist/src/middleware/log-command-info-and-time.d.ts +2 -2
  187. package/dist/src/middleware/log-command-info-and-time.js +1 -4
  188. package/dist/src/services/cli-logger-forwarder.service.d.ts +3 -0
  189. package/dist/src/services/cli-logger-forwarder.service.js +9 -2
  190. package/dist/src/services.d.ts +2 -7
  191. package/dist/src/services.js +14 -12
  192. package/dist/src/utils/check-required-types.d.ts +2 -2
  193. package/dist/src/utils/check-required-types.js +2 -3
  194. package/dist/src/utils/pikku-cli-config.js +35 -2
  195. package/dist/src/utils/pikku-files-and-methods.d.ts +2 -2
  196. package/dist/src/utils/pikku-files-and-methods.js +4 -4
  197. package/dist/src/utils/schema-generator.d.ts +1 -1
  198. package/dist/src/utils/schema-generator.js +1 -1
  199. package/dist/tsconfig.tsbuildinfo +1 -1
  200. package/package.json +7 -8
  201. package/src/cli.wiring.ts +110 -105
  202. package/src/functions/commands/all.ts +94 -45
  203. package/src/functions/commands/bootstrap.ts +25 -10
  204. package/src/functions/commands/watch.ts +6 -3
  205. package/src/functions/runtimes/nextjs/pikku-command-nextjs.ts +26 -5
  206. package/src/functions/runtimes/nextjs/serialize-nextjs-backend-wrapper.ts +43 -4
  207. package/src/functions/runtimes/nextjs/serialize-nextjs-http-wrapper.ts +40 -1
  208. package/src/functions/wirings/channels/pikku-channels.ts +27 -3
  209. package/src/functions/wirings/channels/serialize-channel-types.ts +10 -11
  210. package/src/functions/wirings/cli/pikku-command-cli-entry.ts +4 -4
  211. package/src/functions/wirings/cli/pikku-command-cli-types.ts +1 -1
  212. package/src/functions/wirings/cli/pikku-command-cli.ts +26 -3
  213. package/src/functions/wirings/cli/serialize-channel-cli.ts +1 -1
  214. package/src/functions/wirings/cli/serialize-cli-types.ts +2 -2
  215. package/src/functions/wirings/cli/serialize-local-cli-bootstrap.ts +5 -5
  216. package/src/functions/wirings/functions/pikku-command-function-types-split.ts +6 -6
  217. package/src/functions/wirings/functions/pikku-command-functions.ts +39 -4
  218. package/src/functions/wirings/functions/pikku-command-services.ts +25 -25
  219. package/src/functions/wirings/functions/schemas.ts +2 -2
  220. package/src/functions/wirings/functions/serialize-function-types.ts +51 -65
  221. package/src/functions/wirings/http/openapi-spec-generator.ts +14 -5
  222. package/src/functions/wirings/http/pikku-http-routes.ts +28 -2
  223. package/src/functions/wirings/http/serialize-http-types.ts +1 -1
  224. package/src/functions/wirings/mcp/pikku-command-mcp.ts +30 -4
  225. package/src/functions/wirings/mcp/serialize-mcp-types.ts +12 -12
  226. package/src/functions/wirings/middleware/pikku-command-middleware.ts +35 -2
  227. package/src/functions/wirings/middleware/serialize-middleware-groups-meta.ts +4 -19
  228. package/src/functions/wirings/permissions/pikku-command-permissions.ts +2 -2
  229. package/src/functions/wirings/queue/pikku-command-queue.ts +27 -2
  230. package/src/functions/wirings/queue/pikku-queue.ts +27 -2
  231. package/src/functions/wirings/queue/serialize-queue-meta.ts +15 -1
  232. package/src/functions/wirings/queue/serialize-queue-types.ts +1 -1
  233. package/src/functions/wirings/rpc/pikku-command-rpc.ts +25 -2
  234. package/src/functions/wirings/rpc/serialize-public-rpc.ts +11 -4
  235. package/src/functions/wirings/rpc/serialize-remote-rpc.ts +1 -1
  236. package/src/functions/wirings/rpc/serialize-rpc-wrapper.ts +3 -3
  237. package/src/functions/wirings/scheduler/pikku-command-scheduler.ts +30 -4
  238. package/src/functions/wirings/scheduler/serialize-scheduler-meta.ts +20 -1
  239. package/src/functions/wirings/scheduler/serialize-scheduler-types.ts +1 -1
  240. package/src/functions/wirings/services/pikku-command-service-metadata.ts +25 -0
  241. package/src/functions/wirings/workflow/pikku-command-workflow-types.ts +8 -1
  242. package/src/functions/wirings/workflow/pikku-command-workflow.ts +36 -8
  243. package/src/functions/wirings/workflow/serialize-workflow-meta.ts +18 -1
  244. package/src/functions/wirings/workflow/serialize-workflow-types.ts +39 -31
  245. package/src/functions/wirings/workflow/serialize-workflow-wirings.ts +47 -0
  246. package/src/functions/wirings/workflow/serialize-workflow-workers.ts +2 -2
  247. package/src/middleware/log-command-info-and-time.ts +3 -6
  248. package/src/services/cli-logger-forwarder.service.ts +11 -2
  249. package/src/services.ts +15 -15
  250. package/src/utils/check-required-types.ts +4 -7
  251. package/src/utils/pikku-cli-config.ts +69 -2
  252. package/src/utils/pikku-files-and-methods.ts +10 -13
  253. package/src/utils/schema-generator.ts +2 -2
  254. package/types/application-types.d.ts +1 -1
  255. package/types/config.d.ts +12 -1
  256. package/.pikku/function/pikku-functions.gen.ts +0 -84
  257. package/.pikku/rpc/pikku-rpc-wirings-meta.internal.gen.ts +0 -47
  258. package/dist/.pikku/function/pikku-functions.gen.js +0 -83
  259. package/dist/.pikku/rpc/pikku-rpc-wirings-meta.internal.gen.d.ts +0 -1
  260. package/dist/.pikku/rpc/pikku-rpc-wirings-meta.internal.gen.js +0 -47
  261. package/dist/.pikku/schemas/schemas/PikkuRemoteInternalRPCInput.schema.json +0 -1
  262. /package/dist/.pikku/{function/pikku-functions.gen.d.ts → cli/pikku-cli-channel.d.ts} +0 -0
@@ -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: [
@@ -50,7 +50,7 @@ import { pikkuMiddleware } from '${functionTypesPath}'
50
50
  ${imports}
51
51
 
52
52
  // Middleware to close the channel after CLI command completes
53
- const cliCloseOnComplete = pikkuMiddleware(async (services, { channel }, next) => {
53
+ const cliCloseOnComplete = pikkuMiddleware(async (_services, { channel }, next) => {
54
54
  const closeChannel = () => {
55
55
  setTimeout(async () => {
56
56
  try {
@@ -50,7 +50,7 @@ export const pikkuCLIRender = <Data, RequiredServices extends SingletonServices
50
50
  * CLI command configuration with project-specific types.
51
51
  * Uses CoreCLICommandConfig from @pikku/core with local middleware and render types.
52
52
  */
53
- type CLICommandConfig<Func extends PikkuFunctionConfig<In, Out>, In = any, Out = any, Params extends string = string> = CoreCLICommandConfig<Func, PikkuMiddleware, PikkuCLIRender<any>, Params>
53
+ type CLICommandConfig<Func extends PikkuFunctionConfig<In, Out, 'cli' | 'rpc' | 'session'>, In = any, Out = any, Params extends string = string> = CoreCLICommandConfig<Func, PikkuMiddleware, PikkuCLIRender<any>, Params>
54
54
 
55
55
  /**
56
56
  * Type definition for CLI applications with commands and global options.
@@ -84,7 +84,7 @@ export const wireCLI = <Commands extends Record<string, CoreCLICommandConfig<any
84
84
  * @returns CLI command configuration with inferred types
85
85
  */
86
86
  export const pikkuCLICommand = <
87
- FuncConfig extends PikkuFunctionConfig<any, any>,
87
+ FuncConfig extends PikkuFunctionConfig<any, any, 'cli' | 'rpc' | 'session'>,
88
88
  Params extends string
89
89
  >(
90
90
  config: CLICommandConfig<FuncConfig, any, any, Params>
@@ -8,7 +8,7 @@ export declare function serializeLocalCLIBootstrap(programName: string, _program
8
8
  }, singletonServicesFactory: {
9
9
  file: string;
10
10
  variable: string;
11
- }, sessionServicesFactory: {
11
+ }, wireServicesFactory: {
12
12
  file: string;
13
13
  variable: string;
14
14
  }): string;
@@ -2,18 +2,18 @@ import { getFileImportRelativePath } from '../../../utils/file-import-path.js';
2
2
  /**
3
3
  * Serializes the local (in-program) CLI bootstrap code
4
4
  */
5
- export function serializeLocalCLIBootstrap(programName, _programMeta, bootstrapFile, config, pikkuConfigFactory, singletonServicesFactory, sessionServicesFactory) {
5
+ export function serializeLocalCLIBootstrap(programName, _programMeta, bootstrapFile, config, pikkuConfigFactory, singletonServicesFactory, wireServicesFactory) {
6
6
  const capitalizedName = programName.charAt(0).toUpperCase() + programName.slice(1).replace(/-/g, '');
7
7
  // Get relative import paths
8
8
  const pikkuConfigPath = getFileImportRelativePath(bootstrapFile, pikkuConfigFactory.file, config.packageMappings);
9
9
  const singletonServicesPath = getFileImportRelativePath(bootstrapFile, singletonServicesFactory.file, config.packageMappings);
10
- const sessionServicesPath = getFileImportRelativePath(bootstrapFile, sessionServicesFactory.file, config.packageMappings);
10
+ const wireServicesPath = getFileImportRelativePath(bootstrapFile, wireServicesFactory.file, config.packageMappings);
11
11
  const cliBootstrapPath = getFileImportRelativePath(bootstrapFile, config.bootstrapFile, config.packageMappings);
12
12
  return `
13
13
  import { executeCLI, CLIError } from '@pikku/core/cli'
14
14
  import { ${pikkuConfigFactory.variable} as createConfig } from '${pikkuConfigPath}'
15
15
  import { ${singletonServicesFactory.variable} as createSingletonServices } from '${singletonServicesPath}'
16
- import { ${sessionServicesFactory.variable} as createSessionServices } from '${sessionServicesPath}'
16
+ import { ${wireServicesFactory.variable} as createWireServices } from '${wireServicesPath}'
17
17
  import '${cliBootstrapPath}'
18
18
 
19
19
  /**
@@ -27,7 +27,7 @@ export async function ${capitalizedName}CLI(args: string[]): Promise<void> {
27
27
  args: args || process.argv.slice(2),
28
28
  createConfig,
29
29
  createSingletonServices,
30
- createSessionServices,
30
+ createWireServices,
31
31
  })
32
32
  } catch (error) {
33
33
  if (error instanceof CLIError) {
@@ -11,17 +11,17 @@ export const pikkuFunctionTypesSplit = pikkuSessionlessFunc({
11
11
  // Check for required types
12
12
  checkRequiredTypes(visitState.filesAndMethodsErrors, {
13
13
  userSessionType: true,
14
- sessionServiceType: true,
14
+ wireServiceType: true,
15
15
  singletonServicesType: true,
16
16
  });
17
- const { userSessionType, sessionServicesType, singletonServicesType, pikkuConfigType, } = visitState.filesAndMethods;
18
- if (!userSessionType || !sessionServicesType || !singletonServicesType) {
17
+ const { userSessionType, wireServicesType, singletonServicesType, pikkuConfigType, } = visitState.filesAndMethods;
18
+ if (!userSessionType || !wireServicesType || !singletonServicesType) {
19
19
  throw new Error('Required types not found');
20
20
  }
21
21
  const configTypeImport = pikkuConfigType
22
22
  ? `import type { ${pikkuConfigType.type} } from '${getFileImportRelativePath(functionTypesFile, pikkuConfigType.typePath, packageMappings)}'`
23
23
  : '// Config type not found, will use fallback';
24
- const content = serializeFunctionTypes(`import type { ${userSessionType.type} } from '${getFileImportRelativePath(functionTypesFile, userSessionType.typePath, packageMappings)}'`, userSessionType.type, `import type { ${singletonServicesType.type} } from '${getFileImportRelativePath(functionTypesFile, singletonServicesType.typePath, packageMappings)}'`, singletonServicesType.type, `import type { ${sessionServicesType.type} } from '${getFileImportRelativePath(functionTypesFile, sessionServicesType.typePath, packageMappings)}'`, sessionServicesType.type, `import type { TypedPikkuRPC } from '${getFileImportRelativePath(functionTypesFile, rpcInternalMapDeclarationFile, packageMappings)}'`, `import type { RequiredSingletonServices, RequiredSessionServices } from '${getFileImportRelativePath(functionTypesFile, servicesFile, packageMappings)}'`, configTypeImport);
24
+ const content = serializeFunctionTypes(`import type { ${userSessionType.type} } from '${getFileImportRelativePath(functionTypesFile, userSessionType.typePath, packageMappings)}'`, userSessionType.type, `import type { ${singletonServicesType.type} } from '${getFileImportRelativePath(functionTypesFile, singletonServicesType.typePath, packageMappings)}'`, singletonServicesType.type, `import type { ${wireServicesType.type} } from '${getFileImportRelativePath(functionTypesFile, wireServicesType.typePath, packageMappings)}'`, wireServicesType.type, `import type { TypedPikkuRPC } from '${getFileImportRelativePath(functionTypesFile, rpcInternalMapDeclarationFile, packageMappings)}'`, `import type { RequiredSingletonServices, RequiredWireServices } from '${getFileImportRelativePath(functionTypesFile, servicesFile, packageMappings)}'`, configTypeImport);
25
25
  await writeFileInDir(logger, functionTypesFile, content);
26
26
  },
27
27
  middleware: [
@@ -2,15 +2,25 @@ import { pikkuSessionlessFunc } from '../../../../.pikku/pikku-types.gen.js';
2
2
  import { writeFileInDir } from '../../../utils/file-writer.js';
3
3
  import { logCommandInfoAndTime } from '../../../middleware/log-command-info-and-time.js';
4
4
  import { generateRuntimeMeta, serializeFunctionImports, } from './serialize-function-imports.js';
5
+ import { getFileImportRelativePath } from '../../../utils/file-import-path.js';
5
6
  export const pikkuFunctions = pikkuSessionlessFunc({
6
7
  func: async ({ logger, config, getInspectorState }) => {
7
8
  const { functions, rpc } = await getInspectorState();
8
- const { functionsMetaFile, functionsMetaMinFile, functionsFile, packageMappings, } = config;
9
- // Generate full metadata
10
- await writeFileInDir(logger, functionsMetaFile, `import { pikkuState } from '@pikku/core'\npikkuState('function', 'meta', ${JSON.stringify(functions.meta, null, 2)})`);
11
- // Generate minimal metadata (runtime)
9
+ const { functionsMetaFile, functionsMetaJsonFile, functionsMetaMinFile, functionsMetaMinJsonFile, functionsFile, packageMappings, schema, } = config;
10
+ await writeFileInDir(logger, functionsMetaJsonFile, JSON.stringify(functions.meta, null, 2));
11
+ const fullJsonImportPath = getFileImportRelativePath(functionsMetaFile, functionsMetaJsonFile, packageMappings);
12
+ const supportsImportAttributes = schema?.supportsImportAttributes ?? false;
13
+ const fullImportStatement = supportsImportAttributes
14
+ ? `import metaData from '${fullJsonImportPath}' with { type: 'json' }`
15
+ : `import metaData from '${fullJsonImportPath}'`;
16
+ await writeFileInDir(logger, functionsMetaFile, `import { pikkuState, FunctionsMeta } from '@pikku/core'\n${fullImportStatement}\npikkuState('function', 'meta', metaData as FunctionsMeta)`);
12
17
  const runtimeMeta = generateRuntimeMeta(functions.meta);
13
- await writeFileInDir(logger, functionsMetaMinFile, `import { pikkuState } from '@pikku/core'\npikkuState('function', 'meta', ${JSON.stringify(runtimeMeta, null, 2)})`);
18
+ await writeFileInDir(logger, functionsMetaMinJsonFile, JSON.stringify(runtimeMeta, null, 2));
19
+ const minJsonImportPath = getFileImportRelativePath(functionsMetaMinFile, functionsMetaMinJsonFile, packageMappings);
20
+ const minImportStatement = supportsImportAttributes
21
+ ? `import metaData from '${minJsonImportPath}' with { type: 'json' }`
22
+ : `import metaData from '${minJsonImportPath}'`;
23
+ await writeFileInDir(logger, functionsMetaMinFile, `import { pikkuState, FunctionsRuntimeMeta } from '@pikku/core'\n${minImportStatement}\npikkuState('function', 'meta', metaData as FunctionsRuntimeMeta)`);
14
24
  const hasRPCs = rpc.exposedFiles.size > 0 || rpc.internalFiles.size > 0;
15
25
  if (hasRPCs) {
16
26
  await writeFileInDir(logger, functionsFile, serializeFunctionImports(functionsFile, rpc.internalFiles, functions.meta, packageMappings));
@@ -1,2 +1,2 @@
1
- export declare const serializeServicesMap: (allSingletonServices: string[], allSessionServices: string[], requiredServices: Set<string>, forceRequiredServices: string[] | undefined, servicesImport: string, sessionServicesImport: string) => string;
1
+ export declare const serializeServicesMap: (allSingletonServices: string[], allWireServices: string[], requiredServices: Set<string>, forceRequiredServices: string[] | undefined, servicesImport: string, wireServicesImport: string) => string;
2
2
  export declare const pikkuServices: any;
@@ -3,7 +3,7 @@ import { getFileImportRelativePath } from '../../../utils/file-import-path.js';
3
3
  import { checkRequiredTypes } from '../../../utils/check-required-types.js';
4
4
  import { writeFileInDir } from '../../../utils/file-writer.js';
5
5
  import { logCommandInfoAndTime } from '../../../middleware/log-command-info-and-time.js';
6
- export const serializeServicesMap = (allSingletonServices, allSessionServices, requiredServices, forceRequiredServices = [], servicesImport, sessionServicesImport) => {
6
+ export const serializeServicesMap = (allSingletonServices, allWireServices, requiredServices, forceRequiredServices = [], servicesImport, wireServicesImport) => {
7
7
  // Use pre-aggregated services from inspector state
8
8
  // This includes services from:
9
9
  // - Wired functions (HTTP, channels, queues, schedulers, MCP, CLI, RPC)
@@ -11,7 +11,7 @@ export const serializeServicesMap = (allSingletonServices, allSessionServices, r
11
11
  // - Permissions used by wired functions
12
12
  // - Session factories
13
13
  const usedServices = new Set(requiredServices);
14
- // Internal services that are created internally by the framework (PikkuInteraction)
14
+ // Internal services that are created internally by the framework (PikkuWire)
15
15
  // These should not appear in the services maps
16
16
  const internalServices = new Set([
17
17
  'rpc',
@@ -37,24 +37,24 @@ export const serializeServicesMap = (allSingletonServices, allSessionServices, r
37
37
  allSingletonServices.forEach((service) => {
38
38
  singletonServicesMap[service] = usedServices.has(service);
39
39
  });
40
- // Create session services map: all session services with true/false based on usage
41
- // Exclude internal framework services (PikkuInteraction)
42
- const sessionServicesMap = {};
43
- allSessionServices.forEach((service) => {
40
+ // Create wire services map: all wire services with true/false based on usage
41
+ // Exclude internal framework services (PikkuWire)
42
+ const wireServicesMap = {};
43
+ allWireServices.forEach((service) => {
44
44
  if (!internalServices.has(service)) {
45
- sessionServicesMap[service] = usedServices.has(service);
45
+ wireServicesMap[service] = usedServices.has(service);
46
46
  }
47
47
  });
48
48
  // Get all required service names (those marked as true)
49
49
  const requiredSingletonServiceNames = Object.keys(singletonServicesMap)
50
50
  .filter((key) => singletonServicesMap[key])
51
51
  .sort();
52
- const requiredSessionServiceNames = Object.keys(sessionServicesMap)
53
- .filter((key) => sessionServicesMap[key])
52
+ const requiredWireServiceNames = Object.keys(wireServicesMap)
53
+ .filter((key) => wireServicesMap[key])
54
54
  .sort();
55
55
  const code = [
56
56
  servicesImport,
57
- sessionServicesImport,
57
+ wireServicesImport,
58
58
  '',
59
59
  '// Singleton services map: true if required, false if available but unused',
60
60
  'export const requiredSingletonServices = {',
@@ -63,11 +63,11 @@ export const serializeServicesMap = (allSingletonServices, allSessionServices, r
63
63
  .map((service) => ` '${service}': ${singletonServicesMap[service]},`),
64
64
  '} as const',
65
65
  '',
66
- '// Session services map: true if required, false if available but unused',
67
- 'export const requiredSessionServices = {',
68
- ...Object.keys(sessionServicesMap)
66
+ '// Wire services map: true if required, false if available but unused',
67
+ 'export const requiredWireServices = {',
68
+ ...Object.keys(wireServicesMap)
69
69
  .sort()
70
- .map((service) => ` '${service}': ${sessionServicesMap[service]},`),
70
+ .map((service) => ` '${service}': ${wireServicesMap[service]},`),
71
71
  '} as const',
72
72
  '',
73
73
  '// Type exports',
@@ -75,9 +75,9 @@ export const serializeServicesMap = (allSingletonServices, allSessionServices, r
75
75
  ? `export type RequiredSingletonServices = Pick<SingletonServices, ${requiredSingletonServiceNames.map((key) => `'${key}'`).join(' | ')}> & Partial<Omit<SingletonServices, ${requiredSingletonServiceNames.map((key) => `'${key}'`).join(' | ')}>>`
76
76
  : 'export type RequiredSingletonServices = Partial<SingletonServices>',
77
77
  '',
78
- requiredSessionServiceNames.length > 0
79
- ? `export type RequiredSessionServices = Pick<Services, ${requiredSessionServiceNames.map((key) => `'${key}'`).join(' | ')}> & Partial<Omit<Services, ${requiredSessionServiceNames.map((key) => `'${key}'`).join(' | ')}>>`
80
- : 'export type RequiredSessionServices = Partial<Services>',
78
+ requiredWireServiceNames.length > 0
79
+ ? `export type RequiredWireServices = Pick<Services, ${requiredWireServiceNames.map((key) => `'${key}'`).join(' | ')}> & Partial<Omit<Services, ${requiredWireServiceNames.map((key) => `'${key}'`).join(' | ')}>>`
80
+ : 'export type RequiredWireServices = Partial<Services>',
81
81
  '',
82
82
  ].join('\n');
83
83
  return code;
@@ -87,16 +87,16 @@ export const pikkuServices = pikkuSessionlessFunc({
87
87
  const visitState = await getInspectorState();
88
88
  // Check for required types
89
89
  checkRequiredTypes(visitState.filesAndMethodsErrors, {
90
- sessionServiceType: true,
90
+ wireServiceType: true,
91
91
  singletonServicesType: true,
92
92
  });
93
- const { sessionServicesType, singletonServicesType } = visitState.filesAndMethods;
94
- if (!sessionServicesType || !singletonServicesType) {
95
- throw new Error('Required types not found: sessionServicesType or singletonServicesType');
93
+ const { wireServicesType, singletonServicesType } = visitState.filesAndMethods;
94
+ if (!wireServicesType || !singletonServicesType) {
95
+ throw new Error('Required types not found: wireServicesType or singletonServicesType');
96
96
  }
97
97
  const servicesImport = `import type { ${singletonServicesType.type} } from '${getFileImportRelativePath(config.typesDeclarationFile, singletonServicesType.typePath, config.packageMappings)}'`;
98
- const sessionServicesImport = `import type { ${sessionServicesType.type} } from '${getFileImportRelativePath(config.typesDeclarationFile, sessionServicesType.typePath, config.packageMappings)}'`;
99
- const servicesCode = serializeServicesMap(visitState.serviceAggregation.allSingletonServices, visitState.serviceAggregation.allSessionServices, visitState.serviceAggregation.requiredServices, config.forceRequiredServices, servicesImport, sessionServicesImport);
98
+ const wireServicesImport = `import type { ${wireServicesType.type} } from '${getFileImportRelativePath(config.typesDeclarationFile, wireServicesType.typePath, config.packageMappings)}'`;
99
+ const servicesCode = serializeServicesMap(visitState.serviceAggregation.allSingletonServices, visitState.serviceAggregation.allWireServices, visitState.serviceAggregation.requiredServices, config.forceRequiredServices, servicesImport, wireServicesImport);
100
100
  await writeFileInDir(logger, config.servicesFile, servicesCode);
101
101
  },
102
102
  middleware: [
@@ -8,7 +8,7 @@ export const pikkuSchemas = pikkuSessionlessFunc({
8
8
  func: async ({ logger, config, getInspectorState }) => {
9
9
  const visitState = await getInspectorState();
10
10
  const schemas = await generateSchemas(logger, config.tsconfig, visitState.functions.typesMap, visitState.functions.meta, visitState.http.meta, config.schemasFromTypes, config.schema?.additionalProperties);
11
- await saveSchemas(logger, config.schemaDirectory, schemas, visitState.functions.typesMap, visitState.functions.meta, config.schemasFromTypes, config.schema?.supportsImportAttributes);
11
+ await saveSchemas(logger, config.schemaDirectory, schemas, visitState.functions.typesMap, visitState.functions.meta, config.schema?.supportsImportAttributes || true, config.schemasFromTypes);
12
12
  return true;
13
13
  },
14
14
  middleware: [
@@ -1,4 +1,4 @@
1
1
  /**
2
2
  * Generates core function, middleware, and permission type definitions
3
3
  */
4
- export declare const serializeFunctionTypes: (userSessionTypeImport: string, userSessionTypeName: string, singletonServicesTypeImport: string, singletonServicesTypeName: string, sessionServicesTypeImport: string, sessionServicesTypeName: string, rpcMapTypeImport: string, requiredServicesTypeImport: string, configTypeImport: string) => string;
4
+ export declare const serializeFunctionTypes: (userSessionTypeImport: string, userSessionTypeName: string, singletonServicesTypeImport: string, singletonServicesTypeName: string, wireServicesTypeImport: string, wireServicesTypeName: string, rpcMapTypeImport: string, requiredServicesTypeImport: string, configTypeImport: string) => string;