@pikku/cli 0.11.0 → 0.11.2
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 +11 -12
- package/.pikku/channel/pikku-channels-map.gen.d.ts +9 -9
- package/.pikku/channel/pikku-channels-meta.gen.ts +1 -1
- package/.pikku/channel/pikku-channels.gen.ts +1 -1
- package/.pikku/cli/pikku-cli-channel.ts +92 -0
- package/.pikku/cli/pikku-cli-client.gen.ts +54 -0
- package/.pikku/cli/pikku-cli-types.gen.ts +3 -3
- package/.pikku/cli/pikku-cli-wirings-meta.gen.json +146 -0
- package/.pikku/cli/pikku-cli-wirings-meta.gen.ts +4 -34
- package/.pikku/cli/pikku-cli-wirings.gen.ts +2 -1
- package/.pikku/cli/pikku-cli.gen.ts +41 -0
- package/.pikku/function/pikku-function-types.gen.ts +49 -63
- package/.pikku/function/pikku-functions-meta.gen.json +988 -0
- package/.pikku/function/pikku-functions-meta.gen.ts +4 -970
- package/.pikku/function/pikku-functions-meta.min.gen.json +212 -0
- package/.pikku/function/pikku-functions-meta.min.gen.ts +4 -209
- package/.pikku/http/pikku-http-types.gen.ts +2 -2
- package/.pikku/http/pikku-http-wirings-map.gen.d.ts +9 -9
- package/.pikku/http/pikku-http-wirings-meta.gen.ts +1 -1
- package/.pikku/http/pikku-http-wirings.gen.ts +1 -1
- package/.pikku/mcp/pikku-mcp-types.gen.ts +13 -13
- 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 +1 -4
- package/.pikku/pikku-services.gen.ts +6 -8
- package/.pikku/pikku-types.gen.ts +1 -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 +9 -9
- 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 +2 -2
- package/.pikku/rpc/pikku-rpc-wirings-map.gen.d.ts +9 -9
- package/.pikku/rpc/pikku-rpc-wirings-map.internal.gen.d.ts +41 -40
- 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 +27 -27
- package/.pikku/schemas/schemas/PikkuCLIConfig.schema.json +1 -1
- package/.pikku/schemas/schemas/PikkuChannelsOutput.schema.json +1 -1
- package/.pikku/schemas/schemas/PikkuSchemasOutput.schema.json +1 -1
- package/.pikku/services/config.gen.json +99 -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/variables.gen.json +13 -0
- package/.pikku/services/workflowService.gen.json +31 -0
- package/.pikku/workflow/pikku-workflow-map.gen.d.ts +9 -9
- package/.pikku/workflow/pikku-workflow-types.gen.ts +36 -31
- package/.pikku/workflow/pikku-workflow-wirings-meta.gen.json +1 -0
- package/.pikku/workflow/pikku-workflow-wirings-meta.gen.ts +5 -2
- package/.pikku/workflow/pikku-workflow-wirings.gen.ts +6 -2
- package/CHANGELOG.md +27 -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 +6 -7
- package/dist/.pikku/channel/pikku-channel-types.gen.js +1 -1
- package/dist/.pikku/channel/pikku-channels-meta.gen.js +1 -1
- 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 +91 -0
- package/dist/.pikku/cli/pikku-cli-client.gen.d.ts +10 -0
- package/dist/.pikku/cli/pikku-cli-client.gen.js +44 -0
- 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 -34
- package/dist/.pikku/cli/pikku-cli-wirings-meta.gen.json +146 -0
- package/dist/.pikku/cli/pikku-cli-wirings.gen.d.ts +2 -1
- package/dist/.pikku/cli/pikku-cli-wirings.gen.js +2 -1
- package/dist/.pikku/cli/pikku-cli.gen.d.ts +10 -0
- package/dist/.pikku/cli/pikku-cli.gen.js +38 -0
- package/dist/.pikku/function/pikku-function-types.gen.d.ts +29 -79
- package/dist/.pikku/function/pikku-function-types.gen.js +19 -15
- package/dist/.pikku/function/pikku-functions-meta.gen.js +3 -969
- package/dist/.pikku/function/pikku-functions-meta.gen.json +988 -0
- package/dist/.pikku/function/pikku-functions-meta.min.gen.js +3 -208
- package/dist/.pikku/function/pikku-functions-meta.min.gen.json +212 -0
- package/dist/.pikku/http/pikku-http-types.gen.d.ts +2 -2
- package/dist/.pikku/http/pikku-http-types.gen.js +1 -1
- package/dist/.pikku/http/pikku-http-wirings-meta.gen.js +1 -1
- 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 +13 -13
- package/dist/.pikku/mcp/pikku-mcp-types.gen.js +1 -1
- 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 +1 -4
- package/dist/.pikku/pikku-bootstrap.gen.js +1 -4
- package/dist/.pikku/pikku-services.gen.d.ts +5 -8
- package/dist/.pikku/pikku-services.gen.js +3 -6
- package/dist/.pikku/pikku-types.gen.d.ts +1 -1
- package/dist/.pikku/pikku-types.gen.js +1 -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 +6 -9
- package/dist/.pikku/rpc/pikku-remote-rpc-workers.gen.js +2 -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 +17 -17
- package/dist/.pikku/schemas/schemas/PikkuCLIConfig.schema.json +1 -1
- package/dist/.pikku/schemas/schemas/PikkuChannelsOutput.schema.json +1 -1
- package/dist/.pikku/schemas/schemas/PikkuSchemasOutput.schema.json +1 -1
- package/dist/.pikku/workflow/pikku-workflow-types.gen.d.ts +29 -25
- package/dist/.pikku/workflow/pikku-workflow-types.gen.js +22 -8
- package/dist/.pikku/workflow/pikku-workflow-wirings-meta.gen.js +3 -2
- package/dist/.pikku/workflow/pikku-workflow-wirings-meta.gen.json +1 -0
- package/dist/.pikku/workflow/pikku-workflow-wirings.gen.d.ts +6 -2
- package/dist/.pikku/workflow/pikku-workflow-wirings.gen.js +6 -3
- package/dist/bin/pikku.js +5 -28
- package/dist/src/cli.wiring.js +108 -106
- package/dist/src/functions/commands/all.js +82 -42
- package/dist/src/functions/commands/bootstrap.js +22 -10
- package/dist/src/functions/commands/watch.js +6 -3
- package/dist/src/functions/runtimes/nextjs/pikku-command-nextjs.js +12 -7
- 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 +42 -4
- 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 +40 -2
- package/dist/src/functions/wirings/channels/pikku-channels.js +9 -2
- package/dist/src/functions/wirings/channels/serialize-channel-types.js +10 -11
- 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 +9 -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/functions/pikku-command-function-types-split.js +4 -4
- package/dist/src/functions/wirings/functions/pikku-command-functions.js +15 -5
- package/dist/src/functions/wirings/functions/pikku-command-services.d.ts +1 -1
- package/dist/src/functions/wirings/functions/pikku-command-services.js +23 -23
- package/dist/src/functions/wirings/functions/schemas.js +1 -1
- package/dist/src/functions/wirings/functions/serialize-function-types.d.ts +1 -1
- package/dist/src/functions/wirings/functions/serialize-function-types.js +50 -64
- package/dist/src/functions/wirings/http/openapi-spec-generator.js +4 -4
- package/dist/src/functions/wirings/http/pikku-http-routes.js +9 -2
- package/dist/src/functions/wirings/http/serialize-http-types.js +1 -1
- package/dist/src/functions/wirings/mcp/pikku-command-mcp.js +18 -4
- package/dist/src/functions/wirings/mcp/serialize-mcp-types.js +12 -12
- package/dist/src/functions/wirings/middleware/pikku-command-middleware.js +26 -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/queue/pikku-command-queue.js +9 -3
- package/dist/src/functions/wirings/queue/pikku-queue.js +9 -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.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 +1 -1
- package/dist/src/functions/wirings/rpc/serialize-rpc-wrapper.js +3 -3
- package/dist/src/functions/wirings/scheduler/pikku-command-scheduler.js +6 -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-types.js +3 -1
- package/dist/src/functions/wirings/workflow/pikku-command-workflow.js +12 -8
- package/dist/src/functions/wirings/workflow/serialize-workflow-meta.d.ts +2 -1
- package/dist/src/functions/wirings/workflow/serialize-workflow-meta.js +11 -1
- package/dist/src/functions/wirings/workflow/serialize-workflow-types.d.ts +1 -1
- package/dist/src/functions/wirings/workflow/serialize-workflow-types.js +36 -31
- package/dist/src/functions/wirings/workflow/serialize-workflow-wirings.d.ts +8 -0
- package/dist/src/functions/wirings/workflow/serialize-workflow-wirings.js +30 -0
- package/dist/src/functions/wirings/workflow/serialize-workflow-workers.js +2 -2
- 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.d.ts +3 -0
- package/dist/src/services/cli-logger-forwarder.service.js +9 -2
- package/dist/src/services.d.ts +2 -7
- package/dist/src/services.js +14 -12
- 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/pikku-cli-config.js +35 -2
- 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 +1 -1
- package/dist/src/utils/schema-generator.js +1 -1
- package/dist/tsconfig.tsbuildinfo +1 -1
- package/package.json +7 -8
- package/src/cli.wiring.ts +110 -105
- package/src/functions/commands/all.ts +94 -45
- package/src/functions/commands/bootstrap.ts +25 -10
- package/src/functions/commands/watch.ts +6 -3
- package/src/functions/runtimes/nextjs/pikku-command-nextjs.ts +26 -5
- package/src/functions/runtimes/nextjs/serialize-nextjs-backend-wrapper.ts +43 -4
- package/src/functions/runtimes/nextjs/serialize-nextjs-http-wrapper.ts +40 -1
- package/src/functions/wirings/channels/pikku-channels.ts +27 -3
- package/src/functions/wirings/channels/serialize-channel-types.ts +10 -11
- 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 +26 -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/functions/pikku-command-function-types-split.ts +6 -6
- package/src/functions/wirings/functions/pikku-command-functions.ts +39 -4
- package/src/functions/wirings/functions/pikku-command-services.ts +25 -25
- package/src/functions/wirings/functions/schemas.ts +2 -2
- package/src/functions/wirings/functions/serialize-function-types.ts +51 -65
- package/src/functions/wirings/http/openapi-spec-generator.ts +14 -5
- package/src/functions/wirings/http/pikku-http-routes.ts +28 -2
- package/src/functions/wirings/http/serialize-http-types.ts +1 -1
- package/src/functions/wirings/mcp/pikku-command-mcp.ts +30 -4
- package/src/functions/wirings/mcp/serialize-mcp-types.ts +12 -12
- package/src/functions/wirings/middleware/pikku-command-middleware.ts +35 -2
- package/src/functions/wirings/middleware/serialize-middleware-groups-meta.ts +4 -19
- package/src/functions/wirings/permissions/pikku-command-permissions.ts +2 -2
- package/src/functions/wirings/queue/pikku-command-queue.ts +27 -2
- package/src/functions/wirings/queue/pikku-queue.ts +27 -2
- 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.ts +25 -2
- package/src/functions/wirings/rpc/serialize-public-rpc.ts +11 -4
- package/src/functions/wirings/rpc/serialize-remote-rpc.ts +1 -1
- package/src/functions/wirings/rpc/serialize-rpc-wrapper.ts +3 -3
- package/src/functions/wirings/scheduler/pikku-command-scheduler.ts +30 -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-types.ts +8 -1
- package/src/functions/wirings/workflow/pikku-command-workflow.ts +36 -8
- package/src/functions/wirings/workflow/serialize-workflow-meta.ts +18 -1
- package/src/functions/wirings/workflow/serialize-workflow-types.ts +39 -31
- package/src/functions/wirings/workflow/serialize-workflow-wirings.ts +47 -0
- package/src/functions/wirings/workflow/serialize-workflow-workers.ts +2 -2
- package/src/middleware/log-command-info-and-time.ts +3 -6
- package/src/services/cli-logger-forwarder.service.ts +11 -2
- package/src/services.ts +15 -15
- package/src/utils/check-required-types.ts +4 -7
- package/src/utils/pikku-cli-config.ts +69 -2
- package/src/utils/pikku-files-and-methods.ts +10 -13
- package/src/utils/schema-generator.ts +2 -2
- package/types/application-types.d.ts +1 -1
- package/types/config.d.ts +12 -1
- 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.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/.pikku/{function/pikku-functions.gen.d.ts → cli/pikku-cli-channel.d.ts} +0 -0
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
export const serializeNextJsBackendWrapper = (bootstrapPath, routesMapPath, configImport, singleServicesFactoryImport,
|
|
1
|
+
export const serializeNextJsBackendWrapper = (bootstrapPath, routesMapPath, rpcMapPath, configImport, singleServicesFactoryImport, wireServicesImport) => {
|
|
2
2
|
return `'server-only'
|
|
3
3
|
|
|
4
4
|
/**
|
|
@@ -8,12 +8,13 @@ export const serializeNextJsBackendWrapper = (bootstrapPath, routesMapPath, conf
|
|
|
8
8
|
import { PikkuNextJS } from '@pikku/next'
|
|
9
9
|
import { NextRequest } from 'next/server.js'
|
|
10
10
|
import type { HTTPWiringsMap, HTTPWiringHandlerOf, HTTPWiringsWithMethod } from '${routesMapPath}'
|
|
11
|
+
import type { RPCMap } from '${rpcMapPath}'
|
|
11
12
|
|
|
12
13
|
type RouteContext = { params: Promise<Record<string, string | string[]>> }
|
|
13
14
|
|
|
14
15
|
${configImport}
|
|
15
16
|
${singleServicesFactoryImport}
|
|
16
|
-
${
|
|
17
|
+
${wireServicesImport}
|
|
17
18
|
|
|
18
19
|
import '${bootstrapPath}'
|
|
19
20
|
|
|
@@ -34,7 +35,7 @@ export const pikku = (_options?: any) => {
|
|
|
34
35
|
_pikku = new PikkuNextJS(
|
|
35
36
|
createConfig as any,
|
|
36
37
|
createSingletonServices as any,
|
|
37
|
-
|
|
38
|
+
createWireServices
|
|
38
39
|
)
|
|
39
40
|
}
|
|
40
41
|
|
|
@@ -174,13 +175,50 @@ export const pikku = (_options?: any) => {
|
|
|
174
175
|
return staticActionRequest(route, 'GET', data)
|
|
175
176
|
}
|
|
176
177
|
|
|
178
|
+
// RPC Requests
|
|
179
|
+
|
|
180
|
+
/**
|
|
181
|
+
* Type definition for RPC invocation with dynamic context.
|
|
182
|
+
*/
|
|
183
|
+
type RPCInvoke = <Name extends keyof RPCMap>(
|
|
184
|
+
name: Name,
|
|
185
|
+
data: RPCMap[Name]['input']
|
|
186
|
+
) => Promise<RPCMap[Name]['output']>
|
|
187
|
+
|
|
188
|
+
/**
|
|
189
|
+
* Makes a dynamic RPC request.
|
|
190
|
+
*
|
|
191
|
+
* @template Name - The RPC function name from the RPCMap.
|
|
192
|
+
* @param name - The RPC function identifier.
|
|
193
|
+
* @param data - The input data for the RPC request.
|
|
194
|
+
* @returns A promise that resolves to the output of the RPC handler.
|
|
195
|
+
*/
|
|
196
|
+
const rpc: RPCInvoke = async (name, data) => {
|
|
197
|
+
return dynamicActionRequest(\`/rpc/\${name}\` as any, 'POST', { data }) as any
|
|
198
|
+
}
|
|
199
|
+
|
|
200
|
+
/**
|
|
201
|
+
* Makes a static RPC request.
|
|
202
|
+
* Note: In HTTP wrapper context, both rpc and staticRPC behave the same way.
|
|
203
|
+
*
|
|
204
|
+
* @template Name - The RPC function name from the RPCMap.
|
|
205
|
+
* @param name - The RPC function identifier.
|
|
206
|
+
* @param data - The input data for the RPC request.
|
|
207
|
+
* @returns A promise that resolves to the output of the RPC handler.
|
|
208
|
+
*/
|
|
209
|
+
const staticRPC: RPCInvoke = async (name, data) => {
|
|
210
|
+
return staticActionRequest(\`/rpc/\${name}\` as any, 'POST', { data }) as any
|
|
211
|
+
}
|
|
212
|
+
|
|
177
213
|
return {
|
|
214
|
+
rpc,
|
|
178
215
|
get: dynamicGet,
|
|
179
216
|
post: dynamicPost,
|
|
180
217
|
patch: dynamicPatch,
|
|
181
218
|
del: dynamicDel,
|
|
182
219
|
staticGet,
|
|
183
220
|
staticPost,
|
|
221
|
+
staticRPC,
|
|
184
222
|
}
|
|
185
223
|
}
|
|
186
224
|
|
|
@@ -204,7 +242,7 @@ export const pikkuAPIRequest = (
|
|
|
204
242
|
_pikku = new PikkuNextJS(
|
|
205
243
|
createConfig as any,
|
|
206
244
|
createSingletonServices as any,
|
|
207
|
-
|
|
245
|
+
createWireServices
|
|
208
246
|
)
|
|
209
247
|
}
|
|
210
248
|
if (_removeAPIPrefix) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
export declare const serializeNextJsHTTPWrapper: (routesMapPath: string, pikkuFetchImport: string) => string;
|
|
1
|
+
export declare const serializeNextJsHTTPWrapper: (routesMapPath: string, rpcMapPath: string, pikkuFetchImport: string) => string;
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
export const serializeNextJsHTTPWrapper = (routesMapPath, pikkuFetchImport) => {
|
|
1
|
+
export const serializeNextJsHTTPWrapper = (routesMapPath, rpcMapPath, pikkuFetchImport) => {
|
|
2
2
|
return `'server-only'
|
|
3
3
|
|
|
4
4
|
/**
|
|
@@ -7,6 +7,7 @@ export const serializeNextJsHTTPWrapper = (routesMapPath, pikkuFetchImport) => {
|
|
|
7
7
|
*/
|
|
8
8
|
import { CorePikkuFetchOptions } from '@pikku/fetch'
|
|
9
9
|
import type { HTTPWiringsMap, HTTPWiringHandlerOf, HTTPWiringsWithMethod } from '${routesMapPath}'
|
|
10
|
+
import type { RPCMap } from '${rpcMapPath}'
|
|
10
11
|
import { PikkuFetch } from '${pikkuFetchImport}'
|
|
11
12
|
|
|
12
13
|
let _pikku: PikkuFetch | undefined
|
|
@@ -146,13 +147,50 @@ export const pikku = (options?: CorePikkuFetchOptions) => {
|
|
|
146
147
|
return staticActionRequest(route, 'GET', data)
|
|
147
148
|
}
|
|
148
149
|
|
|
150
|
+
// RPC Requests
|
|
151
|
+
|
|
152
|
+
/**
|
|
153
|
+
* Type definition for RPC invocation.
|
|
154
|
+
*/
|
|
155
|
+
type RPCInvoke = <Name extends keyof RPCMap>(
|
|
156
|
+
name: Name,
|
|
157
|
+
data: RPCMap[Name]['input']
|
|
158
|
+
) => Promise<RPCMap[Name]['output']>
|
|
159
|
+
|
|
160
|
+
/**
|
|
161
|
+
* Makes a dynamic RPC request.
|
|
162
|
+
*
|
|
163
|
+
* @template Name - The RPC function name from the RPCMap.
|
|
164
|
+
* @param name - The RPC function identifier.
|
|
165
|
+
* @param data - The input data for the RPC request.
|
|
166
|
+
* @returns A promise that resolves to the output of the RPC handler.
|
|
167
|
+
*/
|
|
168
|
+
const rpc: RPCInvoke = async (rpcName, data) => {
|
|
169
|
+
return dynamicActionRequest(\`/rpc/\${rpcName}\` as any, 'POST', { data }) as any
|
|
170
|
+
}
|
|
171
|
+
|
|
172
|
+
/**
|
|
173
|
+
* Makes a static RPC request.
|
|
174
|
+
* Note: In HTTP wrapper context, both rpc and rpcStatic behave the same way.
|
|
175
|
+
*
|
|
176
|
+
* @template Name - The RPC function name from the RPCMap.
|
|
177
|
+
* @param name - The RPC function identifier.
|
|
178
|
+
* @param data - The input data for the RPC request.
|
|
179
|
+
* @returns A promise that resolves to the output of the RPC handler.
|
|
180
|
+
*/
|
|
181
|
+
const staticRPC: RPCInvoke = async (rpcName, data) => {
|
|
182
|
+
return staticActionRequest(\`/rpc/\${rpcName}\` as any, 'POST', { data }) as any
|
|
183
|
+
}
|
|
184
|
+
|
|
149
185
|
return {
|
|
186
|
+
rpc,
|
|
150
187
|
get: dynamicGet,
|
|
151
188
|
post: dynamicPost,
|
|
152
189
|
patch: dynamicPatch,
|
|
153
190
|
del: dynamicDel,
|
|
154
191
|
staticGet,
|
|
155
|
-
staticPost
|
|
192
|
+
staticPost,
|
|
193
|
+
staticRPC
|
|
156
194
|
}
|
|
157
195
|
}
|
|
158
196
|
`;
|
|
@@ -2,13 +2,20 @@ import { pikkuVoidFunc } 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';
|
|
5
6
|
export const pikkuChannels = pikkuVoidFunc({
|
|
6
7
|
func: async ({ logger, config, getInspectorState }) => {
|
|
7
8
|
const visitState = await getInspectorState();
|
|
8
|
-
const { channelsWiringFile, channelsWiringMetaFile, packageMappings } = config;
|
|
9
|
+
const { channelsWiringFile, channelsWiringMetaFile, channelsWiringMetaJsonFile, packageMappings, schema, } = config;
|
|
9
10
|
const { channels } = visitState;
|
|
10
11
|
await writeFileInDir(logger, channelsWiringFile, serializeFileImports('addChannel', channelsWiringFile, channels.files, packageMappings));
|
|
11
|
-
await writeFileInDir(logger,
|
|
12
|
+
await writeFileInDir(logger, channelsWiringMetaJsonFile, JSON.stringify(channels.meta, null, 2));
|
|
13
|
+
const jsonImportPath = getFileImportRelativePath(channelsWiringMetaFile, channelsWiringMetaJsonFile, packageMappings);
|
|
14
|
+
const supportsImportAttributes = schema?.supportsImportAttributes ?? false;
|
|
15
|
+
const importStatement = supportsImportAttributes
|
|
16
|
+
? `import metaData from '${jsonImportPath}' with { type: 'json' }`
|
|
17
|
+
: `import metaData from '${jsonImportPath}'`;
|
|
18
|
+
await writeFileInDir(logger, channelsWiringMetaFile, `import { pikkuState } from '@pikku/core'\nimport { ChannelsMeta } from '@pikku/core/channel'\n${importStatement}\npikkuState('channel', 'meta', metaData as ChannelsMeta)`);
|
|
12
19
|
},
|
|
13
20
|
middleware: [
|
|
14
21
|
logCommandInfoAndTime({
|
|
@@ -8,9 +8,8 @@ export const serializeChannelTypes = (functionTypesImportPath) => {
|
|
|
8
8
|
*/
|
|
9
9
|
|
|
10
10
|
import { CoreChannel, wireChannel as wireChannelCore } from '@pikku/core/channel'
|
|
11
|
-
import { CorePikkuFunctionConfig } from '@pikku/core'
|
|
12
11
|
import { AssertHTTPWiringParams } from '@pikku/core/http'
|
|
13
|
-
import type {
|
|
12
|
+
import type { PikkuFunctionConfig, PikkuFunctionSessionless, PikkuPermission, PikkuMiddleware } from '${functionTypesImportPath}'
|
|
14
13
|
|
|
15
14
|
/**
|
|
16
15
|
* Type definition for WebSocket channels with typed data exchange.
|
|
@@ -23,9 +22,9 @@ import type { PikkuFunction, PikkuFunctionSessionless, PikkuPermission, PikkuMid
|
|
|
23
22
|
type ChannelWiring<ChannelData, Channel extends string> = CoreChannel<
|
|
24
23
|
ChannelData,
|
|
25
24
|
Channel,
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
25
|
+
PikkuFunctionConfig<void, any, 'channel' | 'session' | 'rpc'>,
|
|
26
|
+
PikkuFunctionConfig<void, void, 'channel' | 'session' | 'rpc'>,
|
|
27
|
+
PikkuFunctionConfig<any, any, 'channel' | 'session' | 'rpc'>,
|
|
29
28
|
PikkuPermission,
|
|
30
29
|
PikkuMiddleware
|
|
31
30
|
>
|
|
@@ -40,8 +39,8 @@ type ChannelWiring<ChannelData, Channel extends string> = CoreChannel<
|
|
|
40
39
|
*/
|
|
41
40
|
export const pikkuChannelConnectionFunc = <Out = unknown>(
|
|
42
41
|
func:
|
|
43
|
-
| PikkuFunctionSessionless<void, Out,
|
|
44
|
-
|
|
|
42
|
+
| PikkuFunctionSessionless<void, Out, 'channel' | 'session' | 'rpc'>
|
|
43
|
+
| PikkuFunctionConfig<void, Out, 'channel' | 'session' | 'rpc'>
|
|
45
44
|
) => {
|
|
46
45
|
return typeof func === 'function' ? { func } : func
|
|
47
46
|
}
|
|
@@ -55,8 +54,8 @@ export const pikkuChannelConnectionFunc = <Out = unknown>(
|
|
|
55
54
|
*/
|
|
56
55
|
export const pikkuChannelDisconnectionFunc = (
|
|
57
56
|
func:
|
|
58
|
-
| PikkuFunctionSessionless<void, void,
|
|
59
|
-
|
|
|
57
|
+
| PikkuFunctionSessionless<void, void, 'channel'>
|
|
58
|
+
| PikkuFunctionConfig<void, void, 'channel' | 'session' | 'rpc'>
|
|
60
59
|
) => {
|
|
61
60
|
return typeof func === 'function' ? { func } : func
|
|
62
61
|
}
|
|
@@ -73,8 +72,8 @@ export const pikkuChannelDisconnectionFunc = (
|
|
|
73
72
|
*/
|
|
74
73
|
export const pikkuChannelFunc = <In, Out = unknown>(
|
|
75
74
|
func:
|
|
76
|
-
| PikkuFunctionSessionless<In, Out,
|
|
77
|
-
|
|
|
75
|
+
| PikkuFunctionSessionless<In, Out, 'channel' | 'session' | 'rpc'>
|
|
76
|
+
| PikkuFunctionConfig<In, Out, 'channel' | 'session' | 'rpc'>
|
|
78
77
|
) => {
|
|
79
78
|
return typeof func === 'function' ? { func } : func
|
|
80
79
|
}
|
|
@@ -100,15 +100,15 @@ export const pikkuCLIEntry = pikkuSessionlessFunc({
|
|
|
100
100
|
checkRequiredTypes(visitState.filesAndMethodsErrors, {
|
|
101
101
|
config: true,
|
|
102
102
|
singletonServicesFactory: true,
|
|
103
|
-
|
|
103
|
+
wireServicesFactory: true,
|
|
104
104
|
});
|
|
105
|
-
const { pikkuConfigFactory, singletonServicesFactory,
|
|
105
|
+
const { pikkuConfigFactory, singletonServicesFactory, wireServicesFactory, } = visitState.filesAndMethods;
|
|
106
106
|
if (!pikkuConfigFactory ||
|
|
107
107
|
!singletonServicesFactory ||
|
|
108
|
-
!
|
|
108
|
+
!wireServicesFactory) {
|
|
109
109
|
throw new Error('Required types not found');
|
|
110
110
|
}
|
|
111
|
-
const bootstrapCode = serializeLocalCLIBootstrap(programName, programMeta, bootstrapFile, config, pikkuConfigFactory, singletonServicesFactory,
|
|
111
|
+
const bootstrapCode = serializeLocalCLIBootstrap(programName, programMeta, bootstrapFile, config, pikkuConfigFactory, singletonServicesFactory, wireServicesFactory);
|
|
112
112
|
await writeFileInDir(logger, bootstrapFile, bootstrapCode);
|
|
113
113
|
logger.debug(`Serialized CLI bootstrap for ${programName}: ${bootstrapFile}`);
|
|
114
114
|
}
|
|
@@ -12,7 +12,7 @@ export const pikkuCLITypes = pikkuSessionlessFunc({
|
|
|
12
12
|
// Check for required types
|
|
13
13
|
checkRequiredTypes(visitState.filesAndMethodsErrors, {
|
|
14
14
|
userSessionType: true,
|
|
15
|
-
|
|
15
|
+
wireServiceType: true,
|
|
16
16
|
singletonServicesType: true,
|
|
17
17
|
});
|
|
18
18
|
const { userSessionType, singletonServicesType } = visitState.filesAndMethods;
|
|
@@ -2,15 +2,21 @@ 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';
|
|
5
6
|
export const pikkuCLI = pikkuSessionlessFunc({
|
|
6
7
|
func: async ({ logger, config, getInspectorState }) => {
|
|
7
8
|
const visitState = await getInspectorState();
|
|
8
|
-
const { cliWiringsFile, cliWiringMetaFile, packageMappings } = config;
|
|
9
|
+
const { cliWiringsFile, cliWiringMetaFile, cliWiringMetaJsonFile, packageMappings, schema, } = config;
|
|
9
10
|
const { cli } = visitState;
|
|
10
11
|
// Generate CLI wirings file
|
|
11
12
|
await writeFileInDir(logger, cliWiringsFile, serializeFileImports('wireCLI', cliWiringsFile, cli.files, packageMappings));
|
|
12
|
-
|
|
13
|
-
|
|
13
|
+
await writeFileInDir(logger, cliWiringMetaJsonFile, JSON.stringify(cli.meta, null, 2));
|
|
14
|
+
const jsonImportPath = getFileImportRelativePath(cliWiringMetaFile, cliWiringMetaJsonFile, packageMappings);
|
|
15
|
+
const supportsImportAttributes = schema?.supportsImportAttributes ?? false;
|
|
16
|
+
const importStatement = supportsImportAttributes
|
|
17
|
+
? `import metaData from '${jsonImportPath}' with { type: 'json' }`
|
|
18
|
+
: `import metaData from '${jsonImportPath}'`;
|
|
19
|
+
await writeFileInDir(logger, cliWiringMetaFile, `import { pikkuState } from '@pikku/core'\nimport { CLIMeta } from '@pikku/core/cli'\n${importStatement}\npikkuState('cli', 'meta', metaData as CLIMeta)`);
|
|
14
20
|
return true;
|
|
15
21
|
},
|
|
16
22
|
middleware: [
|
|
@@ -50,7 +50,7 @@ import { pikkuMiddleware } from '${functionTypesPath}'
|
|
|
50
50
|
${imports}
|
|
51
51
|
|
|
52
52
|
// Middleware to close the channel after CLI command completes
|
|
53
|
-
const cliCloseOnComplete = pikkuMiddleware(async (
|
|
53
|
+
const cliCloseOnComplete = pikkuMiddleware(async (_services, { channel }, next) => {
|
|
54
54
|
const closeChannel = () => {
|
|
55
55
|
setTimeout(async () => {
|
|
56
56
|
try {
|
|
@@ -50,7 +50,7 @@ export const pikkuCLIRender = <Data, RequiredServices extends SingletonServices
|
|
|
50
50
|
* CLI command configuration with project-specific types.
|
|
51
51
|
* Uses CoreCLICommandConfig from @pikku/core with local middleware and render types.
|
|
52
52
|
*/
|
|
53
|
-
type CLICommandConfig<Func extends PikkuFunctionConfig<In, Out>, In = any, Out = any, Params extends string = string> = CoreCLICommandConfig<Func, PikkuMiddleware, PikkuCLIRender<any>, Params>
|
|
53
|
+
type CLICommandConfig<Func extends PikkuFunctionConfig<In, Out, 'cli' | 'rpc' | 'session'>, In = any, Out = any, Params extends string = string> = CoreCLICommandConfig<Func, PikkuMiddleware, PikkuCLIRender<any>, Params>
|
|
54
54
|
|
|
55
55
|
/**
|
|
56
56
|
* Type definition for CLI applications with commands and global options.
|
|
@@ -84,7 +84,7 @@ export const wireCLI = <Commands extends Record<string, CoreCLICommandConfig<any
|
|
|
84
84
|
* @returns CLI command configuration with inferred types
|
|
85
85
|
*/
|
|
86
86
|
export const pikkuCLICommand = <
|
|
87
|
-
FuncConfig extends PikkuFunctionConfig<any, any>,
|
|
87
|
+
FuncConfig extends PikkuFunctionConfig<any, any, 'cli' | 'rpc' | 'session'>,
|
|
88
88
|
Params extends string
|
|
89
89
|
>(
|
|
90
90
|
config: CLICommandConfig<FuncConfig, any, any, Params>
|
|
@@ -8,7 +8,7 @@ export declare function serializeLocalCLIBootstrap(programName: string, _program
|
|
|
8
8
|
}, singletonServicesFactory: {
|
|
9
9
|
file: string;
|
|
10
10
|
variable: string;
|
|
11
|
-
},
|
|
11
|
+
}, wireServicesFactory: {
|
|
12
12
|
file: string;
|
|
13
13
|
variable: string;
|
|
14
14
|
}): string;
|
|
@@ -2,18 +2,18 @@ import { getFileImportRelativePath } from '../../../utils/file-import-path.js';
|
|
|
2
2
|
/**
|
|
3
3
|
* Serializes the local (in-program) CLI bootstrap code
|
|
4
4
|
*/
|
|
5
|
-
export function serializeLocalCLIBootstrap(programName, _programMeta, bootstrapFile, config, pikkuConfigFactory, singletonServicesFactory,
|
|
5
|
+
export function serializeLocalCLIBootstrap(programName, _programMeta, bootstrapFile, config, pikkuConfigFactory, singletonServicesFactory, wireServicesFactory) {
|
|
6
6
|
const capitalizedName = programName.charAt(0).toUpperCase() + programName.slice(1).replace(/-/g, '');
|
|
7
7
|
// Get relative import paths
|
|
8
8
|
const pikkuConfigPath = getFileImportRelativePath(bootstrapFile, pikkuConfigFactory.file, config.packageMappings);
|
|
9
9
|
const singletonServicesPath = getFileImportRelativePath(bootstrapFile, singletonServicesFactory.file, config.packageMappings);
|
|
10
|
-
const
|
|
10
|
+
const wireServicesPath = getFileImportRelativePath(bootstrapFile, wireServicesFactory.file, config.packageMappings);
|
|
11
11
|
const cliBootstrapPath = getFileImportRelativePath(bootstrapFile, config.bootstrapFile, config.packageMappings);
|
|
12
12
|
return `
|
|
13
13
|
import { executeCLI, CLIError } from '@pikku/core/cli'
|
|
14
14
|
import { ${pikkuConfigFactory.variable} as createConfig } from '${pikkuConfigPath}'
|
|
15
15
|
import { ${singletonServicesFactory.variable} as createSingletonServices } from '${singletonServicesPath}'
|
|
16
|
-
import { ${
|
|
16
|
+
import { ${wireServicesFactory.variable} as createWireServices } from '${wireServicesPath}'
|
|
17
17
|
import '${cliBootstrapPath}'
|
|
18
18
|
|
|
19
19
|
/**
|
|
@@ -27,7 +27,7 @@ export async function ${capitalizedName}CLI(args: string[]): Promise<void> {
|
|
|
27
27
|
args: args || process.argv.slice(2),
|
|
28
28
|
createConfig,
|
|
29
29
|
createSingletonServices,
|
|
30
|
-
|
|
30
|
+
createWireServices,
|
|
31
31
|
})
|
|
32
32
|
} catch (error) {
|
|
33
33
|
if (error instanceof CLIError) {
|
|
@@ -11,17 +11,17 @@ export const pikkuFunctionTypesSplit = pikkuSessionlessFunc({
|
|
|
11
11
|
// Check for required types
|
|
12
12
|
checkRequiredTypes(visitState.filesAndMethodsErrors, {
|
|
13
13
|
userSessionType: true,
|
|
14
|
-
|
|
14
|
+
wireServiceType: true,
|
|
15
15
|
singletonServicesType: true,
|
|
16
16
|
});
|
|
17
|
-
const { userSessionType,
|
|
18
|
-
if (!userSessionType || !
|
|
17
|
+
const { userSessionType, wireServicesType, singletonServicesType, pikkuConfigType, } = visitState.filesAndMethods;
|
|
18
|
+
if (!userSessionType || !wireServicesType || !singletonServicesType) {
|
|
19
19
|
throw new Error('Required types not found');
|
|
20
20
|
}
|
|
21
21
|
const configTypeImport = pikkuConfigType
|
|
22
22
|
? `import type { ${pikkuConfigType.type} } from '${getFileImportRelativePath(functionTypesFile, pikkuConfigType.typePath, packageMappings)}'`
|
|
23
23
|
: '// Config type not found, will use fallback';
|
|
24
|
-
const content = serializeFunctionTypes(`import type { ${userSessionType.type} } from '${getFileImportRelativePath(functionTypesFile, userSessionType.typePath, packageMappings)}'`, userSessionType.type, `import type { ${singletonServicesType.type} } from '${getFileImportRelativePath(functionTypesFile, singletonServicesType.typePath, packageMappings)}'`, singletonServicesType.type, `import type { ${
|
|
24
|
+
const content = serializeFunctionTypes(`import type { ${userSessionType.type} } from '${getFileImportRelativePath(functionTypesFile, userSessionType.typePath, packageMappings)}'`, userSessionType.type, `import type { ${singletonServicesType.type} } from '${getFileImportRelativePath(functionTypesFile, singletonServicesType.typePath, packageMappings)}'`, singletonServicesType.type, `import type { ${wireServicesType.type} } from '${getFileImportRelativePath(functionTypesFile, wireServicesType.typePath, packageMappings)}'`, wireServicesType.type, `import type { TypedPikkuRPC } from '${getFileImportRelativePath(functionTypesFile, rpcInternalMapDeclarationFile, packageMappings)}'`, `import type { RequiredSingletonServices, RequiredWireServices } from '${getFileImportRelativePath(functionTypesFile, servicesFile, packageMappings)}'`, configTypeImport);
|
|
25
25
|
await writeFileInDir(logger, functionTypesFile, content);
|
|
26
26
|
},
|
|
27
27
|
middleware: [
|
|
@@ -2,15 +2,25 @@ 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
4
|
import { generateRuntimeMeta, serializeFunctionImports, } from './serialize-function-imports.js';
|
|
5
|
+
import { getFileImportRelativePath } from '../../../utils/file-import-path.js';
|
|
5
6
|
export const pikkuFunctions = pikkuSessionlessFunc({
|
|
6
7
|
func: async ({ logger, config, getInspectorState }) => {
|
|
7
8
|
const { functions, rpc } = await getInspectorState();
|
|
8
|
-
const { functionsMetaFile, functionsMetaMinFile, functionsFile, packageMappings, } = config;
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
9
|
+
const { functionsMetaFile, functionsMetaJsonFile, functionsMetaMinFile, functionsMetaMinJsonFile, functionsFile, packageMappings, schema, } = config;
|
|
10
|
+
await writeFileInDir(logger, functionsMetaJsonFile, JSON.stringify(functions.meta, null, 2));
|
|
11
|
+
const fullJsonImportPath = getFileImportRelativePath(functionsMetaFile, functionsMetaJsonFile, packageMappings);
|
|
12
|
+
const supportsImportAttributes = schema?.supportsImportAttributes ?? false;
|
|
13
|
+
const fullImportStatement = supportsImportAttributes
|
|
14
|
+
? `import metaData from '${fullJsonImportPath}' with { type: 'json' }`
|
|
15
|
+
: `import metaData from '${fullJsonImportPath}'`;
|
|
16
|
+
await writeFileInDir(logger, functionsMetaFile, `import { pikkuState, FunctionsMeta } from '@pikku/core'\n${fullImportStatement}\npikkuState('function', 'meta', metaData as FunctionsMeta)`);
|
|
12
17
|
const runtimeMeta = generateRuntimeMeta(functions.meta);
|
|
13
|
-
await writeFileInDir(logger,
|
|
18
|
+
await writeFileInDir(logger, functionsMetaMinJsonFile, JSON.stringify(runtimeMeta, null, 2));
|
|
19
|
+
const minJsonImportPath = getFileImportRelativePath(functionsMetaMinFile, functionsMetaMinJsonFile, packageMappings);
|
|
20
|
+
const minImportStatement = supportsImportAttributes
|
|
21
|
+
? `import metaData from '${minJsonImportPath}' with { type: 'json' }`
|
|
22
|
+
: `import metaData from '${minJsonImportPath}'`;
|
|
23
|
+
await writeFileInDir(logger, functionsMetaMinFile, `import { pikkuState, FunctionsRuntimeMeta } from '@pikku/core'\n${minImportStatement}\npikkuState('function', 'meta', metaData as FunctionsRuntimeMeta)`);
|
|
14
24
|
const hasRPCs = rpc.exposedFiles.size > 0 || rpc.internalFiles.size > 0;
|
|
15
25
|
if (hasRPCs) {
|
|
16
26
|
await writeFileInDir(logger, functionsFile, serializeFunctionImports(functionsFile, rpc.internalFiles, functions.meta, packageMappings));
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
export declare const serializeServicesMap: (allSingletonServices: string[],
|
|
1
|
+
export declare const serializeServicesMap: (allSingletonServices: string[], allWireServices: string[], requiredServices: Set<string>, forceRequiredServices: string[] | undefined, servicesImport: string, wireServicesImport: string) => string;
|
|
2
2
|
export declare const pikkuServices: any;
|
|
@@ -3,7 +3,7 @@ import { getFileImportRelativePath } from '../../../utils/file-import-path.js';
|
|
|
3
3
|
import { checkRequiredTypes } from '../../../utils/check-required-types.js';
|
|
4
4
|
import { writeFileInDir } from '../../../utils/file-writer.js';
|
|
5
5
|
import { logCommandInfoAndTime } from '../../../middleware/log-command-info-and-time.js';
|
|
6
|
-
export const serializeServicesMap = (allSingletonServices,
|
|
6
|
+
export const serializeServicesMap = (allSingletonServices, allWireServices, requiredServices, forceRequiredServices = [], servicesImport, wireServicesImport) => {
|
|
7
7
|
// Use pre-aggregated services from inspector state
|
|
8
8
|
// This includes services from:
|
|
9
9
|
// - Wired functions (HTTP, channels, queues, schedulers, MCP, CLI, RPC)
|
|
@@ -11,7 +11,7 @@ export const serializeServicesMap = (allSingletonServices, allSessionServices, r
|
|
|
11
11
|
// - Permissions used by wired functions
|
|
12
12
|
// - Session factories
|
|
13
13
|
const usedServices = new Set(requiredServices);
|
|
14
|
-
// Internal services that are created internally by the framework (
|
|
14
|
+
// Internal services that are created internally by the framework (PikkuWire)
|
|
15
15
|
// These should not appear in the services maps
|
|
16
16
|
const internalServices = new Set([
|
|
17
17
|
'rpc',
|
|
@@ -37,24 +37,24 @@ export const serializeServicesMap = (allSingletonServices, allSessionServices, r
|
|
|
37
37
|
allSingletonServices.forEach((service) => {
|
|
38
38
|
singletonServicesMap[service] = usedServices.has(service);
|
|
39
39
|
});
|
|
40
|
-
// Create
|
|
41
|
-
// Exclude internal framework services (
|
|
42
|
-
const
|
|
43
|
-
|
|
40
|
+
// Create wire services map: all wire services with true/false based on usage
|
|
41
|
+
// Exclude internal framework services (PikkuWire)
|
|
42
|
+
const wireServicesMap = {};
|
|
43
|
+
allWireServices.forEach((service) => {
|
|
44
44
|
if (!internalServices.has(service)) {
|
|
45
|
-
|
|
45
|
+
wireServicesMap[service] = usedServices.has(service);
|
|
46
46
|
}
|
|
47
47
|
});
|
|
48
48
|
// Get all required service names (those marked as true)
|
|
49
49
|
const requiredSingletonServiceNames = Object.keys(singletonServicesMap)
|
|
50
50
|
.filter((key) => singletonServicesMap[key])
|
|
51
51
|
.sort();
|
|
52
|
-
const
|
|
53
|
-
.filter((key) =>
|
|
52
|
+
const requiredWireServiceNames = Object.keys(wireServicesMap)
|
|
53
|
+
.filter((key) => wireServicesMap[key])
|
|
54
54
|
.sort();
|
|
55
55
|
const code = [
|
|
56
56
|
servicesImport,
|
|
57
|
-
|
|
57
|
+
wireServicesImport,
|
|
58
58
|
'',
|
|
59
59
|
'// Singleton services map: true if required, false if available but unused',
|
|
60
60
|
'export const requiredSingletonServices = {',
|
|
@@ -63,11 +63,11 @@ export const serializeServicesMap = (allSingletonServices, allSessionServices, r
|
|
|
63
63
|
.map((service) => ` '${service}': ${singletonServicesMap[service]},`),
|
|
64
64
|
'} as const',
|
|
65
65
|
'',
|
|
66
|
-
'//
|
|
67
|
-
'export const
|
|
68
|
-
...Object.keys(
|
|
66
|
+
'// Wire services map: true if required, false if available but unused',
|
|
67
|
+
'export const requiredWireServices = {',
|
|
68
|
+
...Object.keys(wireServicesMap)
|
|
69
69
|
.sort()
|
|
70
|
-
.map((service) => ` '${service}': ${
|
|
70
|
+
.map((service) => ` '${service}': ${wireServicesMap[service]},`),
|
|
71
71
|
'} as const',
|
|
72
72
|
'',
|
|
73
73
|
'// Type exports',
|
|
@@ -75,9 +75,9 @@ export const serializeServicesMap = (allSingletonServices, allSessionServices, r
|
|
|
75
75
|
? `export type RequiredSingletonServices = Pick<SingletonServices, ${requiredSingletonServiceNames.map((key) => `'${key}'`).join(' | ')}> & Partial<Omit<SingletonServices, ${requiredSingletonServiceNames.map((key) => `'${key}'`).join(' | ')}>>`
|
|
76
76
|
: 'export type RequiredSingletonServices = Partial<SingletonServices>',
|
|
77
77
|
'',
|
|
78
|
-
|
|
79
|
-
? `export type
|
|
80
|
-
: 'export type
|
|
78
|
+
requiredWireServiceNames.length > 0
|
|
79
|
+
? `export type RequiredWireServices = Pick<Services, ${requiredWireServiceNames.map((key) => `'${key}'`).join(' | ')}> & Partial<Omit<Services, ${requiredWireServiceNames.map((key) => `'${key}'`).join(' | ')}>>`
|
|
80
|
+
: 'export type RequiredWireServices = Partial<Services>',
|
|
81
81
|
'',
|
|
82
82
|
].join('\n');
|
|
83
83
|
return code;
|
|
@@ -87,16 +87,16 @@ export const pikkuServices = pikkuSessionlessFunc({
|
|
|
87
87
|
const visitState = await getInspectorState();
|
|
88
88
|
// Check for required types
|
|
89
89
|
checkRequiredTypes(visitState.filesAndMethodsErrors, {
|
|
90
|
-
|
|
90
|
+
wireServiceType: true,
|
|
91
91
|
singletonServicesType: true,
|
|
92
92
|
});
|
|
93
|
-
const {
|
|
94
|
-
if (!
|
|
95
|
-
throw new Error('Required types not found:
|
|
93
|
+
const { wireServicesType, singletonServicesType } = visitState.filesAndMethods;
|
|
94
|
+
if (!wireServicesType || !singletonServicesType) {
|
|
95
|
+
throw new Error('Required types not found: wireServicesType or singletonServicesType');
|
|
96
96
|
}
|
|
97
97
|
const servicesImport = `import type { ${singletonServicesType.type} } from '${getFileImportRelativePath(config.typesDeclarationFile, singletonServicesType.typePath, config.packageMappings)}'`;
|
|
98
|
-
const
|
|
99
|
-
const servicesCode = serializeServicesMap(visitState.serviceAggregation.allSingletonServices, visitState.serviceAggregation.
|
|
98
|
+
const wireServicesImport = `import type { ${wireServicesType.type} } from '${getFileImportRelativePath(config.typesDeclarationFile, wireServicesType.typePath, config.packageMappings)}'`;
|
|
99
|
+
const servicesCode = serializeServicesMap(visitState.serviceAggregation.allSingletonServices, visitState.serviceAggregation.allWireServices, visitState.serviceAggregation.requiredServices, config.forceRequiredServices, servicesImport, wireServicesImport);
|
|
100
100
|
await writeFileInDir(logger, config.servicesFile, servicesCode);
|
|
101
101
|
},
|
|
102
102
|
middleware: [
|
|
@@ -8,7 +8,7 @@ export const pikkuSchemas = pikkuSessionlessFunc({
|
|
|
8
8
|
func: async ({ logger, config, getInspectorState }) => {
|
|
9
9
|
const visitState = await getInspectorState();
|
|
10
10
|
const schemas = await generateSchemas(logger, config.tsconfig, visitState.functions.typesMap, visitState.functions.meta, visitState.http.meta, config.schemasFromTypes, config.schema?.additionalProperties);
|
|
11
|
-
await saveSchemas(logger, config.schemaDirectory, schemas, visitState.functions.typesMap, visitState.functions.meta, config.
|
|
11
|
+
await saveSchemas(logger, config.schemaDirectory, schemas, visitState.functions.typesMap, visitState.functions.meta, config.schema?.supportsImportAttributes || true, config.schemasFromTypes);
|
|
12
12
|
return true;
|
|
13
13
|
},
|
|
14
14
|
middleware: [
|
|
@@ -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) => string;
|