@pikku/cli 0.11.1 → 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 +8 -8
- 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 +2 -2
- package/.pikku/cli/pikku-cli-client.gen.ts +1 -3
- package/.pikku/cli/pikku-cli-types.gen.ts +3 -3
- package/.pikku/cli/pikku-cli-wirings-meta.gen.json +146 -0
- package/.pikku/cli/pikku-cli-wirings-meta.gen.ts +4 -157
- package/.pikku/cli/pikku-cli-wirings.gen.ts +3 -3
- package/.pikku/cli/pikku-cli.gen.ts +3 -3
- package/.pikku/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 +8 -8
- 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 +4 -6
- 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 +8 -8
- 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 +8 -8
- package/.pikku/rpc/pikku-rpc-wirings-map.internal.gen.d.ts +34 -33
- 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 +25 -25
- package/.pikku/schemas/schemas/PikkuCLIConfig.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 +8 -8
- 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 +21 -0
- 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 +2 -2
- package/dist/.pikku/cli/pikku-cli-client.gen.d.ts +1 -1
- package/dist/.pikku/cli/pikku-cli-client.gen.js +1 -3
- package/dist/.pikku/cli/pikku-cli-types.gen.d.ts +3 -3
- package/dist/.pikku/cli/pikku-cli-types.gen.js +1 -1
- package/dist/.pikku/cli/pikku-cli-wirings-meta.gen.js +3 -157
- package/dist/.pikku/cli/pikku-cli-wirings-meta.gen.json +146 -0
- package/dist/.pikku/cli/pikku-cli-wirings.gen.d.ts +2 -2
- package/dist/.pikku/cli/pikku-cli-wirings.gen.js +2 -2
- package/dist/.pikku/cli/pikku-cli.gen.d.ts +1 -1
- package/dist/.pikku/cli/pikku-cli.gen.js +3 -3
- package/dist/.pikku/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 +3 -6
- package/dist/.pikku/pikku-services.gen.js +2 -5
- 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 +15 -15
- package/dist/.pikku/schemas/schemas/PikkuCLIConfig.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 -26
- package/dist/src/cli.wiring.js +4 -4
- 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.js +1 -1
- 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 +4 -4
- 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 +1 -1
- 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.d.ts +0 -1
- package/dist/.pikku/function/pikku-functions.gen.js +0 -83
- package/dist/.pikku/rpc/pikku-rpc-wirings-meta.internal.gen.d.ts +0 -1
- package/dist/.pikku/rpc/pikku-rpc-wirings-meta.internal.gen.js +0 -47
- package/dist/.pikku/schemas/schemas/PikkuRemoteInternalRPCInput.schema.json +0 -1
|
@@ -4,6 +4,7 @@ import { writeFileInDir } from '../../../utils/file-writer.js';
|
|
|
4
4
|
import { logCommandInfoAndTime } from '../../../middleware/log-command-info-and-time.js';
|
|
5
5
|
import { readFile } from 'fs/promises';
|
|
6
6
|
import { join } from 'path';
|
|
7
|
+
import { getFileImportRelativePath } from '../../../utils/file-import-path.js';
|
|
7
8
|
// Helper function to generate arguments from schema
|
|
8
9
|
const generateArgumentsFromSchema = async (inputSchema, schemaDirectory, typesMap, logger) => {
|
|
9
10
|
if (!inputSchema)
|
|
@@ -40,7 +41,7 @@ const generateArgumentsFromSchema = async (inputSchema, schemaDirectory, typesMa
|
|
|
40
41
|
export const pikkuMCP = pikkuSessionlessFunc({
|
|
41
42
|
func: async ({ logger, config, getInspectorState }) => {
|
|
42
43
|
const { mcpEndpoints, functions } = await getInspectorState();
|
|
43
|
-
const { mcpWiringsFile, mcpWiringsMetaFile, packageMappings, schemaDirectory, } = config;
|
|
44
|
+
const { mcpWiringsFile, mcpWiringsMetaFile, packageMappings, schemaDirectory, schema, } = config;
|
|
44
45
|
await writeFileInDir(logger, mcpWiringsFile, serializeFileImports('wireMCPResource or wireMCPTool', mcpWiringsFile, mcpEndpoints.files, packageMappings));
|
|
45
46
|
// Populate arguments for prompts meta before serializing
|
|
46
47
|
const promptsMetaWithArguments = { ...mcpEndpoints.promptsMeta };
|
|
@@ -51,10 +52,23 @@ export const pikkuMCP = pikkuSessionlessFunc({
|
|
|
51
52
|
promptMeta.arguments = await generateArgumentsFromSchema(inputType || null, schemaDirectory || '', functions.typesMap, logger);
|
|
52
53
|
}
|
|
53
54
|
}
|
|
55
|
+
const metaData = {
|
|
56
|
+
resourcesMeta: mcpEndpoints.resourcesMeta,
|
|
57
|
+
toolsMeta: mcpEndpoints.toolsMeta,
|
|
58
|
+
promptsMeta: promptsMetaWithArguments,
|
|
59
|
+
};
|
|
60
|
+
await writeFileInDir(logger, config.mcpWiringsMetaJsonFile, JSON.stringify(metaData, null, 2));
|
|
61
|
+
const jsonImportPath = getFileImportRelativePath(mcpWiringsMetaFile, config.mcpWiringsMetaJsonFile, packageMappings);
|
|
62
|
+
const supportsImportAttributes = schema?.supportsImportAttributes ?? false;
|
|
63
|
+
const importStatement = supportsImportAttributes
|
|
64
|
+
? `import metaData from '${jsonImportPath}' with { type: 'json' }`
|
|
65
|
+
: `import metaData from '${jsonImportPath}'`;
|
|
54
66
|
await writeFileInDir(logger, mcpWiringsMetaFile, `import { pikkuState } from '@pikku/core'
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
pikkuState('mcp', '
|
|
67
|
+
import type { MCPResourceMeta, MCPToolMeta, MCPPromptMeta } from '@pikku/core/mcp'
|
|
68
|
+
${importStatement}
|
|
69
|
+
pikkuState('mcp', 'resourcesMeta', metaData.resourcesMeta as MCPResourceMeta)
|
|
70
|
+
pikkuState('mcp', 'toolsMeta', metaData.toolsMeta as MCPToolMeta)
|
|
71
|
+
pikkuState('mcp', 'promptsMeta', metaData.promptsMeta as MCPPromptMeta)`);
|
|
58
72
|
return true;
|
|
59
73
|
},
|
|
60
74
|
middleware: [
|
|
@@ -27,21 +27,21 @@ import type { PikkuFunctionConfig, PikkuFunctionSessionless } from '${functionTy
|
|
|
27
27
|
* @template In - Input type for the resource request
|
|
28
28
|
* @template URI - URI template string type for compile-time parameter validation
|
|
29
29
|
*/
|
|
30
|
-
type MCPResourceWiring<In, URI extends string> = CoreMCPResource<PikkuFunctionConfig<In, MCPResourceResponse>> & { uri: URI }
|
|
30
|
+
type MCPResourceWiring<In, URI extends string> = CoreMCPResource<PikkuFunctionConfig<In, MCPResourceResponse, 'rpc' | 'session' | 'mcp'>> & { uri: URI }
|
|
31
31
|
|
|
32
32
|
/**
|
|
33
33
|
* Type definition for MCP tools that AI models can invoke.
|
|
34
34
|
*
|
|
35
35
|
* @template In - Input type for the tool invocation
|
|
36
36
|
*/
|
|
37
|
-
type MCPToolWiring<In> = CoreMCPTool<PikkuFunctionConfig<In, MCPToolResponse>>
|
|
37
|
+
type MCPToolWiring<In> = CoreMCPTool<PikkuFunctionConfig<In, MCPToolResponse, 'rpc' | 'session' | 'mcp'>>
|
|
38
38
|
|
|
39
39
|
/**
|
|
40
40
|
* Type definition for MCP prompts that provide templates to AI models.
|
|
41
41
|
*
|
|
42
42
|
* @template In - Input type for the prompt parameters
|
|
43
43
|
*/
|
|
44
|
-
type MCPPromptWiring<In> = CoreMCPPrompt<PikkuFunctionConfig<In, MCPPromptResponse>>
|
|
44
|
+
type MCPPromptWiring<In> = CoreMCPPrompt<PikkuFunctionConfig<In, MCPPromptResponse, 'rpc' | 'session' | 'mcp'>>
|
|
45
45
|
|
|
46
46
|
/**
|
|
47
47
|
* Registers an MCP resource with the Pikku framework.
|
|
@@ -93,12 +93,12 @@ export const wireMCPPrompt = <In>(
|
|
|
93
93
|
*/
|
|
94
94
|
export const pikkuMCPPromptFunc = <In>(
|
|
95
95
|
func:
|
|
96
|
-
| PikkuFunctionSessionless<In, MCPPromptResponse>
|
|
96
|
+
| PikkuFunctionSessionless<In, MCPPromptResponse, 'mcp'>
|
|
97
97
|
| {
|
|
98
|
-
func: PikkuFunctionSessionless<In, MCPPromptResponse>
|
|
98
|
+
func: PikkuFunctionSessionless<In, MCPPromptResponse, 'mcp'>
|
|
99
99
|
name?: string
|
|
100
100
|
}
|
|
101
|
-
): PikkuFunctionConfig<In, MCPPromptResponse> => {
|
|
101
|
+
): PikkuFunctionConfig<In, MCPPromptResponse, 'mcp'> => {
|
|
102
102
|
return typeof func === 'function' ? { func } : func
|
|
103
103
|
}
|
|
104
104
|
|
|
@@ -112,12 +112,12 @@ export const pikkuMCPPromptFunc = <In>(
|
|
|
112
112
|
*/
|
|
113
113
|
export const pikkuMCPToolFunc = <In>(
|
|
114
114
|
func:
|
|
115
|
-
| PikkuFunctionSessionless<In, MCPToolResponse,
|
|
115
|
+
| PikkuFunctionSessionless<In, MCPToolResponse, 'mcp'>
|
|
116
116
|
| {
|
|
117
|
-
func: PikkuFunctionSessionless<In, MCPToolResponse,
|
|
117
|
+
func: PikkuFunctionSessionless<In, MCPToolResponse, 'mcp'>
|
|
118
118
|
name?: string
|
|
119
119
|
}
|
|
120
|
-
): PikkuFunctionConfig<In, MCPToolResponse> => {
|
|
120
|
+
): PikkuFunctionConfig<In, MCPToolResponse, 'mcp'> => {
|
|
121
121
|
return typeof func === 'function' ? { func } : func
|
|
122
122
|
}
|
|
123
123
|
|
|
@@ -131,12 +131,12 @@ export const pikkuMCPToolFunc = <In>(
|
|
|
131
131
|
*/
|
|
132
132
|
export const pikkuMCPResourceFunc = <In>(
|
|
133
133
|
func:
|
|
134
|
-
| PikkuFunctionSessionless<In, MCPResourceResponse,
|
|
134
|
+
| PikkuFunctionSessionless<In, MCPResourceResponse, 'mcp'>
|
|
135
135
|
| {
|
|
136
|
-
func: PikkuFunctionSessionless<In, MCPResourceResponse,
|
|
136
|
+
func: PikkuFunctionSessionless<In, MCPResourceResponse, 'mcp'>
|
|
137
137
|
name?: string
|
|
138
138
|
}
|
|
139
|
-
): PikkuFunctionConfig<In, MCPResourceResponse> => {
|
|
139
|
+
): PikkuFunctionConfig<In, MCPResourceResponse, 'mcp'> => {
|
|
140
140
|
return typeof func === 'function' ? { func } : func
|
|
141
141
|
}
|
|
142
142
|
`;
|
|
@@ -3,17 +3,41 @@ import { writeFileInDir } from '../../../utils/file-writer.js';
|
|
|
3
3
|
import { logCommandInfoAndTime } from '../../../middleware/log-command-info-and-time.js';
|
|
4
4
|
import { serializeMiddlewareImports } from './serialize-middleware-imports.js';
|
|
5
5
|
import { serializeMiddlewareGroupsMeta } from './serialize-middleware-groups-meta.js';
|
|
6
|
+
import { getFileImportRelativePath } from '../../../utils/file-import-path.js';
|
|
6
7
|
export const pikkuMiddleware = pikkuSessionlessFunc({
|
|
7
8
|
func: async ({ logger, config, getInspectorState }) => {
|
|
8
9
|
const state = await getInspectorState();
|
|
9
10
|
const { middleware } = state;
|
|
10
|
-
const { middlewareFile, packageMappings } = config;
|
|
11
|
+
const { middlewareFile, packageMappings, schema } = config;
|
|
11
12
|
let filesGenerated = false;
|
|
12
13
|
// Check if there are any middleware groups
|
|
13
14
|
const hasHTTPGroups = state.http.routeMiddleware.size > 0;
|
|
14
15
|
const hasTagGroups = state.middleware.tagMiddleware.size > 0;
|
|
15
16
|
if (hasHTTPGroups || hasTagGroups) {
|
|
16
|
-
|
|
17
|
+
const metaData = serializeMiddlewareGroupsMeta(state);
|
|
18
|
+
// Write JSON file
|
|
19
|
+
await writeFileInDir(logger, config.middlewareGroupsMetaJsonFile, JSON.stringify(metaData, null, 2));
|
|
20
|
+
// Calculate relative path from TS file to JSON file
|
|
21
|
+
const jsonImportPath = getFileImportRelativePath(config.middlewareGroupsMetaFile, config.middlewareGroupsMetaJsonFile, packageMappings);
|
|
22
|
+
// Write TypeScript file that imports JSON
|
|
23
|
+
const supportsImportAttributes = schema?.supportsImportAttributes ?? false;
|
|
24
|
+
const importStatement = supportsImportAttributes
|
|
25
|
+
? `import metaData from '${jsonImportPath}' with { type: 'json' }`
|
|
26
|
+
: `import metaData from '${jsonImportPath}'`;
|
|
27
|
+
const tsContent = `import { pikkuState } from '@pikku/core'
|
|
28
|
+
${importStatement}
|
|
29
|
+
|
|
30
|
+
// HTTP middleware groups metadata
|
|
31
|
+
if (metaData.httpGroups && Object.keys(metaData.httpGroups).length > 0) {
|
|
32
|
+
pikkuState('middleware', 'httpGroupMeta', metaData.httpGroups)
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
// Tag middleware groups metadata
|
|
36
|
+
if (metaData.tagGroups && Object.keys(metaData.tagGroups).length > 0) {
|
|
37
|
+
pikkuState('middleware', 'tagGroupMeta', metaData.tagGroups)
|
|
38
|
+
}
|
|
39
|
+
`;
|
|
40
|
+
await writeFileInDir(logger, config.middlewareGroupsMetaFile, tsContent);
|
|
17
41
|
// Always generate middleware imports file when groups exist (even if empty)
|
|
18
42
|
await writeFileInDir(logger, middlewareFile, serializeMiddlewareImports(middlewareFile, middleware, state.http, packageMappings));
|
|
19
43
|
filesGenerated = true;
|
|
@@ -1,8 +1,11 @@
|
|
|
1
1
|
import type { InspectorState } from '@pikku/inspector';
|
|
2
2
|
/**
|
|
3
|
-
* Generates the middleware groups metadata
|
|
3
|
+
* Generates the middleware groups metadata that stores metadata about
|
|
4
4
|
* tag-based and HTTP middleware groups for visualization and inspection.
|
|
5
5
|
*
|
|
6
6
|
* This includes services, middleware count, factory status, etc.
|
|
7
7
|
*/
|
|
8
|
-
export declare const serializeMiddlewareGroupsMeta: (state: InspectorState) =>
|
|
8
|
+
export declare const serializeMiddlewareGroupsMeta: (state: InspectorState) => {
|
|
9
|
+
httpGroups: Record<string, any>;
|
|
10
|
+
tagGroups: Record<string, any>;
|
|
11
|
+
};
|
|
@@ -1,11 +1,10 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* Generates the middleware groups metadata
|
|
2
|
+
* Generates the middleware groups metadata that stores metadata about
|
|
3
3
|
* tag-based and HTTP middleware groups for visualization and inspection.
|
|
4
4
|
*
|
|
5
5
|
* This includes services, middleware count, factory status, etc.
|
|
6
6
|
*/
|
|
7
7
|
export const serializeMiddlewareGroupsMeta = (state) => {
|
|
8
|
-
const lines = [`import { pikkuState } from '@pikku/core'`, ``];
|
|
9
8
|
// Serialize HTTP middleware groups metadata
|
|
10
9
|
const httpGroups = {};
|
|
11
10
|
for (const [pattern, meta] of state.http.routeMiddleware.entries()) {
|
|
@@ -18,11 +17,6 @@ export const serializeMiddlewareGroupsMeta = (state) => {
|
|
|
18
17
|
isFactory: meta.isFactory,
|
|
19
18
|
};
|
|
20
19
|
}
|
|
21
|
-
if (Object.keys(httpGroups).length > 0) {
|
|
22
|
-
lines.push(`// HTTP middleware groups metadata`);
|
|
23
|
-
lines.push(`pikkuState('middleware', 'httpGroupMeta', ${JSON.stringify(httpGroups, null, 2)})`);
|
|
24
|
-
lines.push(``);
|
|
25
|
-
}
|
|
26
20
|
// Serialize tag middleware groups metadata
|
|
27
21
|
const tagGroups = {};
|
|
28
22
|
for (const [tag, meta] of state.middleware.tagMiddleware.entries()) {
|
|
@@ -35,10 +29,8 @@ export const serializeMiddlewareGroupsMeta = (state) => {
|
|
|
35
29
|
isFactory: meta.isFactory,
|
|
36
30
|
};
|
|
37
31
|
}
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
}
|
|
43
|
-
return lines.join('\n');
|
|
32
|
+
return {
|
|
33
|
+
httpGroups,
|
|
34
|
+
tagGroups,
|
|
35
|
+
};
|
|
44
36
|
};
|
|
@@ -2,13 +2,19 @@ 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 { serializeQueueMeta } from './serialize-queue-meta.js';
|
|
5
|
+
import { serializeQueueMeta, serializeQueueMetaTS, } from './serialize-queue-meta.js';
|
|
6
|
+
import { getFileImportRelativePath } from '../../../utils/file-import-path.js';
|
|
6
7
|
export const pikkuQueue = pikkuSessionlessFunc({
|
|
7
8
|
func: async ({ logger, config, getInspectorState }) => {
|
|
8
9
|
const visitState = await getInspectorState();
|
|
9
|
-
const { queueWorkersWiringFile, queueWorkersWiringMetaFile, packageMappings, } = config;
|
|
10
|
+
const { queueWorkersWiringFile, queueWorkersWiringMetaFile, queueWorkersWiringMetaJsonFile, packageMappings, schema, } = config;
|
|
10
11
|
const { queueWorkers } = visitState;
|
|
11
|
-
|
|
12
|
+
// Write JSON file
|
|
13
|
+
await writeFileInDir(logger, queueWorkersWiringMetaJsonFile, JSON.stringify(serializeQueueMeta(queueWorkers.meta), null, 2));
|
|
14
|
+
// Calculate relative path from TS file to JSON file
|
|
15
|
+
const jsonImportPath = getFileImportRelativePath(queueWorkersWiringMetaFile, queueWorkersWiringMetaJsonFile, packageMappings);
|
|
16
|
+
// Write TypeScript file that imports JSON
|
|
17
|
+
await writeFileInDir(logger, queueWorkersWiringMetaFile, serializeQueueMetaTS(jsonImportPath, schema?.supportsImportAttributes ?? false));
|
|
12
18
|
await writeFileInDir(logger, queueWorkersWiringFile, serializeFileImports('addQueueWorkers', queueWorkersWiringFile, queueWorkers.files, packageMappings));
|
|
13
19
|
return true;
|
|
14
20
|
},
|
|
@@ -2,11 +2,12 @@ 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 { serializeQueueMeta } from './serialize-queue-meta.js';
|
|
5
|
+
import { serializeQueueMeta, serializeQueueMetaTS, } from './serialize-queue-meta.js';
|
|
6
|
+
import { getFileImportRelativePath } from '../../../utils/file-import-path.js';
|
|
6
7
|
export const pikkuQueue = pikkuSessionlessFunc({
|
|
7
8
|
func: async ({ logger, config, getInspectorState }) => {
|
|
8
9
|
const visitState = await getInspectorState();
|
|
9
|
-
const { queueWorkersWiringFile, queueWorkersWiringMetaFile, packageMappings, } = config;
|
|
10
|
+
const { queueWorkersWiringFile, queueWorkersWiringMetaFile, queueWorkersWiringMetaJsonFile, packageMappings, schema, } = config;
|
|
10
11
|
const { queueWorkers } = visitState;
|
|
11
12
|
// Add remote RPC worker to queue metadata if it exists
|
|
12
13
|
const queueMeta = { ...queueWorkers.meta };
|
|
@@ -16,7 +17,12 @@ export const pikkuQueue = pikkuSessionlessFunc({
|
|
|
16
17
|
queueName: 'pikku-remote-internal-rpc',
|
|
17
18
|
};
|
|
18
19
|
}
|
|
19
|
-
|
|
20
|
+
// Write JSON file
|
|
21
|
+
await writeFileInDir(logger, queueWorkersWiringMetaJsonFile, JSON.stringify(serializeQueueMeta(queueMeta), null, 2));
|
|
22
|
+
// Calculate relative path from TS file to JSON file
|
|
23
|
+
const jsonImportPath = getFileImportRelativePath(queueWorkersWiringMetaFile, queueWorkersWiringMetaJsonFile, packageMappings);
|
|
24
|
+
// Write TypeScript file that imports JSON
|
|
25
|
+
await writeFileInDir(logger, queueWorkersWiringMetaFile, serializeQueueMetaTS(jsonImportPath, schema?.supportsImportAttributes ?? false));
|
|
20
26
|
await writeFileInDir(logger, queueWorkersWiringFile, serializeFileImports('addQueueWorkers', queueWorkersWiringFile, queueWorkers.files, packageMappings));
|
|
21
27
|
return true;
|
|
22
28
|
},
|
|
@@ -1,2 +1,3 @@
|
|
|
1
1
|
import { QueueWorkersMeta } from '@pikku/core/queue';
|
|
2
|
-
export declare const serializeQueueMeta: (queueWorkersMeta: QueueWorkersMeta) =>
|
|
2
|
+
export declare const serializeQueueMeta: (queueWorkersMeta: QueueWorkersMeta) => QueueWorkersMeta;
|
|
3
|
+
export declare const serializeQueueMetaTS: (jsonImportPath: string, supportsImportAttributes: boolean) => string;
|
|
@@ -1,6 +1,15 @@
|
|
|
1
1
|
export const serializeQueueMeta = (queueWorkersMeta) => {
|
|
2
|
+
return queueWorkersMeta;
|
|
3
|
+
};
|
|
4
|
+
export const serializeQueueMetaTS = (jsonImportPath, supportsImportAttributes) => {
|
|
5
|
+
const importStatement = supportsImportAttributes
|
|
6
|
+
? `import metaData from '${jsonImportPath}' with { type: 'json' }`
|
|
7
|
+
: `import metaData from '${jsonImportPath}'`;
|
|
2
8
|
const serializedOutput = [];
|
|
3
9
|
serializedOutput.push("import { pikkuState } from '@pikku/core'");
|
|
4
|
-
serializedOutput.push(
|
|
10
|
+
serializedOutput.push("import { QueueWorkersMeta } from '@pikku/core/queue'");
|
|
11
|
+
serializedOutput.push(importStatement);
|
|
12
|
+
serializedOutput.push('');
|
|
13
|
+
serializedOutput.push("pikkuState('queue', 'meta', metaData as QueueWorkersMeta)");
|
|
5
14
|
return serializedOutput.join('\n');
|
|
6
15
|
};
|
|
@@ -15,7 +15,7 @@ import type { PikkuFunctionConfig } from '${functionTypesImportPath}'
|
|
|
15
15
|
* @template In - Input type for the queue job
|
|
16
16
|
* @template Out - Output type for the queue job
|
|
17
17
|
*/
|
|
18
|
-
type QueueWiring<In, Out> = CoreQueueWorker<PikkuFunctionConfig<In, Out>>
|
|
18
|
+
type QueueWiring<In, Out> = CoreQueueWorker<PikkuFunctionConfig<In, Out, 'session' | 'rpc'>>
|
|
19
19
|
|
|
20
20
|
/**
|
|
21
21
|
* Registers a queue worker with the Pikku framework.
|
|
@@ -1,12 +1,19 @@
|
|
|
1
1
|
import { pikkuSessionlessFunc } from '../../../../.pikku/pikku-types.gen.js';
|
|
2
2
|
import { writeFileInDir } from '../../../utils/file-writer.js';
|
|
3
3
|
import { logCommandInfoAndTime } from '../../../middleware/log-command-info-and-time.js';
|
|
4
|
+
import { getFileImportRelativePath } from '../../../utils/file-import-path.js';
|
|
4
5
|
export const pikkuRPC = pikkuSessionlessFunc({
|
|
5
6
|
func: async ({ logger, config, getInspectorState }) => {
|
|
6
7
|
const { rpc } = await getInspectorState();
|
|
7
|
-
const { rpcInternalWiringMetaFile } = config;
|
|
8
|
+
const { rpcInternalWiringMetaFile, rpcInternalWiringMetaJsonFile, packageMappings, schema, } = config;
|
|
8
9
|
if (rpc.internalFiles.size > 0) {
|
|
9
|
-
await writeFileInDir(logger,
|
|
10
|
+
await writeFileInDir(logger, rpcInternalWiringMetaJsonFile, JSON.stringify(rpc.internalMeta, null, 2));
|
|
11
|
+
const jsonImportPath = getFileImportRelativePath(rpcInternalWiringMetaFile, rpcInternalWiringMetaJsonFile, packageMappings);
|
|
12
|
+
const supportsImportAttributes = schema?.supportsImportAttributes ?? false;
|
|
13
|
+
const importStatement = supportsImportAttributes
|
|
14
|
+
? `import metaData from '${jsonImportPath}' with { type: 'json' }`
|
|
15
|
+
: `import metaData from '${jsonImportPath}'`;
|
|
16
|
+
await writeFileInDir(logger, rpcInternalWiringMetaFile, `import { pikkuState } from '@pikku/core'\n${importStatement}\npikkuState('rpc', 'meta', metaData as Record<string, string>)`);
|
|
10
17
|
return true;
|
|
11
18
|
}
|
|
12
19
|
return false;
|
|
@@ -13,16 +13,23 @@ import { pikkuSessionlessFunc, wireHTTP } from '${pathToPikkuTypes}'
|
|
|
13
13
|
* This is used for public HTTP access to exposed server functions
|
|
14
14
|
*/
|
|
15
15
|
export const rpcCaller = pikkuSessionlessFunc<
|
|
16
|
-
{
|
|
16
|
+
{ rpcName: string, data?: any },
|
|
17
17
|
any
|
|
18
18
|
>({
|
|
19
|
-
func: async ({
|
|
20
|
-
return await (rpc.invokeExposed as any)(
|
|
19
|
+
func: async (services, { rpcName, data }, { rpc }) => {
|
|
20
|
+
return await (rpc.invokeExposed as any)(rpcName, data)
|
|
21
21
|
},
|
|
22
22
|
})
|
|
23
23
|
|
|
24
24
|
wireHTTP({
|
|
25
|
-
route:
|
|
25
|
+
route: "/rpc/:rpcName",
|
|
26
|
+
method: "options",
|
|
27
|
+
auth: false,
|
|
28
|
+
func: pikkuSessionlessFunc<{ rpcName: string }>(async () => void 0),
|
|
29
|
+
});
|
|
30
|
+
|
|
31
|
+
wireHTTP({
|
|
32
|
+
route: '/rpc/:rpcName',
|
|
26
33
|
method: 'post',
|
|
27
34
|
func: rpcCaller,
|
|
28
35
|
})
|
|
@@ -16,7 +16,7 @@ export const pikkuRemoteInternalRPC = pikkuSessionlessFunc<
|
|
|
16
16
|
{ rpcName: string, data?: any },
|
|
17
17
|
any
|
|
18
18
|
>({
|
|
19
|
-
func: async (
|
|
19
|
+
func: async (_services, { rpcName, data }, { rpc }) => {
|
|
20
20
|
return await (rpc.invoke as any)(rpcName, data)
|
|
21
21
|
},
|
|
22
22
|
internal: true,
|
|
@@ -54,12 +54,12 @@ export class PikkuRPC {
|
|
|
54
54
|
* This is a generic method that routes to the appropriate server function
|
|
55
55
|
* based on the function name and passes the provided data.
|
|
56
56
|
*
|
|
57
|
-
* @param
|
|
57
|
+
* @param rpcName - The name of the server function to invoke
|
|
58
58
|
* @param data - The data to pass to the server function
|
|
59
59
|
* @returns A promise that resolves with the function's return value
|
|
60
60
|
*/
|
|
61
|
-
invoke: RPCInvoke = async (
|
|
62
|
-
return await this.pikkuFetch.post(
|
|
61
|
+
invoke: RPCInvoke = async (rpcName, data) => {
|
|
62
|
+
return await this.pikkuFetch.post(\`/rpc/\${rpcName}\` as any, { rpcName, data }) as any
|
|
63
63
|
}
|
|
64
64
|
}
|
|
65
65
|
|
|
@@ -2,13 +2,16 @@ 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 { serializeSchedulerMeta } from './serialize-scheduler-meta.js';
|
|
5
|
+
import { serializeSchedulerMeta, serializeSchedulerMetaTS, } from './serialize-scheduler-meta.js';
|
|
6
|
+
import { getFileImportRelativePath } from '../../../utils/file-import-path.js';
|
|
6
7
|
export const pikkuScheduler = pikkuSessionlessFunc({
|
|
7
8
|
func: async ({ logger, config, getInspectorState }) => {
|
|
8
9
|
const visitState = await getInspectorState();
|
|
9
|
-
const { schedulersWiringFile, schedulersWiringMetaFile, packageMappings } = config;
|
|
10
|
+
const { schedulersWiringFile, schedulersWiringMetaFile, schedulersWiringMetaJsonFile, packageMappings, schema, } = config;
|
|
10
11
|
const { scheduledTasks } = visitState;
|
|
11
|
-
await writeFileInDir(logger,
|
|
12
|
+
await writeFileInDir(logger, schedulersWiringMetaJsonFile, JSON.stringify(serializeSchedulerMeta(scheduledTasks.meta), null, 2));
|
|
13
|
+
const jsonImportPath = getFileImportRelativePath(schedulersWiringMetaFile, schedulersWiringMetaJsonFile, packageMappings);
|
|
14
|
+
await writeFileInDir(logger, schedulersWiringMetaFile, serializeSchedulerMetaTS(scheduledTasks.meta, jsonImportPath, schema?.supportsImportAttributes ?? false));
|
|
12
15
|
await writeFileInDir(logger, schedulersWiringFile, serializeFileImports('addScheduledTasks', schedulersWiringFile, scheduledTasks.files, packageMappings));
|
|
13
16
|
return true;
|
|
14
17
|
},
|
|
@@ -1,2 +1,3 @@
|
|
|
1
1
|
import { ScheduledTasksMeta } from '@pikku/core/scheduler';
|
|
2
|
-
export declare const serializeSchedulerMeta: (scheduledTasksMeta: ScheduledTasksMeta) =>
|
|
2
|
+
export declare const serializeSchedulerMeta: (scheduledTasksMeta: ScheduledTasksMeta) => ScheduledTasksMeta;
|
|
3
|
+
export declare const serializeSchedulerMetaTS: (scheduledTasksMeta: ScheduledTasksMeta, jsonImportPath: string, supportsImportAttributes: any) => string;
|
|
@@ -1,7 +1,17 @@
|
|
|
1
1
|
export const serializeSchedulerMeta = (scheduledTasksMeta) => {
|
|
2
|
+
return scheduledTasksMeta;
|
|
3
|
+
};
|
|
4
|
+
export const serializeSchedulerMetaTS = (scheduledTasksMeta, jsonImportPath, supportsImportAttributes) => {
|
|
5
|
+
const importStatement = supportsImportAttributes
|
|
6
|
+
? `import metaData from '${jsonImportPath}' with { type: 'json' }`
|
|
7
|
+
: `import metaData from '${jsonImportPath}'`;
|
|
2
8
|
const serializedOutput = [];
|
|
3
9
|
serializedOutput.push("import { pikkuState } from '@pikku/core'");
|
|
4
|
-
serializedOutput.push(
|
|
10
|
+
serializedOutput.push("import { ScheduledTasksMeta } from '@pikku/core/scheduler'");
|
|
11
|
+
serializedOutput.push(importStatement);
|
|
12
|
+
serializedOutput.push('');
|
|
13
|
+
serializedOutput.push("pikkuState('scheduler', 'meta', metaData as ScheduledTasksMeta)");
|
|
14
|
+
serializedOutput.push('');
|
|
5
15
|
const scheduledTasksMetaValues = Object.values(scheduledTasksMeta);
|
|
6
16
|
if (scheduledTasksMetaValues.length > 0) {
|
|
7
17
|
serializedOutput.push(`export type ScheduledTaskNames = '${scheduledTasksMetaValues.map((s) => s.name).join("' | '")}'`);
|
|
@@ -13,7 +13,7 @@ import type { PikkuFunctionConfig, PikkuMiddleware } from '${functionTypesImport
|
|
|
13
13
|
* Type definition for scheduled tasks that run at specified intervals.
|
|
14
14
|
* These are sessionless functions that execute based on cron expressions.
|
|
15
15
|
*/
|
|
16
|
-
type SchedulerWiring = CoreScheduledTask<PikkuFunctionConfig<void, void>, PikkuMiddleware>
|
|
16
|
+
type SchedulerWiring = CoreScheduledTask<PikkuFunctionConfig<void, void, 'session' | 'rpc'>, PikkuMiddleware>
|
|
17
17
|
|
|
18
18
|
/**
|
|
19
19
|
* Registers a scheduled task with the Pikku framework.
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare const pikkuServiceMetadata: any;
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import { pikkuSessionlessFunc } from '../../../../.pikku/pikku-types.gen.js';
|
|
2
|
+
import { logCommandInfoAndTime } from '../../../middleware/log-command-info-and-time.js';
|
|
3
|
+
import { writeAllServiceMetadata } from '@pikku/inspector';
|
|
4
|
+
export const pikkuServiceMetadata = pikkuSessionlessFunc({
|
|
5
|
+
func: async ({ logger, config, getInspectorState }) => {
|
|
6
|
+
const state = await getInspectorState();
|
|
7
|
+
// Only write service metadata if there are services to document
|
|
8
|
+
if (state.serviceMetadata && state.serviceMetadata.length > 0) {
|
|
9
|
+
writeAllServiceMetadata(state.serviceMetadata, config.outDir);
|
|
10
|
+
logger.debug(`• Wrote ${state.serviceMetadata.length} service metadata files`);
|
|
11
|
+
}
|
|
12
|
+
else {
|
|
13
|
+
logger.debug('• No service metadata to write');
|
|
14
|
+
}
|
|
15
|
+
},
|
|
16
|
+
middleware: [
|
|
17
|
+
logCommandInfoAndTime({
|
|
18
|
+
commandStart: 'Generating service metadata',
|
|
19
|
+
commandEnd: 'Generated service metadata',
|
|
20
|
+
}),
|
|
21
|
+
],
|
|
22
|
+
});
|
|
@@ -6,6 +6,8 @@ export const pikkuWorkflowTypes = pikkuSessionlessFunc({
|
|
|
6
6
|
func: async ({ logger, config }) => {
|
|
7
7
|
const { workflowTypesFile, functionTypesFile, packageMappings } = config;
|
|
8
8
|
const functionTypesImportPath = getFileImportRelativePath(workflowTypesFile, functionTypesFile, packageMappings);
|
|
9
|
-
|
|
9
|
+
// Get RPC map import path
|
|
10
|
+
const rpcMapImportPath = getFileImportRelativePath(workflowTypesFile, config.rpcInternalMapDeclarationFile, packageMappings);
|
|
11
|
+
await writeFileInDir(logger, workflowTypesFile, serializeWorkflowTypes(functionTypesImportPath, rpcMapImportPath));
|
|
10
12
|
},
|
|
11
13
|
});
|
|
@@ -1,18 +1,18 @@
|
|
|
1
1
|
import { pikkuSessionlessFunc } from '../../../../.pikku/pikku-types.gen.js';
|
|
2
2
|
import { ErrorCode } from '@pikku/inspector';
|
|
3
|
-
import { serializeFileImports } from '../../../utils/file-imports-serializer.js';
|
|
4
3
|
import { writeFileInDir } from '../../../utils/file-writer.js';
|
|
5
4
|
import { logCommandInfoAndTime } from '../../../middleware/log-command-info-and-time.js';
|
|
6
|
-
import { serializeWorkflowMeta } from './serialize-workflow-meta.js';
|
|
5
|
+
import { serializeWorkflowMeta, serializeWorkflowMetaTS, } from './serialize-workflow-meta.js';
|
|
7
6
|
import { serializeWorkflowTypes } from './serialize-workflow-types.js';
|
|
8
7
|
import { serializeWorkflowMap } from './serialize-workflow-map.js';
|
|
9
8
|
import { serializeWorkflowWorkers } from './serialize-workflow-workers.js';
|
|
9
|
+
import { serializeWorkflowWirings } from './serialize-workflow-wirings.js';
|
|
10
10
|
import { getFileImportRelativePath } from '../../../utils/file-import-path.js';
|
|
11
11
|
import { join } from 'path';
|
|
12
12
|
export const pikkuWorkflow = pikkuSessionlessFunc({
|
|
13
13
|
func: async ({ logger, config, getInspectorState }) => {
|
|
14
14
|
const visitState = await getInspectorState();
|
|
15
|
-
const { workflowsWiringFile, workflowsWiringMetaFile, workflowMapDeclarationFile, workflowTypesFile, functionTypesFile, typesDeclarationFile, packageMappings, } = config;
|
|
15
|
+
const { workflowsWiringFile, workflowsWiringMetaFile, workflowsWiringMetaJsonFile, workflowMapDeclarationFile, workflowTypesFile, functionTypesFile, typesDeclarationFile, packageMappings, schema, } = config;
|
|
16
16
|
const { workflows, functions: functionState } = visitState;
|
|
17
17
|
const { typesMap } = functionState;
|
|
18
18
|
// Validate that workflowService service is configured if workflows are defined
|
|
@@ -24,13 +24,17 @@ export const pikkuWorkflow = pikkuSessionlessFunc({
|
|
|
24
24
|
throw new Error('WorkflowState service not configured but workflows are defined');
|
|
25
25
|
}
|
|
26
26
|
}
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
// Write workflow
|
|
30
|
-
await writeFileInDir(logger,
|
|
27
|
+
await writeFileInDir(logger, workflowsWiringMetaJsonFile, JSON.stringify(serializeWorkflowMeta(workflows.meta), null, 2));
|
|
28
|
+
const jsonImportPath = getFileImportRelativePath(workflowsWiringMetaFile, workflowsWiringMetaJsonFile, packageMappings);
|
|
29
|
+
// Write workflow metadata TypeScript file that imports JSON
|
|
30
|
+
await writeFileInDir(logger, workflowsWiringMetaFile, serializeWorkflowMetaTS(workflows.meta, jsonImportPath, schema?.supportsImportAttributes ?? false));
|
|
31
|
+
// Write workflow wirings (imports and addWorkflow calls)
|
|
32
|
+
await writeFileInDir(logger, workflowsWiringFile, serializeWorkflowWirings(workflowsWiringFile, workflows.files, packageMappings));
|
|
31
33
|
// Write workflow types
|
|
32
34
|
const functionTypesImportPath = getFileImportRelativePath(workflowTypesFile, functionTypesFile, packageMappings);
|
|
33
|
-
|
|
35
|
+
// Get RPC map import path
|
|
36
|
+
const rpcMapImportPath = getFileImportRelativePath(workflowTypesFile, config.rpcInternalMapDeclarationFile, packageMappings);
|
|
37
|
+
await writeFileInDir(logger, workflowTypesFile, serializeWorkflowTypes(functionTypesImportPath, rpcMapImportPath));
|
|
34
38
|
// Write workflow map (type-safe client API)
|
|
35
39
|
await writeFileInDir(logger, workflowMapDeclarationFile, serializeWorkflowMap(workflowMapDeclarationFile, packageMappings, typesMap, functionState.meta, workflows.meta));
|
|
36
40
|
if (config.workflows) {
|
|
@@ -1,2 +1,3 @@
|
|
|
1
1
|
import { WorkflowsMeta } from '@pikku/core/workflow';
|
|
2
|
-
export declare const serializeWorkflowMeta: (workflowsMeta: WorkflowsMeta) =>
|
|
2
|
+
export declare const serializeWorkflowMeta: (workflowsMeta: WorkflowsMeta) => WorkflowsMeta;
|
|
3
|
+
export declare const serializeWorkflowMetaTS: (workflowsMeta: WorkflowsMeta, jsonImportPath: string, supportsImportAttributes: boolean) => string;
|
|
@@ -1,7 +1,17 @@
|
|
|
1
1
|
export const serializeWorkflowMeta = (workflowsMeta) => {
|
|
2
|
+
return workflowsMeta;
|
|
3
|
+
};
|
|
4
|
+
export const serializeWorkflowMetaTS = (workflowsMeta, jsonImportPath, supportsImportAttributes) => {
|
|
5
|
+
const importStatement = supportsImportAttributes
|
|
6
|
+
? `import metaData from '${jsonImportPath}' with { type: 'json' }`
|
|
7
|
+
: `import metaData from '${jsonImportPath}'`;
|
|
2
8
|
const serializedOutput = [];
|
|
3
9
|
serializedOutput.push("import { pikkuState } from '@pikku/core'");
|
|
4
|
-
serializedOutput.push(
|
|
10
|
+
serializedOutput.push("import { WorkflowsMeta } from '@pikku/core/workflow'");
|
|
11
|
+
serializedOutput.push(importStatement);
|
|
12
|
+
serializedOutput.push('');
|
|
13
|
+
serializedOutput.push("pikkuState('workflows', 'meta', metaData as WorkflowsMeta)");
|
|
14
|
+
serializedOutput.push('');
|
|
5
15
|
const workflowsMetaValues = Object.values(workflowsMeta);
|
|
6
16
|
if (workflowsMetaValues.length > 0) {
|
|
7
17
|
serializedOutput.push(`export type WorkflowNames = '${workflowsMetaValues.map((w) => w.workflowName).join("' | '")}'`);
|