@pikku/cli 0.11.1 → 0.11.3
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.
- package/.pikku/channel/pikku-channel-types.gen.ts +73 -17
- package/.pikku/channel/pikku-channels-map.gen.d.ts +11 -11
- package/.pikku/channel/pikku-channels-meta.gen.json +1 -0
- package/.pikku/channel/pikku-channels-meta.gen.ts +4 -2
- package/.pikku/channel/pikku-channels.gen.ts +1 -1
- package/.pikku/cli/pikku-cli-channel.ts +2 -2
- package/.pikku/cli/pikku-cli-client.gen.ts +1 -3
- package/.pikku/cli/pikku-cli-types.gen.ts +3 -3
- package/.pikku/cli/pikku-cli-wirings-meta.gen.json +147 -0
- package/.pikku/cli/pikku-cli-wirings-meta.gen.ts +4 -157
- package/.pikku/cli/pikku-cli-wirings.gen.ts +3 -3
- package/.pikku/cli/pikku-cli.gen.ts +3 -3
- package/.pikku/forge/pikku-forge-types.gen.ts +83 -0
- package/.pikku/function/pikku-function-types.gen.ts +223 -91
- package/.pikku/function/pikku-functions-meta-verbose.gen.json +1030 -0
- package/.pikku/function/pikku-functions-meta.gen.json +656 -0
- package/.pikku/function/pikku-functions-meta.gen.ts +4 -970
- package/.pikku/http/pikku-http-types.gen.ts +20 -4
- package/.pikku/http/pikku-http-wirings-map.gen.d.ts +11 -11
- package/.pikku/http/pikku-http-wirings-meta.gen.json +9 -0
- package/.pikku/http/pikku-http-wirings-meta.gen.ts +4 -10
- package/.pikku/http/pikku-http-wirings.gen.ts +1 -1
- package/.pikku/mcp/pikku-mcp-types.gen.ts +72 -20
- package/.pikku/mcp/pikku-mcp-wirings-meta.gen.json +5 -0
- package/.pikku/mcp/pikku-mcp-wirings-meta.gen.ts +6 -4
- package/.pikku/mcp/pikku-mcp-wirings.gen.ts +1 -1
- package/.pikku/pikku-bootstrap.gen.ts +7 -12
- package/.pikku/pikku-services.gen.ts +6 -7
- package/.pikku/pikku-types.gen.ts +4 -1
- package/.pikku/pikku-websocket.gen.ts +1 -1
- package/.pikku/queue/pikku-queue-types.gen.ts +2 -2
- package/.pikku/queue/pikku-queue-workers-wirings-map.gen.d.ts +11 -11
- package/.pikku/queue/pikku-queue-workers-wirings-meta.gen.json +1 -0
- package/.pikku/queue/pikku-queue-workers-wirings-meta.gen.ts +5 -7
- package/.pikku/queue/pikku-queue-workers-wirings.gen.ts +1 -1
- package/.pikku/rpc/pikku-remote-rpc-workers.gen.ts +5 -2
- package/.pikku/rpc/pikku-rpc-wirings-map.gen.d.ts +19 -14
- package/.pikku/rpc/pikku-rpc-wirings-map.internal.gen.d.ts +46 -39
- package/.pikku/scheduler/pikku-scheduler-types.gen.ts +2 -2
- package/.pikku/scheduler/pikku-schedulers-wirings-meta.gen.json +1 -0
- package/.pikku/scheduler/pikku-schedulers-wirings-meta.gen.ts +5 -2
- package/.pikku/scheduler/pikku-schedulers-wirings.gen.ts +1 -1
- package/.pikku/schemas/register.gen.ts +31 -23
- package/.pikku/schemas/schemas/PikkuCLIConfig.schema.json +1 -1
- package/.pikku/schemas/schemas/PikkuCLIOutput.schema.json +1 -1
- package/.pikku/schemas/schemas/PikkuChannelsOutput.schema.json +1 -1
- package/.pikku/schemas/schemas/PikkuForgeNodesOutput.schema.json +1 -0
- package/.pikku/schemas/schemas/PikkuFunctionsOutput.schema.json +1 -1
- package/.pikku/schemas/schemas/PikkuHTTPOutput.schema.json +1 -1
- package/.pikku/schemas/schemas/PikkuMCPOutput.schema.json +1 -1
- package/.pikku/schemas/schemas/PikkuMiddlewareOutput.schema.json +1 -1
- package/.pikku/schemas/schemas/PikkuPackageOutput.schema.json +1 -0
- package/.pikku/schemas/schemas/PikkuPermissionsOutput.schema.json +1 -1
- package/.pikku/schemas/schemas/PikkuPublicRPCOutput.schema.json +1 -1
- package/.pikku/schemas/schemas/PikkuQueueOutput.schema.json +1 -1
- package/.pikku/schemas/schemas/PikkuRPCOutput.schema.json +1 -1
- package/.pikku/schemas/schemas/PikkuRemoteRPCOutput.schema.json +1 -1
- package/.pikku/schemas/schemas/PikkuSchedulerOutput.schema.json +1 -1
- package/.pikku/schemas/schemas/PikkuSchemasOutput.schema.json +1 -1
- package/.pikku/schemas/schemas/PikkuWorkflowOutput.schema.json +1 -1
- package/.pikku/services/config.gen.json +104 -0
- package/.pikku/services/getInspectorState.gen.json +10 -0
- package/.pikku/services/jwt.gen.json +13 -0
- package/.pikku/services/logger.gen.json +25 -0
- package/.pikku/services/queueService.gen.json +14 -0
- package/.pikku/services/schedulerService.gen.json +17 -0
- package/.pikku/services/schema.gen.json +14 -0
- package/.pikku/services/secrets.gen.json +13 -0
- package/.pikku/services/variables.gen.json +13 -0
- package/.pikku/services/workflowService.gen.json +31 -0
- package/.pikku/workflow/pikku-workflow-map.gen.d.ts +2 -36
- package/.pikku/workflow/pikku-workflow-types.gen.ts +305 -48
- package/.pikku/workflow/pikku-workflow-wirings-meta.gen.ts +6 -2
- package/.pikku/workflow/pikku-workflow-wirings.gen.ts +1 -2
- package/CHANGELOG.md +44 -1
- package/bin/pikku.ts +6 -32
- package/build.sh +53 -31
- package/cli.schema.json +1 -1
- package/dist/.pikku/channel/pikku-channel-types.gen.d.ts +51 -10
- package/dist/.pikku/channel/pikku-channel-types.gen.js +3 -13
- package/dist/.pikku/channel/pikku-channels-meta.gen.js +3 -2
- package/dist/.pikku/channel/pikku-channels-meta.gen.json +1 -0
- package/dist/.pikku/channel/pikku-channels.gen.d.ts +1 -1
- package/dist/.pikku/channel/pikku-channels.gen.js +1 -1
- package/dist/.pikku/cli/pikku-cli-channel.js +2 -2
- package/dist/.pikku/cli/pikku-cli-client.gen.d.ts +1 -1
- package/dist/.pikku/cli/pikku-cli-client.gen.js +1 -3
- package/dist/.pikku/cli/pikku-cli-types.gen.d.ts +3 -3
- package/dist/.pikku/cli/pikku-cli-types.gen.js +1 -1
- package/dist/.pikku/cli/pikku-cli-wirings-meta.gen.js +3 -157
- package/dist/.pikku/cli/pikku-cli-wirings-meta.gen.json +147 -0
- package/dist/.pikku/cli/pikku-cli-wirings.gen.d.ts +2 -2
- package/dist/.pikku/cli/pikku-cli-wirings.gen.js +2 -2
- package/dist/.pikku/cli/pikku-cli.gen.d.ts +1 -1
- package/dist/.pikku/cli/pikku-cli.gen.js +3 -3
- package/dist/.pikku/forge/pikku-forge-types.gen.d.ts +72 -0
- package/dist/.pikku/forge/pikku-forge-types.gen.js +55 -0
- package/dist/.pikku/function/pikku-function-types.gen.d.ts +141 -99
- package/dist/.pikku/function/pikku-function-types.gen.js +52 -62
- package/dist/.pikku/function/pikku-functions-meta.gen.js +3 -969
- package/dist/.pikku/function/pikku-functions-meta.gen.json +656 -0
- package/dist/.pikku/http/pikku-http-types.gen.d.ts +19 -4
- package/dist/.pikku/http/pikku-http-types.gen.js +1 -1
- package/dist/.pikku/http/pikku-http-wirings-meta.gen.js +3 -10
- package/dist/.pikku/http/pikku-http-wirings-meta.gen.json +9 -0
- package/dist/.pikku/http/pikku-http-wirings.gen.d.ts +1 -1
- package/dist/.pikku/http/pikku-http-wirings.gen.js +1 -1
- package/dist/.pikku/mcp/pikku-mcp-types.gen.d.ts +57 -17
- package/dist/.pikku/mcp/pikku-mcp-types.gen.js +7 -31
- package/dist/.pikku/mcp/pikku-mcp-wirings-meta.gen.js +5 -4
- package/dist/.pikku/mcp/pikku-mcp-wirings-meta.gen.json +5 -0
- package/dist/.pikku/mcp/pikku-mcp-wirings.gen.d.ts +1 -1
- package/dist/.pikku/mcp/pikku-mcp-wirings.gen.js +1 -1
- package/dist/.pikku/pikku-bootstrap.gen.d.ts +7 -12
- package/dist/.pikku/pikku-bootstrap.gen.js +7 -12
- package/dist/.pikku/pikku-services.gen.d.ts +5 -7
- package/dist/.pikku/pikku-services.gen.js +3 -5
- package/dist/.pikku/pikku-types.gen.d.ts +2 -1
- package/dist/.pikku/pikku-types.gen.js +3 -1
- package/dist/.pikku/pikku-websocket.gen.d.ts +1 -1
- package/dist/.pikku/pikku-websocket.gen.js +1 -1
- package/dist/.pikku/queue/pikku-queue-types.gen.d.ts +2 -2
- package/dist/.pikku/queue/pikku-queue-types.gen.js +1 -1
- package/dist/.pikku/queue/pikku-queue-workers-wirings-meta.gen.js +3 -7
- package/dist/.pikku/queue/pikku-queue-workers-wirings-meta.gen.json +1 -0
- package/dist/.pikku/queue/pikku-queue-workers-wirings.gen.d.ts +1 -1
- package/dist/.pikku/queue/pikku-queue-workers-wirings.gen.js +1 -1
- package/dist/.pikku/rpc/pikku-remote-rpc-workers.gen.d.ts +9 -9
- package/dist/.pikku/rpc/pikku-remote-rpc-workers.gen.js +5 -2
- package/dist/.pikku/scheduler/pikku-scheduler-types.gen.d.ts +2 -2
- package/dist/.pikku/scheduler/pikku-scheduler-types.gen.js +1 -1
- package/dist/.pikku/scheduler/pikku-schedulers-wirings-meta.gen.js +3 -2
- package/dist/.pikku/scheduler/pikku-schedulers-wirings-meta.gen.json +1 -0
- package/dist/.pikku/scheduler/pikku-schedulers-wirings.gen.d.ts +1 -1
- package/dist/.pikku/scheduler/pikku-schedulers-wirings.gen.js +1 -1
- package/dist/.pikku/schemas/register.gen.js +19 -15
- package/dist/.pikku/schemas/schemas/PikkuCLIConfig.schema.json +1 -1
- package/dist/.pikku/schemas/schemas/PikkuCLIOutput.schema.json +1 -1
- package/dist/.pikku/schemas/schemas/PikkuChannelsOutput.schema.json +1 -1
- package/dist/.pikku/schemas/schemas/PikkuForgeNodesOutput.schema.json +1 -0
- package/dist/.pikku/schemas/schemas/PikkuFunctionsOutput.schema.json +1 -1
- package/dist/.pikku/schemas/schemas/PikkuHTTPOutput.schema.json +1 -1
- package/dist/.pikku/schemas/schemas/PikkuMCPOutput.schema.json +1 -1
- package/dist/.pikku/schemas/schemas/PikkuMiddlewareOutput.schema.json +1 -1
- package/dist/.pikku/schemas/schemas/PikkuPackageOutput.schema.json +1 -0
- package/dist/.pikku/schemas/schemas/PikkuPermissionsOutput.schema.json +1 -1
- package/dist/.pikku/schemas/schemas/PikkuPublicRPCOutput.schema.json +1 -1
- package/dist/.pikku/schemas/schemas/PikkuQueueOutput.schema.json +1 -1
- package/dist/.pikku/schemas/schemas/PikkuRPCOutput.schema.json +1 -1
- package/dist/.pikku/schemas/schemas/PikkuRemoteRPCOutput.schema.json +1 -1
- package/dist/.pikku/schemas/schemas/PikkuSchedulerOutput.schema.json +1 -1
- package/dist/.pikku/schemas/schemas/PikkuSchemasOutput.schema.json +1 -1
- package/dist/.pikku/schemas/schemas/PikkuWorkflowOutput.schema.json +1 -1
- package/dist/.pikku/workflow/pikku-workflow-types.gen.d.ts +213 -39
- package/dist/.pikku/workflow/pikku-workflow-types.gen.js +106 -16
- package/dist/.pikku/workflow/pikku-workflow-wirings-meta.gen.js +3 -2
- package/dist/.pikku/workflow/pikku-workflow-wirings.gen.d.ts +1 -1
- package/dist/.pikku/workflow/pikku-workflow-wirings.gen.js +1 -2
- package/dist/bin/pikku.js +5 -26
- package/dist/src/cli.wiring.js +4 -4
- package/dist/src/functions/commands/all.js +172 -94
- package/dist/src/functions/commands/bootstrap.js +21 -16
- package/dist/src/functions/commands/watch.js +6 -3
- package/dist/src/functions/runtimes/nextjs/pikku-command-nextjs.js +12 -8
- package/dist/src/functions/runtimes/nextjs/serialize-nextjs-backend-wrapper.d.ts +1 -1
- package/dist/src/functions/runtimes/nextjs/serialize-nextjs-backend-wrapper.js +74 -22
- package/dist/src/functions/runtimes/nextjs/serialize-nextjs-http-wrapper.d.ts +1 -1
- package/dist/src/functions/runtimes/nextjs/serialize-nextjs-http-wrapper.js +72 -20
- package/dist/src/functions/wirings/channels/pikku-channels.js +9 -2
- package/dist/src/functions/wirings/channels/pikku-command-channels.js +18 -2
- package/dist/src/functions/wirings/channels/serialize-channel-types.js +72 -16
- package/dist/src/functions/wirings/channels/serialize-typed-channel-map.js +1 -2
- package/dist/src/functions/wirings/cli/pikku-command-cli-entry.js +4 -4
- package/dist/src/functions/wirings/cli/pikku-command-cli-types.js +1 -1
- package/dist/src/functions/wirings/cli/pikku-command-cli.js +17 -3
- package/dist/src/functions/wirings/cli/serialize-channel-cli.js +1 -1
- package/dist/src/functions/wirings/cli/serialize-cli-types.js +2 -2
- package/dist/src/functions/wirings/cli/serialize-local-cli-bootstrap.d.ts +1 -1
- package/dist/src/functions/wirings/cli/serialize-local-cli-bootstrap.js +4 -4
- package/dist/src/functions/wirings/forge/pikku-command-forge-nodes.d.ts +1 -0
- package/dist/src/functions/wirings/forge/pikku-command-forge-nodes.js +90 -0
- package/dist/src/functions/wirings/forge/pikku-command-forge-types.d.ts +1 -0
- package/dist/src/functions/wirings/forge/pikku-command-forge-types.js +26 -0
- package/dist/src/functions/wirings/forge/serialize-forge-types.d.ts +4 -0
- package/dist/src/functions/wirings/forge/serialize-forge-types.js +90 -0
- package/dist/src/functions/wirings/functions/pikku-command-function-types-split.js +4 -4
- package/dist/src/functions/wirings/functions/pikku-command-function-types.js +7 -2
- package/dist/src/functions/wirings/functions/pikku-command-functions.js +35 -10
- package/dist/src/functions/wirings/functions/pikku-command-services.d.ts +1 -1
- package/dist/src/functions/wirings/functions/pikku-command-services.js +24 -24
- package/dist/src/functions/wirings/functions/pikku-function-types.js +2 -2
- package/dist/src/functions/wirings/functions/schemas.d.ts +1 -1
- package/dist/src/functions/wirings/functions/schemas.js +5 -4
- package/dist/src/functions/wirings/functions/serialize-function-imports.d.ts +3 -1
- package/dist/src/functions/wirings/functions/serialize-function-imports.js +7 -3
- package/dist/src/functions/wirings/functions/serialize-function-types.d.ts +1 -1
- package/dist/src/functions/wirings/functions/serialize-function-types.js +224 -91
- package/dist/src/functions/wirings/functions/serialize-pikku-types-hub.d.ts +1 -1
- package/dist/src/functions/wirings/functions/serialize-pikku-types-hub.js +19 -21
- package/dist/src/functions/wirings/http/openapi-spec-generator.js +5 -5
- package/dist/src/functions/wirings/http/pikku-command-http-routes.js +18 -2
- package/dist/src/functions/wirings/http/pikku-command-openapi.js +2 -2
- package/dist/src/functions/wirings/http/pikku-http-routes.js +9 -2
- package/dist/src/functions/wirings/http/serialize-http-types.js +19 -3
- package/dist/src/functions/wirings/http/serialize-typed-http-map.js +33 -8
- package/dist/src/functions/wirings/mcp/pikku-command-mcp.js +29 -6
- package/dist/src/functions/wirings/mcp/serialize-mcp-json.js +3 -2
- package/dist/src/functions/wirings/mcp/serialize-mcp-types.js +71 -19
- package/dist/src/functions/wirings/middleware/pikku-command-middleware.js +29 -2
- package/dist/src/functions/wirings/middleware/serialize-middleware-groups-meta.d.ts +5 -2
- package/dist/src/functions/wirings/middleware/serialize-middleware-groups-meta.js +5 -13
- package/dist/src/functions/wirings/package/pikku-command-package.d.ts +1 -0
- package/dist/src/functions/wirings/package/pikku-command-package.js +58 -0
- package/dist/src/functions/wirings/package/serialize-package.d.ts +5 -0
- package/dist/src/functions/wirings/package/serialize-package.js +32 -0
- package/dist/src/functions/wirings/queue/pikku-command-queue.js +17 -3
- package/dist/src/functions/wirings/queue/pikku-queue.js +9 -11
- package/dist/src/functions/wirings/queue/serialize-queue-map.js +20 -3
- package/dist/src/functions/wirings/queue/serialize-queue-meta.d.ts +2 -1
- package/dist/src/functions/wirings/queue/serialize-queue-meta.js +10 -1
- package/dist/src/functions/wirings/queue/serialize-queue-types.js +1 -1
- package/dist/src/functions/wirings/rpc/pikku-command-rpc-map.js +4 -4
- package/dist/src/functions/wirings/rpc/pikku-command-rpc.js +9 -2
- package/dist/src/functions/wirings/rpc/serialize-public-rpc.js +11 -4
- package/dist/src/functions/wirings/rpc/serialize-remote-rpc.js +4 -1
- package/dist/src/functions/wirings/rpc/serialize-rpc-wrapper.js +3 -3
- package/dist/src/functions/wirings/rpc/serialize-typed-rpc-map.d.ts +1 -1
- package/dist/src/functions/wirings/rpc/serialize-typed-rpc-map.js +54 -8
- package/dist/src/functions/wirings/scheduler/pikku-command-scheduler.js +15 -3
- package/dist/src/functions/wirings/scheduler/serialize-scheduler-meta.d.ts +2 -1
- package/dist/src/functions/wirings/scheduler/serialize-scheduler-meta.js +11 -1
- package/dist/src/functions/wirings/scheduler/serialize-scheduler-types.js +1 -1
- package/dist/src/functions/wirings/services/pikku-command-service-metadata.d.ts +1 -0
- package/dist/src/functions/wirings/services/pikku-command-service-metadata.js +22 -0
- package/dist/src/functions/wirings/workflow/pikku-command-workflow.js +58 -16
- package/dist/src/functions/wirings/workflow/serialize-workflow-map.d.ts +3 -0
- package/dist/src/functions/wirings/workflow/serialize-workflow-map.js +30 -32
- package/dist/src/functions/wirings/workflow/serialize-workflow-meta.d.ts +1 -2
- package/dist/src/functions/wirings/workflow/serialize-workflow-meta.js +43 -8
- package/dist/src/functions/wirings/workflow/serialize-workflow-registration.d.ts +7 -0
- package/dist/src/functions/wirings/workflow/serialize-workflow-registration.js +53 -0
- package/dist/src/functions/wirings/workflow/serialize-workflow-types.d.ts +4 -2
- package/dist/src/functions/wirings/workflow/serialize-workflow-types.js +308 -49
- package/dist/src/functions/wirings/workflow/serialize-workflow-workers.d.ts +1 -1
- package/dist/src/functions/wirings/workflow/serialize-workflow-workers.js +16 -29
- package/dist/src/middleware/log-command-info-and-time.d.ts +2 -2
- package/dist/src/middleware/log-command-info-and-time.js +1 -4
- package/dist/src/services/cli-logger-forwarder.service.js +1 -1
- package/dist/src/services.d.ts +2 -7
- package/dist/src/services.js +18 -13
- package/dist/src/utils/check-required-types.d.ts +2 -2
- package/dist/src/utils/check-required-types.js +2 -3
- package/dist/src/utils/command-summary.d.ts +2 -0
- package/dist/src/utils/command-summary.js +2 -0
- package/dist/src/utils/custom-types-generator.js +13 -15
- package/dist/src/utils/generate-bootstrap-file.js +1 -1
- package/dist/src/utils/pikku-cli-config.js +65 -4
- package/dist/src/utils/pikku-files-and-methods.d.ts +2 -2
- package/dist/src/utils/pikku-files-and-methods.js +4 -4
- package/dist/src/utils/schema-generator.d.ts +4 -3
- package/dist/src/utils/schema-generator.js +135 -15
- package/dist/src/utils/strip-verbose-meta.d.ts +43 -0
- package/dist/src/utils/strip-verbose-meta.js +210 -0
- package/dist/tsconfig.tsbuildinfo +1 -1
- package/package.json +11 -9
- package/src/cli.wiring.ts +4 -4
- package/src/functions/commands/all.ts +203 -107
- package/src/functions/commands/bootstrap.ts +23 -16
- package/src/functions/commands/watch.ts +6 -3
- package/src/functions/runtimes/nextjs/pikku-command-nextjs.ts +26 -6
- package/src/functions/runtimes/nextjs/serialize-nextjs-backend-wrapper.ts +75 -22
- package/src/functions/runtimes/nextjs/serialize-nextjs-http-wrapper.ts +72 -19
- package/src/functions/wirings/channels/pikku-channels.ts +27 -3
- package/src/functions/wirings/channels/pikku-command-channels.ts +46 -3
- package/src/functions/wirings/channels/serialize-channel-types.ts +72 -16
- package/src/functions/wirings/channels/serialize-typed-channel-map.ts +3 -2
- package/src/functions/wirings/cli/pikku-command-cli-entry.ts +4 -4
- package/src/functions/wirings/cli/pikku-command-cli-types.ts +1 -1
- package/src/functions/wirings/cli/pikku-command-cli.ts +45 -3
- package/src/functions/wirings/cli/serialize-channel-cli.ts +1 -1
- package/src/functions/wirings/cli/serialize-cli-types.ts +2 -2
- package/src/functions/wirings/cli/serialize-local-cli-bootstrap.ts +5 -5
- package/src/functions/wirings/forge/pikku-command-forge-nodes.ts +135 -0
- package/src/functions/wirings/forge/pikku-command-forge-types.ts +38 -0
- package/src/functions/wirings/forge/serialize-forge-types.ts +94 -0
- package/src/functions/wirings/functions/pikku-command-function-types-split.ts +9 -8
- package/src/functions/wirings/functions/pikku-command-function-types.ts +17 -10
- package/src/functions/wirings/functions/pikku-command-functions.ts +59 -14
- package/src/functions/wirings/functions/pikku-command-services.ts +26 -26
- package/src/functions/wirings/functions/pikku-function-types.ts +3 -1
- package/src/functions/wirings/functions/schemas.ts +14 -4
- package/src/functions/wirings/functions/serialize-function-imports.ts +12 -3
- package/src/functions/wirings/functions/serialize-function-types.ts +227 -93
- package/src/functions/wirings/functions/serialize-pikku-types-hub.ts +27 -26
- package/src/functions/wirings/http/openapi-spec-generator.ts +15 -6
- package/src/functions/wirings/http/pikku-command-http-routes.ts +46 -2
- package/src/functions/wirings/http/pikku-command-openapi.ts +3 -2
- package/src/functions/wirings/http/pikku-http-routes.ts +28 -2
- package/src/functions/wirings/http/serialize-http-types.ts +19 -3
- package/src/functions/wirings/http/serialize-typed-http-map.ts +32 -8
- package/src/functions/wirings/mcp/pikku-command-mcp.ts +58 -10
- package/src/functions/wirings/mcp/serialize-mcp-json.ts +8 -6
- package/src/functions/wirings/mcp/serialize-mcp-types.ts +71 -19
- package/src/functions/wirings/middleware/pikku-command-middleware.ts +39 -2
- package/src/functions/wirings/middleware/serialize-middleware-groups-meta.ts +4 -19
- package/src/functions/wirings/package/pikku-command-package.ts +81 -0
- package/src/functions/wirings/package/serialize-package.ts +69 -0
- package/src/functions/wirings/permissions/pikku-command-permissions.ts +2 -2
- package/src/functions/wirings/queue/pikku-command-queue.ts +47 -2
- package/src/functions/wirings/queue/pikku-queue.ts +26 -10
- package/src/functions/wirings/queue/serialize-queue-map.ts +18 -3
- package/src/functions/wirings/queue/serialize-queue-meta.ts +15 -1
- package/src/functions/wirings/queue/serialize-queue-types.ts +1 -1
- package/src/functions/wirings/rpc/pikku-command-rpc-map.ts +7 -4
- package/src/functions/wirings/rpc/pikku-command-rpc.ts +25 -2
- package/src/functions/wirings/rpc/serialize-public-rpc.ts +11 -4
- package/src/functions/wirings/rpc/serialize-remote-rpc.ts +4 -1
- package/src/functions/wirings/rpc/serialize-rpc-wrapper.ts +3 -3
- package/src/functions/wirings/rpc/serialize-typed-rpc-map.ts +74 -8
- package/src/functions/wirings/scheduler/pikku-command-scheduler.ts +51 -4
- package/src/functions/wirings/scheduler/serialize-scheduler-meta.ts +20 -1
- package/src/functions/wirings/scheduler/serialize-scheduler-types.ts +1 -1
- package/src/functions/wirings/services/pikku-command-service-metadata.ts +25 -0
- package/src/functions/wirings/workflow/pikku-command-workflow.ts +114 -19
- package/src/functions/wirings/workflow/serialize-workflow-map.ts +38 -40
- package/src/functions/wirings/workflow/serialize-workflow-meta.ts +68 -11
- package/src/functions/wirings/workflow/serialize-workflow-registration.ts +83 -0
- package/src/functions/wirings/workflow/serialize-workflow-types.ts +311 -49
- package/src/functions/wirings/workflow/serialize-workflow-workers.ts +16 -29
- package/src/middleware/log-command-info-and-time.ts +3 -6
- package/src/services/cli-logger-forwarder.service.ts +1 -1
- package/src/services.ts +23 -16
- package/src/utils/check-required-types.ts +4 -7
- package/src/utils/command-summary.ts +4 -0
- package/src/utils/custom-types-generator.ts +15 -15
- package/src/utils/generate-bootstrap-file.ts +1 -1
- package/src/utils/pikku-cli-config.ts +105 -5
- package/src/utils/pikku-files-and-methods.ts +10 -13
- package/src/utils/schema-generator.ts +185 -22
- package/src/utils/strip-verbose-meta.ts +254 -0
- package/types/application-types.d.ts +1 -1
- package/types/config.d.ts +47 -2
- package/.pikku/function/pikku-functions-meta.min.gen.ts +0 -211
- package/.pikku/function/pikku-functions.gen.ts +0 -84
- package/.pikku/rpc/pikku-rpc-wirings-meta.internal.gen.ts +0 -47
- package/dist/.pikku/function/pikku-functions-meta.min.gen.d.ts +0 -1
- package/dist/.pikku/function/pikku-functions-meta.min.gen.js +0 -211
- package/dist/.pikku/function/pikku-functions.gen.d.ts +0 -1
- package/dist/.pikku/function/pikku-functions.gen.js +0 -83
- package/dist/.pikku/rpc/pikku-rpc-wirings-meta.internal.gen.d.ts +0 -1
- package/dist/.pikku/rpc/pikku-rpc-wirings-meta.internal.gen.js +0 -47
- package/dist/.pikku/schemas/schemas/PikkuRemoteInternalRPCInput.schema.json +0 -1
- package/dist/src/functions/wirings/workflow/pikku-command-workflow-map.d.ts +0 -1
- package/dist/src/functions/wirings/workflow/pikku-command-workflow-map.js +0 -12
- package/dist/src/functions/wirings/workflow/pikku-command-workflow-types.d.ts +0 -1
- package/dist/src/functions/wirings/workflow/pikku-command-workflow-types.js +0 -11
- package/src/functions/wirings/workflow/pikku-command-workflow-map.ts +0 -24
- package/src/functions/wirings/workflow/pikku-command-workflow-types.ts +0 -22
|
@@ -2,13 +2,27 @@ 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 { serializeQueueMeta, serializeQueueMetaTS, } from './serialize-queue-meta.js';
|
|
6
|
+
import { getFileImportRelativePath } from '../../../utils/file-import-path.js';
|
|
7
|
+
import { stripVerboseFields, hasVerboseFields, } from '../../../utils/strip-verbose-meta.js';
|
|
6
8
|
export const pikkuQueue = pikkuSessionlessFunc({
|
|
7
9
|
func: async ({ logger, config, getInspectorState }) => {
|
|
8
10
|
const visitState = await getInspectorState();
|
|
9
|
-
const { queueWorkersWiringFile, queueWorkersWiringMetaFile, packageMappings, } = config;
|
|
11
|
+
const { queueWorkersWiringFile, queueWorkersWiringMetaFile, queueWorkersWiringMetaJsonFile, packageMappings, schema, } = config;
|
|
10
12
|
const { queueWorkers } = visitState;
|
|
11
|
-
|
|
13
|
+
const fullMeta = serializeQueueMeta(queueWorkers.meta);
|
|
14
|
+
// Write minimal JSON file (runtime-only fields)
|
|
15
|
+
const minimalMeta = stripVerboseFields(fullMeta);
|
|
16
|
+
await writeFileInDir(logger, queueWorkersWiringMetaJsonFile, JSON.stringify(minimalMeta, null, 2));
|
|
17
|
+
// Write verbose JSON only if it has additional fields
|
|
18
|
+
if (hasVerboseFields(fullMeta)) {
|
|
19
|
+
const verbosePath = queueWorkersWiringMetaJsonFile.replace(/\.gen\.json$/, '-verbose.gen.json');
|
|
20
|
+
await writeFileInDir(logger, verbosePath, JSON.stringify(fullMeta, null, 2));
|
|
21
|
+
}
|
|
22
|
+
// Calculate relative path from TS file to JSON file
|
|
23
|
+
const jsonImportPath = getFileImportRelativePath(queueWorkersWiringMetaFile, queueWorkersWiringMetaJsonFile, packageMappings);
|
|
24
|
+
// Write TypeScript file that imports JSON
|
|
25
|
+
await writeFileInDir(logger, queueWorkersWiringMetaFile, serializeQueueMetaTS(jsonImportPath, schema?.supportsImportAttributes ?? false));
|
|
12
26
|
await writeFileInDir(logger, queueWorkersWiringFile, serializeFileImports('addQueueWorkers', queueWorkersWiringFile, queueWorkers.files, packageMappings));
|
|
13
27
|
return true;
|
|
14
28
|
},
|
|
@@ -2,21 +2,19 @@ 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 { serializeQueueMeta, serializeQueueMetaTS, } from './serialize-queue-meta.js';
|
|
6
|
+
import { getFileImportRelativePath } from '../../../utils/file-import-path.js';
|
|
6
7
|
export const pikkuQueue = pikkuSessionlessFunc({
|
|
7
8
|
func: async ({ logger, config, getInspectorState }) => {
|
|
8
9
|
const visitState = await getInspectorState();
|
|
9
|
-
const { queueWorkersWiringFile, queueWorkersWiringMetaFile, packageMappings, } = config;
|
|
10
|
+
const { queueWorkersWiringFile, queueWorkersWiringMetaFile, queueWorkersWiringMetaJsonFile, packageMappings, schema, } = config;
|
|
10
11
|
const { queueWorkers } = visitState;
|
|
11
|
-
//
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
};
|
|
18
|
-
}
|
|
19
|
-
await writeFileInDir(logger, queueWorkersWiringMetaFile, serializeQueueMeta(queueMeta));
|
|
12
|
+
// Write JSON file
|
|
13
|
+
await writeFileInDir(logger, queueWorkersWiringMetaJsonFile, JSON.stringify(serializeQueueMeta(queueWorkers.meta), null, 2));
|
|
14
|
+
// Calculate relative path from TS file to JSON file
|
|
15
|
+
const jsonImportPath = getFileImportRelativePath(queueWorkersWiringMetaFile, queueWorkersWiringMetaJsonFile, packageMappings);
|
|
16
|
+
// Write TypeScript file that imports JSON
|
|
17
|
+
await writeFileInDir(logger, queueWorkersWiringMetaFile, serializeQueueMetaTS(jsonImportPath, schema?.supportsImportAttributes ?? false));
|
|
20
18
|
await writeFileInDir(logger, queueWorkersWiringFile, serializeFileImports('addQueueWorkers', queueWorkersWiringFile, queueWorkers.files, packageMappings));
|
|
21
19
|
return true;
|
|
22
20
|
},
|
|
@@ -8,7 +8,7 @@ export const serializeQueueMap = (relativeToPath, packageMappings, typesMap, fun
|
|
|
8
8
|
return `/**
|
|
9
9
|
* This provides the structure needed for typescript to be aware of Queue workers and their input/output types
|
|
10
10
|
*/
|
|
11
|
-
|
|
11
|
+
|
|
12
12
|
${serializedImportMap}
|
|
13
13
|
${serializedCustomTypes}
|
|
14
14
|
|
|
@@ -57,8 +57,25 @@ function generateQueues(queueWorkersMeta, functionsMeta, typesMap, requiredTypes
|
|
|
57
57
|
const input = functionMeta.inputs ? functionMeta.inputs[0] : undefined;
|
|
58
58
|
const output = functionMeta.outputs ? functionMeta.outputs[0] : undefined;
|
|
59
59
|
// Store the input and output types for QueueHandler
|
|
60
|
-
|
|
61
|
-
|
|
60
|
+
// For zod-derived schemas, the type might not be in typesMap, so use the schema name directly
|
|
61
|
+
let inputType = 'null';
|
|
62
|
+
if (input) {
|
|
63
|
+
try {
|
|
64
|
+
inputType = typesMap.getTypeMeta(input).uniqueName;
|
|
65
|
+
}
|
|
66
|
+
catch {
|
|
67
|
+
inputType = input;
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
let outputType = 'null';
|
|
71
|
+
if (output) {
|
|
72
|
+
try {
|
|
73
|
+
outputType = typesMap.getTypeMeta(output).uniqueName;
|
|
74
|
+
}
|
|
75
|
+
catch {
|
|
76
|
+
outputType = output;
|
|
77
|
+
}
|
|
78
|
+
}
|
|
62
79
|
requiredTypes.add(inputType);
|
|
63
80
|
requiredTypes.add(outputType);
|
|
64
81
|
// Add Queue entry
|
|
@@ -1,2 +1,3 @@
|
|
|
1
1
|
import { QueueWorkersMeta } from '@pikku/core/queue';
|
|
2
|
-
export declare const serializeQueueMeta: (queueWorkersMeta: QueueWorkersMeta) =>
|
|
2
|
+
export declare const serializeQueueMeta: (queueWorkersMeta: QueueWorkersMeta) => QueueWorkersMeta;
|
|
3
|
+
export declare const serializeQueueMetaTS: (jsonImportPath: string, supportsImportAttributes: boolean) => string;
|
|
@@ -1,6 +1,15 @@
|
|
|
1
1
|
export const serializeQueueMeta = (queueWorkersMeta) => {
|
|
2
|
+
return queueWorkersMeta;
|
|
3
|
+
};
|
|
4
|
+
export const serializeQueueMetaTS = (jsonImportPath, supportsImportAttributes) => {
|
|
5
|
+
const importStatement = supportsImportAttributes
|
|
6
|
+
? `import metaData from '${jsonImportPath}' with { type: 'json' }`
|
|
7
|
+
: `import metaData from '${jsonImportPath}'`;
|
|
2
8
|
const serializedOutput = [];
|
|
3
9
|
serializedOutput.push("import { pikkuState } from '@pikku/core'");
|
|
4
|
-
serializedOutput.push(
|
|
10
|
+
serializedOutput.push("import { QueueWorkersMeta } from '@pikku/core/queue'");
|
|
11
|
+
serializedOutput.push(importStatement);
|
|
12
|
+
serializedOutput.push('');
|
|
13
|
+
serializedOutput.push("pikkuState(null, 'queue', 'meta', metaData as QueueWorkersMeta)");
|
|
5
14
|
return serializedOutput.join('\n');
|
|
6
15
|
};
|
|
@@ -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.
|
|
@@ -5,8 +5,8 @@ import { serializeTypedRPCMap } from './serialize-typed-rpc-map.js';
|
|
|
5
5
|
export const pikkuRPCInternalMap = pikkuSessionlessFunc({
|
|
6
6
|
func: async ({ logger, config, getInspectorState }) => {
|
|
7
7
|
const { functions, rpc } = await getInspectorState();
|
|
8
|
-
const { rpcInternalMapDeclarationFile, packageMappings } = config;
|
|
9
|
-
const content = serializeTypedRPCMap(rpcInternalMapDeclarationFile, packageMappings, functions.typesMap, functions.meta, rpc.internalMeta);
|
|
8
|
+
const { rpcInternalMapDeclarationFile, packageMappings, externalPackages } = config;
|
|
9
|
+
const content = serializeTypedRPCMap(rpcInternalMapDeclarationFile, packageMappings, functions.typesMap, functions.meta, rpc.internalMeta, externalPackages);
|
|
10
10
|
await writeFileInDir(logger, rpcInternalMapDeclarationFile, content);
|
|
11
11
|
},
|
|
12
12
|
middleware: [
|
|
@@ -19,8 +19,8 @@ export const pikkuRPCInternalMap = pikkuSessionlessFunc({
|
|
|
19
19
|
export const pikkuRPCExposedMap = pikkuSessionlessFunc({
|
|
20
20
|
func: async ({ logger, config, getInspectorState }) => {
|
|
21
21
|
const { functions, rpc } = await getInspectorState();
|
|
22
|
-
const { rpcMapDeclarationFile, packageMappings } = config;
|
|
23
|
-
const content = serializeTypedRPCMap(rpcMapDeclarationFile, packageMappings, functions.typesMap, functions.meta, rpc.exposedMeta);
|
|
22
|
+
const { rpcMapDeclarationFile, packageMappings, externalPackages } = config;
|
|
23
|
+
const content = serializeTypedRPCMap(rpcMapDeclarationFile, packageMappings, functions.typesMap, functions.meta, rpc.exposedMeta, externalPackages);
|
|
24
24
|
await writeFileInDir(logger, rpcMapDeclarationFile, content);
|
|
25
25
|
},
|
|
26
26
|
middleware: [
|
|
@@ -1,12 +1,19 @@
|
|
|
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
|
export const pikkuRPC = pikkuSessionlessFunc({
|
|
5
6
|
func: async ({ logger, config, getInspectorState }) => {
|
|
6
7
|
const { rpc } = await getInspectorState();
|
|
7
|
-
const { rpcInternalWiringMetaFile } = config;
|
|
8
|
+
const { rpcInternalWiringMetaFile, rpcInternalWiringMetaJsonFile, packageMappings, schema, } = config;
|
|
8
9
|
if (rpc.internalFiles.size > 0) {
|
|
9
|
-
await writeFileInDir(logger,
|
|
10
|
+
await writeFileInDir(logger, rpcInternalWiringMetaJsonFile, JSON.stringify(rpc.internalMeta, null, 2));
|
|
11
|
+
const jsonImportPath = getFileImportRelativePath(rpcInternalWiringMetaFile, rpcInternalWiringMetaJsonFile, packageMappings);
|
|
12
|
+
const supportsImportAttributes = schema?.supportsImportAttributes ?? false;
|
|
13
|
+
const importStatement = supportsImportAttributes
|
|
14
|
+
? `import metaData from '${jsonImportPath}' with { type: 'json' }`
|
|
15
|
+
: `import metaData from '${jsonImportPath}'`;
|
|
16
|
+
await writeFileInDir(logger, rpcInternalWiringMetaFile, `import { pikkuState } from '@pikku/core'\n${importStatement}\npikkuState(null, 'rpc', 'meta', metaData as Record<string, string>)`);
|
|
10
17
|
return true;
|
|
11
18
|
}
|
|
12
19
|
return false;
|
|
@@ -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
|
-
{
|
|
16
|
+
{ rpcName: string, data?: any },
|
|
17
17
|
any
|
|
18
18
|
>({
|
|
19
|
-
func: async ({
|
|
20
|
-
return await (rpc.invokeExposed as any)(
|
|
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:
|
|
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
|
})
|
|
@@ -11,12 +11,15 @@ import { pikkuSessionlessFunc, wireQueueWorker } from '${pathToPikkuTypes}'
|
|
|
11
11
|
/**
|
|
12
12
|
* Generic remote RPC worker that invokes any internal RPC by name
|
|
13
13
|
* This is used for executing internal RPCs via a queue or HTTP (e.g., scheduled tasks, background jobs, internal services)
|
|
14
|
+
*
|
|
15
|
+
* TODO: Security risk - this allows any RPC to be invoked by name. Should validate
|
|
16
|
+
* that rpcName is in an allowlist of permitted internal RPCs to prevent unauthorized access.
|
|
14
17
|
*/
|
|
15
18
|
export const pikkuRemoteInternalRPC = pikkuSessionlessFunc<
|
|
16
19
|
{ rpcName: string, data?: any },
|
|
17
20
|
any
|
|
18
21
|
>({
|
|
19
|
-
func: async (
|
|
22
|
+
func: async (_services, { rpcName, data }, { rpc }) => {
|
|
20
23
|
return await (rpc.invoke as any)(rpcName, data)
|
|
21
24
|
},
|
|
22
25
|
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
|
|
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 (
|
|
62
|
-
return await this.pikkuFetch.post(
|
|
61
|
+
invoke: RPCInvoke = async (rpcName, data) => {
|
|
62
|
+
return await this.pikkuFetch.post(\`/rpc/\${rpcName}\` as any, { rpcName: String(rpcName), data }) as any
|
|
63
63
|
}
|
|
64
64
|
}
|
|
65
65
|
|
|
@@ -1,3 +1,3 @@
|
|
|
1
1
|
import { TypesMap } from '@pikku/inspector';
|
|
2
2
|
import { FunctionsMeta } from '@pikku/core';
|
|
3
|
-
export declare const serializeTypedRPCMap: (relativeToPath: string, packageMappings: Record<string, string>, typesMap: TypesMap, functionsMeta: FunctionsMeta, rpcMeta: Record<string, string>) => string;
|
|
3
|
+
export declare const serializeTypedRPCMap: (relativeToPath: string, packageMappings: Record<string, string>, typesMap: TypesMap, functionsMeta: FunctionsMeta, rpcMeta: Record<string, string>, externalPackages?: Record<string, string>) => string;
|
|
@@ -1,14 +1,16 @@
|
|
|
1
1
|
import { serializeImportMap } from '../../../utils/serialize-import-map.js';
|
|
2
2
|
import { generateCustomTypes } from '../../../utils/custom-types-generator.js';
|
|
3
|
-
export const serializeTypedRPCMap = (relativeToPath, packageMappings, typesMap, functionsMeta, rpcMeta) => {
|
|
3
|
+
export const serializeTypedRPCMap = (relativeToPath, packageMappings, typesMap, functionsMeta, rpcMeta, externalPackages) => {
|
|
4
4
|
const requiredTypes = new Set();
|
|
5
5
|
const serializedCustomTypes = generateCustomTypes(typesMap, requiredTypes);
|
|
6
6
|
const serializedRPCs = generateRPCs(rpcMeta, functionsMeta, typesMap, requiredTypes);
|
|
7
7
|
const serializedImportMap = serializeImportMap(relativeToPath, packageMappings, typesMap, requiredTypes);
|
|
8
|
+
const externalPackageImports = generateExternalPackageImports(externalPackages, relativeToPath);
|
|
9
|
+
const mergedRPCMap = generateMergedRPCMap(externalPackages);
|
|
8
10
|
return `/**
|
|
9
11
|
* This provides the structure needed for typescript to be aware of RPCs and their return types
|
|
10
12
|
*/
|
|
11
|
-
|
|
13
|
+
|
|
12
14
|
${serializedImportMap}
|
|
13
15
|
${serializedCustomTypes}
|
|
14
16
|
|
|
@@ -18,14 +20,16 @@ interface RPCHandler<I, O> {
|
|
|
18
20
|
}
|
|
19
21
|
|
|
20
22
|
${serializedRPCs}
|
|
23
|
+
${externalPackageImports}
|
|
24
|
+
${mergedRPCMap}
|
|
21
25
|
|
|
22
|
-
export type RPCInvoke = <Name extends keyof
|
|
26
|
+
export type RPCInvoke = <Name extends keyof FlattenedRPCMap>(
|
|
23
27
|
name: Name,
|
|
24
|
-
data:
|
|
28
|
+
data: FlattenedRPCMap[Name]['input'],
|
|
25
29
|
options?: {
|
|
26
30
|
location?: 'local' | 'remote' | 'auto'
|
|
27
31
|
}
|
|
28
|
-
) => Promise<
|
|
32
|
+
) => Promise<FlattenedRPCMap[Name]['output']>
|
|
29
33
|
|
|
30
34
|
// Import WorkflowMap for workflow typing
|
|
31
35
|
import type { WorkflowMap } from '../workflow/pikku-workflow-map.gen.js'
|
|
@@ -42,6 +46,46 @@ export type TypedPikkuRPC = {
|
|
|
42
46
|
}
|
|
43
47
|
`;
|
|
44
48
|
};
|
|
49
|
+
function generateExternalPackageImports(externalPackages, relativeToPath) {
|
|
50
|
+
if (!externalPackages || Object.keys(externalPackages).length === 0) {
|
|
51
|
+
return '';
|
|
52
|
+
}
|
|
53
|
+
let imports = '\n// External package RPC maps\n';
|
|
54
|
+
for (const [namespace, packageName] of Object.entries(externalPackages)) {
|
|
55
|
+
// Import the RPCMap from each external package's internal RPC map
|
|
56
|
+
// Use .js extension - package.json exports will resolve to .d.ts for types
|
|
57
|
+
imports += `import type { RPCMap as ${toPascalCase(namespace)}RPCMap } from '${packageName}/.pikku/rpc/pikku-rpc-wirings-map.internal.gen.js'\n`;
|
|
58
|
+
}
|
|
59
|
+
return imports;
|
|
60
|
+
}
|
|
61
|
+
function generateMergedRPCMap(externalPackages) {
|
|
62
|
+
if (!externalPackages || Object.keys(externalPackages).length === 0) {
|
|
63
|
+
return `
|
|
64
|
+
// No external packages, use RPCMap directly
|
|
65
|
+
export type FlattenedRPCMap = RPCMap
|
|
66
|
+
`;
|
|
67
|
+
}
|
|
68
|
+
// TypeScript utility to flatten namespaced RPC maps
|
|
69
|
+
const utilityTypes = `
|
|
70
|
+
// Utility type to prefix keys with namespace
|
|
71
|
+
type PrefixKeys<T, Prefix extends string> = {
|
|
72
|
+
[K in keyof T as \`\${Prefix}:\${string & K}\`]: T[K]
|
|
73
|
+
}
|
|
74
|
+
|
|
75
|
+
// Merge all RPC maps with namespace prefixes
|
|
76
|
+
export type FlattenedRPCMap =
|
|
77
|
+
RPCMap${Object.keys(externalPackages)
|
|
78
|
+
.map((namespace) => ` & PrefixKeys<${toPascalCase(namespace)}RPCMap, '${namespace}'>`)
|
|
79
|
+
.join('')}
|
|
80
|
+
`;
|
|
81
|
+
return utilityTypes;
|
|
82
|
+
}
|
|
83
|
+
function toPascalCase(str) {
|
|
84
|
+
return str
|
|
85
|
+
.split(/[-_]/)
|
|
86
|
+
.map((word) => word.charAt(0).toUpperCase() + word.slice(1).toLowerCase())
|
|
87
|
+
.join('');
|
|
88
|
+
}
|
|
45
89
|
function generateRPCs(rpcMeta, functionsMeta, typesMap, requiredTypes) {
|
|
46
90
|
// Initialize an object to collect RPCs
|
|
47
91
|
const rpcsObj = {};
|
|
@@ -54,14 +98,15 @@ function generateRPCs(rpcMeta, functionsMeta, typesMap, requiredTypes) {
|
|
|
54
98
|
const input = functionMeta.inputs ? functionMeta.inputs[0] : undefined;
|
|
55
99
|
const output = functionMeta.outputs ? functionMeta.outputs[0] : undefined;
|
|
56
100
|
// Store the input and output types for RPCHandler
|
|
57
|
-
//
|
|
101
|
+
// For zod-derived schemas, the type might not be in typesMap, so use the schema name directly
|
|
58
102
|
let inputType = 'null';
|
|
59
103
|
if (input) {
|
|
60
104
|
try {
|
|
61
105
|
inputType = typesMap.getTypeMeta(input).uniqueName;
|
|
62
106
|
}
|
|
63
107
|
catch {
|
|
64
|
-
|
|
108
|
+
// Type not in typesMap - use the name directly (e.g., zod-derived types)
|
|
109
|
+
inputType = input;
|
|
65
110
|
}
|
|
66
111
|
}
|
|
67
112
|
let outputType = 'null';
|
|
@@ -70,7 +115,8 @@ function generateRPCs(rpcMeta, functionsMeta, typesMap, requiredTypes) {
|
|
|
70
115
|
outputType = typesMap.getTypeMeta(output).uniqueName;
|
|
71
116
|
}
|
|
72
117
|
catch {
|
|
73
|
-
|
|
118
|
+
// Type not in typesMap - use the name directly (e.g., zod-derived types)
|
|
119
|
+
outputType = output;
|
|
74
120
|
}
|
|
75
121
|
}
|
|
76
122
|
requiredTypes.add(inputType);
|
|
@@ -2,13 +2,25 @@ 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 { serializeSchedulerMeta, serializeSchedulerMetaTS, } from './serialize-scheduler-meta.js';
|
|
6
|
+
import { getFileImportRelativePath } from '../../../utils/file-import-path.js';
|
|
7
|
+
import { stripVerboseFields, hasVerboseFields, } from '../../../utils/strip-verbose-meta.js';
|
|
6
8
|
export const pikkuScheduler = pikkuSessionlessFunc({
|
|
7
9
|
func: async ({ logger, config, getInspectorState }) => {
|
|
8
10
|
const visitState = await getInspectorState();
|
|
9
|
-
const { schedulersWiringFile, schedulersWiringMetaFile, packageMappings } = config;
|
|
11
|
+
const { schedulersWiringFile, schedulersWiringMetaFile, schedulersWiringMetaJsonFile, packageMappings, schema, } = config;
|
|
10
12
|
const { scheduledTasks } = visitState;
|
|
11
|
-
|
|
13
|
+
const fullMeta = serializeSchedulerMeta(scheduledTasks.meta);
|
|
14
|
+
// Write minimal JSON (runtime-only fields)
|
|
15
|
+
const minimalMeta = stripVerboseFields(fullMeta);
|
|
16
|
+
await writeFileInDir(logger, schedulersWiringMetaJsonFile, JSON.stringify(minimalMeta, null, 2));
|
|
17
|
+
// Write verbose JSON only if it has additional fields
|
|
18
|
+
if (hasVerboseFields(fullMeta)) {
|
|
19
|
+
const verbosePath = schedulersWiringMetaJsonFile.replace(/\.gen\.json$/, '-verbose.gen.json');
|
|
20
|
+
await writeFileInDir(logger, verbosePath, JSON.stringify(fullMeta, null, 2));
|
|
21
|
+
}
|
|
22
|
+
const jsonImportPath = getFileImportRelativePath(schedulersWiringMetaFile, schedulersWiringMetaJsonFile, packageMappings);
|
|
23
|
+
await writeFileInDir(logger, schedulersWiringMetaFile, serializeSchedulerMetaTS(scheduledTasks.meta, jsonImportPath, schema?.supportsImportAttributes ?? false));
|
|
12
24
|
await writeFileInDir(logger, schedulersWiringFile, serializeFileImports('addScheduledTasks', schedulersWiringFile, scheduledTasks.files, packageMappings));
|
|
13
25
|
return true;
|
|
14
26
|
},
|
|
@@ -1,2 +1,3 @@
|
|
|
1
1
|
import { ScheduledTasksMeta } from '@pikku/core/scheduler';
|
|
2
|
-
export declare const serializeSchedulerMeta: (scheduledTasksMeta: ScheduledTasksMeta) =>
|
|
2
|
+
export declare const serializeSchedulerMeta: (scheduledTasksMeta: ScheduledTasksMeta) => ScheduledTasksMeta;
|
|
3
|
+
export declare const serializeSchedulerMetaTS: (scheduledTasksMeta: ScheduledTasksMeta, jsonImportPath: string, supportsImportAttributes: any) => string;
|
|
@@ -1,7 +1,17 @@
|
|
|
1
1
|
export const serializeSchedulerMeta = (scheduledTasksMeta) => {
|
|
2
|
+
return scheduledTasksMeta;
|
|
3
|
+
};
|
|
4
|
+
export const serializeSchedulerMetaTS = (scheduledTasksMeta, jsonImportPath, supportsImportAttributes) => {
|
|
5
|
+
const importStatement = supportsImportAttributes
|
|
6
|
+
? `import metaData from '${jsonImportPath}' with { type: 'json' }`
|
|
7
|
+
: `import metaData from '${jsonImportPath}'`;
|
|
2
8
|
const serializedOutput = [];
|
|
3
9
|
serializedOutput.push("import { pikkuState } from '@pikku/core'");
|
|
4
|
-
serializedOutput.push(
|
|
10
|
+
serializedOutput.push("import { ScheduledTasksMeta } from '@pikku/core/scheduler'");
|
|
11
|
+
serializedOutput.push(importStatement);
|
|
12
|
+
serializedOutput.push('');
|
|
13
|
+
serializedOutput.push("pikkuState(null, 'scheduler', 'meta', metaData as ScheduledTasksMeta)");
|
|
14
|
+
serializedOutput.push('');
|
|
5
15
|
const scheduledTasksMetaValues = Object.values(scheduledTasksMeta);
|
|
6
16
|
if (scheduledTasksMetaValues.length > 0) {
|
|
7
17
|
serializedOutput.push(`export type ScheduledTaskNames = '${scheduledTasksMetaValues.map((s) => s.name).join("' | '")}'`);
|
|
@@ -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 @@
|
|
|
1
|
+
export declare const pikkuServiceMetadata: any;
|
|
@@ -0,0 +1,22 @@
|
|
|
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
|
+
export const pikkuServiceMetadata = pikkuSessionlessFunc({
|
|
5
|
+
func: async ({ logger, config, getInspectorState }) => {
|
|
6
|
+
const state = await getInspectorState();
|
|
7
|
+
// Only write service metadata if there are services to document
|
|
8
|
+
if (state.serviceMetadata && state.serviceMetadata.length > 0) {
|
|
9
|
+
writeAllServiceMetadata(state.serviceMetadata, config.outDir);
|
|
10
|
+
logger.debug(`• Wrote ${state.serviceMetadata.length} service metadata files`);
|
|
11
|
+
}
|
|
12
|
+
else {
|
|
13
|
+
logger.debug('• No service metadata to write');
|
|
14
|
+
}
|
|
15
|
+
},
|
|
16
|
+
middleware: [
|
|
17
|
+
logCommandInfoAndTime({
|
|
18
|
+
commandStart: 'Generating service metadata',
|
|
19
|
+
commandEnd: 'Generated service metadata',
|
|
20
|
+
}),
|
|
21
|
+
],
|
|
22
|
+
});
|
|
@@ -1,22 +1,29 @@
|
|
|
1
1
|
import { pikkuSessionlessFunc } from '../../../../.pikku/pikku-types.gen.js';
|
|
2
|
-
import { ErrorCode } from '@pikku/inspector';
|
|
3
|
-
import { serializeFileImports } from '../../../utils/file-imports-serializer.js';
|
|
2
|
+
import { convertDslToGraph, ErrorCode } from '@pikku/inspector';
|
|
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';
|
|
7
5
|
import { serializeWorkflowTypes } from './serialize-workflow-types.js';
|
|
6
|
+
import { serializeWorkflowRegistration } from './serialize-workflow-registration.js';
|
|
8
7
|
import { serializeWorkflowMap } from './serialize-workflow-map.js';
|
|
8
|
+
import { serializeWorkflowMeta } from './serialize-workflow-meta.js';
|
|
9
9
|
import { serializeWorkflowWorkers } from './serialize-workflow-workers.js';
|
|
10
10
|
import { getFileImportRelativePath } from '../../../utils/file-import-path.js';
|
|
11
|
+
import { stripVerboseFields, hasVerboseFields, } from '../../../utils/strip-verbose-meta.js';
|
|
11
12
|
import { join } from 'path';
|
|
12
13
|
export const pikkuWorkflow = pikkuSessionlessFunc({
|
|
13
14
|
func: async ({ logger, config, getInspectorState }) => {
|
|
14
15
|
const visitState = await getInspectorState();
|
|
15
|
-
const { workflowsWiringFile, workflowsWiringMetaFile, workflowMapDeclarationFile, workflowTypesFile, functionTypesFile, typesDeclarationFile, packageMappings, } = config;
|
|
16
|
+
const { workflowsWiringFile, workflowsWiringMetaFile, workflowMetaDir, workflowMapDeclarationFile, workflowTypesFile, functionTypesFile, typesDeclarationFile, packageMappings, schema, } = config;
|
|
16
17
|
const { workflows, functions: functionState } = visitState;
|
|
17
18
|
const { typesMap } = functionState;
|
|
18
|
-
//
|
|
19
|
-
const
|
|
19
|
+
// Get all workflow names (both DSL and graph-based)
|
|
20
|
+
const dslWorkflowNames = Object.keys(workflows.meta);
|
|
21
|
+
const graphWorkflowNames = Object.keys(workflows.graphMeta);
|
|
22
|
+
const allWorkflowNames = [
|
|
23
|
+
...new Set([...dslWorkflowNames, ...graphWorkflowNames]),
|
|
24
|
+
];
|
|
25
|
+
const hasWorkflows = allWorkflowNames.length > 0;
|
|
26
|
+
// Validate that workflowService is configured if workflows are defined
|
|
20
27
|
if (hasWorkflows) {
|
|
21
28
|
const hasWorkflowState = visitState.serviceAggregation.allSingletonServices.includes('workflowService');
|
|
22
29
|
if (!hasWorkflowState) {
|
|
@@ -24,15 +31,50 @@ export const pikkuWorkflow = pikkuSessionlessFunc({
|
|
|
24
31
|
throw new Error('WorkflowState service not configured but workflows are defined');
|
|
25
32
|
}
|
|
26
33
|
}
|
|
27
|
-
//
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
34
|
+
// Generate individual JSON files for each workflow (convert DSL to graph format)
|
|
35
|
+
if (hasWorkflows && workflowMetaDir) {
|
|
36
|
+
// Write individual JSON files for DSL workflows
|
|
37
|
+
const dslMeta = workflows.meta;
|
|
38
|
+
for (const [name, meta] of Object.entries(dslMeta)) {
|
|
39
|
+
const graphMeta = convertDslToGraph(name, meta);
|
|
40
|
+
// Write minimal version (runtime-only fields)
|
|
41
|
+
const minimalMeta = stripVerboseFields(graphMeta);
|
|
42
|
+
const minimalPath = join(workflowMetaDir, `${name}.gen.json`);
|
|
43
|
+
await writeFileInDir(logger, minimalPath, JSON.stringify(minimalMeta, null, 2), { ignoreModifyComment: true });
|
|
44
|
+
// Write verbose version only if it has additional fields
|
|
45
|
+
if (hasVerboseFields(graphMeta)) {
|
|
46
|
+
const verbosePath = join(workflowMetaDir, `${name}-verbose.gen.json`);
|
|
47
|
+
await writeFileInDir(logger, verbosePath, JSON.stringify(graphMeta, null, 2), { ignoreModifyComment: true });
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
// Write individual JSON files for graph workflows
|
|
51
|
+
for (const [name, graphMeta] of Object.entries(workflows.graphMeta)) {
|
|
52
|
+
// Write minimal version (runtime-only fields)
|
|
53
|
+
const minimalMeta = stripVerboseFields(graphMeta);
|
|
54
|
+
const minimalPath = join(workflowMetaDir, `${name}.gen.json`);
|
|
55
|
+
await writeFileInDir(logger, minimalPath, JSON.stringify(minimalMeta, null, 2), { ignoreModifyComment: true });
|
|
56
|
+
// Write verbose version only if it has additional fields
|
|
57
|
+
if (hasVerboseFields(graphMeta)) {
|
|
58
|
+
const verbosePath = join(workflowMetaDir, `${name}-verbose.gen.json`);
|
|
59
|
+
await writeFileInDir(logger, verbosePath, JSON.stringify(graphMeta, null, 2), { ignoreModifyComment: true });
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
// Generate workflow meta aggregation file
|
|
64
|
+
if (workflowsWiringMetaFile && workflowMetaDir) {
|
|
65
|
+
await writeFileInDir(logger, workflowsWiringMetaFile, serializeWorkflowMeta(workflowsWiringMetaFile, workflowMetaDir, allWorkflowNames, packageMappings, schema?.supportsImportAttributes ?? false, config.externalPackageName));
|
|
66
|
+
}
|
|
67
|
+
// Generate workflow registration (meta + DSL workflow registrations)
|
|
68
|
+
const metaImportPath = getFileImportRelativePath(workflowsWiringFile, workflowsWiringMetaFile, packageMappings);
|
|
69
|
+
await writeFileInDir(logger, workflowsWiringFile, serializeWorkflowRegistration(workflowsWiringFile, metaImportPath, allWorkflowNames, workflows.files, workflows.graphFiles, packageMappings, config.externalPackageName));
|
|
70
|
+
// Generate workflow types (DSL + graph helpers in one file)
|
|
32
71
|
const functionTypesImportPath = getFileImportRelativePath(workflowTypesFile, functionTypesFile, packageMappings);
|
|
33
|
-
|
|
34
|
-
|
|
72
|
+
const rpcMapImportPath = getFileImportRelativePath(workflowTypesFile, config.rpcInternalMapDeclarationFile, packageMappings);
|
|
73
|
+
await writeFileInDir(logger, workflowTypesFile, serializeWorkflowTypes(functionTypesImportPath, rpcMapImportPath));
|
|
74
|
+
// Generate workflow map (I/O types for type-safe client)
|
|
75
|
+
// Always generate even if empty - RPC map imports WorkflowMap
|
|
35
76
|
await writeFileInDir(logger, workflowMapDeclarationFile, serializeWorkflowMap(workflowMapDeclarationFile, packageMappings, typesMap, functionState.meta, workflows.meta));
|
|
77
|
+
// Generate workflow workers if configured
|
|
36
78
|
if (config.workflows) {
|
|
37
79
|
if (config.workflows.singleQueue) {
|
|
38
80
|
const workflowPath = join(config.rootDir, config.workflows.path);
|
|
@@ -44,12 +86,12 @@ export const pikkuWorkflow = pikkuSessionlessFunc({
|
|
|
44
86
|
return false;
|
|
45
87
|
}
|
|
46
88
|
}
|
|
47
|
-
return
|
|
89
|
+
return hasWorkflows;
|
|
48
90
|
},
|
|
49
91
|
middleware: [
|
|
50
92
|
logCommandInfoAndTime({
|
|
51
|
-
commandStart: '
|
|
52
|
-
commandEnd: '
|
|
93
|
+
commandStart: 'Generating Workflows',
|
|
94
|
+
commandEnd: 'Generated Workflows',
|
|
53
95
|
}),
|
|
54
96
|
],
|
|
55
97
|
});
|