@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,83 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* This file was generated by @pikku/cli@0.11.3
|
|
3
|
+
*/
|
|
4
|
+
/**
|
|
5
|
+
* Forge-specific type definitions for typed wireForgeNode and wireForgeCredential
|
|
6
|
+
*/
|
|
7
|
+
|
|
8
|
+
import { wireForgeNode as wireForgeNodeCore, wireForgeCredential as wireForgeCredentialCore } from '@pikku/core/forge-node'
|
|
9
|
+
import type { CoreForgeNode, CoreForgeCredential } from '@pikku/core/forge-node'
|
|
10
|
+
import type { FlattenedRPCMap } from '../rpc/pikku-rpc-wirings-map.internal.gen.js'
|
|
11
|
+
|
|
12
|
+
/**
|
|
13
|
+
* Valid category values for forge nodes.
|
|
14
|
+
* No categories configured - wireForgeNode cannot be used until forge.node.categories is defined in pikku.config.json.
|
|
15
|
+
*/
|
|
16
|
+
export type ForgeCategory = never
|
|
17
|
+
|
|
18
|
+
/**
|
|
19
|
+
* Valid RPC names that can be used with forge nodes.
|
|
20
|
+
* These are derived from the FlattenedRPCMap which includes both local and external package RPCs.
|
|
21
|
+
*/
|
|
22
|
+
export type ForgeRPCName = keyof FlattenedRPCMap
|
|
23
|
+
|
|
24
|
+
/**
|
|
25
|
+
* Typed forge node configuration.
|
|
26
|
+
* Validates that category and rpc are valid values.
|
|
27
|
+
*/
|
|
28
|
+
export type TypedForgeNode = Omit<CoreForgeNode, 'category' | 'rpc'> & {
|
|
29
|
+
/** Grouping category (validated against forge.node.categories in config) */
|
|
30
|
+
category: ForgeCategory
|
|
31
|
+
/** RPC name to call when node executes (must be a valid RPC name) */
|
|
32
|
+
rpc: ForgeRPCName
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
/**
|
|
36
|
+
* Registers a Forge node with validated category and RPC.
|
|
37
|
+
*
|
|
38
|
+
* @param config - Forge node configuration with typed category and rpc
|
|
39
|
+
*
|
|
40
|
+
* @example
|
|
41
|
+
* ```typescript
|
|
42
|
+
* wireForgeNode({
|
|
43
|
+
* name: 'send-email',
|
|
44
|
+
* displayName: 'Send Email',
|
|
45
|
+
* category: 'Communication', // Must be in forge.node.categories
|
|
46
|
+
* type: 'action',
|
|
47
|
+
* rpc: 'sendEmail', // Must be a valid RPC name
|
|
48
|
+
* description: 'Sends an email to a recipient'
|
|
49
|
+
* })
|
|
50
|
+
* ```
|
|
51
|
+
*/
|
|
52
|
+
export const wireForgeNode = (config: TypedForgeNode): void => {
|
|
53
|
+
wireForgeNodeCore(config as CoreForgeNode)
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
/**
|
|
57
|
+
* Registers a Forge credential definition.
|
|
58
|
+
* Credentials define secrets/API keys required by the package.
|
|
59
|
+
*
|
|
60
|
+
* @template T - Zod schema type for the credential structure
|
|
61
|
+
* @param config - Forge credential configuration
|
|
62
|
+
*
|
|
63
|
+
* @example
|
|
64
|
+
* ```typescript
|
|
65
|
+
* import { z } from 'zod'
|
|
66
|
+
*
|
|
67
|
+
* const apiCredentials = z.object({
|
|
68
|
+
* apiKey: z.string().describe('API key for authentication'),
|
|
69
|
+
* apiSecret: z.string().describe('API secret')
|
|
70
|
+
* })
|
|
71
|
+
*
|
|
72
|
+
* wireForgeCredential({
|
|
73
|
+
* name: 'example-api',
|
|
74
|
+
* displayName: 'Example API Credentials',
|
|
75
|
+
* description: 'Credentials for the example external API',
|
|
76
|
+
* secretId: 'EXAMPLE_API_CREDENTIALS',
|
|
77
|
+
* schema: apiCredentials
|
|
78
|
+
* })
|
|
79
|
+
* ```
|
|
80
|
+
*/
|
|
81
|
+
export const wireForgeCredential = <T>(config: CoreForgeCredential<T>): void => {
|
|
82
|
+
wireForgeCredentialCore(config)
|
|
83
|
+
}
|
|
@@ -1,21 +1,19 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* This file was generated by @pikku/cli@0.11.
|
|
2
|
+
* This file was generated by @pikku/cli@0.11.3
|
|
3
3
|
*/
|
|
4
4
|
/**
|
|
5
5
|
* Core function, middleware, and permission types for all wirings
|
|
6
6
|
*/
|
|
7
7
|
|
|
8
|
-
import { CorePikkuFunctionConfig, CorePikkuPermission, CorePikkuMiddleware, CorePermissionGroup, addMiddleware as addMiddlewareCore, addPermission as addPermissionCore } from '@pikku/core'
|
|
8
|
+
import { CorePikkuFunctionConfig, CorePikkuPermission, CorePikkuMiddleware, CorePermissionGroup, addMiddleware as addMiddlewareCore, addPermission as addPermissionCore, PikkuWire, PickRequired, ZodLike, CreateWireServices } from '@pikku/core'
|
|
9
9
|
import { CorePikkuFunction, CorePikkuFunctionSessionless } from '@pikku/core/function'
|
|
10
|
-
import { PikkuChannel } from '@pikku/core/channel'
|
|
11
|
-
import { PikkuMCP } from '@pikku/core/mcp'
|
|
12
10
|
|
|
13
11
|
import type { UserSession } from '../../types/application-types.d.js'
|
|
14
12
|
import type { SingletonServices } from '../../types/application-types.d.js'
|
|
15
13
|
import type { Services } from '../../types/application-types.d.js'
|
|
16
14
|
import type { Config } from '../../types/application-types.d.js'
|
|
17
|
-
import type { TypedPikkuRPC } from '../rpc/pikku-rpc-wirings-map.internal.gen.d.js'
|
|
18
|
-
import type { RequiredSingletonServices,
|
|
15
|
+
import type { TypedPikkuRPC, FlattenedRPCMap } from '../rpc/pikku-rpc-wirings-map.internal.gen.d.js'
|
|
16
|
+
import type { RequiredSingletonServices, RequiredWireServices } from '../pikku-services.gen.js'
|
|
19
17
|
|
|
20
18
|
|
|
21
19
|
|
|
@@ -29,7 +27,7 @@ type Session = UserSession
|
|
|
29
27
|
* @template In - The input type that the permission check will receive
|
|
30
28
|
* @template RequiredServices - The services required for this permission check
|
|
31
29
|
*/
|
|
32
|
-
export type PikkuPermission<In = unknown, RequiredServices extends Services = Services> = CorePikkuPermission<In, RequiredServices, Session
|
|
30
|
+
export type PikkuPermission<In = unknown, RequiredServices extends Services = Services> = CorePikkuPermission<In, RequiredServices, PikkuWire<In, never, false, Session>>
|
|
33
31
|
|
|
34
32
|
/**
|
|
35
33
|
* Type-safe middleware definition that can access your application's services and session.
|
|
@@ -37,7 +35,7 @@ export type PikkuPermission<In = unknown, RequiredServices extends Services = Se
|
|
|
37
35
|
*
|
|
38
36
|
* @template RequiredServices - The services required for this middleware
|
|
39
37
|
*/
|
|
40
|
-
export type PikkuMiddleware<RequiredServices extends SingletonServices = SingletonServices> = CorePikkuMiddleware<RequiredServices
|
|
38
|
+
export type PikkuMiddleware<RequiredServices extends SingletonServices = SingletonServices> = CorePikkuMiddleware<RequiredServices>
|
|
41
39
|
|
|
42
40
|
/**
|
|
43
41
|
* Configuration object for creating a permission with metadata
|
|
@@ -58,7 +56,8 @@ export type PikkuPermissionConfig<In = unknown, RequiredServices extends Service
|
|
|
58
56
|
* @example
|
|
59
57
|
* ```typescript
|
|
60
58
|
* // Direct function syntax
|
|
61
|
-
* const permission = pikkuPermission(({ logger }, data, session) => {
|
|
59
|
+
* const permission = pikkuPermission(async ({ logger }, data, { session }) => {
|
|
60
|
+
* const session = await session?.get()
|
|
62
61
|
* return session?.role === 'admin'
|
|
63
62
|
* })
|
|
64
63
|
*
|
|
@@ -66,7 +65,8 @@ export type PikkuPermissionConfig<In = unknown, RequiredServices extends Service
|
|
|
66
65
|
* const adminPermission = pikkuPermission({
|
|
67
66
|
* name: 'Admin Permission',
|
|
68
67
|
* description: 'Checks if user has admin role',
|
|
69
|
-
* func: async ({ logger }, data, session) => {
|
|
68
|
+
* func: async ({ logger }, data, { session }) => {
|
|
69
|
+
* const session = await session?.get()
|
|
70
70
|
* return session?.role === 'admin'
|
|
71
71
|
* }
|
|
72
72
|
* })
|
|
@@ -97,7 +97,7 @@ export type PikkuMiddlewareConfig<RequiredServices extends SingletonServices = S
|
|
|
97
97
|
* @example
|
|
98
98
|
* ```typescript
|
|
99
99
|
* // Direct function syntax
|
|
100
|
-
* const middleware = pikkuMiddleware(({ logger },
|
|
100
|
+
* const middleware = pikkuMiddleware(({ logger }, wires, next) => {
|
|
101
101
|
* logger.info('Middleware executed')
|
|
102
102
|
* await next()
|
|
103
103
|
* })
|
|
@@ -106,7 +106,7 @@ export type PikkuMiddlewareConfig<RequiredServices extends SingletonServices = S
|
|
|
106
106
|
* const logMiddleware = pikkuMiddleware({
|
|
107
107
|
* name: 'Request Logger',
|
|
108
108
|
* description: 'Logs all incoming requests',
|
|
109
|
-
* func: async ({ logger },
|
|
109
|
+
* func: async ({ logger }, wires, next) => {
|
|
110
110
|
* logger.info('Request started')
|
|
111
111
|
* await next()
|
|
112
112
|
* }
|
|
@@ -129,7 +129,7 @@ export const pikkuMiddleware = <RequiredServices extends SingletonServices = Sin
|
|
|
129
129
|
* message,
|
|
130
130
|
* level = 'info'
|
|
131
131
|
* }) => {
|
|
132
|
-
* return pikkuMiddleware(async ({ logger },
|
|
132
|
+
* return pikkuMiddleware(async ({ logger }, next) => {
|
|
133
133
|
* logger[level](message)
|
|
134
134
|
* await next()
|
|
135
135
|
* })
|
|
@@ -151,8 +151,8 @@ export const pikkuMiddlewareFactory = <In = any>(
|
|
|
151
151
|
* export const requireRole = pikkuPermissionFactory<{ role: string }>(({
|
|
152
152
|
* role
|
|
153
153
|
* }) => {
|
|
154
|
-
* return pikkuPermission(async ({ logger }, data,
|
|
155
|
-
* if (!
|
|
154
|
+
* return pikkuPermission(async ({ logger }, data, { initialSession }) => {
|
|
155
|
+
* if (!initialSession || initialSession.role !== role) {
|
|
156
156
|
* logger.warn(`Permission denied: required role '${role}'`)
|
|
157
157
|
* return false
|
|
158
158
|
* }
|
|
@@ -173,25 +173,19 @@ export const pikkuPermissionFactory = <In = any>(
|
|
|
173
173
|
*
|
|
174
174
|
* @template In - The input type
|
|
175
175
|
* @template Out - The output type that the function returns
|
|
176
|
-
* @template ChannelData - Channel data type (null = optional channel)
|
|
177
|
-
* @template MCPData - MCP data type (null = optional MCP)
|
|
178
176
|
* @template RequiredServices - Services required by this function
|
|
179
177
|
*/
|
|
180
178
|
export type PikkuFunctionSessionless<
|
|
181
179
|
In = unknown,
|
|
182
180
|
Out = never,
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
? { mcp?: PikkuMCP } // Optional MCP
|
|
192
|
-
: { mcp: PikkuMCP } // Required MCP
|
|
193
|
-
)
|
|
194
|
-
> = CorePikkuFunctionSessionless<In, Out, ChannelData, RequiredServices, Session>
|
|
181
|
+
RequiredWires extends keyof PikkuWire = never,
|
|
182
|
+
RequiredServices extends Services = Services
|
|
183
|
+
> = CorePikkuFunctionSessionless<
|
|
184
|
+
In,
|
|
185
|
+
Out,
|
|
186
|
+
RequiredServices,
|
|
187
|
+
PickRequired<PikkuWire<In, Out, false, Session, TypedPikkuRPC, null, any>, RequiredWires>
|
|
188
|
+
>
|
|
195
189
|
|
|
196
190
|
/**
|
|
197
191
|
* A session-aware API function that requires user authentication.
|
|
@@ -199,25 +193,24 @@ export type PikkuFunctionSessionless<
|
|
|
199
193
|
*
|
|
200
194
|
* @template In - The input type
|
|
201
195
|
* @template Out - The output type that the function returns
|
|
202
|
-
* @template ChannelData - Channel data type (null = optional channel)
|
|
203
|
-
* @template MCPData - MCP data type (null = optional MCP)
|
|
204
196
|
* @template RequiredServices - Services required by this function
|
|
205
197
|
*/
|
|
206
198
|
export type PikkuFunction<
|
|
207
199
|
In = unknown,
|
|
208
200
|
Out = never,
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
|
|
201
|
+
RequiredWires extends keyof PikkuWire = 'session',
|
|
202
|
+
RequiredServices extends Services = Services
|
|
203
|
+
> = CorePikkuFunction<
|
|
204
|
+
In,
|
|
205
|
+
Out,
|
|
206
|
+
RequiredServices,
|
|
207
|
+
PickRequired<PikkuWire<In, Out, true, Session, TypedPikkuRPC, null, any>, RequiredWires>
|
|
208
|
+
>
|
|
209
|
+
|
|
210
|
+
/**
|
|
211
|
+
* Helper type to infer the output type from a Zod schema
|
|
212
|
+
*/
|
|
213
|
+
export type InferZodOutput<T> = T extends ZodLike<infer U> ? U : never
|
|
221
214
|
|
|
222
215
|
/**
|
|
223
216
|
* Configuration object for Pikku functions with optional middleware, permissions, tags, and documentation.
|
|
@@ -225,72 +218,172 @@ export type PikkuFunction<
|
|
|
225
218
|
*
|
|
226
219
|
* @template In - The input type
|
|
227
220
|
* @template Out - The output type
|
|
228
|
-
* @template ChannelData - Channel data type
|
|
229
|
-
* @template MCPData - MCP data type
|
|
230
221
|
* @template PikkuFunc - The function type (can be narrowed to PikkuFunction or PikkuFunctionSessionless)
|
|
231
222
|
*/
|
|
232
223
|
export type PikkuFunctionConfig<
|
|
233
224
|
In = unknown,
|
|
234
225
|
Out = unknown,
|
|
235
|
-
|
|
236
|
-
|
|
237
|
-
|
|
238
|
-
|
|
226
|
+
RequiredWires extends keyof PikkuWire = never,
|
|
227
|
+
PikkuFunc extends PikkuFunction<In, Out, RequiredWires> | PikkuFunctionSessionless<In, Out, RequiredWires> = PikkuFunction<In, Out, RequiredWires> | PikkuFunctionSessionless<In, Out, RequiredWires>,
|
|
228
|
+
InputSchema extends ZodLike | undefined = undefined,
|
|
229
|
+
OutputSchema extends ZodLike | undefined = undefined
|
|
230
|
+
> = CorePikkuFunctionConfig<PikkuFunc, PikkuPermission<In>, PikkuMiddleware, InputSchema, OutputSchema>
|
|
231
|
+
|
|
232
|
+
/**
|
|
233
|
+
* Configuration object for Pikku functions with Zod schema validation.
|
|
234
|
+
* Use this when you want to define input/output schemas using Zod.
|
|
235
|
+
* Types are automatically inferred from the schemas.
|
|
236
|
+
*/
|
|
237
|
+
export type PikkuFunctionConfigWithSchema<
|
|
238
|
+
InputSchema extends ZodLike,
|
|
239
|
+
OutputSchema extends ZodLike | undefined = undefined,
|
|
240
|
+
RequiredWires extends keyof PikkuWire = never
|
|
241
|
+
> = {
|
|
242
|
+
name?: string
|
|
243
|
+
tags?: string[]
|
|
244
|
+
expose?: boolean
|
|
245
|
+
internal?: boolean
|
|
246
|
+
func: PikkuFunction<
|
|
247
|
+
InferZodOutput<InputSchema>,
|
|
248
|
+
OutputSchema extends ZodLike ? InferZodOutput<OutputSchema> : unknown,
|
|
249
|
+
RequiredWires
|
|
250
|
+
> | PikkuFunctionSessionless<
|
|
251
|
+
InferZodOutput<InputSchema>,
|
|
252
|
+
OutputSchema extends ZodLike ? InferZodOutput<OutputSchema> : unknown,
|
|
253
|
+
RequiredWires
|
|
254
|
+
>
|
|
255
|
+
auth?: boolean
|
|
256
|
+
permissions?: CorePermissionGroup<PikkuPermission<InferZodOutput<InputSchema>>>
|
|
257
|
+
middleware?: PikkuMiddleware[]
|
|
258
|
+
input: InputSchema
|
|
259
|
+
output?: OutputSchema
|
|
260
|
+
}
|
|
239
261
|
|
|
240
262
|
/**
|
|
241
263
|
* Creates a Pikku function that can be either session-aware or sessionless.
|
|
242
264
|
* This is the main function wrapper for creating API endpoints.
|
|
243
265
|
*
|
|
244
|
-
*
|
|
245
|
-
*
|
|
266
|
+
* Supports two patterns:
|
|
267
|
+
* 1. Generic types: `pikkuFunc<Input, Output>({ func: ... })`
|
|
268
|
+
* 2. Zod schemas: `pikkuFunc({ input: z.object(...), output: z.object(...), func: ... })`
|
|
269
|
+
*
|
|
270
|
+
* @template In - Input type for the function (inferred from schema if provided)
|
|
271
|
+
* @template Out - Output type for the function (inferred from schema if provided)
|
|
246
272
|
* @param func - Function definition, either direct function or configuration object
|
|
247
273
|
* @returns The normalized configuration object
|
|
248
274
|
*
|
|
249
275
|
* @example
|
|
250
|
-
*
|
|
251
|
-
*
|
|
252
|
-
*
|
|
253
|
-
*
|
|
276
|
+
* ```typescript
|
|
277
|
+
* // Pattern 1: Using generic types
|
|
278
|
+
* const createUser = pikkuFunc<{name: string, email: string}, {id: number}>({
|
|
279
|
+
* func: async ({db}, input) => {
|
|
254
280
|
* const user = await db.users.create(input)
|
|
255
|
-
* return {id: user.id
|
|
256
|
-
* }
|
|
257
|
-
* auth: true
|
|
281
|
+
* return { id: user.id }
|
|
282
|
+
* }
|
|
258
283
|
* })
|
|
259
|
-
*
|
|
284
|
+
*
|
|
285
|
+
* // Pattern 2: Using Zod schemas (types inferred automatically)
|
|
286
|
+
* const createUserInput = z.object({ name: z.string(), email: z.string() })
|
|
287
|
+
* const createUserOutput = z.object({ id: z.number() })
|
|
288
|
+
*
|
|
289
|
+
* const createUser = pikkuFunc({
|
|
290
|
+
* input: createUserInput,
|
|
291
|
+
* output: createUserOutput,
|
|
292
|
+
* func: async ({db}, input) => {
|
|
293
|
+
* // input is typed as { name: string, email: string }
|
|
294
|
+
* const user = await db.users.create(input)
|
|
295
|
+
* return { id: user.id } // must match output schema
|
|
296
|
+
* }
|
|
297
|
+
* })
|
|
298
|
+
* ```
|
|
260
299
|
*/
|
|
261
|
-
export
|
|
300
|
+
export function pikkuFunc<
|
|
301
|
+
InputSchema extends ZodLike,
|
|
302
|
+
OutputSchema extends ZodLike | undefined = undefined
|
|
303
|
+
>(
|
|
304
|
+
config: PikkuFunctionConfigWithSchema<InputSchema, OutputSchema, 'session' | 'rpc'>
|
|
305
|
+
): PikkuFunctionConfig<InferZodOutput<InputSchema>, OutputSchema extends ZodLike ? InferZodOutput<OutputSchema> : unknown, 'session' | 'rpc'>
|
|
306
|
+
export function pikkuFunc<In, Out = unknown>(
|
|
262
307
|
func:
|
|
263
|
-
| PikkuFunction<In, Out>
|
|
264
|
-
|
|
|
265
|
-
)
|
|
308
|
+
| PikkuFunction<In, Out, 'session' | 'rpc'>
|
|
309
|
+
| PikkuFunctionConfig<In, Out, 'session' | 'rpc'>
|
|
310
|
+
): PikkuFunctionConfig<In, Out, 'session' | 'rpc'>
|
|
311
|
+
export function pikkuFunc(func: any) {
|
|
266
312
|
return typeof func === 'function' ? { func } : func
|
|
267
313
|
}
|
|
268
314
|
|
|
315
|
+
/**
|
|
316
|
+
* Configuration object for sessionless Pikku functions with Zod schema validation.
|
|
317
|
+
*/
|
|
318
|
+
export type PikkuFunctionSessionlessConfigWithSchema<
|
|
319
|
+
InputSchema extends ZodLike,
|
|
320
|
+
OutputSchema extends ZodLike | undefined = undefined,
|
|
321
|
+
RequiredWires extends keyof PikkuWire = never
|
|
322
|
+
> = {
|
|
323
|
+
name?: string
|
|
324
|
+
description?: string
|
|
325
|
+
tags?: string[]
|
|
326
|
+
expose?: boolean
|
|
327
|
+
internal?: boolean
|
|
328
|
+
func: PikkuFunctionSessionless<
|
|
329
|
+
InferZodOutput<InputSchema>,
|
|
330
|
+
OutputSchema extends ZodLike ? InferZodOutput<OutputSchema> : unknown,
|
|
331
|
+
RequiredWires
|
|
332
|
+
>
|
|
333
|
+
auth?: boolean
|
|
334
|
+
permissions?: CorePermissionGroup<PikkuPermission<InferZodOutput<InputSchema>>>
|
|
335
|
+
middleware?: PikkuMiddleware[]
|
|
336
|
+
input: InputSchema
|
|
337
|
+
output?: OutputSchema
|
|
338
|
+
}
|
|
339
|
+
|
|
269
340
|
/**
|
|
270
341
|
* Creates a sessionless Pikku function that doesn't require user authentication.
|
|
271
342
|
* Use this for public endpoints, webhooks, or background tasks.
|
|
272
343
|
*
|
|
273
|
-
*
|
|
274
|
-
*
|
|
344
|
+
* Supports two patterns:
|
|
345
|
+
* 1. Generic types: `pikkuSessionlessFunc<Input, Output>({ func: ... })`
|
|
346
|
+
* 2. Zod schemas: `pikkuSessionlessFunc({ input: z.object(...), func: ... })`
|
|
347
|
+
*
|
|
348
|
+
* @template In - Input type for the function (inferred from schema if provided)
|
|
349
|
+
* @template Out - Output type for the function (inferred from schema if provided)
|
|
275
350
|
* @param func - Function definition, either direct function or configuration object
|
|
276
351
|
* @returns The normalized configuration object
|
|
277
352
|
*
|
|
278
353
|
* @example
|
|
279
|
-
*
|
|
280
|
-
*
|
|
354
|
+
* ```typescript
|
|
355
|
+
* // Pattern 1: Using generic types
|
|
356
|
+
* const healthCheck = pikkuSessionlessFunc<void, {status: string}>({
|
|
281
357
|
* func: async ({logger}) => {
|
|
282
|
-
*
|
|
283
|
-
*
|
|
284
|
-
*
|
|
285
|
-
*
|
|
358
|
+
* return { status: 'healthy' }
|
|
359
|
+
* }
|
|
360
|
+
* })
|
|
361
|
+
*
|
|
362
|
+
* // Pattern 2: Using Zod schemas
|
|
363
|
+
* const greetInput = z.object({ name: z.string() })
|
|
364
|
+
* const greetOutput = z.object({ message: z.string() })
|
|
365
|
+
*
|
|
366
|
+
* const greet = pikkuSessionlessFunc({
|
|
367
|
+
* input: greetInput,
|
|
368
|
+
* output: greetOutput,
|
|
369
|
+
* func: async (_services, { name }) => {
|
|
370
|
+
* return { message: `Hello, ${name}!` }
|
|
371
|
+
* }
|
|
286
372
|
* })
|
|
287
|
-
*
|
|
373
|
+
* ```
|
|
288
374
|
*/
|
|
289
|
-
export
|
|
375
|
+
export function pikkuSessionlessFunc<
|
|
376
|
+
InputSchema extends ZodLike,
|
|
377
|
+
OutputSchema extends ZodLike | undefined = undefined
|
|
378
|
+
>(
|
|
379
|
+
config: PikkuFunctionSessionlessConfigWithSchema<InputSchema, OutputSchema, 'session' | 'rpc'>
|
|
380
|
+
): PikkuFunctionConfig<InferZodOutput<InputSchema>, OutputSchema extends ZodLike ? InferZodOutput<OutputSchema> : unknown, 'session' | 'rpc'>
|
|
381
|
+
export function pikkuSessionlessFunc<In, Out = unknown>(
|
|
290
382
|
func:
|
|
291
|
-
| PikkuFunctionSessionless<In, Out>
|
|
292
|
-
|
|
|
293
|
-
)
|
|
383
|
+
| PikkuFunctionSessionless<In, Out, 'session' | 'rpc'>
|
|
384
|
+
| PikkuFunctionConfig<In, Out, 'session' | 'rpc'>
|
|
385
|
+
): PikkuFunctionConfig<In, Out, 'session' | 'rpc'>
|
|
386
|
+
export function pikkuSessionlessFunc(func: any) {
|
|
294
387
|
return typeof func === 'function' ? { func } : func
|
|
295
388
|
}
|
|
296
389
|
|
|
@@ -302,22 +395,61 @@ export const pikkuSessionlessFunc = <In, Out = unknown>(
|
|
|
302
395
|
* @returns The normalized configuration object
|
|
303
396
|
*
|
|
304
397
|
* @example
|
|
305
|
-
*
|
|
398
|
+
* ```typescript
|
|
306
399
|
* const cleanupTempFiles = pikkuVoidFunc(async ({fileSystem, logger}) => {
|
|
307
400
|
* logger.info('Starting cleanup of temporary files')
|
|
308
401
|
* await fileSystem.deleteDirectory('/tmp/uploads')
|
|
309
402
|
* logger.info('Cleanup completed')
|
|
310
403
|
* })
|
|
311
|
-
*
|
|
404
|
+
* ```
|
|
312
405
|
*/
|
|
313
406
|
export const pikkuVoidFunc = (
|
|
314
407
|
func:
|
|
315
|
-
| PikkuFunctionSessionless<void, void>
|
|
316
|
-
|
|
|
408
|
+
| PikkuFunctionSessionless<void, void, 'session' | 'rpc'>
|
|
409
|
+
| PikkuFunctionConfig<void, void, 'session' | 'rpc'>
|
|
317
410
|
) => {
|
|
318
411
|
return typeof func === 'function' ? { func } : func
|
|
319
412
|
}
|
|
320
413
|
|
|
414
|
+
/**
|
|
415
|
+
* Creates a wrapper function for external package functions that are exposed via RPC.
|
|
416
|
+
* This allows you to wire external functions to any wiring type (HTTP, queue, etc.)
|
|
417
|
+
* without type compatibility issues.
|
|
418
|
+
*
|
|
419
|
+
* @template Name - The RPC method name (must be a key in FlattenedRPCMap)
|
|
420
|
+
* @param rpcName - The name of the RPC method to invoke
|
|
421
|
+
* @returns A Pikku function that proxies calls to the external RPC method
|
|
422
|
+
*
|
|
423
|
+
* @example
|
|
424
|
+
* ```typescript
|
|
425
|
+
* // Wire an external function via HTTP
|
|
426
|
+
* wireHTTP({
|
|
427
|
+
* auth: false,
|
|
428
|
+
* method: 'get',
|
|
429
|
+
* route: '/external/hello',
|
|
430
|
+
* func: external('ext:hello'),
|
|
431
|
+
* tags: ['external'],
|
|
432
|
+
* })
|
|
433
|
+
* ```
|
|
434
|
+
*/
|
|
435
|
+
export const external = <Name extends keyof FlattenedRPCMap>(
|
|
436
|
+
rpcName: Name
|
|
437
|
+
): PikkuFunctionConfig<
|
|
438
|
+
FlattenedRPCMap[Name]['input'],
|
|
439
|
+
FlattenedRPCMap[Name]['output'],
|
|
440
|
+
'session' | 'rpc'
|
|
441
|
+
> => {
|
|
442
|
+
return {
|
|
443
|
+
func: (async (_services: any, data: any, { rpc }: any) => {
|
|
444
|
+
return rpc.invoke(rpcName, data)
|
|
445
|
+
}) as any
|
|
446
|
+
} as PikkuFunctionConfig<
|
|
447
|
+
FlattenedRPCMap[Name]['input'],
|
|
448
|
+
FlattenedRPCMap[Name]['output'],
|
|
449
|
+
'session' | 'rpc'
|
|
450
|
+
>
|
|
451
|
+
}
|
|
452
|
+
|
|
321
453
|
/**
|
|
322
454
|
* Creates a Pikku config factory.
|
|
323
455
|
* Use this to define your application's configuration factory.
|
|
@@ -362,28 +494,28 @@ export const pikkuServices = (
|
|
|
362
494
|
) => func
|
|
363
495
|
|
|
364
496
|
/**
|
|
365
|
-
* Creates a Pikku
|
|
497
|
+
* Creates a Pikku wire services factory.
|
|
366
498
|
* Use this to define services that are created per-request/session.
|
|
367
499
|
*
|
|
368
|
-
* @param func -
|
|
369
|
-
* @returns The
|
|
500
|
+
* @param func - Wire services factory function
|
|
501
|
+
* @returns The wire services factory function
|
|
370
502
|
*
|
|
371
503
|
* @example
|
|
372
504
|
* ```typescript
|
|
373
|
-
* export const
|
|
505
|
+
* export const createWireServices = pikkuWireServices(async (services, wire) => {
|
|
506
|
+
* const session = await wire.session?.get()
|
|
374
507
|
* return {
|
|
375
508
|
* userCache: new UserCache(session?.userId)
|
|
376
509
|
* }
|
|
377
510
|
* })
|
|
378
511
|
* ```
|
|
379
512
|
*/
|
|
380
|
-
export const
|
|
513
|
+
export const pikkuWireServices = (
|
|
381
514
|
func: (
|
|
382
515
|
services: SingletonServices,
|
|
383
|
-
|
|
384
|
-
|
|
385
|
-
|
|
386
|
-
) => func
|
|
516
|
+
wire: any
|
|
517
|
+
) => Promise<RequiredWireServices>
|
|
518
|
+
): CreateWireServices => func as unknown as CreateWireServices
|
|
387
519
|
|
|
388
520
|
/**
|
|
389
521
|
* Adds global middleware for a specific tag.
|
|
@@ -409,7 +541,7 @@ export const pikkuSessionServices = (
|
|
|
409
541
|
* ```
|
|
410
542
|
*/
|
|
411
543
|
export const addMiddleware = (tag: string, middleware: PikkuMiddleware[]) => {
|
|
412
|
-
addMiddlewareCore(tag, middleware as any)
|
|
544
|
+
addMiddlewareCore(tag, middleware as any, null)
|
|
413
545
|
}
|
|
414
546
|
|
|
415
547
|
/**
|
|
@@ -436,5 +568,5 @@ export const addMiddleware = (tag: string, middleware: PikkuMiddleware[]) => {
|
|
|
436
568
|
* ```
|
|
437
569
|
*/
|
|
438
570
|
export const addPermission = <In = unknown>(tag: string, permissions: CorePermissionGroup<PikkuPermission<In>> | PikkuPermission<In>[]) => {
|
|
439
|
-
addPermissionCore(tag, permissions as any)
|
|
571
|
+
addPermissionCore(tag, permissions as any, null)
|
|
440
572
|
}
|