@pikku/cli 0.8.2 → 0.9.0

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.
Files changed (175) hide show
  1. package/CHANGELOG.md +17 -0
  2. package/bin/pikku-all.ts +41 -32
  3. package/bin/pikku-fetch.ts +1 -1
  4. package/bin/pikku-openapi.ts +2 -2
  5. package/bin/pikku-queue-service.ts +2 -2
  6. package/bin/pikku-websocket.ts +1 -1
  7. package/cli.schema.json +30 -30
  8. package/dist/bin/pikku-all.js +32 -32
  9. package/dist/bin/pikku-fetch.js +1 -1
  10. package/dist/bin/pikku-openapi.js +2 -2
  11. package/dist/bin/pikku-queue-service.js +2 -2
  12. package/dist/bin/pikku-websocket.js +1 -1
  13. package/dist/bin/pikku.js +0 -0
  14. package/dist/src/events/channels/pikku-channels.js +3 -3
  15. package/dist/src/events/channels/pikku-command-channels.js +3 -3
  16. package/dist/src/events/channels/serialize-typed-channel-map.js +2 -2
  17. package/dist/src/events/channels/serialize-websocket-wrapper.js +15 -1
  18. package/dist/src/events/fetch/index.js +2 -2
  19. package/dist/src/events/http/openapi-spec-generator.d.ts +2 -2
  20. package/dist/src/events/http/pikku-command-http-map.js +4 -4
  21. package/dist/src/events/http/pikku-command-http-routes.js +3 -3
  22. package/dist/src/events/http/pikku-command-nextjs.d.ts +2 -0
  23. package/dist/src/events/http/pikku-command-nextjs.js +36 -0
  24. package/dist/src/events/http/pikku-http-routes.js +3 -3
  25. package/dist/src/events/http/serialize-typed-http-map.d.ts +2 -2
  26. package/dist/src/events/http/serialize-typed-http-map.js +11 -11
  27. package/dist/src/events/mcp/pikku-command-mcp.js +3 -3
  28. package/dist/src/events/queue/pikku-command-queue-service.js +6 -6
  29. package/dist/src/events/queue/pikku-command-queue.js +3 -3
  30. package/dist/src/events/queue/pikku-queue.js +3 -3
  31. package/dist/src/events/rpc/index.d.ts +2 -0
  32. package/dist/src/events/rpc/index.js +12 -0
  33. package/dist/src/events/rpc/pikku-command-rpc-client.js +6 -6
  34. package/dist/src/events/rpc/pikku-command-rpc.js +2 -2
  35. package/dist/src/events/rpc/pikku-rpc.js +2 -2
  36. package/dist/src/events/rpc/serialize-rpc-wrapper.js +40 -1
  37. package/dist/src/events/scheduler/pikku-command-scheduler.js +3 -3
  38. package/dist/src/inspector-glob.js +2 -2
  39. package/dist/src/pikku-cli-config.d.ts +17 -17
  40. package/dist/src/pikku-cli-config.js +31 -31
  41. package/dist/src/runtimes/nextjs/pikku-command-nextjs.js +3 -3
  42. package/dist/src/runtimes/nextjs/serialize-nextjs-backend-wrapper.js +29 -29
  43. package/dist/src/runtimes/nextjs/serialize-nextjs-http-wrapper.js +28 -28
  44. package/dist/src/schema-generator.d.ts +2 -2
  45. package/dist/src/schema-generator.js +2 -2
  46. package/dist/src/serialize-pikku-types.js +67 -67
  47. package/dist/src/utils.js +8 -0
  48. package/dist/src/wirings/channels/pikku-channels.d.ts +2 -0
  49. package/dist/src/wirings/channels/pikku-channels.js +9 -0
  50. package/dist/src/wirings/channels/pikku-command-channels-map.d.ts +2 -0
  51. package/dist/src/wirings/channels/pikku-command-channels-map.js +8 -0
  52. package/dist/src/wirings/channels/pikku-command-channels.d.ts +2 -0
  53. package/dist/src/wirings/channels/pikku-command-channels.js +9 -0
  54. package/dist/src/wirings/channels/pikku-command-websocket-typed.d.ts +2 -0
  55. package/dist/src/wirings/channels/pikku-command-websocket-typed.js +15 -0
  56. package/dist/src/wirings/channels/serialize-typed-channel-map.d.ts +4 -0
  57. package/dist/src/wirings/channels/serialize-typed-channel-map.js +111 -0
  58. package/dist/src/wirings/channels/serialize-websocket-wrapper.d.ts +1 -0
  59. package/dist/src/wirings/channels/serialize-websocket-wrapper.js +75 -0
  60. package/dist/src/wirings/fetch/index.d.ts +2 -0
  61. package/dist/src/wirings/fetch/index.js +12 -0
  62. package/dist/src/wirings/functions/pikku-command-function-types.d.ts +2 -0
  63. package/dist/src/wirings/functions/pikku-command-function-types.js +13 -0
  64. package/dist/src/wirings/functions/pikku-command-functions.d.ts +6 -0
  65. package/dist/src/wirings/functions/pikku-command-functions.js +35 -0
  66. package/dist/src/wirings/functions/pikku-command-services.d.ts +3 -0
  67. package/dist/src/wirings/functions/pikku-command-services.js +73 -0
  68. package/dist/src/wirings/functions/pikku-function-types.d.ts +2 -0
  69. package/dist/src/wirings/functions/pikku-function-types.js +13 -0
  70. package/dist/src/wirings/functions/pikku-functions.d.ts +6 -0
  71. package/dist/src/wirings/functions/pikku-functions.js +35 -0
  72. package/dist/src/wirings/http/openapi-spec-generator.d.ts +79 -0
  73. package/dist/src/wirings/http/openapi-spec-generator.js +145 -0
  74. package/dist/src/wirings/http/pikku-command-http-map.d.ts +2 -0
  75. package/dist/src/wirings/http/pikku-command-http-map.js +8 -0
  76. package/dist/src/wirings/http/pikku-command-http-routes.d.ts +2 -0
  77. package/dist/src/wirings/http/pikku-command-http-routes.js +9 -0
  78. package/dist/src/wirings/http/pikku-command-openapi.d.ts +2 -0
  79. package/dist/src/wirings/http/pikku-command-openapi.js +20 -0
  80. package/dist/src/wirings/http/pikku-http-routes.d.ts +2 -0
  81. package/dist/src/wirings/http/pikku-http-routes.js +9 -0
  82. package/dist/src/wirings/http/serialize-fetch-wrapper.d.ts +1 -0
  83. package/dist/src/wirings/http/serialize-fetch-wrapper.js +67 -0
  84. package/dist/src/wirings/http/serialize-typed-http-map.d.ts +4 -0
  85. package/dist/src/wirings/http/serialize-typed-http-map.js +100 -0
  86. package/dist/src/wirings/mcp/pikku-command-mcp-json.d.ts +2 -0
  87. package/dist/src/wirings/mcp/pikku-command-mcp-json.js +13 -0
  88. package/dist/src/wirings/mcp/pikku-command-mcp.d.ts +2 -0
  89. package/dist/src/wirings/mcp/pikku-command-mcp.js +54 -0
  90. package/dist/src/wirings/mcp/serialize-mcp-json.d.ts +5 -0
  91. package/dist/src/wirings/mcp/serialize-mcp-json.js +101 -0
  92. package/dist/src/wirings/queue/pikku-command-queue-map.d.ts +2 -0
  93. package/dist/src/wirings/queue/pikku-command-queue-map.js +8 -0
  94. package/dist/src/wirings/queue/pikku-command-queue-service.d.ts +2 -0
  95. package/dist/src/wirings/queue/pikku-command-queue-service.js +15 -0
  96. package/dist/src/wirings/queue/pikku-command-queue.d.ts +2 -0
  97. package/dist/src/wirings/queue/pikku-command-queue.js +10 -0
  98. package/dist/src/wirings/queue/pikku-queue-map.d.ts +2 -0
  99. package/dist/src/wirings/queue/pikku-queue-map.js +8 -0
  100. package/dist/src/wirings/queue/pikku-queue.d.ts +2 -0
  101. package/dist/src/wirings/queue/pikku-queue.js +10 -0
  102. package/dist/src/wirings/queue/serialize-queue-map.d.ts +4 -0
  103. package/dist/src/wirings/queue/serialize-queue-map.js +77 -0
  104. package/dist/src/wirings/queue/serialize-queue-meta.d.ts +2 -0
  105. package/dist/src/wirings/queue/serialize-queue-meta.js +6 -0
  106. package/dist/src/wirings/queue/serialize-queue-wrapper.d.ts +1 -0
  107. package/dist/src/wirings/queue/serialize-queue-wrapper.js +35 -0
  108. package/dist/src/wirings/rpc/pikku-command-rpc-client.d.ts +2 -0
  109. package/dist/src/wirings/rpc/pikku-command-rpc-client.js +15 -0
  110. package/dist/src/wirings/rpc/pikku-command-rpc-map.d.ts +2 -0
  111. package/dist/src/wirings/rpc/pikku-command-rpc-map.js +8 -0
  112. package/dist/src/wirings/rpc/pikku-command-rpc.d.ts +2 -0
  113. package/dist/src/wirings/rpc/pikku-command-rpc.js +6 -0
  114. package/dist/src/wirings/rpc/pikku-rpc.d.ts +2 -0
  115. package/dist/src/wirings/rpc/pikku-rpc.js +6 -0
  116. package/dist/src/wirings/rpc/serialize-rpc-wrapper.d.ts +1 -0
  117. package/dist/src/wirings/rpc/serialize-rpc-wrapper.js +68 -0
  118. package/dist/src/wirings/rpc/serialize-typed-rpc-map.d.ts +4 -0
  119. package/dist/src/wirings/rpc/serialize-typed-rpc-map.js +66 -0
  120. package/dist/src/wirings/scheduler/pikku-command-scheduler.d.ts +2 -0
  121. package/dist/src/wirings/scheduler/pikku-command-scheduler.js +10 -0
  122. package/dist/src/wirings/scheduler/serialize-scheduler-meta.d.ts +2 -0
  123. package/dist/src/wirings/scheduler/serialize-scheduler-meta.js +10 -0
  124. package/dist/tsconfig.tsbuildinfo +1 -1
  125. package/lcov.info +582 -0
  126. package/package.json +3 -3
  127. package/src/inspector-glob.ts +2 -2
  128. package/src/pikku-cli-config.ts +67 -52
  129. package/src/runtimes/nextjs/pikku-command-nextjs.ts +3 -3
  130. package/src/runtimes/nextjs/serialize-nextjs-backend-wrapper.ts +29 -29
  131. package/src/runtimes/nextjs/serialize-nextjs-http-wrapper.ts +28 -28
  132. package/src/schema-generator.ts +3 -3
  133. package/src/serialize-pikku-types.ts +67 -67
  134. package/src/utils.test.ts +38 -0
  135. package/src/utils.ts +9 -0
  136. package/src/{events → wirings}/channels/pikku-channels.ts +5 -4
  137. package/src/{events → wirings}/channels/pikku-command-channels.ts +5 -4
  138. package/src/{events → wirings}/channels/serialize-typed-channel-map.ts +3 -3
  139. package/src/{events → wirings}/channels/serialize-websocket-wrapper.ts +19 -5
  140. package/src/{events → wirings}/fetch/index.ts +2 -2
  141. package/src/{events → wirings}/http/openapi-spec-generator.ts +3 -3
  142. package/src/{events → wirings}/http/pikku-command-http-map.ts +5 -5
  143. package/src/{events → wirings}/http/pikku-command-http-routes.ts +5 -5
  144. package/src/{events → wirings}/http/pikku-http-routes.ts +5 -5
  145. package/src/wirings/http/serialize-fetch-wrapper.ts +67 -0
  146. package/src/{events → wirings}/http/serialize-typed-http-map.ts +17 -17
  147. package/src/{events → wirings}/mcp/pikku-command-mcp.ts +5 -5
  148. package/src/{events → wirings}/queue/pikku-command-queue-service.ts +9 -6
  149. package/src/{events → wirings}/queue/pikku-command-queue.ts +8 -5
  150. package/src/{events → wirings}/queue/pikku-queue.ts +8 -5
  151. package/src/{events → wirings}/rpc/pikku-command-rpc-client.ts +9 -6
  152. package/src/{events → wirings}/rpc/pikku-command-rpc.ts +2 -2
  153. package/src/{events → wirings}/rpc/pikku-rpc.ts +2 -2
  154. package/src/wirings/rpc/serialize-rpc-wrapper.ts +68 -0
  155. package/src/{events → wirings}/scheduler/pikku-command-scheduler.ts +8 -4
  156. package/src/events/http/serialize-fetch-wrapper.ts +0 -67
  157. package/src/events/rpc/serialize-rpc-wrapper.ts +0 -29
  158. /package/src/{events → wirings}/channels/pikku-command-channels-map.ts +0 -0
  159. /package/src/{events → wirings}/channels/pikku-command-websocket-typed.ts +0 -0
  160. /package/src/{events → wirings}/functions/pikku-command-function-types.ts +0 -0
  161. /package/src/{events → wirings}/functions/pikku-command-functions.ts +0 -0
  162. /package/src/{events → wirings}/functions/pikku-command-services.ts +0 -0
  163. /package/src/{events → wirings}/functions/pikku-function-types.ts +0 -0
  164. /package/src/{events → wirings}/functions/pikku-functions.ts +0 -0
  165. /package/src/{events → wirings}/http/pikku-command-openapi.ts +0 -0
  166. /package/src/{events → wirings}/mcp/pikku-command-mcp-json.ts +0 -0
  167. /package/src/{events → wirings}/mcp/serialize-mcp-json.ts +0 -0
  168. /package/src/{events → wirings}/queue/pikku-command-queue-map.ts +0 -0
  169. /package/src/{events → wirings}/queue/pikku-queue-map.ts +0 -0
  170. /package/src/{events → wirings}/queue/serialize-queue-map.ts +0 -0
  171. /package/src/{events → wirings}/queue/serialize-queue-meta.ts +0 -0
  172. /package/src/{events → wirings}/queue/serialize-queue-wrapper.ts +0 -0
  173. /package/src/{events → wirings}/rpc/pikku-command-rpc-map.ts +0 -0
  174. /package/src/{events → wirings}/rpc/serialize-typed-rpc-map.ts +0 -0
  175. /package/src/{events → wirings}/scheduler/serialize-scheduler-meta.ts +0 -0
@@ -18,21 +18,21 @@ export const pikkuHTTP: PikkuCommand = async (
18
18
  'Found HTTP routes',
19
19
  [visitState.http.files.size === 0],
20
20
  async () => {
21
- const { httpRoutesFile, httpRoutesMetaFile, packageMappings } = cliConfig
21
+ const { httpWiringsFile, httpWiringMetaFile, packageMappings } = cliConfig
22
22
  const { http } = visitState
23
23
  await writeFileInDir(
24
24
  logger,
25
- httpRoutesFile,
25
+ httpWiringsFile,
26
26
  serializeFileImports(
27
- 'addHTTPRoute',
28
- httpRoutesFile,
27
+ 'wireHTTP',
28
+ httpWiringsFile,
29
29
  http.files,
30
30
  packageMappings
31
31
  )
32
32
  )
33
33
  await writeFileInDir(
34
34
  logger,
35
- httpRoutesMetaFile,
35
+ httpWiringMetaFile,
36
36
  `import { pikkuState } from '@pikku/core'\npikkuState('http', 'meta', ${JSON.stringify(http.meta, null, 2)})`
37
37
  )
38
38
  }
@@ -0,0 +1,67 @@
1
+ export const serializeFetchWrapper = (routesMapPath: string) => {
2
+ return `
3
+ import { CorePikkuFetch, HTTPMethod } from '@pikku/fetch'
4
+ import type { HTTPWiringsMap, HTTPWiringHandlerOf, HTTPWiringsWithMethod } from '${routesMapPath}'
5
+
6
+ export class PikkuFetch extends CorePikkuFetch {
7
+ public async post<Route extends HTTPWiringsWithMethod<'POST'>>(
8
+ route: Route,
9
+ ...args: null extends HTTPWiringHandlerOf<Route, 'POST'>['input']
10
+ ? [data?: Exclude<HTTPWiringHandlerOf<Route, 'POST'>['input'], null>, options?: Omit<RequestInit, 'body'>]
11
+ : [data: HTTPWiringHandlerOf<Route, 'POST'>['input'], options?: Omit<RequestInit, 'body'>]
12
+ ): Promise<HTTPWiringHandlerOf<Route, 'POST'>['output']> {
13
+ const [data, options] = args;
14
+ return super.api(route, 'POST', data, options);
15
+ }
16
+
17
+ public async get<Route extends HTTPWiringsWithMethod<'GET'>>(
18
+ route: Route,
19
+ ...args: null extends HTTPWiringHandlerOf<Route, 'GET'>['input']
20
+ ? [data?: Exclude<HTTPWiringHandlerOf<Route, 'GET'>['input'], null>, options?: Omit<RequestInit, 'body'>]
21
+ : [data: HTTPWiringHandlerOf<Route, 'GET'>['input'], options?: Omit<RequestInit, 'body'>]
22
+ ): Promise<HTTPWiringHandlerOf<Route, 'GET'>['output']> {
23
+ const [data, options] = args;
24
+ return super.api(route, 'GET', data, options);
25
+ }
26
+
27
+ public async patch<Route extends HTTPWiringsWithMethod<'PATCH'>>(
28
+ route: Route,
29
+ ...args: null extends HTTPWiringHandlerOf<Route, 'PATCH'>['input']
30
+ ? [data?: Exclude<HTTPWiringHandlerOf<Route, 'PATCH'>['input'], null>, options?: Omit<RequestInit, 'body'>]
31
+ : [data: HTTPWiringHandlerOf<Route, 'PATCH'>['input'], options?: Omit<RequestInit, 'body'>]
32
+ ): Promise<HTTPWiringHandlerOf<Route, 'PATCH'>['output']> {
33
+ const [data, options] = args;
34
+ return super.api(route, 'PATCH', data, options);
35
+ }
36
+
37
+ public async head<Route extends HTTPWiringsWithMethod<'HEAD'>>(
38
+ route: Route,
39
+ ...args: null extends HTTPWiringHandlerOf<Route, 'HEAD'>['input']
40
+ ? [data?: Exclude<HTTPWiringHandlerOf<Route, 'HEAD'>['input'], null>, options?: Omit<RequestInit, 'body'>]
41
+ : [data: HTTPWiringHandlerOf<Route, 'HEAD'>['input'], options?: Omit<RequestInit, 'body'>]
42
+ ): Promise<HTTPWiringHandlerOf<Route, 'HEAD'>['output']> {
43
+ const [data, options] = args;
44
+ return super.api(route, 'HEAD', data, options);
45
+ }
46
+
47
+ public async delete<Route extends HTTPWiringsWithMethod<'DELETE'>>(
48
+ route: Route,
49
+ ...args: null extends HTTPWiringHandlerOf<Route, 'DELETE'>['input']
50
+ ? [data?: Exclude<HTTPWiringHandlerOf<Route, 'DELETE'>['input'], null>, options?: Omit<RequestInit, 'body'>]
51
+ : [data: HTTPWiringHandlerOf<Route, 'DELETE'>['input'], options?: Omit<RequestInit, 'body'>]
52
+ ): Promise<HTTPWiringHandlerOf<Route, 'DELETE'>['output']> {
53
+ const [data, options] = args;
54
+ return super.api(route, 'DELETE', data, options);
55
+ }
56
+
57
+ public async fetch<
58
+ Route extends keyof HTTPWiringsMap,
59
+ Method extends keyof HTTPWiringsMap[Route]
60
+ >(route: Route, method: Method, data: HTTPWiringHandlerOf<Route, Method>['input'], options?: Omit<RequestInit, 'body'>): Promise<Response> {
61
+ return await super.fetch(route, method as HTTPMethod, data, options);
62
+ }
63
+ }
64
+
65
+ export const pikkuFetch = new PikkuFetch();
66
+ `
67
+ }
@@ -1,22 +1,22 @@
1
- import { HTTPRoutesMeta } from '@pikku/core/http'
1
+ import { HTTPWiringsMeta } from '@pikku/core/http'
2
2
  import { serializeImportMap } from '../../serialize-import-map.js'
3
3
  import { MetaInputTypes, TypesMap } from '@pikku/inspector'
4
4
  import { FunctionsMeta } from '@pikku/core'
5
5
  import { generateCustomTypes } from '../../utils.js'
6
6
 
7
- export const serializeTypedRoutesMap = (
7
+ export const serializeTypedHTTPWiringsMap = (
8
8
  relativeToPath: string,
9
9
  packageMappings: Record<string, string>,
10
10
  typesMap: TypesMap,
11
11
  functionsMeta: FunctionsMeta,
12
- routesMeta: HTTPRoutesMeta,
12
+ wiringsMeta: HTTPWiringsMeta,
13
13
  metaTypes: MetaInputTypes
14
14
  ) => {
15
15
  const requiredTypes = new Set<string>()
16
16
  const serializedCustomTypes = generateCustomTypes(typesMap, requiredTypes)
17
17
  const serializedMetaTypes = generateMetaTypes(metaTypes, typesMap)
18
- const serializedRoutes = generateRoutes(
19
- routesMeta,
18
+ const serializedHTTPWirings = generateHTTPWirings(
19
+ wiringsMeta,
20
20
  functionsMeta,
21
21
  typesMap,
22
22
  requiredTypes
@@ -37,26 +37,26 @@ ${serializedImportMap}
37
37
  ${serializedCustomTypes}
38
38
  ${serializedMetaTypes}
39
39
 
40
- interface RouteHandler<I, O> {
40
+ interface HTTPWiringHandler<I, O> {
41
41
  input: I;
42
42
  output: O;
43
43
  }
44
44
 
45
- ${serializedRoutes}
45
+ ${serializedHTTPWirings}
46
46
 
47
- export type RouteHandlerOf<Route extends keyof RoutesMap, Method extends keyof RoutesMap[Route]> =
48
- RoutesMap[Route][Method] extends { input: infer I; output: infer O }
49
- ? RouteHandler<I, O>
47
+ export type HTTPWiringHandlerOf<HTTPWiring extends keyof HTTPWiringsMap, Method extends keyof HTTPWiringsMap[HTTPWiring]> =
48
+ HTTPWiringsMap[HTTPWiring][Method] extends { input: infer I; output: infer O }
49
+ ? HTTPWiringHandler<I, O>
50
50
  : never;
51
51
 
52
- export type RoutesWithMethod<Method extends string> = {
53
- [Route in keyof RoutesMap]: Method extends keyof RoutesMap[Route] ? Route : never;
54
- }[keyof RoutesMap];
52
+ export type HTTPWiringsWithMethod<Method extends string> = {
53
+ [HTTPWiring in keyof HTTPWiringsMap]: Method extends keyof HTTPWiringsMap[HTTPWiring] ? HTTPWiring : never;
54
+ }[keyof HTTPWiringsMap];
55
55
  `
56
56
  }
57
57
 
58
- function generateRoutes(
59
- routesMeta: HTTPRoutesMeta,
58
+ function generateHTTPWirings(
59
+ routesMeta: HTTPWiringsMeta,
60
60
  functionsMeta: FunctionsMeta,
61
61
  typesMap: TypesMap,
62
62
  requiredTypes: Set<string>
@@ -98,12 +98,12 @@ function generateRoutes(
98
98
  }
99
99
 
100
100
  // Build the routes object as a string
101
- let routesStr = 'export type RoutesMap = {\n'
101
+ let routesStr = 'export type HTTPWiringsMap = {\n'
102
102
 
103
103
  for (const [routePath, methods] of Object.entries(routesObj)) {
104
104
  routesStr += ` readonly '${routePath}': {\n`
105
105
  for (const [method, handler] of Object.entries(methods)) {
106
- routesStr += ` readonly ${method.toUpperCase()}: RouteHandler<${handler.inputType}, ${handler.outputType}>,\n`
106
+ routesStr += ` readonly ${method.toUpperCase()}: HTTPWiringHandler<${handler.inputType}, ${handler.outputType}>,\n`
107
107
  }
108
108
  routesStr += ' },\n'
109
109
  }
@@ -62,7 +62,7 @@ const generateArgumentsFromSchema = async (
62
62
 
63
63
  export const pikkuMCP: PikkuCommand = async (
64
64
  logger,
65
- { mcpEndpointsFile, mcpEndpointsMetaFile, packageMappings, schemaDirectory },
65
+ { mcpWiringsFile, mcpWiringsMetaFile, packageMappings, schemaDirectory },
66
66
  { mcpEndpoints, functions }
67
67
  ) => {
68
68
  return await logCommandInfoAndTime(
@@ -73,10 +73,10 @@ export const pikkuMCP: PikkuCommand = async (
73
73
  async () => {
74
74
  await writeFileInDir(
75
75
  logger,
76
- mcpEndpointsFile,
76
+ mcpWiringsFile,
77
77
  serializeFileImports(
78
- 'addMCPResource or addMCPTool',
79
- mcpEndpointsFile,
78
+ 'wireMCPResource or wireMCPTool',
79
+ mcpWiringsFile,
80
80
  mcpEndpoints.files,
81
81
  packageMappings
82
82
  )
@@ -99,7 +99,7 @@ export const pikkuMCP: PikkuCommand = async (
99
99
 
100
100
  await writeFileInDir(
101
101
  logger,
102
- mcpEndpointsMetaFile,
102
+ mcpWiringsMetaFile,
103
103
  `import { pikkuState } from '@pikku/core'
104
104
  pikkuState('mcp', 'resourcesMeta', ${JSON.stringify(mcpEndpoints.resourcesMeta, null, 2)})
105
105
  pikkuState('mcp', 'toolsMeta', ${JSON.stringify(mcpEndpoints.toolsMeta, null, 2)})
@@ -8,26 +8,29 @@ import { PikkuCommandWithoutState } from '../../types.js'
8
8
 
9
9
  export const pikkuQueueService: PikkuCommandWithoutState = async (
10
10
  logger,
11
- { queueFile, queueMapDeclarationFile, packageMappings }
11
+ { queueWiringsFile, queueMapDeclarationFile, packageMappings }
12
12
  ) => {
13
13
  return await logCommandInfoAndTime(
14
14
  logger,
15
15
  'Generating queue service wrapper',
16
16
  'Generated queue service wrapper',
17
- [queueFile === undefined, "queueFile isn't set in the pikku config"],
17
+ [
18
+ queueWiringsFile === undefined,
19
+ "queueWiringsFile isn't set in the pikku config",
20
+ ],
18
21
  async () => {
19
- if (!queueFile) {
20
- throw new Error("queueFile is isn't set in the pikku config")
22
+ if (!queueWiringsFile) {
23
+ throw new Error("queueWiringsFile is isn't set in the pikku config")
21
24
  }
22
25
 
23
26
  const queueMapDeclarationPath = getFileImportRelativePath(
24
- queueFile,
27
+ queueWiringsFile,
25
28
  queueMapDeclarationFile,
26
29
  packageMappings
27
30
  )
28
31
 
29
32
  const content = [serializeQueueWrapper(queueMapDeclarationPath)]
30
- await writeFileInDir(logger, queueFile, content.join('\n'))
33
+ await writeFileInDir(logger, queueWiringsFile, content.join('\n'))
31
34
  }
32
35
  )
33
36
  }
@@ -19,20 +19,23 @@ export const pikkuQueue: PikkuCommand = async (
19
19
  'Found queue',
20
20
  [visitState.queueWorkers.files.size === 0],
21
21
  async () => {
22
- const { queueWorkersFile, queueWorkersMetaFile, packageMappings } =
23
- cliConfig
22
+ const {
23
+ queueWorkersWiringFile,
24
+ queueWorkersWiringMetaFile,
25
+ packageMappings,
26
+ } = cliConfig
24
27
  const { queueWorkers } = visitState
25
28
  await writeFileInDir(
26
29
  logger,
27
- queueWorkersMetaFile,
30
+ queueWorkersWiringMetaFile,
28
31
  serializeQueueMeta(queueWorkers.meta)
29
32
  )
30
33
  await writeFileInDir(
31
34
  logger,
32
- queueWorkersFile,
35
+ queueWorkersWiringFile,
33
36
  serializeFileImports(
34
37
  'addQueueWorkers',
35
- queueWorkersFile,
38
+ queueWorkersWiringFile,
36
39
  queueWorkers.files,
37
40
  packageMappings
38
41
  )
@@ -17,20 +17,23 @@ export const pikkuQueue: PikkuCommand = async (
17
17
  'Found queue',
18
18
  [visitState.queueWorkers.files.size === 0],
19
19
  async () => {
20
- const { queueWorkersFile, queueWorkersMetaFile, packageMappings } =
21
- cliConfig
20
+ const {
21
+ queueWorkersWiringFile,
22
+ queueWorkersWiringMetaFile,
23
+ packageMappings,
24
+ } = cliConfig
22
25
  const { queueWorkers } = visitState
23
26
  await writeFileInDir(
24
27
  logger,
25
- queueWorkersMetaFile,
28
+ queueWorkersWiringMetaFile,
26
29
  serializeQueueMeta(queueWorkers.meta)
27
30
  )
28
31
  await writeFileInDir(
29
32
  logger,
30
- queueWorkersFile,
33
+ queueWorkersWiringFile,
31
34
  serializeFileImports(
32
35
  'addQueueWorkers',
33
- queueWorkersFile,
36
+ queueWorkersWiringFile,
34
37
  queueWorkers.files,
35
38
  packageMappings
36
39
  )
@@ -8,26 +8,29 @@ import { PikkuCommandWithoutState } from '../../types.js'
8
8
 
9
9
  export const pikkuRPCClient: PikkuCommandWithoutState = async (
10
10
  logger,
11
- { rpcFile, rpcMapDeclarationFile, packageMappings }
11
+ { rpcWiringsFile, rpcMapDeclarationFile, packageMappings }
12
12
  ) => {
13
13
  return await logCommandInfoAndTime(
14
14
  logger,
15
15
  'Generating RPC wrapper',
16
16
  'Generated RPC wrapper',
17
- [rpcFile === undefined, "rpcFile isn't set in the pikku config"],
17
+ [
18
+ rpcWiringsFile === undefined,
19
+ "rpcWiringsFile isn't set in the pikku config",
20
+ ],
18
21
  async () => {
19
- if (!rpcFile) {
20
- throw new Error("rpcFile isn't set in the pikku config")
22
+ if (!rpcWiringsFile) {
23
+ throw new Error("rpcWiringsFile isn't set in the pikku config")
21
24
  }
22
25
 
23
26
  const rpcMapDeclarationPath = getFileImportRelativePath(
24
- rpcFile,
27
+ rpcWiringsFile,
25
28
  rpcMapDeclarationFile,
26
29
  packageMappings
27
30
  )
28
31
 
29
32
  const content = [serializeRPCWrapper(rpcMapDeclarationPath)]
30
- await writeFileInDir(logger, rpcFile, content.join('\n'))
33
+ await writeFileInDir(logger, rpcWiringsFile, content.join('\n'))
31
34
  }
32
35
  )
33
36
  }
@@ -3,7 +3,7 @@ import { PikkuCommand } from '../../types.js'
3
3
 
4
4
  export const pikkuRPC: PikkuCommand = async (
5
5
  logger,
6
- { rpcMetaFile },
6
+ { rpcWiringMetaFile },
7
7
  { rpc }
8
8
  ) => {
9
9
  return await logCommandInfoAndTime(
@@ -14,7 +14,7 @@ export const pikkuRPC: PikkuCommand = async (
14
14
  async () => {
15
15
  await writeFileInDir(
16
16
  logger,
17
- rpcMetaFile,
17
+ rpcWiringMetaFile,
18
18
  `import { pikkuState } from '@pikku/core'\npikkuState('rpc', 'meta', ${JSON.stringify(rpc.meta, null, 2)})`
19
19
  )
20
20
  }
@@ -3,7 +3,7 @@ import { PikkuCommand } from '../../types.js'
3
3
 
4
4
  export const pikkuRPC: PikkuCommand = async (
5
5
  logger,
6
- { rpcMetaFile },
6
+ { rpcWiringMetaFile },
7
7
  { rpc }
8
8
  ) => {
9
9
  return await logCommandInfoAndTime(
@@ -14,7 +14,7 @@ export const pikkuRPC: PikkuCommand = async (
14
14
  async () => {
15
15
  await writeFileInDir(
16
16
  logger,
17
- rpcMetaFile,
17
+ rpcWiringMetaFile,
18
18
  `import { pikkuState } from '@pikku/core'\npikkuState('rpc', 'meta', ${JSON.stringify(rpc.meta, null, 2)})`
19
19
  )
20
20
  }
@@ -0,0 +1,68 @@
1
+ export const serializeRPCWrapper = (rpcMapPath: string) => {
2
+ return `
3
+ import { PikkuFetch } from "./pikku-fetch.gen.js"
4
+ import type { RPCInvoke } from '${rpcMapPath}'
5
+
6
+ /**
7
+ * PikkuRPC provides a type-safe client for making Remote Procedure Calls (RPC)
8
+ * to your Pikku server. It wraps the underlying HTTP client and provides a
9
+ * simple interface for invoking server-side functions.
10
+ */
11
+ export class PikkuRPC {
12
+ /** The underlying HTTP client used for making RPC calls */
13
+ pikkuFetch = new PikkuFetch()
14
+
15
+ /**
16
+ * Sets a custom PikkuFetch instance to use for RPC calls.
17
+ * This allows you to configure custom settings or use a shared client instance.
18
+ *
19
+ * @param pikkuFetch - The PikkuFetch instance to use
20
+ */
21
+ setPikkuFetch(pikkuFetch: PikkuFetch): void {
22
+ this.pikkuFetch = pikkuFetch
23
+ }
24
+
25
+ /**
26
+ * Sets the base server URL for all RPC calls.
27
+ *
28
+ * @param serverUrl - The base URL of your Pikku server (e.g., 'https://api.example.com')
29
+ */
30
+ setServerUrl(serverUrl: string): void {
31
+ this.pikkuFetch.setServerUrl(serverUrl)
32
+ }
33
+
34
+ /**
35
+ * Sets the JWT token for authorization on all RPC calls.
36
+ *
37
+ * @param jwt - The JWT token to use for authorization, or null to remove authorization
38
+ */
39
+ setAuthorizationJWT(jwt: string | null): void {
40
+ this.pikkuFetch.setAuthorizationJWT(jwt)
41
+ }
42
+
43
+ /**
44
+ * Sets the API key for authorization on all RPC calls.
45
+ *
46
+ * @param apiKey - The API key to use for authorization, or null to remove the API key
47
+ */
48
+ setAPIKey(apiKey: string | null): void {
49
+ this.pikkuFetch.setAPIKey(apiKey)
50
+ }
51
+
52
+ /**
53
+ * Invokes a remote procedure call on the server.
54
+ * This is a generic method that routes to the appropriate server function
55
+ * based on the function name and passes the provided data.
56
+ *
57
+ * @param name - The name of the server function to invoke
58
+ * @param data - The data to pass to the server function
59
+ * @returns A promise that resolves with the function's return value
60
+ */
61
+ invoke: RPCInvoke = async (name, data) => {
62
+ return await this.pikkuFetch.post('/rpc', { name, data })
63
+ }
64
+ }
65
+
66
+ export const pikkuRPC = new PikkuRPC();
67
+ `
68
+ }
@@ -17,19 +17,23 @@ export const pikkuScheduler: PikkuCommand = async (
17
17
  'Found scheduled tasks',
18
18
  [visitState.scheduledTasks.files.size === 0],
19
19
  async () => {
20
- const { schedulersFile, schedulersMetaFile, packageMappings } = cliConfig
20
+ const {
21
+ schedulersWiringFile,
22
+ schedulersWiringMetaFile,
23
+ packageMappings,
24
+ } = cliConfig
21
25
  const { scheduledTasks } = visitState
22
26
  await writeFileInDir(
23
27
  logger,
24
- schedulersMetaFile,
28
+ schedulersWiringMetaFile,
25
29
  serializeSchedulerMeta(scheduledTasks.meta)
26
30
  )
27
31
  await writeFileInDir(
28
32
  logger,
29
- schedulersFile,
33
+ schedulersWiringFile,
30
34
  serializeFileImports(
31
35
  'addScheduledTasks',
32
- schedulersFile,
36
+ schedulersWiringFile,
33
37
  scheduledTasks.files,
34
38
  packageMappings
35
39
  )
@@ -1,67 +0,0 @@
1
- export const serializeFetchWrapper = (routesMapPath: string) => {
2
- return `
3
- import { CorePikkuFetch, HTTPMethod } from '@pikku/fetch'
4
- import type { RoutesMap, RouteHandlerOf, RoutesWithMethod } from '${routesMapPath}'
5
-
6
- export class PikkuFetch extends CorePikkuFetch {
7
- public async post<Route extends RoutesWithMethod<'POST'>>(
8
- route: Route,
9
- ...args: null extends RouteHandlerOf<Route, 'POST'>['input']
10
- ? [data?: Exclude<RouteHandlerOf<Route, 'POST'>['input'], null>, options?: Omit<RequestInit, 'body'>]
11
- : [data: RouteHandlerOf<Route, 'POST'>['input'], options?: Omit<RequestInit, 'body'>]
12
- ): Promise<RouteHandlerOf<Route, 'POST'>['output']> {
13
- const [data, options] = args;
14
- return super.api(route, 'POST', data, options);
15
- }
16
-
17
- public async get<Route extends RoutesWithMethod<'GET'>>(
18
- route: Route,
19
- ...args: null extends RouteHandlerOf<Route, 'GET'>['input']
20
- ? [data?: Exclude<RouteHandlerOf<Route, 'GET'>['input'], null>, options?: Omit<RequestInit, 'body'>]
21
- : [data: RouteHandlerOf<Route, 'GET'>['input'], options?: Omit<RequestInit, 'body'>]
22
- ): Promise<RouteHandlerOf<Route, 'GET'>['output']> {
23
- const [data, options] = args;
24
- return super.api(route, 'GET', data, options);
25
- }
26
-
27
- public async patch<Route extends RoutesWithMethod<'PATCH'>>(
28
- route: Route,
29
- ...args: null extends RouteHandlerOf<Route, 'PATCH'>['input']
30
- ? [data?: Exclude<RouteHandlerOf<Route, 'PATCH'>['input'], null>, options?: Omit<RequestInit, 'body'>]
31
- : [data: RouteHandlerOf<Route, 'PATCH'>['input'], options?: Omit<RequestInit, 'body'>]
32
- ): Promise<RouteHandlerOf<Route, 'PATCH'>['output']> {
33
- const [data, options] = args;
34
- return super.api(route, 'PATCH', data, options);
35
- }
36
-
37
- public async head<Route extends RoutesWithMethod<'HEAD'>>(
38
- route: Route,
39
- ...args: null extends RouteHandlerOf<Route, 'HEAD'>['input']
40
- ? [data?: Exclude<RouteHandlerOf<Route, 'HEAD'>['input'], null>, options?: Omit<RequestInit, 'body'>]
41
- : [data: RouteHandlerOf<Route, 'HEAD'>['input'], options?: Omit<RequestInit, 'body'>]
42
- ): Promise<RouteHandlerOf<Route, 'HEAD'>['output']> {
43
- const [data, options] = args;
44
- return super.api(route, 'HEAD', data, options);
45
- }
46
-
47
- public async delete<Route extends RoutesWithMethod<'DELETE'>>(
48
- route: Route,
49
- ...args: null extends RouteHandlerOf<Route, 'DELETE'>['input']
50
- ? [data?: Exclude<RouteHandlerOf<Route, 'DELETE'>['input'], null>, options?: Omit<RequestInit, 'body'>]
51
- : [data: RouteHandlerOf<Route, 'DELETE'>['input'], options?: Omit<RequestInit, 'body'>]
52
- ): Promise<RouteHandlerOf<Route, 'DELETE'>['output']> {
53
- const [data, options] = args;
54
- return super.api(route, 'DELETE', data, options);
55
- }
56
-
57
- public async fetch<
58
- Route extends keyof RoutesMap,
59
- Method extends keyof RoutesMap[Route]
60
- >(route: Route, method: Method, data: RouteHandlerOf<Route, Method>['input'], options?: Omit<RequestInit, 'body'>): Promise<Response> {
61
- return await super.fetch(route, method as HTTPMethod, data, options);
62
- }
63
- }
64
-
65
- export const pikkuFetch = new PikkuFetch();
66
- `
67
- }
@@ -1,29 +0,0 @@
1
- export const serializeRPCWrapper = (rpcMapPath: string) => {
2
- return `
3
- import { PikkuFetch } from "./pikku-fetch.gen.js"
4
- import type { RPCInvoke } from '${rpcMapPath}'
5
-
6
- export class PikkuRPC {
7
- pikkuFetch = new PikkuFetch()
8
-
9
- setPikkuFetch(pikkuFetch: PikkuFetch): void {
10
- this.pikkuFetch = pikkuFetch
11
- }
12
-
13
- setServerUrl(serverUrl: string): void {
14
- this.pikkuFetch.setServerUrl(serverUrl)
15
- }
16
-
17
- setAuthorizationJWT(jwt: string | null): void {
18
- this.pikkuFetch.setAuthorizationJWT(jwt)
19
- }
20
-
21
- // Generic RPC invoke method
22
- invoke: RPCInvoke = async (name, data) => {
23
- return await this.pikkuFetch.post('/rpc', { name, data })
24
- }
25
- }
26
-
27
- export const pikkuRPC = new PikkuRPC();
28
- `
29
- }