@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
|
@@ -0,0 +1,81 @@
|
|
|
1
|
+
import { pikkuSessionlessFunc } from '../../../../.pikku/pikku-types.gen.js'
|
|
2
|
+
import { writeFileInDir } from '../../../utils/file-writer.js'
|
|
3
|
+
import { logCommandInfoAndTime } from '../../../middleware/log-command-info-and-time.js'
|
|
4
|
+
import { serializePackageFactories } from './serialize-package.js'
|
|
5
|
+
|
|
6
|
+
export const pikkuPackage: any = pikkuSessionlessFunc<
|
|
7
|
+
void,
|
|
8
|
+
boolean | undefined
|
|
9
|
+
>({
|
|
10
|
+
func: async ({ logger, config, getInspectorState }) => {
|
|
11
|
+
const { externalPackageName, packageMappings, packageFile } = config
|
|
12
|
+
|
|
13
|
+
// Only generate for external packages
|
|
14
|
+
if (!externalPackageName) {
|
|
15
|
+
logger.info({
|
|
16
|
+
message:
|
|
17
|
+
'Skipping package factories - not an external package (externalPackageName not set)',
|
|
18
|
+
type: 'skip',
|
|
19
|
+
})
|
|
20
|
+
return false
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
if (!packageFile) {
|
|
24
|
+
logger.info({
|
|
25
|
+
message: 'Skipping package factories - packageFile not configured',
|
|
26
|
+
type: 'skip',
|
|
27
|
+
})
|
|
28
|
+
return false
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
const state = await getInspectorState()
|
|
32
|
+
const { filesAndMethods } = state
|
|
33
|
+
|
|
34
|
+
const {
|
|
35
|
+
pikkuConfigFactory,
|
|
36
|
+
singletonServicesFactory,
|
|
37
|
+
wireServicesFactory,
|
|
38
|
+
} = filesAndMethods
|
|
39
|
+
|
|
40
|
+
const content = serializePackageFactories(
|
|
41
|
+
packageFile,
|
|
42
|
+
externalPackageName,
|
|
43
|
+
pikkuConfigFactory
|
|
44
|
+
? {
|
|
45
|
+
file: pikkuConfigFactory.file,
|
|
46
|
+
variable: pikkuConfigFactory.variable,
|
|
47
|
+
}
|
|
48
|
+
: undefined,
|
|
49
|
+
singletonServicesFactory
|
|
50
|
+
? {
|
|
51
|
+
file: singletonServicesFactory.file,
|
|
52
|
+
variable: singletonServicesFactory.variable,
|
|
53
|
+
}
|
|
54
|
+
: undefined,
|
|
55
|
+
wireServicesFactory
|
|
56
|
+
? {
|
|
57
|
+
file: wireServicesFactory.file,
|
|
58
|
+
variable: wireServicesFactory.variable,
|
|
59
|
+
}
|
|
60
|
+
: undefined,
|
|
61
|
+
packageMappings
|
|
62
|
+
)
|
|
63
|
+
|
|
64
|
+
if (!content) {
|
|
65
|
+
logger.info({
|
|
66
|
+
message: 'Skipping package factories - no service factories found',
|
|
67
|
+
type: 'skip',
|
|
68
|
+
})
|
|
69
|
+
return false
|
|
70
|
+
}
|
|
71
|
+
|
|
72
|
+
await writeFileInDir(logger, packageFile, content)
|
|
73
|
+
return true
|
|
74
|
+
},
|
|
75
|
+
middleware: [
|
|
76
|
+
logCommandInfoAndTime({
|
|
77
|
+
commandStart: 'Generating package service factories',
|
|
78
|
+
commandEnd: 'Generated package service factories',
|
|
79
|
+
}),
|
|
80
|
+
],
|
|
81
|
+
})
|
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
import { getFileImportRelativePath } from '../../../utils/file-import-path.js'
|
|
2
|
+
|
|
3
|
+
export interface PackageFactoryInfo {
|
|
4
|
+
file: string
|
|
5
|
+
variable: string
|
|
6
|
+
}
|
|
7
|
+
|
|
8
|
+
export const serializePackageFactories = (
|
|
9
|
+
outputPath: string,
|
|
10
|
+
packageName: string,
|
|
11
|
+
configFactory: PackageFactoryInfo | undefined,
|
|
12
|
+
singletonServicesFactory: PackageFactoryInfo | undefined,
|
|
13
|
+
wireServicesFactory: PackageFactoryInfo | undefined,
|
|
14
|
+
packageMappings: Record<string, string> = {}
|
|
15
|
+
) => {
|
|
16
|
+
const imports: string[] = [
|
|
17
|
+
`import { addPackageServiceFactories } from '@pikku/core'`,
|
|
18
|
+
]
|
|
19
|
+
|
|
20
|
+
const factoryEntries: string[] = []
|
|
21
|
+
|
|
22
|
+
if (configFactory) {
|
|
23
|
+
const filePath = getFileImportRelativePath(
|
|
24
|
+
outputPath,
|
|
25
|
+
configFactory.file,
|
|
26
|
+
packageMappings
|
|
27
|
+
)
|
|
28
|
+
imports.push(
|
|
29
|
+
`import { ${configFactory.variable} as createConfig } from '${filePath}'`
|
|
30
|
+
)
|
|
31
|
+
factoryEntries.push(` createConfig,`)
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
if (singletonServicesFactory) {
|
|
35
|
+
const filePath = getFileImportRelativePath(
|
|
36
|
+
outputPath,
|
|
37
|
+
singletonServicesFactory.file,
|
|
38
|
+
packageMappings
|
|
39
|
+
)
|
|
40
|
+
imports.push(
|
|
41
|
+
`import { ${singletonServicesFactory.variable} as createSingletonServices } from '${filePath}'`
|
|
42
|
+
)
|
|
43
|
+
factoryEntries.push(` createSingletonServices,`)
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
if (wireServicesFactory) {
|
|
47
|
+
const filePath = getFileImportRelativePath(
|
|
48
|
+
outputPath,
|
|
49
|
+
wireServicesFactory.file,
|
|
50
|
+
packageMappings
|
|
51
|
+
)
|
|
52
|
+
imports.push(
|
|
53
|
+
`import { ${wireServicesFactory.variable} as createWireServices } from '${filePath}'`
|
|
54
|
+
)
|
|
55
|
+
factoryEntries.push(` createWireServices,`)
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
// Only generate if at least one factory is defined
|
|
59
|
+
if (factoryEntries.length === 0) {
|
|
60
|
+
return null
|
|
61
|
+
}
|
|
62
|
+
|
|
63
|
+
return `${imports.join('\n')}
|
|
64
|
+
|
|
65
|
+
addPackageServiceFactories('${packageName}', {
|
|
66
|
+
${factoryEntries.join('\n')}
|
|
67
|
+
})
|
|
68
|
+
`
|
|
69
|
+
}
|
|
@@ -17,10 +17,10 @@ export const pikkuPermissions: any = pikkuSessionlessFunc<
|
|
|
17
17
|
// Check if there are any permission group factories
|
|
18
18
|
const hasHTTPFactories = Array.from(
|
|
19
19
|
state.http.routePermissions.values()
|
|
20
|
-
).some((meta) => meta.exportName && meta.isFactory)
|
|
20
|
+
).some((meta: any) => meta.exportName && meta.isFactory)
|
|
21
21
|
const hasTagFactories = Array.from(
|
|
22
22
|
state.permissions.tagPermissions.values()
|
|
23
|
-
).some((meta) => meta.exportName && meta.isFactory)
|
|
23
|
+
).some((meta: any) => meta.exportName && meta.isFactory)
|
|
24
24
|
const hasFactories = hasHTTPFactories || hasTagFactories
|
|
25
25
|
|
|
26
26
|
// Generate permissions imports file if there are factories
|
|
@@ -2,7 +2,15 @@ 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 {
|
|
5
|
+
import {
|
|
6
|
+
serializeQueueMeta,
|
|
7
|
+
serializeQueueMetaTS,
|
|
8
|
+
} from './serialize-queue-meta.js'
|
|
9
|
+
import { getFileImportRelativePath } from '../../../utils/file-import-path.js'
|
|
10
|
+
import {
|
|
11
|
+
stripVerboseFields,
|
|
12
|
+
hasVerboseFields,
|
|
13
|
+
} from '../../../utils/strip-verbose-meta.js'
|
|
6
14
|
|
|
7
15
|
export const pikkuQueue: any = pikkuSessionlessFunc<void, boolean | undefined>({
|
|
8
16
|
func: async ({ logger, config, getInspectorState }) => {
|
|
@@ -10,15 +18,52 @@ export const pikkuQueue: any = pikkuSessionlessFunc<void, boolean | undefined>({
|
|
|
10
18
|
const {
|
|
11
19
|
queueWorkersWiringFile,
|
|
12
20
|
queueWorkersWiringMetaFile,
|
|
21
|
+
queueWorkersWiringMetaJsonFile,
|
|
13
22
|
packageMappings,
|
|
23
|
+
schema,
|
|
14
24
|
} = config
|
|
15
25
|
const { queueWorkers } = visitState
|
|
16
26
|
|
|
27
|
+
const fullMeta = serializeQueueMeta(queueWorkers.meta)
|
|
28
|
+
|
|
29
|
+
// Write minimal JSON file (runtime-only fields)
|
|
30
|
+
const minimalMeta = stripVerboseFields(fullMeta)
|
|
17
31
|
await writeFileInDir(
|
|
18
32
|
logger,
|
|
33
|
+
queueWorkersWiringMetaJsonFile,
|
|
34
|
+
JSON.stringify(minimalMeta, null, 2)
|
|
35
|
+
)
|
|
36
|
+
|
|
37
|
+
// Write verbose JSON only if it has additional fields
|
|
38
|
+
if (hasVerboseFields(fullMeta)) {
|
|
39
|
+
const verbosePath = queueWorkersWiringMetaJsonFile.replace(
|
|
40
|
+
/\.gen\.json$/,
|
|
41
|
+
'-verbose.gen.json'
|
|
42
|
+
)
|
|
43
|
+
await writeFileInDir(
|
|
44
|
+
logger,
|
|
45
|
+
verbosePath,
|
|
46
|
+
JSON.stringify(fullMeta, null, 2)
|
|
47
|
+
)
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
// Calculate relative path from TS file to JSON file
|
|
51
|
+
const jsonImportPath = getFileImportRelativePath(
|
|
19
52
|
queueWorkersWiringMetaFile,
|
|
20
|
-
|
|
53
|
+
queueWorkersWiringMetaJsonFile,
|
|
54
|
+
packageMappings
|
|
21
55
|
)
|
|
56
|
+
|
|
57
|
+
// Write TypeScript file that imports JSON
|
|
58
|
+
await writeFileInDir(
|
|
59
|
+
logger,
|
|
60
|
+
queueWorkersWiringMetaFile,
|
|
61
|
+
serializeQueueMetaTS(
|
|
62
|
+
jsonImportPath,
|
|
63
|
+
schema?.supportsImportAttributes ?? false
|
|
64
|
+
)
|
|
65
|
+
)
|
|
66
|
+
|
|
22
67
|
await writeFileInDir(
|
|
23
68
|
logger,
|
|
24
69
|
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 {
|
|
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,24 +14,36 @@ 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
|
|
|
17
|
-
//
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
23
|
+
// Write JSON file
|
|
24
|
+
await writeFileInDir(
|
|
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(
|
|
32
|
+
queueWorkersWiringMetaFile,
|
|
33
|
+
queueWorkersWiringMetaJsonFile,
|
|
34
|
+
packageMappings
|
|
35
|
+
)
|
|
25
36
|
|
|
37
|
+
// Write TypeScript file that imports JSON
|
|
26
38
|
await writeFileInDir(
|
|
27
39
|
logger,
|
|
28
40
|
queueWorkersWiringMetaFile,
|
|
29
|
-
|
|
41
|
+
serializeQueueMetaTS(
|
|
42
|
+
jsonImportPath,
|
|
43
|
+
schema?.supportsImportAttributes ?? false
|
|
44
|
+
)
|
|
30
45
|
)
|
|
46
|
+
|
|
31
47
|
await writeFileInDir(
|
|
32
48
|
logger,
|
|
33
49
|
queueWorkersWiringFile,
|
|
@@ -30,7 +30,7 @@ export const serializeQueueMap = (
|
|
|
30
30
|
return `/**
|
|
31
31
|
* This provides the structure needed for typescript to be aware of Queue workers and their input/output types
|
|
32
32
|
*/
|
|
33
|
-
|
|
33
|
+
|
|
34
34
|
${serializedImportMap}
|
|
35
35
|
${serializedCustomTypes}
|
|
36
36
|
|
|
@@ -93,8 +93,23 @@ function generateQueues(
|
|
|
93
93
|
const output = functionMeta.outputs ? functionMeta.outputs[0] : undefined
|
|
94
94
|
|
|
95
95
|
// Store the input and output types for QueueHandler
|
|
96
|
-
|
|
97
|
-
|
|
96
|
+
// For zod-derived schemas, the type might not be in typesMap, so use the schema name directly
|
|
97
|
+
let inputType = 'null'
|
|
98
|
+
if (input) {
|
|
99
|
+
try {
|
|
100
|
+
inputType = typesMap.getTypeMeta(input).uniqueName
|
|
101
|
+
} catch {
|
|
102
|
+
inputType = input
|
|
103
|
+
}
|
|
104
|
+
}
|
|
105
|
+
let outputType = 'null'
|
|
106
|
+
if (output) {
|
|
107
|
+
try {
|
|
108
|
+
outputType = typesMap.getTypeMeta(output).uniqueName
|
|
109
|
+
} catch {
|
|
110
|
+
outputType = output
|
|
111
|
+
}
|
|
112
|
+
}
|
|
98
113
|
|
|
99
114
|
requiredTypes.add(inputType)
|
|
100
115
|
requiredTypes.add(outputType)
|
|
@@ -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
|
-
|
|
21
|
+
"pikkuState(null, '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.
|
|
@@ -6,14 +6,16 @@ import { serializeTypedRPCMap } from './serialize-typed-rpc-map.js'
|
|
|
6
6
|
export const pikkuRPCInternalMap: any = pikkuSessionlessFunc<void, void>({
|
|
7
7
|
func: async ({ logger, config, getInspectorState }) => {
|
|
8
8
|
const { functions, rpc } = await getInspectorState()
|
|
9
|
-
const { rpcInternalMapDeclarationFile, packageMappings } =
|
|
9
|
+
const { rpcInternalMapDeclarationFile, packageMappings, externalPackages } =
|
|
10
|
+
config
|
|
10
11
|
|
|
11
12
|
const content = serializeTypedRPCMap(
|
|
12
13
|
rpcInternalMapDeclarationFile,
|
|
13
14
|
packageMappings,
|
|
14
15
|
functions.typesMap,
|
|
15
16
|
functions.meta,
|
|
16
|
-
rpc.internalMeta
|
|
17
|
+
rpc.internalMeta,
|
|
18
|
+
externalPackages
|
|
17
19
|
)
|
|
18
20
|
await writeFileInDir(logger, rpcInternalMapDeclarationFile, content)
|
|
19
21
|
},
|
|
@@ -28,14 +30,15 @@ export const pikkuRPCInternalMap: any = pikkuSessionlessFunc<void, void>({
|
|
|
28
30
|
export const pikkuRPCExposedMap: any = pikkuSessionlessFunc<void, void>({
|
|
29
31
|
func: async ({ logger, config, getInspectorState }) => {
|
|
30
32
|
const { functions, rpc } = await getInspectorState()
|
|
31
|
-
const { rpcMapDeclarationFile, packageMappings } = config
|
|
33
|
+
const { rpcMapDeclarationFile, packageMappings, externalPackages } = config
|
|
32
34
|
|
|
33
35
|
const content = serializeTypedRPCMap(
|
|
34
36
|
rpcMapDeclarationFile,
|
|
35
37
|
packageMappings,
|
|
36
38
|
functions.typesMap,
|
|
37
39
|
functions.meta,
|
|
38
|
-
rpc.exposedMeta
|
|
40
|
+
rpc.exposedMeta,
|
|
41
|
+
externalPackages
|
|
39
42
|
)
|
|
40
43
|
await writeFileInDir(logger, rpcMapDeclarationFile, content)
|
|
41
44
|
},
|
|
@@ -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 {
|
|
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',
|
|
37
|
+
`import { pikkuState } from '@pikku/core'\n${importStatement}\npikkuState(null, '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
|
-
{
|
|
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
|
|
|
@@ -8,7 +8,8 @@ export const serializeTypedRPCMap = (
|
|
|
8
8
|
packageMappings: Record<string, string>,
|
|
9
9
|
typesMap: TypesMap,
|
|
10
10
|
functionsMeta: FunctionsMeta,
|
|
11
|
-
rpcMeta: Record<string, string
|
|
11
|
+
rpcMeta: Record<string, string>,
|
|
12
|
+
externalPackages?: Record<string, string>
|
|
12
13
|
) => {
|
|
13
14
|
const requiredTypes = new Set<string>()
|
|
14
15
|
const serializedCustomTypes = generateCustomTypes(typesMap, requiredTypes)
|
|
@@ -26,10 +27,17 @@ export const serializeTypedRPCMap = (
|
|
|
26
27
|
requiredTypes
|
|
27
28
|
)
|
|
28
29
|
|
|
30
|
+
const externalPackageImports = generateExternalPackageImports(
|
|
31
|
+
externalPackages,
|
|
32
|
+
relativeToPath
|
|
33
|
+
)
|
|
34
|
+
|
|
35
|
+
const mergedRPCMap = generateMergedRPCMap(externalPackages)
|
|
36
|
+
|
|
29
37
|
return `/**
|
|
30
38
|
* This provides the structure needed for typescript to be aware of RPCs and their return types
|
|
31
39
|
*/
|
|
32
|
-
|
|
40
|
+
|
|
33
41
|
${serializedImportMap}
|
|
34
42
|
${serializedCustomTypes}
|
|
35
43
|
|
|
@@ -39,14 +47,16 @@ interface RPCHandler<I, O> {
|
|
|
39
47
|
}
|
|
40
48
|
|
|
41
49
|
${serializedRPCs}
|
|
50
|
+
${externalPackageImports}
|
|
51
|
+
${mergedRPCMap}
|
|
42
52
|
|
|
43
|
-
export type RPCInvoke = <Name extends keyof
|
|
53
|
+
export type RPCInvoke = <Name extends keyof FlattenedRPCMap>(
|
|
44
54
|
name: Name,
|
|
45
|
-
data:
|
|
55
|
+
data: FlattenedRPCMap[Name]['input'],
|
|
46
56
|
options?: {
|
|
47
57
|
location?: 'local' | 'remote' | 'auto'
|
|
48
58
|
}
|
|
49
|
-
) => Promise<
|
|
59
|
+
) => Promise<FlattenedRPCMap[Name]['output']>
|
|
50
60
|
|
|
51
61
|
// Import WorkflowMap for workflow typing
|
|
52
62
|
import type { WorkflowMap } from '../workflow/pikku-workflow-map.gen.js'
|
|
@@ -64,6 +74,60 @@ export type TypedPikkuRPC = {
|
|
|
64
74
|
`
|
|
65
75
|
}
|
|
66
76
|
|
|
77
|
+
function generateExternalPackageImports(
|
|
78
|
+
externalPackages: Record<string, string> | undefined,
|
|
79
|
+
relativeToPath: string
|
|
80
|
+
): string {
|
|
81
|
+
if (!externalPackages || Object.keys(externalPackages).length === 0) {
|
|
82
|
+
return ''
|
|
83
|
+
}
|
|
84
|
+
|
|
85
|
+
let imports = '\n// External package RPC maps\n'
|
|
86
|
+
for (const [namespace, packageName] of Object.entries(externalPackages)) {
|
|
87
|
+
// Import the RPCMap from each external package's internal RPC map
|
|
88
|
+
// Use .js extension - package.json exports will resolve to .d.ts for types
|
|
89
|
+
imports += `import type { RPCMap as ${toPascalCase(namespace)}RPCMap } from '${packageName}/.pikku/rpc/pikku-rpc-wirings-map.internal.gen.js'\n`
|
|
90
|
+
}
|
|
91
|
+
return imports
|
|
92
|
+
}
|
|
93
|
+
|
|
94
|
+
function generateMergedRPCMap(
|
|
95
|
+
externalPackages: Record<string, string> | undefined
|
|
96
|
+
): string {
|
|
97
|
+
if (!externalPackages || Object.keys(externalPackages).length === 0) {
|
|
98
|
+
return `
|
|
99
|
+
// No external packages, use RPCMap directly
|
|
100
|
+
export type FlattenedRPCMap = RPCMap
|
|
101
|
+
`
|
|
102
|
+
}
|
|
103
|
+
|
|
104
|
+
// TypeScript utility to flatten namespaced RPC maps
|
|
105
|
+
const utilityTypes = `
|
|
106
|
+
// Utility type to prefix keys with namespace
|
|
107
|
+
type PrefixKeys<T, Prefix extends string> = {
|
|
108
|
+
[K in keyof T as \`\${Prefix}:\${string & K}\`]: T[K]
|
|
109
|
+
}
|
|
110
|
+
|
|
111
|
+
// Merge all RPC maps with namespace prefixes
|
|
112
|
+
export type FlattenedRPCMap =
|
|
113
|
+
RPCMap${Object.keys(externalPackages)
|
|
114
|
+
.map(
|
|
115
|
+
(namespace) =>
|
|
116
|
+
` & PrefixKeys<${toPascalCase(namespace)}RPCMap, '${namespace}'>`
|
|
117
|
+
)
|
|
118
|
+
.join('')}
|
|
119
|
+
`
|
|
120
|
+
|
|
121
|
+
return utilityTypes
|
|
122
|
+
}
|
|
123
|
+
|
|
124
|
+
function toPascalCase(str: string): string {
|
|
125
|
+
return str
|
|
126
|
+
.split(/[-_]/)
|
|
127
|
+
.map((word) => word.charAt(0).toUpperCase() + word.slice(1).toLowerCase())
|
|
128
|
+
.join('')
|
|
129
|
+
}
|
|
130
|
+
|
|
67
131
|
function generateRPCs(
|
|
68
132
|
rpcMeta: Record<string, string>,
|
|
69
133
|
functionsMeta: FunctionsMeta,
|
|
@@ -86,13 +150,14 @@ function generateRPCs(
|
|
|
86
150
|
const output = functionMeta.outputs ? functionMeta.outputs[0] : undefined
|
|
87
151
|
|
|
88
152
|
// Store the input and output types for RPCHandler
|
|
89
|
-
//
|
|
153
|
+
// For zod-derived schemas, the type might not be in typesMap, so use the schema name directly
|
|
90
154
|
let inputType = 'null'
|
|
91
155
|
if (input) {
|
|
92
156
|
try {
|
|
93
157
|
inputType = typesMap.getTypeMeta(input).uniqueName
|
|
94
158
|
} catch {
|
|
95
|
-
|
|
159
|
+
// Type not in typesMap - use the name directly (e.g., zod-derived types)
|
|
160
|
+
inputType = input
|
|
96
161
|
}
|
|
97
162
|
}
|
|
98
163
|
|
|
@@ -101,7 +166,8 @@ function generateRPCs(
|
|
|
101
166
|
try {
|
|
102
167
|
outputType = typesMap.getTypeMeta(output).uniqueName
|
|
103
168
|
} catch {
|
|
104
|
-
|
|
169
|
+
// Type not in typesMap - use the name directly (e.g., zod-derived types)
|
|
170
|
+
outputType = output
|
|
105
171
|
}
|
|
106
172
|
}
|
|
107
173
|
|