@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
@@ -2,7 +2,11 @@ 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 { serializeQueueMeta } from './serialize-queue-meta.js'
5
+ import {
6
+ serializeQueueMeta,
7
+ serializeQueueMetaTS,
8
+ } from './serialize-queue-meta.js'
9
+ import { getFileImportRelativePath } from '../../../utils/file-import-path.js'
6
10
 
7
11
  export const pikkuQueue: any = pikkuSessionlessFunc<void, boolean | undefined>({
8
12
  func: async ({ logger, config, getInspectorState }) => {
@@ -10,15 +14,36 @@ export const pikkuQueue: any = pikkuSessionlessFunc<void, boolean | undefined>({
10
14
  const {
11
15
  queueWorkersWiringFile,
12
16
  queueWorkersWiringMetaFile,
17
+ queueWorkersWiringMetaJsonFile,
13
18
  packageMappings,
19
+ schema,
14
20
  } = config
15
21
  const { queueWorkers } = visitState
16
22
 
23
+ // Write JSON file
17
24
  await writeFileInDir(
18
25
  logger,
26
+ queueWorkersWiringMetaJsonFile,
27
+ JSON.stringify(serializeQueueMeta(queueWorkers.meta), null, 2)
28
+ )
29
+
30
+ // Calculate relative path from TS file to JSON file
31
+ const jsonImportPath = getFileImportRelativePath(
19
32
  queueWorkersWiringMetaFile,
20
- serializeQueueMeta(queueWorkers.meta)
33
+ queueWorkersWiringMetaJsonFile,
34
+ packageMappings
21
35
  )
36
+
37
+ // Write TypeScript file that imports JSON
38
+ await writeFileInDir(
39
+ logger,
40
+ queueWorkersWiringMetaFile,
41
+ serializeQueueMetaTS(
42
+ jsonImportPath,
43
+ schema?.supportsImportAttributes ?? false
44
+ )
45
+ )
46
+
22
47
  await writeFileInDir(
23
48
  logger,
24
49
  queueWorkersWiringFile,
@@ -2,7 +2,11 @@ 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 { serializeQueueMeta } from './serialize-queue-meta.js'
5
+ import {
6
+ serializeQueueMeta,
7
+ serializeQueueMetaTS,
8
+ } from './serialize-queue-meta.js'
9
+ import { getFileImportRelativePath } from '../../../utils/file-import-path.js'
6
10
 
7
11
  export const pikkuQueue: any = pikkuSessionlessFunc<void, boolean>({
8
12
  func: async ({ logger, config, getInspectorState }) => {
@@ -10,7 +14,9 @@ export const pikkuQueue: any = pikkuSessionlessFunc<void, boolean>({
10
14
  const {
11
15
  queueWorkersWiringFile,
12
16
  queueWorkersWiringMetaFile,
17
+ queueWorkersWiringMetaJsonFile,
13
18
  packageMappings,
19
+ schema,
14
20
  } = config
15
21
  const { queueWorkers } = visitState
16
22
 
@@ -23,11 +29,30 @@ export const pikkuQueue: any = pikkuSessionlessFunc<void, boolean>({
23
29
  }
24
30
  }
25
31
 
32
+ // Write JSON file
26
33
  await writeFileInDir(
27
34
  logger,
35
+ queueWorkersWiringMetaJsonFile,
36
+ JSON.stringify(serializeQueueMeta(queueMeta), null, 2)
37
+ )
38
+
39
+ // Calculate relative path from TS file to JSON file
40
+ const jsonImportPath = getFileImportRelativePath(
28
41
  queueWorkersWiringMetaFile,
29
- serializeQueueMeta(queueMeta)
42
+ queueWorkersWiringMetaJsonFile,
43
+ packageMappings
30
44
  )
45
+
46
+ // Write TypeScript file that imports JSON
47
+ await writeFileInDir(
48
+ logger,
49
+ queueWorkersWiringMetaFile,
50
+ serializeQueueMetaTS(
51
+ jsonImportPath,
52
+ schema?.supportsImportAttributes ?? false
53
+ )
54
+ )
55
+
31
56
  await writeFileInDir(
32
57
  logger,
33
58
  queueWorkersWiringFile,
@@ -1,10 +1,24 @@
1
1
  import { QueueWorkersMeta } from '@pikku/core/queue'
2
2
 
3
3
  export const serializeQueueMeta = (queueWorkersMeta: QueueWorkersMeta) => {
4
+ return queueWorkersMeta
5
+ }
6
+
7
+ export const serializeQueueMetaTS = (
8
+ jsonImportPath: string,
9
+ supportsImportAttributes: boolean
10
+ ) => {
11
+ const importStatement = supportsImportAttributes
12
+ ? `import metaData from '${jsonImportPath}' with { type: 'json' }`
13
+ : `import metaData from '${jsonImportPath}'`
14
+
4
15
  const serializedOutput: string[] = []
5
16
  serializedOutput.push("import { pikkuState } from '@pikku/core'")
17
+ serializedOutput.push("import { QueueWorkersMeta } from '@pikku/core/queue'")
18
+ serializedOutput.push(importStatement)
19
+ serializedOutput.push('')
6
20
  serializedOutput.push(
7
- `pikkuState('queue', 'meta', ${JSON.stringify(queueWorkersMeta, null, 2)})`
21
+ "pikkuState('queue', 'meta', metaData as QueueWorkersMeta)"
8
22
  )
9
23
  return serializedOutput.join('\n')
10
24
  }
@@ -15,7 +15,7 @@ import type { PikkuFunctionConfig } from '${functionTypesImportPath}'
15
15
  * @template In - Input type for the queue job
16
16
  * @template Out - Output type for the queue job
17
17
  */
18
- type QueueWiring<In, Out> = CoreQueueWorker<PikkuFunctionConfig<In, Out>>
18
+ type QueueWiring<In, Out> = CoreQueueWorker<PikkuFunctionConfig<In, Out, 'session' | 'rpc'>>
19
19
 
20
20
  /**
21
21
  * Registers a queue worker with the Pikku framework.
@@ -1,17 +1,40 @@
1
1
  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
+ import { getFileImportRelativePath } from '../../../utils/file-import-path.js'
4
5
 
5
6
  export const pikkuRPC: any = pikkuSessionlessFunc<void, boolean>({
6
7
  func: async ({ logger, config, getInspectorState }) => {
7
8
  const { rpc } = await getInspectorState()
8
- const { rpcInternalWiringMetaFile } = config
9
+ const {
10
+ rpcInternalWiringMetaFile,
11
+ rpcInternalWiringMetaJsonFile,
12
+ packageMappings,
13
+ schema,
14
+ } = config
9
15
 
10
16
  if (rpc.internalFiles.size > 0) {
17
+ await writeFileInDir(
18
+ logger,
19
+ rpcInternalWiringMetaJsonFile,
20
+ JSON.stringify(rpc.internalMeta, null, 2)
21
+ )
22
+
23
+ const jsonImportPath = getFileImportRelativePath(
24
+ rpcInternalWiringMetaFile,
25
+ rpcInternalWiringMetaJsonFile,
26
+ packageMappings
27
+ )
28
+
29
+ const supportsImportAttributes = schema?.supportsImportAttributes ?? false
30
+ const importStatement = supportsImportAttributes
31
+ ? `import metaData from '${jsonImportPath}' with { type: 'json' }`
32
+ : `import metaData from '${jsonImportPath}'`
33
+
11
34
  await writeFileInDir(
12
35
  logger,
13
36
  rpcInternalWiringMetaFile,
14
- `import { pikkuState } from '@pikku/core'\npikkuState('rpc', 'meta', ${JSON.stringify(rpc.internalMeta, null, 2)})`
37
+ `import { pikkuState } from '@pikku/core'\n${importStatement}\npikkuState('rpc', 'meta', metaData as Record<string, string>)`
15
38
  )
16
39
  return true
17
40
  }
@@ -13,16 +13,23 @@ import { pikkuSessionlessFunc, wireHTTP } from '${pathToPikkuTypes}'
13
13
  * This is used for public HTTP access to exposed server functions
14
14
  */
15
15
  export const rpcCaller = pikkuSessionlessFunc<
16
- { name: string, data?: any },
16
+ { rpcName: string, data?: any },
17
17
  any
18
18
  >({
19
- func: async ({ rpc }, { name, data }) => {
20
- return await (rpc.invokeExposed as any)(name, data)
19
+ func: async (services, { rpcName, data }, { rpc }) => {
20
+ return await (rpc.invokeExposed as any)(rpcName, data)
21
21
  },
22
22
  })
23
23
 
24
24
  wireHTTP({
25
- route: '/rpc',
25
+ route: "/rpc/:rpcName",
26
+ method: "options",
27
+ auth: false,
28
+ func: pikkuSessionlessFunc<{ rpcName: string }>(async () => void 0),
29
+ });
30
+
31
+ wireHTTP({
32
+ route: '/rpc/:rpcName',
26
33
  method: 'post',
27
34
  func: rpcCaller,
28
35
  })
@@ -16,7 +16,7 @@ export const pikkuRemoteInternalRPC = pikkuSessionlessFunc<
16
16
  { rpcName: string, data?: any },
17
17
  any
18
18
  >({
19
- func: async ({ rpc }, { rpcName, data }) => {
19
+ func: async (_services, { rpcName, data }, { rpc }) => {
20
20
  return await (rpc.invoke as any)(rpcName, data)
21
21
  },
22
22
  internal: true,
@@ -54,12 +54,12 @@ export class PikkuRPC {
54
54
  * This is a generic method that routes to the appropriate server function
55
55
  * based on the function name and passes the provided data.
56
56
  *
57
- * @param name - The name of the server function to invoke
57
+ * @param rpcName - The name of the server function to invoke
58
58
  * @param data - The data to pass to the server function
59
59
  * @returns A promise that resolves with the function's return value
60
60
  */
61
- invoke: RPCInvoke = async (name, data) => {
62
- return await this.pikkuFetch.post('/rpc' as any, { name, data }) as any
61
+ invoke: RPCInvoke = async (rpcName, data) => {
62
+ return await this.pikkuFetch.post(\`/rpc/\${rpcName}\` as any, { rpcName, data }) as any
63
63
  }
64
64
  }
65
65
 
@@ -2,7 +2,11 @@ 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 { serializeSchedulerMeta } from './serialize-scheduler-meta.js'
5
+ import {
6
+ serializeSchedulerMeta,
7
+ serializeSchedulerMetaTS,
8
+ } from './serialize-scheduler-meta.js'
9
+ import { getFileImportRelativePath } from '../../../utils/file-import-path.js'
6
10
 
7
11
  export const pikkuScheduler: any = pikkuSessionlessFunc<
8
12
  void,
@@ -10,15 +14,37 @@ export const pikkuScheduler: any = pikkuSessionlessFunc<
10
14
  >({
11
15
  func: async ({ logger, config, getInspectorState }) => {
12
16
  const visitState = await getInspectorState()
13
- const { schedulersWiringFile, schedulersWiringMetaFile, packageMappings } =
14
- config
17
+ const {
18
+ schedulersWiringFile,
19
+ schedulersWiringMetaFile,
20
+ schedulersWiringMetaJsonFile,
21
+ packageMappings,
22
+ schema,
23
+ } = config
15
24
  const { scheduledTasks } = visitState
16
25
 
17
26
  await writeFileInDir(
18
27
  logger,
28
+ schedulersWiringMetaJsonFile,
29
+ JSON.stringify(serializeSchedulerMeta(scheduledTasks.meta), null, 2)
30
+ )
31
+
32
+ const jsonImportPath = getFileImportRelativePath(
19
33
  schedulersWiringMetaFile,
20
- serializeSchedulerMeta(scheduledTasks.meta)
34
+ schedulersWiringMetaJsonFile,
35
+ packageMappings
21
36
  )
37
+
38
+ await writeFileInDir(
39
+ logger,
40
+ schedulersWiringMetaFile,
41
+ serializeSchedulerMetaTS(
42
+ scheduledTasks.meta,
43
+ jsonImportPath,
44
+ schema?.supportsImportAttributes ?? false
45
+ )
46
+ )
47
+
22
48
  await writeFileInDir(
23
49
  logger,
24
50
  schedulersWiringFile,
@@ -3,11 +3,30 @@ import { ScheduledTasksMeta } from '@pikku/core/scheduler'
3
3
  export const serializeSchedulerMeta = (
4
4
  scheduledTasksMeta: ScheduledTasksMeta
5
5
  ) => {
6
+ return scheduledTasksMeta
7
+ }
8
+
9
+ export const serializeSchedulerMetaTS = (
10
+ scheduledTasksMeta: ScheduledTasksMeta,
11
+ jsonImportPath: string,
12
+ supportsImportAttributes
13
+ ) => {
14
+ const importStatement = supportsImportAttributes
15
+ ? `import metaData from '${jsonImportPath}' with { type: 'json' }`
16
+ : `import metaData from '${jsonImportPath}'`
17
+
6
18
  const serializedOutput: string[] = []
7
19
  serializedOutput.push("import { pikkuState } from '@pikku/core'")
8
20
  serializedOutput.push(
9
- `pikkuState('scheduler', 'meta', ${JSON.stringify(scheduledTasksMeta, null, 2)})`
21
+ "import { ScheduledTasksMeta } from '@pikku/core/scheduler'"
10
22
  )
23
+ serializedOutput.push(importStatement)
24
+ serializedOutput.push('')
25
+ serializedOutput.push(
26
+ "pikkuState('scheduler', 'meta', metaData as ScheduledTasksMeta)"
27
+ )
28
+ serializedOutput.push('')
29
+
11
30
  const scheduledTasksMetaValues = Object.values(scheduledTasksMeta)
12
31
  if (scheduledTasksMetaValues.length > 0) {
13
32
  serializedOutput.push(
@@ -13,7 +13,7 @@ import type { PikkuFunctionConfig, PikkuMiddleware } from '${functionTypesImport
13
13
  * Type definition for scheduled tasks that run at specified intervals.
14
14
  * These are sessionless functions that execute based on cron expressions.
15
15
  */
16
- type SchedulerWiring = CoreScheduledTask<PikkuFunctionConfig<void, void>, PikkuMiddleware>
16
+ type SchedulerWiring = CoreScheduledTask<PikkuFunctionConfig<void, void, 'session' | 'rpc'>, PikkuMiddleware>
17
17
 
18
18
  /**
19
19
  * Registers a scheduled task with the Pikku framework.
@@ -0,0 +1,25 @@
1
+ import { pikkuSessionlessFunc } from '../../../../.pikku/pikku-types.gen.js'
2
+ import { logCommandInfoAndTime } from '../../../middleware/log-command-info-and-time.js'
3
+ import { writeAllServiceMetadata } from '@pikku/inspector'
4
+
5
+ export const pikkuServiceMetadata: any = pikkuSessionlessFunc<void, void>({
6
+ func: async ({ logger, config, getInspectorState }) => {
7
+ const state = await getInspectorState()
8
+
9
+ // Only write service metadata if there are services to document
10
+ if (state.serviceMetadata && state.serviceMetadata.length > 0) {
11
+ writeAllServiceMetadata(state.serviceMetadata, config.outDir)
12
+ logger.debug(
13
+ `• Wrote ${state.serviceMetadata.length} service metadata files`
14
+ )
15
+ } else {
16
+ logger.debug('• No service metadata to write')
17
+ }
18
+ },
19
+ middleware: [
20
+ logCommandInfoAndTime({
21
+ commandStart: 'Generating service metadata',
22
+ commandEnd: 'Generated service metadata',
23
+ }),
24
+ ],
25
+ })
@@ -13,10 +13,17 @@ export const pikkuWorkflowTypes: any = pikkuSessionlessFunc<void, void>({
13
13
  packageMappings
14
14
  )
15
15
 
16
+ // Get RPC map import path
17
+ const rpcMapImportPath = getFileImportRelativePath(
18
+ workflowTypesFile,
19
+ config.rpcInternalMapDeclarationFile,
20
+ packageMappings
21
+ )
22
+
16
23
  await writeFileInDir(
17
24
  logger,
18
25
  workflowTypesFile,
19
- serializeWorkflowTypes(functionTypesImportPath)
26
+ serializeWorkflowTypes(functionTypesImportPath, rpcMapImportPath)
20
27
  )
21
28
  },
22
29
  })
@@ -1,12 +1,15 @@
1
1
  import { pikkuSessionlessFunc } from '../../../../.pikku/pikku-types.gen.js'
2
2
  import { ErrorCode } from '@pikku/inspector'
3
- import { serializeFileImports } from '../../../utils/file-imports-serializer.js'
4
3
  import { writeFileInDir } from '../../../utils/file-writer.js'
5
4
  import { logCommandInfoAndTime } from '../../../middleware/log-command-info-and-time.js'
6
- import { serializeWorkflowMeta } from './serialize-workflow-meta.js'
5
+ import {
6
+ serializeWorkflowMeta,
7
+ serializeWorkflowMetaTS,
8
+ } from './serialize-workflow-meta.js'
7
9
  import { serializeWorkflowTypes } from './serialize-workflow-types.js'
8
10
  import { serializeWorkflowMap } from './serialize-workflow-map.js'
9
11
  import { serializeWorkflowWorkers } from './serialize-workflow-workers.js'
12
+ import { serializeWorkflowWirings } from './serialize-workflow-wirings.js'
10
13
  import { getFileImportRelativePath } from '../../../utils/file-import-path.js'
11
14
  import { join } from 'path'
12
15
 
@@ -19,11 +22,13 @@ export const pikkuWorkflow: any = pikkuSessionlessFunc<
19
22
  const {
20
23
  workflowsWiringFile,
21
24
  workflowsWiringMetaFile,
25
+ workflowsWiringMetaJsonFile,
22
26
  workflowMapDeclarationFile,
23
27
  workflowTypesFile,
24
28
  functionTypesFile,
25
29
  typesDeclarationFile,
26
30
  packageMappings,
31
+ schema,
27
32
  } = config
28
33
  const { workflows, functions: functionState } = visitState
29
34
  const { typesMap } = functionState
@@ -46,19 +51,34 @@ export const pikkuWorkflow: any = pikkuSessionlessFunc<
46
51
  }
47
52
  }
48
53
 
49
- // Write workflow metadata
54
+ await writeFileInDir(
55
+ logger,
56
+ workflowsWiringMetaJsonFile,
57
+ JSON.stringify(serializeWorkflowMeta(workflows.meta), null, 2)
58
+ )
59
+
60
+ const jsonImportPath = getFileImportRelativePath(
61
+ workflowsWiringMetaFile,
62
+ workflowsWiringMetaJsonFile,
63
+ packageMappings
64
+ )
65
+
66
+ // Write workflow metadata TypeScript file that imports JSON
50
67
  await writeFileInDir(
51
68
  logger,
52
69
  workflowsWiringMetaFile,
53
- serializeWorkflowMeta(workflows.meta)
70
+ serializeWorkflowMetaTS(
71
+ workflows.meta,
72
+ jsonImportPath,
73
+ schema?.supportsImportAttributes ?? false
74
+ )
54
75
  )
55
76
 
56
- // Write workflow wirings (imports)
77
+ // Write workflow wirings (imports and addWorkflow calls)
57
78
  await writeFileInDir(
58
79
  logger,
59
80
  workflowsWiringFile,
60
- serializeFileImports(
61
- 'wireWorkflow',
81
+ serializeWorkflowWirings(
62
82
  workflowsWiringFile,
63
83
  workflows.files,
64
84
  packageMappings
@@ -71,10 +91,18 @@ export const pikkuWorkflow: any = pikkuSessionlessFunc<
71
91
  functionTypesFile,
72
92
  packageMappings
73
93
  )
94
+
95
+ // Get RPC map import path
96
+ const rpcMapImportPath = getFileImportRelativePath(
97
+ workflowTypesFile,
98
+ config.rpcInternalMapDeclarationFile,
99
+ packageMappings
100
+ )
101
+
74
102
  await writeFileInDir(
75
103
  logger,
76
104
  workflowTypesFile,
77
- serializeWorkflowTypes(functionTypesImportPath)
105
+ serializeWorkflowTypes(functionTypesImportPath, rpcMapImportPath)
78
106
  )
79
107
 
80
108
  // Write workflow map (type-safe client API)
@@ -1,11 +1,28 @@
1
1
  import { WorkflowsMeta } from '@pikku/core/workflow'
2
2
 
3
3
  export const serializeWorkflowMeta = (workflowsMeta: WorkflowsMeta) => {
4
+ return workflowsMeta
5
+ }
6
+
7
+ export const serializeWorkflowMetaTS = (
8
+ workflowsMeta: WorkflowsMeta,
9
+ jsonImportPath: string,
10
+ supportsImportAttributes: boolean
11
+ ) => {
12
+ const importStatement = supportsImportAttributes
13
+ ? `import metaData from '${jsonImportPath}' with { type: 'json' }`
14
+ : `import metaData from '${jsonImportPath}'`
15
+
4
16
  const serializedOutput: string[] = []
5
17
  serializedOutput.push("import { pikkuState } from '@pikku/core'")
18
+ serializedOutput.push("import { WorkflowsMeta } from '@pikku/core/workflow'")
19
+ serializedOutput.push(importStatement)
20
+ serializedOutput.push('')
6
21
  serializedOutput.push(
7
- `pikkuState('workflows', 'meta', ${JSON.stringify(workflowsMeta, null, 2)})`
22
+ "pikkuState('workflows', 'meta', metaData as WorkflowsMeta)"
8
23
  )
24
+ serializedOutput.push('')
25
+
9
26
  const workflowsMetaValues = Object.values(workflowsMeta)
10
27
  if (workflowsMetaValues.length > 0) {
11
28
  serializedOutput.push(
@@ -1,30 +1,23 @@
1
1
  /**
2
2
  * Generates type definitions for workflow wirings
3
3
  */
4
- export const serializeWorkflowTypes = (functionTypesImportPath: string) => {
4
+ export const serializeWorkflowTypes = (
5
+ functionTypesImportPath: string,
6
+ rpcMapImportPath: string
7
+ ) => {
5
8
  return `/**
6
9
  * Workflow-specific type definitions for tree-shaking optimization
7
10
  */
8
11
 
9
- import { CoreWorkflow, wireWorkflow as wireWorkflowCore, PikkuWorkflowInteraction, WorkflowStepOptions } from '@pikku/core/workflow'
10
- import { CorePikkuFunctionConfig, CorePikkuFunctionSessionless } from '@pikku/core'
11
- import type { PikkuPermission, PikkuMiddleware } from '${functionTypesImportPath}'
12
- import type { UserSession, SingletonServices } from '../../types/application-types.d.js'
13
- import type { TypedPikkuRPC, RPCMap } from '../rpc/pikku-rpc-wirings-map.internal.gen.d.js'
14
-
15
- /**
16
- * Type definition for workflows that orchestrate multi-step processes.
17
- * Workflows support both inline and remote execution modes with step caching.
18
- */
19
- type WorkflowWiring = CoreWorkflow<
20
- CorePikkuFunctionConfig<PikkuFunctionWorkflow<any, any>, PikkuPermission<any>, PikkuMiddleware>
21
- >
12
+ import { PikkuWorkflowWire, WorkflowStepOptions } from '@pikku/core/workflow'
13
+ import type { PikkuFunctionSessionless, PikkuFunctionConfig } from '${functionTypesImportPath}'
14
+ import type { RPCMap } from '${rpcMapImportPath}'
22
15
 
23
16
  /**
24
- * Typed workflow interaction with RPC awareness
17
+ * Typed workflow wire with RPC awareness
25
18
  * Provides type-safe workflow.do() for RPC steps
26
19
  */
27
- export interface TypedWorkflow extends PikkuWorkflowInteraction {
20
+ export interface TypedWorkflow extends PikkuWorkflowWire {
28
21
  /**
29
22
  * Execute a workflow step with RPC invocation (typed based on available RPCs)
30
23
  * @template K - RPC name from the RPC map
@@ -49,25 +42,23 @@ export interface TypedWorkflow extends PikkuWorkflowInteraction {
49
42
 
50
43
  /**
51
44
  * Workflow function type with typed workflow service
52
- * Includes the workflow interaction object with typed RPC methods
45
+ * Includes the workflow wire object with typed RPC methods
53
46
  */
54
47
  export type PikkuFunctionWorkflow<
55
48
  In = unknown,
56
49
  Out = never
57
- > = CorePikkuFunctionSessionless<
50
+ > = PikkuFunctionSessionless<
58
51
  In,
59
52
  Out,
60
- null,
61
- SingletonServices & {
62
- rpc: TypedPikkuRPC
63
- workflow: TypedWorkflow
64
- },
65
- UserSession
53
+ 'workflow'
66
54
  >
67
55
 
68
56
  /**
69
57
  * Creates a workflow function with typed input and output.
70
- * Workflow functions have access to the workflow interaction object for step execution.
58
+ * Workflow functions have access to the workflow wire object for step execution.
59
+ *
60
+ * This is the permissive mode - workflows that don't conform to simple DSL will fall back
61
+ * to basic extraction with a warning.
71
62
  *
72
63
  * @template In - Input type for the workflow
73
64
  * @template Out - Output type for the workflow
@@ -77,19 +68,36 @@ export type PikkuFunctionWorkflow<
77
68
  export const pikkuWorkflowFunc = <In, Out = unknown>(
78
69
  func:
79
70
  | PikkuFunctionWorkflow<In, Out>
80
- | CorePikkuFunctionConfig<PikkuFunctionWorkflow<In, Out>, PikkuPermission<In>, PikkuMiddleware>
71
+ | PikkuFunctionConfig<In, Out, 'workflow', PikkuFunctionWorkflow<In, Out>>
81
72
  ) => {
82
73
  return typeof func === 'function' ? { func } : func
83
74
  }
84
75
 
85
76
  /**
86
- * Registers a workflow with the Pikku framework.
87
- * Workflows can run in 'inline' (synchronous) or 'remote' (queue-based) execution modes.
77
+ * Creates a simple workflow function with typed input and output.
78
+ * Simple workflows must conform to the restricted DSL for static analysis.
79
+ *
80
+ * This is the strict mode - workflows that don't conform to simple DSL will cause
81
+ * a critical error during inspection.
88
82
  *
89
- * @param workflow - Workflow definition with name, execution mode, and handler function
83
+ * Constraints:
84
+ * - Must use only workflow.do() with RPC form (no inline functions)
85
+ * - Only if/else, for..of, and Promise.all(array.map()) control flow allowed
86
+ * - Step names must be unique (except across mutually exclusive branches)
87
+ * - All workflow calls must be awaited
88
+ *
89
+ * @template In - Input type for the workflow
90
+ * @template Out - Output type for the workflow
91
+ * @param func - Function definition, either direct function or configuration object
92
+ * @returns The normalized configuration object
90
93
  */
91
- export const wireWorkflow = (workflow: WorkflowWiring) => {
92
- wireWorkflowCore(workflow as any)
94
+ export const pikkuSimpleWorkflowFunc = <In, Out = unknown>(
95
+ func:
96
+ | PikkuFunctionWorkflow<In, Out>
97
+ | PikkuFunctionConfig<In, Out, 'workflow', PikkuFunctionWorkflow<In, Out>>
98
+ ) => {
99
+ return typeof func === 'function' ? { func } : func
93
100
  }
101
+
94
102
  `
95
103
  }
@@ -0,0 +1,47 @@
1
+ import { getFileImportRelativePath } from '../../../utils/file-import-path.js'
2
+
3
+ /**
4
+ * Generate workflow registration wirings
5
+ * Imports all workflow functions and calls addWorkflow for each
6
+ */
7
+ export const serializeWorkflowWirings = (
8
+ outputPath: string,
9
+ workflowFiles: Map<string, { path: string; exportedName: string }>,
10
+ packageMappings: Record<string, string> = {}
11
+ ) => {
12
+ const imports: string[] = []
13
+ const registrations: string[] = []
14
+
15
+ // Sort by pikkuFuncName for consistent output
16
+ const sortedWorkflows = Array.from(workflowFiles.entries()).sort((a, b) =>
17
+ a[0].localeCompare(b[0])
18
+ )
19
+
20
+ // Generate imports
21
+ for (const [, { path, exportedName }] of sortedWorkflows) {
22
+ const importPath = getFileImportRelativePath(
23
+ outputPath,
24
+ path,
25
+ packageMappings
26
+ )
27
+ imports.push(`import { ${exportedName} } from '${importPath}'`)
28
+ }
29
+
30
+ // Generate addWorkflow calls
31
+ for (const [pikkuFuncName, { exportedName }] of sortedWorkflows) {
32
+ registrations.push(`addWorkflow('${pikkuFuncName}', ${exportedName})`)
33
+ }
34
+
35
+ // Only import addWorkflow if there are workflows to register
36
+ const addWorkflowImport =
37
+ sortedWorkflows.length > 0
38
+ ? `import { addWorkflow } from '@pikku/core/workflow'\n\n`
39
+ : ''
40
+
41
+ return `/**
42
+ * Auto-generated workflow registrations
43
+ * Do not edit manually - regenerate with 'npx pikku'
44
+ */
45
+ ${addWorkflowImport}${imports.join('\n')}${imports.length > 0 ? '\n\n' : ''}${registrations.join('\n')}
46
+ `
47
+ }