@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
|
@@ -1,5 +1,7 @@
|
|
|
1
1
|
import { getFileImportRelativePath } from '../../../utils/file-import-path.js';
|
|
2
|
-
export const serializeFunctionImports = (outputPath, functionsMap, functionsMeta, packageMappings = {}
|
|
2
|
+
export const serializeFunctionImports = (outputPath, functionsMap, functionsMeta, packageMappings = {},
|
|
3
|
+
/** Package name for external packages (e.g., '@pikku/templates-function-external') */
|
|
4
|
+
externalPackageName) => {
|
|
3
5
|
const serializedImports = [
|
|
4
6
|
`/* Import and register functions used by RPCs */`,
|
|
5
7
|
`import { addFunction } from '@pikku/core'`,
|
|
@@ -7,18 +9,20 @@ export const serializeFunctionImports = (outputPath, functionsMap, functionsMeta
|
|
|
7
9
|
const serializedRegistrations = [];
|
|
8
10
|
// Sort by function name for consistent output
|
|
9
11
|
const sortedEntries = Array.from(functionsMap.entries()).sort((a, b) => a[0].localeCompare(b[0]));
|
|
12
|
+
// Third argument to addFunction is the package name (null for main package)
|
|
13
|
+
const packageArg = externalPackageName ? `, '${externalPackageName}'` : '';
|
|
10
14
|
for (const [name, { path, exportedName }] of sortedEntries) {
|
|
11
15
|
const filePath = getFileImportRelativePath(outputPath, path, packageMappings);
|
|
12
16
|
// pikkuFunc/pikkuSessionlessFunc/pikkuVoidFunc always return config objects
|
|
13
17
|
// For directly exported functions, we can just import and register them
|
|
14
18
|
if (name === exportedName) {
|
|
15
19
|
serializedImports.push(`import { ${exportedName} } from '${filePath}'`);
|
|
16
|
-
serializedRegistrations.push(`addFunction('${name}', ${exportedName})`);
|
|
20
|
+
serializedRegistrations.push(`addFunction('${name}', ${exportedName}${packageArg})`);
|
|
17
21
|
}
|
|
18
22
|
// For renamed functions, we need to import and alias them
|
|
19
23
|
else {
|
|
20
24
|
serializedImports.push(`import { ${exportedName} as ${name} } from '${filePath}'`);
|
|
21
|
-
serializedRegistrations.push(`addFunction('${name}', ${name})`);
|
|
25
|
+
serializedRegistrations.push(`addFunction('${name}', ${name}${packageArg})`);
|
|
22
26
|
}
|
|
23
27
|
}
|
|
24
28
|
// Add a blank line between imports and registrations
|
|
@@ -1,4 +1,4 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Generates core function, middleware, and permission type definitions
|
|
3
3
|
*/
|
|
4
|
-
export declare const serializeFunctionTypes: (userSessionTypeImport: string, userSessionTypeName: string, singletonServicesTypeImport: string, singletonServicesTypeName: string,
|
|
4
|
+
export declare const serializeFunctionTypes: (userSessionTypeImport: string, userSessionTypeName: string, singletonServicesTypeImport: string, singletonServicesTypeName: string, wireServicesTypeImport: string, wireServicesTypeName: string, rpcMapTypeImport: string, requiredServicesTypeImport: string, configTypeImport: string, packageName?: string) => string;
|
|
@@ -1,25 +1,24 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Generates core function, middleware, and permission type definitions
|
|
3
3
|
*/
|
|
4
|
-
export const serializeFunctionTypes = (userSessionTypeImport, userSessionTypeName, singletonServicesTypeImport, singletonServicesTypeName,
|
|
4
|
+
export const serializeFunctionTypes = (userSessionTypeImport, userSessionTypeName, singletonServicesTypeImport, singletonServicesTypeName, wireServicesTypeImport, wireServicesTypeName, rpcMapTypeImport, requiredServicesTypeImport, configTypeImport, packageName) => {
|
|
5
|
+
const packageNameValue = packageName ? `'${packageName}'` : 'null';
|
|
5
6
|
return `/**
|
|
6
7
|
* Core function, middleware, and permission types for all wirings
|
|
7
8
|
*/
|
|
8
9
|
|
|
9
|
-
import { CorePikkuFunctionConfig, CorePikkuPermission, CorePikkuMiddleware, CorePermissionGroup, addMiddleware as addMiddlewareCore, addPermission as addPermissionCore } from '@pikku/core'
|
|
10
|
+
import { CorePikkuFunctionConfig, CorePikkuPermission, CorePikkuMiddleware, CorePermissionGroup, addMiddleware as addMiddlewareCore, addPermission as addPermissionCore, PikkuWire, PickRequired, ZodLike, CreateWireServices } from '@pikku/core'
|
|
10
11
|
import { CorePikkuFunction, CorePikkuFunctionSessionless } from '@pikku/core/function'
|
|
11
|
-
import { PikkuChannel } from '@pikku/core/channel'
|
|
12
|
-
import { PikkuMCP } from '@pikku/core/mcp'
|
|
13
12
|
|
|
14
13
|
${userSessionTypeImport}
|
|
15
14
|
${singletonServicesTypeImport}
|
|
16
|
-
${
|
|
15
|
+
${wireServicesTypeImport}
|
|
17
16
|
${configTypeImport}
|
|
18
17
|
${rpcMapTypeImport}
|
|
19
18
|
${requiredServicesTypeImport}
|
|
20
19
|
|
|
21
20
|
${singletonServicesTypeName !== 'SingletonServices' ? `type SingletonServices = ${singletonServicesTypeName}` : ''}
|
|
22
|
-
${
|
|
21
|
+
${wireServicesTypeName !== 'Services' ? `type Services = ${wireServicesTypeName}` : ''}
|
|
23
22
|
${userSessionTypeName !== 'Session' ? `type Session = ${userSessionTypeName}` : ''}
|
|
24
23
|
${configTypeImport.includes('Config type not found') ? 'type Config = any' : ''}
|
|
25
24
|
|
|
@@ -30,7 +29,7 @@ ${configTypeImport.includes('Config type not found') ? 'type Config = any' : ''}
|
|
|
30
29
|
* @template In - The input type that the permission check will receive
|
|
31
30
|
* @template RequiredServices - The services required for this permission check
|
|
32
31
|
*/
|
|
33
|
-
export type PikkuPermission<In = unknown, RequiredServices extends Services = Services> = CorePikkuPermission<In, RequiredServices, Session
|
|
32
|
+
export type PikkuPermission<In = unknown, RequiredServices extends Services = Services> = CorePikkuPermission<In, RequiredServices, PikkuWire<In, never, false, Session>>
|
|
34
33
|
|
|
35
34
|
/**
|
|
36
35
|
* Type-safe middleware definition that can access your application's services and session.
|
|
@@ -38,7 +37,7 @@ export type PikkuPermission<In = unknown, RequiredServices extends Services = Se
|
|
|
38
37
|
*
|
|
39
38
|
* @template RequiredServices - The services required for this middleware
|
|
40
39
|
*/
|
|
41
|
-
export type PikkuMiddleware<RequiredServices extends SingletonServices = SingletonServices> = CorePikkuMiddleware<RequiredServices
|
|
40
|
+
export type PikkuMiddleware<RequiredServices extends SingletonServices = SingletonServices> = CorePikkuMiddleware<RequiredServices>
|
|
42
41
|
|
|
43
42
|
/**
|
|
44
43
|
* Configuration object for creating a permission with metadata
|
|
@@ -59,7 +58,8 @@ export type PikkuPermissionConfig<In = unknown, RequiredServices extends Service
|
|
|
59
58
|
* @example
|
|
60
59
|
* \`\`\`typescript
|
|
61
60
|
* // Direct function syntax
|
|
62
|
-
* const permission = pikkuPermission(({ logger }, data, session) => {
|
|
61
|
+
* const permission = pikkuPermission(async ({ logger }, data, { session }) => {
|
|
62
|
+
* const session = await session?.get()
|
|
63
63
|
* return session?.role === 'admin'
|
|
64
64
|
* })
|
|
65
65
|
*
|
|
@@ -67,7 +67,8 @@ export type PikkuPermissionConfig<In = unknown, RequiredServices extends Service
|
|
|
67
67
|
* const adminPermission = pikkuPermission({
|
|
68
68
|
* name: 'Admin Permission',
|
|
69
69
|
* description: 'Checks if user has admin role',
|
|
70
|
-
* func: async ({ logger }, data, session) => {
|
|
70
|
+
* func: async ({ logger }, data, { session }) => {
|
|
71
|
+
* const session = await session?.get()
|
|
71
72
|
* return session?.role === 'admin'
|
|
72
73
|
* }
|
|
73
74
|
* })
|
|
@@ -98,7 +99,7 @@ export type PikkuMiddlewareConfig<RequiredServices extends SingletonServices = S
|
|
|
98
99
|
* @example
|
|
99
100
|
* \`\`\`typescript
|
|
100
101
|
* // Direct function syntax
|
|
101
|
-
* const middleware = pikkuMiddleware(({ logger },
|
|
102
|
+
* const middleware = pikkuMiddleware(({ logger }, wires, next) => {
|
|
102
103
|
* logger.info('Middleware executed')
|
|
103
104
|
* await next()
|
|
104
105
|
* })
|
|
@@ -107,7 +108,7 @@ export type PikkuMiddlewareConfig<RequiredServices extends SingletonServices = S
|
|
|
107
108
|
* const logMiddleware = pikkuMiddleware({
|
|
108
109
|
* name: 'Request Logger',
|
|
109
110
|
* description: 'Logs all incoming requests',
|
|
110
|
-
* func: async ({ logger },
|
|
111
|
+
* func: async ({ logger }, wires, next) => {
|
|
111
112
|
* logger.info('Request started')
|
|
112
113
|
* await next()
|
|
113
114
|
* }
|
|
@@ -130,7 +131,7 @@ export const pikkuMiddleware = <RequiredServices extends SingletonServices = Sin
|
|
|
130
131
|
* message,
|
|
131
132
|
* level = 'info'
|
|
132
133
|
* }) => {
|
|
133
|
-
* return pikkuMiddleware(async ({ logger },
|
|
134
|
+
* return pikkuMiddleware(async ({ logger }, next) => {
|
|
134
135
|
* logger[level](message)
|
|
135
136
|
* await next()
|
|
136
137
|
* })
|
|
@@ -152,8 +153,8 @@ export const pikkuMiddlewareFactory = <In = any>(
|
|
|
152
153
|
* export const requireRole = pikkuPermissionFactory<{ role: string }>(({
|
|
153
154
|
* role
|
|
154
155
|
* }) => {
|
|
155
|
-
* return pikkuPermission(async ({ logger }, data,
|
|
156
|
-
* if (!
|
|
156
|
+
* return pikkuPermission(async ({ logger }, data, { initialSession }) => {
|
|
157
|
+
* if (!initialSession || initialSession.role !== role) {
|
|
157
158
|
* logger.warn(\`Permission denied: required role '\${role}'\`)
|
|
158
159
|
* return false
|
|
159
160
|
* }
|
|
@@ -174,25 +175,19 @@ export const pikkuPermissionFactory = <In = any>(
|
|
|
174
175
|
*
|
|
175
176
|
* @template In - The input type
|
|
176
177
|
* @template Out - The output type that the function returns
|
|
177
|
-
* @template ChannelData - Channel data type (null = optional channel)
|
|
178
|
-
* @template MCPData - MCP data type (null = optional MCP)
|
|
179
178
|
* @template RequiredServices - Services required by this function
|
|
180
179
|
*/
|
|
181
180
|
export type PikkuFunctionSessionless<
|
|
182
181
|
In = unknown,
|
|
183
182
|
Out = never,
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
? { mcp?: PikkuMCP } // Optional MCP
|
|
193
|
-
: { mcp: PikkuMCP } // Required MCP
|
|
194
|
-
)
|
|
195
|
-
> = CorePikkuFunctionSessionless<In, Out, ChannelData, RequiredServices, Session>
|
|
183
|
+
RequiredWires extends keyof PikkuWire = never,
|
|
184
|
+
RequiredServices extends Services = Services
|
|
185
|
+
> = CorePikkuFunctionSessionless<
|
|
186
|
+
In,
|
|
187
|
+
Out,
|
|
188
|
+
RequiredServices,
|
|
189
|
+
PickRequired<PikkuWire<In, Out, false, Session, TypedPikkuRPC, null, any>, RequiredWires>
|
|
190
|
+
>
|
|
196
191
|
|
|
197
192
|
/**
|
|
198
193
|
* A session-aware API function that requires user authentication.
|
|
@@ -200,25 +195,24 @@ export type PikkuFunctionSessionless<
|
|
|
200
195
|
*
|
|
201
196
|
* @template In - The input type
|
|
202
197
|
* @template Out - The output type that the function returns
|
|
203
|
-
* @template ChannelData - Channel data type (null = optional channel)
|
|
204
|
-
* @template MCPData - MCP data type (null = optional MCP)
|
|
205
198
|
* @template RequiredServices - Services required by this function
|
|
206
199
|
*/
|
|
207
200
|
export type PikkuFunction<
|
|
208
201
|
In = unknown,
|
|
209
202
|
Out = never,
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
|
|
203
|
+
RequiredWires extends keyof PikkuWire = 'session',
|
|
204
|
+
RequiredServices extends Services = Services
|
|
205
|
+
> = CorePikkuFunction<
|
|
206
|
+
In,
|
|
207
|
+
Out,
|
|
208
|
+
RequiredServices,
|
|
209
|
+
PickRequired<PikkuWire<In, Out, true, Session, TypedPikkuRPC, null, any>, RequiredWires>
|
|
210
|
+
>
|
|
211
|
+
|
|
212
|
+
/**
|
|
213
|
+
* Helper type to infer the output type from a Zod schema
|
|
214
|
+
*/
|
|
215
|
+
export type InferZodOutput<T> = T extends ZodLike<infer U> ? U : never
|
|
222
216
|
|
|
223
217
|
/**
|
|
224
218
|
* Configuration object for Pikku functions with optional middleware, permissions, tags, and documentation.
|
|
@@ -226,72 +220,172 @@ export type PikkuFunction<
|
|
|
226
220
|
*
|
|
227
221
|
* @template In - The input type
|
|
228
222
|
* @template Out - The output type
|
|
229
|
-
* @template ChannelData - Channel data type
|
|
230
|
-
* @template MCPData - MCP data type
|
|
231
223
|
* @template PikkuFunc - The function type (can be narrowed to PikkuFunction or PikkuFunctionSessionless)
|
|
232
224
|
*/
|
|
233
225
|
export type PikkuFunctionConfig<
|
|
234
226
|
In = unknown,
|
|
235
227
|
Out = unknown,
|
|
236
|
-
|
|
237
|
-
|
|
238
|
-
|
|
239
|
-
|
|
228
|
+
RequiredWires extends keyof PikkuWire = never,
|
|
229
|
+
PikkuFunc extends PikkuFunction<In, Out, RequiredWires> | PikkuFunctionSessionless<In, Out, RequiredWires> = PikkuFunction<In, Out, RequiredWires> | PikkuFunctionSessionless<In, Out, RequiredWires>,
|
|
230
|
+
InputSchema extends ZodLike | undefined = undefined,
|
|
231
|
+
OutputSchema extends ZodLike | undefined = undefined
|
|
232
|
+
> = CorePikkuFunctionConfig<PikkuFunc, PikkuPermission<In>, PikkuMiddleware, InputSchema, OutputSchema>
|
|
233
|
+
|
|
234
|
+
/**
|
|
235
|
+
* Configuration object for Pikku functions with Zod schema validation.
|
|
236
|
+
* Use this when you want to define input/output schemas using Zod.
|
|
237
|
+
* Types are automatically inferred from the schemas.
|
|
238
|
+
*/
|
|
239
|
+
export type PikkuFunctionConfigWithSchema<
|
|
240
|
+
InputSchema extends ZodLike,
|
|
241
|
+
OutputSchema extends ZodLike | undefined = undefined,
|
|
242
|
+
RequiredWires extends keyof PikkuWire = never
|
|
243
|
+
> = {
|
|
244
|
+
name?: string
|
|
245
|
+
tags?: string[]
|
|
246
|
+
expose?: boolean
|
|
247
|
+
internal?: boolean
|
|
248
|
+
func: PikkuFunction<
|
|
249
|
+
InferZodOutput<InputSchema>,
|
|
250
|
+
OutputSchema extends ZodLike ? InferZodOutput<OutputSchema> : unknown,
|
|
251
|
+
RequiredWires
|
|
252
|
+
> | PikkuFunctionSessionless<
|
|
253
|
+
InferZodOutput<InputSchema>,
|
|
254
|
+
OutputSchema extends ZodLike ? InferZodOutput<OutputSchema> : unknown,
|
|
255
|
+
RequiredWires
|
|
256
|
+
>
|
|
257
|
+
auth?: boolean
|
|
258
|
+
permissions?: CorePermissionGroup<PikkuPermission<InferZodOutput<InputSchema>>>
|
|
259
|
+
middleware?: PikkuMiddleware[]
|
|
260
|
+
input: InputSchema
|
|
261
|
+
output?: OutputSchema
|
|
262
|
+
}
|
|
240
263
|
|
|
241
264
|
/**
|
|
242
265
|
* Creates a Pikku function that can be either session-aware or sessionless.
|
|
243
266
|
* This is the main function wrapper for creating API endpoints.
|
|
244
267
|
*
|
|
245
|
-
*
|
|
246
|
-
*
|
|
268
|
+
* Supports two patterns:
|
|
269
|
+
* 1. Generic types: \`pikkuFunc<Input, Output>({ func: ... })\`
|
|
270
|
+
* 2. Zod schemas: \`pikkuFunc({ input: z.object(...), output: z.object(...), func: ... })\`
|
|
271
|
+
*
|
|
272
|
+
* @template In - Input type for the function (inferred from schema if provided)
|
|
273
|
+
* @template Out - Output type for the function (inferred from schema if provided)
|
|
247
274
|
* @param func - Function definition, either direct function or configuration object
|
|
248
275
|
* @returns The normalized configuration object
|
|
249
276
|
*
|
|
250
277
|
* @example
|
|
251
|
-
*
|
|
252
|
-
*
|
|
253
|
-
*
|
|
254
|
-
*
|
|
278
|
+
* \`\`\`typescript
|
|
279
|
+
* // Pattern 1: Using generic types
|
|
280
|
+
* const createUser = pikkuFunc<{name: string, email: string}, {id: number}>({
|
|
281
|
+
* func: async ({db}, input) => {
|
|
255
282
|
* const user = await db.users.create(input)
|
|
256
|
-
* return {id: user.id
|
|
257
|
-
* }
|
|
258
|
-
* auth: true
|
|
283
|
+
* return { id: user.id }
|
|
284
|
+
* }
|
|
259
285
|
* })
|
|
260
|
-
*
|
|
286
|
+
*
|
|
287
|
+
* // Pattern 2: Using Zod schemas (types inferred automatically)
|
|
288
|
+
* const createUserInput = z.object({ name: z.string(), email: z.string() })
|
|
289
|
+
* const createUserOutput = z.object({ id: z.number() })
|
|
290
|
+
*
|
|
291
|
+
* const createUser = pikkuFunc({
|
|
292
|
+
* input: createUserInput,
|
|
293
|
+
* output: createUserOutput,
|
|
294
|
+
* func: async ({db}, input) => {
|
|
295
|
+
* // input is typed as { name: string, email: string }
|
|
296
|
+
* const user = await db.users.create(input)
|
|
297
|
+
* return { id: user.id } // must match output schema
|
|
298
|
+
* }
|
|
299
|
+
* })
|
|
300
|
+
* \`\`\`
|
|
261
301
|
*/
|
|
262
|
-
export
|
|
302
|
+
export function pikkuFunc<
|
|
303
|
+
InputSchema extends ZodLike,
|
|
304
|
+
OutputSchema extends ZodLike | undefined = undefined
|
|
305
|
+
>(
|
|
306
|
+
config: PikkuFunctionConfigWithSchema<InputSchema, OutputSchema, 'session' | 'rpc'>
|
|
307
|
+
): PikkuFunctionConfig<InferZodOutput<InputSchema>, OutputSchema extends ZodLike ? InferZodOutput<OutputSchema> : unknown, 'session' | 'rpc'>
|
|
308
|
+
export function pikkuFunc<In, Out = unknown>(
|
|
263
309
|
func:
|
|
264
|
-
| PikkuFunction<In, Out>
|
|
265
|
-
|
|
|
266
|
-
)
|
|
310
|
+
| PikkuFunction<In, Out, 'session' | 'rpc'>
|
|
311
|
+
| PikkuFunctionConfig<In, Out, 'session' | 'rpc'>
|
|
312
|
+
): PikkuFunctionConfig<In, Out, 'session' | 'rpc'>
|
|
313
|
+
export function pikkuFunc(func: any) {
|
|
267
314
|
return typeof func === 'function' ? { func } : func
|
|
268
315
|
}
|
|
269
316
|
|
|
317
|
+
/**
|
|
318
|
+
* Configuration object for sessionless Pikku functions with Zod schema validation.
|
|
319
|
+
*/
|
|
320
|
+
export type PikkuFunctionSessionlessConfigWithSchema<
|
|
321
|
+
InputSchema extends ZodLike,
|
|
322
|
+
OutputSchema extends ZodLike | undefined = undefined,
|
|
323
|
+
RequiredWires extends keyof PikkuWire = never
|
|
324
|
+
> = {
|
|
325
|
+
name?: string
|
|
326
|
+
description?: string
|
|
327
|
+
tags?: string[]
|
|
328
|
+
expose?: boolean
|
|
329
|
+
internal?: boolean
|
|
330
|
+
func: PikkuFunctionSessionless<
|
|
331
|
+
InferZodOutput<InputSchema>,
|
|
332
|
+
OutputSchema extends ZodLike ? InferZodOutput<OutputSchema> : unknown,
|
|
333
|
+
RequiredWires
|
|
334
|
+
>
|
|
335
|
+
auth?: boolean
|
|
336
|
+
permissions?: CorePermissionGroup<PikkuPermission<InferZodOutput<InputSchema>>>
|
|
337
|
+
middleware?: PikkuMiddleware[]
|
|
338
|
+
input: InputSchema
|
|
339
|
+
output?: OutputSchema
|
|
340
|
+
}
|
|
341
|
+
|
|
270
342
|
/**
|
|
271
343
|
* Creates a sessionless Pikku function that doesn't require user authentication.
|
|
272
344
|
* Use this for public endpoints, webhooks, or background tasks.
|
|
273
345
|
*
|
|
274
|
-
*
|
|
275
|
-
*
|
|
346
|
+
* Supports two patterns:
|
|
347
|
+
* 1. Generic types: \`pikkuSessionlessFunc<Input, Output>({ func: ... })\`
|
|
348
|
+
* 2. Zod schemas: \`pikkuSessionlessFunc({ input: z.object(...), func: ... })\`
|
|
349
|
+
*
|
|
350
|
+
* @template In - Input type for the function (inferred from schema if provided)
|
|
351
|
+
* @template Out - Output type for the function (inferred from schema if provided)
|
|
276
352
|
* @param func - Function definition, either direct function or configuration object
|
|
277
353
|
* @returns The normalized configuration object
|
|
278
354
|
*
|
|
279
355
|
* @example
|
|
280
|
-
*
|
|
281
|
-
*
|
|
356
|
+
* \`\`\`typescript
|
|
357
|
+
* // Pattern 1: Using generic types
|
|
358
|
+
* const healthCheck = pikkuSessionlessFunc<void, {status: string}>({
|
|
282
359
|
* func: async ({logger}) => {
|
|
283
|
-
*
|
|
284
|
-
*
|
|
285
|
-
*
|
|
286
|
-
*
|
|
360
|
+
* return { status: 'healthy' }
|
|
361
|
+
* }
|
|
362
|
+
* })
|
|
363
|
+
*
|
|
364
|
+
* // Pattern 2: Using Zod schemas
|
|
365
|
+
* const greetInput = z.object({ name: z.string() })
|
|
366
|
+
* const greetOutput = z.object({ message: z.string() })
|
|
367
|
+
*
|
|
368
|
+
* const greet = pikkuSessionlessFunc({
|
|
369
|
+
* input: greetInput,
|
|
370
|
+
* output: greetOutput,
|
|
371
|
+
* func: async (_services, { name }) => {
|
|
372
|
+
* return { message: \`Hello, \${name}!\` }
|
|
373
|
+
* }
|
|
287
374
|
* })
|
|
288
|
-
*
|
|
375
|
+
* \`\`\`
|
|
289
376
|
*/
|
|
290
|
-
export
|
|
377
|
+
export function pikkuSessionlessFunc<
|
|
378
|
+
InputSchema extends ZodLike,
|
|
379
|
+
OutputSchema extends ZodLike | undefined = undefined
|
|
380
|
+
>(
|
|
381
|
+
config: PikkuFunctionSessionlessConfigWithSchema<InputSchema, OutputSchema, 'session' | 'rpc'>
|
|
382
|
+
): PikkuFunctionConfig<InferZodOutput<InputSchema>, OutputSchema extends ZodLike ? InferZodOutput<OutputSchema> : unknown, 'session' | 'rpc'>
|
|
383
|
+
export function pikkuSessionlessFunc<In, Out = unknown>(
|
|
291
384
|
func:
|
|
292
|
-
| PikkuFunctionSessionless<In, Out>
|
|
293
|
-
|
|
|
294
|
-
)
|
|
385
|
+
| PikkuFunctionSessionless<In, Out, 'session' | 'rpc'>
|
|
386
|
+
| PikkuFunctionConfig<In, Out, 'session' | 'rpc'>
|
|
387
|
+
): PikkuFunctionConfig<In, Out, 'session' | 'rpc'>
|
|
388
|
+
export function pikkuSessionlessFunc(func: any) {
|
|
295
389
|
return typeof func === 'function' ? { func } : func
|
|
296
390
|
}
|
|
297
391
|
|
|
@@ -303,22 +397,61 @@ export const pikkuSessionlessFunc = <In, Out = unknown>(
|
|
|
303
397
|
* @returns The normalized configuration object
|
|
304
398
|
*
|
|
305
399
|
* @example
|
|
306
|
-
*
|
|
400
|
+
* \`\`\`typescript
|
|
307
401
|
* const cleanupTempFiles = pikkuVoidFunc(async ({fileSystem, logger}) => {
|
|
308
402
|
* logger.info('Starting cleanup of temporary files')
|
|
309
403
|
* await fileSystem.deleteDirectory('/tmp/uploads')
|
|
310
404
|
* logger.info('Cleanup completed')
|
|
311
405
|
* })
|
|
312
|
-
*
|
|
406
|
+
* \`\`\`
|
|
313
407
|
*/
|
|
314
408
|
export const pikkuVoidFunc = (
|
|
315
409
|
func:
|
|
316
|
-
| PikkuFunctionSessionless<void, void>
|
|
317
|
-
|
|
|
410
|
+
| PikkuFunctionSessionless<void, void, 'session' | 'rpc'>
|
|
411
|
+
| PikkuFunctionConfig<void, void, 'session' | 'rpc'>
|
|
318
412
|
) => {
|
|
319
413
|
return typeof func === 'function' ? { func } : func
|
|
320
414
|
}
|
|
321
415
|
|
|
416
|
+
/**
|
|
417
|
+
* Creates a wrapper function for external package functions that are exposed via RPC.
|
|
418
|
+
* This allows you to wire external functions to any wiring type (HTTP, queue, etc.)
|
|
419
|
+
* without type compatibility issues.
|
|
420
|
+
*
|
|
421
|
+
* @template Name - The RPC method name (must be a key in FlattenedRPCMap)
|
|
422
|
+
* @param rpcName - The name of the RPC method to invoke
|
|
423
|
+
* @returns A Pikku function that proxies calls to the external RPC method
|
|
424
|
+
*
|
|
425
|
+
* @example
|
|
426
|
+
* \`\`\`typescript
|
|
427
|
+
* // Wire an external function via HTTP
|
|
428
|
+
* wireHTTP({
|
|
429
|
+
* auth: false,
|
|
430
|
+
* method: 'get',
|
|
431
|
+
* route: '/external/hello',
|
|
432
|
+
* func: external('ext:hello'),
|
|
433
|
+
* tags: ['external'],
|
|
434
|
+
* })
|
|
435
|
+
* \`\`\`
|
|
436
|
+
*/
|
|
437
|
+
export const external = <Name extends keyof FlattenedRPCMap>(
|
|
438
|
+
rpcName: Name
|
|
439
|
+
): PikkuFunctionConfig<
|
|
440
|
+
FlattenedRPCMap[Name]['input'],
|
|
441
|
+
FlattenedRPCMap[Name]['output'],
|
|
442
|
+
'session' | 'rpc'
|
|
443
|
+
> => {
|
|
444
|
+
return {
|
|
445
|
+
func: (async (_services: any, data: any, { rpc }: any) => {
|
|
446
|
+
return rpc.invoke(rpcName, data)
|
|
447
|
+
}) as any
|
|
448
|
+
} as PikkuFunctionConfig<
|
|
449
|
+
FlattenedRPCMap[Name]['input'],
|
|
450
|
+
FlattenedRPCMap[Name]['output'],
|
|
451
|
+
'session' | 'rpc'
|
|
452
|
+
>
|
|
453
|
+
}
|
|
454
|
+
|
|
322
455
|
/**
|
|
323
456
|
* Creates a Pikku config factory.
|
|
324
457
|
* Use this to define your application's configuration factory.
|
|
@@ -363,28 +496,28 @@ export const pikkuServices = (
|
|
|
363
496
|
) => func
|
|
364
497
|
|
|
365
498
|
/**
|
|
366
|
-
* Creates a Pikku
|
|
499
|
+
* Creates a Pikku wire services factory.
|
|
367
500
|
* Use this to define services that are created per-request/session.
|
|
368
501
|
*
|
|
369
|
-
* @param func -
|
|
370
|
-
* @returns The
|
|
502
|
+
* @param func - Wire services factory function
|
|
503
|
+
* @returns The wire services factory function
|
|
371
504
|
*
|
|
372
505
|
* @example
|
|
373
506
|
* \`\`\`typescript
|
|
374
|
-
* export const
|
|
507
|
+
* export const createWireServices = pikkuWireServices(async (services, wire) => {
|
|
508
|
+
* const session = await wire.session?.get()
|
|
375
509
|
* return {
|
|
376
510
|
* userCache: new UserCache(session?.userId)
|
|
377
511
|
* }
|
|
378
512
|
* })
|
|
379
513
|
* \`\`\`
|
|
380
514
|
*/
|
|
381
|
-
export const
|
|
515
|
+
export const pikkuWireServices = (
|
|
382
516
|
func: (
|
|
383
517
|
services: SingletonServices,
|
|
384
|
-
|
|
385
|
-
|
|
386
|
-
|
|
387
|
-
) => func
|
|
518
|
+
wire: any
|
|
519
|
+
) => Promise<RequiredWireServices>
|
|
520
|
+
): CreateWireServices => func as unknown as CreateWireServices
|
|
388
521
|
|
|
389
522
|
/**
|
|
390
523
|
* Adds global middleware for a specific tag.
|
|
@@ -410,7 +543,7 @@ export const pikkuSessionServices = (
|
|
|
410
543
|
* \`\`\`
|
|
411
544
|
*/
|
|
412
545
|
export const addMiddleware = (tag: string, middleware: PikkuMiddleware[]) => {
|
|
413
|
-
addMiddlewareCore(tag, middleware as any)
|
|
546
|
+
addMiddlewareCore(tag, middleware as any, ${packageNameValue})
|
|
414
547
|
}
|
|
415
548
|
|
|
416
549
|
/**
|
|
@@ -437,7 +570,7 @@ export const addMiddleware = (tag: string, middleware: PikkuMiddleware[]) => {
|
|
|
437
570
|
* \`\`\`
|
|
438
571
|
*/
|
|
439
572
|
export const addPermission = <In = unknown>(tag: string, permissions: CorePermissionGroup<PikkuPermission<In>> | PikkuPermission<In>[]) => {
|
|
440
|
-
addPermissionCore(tag, permissions as any)
|
|
573
|
+
addPermissionCore(tag, permissions as any, ${packageNameValue})
|
|
441
574
|
}
|
|
442
575
|
`;
|
|
443
576
|
};
|
|
@@ -1,4 +1,4 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Generates the main pikku-types.gen.ts file as a re-export hub
|
|
3
3
|
*/
|
|
4
|
-
export declare const serializePikkuTypesHub: (functionTypesImportPath: string, httpTypesImportPath: string, channelTypesImportPath: string, schedulerTypesImportPath: string, queueTypesImportPath: string, mcpTypesImportPath: string, cliTypesImportPath: string) => string;
|
|
4
|
+
export declare const serializePikkuTypesHub: (functionTypesImportPath: string, httpTypesImportPath: string | null, channelTypesImportPath: string | null, schedulerTypesImportPath: string | null, queueTypesImportPath: string | null, mcpTypesImportPath: string | null, cliTypesImportPath: string | null, forgeTypesImportPath: string | null) => string;
|
|
@@ -1,30 +1,28 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Generates the main pikku-types.gen.ts file as a re-export hub
|
|
3
3
|
*/
|
|
4
|
-
export const serializePikkuTypesHub = (functionTypesImportPath, httpTypesImportPath, channelTypesImportPath, schedulerTypesImportPath, queueTypesImportPath, mcpTypesImportPath, cliTypesImportPath) => {
|
|
4
|
+
export const serializePikkuTypesHub = (functionTypesImportPath, httpTypesImportPath, channelTypesImportPath, schedulerTypesImportPath, queueTypesImportPath, mcpTypesImportPath, cliTypesImportPath, forgeTypesImportPath) => {
|
|
5
|
+
const exports = [
|
|
6
|
+
{
|
|
7
|
+
comment: 'Core function, middleware, and permission types',
|
|
8
|
+
path: functionTypesImportPath,
|
|
9
|
+
},
|
|
10
|
+
{ comment: 'HTTP wiring types', path: httpTypesImportPath },
|
|
11
|
+
{ comment: 'Channel wiring types', path: channelTypesImportPath },
|
|
12
|
+
{ comment: 'Scheduler wiring types', path: schedulerTypesImportPath },
|
|
13
|
+
{ comment: 'Queue wiring types', path: queueTypesImportPath },
|
|
14
|
+
{ comment: 'MCP wiring types', path: mcpTypesImportPath },
|
|
15
|
+
{ comment: 'CLI wiring types', path: cliTypesImportPath },
|
|
16
|
+
{ comment: 'Forge wiring types', path: forgeTypesImportPath },
|
|
17
|
+
];
|
|
18
|
+
const exportStatements = exports
|
|
19
|
+
.filter((e) => e.path)
|
|
20
|
+
.map((e) => `// ${e.comment}\nexport * from '${e.path}'`)
|
|
21
|
+
.join('\n\n');
|
|
5
22
|
return `/**
|
|
6
23
|
* Main type export hub - re-exports all wiring-specific types
|
|
7
24
|
*/
|
|
8
25
|
|
|
9
|
-
|
|
10
|
-
export * from '${functionTypesImportPath}'
|
|
11
|
-
|
|
12
|
-
// HTTP wiring types
|
|
13
|
-
export * from '${httpTypesImportPath}'
|
|
14
|
-
|
|
15
|
-
// Channel wiring types
|
|
16
|
-
export * from '${channelTypesImportPath}'
|
|
17
|
-
|
|
18
|
-
// Scheduler wiring types
|
|
19
|
-
export * from '${schedulerTypesImportPath}'
|
|
20
|
-
|
|
21
|
-
// Queue wiring types
|
|
22
|
-
export * from '${queueTypesImportPath}'
|
|
23
|
-
|
|
24
|
-
// MCP wiring types
|
|
25
|
-
export * from '${mcpTypesImportPath}'
|
|
26
|
-
|
|
27
|
-
// CLI wiring types
|
|
28
|
-
export * from '${cliTypesImportPath}'
|
|
26
|
+
${exportStatements}
|
|
29
27
|
`;
|
|
30
28
|
};
|
|
@@ -2,7 +2,7 @@ import { pikkuState } from '@pikku/core';
|
|
|
2
2
|
import _convertSchema from '@openapi-contrib/json-schema-to-openapi-schema';
|
|
3
3
|
const convertSchema = 'default' in _convertSchema ? _convertSchema.default : _convertSchema;
|
|
4
4
|
const getErrorResponseForConstructorName = (constructorName) => {
|
|
5
|
-
const errors = Array.from(pikkuState('misc', 'errors').entries());
|
|
5
|
+
const errors = Array.from(pikkuState(null, 'misc', 'errors').entries());
|
|
6
6
|
const foundError = errors.find(([e]) => e.name === constructorName);
|
|
7
7
|
if (foundError) {
|
|
8
8
|
return foundError[1];
|
|
@@ -38,7 +38,7 @@ export async function generateOpenAPISpec(logger, functionsMeta, httpMeta, schem
|
|
|
38
38
|
const paths = {};
|
|
39
39
|
for (const routeMeta of Object.values(httpMeta)) {
|
|
40
40
|
for (const meta of Object.values(routeMeta)) {
|
|
41
|
-
const { route, method, inputTypes, pikkuFuncName, params, query,
|
|
41
|
+
const { route, method, inputTypes, pikkuFuncName, params, query, errors, description, tags, } = meta;
|
|
42
42
|
const functionMeta = functionsMeta[pikkuFuncName];
|
|
43
43
|
if (!functionMeta) {
|
|
44
44
|
logger.error(`• No function metadata found for '${pikkuFuncName}' in route '${route}'.`);
|
|
@@ -50,7 +50,7 @@ export async function generateOpenAPISpec(logger, functionsMeta, httpMeta, schem
|
|
|
50
50
|
paths[path] = {};
|
|
51
51
|
}
|
|
52
52
|
const responses = {};
|
|
53
|
-
|
|
53
|
+
errors?.forEach((error) => {
|
|
54
54
|
const errorResponse = getErrorResponseForConstructorName(error);
|
|
55
55
|
if (errorResponse) {
|
|
56
56
|
responses[errorResponse.status] = {
|
|
@@ -59,9 +59,9 @@ export async function generateOpenAPISpec(logger, functionsMeta, httpMeta, schem
|
|
|
59
59
|
}
|
|
60
60
|
});
|
|
61
61
|
const operation = {
|
|
62
|
-
description:
|
|
62
|
+
description: description ||
|
|
63
63
|
`This endpoint handles the ${method.toUpperCase()} request for the route ${route}.`,
|
|
64
|
-
tags:
|
|
64
|
+
tags: tags || [route.split('/')[1] || 'default'],
|
|
65
65
|
parameters: [],
|
|
66
66
|
responses: {
|
|
67
67
|
...responses,
|