@pikku/cli 0.11.2 → 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 +63 -6
- package/.pikku/channel/pikku-channels-map.gen.d.ts +4 -4
- 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 +1 -1
- package/.pikku/cli/pikku-cli-client.gen.ts +1 -1
- package/.pikku/cli/pikku-cli-types.gen.ts +1 -1
- package/.pikku/cli/pikku-cli-wirings-meta.gen.json +2 -1
- package/.pikku/cli/pikku-cli-wirings-meta.gen.ts +2 -2
- package/.pikku/cli/pikku-cli-wirings.gen.ts +1 -1
- package/.pikku/cli/pikku-cli.gen.ts +1 -1
- package/.pikku/forge/pikku-forge-types.gen.ts +83 -0
- package/.pikku/function/pikku-function-types.gen.ts +181 -35
- package/.pikku/function/pikku-functions-meta-verbose.gen.json +1030 -0
- package/.pikku/function/pikku-functions-meta.gen.json +88 -420
- package/.pikku/function/pikku-functions-meta.gen.ts +2 -2
- package/.pikku/http/pikku-http-types.gen.ts +19 -3
- package/.pikku/http/pikku-http-wirings-map.gen.d.ts +4 -4
- 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 +69 -17
- package/.pikku/mcp/pikku-mcp-wirings-meta.gen.ts +4 -4
- package/.pikku/mcp/pikku-mcp-wirings.gen.ts +1 -1
- package/.pikku/pikku-bootstrap.gen.ts +7 -9
- package/.pikku/pikku-services.gen.ts +3 -2
- package/.pikku/pikku-types.gen.ts +4 -1
- package/.pikku/pikku-websocket.gen.ts +1 -1
- package/.pikku/queue/pikku-queue-types.gen.ts +1 -1
- package/.pikku/queue/pikku-queue-workers-wirings-map.gen.d.ts +4 -4
- package/.pikku/queue/pikku-queue-workers-wirings-meta.gen.ts +2 -2
- package/.pikku/queue/pikku-queue-workers-wirings.gen.ts +1 -1
- package/.pikku/rpc/pikku-remote-rpc-workers.gen.ts +4 -1
- package/.pikku/rpc/pikku-rpc-wirings-map.gen.d.ts +12 -7
- package/.pikku/rpc/pikku-rpc-wirings-map.internal.gen.d.ts +15 -9
- package/.pikku/scheduler/pikku-scheduler-types.gen.ts +1 -1
- package/.pikku/scheduler/pikku-schedulers-wirings-meta.gen.ts +2 -2
- package/.pikku/scheduler/pikku-schedulers-wirings.gen.ts +1 -1
- package/.pikku/schemas/register.gen.ts +9 -1
- 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 +11 -6
- package/.pikku/services/getInspectorState.gen.json +2 -2
- package/.pikku/services/jwt.gen.json +2 -2
- package/.pikku/services/logger.gen.json +2 -2
- package/.pikku/services/queueService.gen.json +2 -2
- package/.pikku/services/schedulerService.gen.json +2 -2
- package/.pikku/services/schema.gen.json +2 -2
- package/.pikku/services/secrets.gen.json +13 -0
- package/.pikku/services/variables.gen.json +2 -2
- package/.pikku/services/workflowService.gen.json +6 -6
- package/.pikku/workflow/pikku-workflow-map.gen.d.ts +2 -36
- package/.pikku/workflow/pikku-workflow-types.gen.ts +297 -45
- package/.pikku/workflow/pikku-workflow-wirings-meta.gen.ts +5 -4
- package/.pikku/workflow/pikku-workflow-wirings.gen.ts +1 -6
- package/CHANGELOG.md +23 -1
- package/cli.schema.json +1 -1
- package/dist/.pikku/channel/pikku-channel-types.gen.d.ts +47 -5
- 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.gen.d.ts +1 -1
- package/dist/.pikku/channel/pikku-channels.gen.js +1 -1
- package/dist/.pikku/cli/pikku-cli-channel.js +1 -1
- package/dist/.pikku/cli/pikku-cli-client.gen.d.ts +1 -1
- package/dist/.pikku/cli/pikku-cli-client.gen.js +1 -1
- package/dist/.pikku/cli/pikku-cli-types.gen.d.ts +1 -1
- package/dist/.pikku/cli/pikku-cli-types.gen.js +1 -1
- package/dist/.pikku/cli/pikku-cli-wirings-meta.gen.js +2 -2
- package/dist/.pikku/cli/pikku-cli-wirings-meta.gen.json +2 -1
- package/dist/.pikku/cli/pikku-cli-wirings.gen.d.ts +1 -1
- package/dist/.pikku/cli/pikku-cli-wirings.gen.js +1 -1
- package/dist/.pikku/cli/pikku-cli.gen.d.ts +1 -1
- package/dist/.pikku/cli/pikku-cli.gen.js +1 -1
- 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 +123 -31
- package/dist/.pikku/function/pikku-function-types.gen.js +37 -51
- package/dist/.pikku/function/pikku-functions-meta.gen.js +2 -2
- package/dist/.pikku/function/pikku-functions-meta.gen.json +88 -420
- package/dist/.pikku/http/pikku-http-types.gen.d.ts +18 -3
- 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 +54 -14
- package/dist/.pikku/mcp/pikku-mcp-types.gen.js +7 -31
- package/dist/.pikku/mcp/pikku-mcp-wirings-meta.gen.js +4 -4
- 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 -9
- package/dist/.pikku/pikku-bootstrap.gen.js +7 -9
- package/dist/.pikku/pikku-services.gen.d.ts +3 -2
- package/dist/.pikku/pikku-services.gen.js +1 -0
- 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 +1 -1
- package/dist/.pikku/queue/pikku-queue-types.gen.js +1 -1
- package/dist/.pikku/queue/pikku-queue-workers-wirings-meta.gen.js +2 -2
- 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 +4 -1
- package/dist/.pikku/rpc/pikku-remote-rpc-workers.gen.js +4 -1
- package/dist/.pikku/scheduler/pikku-scheduler-types.gen.d.ts +1 -1
- package/dist/.pikku/scheduler/pikku-scheduler-types.gen.js +1 -1
- package/dist/.pikku/scheduler/pikku-schedulers-wirings-meta.gen.js +2 -2
- 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 +5 -1
- 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 +207 -37
- package/dist/.pikku/workflow/pikku-workflow-types.gen.js +104 -28
- package/dist/.pikku/workflow/pikku-workflow-wirings-meta.gen.js +3 -3
- package/dist/.pikku/workflow/pikku-workflow-wirings.gen.d.ts +2 -6
- package/dist/.pikku/workflow/pikku-workflow-wirings.gen.js +2 -6
- package/dist/src/functions/commands/all.js +117 -79
- package/dist/src/functions/commands/bootstrap.js +2 -9
- package/dist/src/functions/runtimes/nextjs/pikku-command-nextjs.js +0 -1
- package/dist/src/functions/runtimes/nextjs/serialize-nextjs-backend-wrapper.js +49 -35
- package/dist/src/functions/runtimes/nextjs/serialize-nextjs-http-wrapper.js +49 -35
- package/dist/src/functions/wirings/channels/pikku-channels.js +1 -1
- package/dist/src/functions/wirings/channels/pikku-command-channels.js +18 -2
- package/dist/src/functions/wirings/channels/serialize-channel-types.js +62 -5
- package/dist/src/functions/wirings/channels/serialize-typed-channel-map.js +1 -2
- package/dist/src/functions/wirings/cli/pikku-command-cli.js +10 -2
- 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 +1 -1
- package/dist/src/functions/wirings/functions/pikku-command-function-types.js +7 -2
- package/dist/src/functions/wirings/functions/pikku-command-functions.js +33 -18
- package/dist/src/functions/wirings/functions/pikku-command-services.js +1 -1
- 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 +181 -34
- 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 +1 -1
- 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 +1 -1
- package/dist/src/functions/wirings/http/serialize-http-types.js +18 -2
- package/dist/src/functions/wirings/http/serialize-typed-http-map.js +33 -8
- package/dist/src/functions/wirings/mcp/pikku-command-mcp.js +15 -6
- package/dist/src/functions/wirings/mcp/serialize-mcp-json.js +3 -2
- package/dist/src/functions/wirings/mcp/serialize-mcp-types.js +68 -16
- package/dist/src/functions/wirings/middleware/pikku-command-middleware.js +5 -2
- 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 +10 -2
- package/dist/src/functions/wirings/queue/pikku-queue.js +1 -9
- package/dist/src/functions/wirings/queue/serialize-queue-map.js +20 -3
- package/dist/src/functions/wirings/queue/serialize-queue-meta.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 +1 -1
- package/dist/src/functions/wirings/rpc/serialize-remote-rpc.js +3 -0
- package/dist/src/functions/wirings/rpc/serialize-rpc-wrapper.js +1 -1
- 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 +10 -1
- package/dist/src/functions/wirings/scheduler/serialize-scheduler-meta.js +1 -1
- package/dist/src/functions/wirings/workflow/pikku-command-workflow.js +56 -18
- 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 -3
- package/dist/src/functions/wirings/workflow/serialize-workflow-meta.js +43 -18
- 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 +3 -1
- package/dist/src/functions/wirings/workflow/serialize-workflow-types.js +299 -45
- package/dist/src/functions/wirings/workflow/serialize-workflow-workers.d.ts +1 -1
- package/dist/src/functions/wirings/workflow/serialize-workflow-workers.js +14 -27
- package/dist/src/services.js +4 -1
- 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 +37 -9
- 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 +7 -4
- package/src/functions/commands/all.ts +144 -97
- package/src/functions/commands/bootstrap.ts +2 -10
- package/src/functions/runtimes/nextjs/pikku-command-nextjs.ts +0 -1
- package/src/functions/runtimes/nextjs/serialize-nextjs-backend-wrapper.ts +49 -35
- package/src/functions/runtimes/nextjs/serialize-nextjs-http-wrapper.ts +49 -35
- package/src/functions/wirings/channels/pikku-channels.ts +1 -1
- package/src/functions/wirings/channels/pikku-command-channels.ts +46 -3
- package/src/functions/wirings/channels/serialize-channel-types.ts +62 -5
- package/src/functions/wirings/channels/serialize-typed-channel-map.ts +3 -2
- package/src/functions/wirings/cli/pikku-command-cli.ts +21 -2
- 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 +3 -2
- package/src/functions/wirings/functions/pikku-command-function-types.ts +17 -10
- package/src/functions/wirings/functions/pikku-command-functions.ts +47 -37
- package/src/functions/wirings/functions/pikku-command-services.ts +1 -1
- 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 +182 -34
- package/src/functions/wirings/functions/serialize-pikku-types-hub.ts +27 -26
- package/src/functions/wirings/http/openapi-spec-generator.ts +1 -1
- 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 +1 -1
- package/src/functions/wirings/http/serialize-http-types.ts +18 -2
- package/src/functions/wirings/http/serialize-typed-http-map.ts +32 -8
- package/src/functions/wirings/mcp/pikku-command-mcp.ts +32 -10
- package/src/functions/wirings/mcp/serialize-mcp-json.ts +8 -6
- package/src/functions/wirings/mcp/serialize-mcp-types.ts +68 -16
- package/src/functions/wirings/middleware/pikku-command-middleware.ts +6 -2
- 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/queue/pikku-command-queue.ts +22 -2
- package/src/functions/wirings/queue/pikku-queue.ts +1 -10
- package/src/functions/wirings/queue/serialize-queue-map.ts +18 -3
- package/src/functions/wirings/queue/serialize-queue-meta.ts +1 -1
- package/src/functions/wirings/rpc/pikku-command-rpc-map.ts +7 -4
- package/src/functions/wirings/rpc/pikku-command-rpc.ts +1 -1
- package/src/functions/wirings/rpc/serialize-remote-rpc.ts +3 -0
- package/src/functions/wirings/rpc/serialize-rpc-wrapper.ts +1 -1
- package/src/functions/wirings/rpc/serialize-typed-rpc-map.ts +74 -8
- package/src/functions/wirings/scheduler/pikku-command-scheduler.ts +22 -1
- package/src/functions/wirings/scheduler/serialize-scheduler-meta.ts +1 -1
- package/src/functions/wirings/workflow/pikku-command-workflow.ts +104 -37
- package/src/functions/wirings/workflow/serialize-workflow-map.ts +38 -40
- package/src/functions/wirings/workflow/serialize-workflow-meta.ts +66 -26
- package/src/functions/wirings/workflow/serialize-workflow-registration.ts +83 -0
- package/src/functions/wirings/workflow/serialize-workflow-types.ts +299 -45
- package/src/functions/wirings/workflow/serialize-workflow-workers.ts +14 -27
- package/src/services.ts +8 -1
- 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 +51 -18
- package/src/utils/schema-generator.ts +185 -22
- package/src/utils/strip-verbose-meta.ts +254 -0
- package/types/config.d.ts +37 -3
- package/.pikku/function/pikku-functions-meta.min.gen.json +0 -212
- package/.pikku/function/pikku-functions-meta.min.gen.ts +0 -6
- package/dist/.pikku/function/pikku-functions-meta.min.gen.d.ts +0 -1
- package/dist/.pikku/function/pikku-functions-meta.min.gen.js +0 -6
- package/dist/.pikku/function/pikku-functions-meta.min.gen.json +0 -212
- 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 -13
- package/dist/src/functions/wirings/workflow/serialize-workflow-wirings.d.ts +0 -8
- package/dist/src/functions/wirings/workflow/serialize-workflow-wirings.js +0 -30
- package/src/functions/wirings/workflow/pikku-command-workflow-map.ts +0 -24
- package/src/functions/wirings/workflow/pikku-command-workflow-types.ts +0 -29
- package/src/functions/wirings/workflow/serialize-workflow-wirings.ts +0 -47
- /package/.pikku/{workflow/pikku-workflow-wirings-meta.gen.json → channel/pikku-channels-meta.gen.json} +0 -0
- /package/dist/.pikku/{workflow/pikku-workflow-wirings-meta.gen.json → channel/pikku-channels-meta.gen.json} +0 -0
|
@@ -1,31 +1,46 @@
|
|
|
1
1
|
import { pikkuSessionlessFunc } from '../../../../.pikku/pikku-types.gen.js';
|
|
2
2
|
import { writeFileInDir } from '../../../utils/file-writer.js';
|
|
3
3
|
import { logCommandInfoAndTime } from '../../../middleware/log-command-info-and-time.js';
|
|
4
|
-
import {
|
|
4
|
+
import { serializeFunctionImports } from './serialize-function-imports.js';
|
|
5
5
|
import { getFileImportRelativePath } from '../../../utils/file-import-path.js';
|
|
6
|
+
import { stripVerboseFields, hasVerboseFields, } from '../../../utils/strip-verbose-meta.js';
|
|
6
7
|
export const pikkuFunctions = pikkuSessionlessFunc({
|
|
7
8
|
func: async ({ logger, config, getInspectorState }) => {
|
|
8
9
|
const { functions, rpc } = await getInspectorState();
|
|
9
|
-
const { functionsMetaFile, functionsMetaJsonFile,
|
|
10
|
-
|
|
11
|
-
const
|
|
10
|
+
const { functionsMetaFile, functionsMetaJsonFile, functionsFile, packageMappings, schema, } = config;
|
|
11
|
+
// Write minimal JSON (runtime-only fields)
|
|
12
|
+
const minimalMeta = stripVerboseFields(functions.meta);
|
|
13
|
+
await writeFileInDir(logger, functionsMetaJsonFile, JSON.stringify(minimalMeta, null, 2));
|
|
14
|
+
// Write verbose JSON only if it has additional fields
|
|
15
|
+
if (hasVerboseFields(functions.meta)) {
|
|
16
|
+
const verbosePath = functionsMetaJsonFile.replace(/\.gen\.json$/, '-verbose.gen.json');
|
|
17
|
+
await writeFileInDir(logger, verbosePath, JSON.stringify(functions.meta, null, 2));
|
|
18
|
+
}
|
|
19
|
+
const jsonImportPath = getFileImportRelativePath(functionsMetaFile, functionsMetaJsonFile, packageMappings);
|
|
12
20
|
const supportsImportAttributes = schema?.supportsImportAttributes ?? false;
|
|
13
|
-
const
|
|
14
|
-
? `import metaData from '${
|
|
15
|
-
: `import metaData from '${
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
await writeFileInDir(logger, functionsMetaMinFile, `import { pikkuState, FunctionsRuntimeMeta } from '@pikku/core'\n${minImportStatement}\npikkuState('function', 'meta', metaData as FunctionsRuntimeMeta)`);
|
|
21
|
+
const importStatement = supportsImportAttributes
|
|
22
|
+
? `import metaData from '${jsonImportPath}' with { type: 'json' }`
|
|
23
|
+
: `import metaData from '${jsonImportPath}'`;
|
|
24
|
+
const packageName = config.externalPackageName
|
|
25
|
+
? `'${config.externalPackageName}'`
|
|
26
|
+
: 'null';
|
|
27
|
+
await writeFileInDir(logger, functionsMetaFile, `import { pikkuState, FunctionsMeta } from '@pikku/core'\n${importStatement}\npikkuState(${packageName}, 'function', 'meta', metaData as FunctionsMeta)`);
|
|
28
|
+
// For external packages, register ALL functions (they'll be invoked by consumers)
|
|
29
|
+
// For main packages, only register functions that are invoked via internal RPCs
|
|
30
|
+
const isExternalPackage = !!config.externalPackageName;
|
|
24
31
|
const hasRPCs = rpc.exposedFiles.size > 0 || rpc.internalFiles.size > 0;
|
|
25
|
-
|
|
26
|
-
|
|
32
|
+
const hasFunctions = functions.files.size > 0;
|
|
33
|
+
const shouldGenerateFunctionsFile = isExternalPackage
|
|
34
|
+
? hasFunctions
|
|
35
|
+
: hasRPCs;
|
|
36
|
+
if (shouldGenerateFunctionsFile) {
|
|
37
|
+
// For external packages, use all function files; for main packages, use internal RPC files
|
|
38
|
+
const filesToRegister = isExternalPackage
|
|
39
|
+
? functions.files
|
|
40
|
+
: rpc.internalFiles;
|
|
41
|
+
await writeFileInDir(logger, functionsFile, serializeFunctionImports(functionsFile, filesToRegister, functions.meta, packageMappings, config.externalPackageName));
|
|
27
42
|
}
|
|
28
|
-
return
|
|
43
|
+
return shouldGenerateFunctionsFile;
|
|
29
44
|
},
|
|
30
45
|
middleware: [
|
|
31
46
|
logCommandInfoAndTime({
|
|
@@ -30,7 +30,7 @@ export const serializeServicesMap = (allSingletonServices, allWireServices, requ
|
|
|
30
30
|
}
|
|
31
31
|
});
|
|
32
32
|
// Services that are always required internally by the framework
|
|
33
|
-
const defaultServices = ['config', 'logger', 'variables', 'schema'];
|
|
33
|
+
const defaultServices = ['config', 'logger', 'variables', 'schema', 'secrets'];
|
|
34
34
|
defaultServices.forEach((service) => usedServices.add(service));
|
|
35
35
|
// Create singleton services map: all singleton services with true/false based on usage
|
|
36
36
|
const singletonServicesMap = {};
|
|
@@ -5,8 +5,8 @@ import { logCommandInfoAndTime } from '../../../middleware/log-command-info-and-
|
|
|
5
5
|
import { serializePikkuTypesHub } from './serialize-pikku-types-hub.js';
|
|
6
6
|
export const pikkuFunctionTypes = pikkuSessionlessFunc({
|
|
7
7
|
func: async ({ logger, config }) => {
|
|
8
|
-
const { typesDeclarationFile: typesFile, packageMappings, functionTypesFile, httpTypesFile, channelsTypesFile, schedulersTypesFile, queueTypesFile, mcpTypesFile, cliTypesFile, } = config;
|
|
9
|
-
const content = serializePikkuTypesHub(getFileImportRelativePath(typesFile, functionTypesFile, packageMappings), getFileImportRelativePath(typesFile, httpTypesFile, packageMappings), getFileImportRelativePath(typesFile, channelsTypesFile, packageMappings), getFileImportRelativePath(typesFile, schedulersTypesFile, packageMappings), getFileImportRelativePath(typesFile, queueTypesFile, packageMappings), getFileImportRelativePath(typesFile, mcpTypesFile, packageMappings), getFileImportRelativePath(typesFile, cliTypesFile, packageMappings));
|
|
8
|
+
const { typesDeclarationFile: typesFile, packageMappings, functionTypesFile, httpTypesFile, channelsTypesFile, schedulersTypesFile, queueTypesFile, mcpTypesFile, cliTypesFile, forgeTypesFile, } = config;
|
|
9
|
+
const content = serializePikkuTypesHub(getFileImportRelativePath(typesFile, functionTypesFile, packageMappings), getFileImportRelativePath(typesFile, httpTypesFile, packageMappings), getFileImportRelativePath(typesFile, channelsTypesFile, packageMappings), getFileImportRelativePath(typesFile, schedulersTypesFile, packageMappings), getFileImportRelativePath(typesFile, queueTypesFile, packageMappings), getFileImportRelativePath(typesFile, mcpTypesFile, packageMappings), getFileImportRelativePath(typesFile, cliTypesFile, packageMappings), getFileImportRelativePath(typesFile, forgeTypesFile, packageMappings));
|
|
10
10
|
await writeFileInDir(logger, typesFile, content);
|
|
11
11
|
},
|
|
12
12
|
middleware: [
|
|
@@ -1,14 +1,15 @@
|
|
|
1
1
|
import { pikkuSessionlessFunc } from '../../../../.pikku/pikku-types.gen.js';
|
|
2
|
-
import { saveSchemas, generateSchemas, } from '../../../utils/schema-generator.js';
|
|
2
|
+
import { saveSchemas, generateSchemas, generateZodSchemas, } from '../../../utils/schema-generator.js';
|
|
3
3
|
import { logCommandInfoAndTime } from '../../../middleware/log-command-info-and-time.js';
|
|
4
4
|
/**
|
|
5
|
-
* Generate JSON schemas from TypeScript types
|
|
5
|
+
* Generate JSON schemas from TypeScript types and Zod schemas
|
|
6
6
|
*/
|
|
7
7
|
export const pikkuSchemas = pikkuSessionlessFunc({
|
|
8
8
|
func: async ({ logger, config, getInspectorState }) => {
|
|
9
9
|
const visitState = await getInspectorState();
|
|
10
|
-
const schemas = await generateSchemas(logger, config.tsconfig, visitState.functions.typesMap, visitState.functions.meta, visitState.http.meta, config.schemasFromTypes, config.schema?.additionalProperties);
|
|
11
|
-
await
|
|
10
|
+
const schemas = await generateSchemas(logger, config.tsconfig, visitState.functions.typesMap, visitState.functions.meta, visitState.http.meta, config.schemasFromTypes, config.schema?.additionalProperties, visitState.zodLookup);
|
|
11
|
+
const zodSchemas = await generateZodSchemas(logger, visitState.zodLookup, visitState.functions.typesMap);
|
|
12
|
+
await saveSchemas(logger, config.schemaDirectory, { ...schemas, ...zodSchemas }, visitState.functions.typesMap, visitState.functions.meta, config.schema?.supportsImportAttributes || true, config.schemasFromTypes, visitState.zodLookup, config.externalPackageName || null);
|
|
12
13
|
return true;
|
|
13
14
|
},
|
|
14
15
|
middleware: [
|
|
@@ -2,5 +2,7 @@ import { FunctionsMeta, FunctionsRuntimeMeta } from '@pikku/core';
|
|
|
2
2
|
export declare const serializeFunctionImports: (outputPath: string, functionsMap: Map<string, {
|
|
3
3
|
path: string;
|
|
4
4
|
exportedName: string;
|
|
5
|
-
}>, functionsMeta: FunctionsMeta, packageMappings?: Record<string, string
|
|
5
|
+
}>, functionsMeta: FunctionsMeta, packageMappings?: Record<string, string>,
|
|
6
|
+
/** Package name for external packages (e.g., '@pikku/templates-function-external') */
|
|
7
|
+
externalPackageName?: string) => string;
|
|
6
8
|
export declare const generateRuntimeMeta: (functions: FunctionsMeta) => FunctionsRuntimeMeta;
|
|
@@ -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, wireServicesTypeImport: string, wireServicesTypeName: string, rpcMapTypeImport: string, requiredServicesTypeImport: string, configTypeImport: string) => 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,12 +1,13 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Generates core function, middleware, and permission type definitions
|
|
3
3
|
*/
|
|
4
|
-
export const serializeFunctionTypes = (userSessionTypeImport, userSessionTypeName, singletonServicesTypeImport, singletonServicesTypeName, wireServicesTypeImport, wireServicesTypeName, rpcMapTypeImport, requiredServicesTypeImport, configTypeImport) => {
|
|
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, PikkuWire, PickRequired } 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
12
|
|
|
12
13
|
${userSessionTypeImport}
|
|
@@ -208,6 +209,11 @@ export type PikkuFunction<
|
|
|
208
209
|
PickRequired<PikkuWire<In, Out, true, Session, TypedPikkuRPC, null, any>, RequiredWires>
|
|
209
210
|
>
|
|
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
|
|
216
|
+
|
|
211
217
|
/**
|
|
212
218
|
* Configuration object for Pikku functions with optional middleware, permissions, tags, and documentation.
|
|
213
219
|
* This type wraps CorePikkuFunctionConfig with the user's custom types.
|
|
@@ -220,64 +226,166 @@ export type PikkuFunctionConfig<
|
|
|
220
226
|
In = unknown,
|
|
221
227
|
Out = unknown,
|
|
222
228
|
RequiredWires extends keyof PikkuWire = never,
|
|
223
|
-
PikkuFunc extends PikkuFunction<In, Out, RequiredWires> | PikkuFunctionSessionless<In, Out, RequiredWires> = PikkuFunction<In, Out, RequiredWires> | PikkuFunctionSessionless<In, Out, RequiredWires
|
|
224
|
-
|
|
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
|
+
}
|
|
225
263
|
|
|
226
264
|
/**
|
|
227
265
|
* Creates a Pikku function that can be either session-aware or sessionless.
|
|
228
266
|
* This is the main function wrapper for creating API endpoints.
|
|
229
267
|
*
|
|
230
|
-
*
|
|
231
|
-
*
|
|
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)
|
|
232
274
|
* @param func - Function definition, either direct function or configuration object
|
|
233
275
|
* @returns The normalized configuration object
|
|
234
276
|
*
|
|
235
277
|
* @example
|
|
236
|
-
*
|
|
237
|
-
*
|
|
238
|
-
*
|
|
239
|
-
*
|
|
240
|
-
* logger.info('Creating user', input.name)
|
|
278
|
+
* \`\`\`typescript
|
|
279
|
+
* // Pattern 1: Using generic types
|
|
280
|
+
* const createUser = pikkuFunc<{name: string, email: string}, {id: number}>({
|
|
281
|
+
* func: async ({db}, input) => {
|
|
241
282
|
* const user = await db.users.create(input)
|
|
242
|
-
* return {id: user.id
|
|
243
|
-
* }
|
|
244
|
-
* auth: true
|
|
283
|
+
* return { id: user.id }
|
|
284
|
+
* }
|
|
245
285
|
* })
|
|
246
|
-
*
|
|
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
|
+
* \`\`\`
|
|
247
301
|
*/
|
|
248
|
-
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>(
|
|
249
309
|
func:
|
|
250
310
|
| PikkuFunction<In, Out, 'session' | 'rpc'>
|
|
251
311
|
| PikkuFunctionConfig<In, Out, 'session' | 'rpc'>
|
|
252
|
-
)
|
|
312
|
+
): PikkuFunctionConfig<In, Out, 'session' | 'rpc'>
|
|
313
|
+
export function pikkuFunc(func: any) {
|
|
253
314
|
return typeof func === 'function' ? { func } : func
|
|
254
315
|
}
|
|
255
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
|
+
|
|
256
342
|
/**
|
|
257
343
|
* Creates a sessionless Pikku function that doesn't require user authentication.
|
|
258
344
|
* Use this for public endpoints, webhooks, or background tasks.
|
|
259
345
|
*
|
|
260
|
-
*
|
|
261
|
-
*
|
|
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)
|
|
262
352
|
* @param func - Function definition, either direct function or configuration object
|
|
263
353
|
* @returns The normalized configuration object
|
|
264
354
|
*
|
|
265
355
|
* @example
|
|
266
|
-
*
|
|
267
|
-
*
|
|
268
|
-
*
|
|
269
|
-
*
|
|
270
|
-
* return {status: 'healthy'
|
|
271
|
-
* }
|
|
272
|
-
*
|
|
356
|
+
* \`\`\`typescript
|
|
357
|
+
* // Pattern 1: Using generic types
|
|
358
|
+
* const healthCheck = pikkuSessionlessFunc<void, {status: string}>({
|
|
359
|
+
* func: async ({logger}) => {
|
|
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
|
+
* }
|
|
273
374
|
* })
|
|
274
|
-
*
|
|
375
|
+
* \`\`\`
|
|
275
376
|
*/
|
|
276
|
-
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>(
|
|
277
384
|
func:
|
|
278
385
|
| PikkuFunctionSessionless<In, Out, 'session' | 'rpc'>
|
|
279
386
|
| PikkuFunctionConfig<In, Out, 'session' | 'rpc'>
|
|
280
|
-
)
|
|
387
|
+
): PikkuFunctionConfig<In, Out, 'session' | 'rpc'>
|
|
388
|
+
export function pikkuSessionlessFunc(func: any) {
|
|
281
389
|
return typeof func === 'function' ? { func } : func
|
|
282
390
|
}
|
|
283
391
|
|
|
@@ -289,13 +397,13 @@ export const pikkuSessionlessFunc = <In, Out = unknown>(
|
|
|
289
397
|
* @returns The normalized configuration object
|
|
290
398
|
*
|
|
291
399
|
* @example
|
|
292
|
-
*
|
|
400
|
+
* \`\`\`typescript
|
|
293
401
|
* const cleanupTempFiles = pikkuVoidFunc(async ({fileSystem, logger}) => {
|
|
294
402
|
* logger.info('Starting cleanup of temporary files')
|
|
295
403
|
* await fileSystem.deleteDirectory('/tmp/uploads')
|
|
296
404
|
* logger.info('Cleanup completed')
|
|
297
405
|
* })
|
|
298
|
-
*
|
|
406
|
+
* \`\`\`
|
|
299
407
|
*/
|
|
300
408
|
export const pikkuVoidFunc = (
|
|
301
409
|
func:
|
|
@@ -305,6 +413,45 @@ export const pikkuVoidFunc = (
|
|
|
305
413
|
return typeof func === 'function' ? { func } : func
|
|
306
414
|
}
|
|
307
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
|
+
|
|
308
455
|
/**
|
|
309
456
|
* Creates a Pikku config factory.
|
|
310
457
|
* Use this to define your application's configuration factory.
|
|
@@ -370,7 +517,7 @@ export const pikkuWireServices = (
|
|
|
370
517
|
services: SingletonServices,
|
|
371
518
|
wire: any
|
|
372
519
|
) => Promise<RequiredWireServices>
|
|
373
|
-
) => func
|
|
520
|
+
): CreateWireServices => func as unknown as CreateWireServices
|
|
374
521
|
|
|
375
522
|
/**
|
|
376
523
|
* Adds global middleware for a specific tag.
|
|
@@ -396,7 +543,7 @@ export const pikkuWireServices = (
|
|
|
396
543
|
* \`\`\`
|
|
397
544
|
*/
|
|
398
545
|
export const addMiddleware = (tag: string, middleware: PikkuMiddleware[]) => {
|
|
399
|
-
addMiddlewareCore(tag, middleware as any)
|
|
546
|
+
addMiddlewareCore(tag, middleware as any, ${packageNameValue})
|
|
400
547
|
}
|
|
401
548
|
|
|
402
549
|
/**
|
|
@@ -423,7 +570,7 @@ export const addMiddleware = (tag: string, middleware: PikkuMiddleware[]) => {
|
|
|
423
570
|
* \`\`\`
|
|
424
571
|
*/
|
|
425
572
|
export const addPermission = <In = unknown>(tag: string, permissions: CorePermissionGroup<PikkuPermission<In>> | PikkuPermission<In>[]) => {
|
|
426
|
-
addPermissionCore(tag, permissions as any)
|
|
573
|
+
addPermissionCore(tag, permissions as any, ${packageNameValue})
|
|
427
574
|
}
|
|
428
575
|
`;
|
|
429
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];
|
|
@@ -2,13 +2,29 @@ import { pikkuSessionlessFunc } from '../../../../.pikku/pikku-types.gen.js';
|
|
|
2
2
|
import { serializeFileImports } from '../../../utils/file-imports-serializer.js';
|
|
3
3
|
import { writeFileInDir } from '../../../utils/file-writer.js';
|
|
4
4
|
import { logCommandInfoAndTime } from '../../../middleware/log-command-info-and-time.js';
|
|
5
|
+
import { getFileImportRelativePath } from '../../../utils/file-import-path.js';
|
|
6
|
+
import { stripVerboseFields, hasVerboseFields, } from '../../../utils/strip-verbose-meta.js';
|
|
5
7
|
export const pikkuHTTP = pikkuSessionlessFunc({
|
|
6
8
|
func: async ({ logger, config, getInspectorState }) => {
|
|
7
9
|
const visitState = await getInspectorState();
|
|
8
|
-
const { httpWiringsFile, httpWiringMetaFile, packageMappings } = config;
|
|
10
|
+
const { httpWiringsFile, httpWiringMetaFile, httpWiringMetaJsonFile, packageMappings, schema, } = config;
|
|
9
11
|
const { http } = visitState;
|
|
10
12
|
await writeFileInDir(logger, httpWiringsFile, serializeFileImports('wireHTTP', httpWiringsFile, http.files, packageMappings));
|
|
11
|
-
|
|
13
|
+
// Write minimal JSON (runtime-only fields)
|
|
14
|
+
const minimalMeta = stripVerboseFields(http.meta);
|
|
15
|
+
await writeFileInDir(logger, httpWiringMetaJsonFile, JSON.stringify(minimalMeta, null, 2));
|
|
16
|
+
// Write verbose JSON only if it has additional fields
|
|
17
|
+
if (hasVerboseFields(http.meta)) {
|
|
18
|
+
const verbosePath = httpWiringMetaJsonFile.replace(/\.gen\.json$/, '-verbose.gen.json');
|
|
19
|
+
await writeFileInDir(logger, verbosePath, JSON.stringify(http.meta, null, 2));
|
|
20
|
+
}
|
|
21
|
+
// Generate TypeScript file that imports the minimal JSON
|
|
22
|
+
const jsonImportPath = getFileImportRelativePath(httpWiringMetaFile, httpWiringMetaJsonFile, packageMappings);
|
|
23
|
+
const supportsImportAttributes = schema?.supportsImportAttributes ?? false;
|
|
24
|
+
const importStatement = supportsImportAttributes
|
|
25
|
+
? `import metaData from '${jsonImportPath}' with { type: 'json' }`
|
|
26
|
+
: `import metaData from '${jsonImportPath}'`;
|
|
27
|
+
await writeFileInDir(logger, httpWiringMetaFile, `import { pikkuState } from '@pikku/core'\nimport type { HTTPWiringsMeta } from '@pikku/core/http'\n${importStatement}\npikkuState(null, 'http', 'meta', metaData as HTTPWiringsMeta)`);
|
|
12
28
|
return true;
|
|
13
29
|
},
|
|
14
30
|
middleware: [
|
|
@@ -15,8 +15,8 @@ export const pikkuOpenAPI = pikkuSessionlessFunc({
|
|
|
15
15
|
});
|
|
16
16
|
return;
|
|
17
17
|
}
|
|
18
|
-
const { http, functions } = await getInspectorState();
|
|
19
|
-
const schemas = await generateSchemas(logger, tsconfig, functions.typesMap, functions.meta, http.meta, schemasFromTypes, config.schema?.additionalProperties);
|
|
18
|
+
const { http, functions, zodLookup } = await getInspectorState();
|
|
19
|
+
const schemas = await generateSchemas(logger, tsconfig, functions.typesMap, functions.meta, http.meta, schemasFromTypes, config.schema?.additionalProperties, zodLookup);
|
|
20
20
|
const openAPISpec = await generateOpenAPISpec(logger, functions.meta, http.meta, schemas, openAPI.additionalInfo);
|
|
21
21
|
if (openAPI.outputFile.endsWith('.json')) {
|
|
22
22
|
await writeFileInDir(logger, openAPI.outputFile, JSON.stringify(openAPISpec, null, 2), { ignoreModifyComment: true });
|
|
@@ -15,7 +15,7 @@ export const pikkuHTTP = pikkuSessionlessFunc({
|
|
|
15
15
|
const importStatement = supportsImportAttributes
|
|
16
16
|
? `import metaData from '${jsonImportPath}' with { type: 'json' }`
|
|
17
17
|
: `import metaData from '${jsonImportPath}'`;
|
|
18
|
-
await writeFileInDir(logger, httpWiringMetaFile, `import { pikkuState, HTTPWiringsMeta } from '@pikku/core'\n${importStatement}\npikkuState('http', 'meta', metaData as HTTPWiringsMeta)`);
|
|
18
|
+
await writeFileInDir(logger, httpWiringMetaFile, `import { pikkuState, HTTPWiringsMeta } from '@pikku/core'\n${importStatement}\npikkuState(null, 'http', 'meta', metaData as HTTPWiringsMeta)`);
|
|
19
19
|
return true;
|
|
20
20
|
},
|
|
21
21
|
middleware: [
|