@pikku/cli 0.7.7 → 0.8.1

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 (197) hide show
  1. package/CHANGELOG.md +43 -0
  2. package/bin/pikku-all.ts +188 -91
  3. package/bin/pikku-fetch.ts +10 -38
  4. package/bin/pikku-nextjs.ts +12 -113
  5. package/bin/pikku-openapi.ts +9 -54
  6. package/bin/pikku-queue-service.ts +28 -0
  7. package/bin/pikku-schemas.ts +6 -32
  8. package/bin/pikku-websocket.ts +11 -41
  9. package/bin/pikku.ts +2 -0
  10. package/cli.schema.json +113 -10
  11. package/dist/bin/pikku-all.d.ts +1 -1
  12. package/dist/bin/pikku-all.js +105 -84
  13. package/dist/bin/pikku-fetch.d.ts +1 -3
  14. package/dist/bin/pikku-fetch.js +9 -15
  15. package/dist/bin/pikku-nextjs.d.ts +1 -4
  16. package/dist/bin/pikku-nextjs.js +10 -40
  17. package/dist/bin/pikku-openapi.d.ts +0 -3
  18. package/dist/bin/pikku-openapi.js +8 -24
  19. package/dist/bin/pikku-queue-service.d.ts +4 -0
  20. package/dist/bin/pikku-queue-service.js +19 -0
  21. package/dist/bin/pikku-schemas.d.ts +0 -3
  22. package/dist/bin/pikku-schemas.js +5 -11
  23. package/dist/bin/pikku-websocket.d.ts +1 -3
  24. package/dist/bin/pikku-websocket.js +9 -18
  25. package/dist/bin/pikku.js +2 -0
  26. package/dist/src/events/channels/pikku-channels.d.ts +2 -0
  27. package/dist/src/events/channels/pikku-channels.js +9 -0
  28. package/dist/src/events/channels/pikku-command-channels-map.d.ts +2 -0
  29. package/dist/src/events/channels/pikku-command-channels-map.js +8 -0
  30. package/dist/src/events/channels/pikku-command-channels.d.ts +2 -0
  31. package/dist/src/events/channels/pikku-command-channels.js +9 -0
  32. package/dist/src/events/channels/pikku-command-websocket-typed.d.ts +2 -0
  33. package/dist/src/events/channels/pikku-command-websocket-typed.js +15 -0
  34. package/dist/src/{serialize-typed-channel-map.js → events/channels/serialize-typed-channel-map.js} +2 -2
  35. package/dist/src/events/fetch/index.d.ts +2 -0
  36. package/dist/src/events/fetch/index.js +12 -0
  37. package/dist/src/events/functions/pikku-command-function-types.d.ts +2 -0
  38. package/dist/src/events/functions/pikku-command-function-types.js +13 -0
  39. package/dist/src/events/functions/pikku-command-functions.d.ts +6 -0
  40. package/dist/src/events/functions/pikku-command-functions.js +35 -0
  41. package/dist/src/events/functions/pikku-command-services.d.ts +3 -0
  42. package/dist/src/events/functions/pikku-command-services.js +73 -0
  43. package/dist/src/events/functions/pikku-function-types.d.ts +2 -0
  44. package/dist/{bin → src/events/functions}/pikku-function-types.js +6 -6
  45. package/dist/src/events/functions/pikku-functions.d.ts +6 -0
  46. package/dist/{bin → src/events/functions}/pikku-functions.js +5 -5
  47. package/dist/src/events/http/pikku-command-http-map.d.ts +2 -0
  48. package/dist/src/events/http/pikku-command-http-map.js +8 -0
  49. package/dist/src/events/http/pikku-command-http-routes.d.ts +2 -0
  50. package/dist/src/events/http/pikku-command-http-routes.js +9 -0
  51. package/dist/src/events/http/pikku-command-openapi.d.ts +2 -0
  52. package/dist/src/events/http/pikku-command-openapi.js +20 -0
  53. package/dist/src/events/http/pikku-http-routes.d.ts +2 -0
  54. package/dist/src/events/http/pikku-http-routes.js +9 -0
  55. package/dist/src/{serialize-typed-http-map.d.ts → events/http/serialize-typed-http-map.d.ts} +0 -1
  56. package/dist/src/{serialize-typed-http-map.js → events/http/serialize-typed-http-map.js} +2 -15
  57. package/dist/src/events/mcp/pikku-command-mcp-json.d.ts +2 -0
  58. package/dist/src/events/mcp/pikku-command-mcp-json.js +13 -0
  59. package/dist/src/events/mcp/pikku-command-mcp.d.ts +2 -0
  60. package/dist/src/events/mcp/pikku-command-mcp.js +54 -0
  61. package/dist/src/events/mcp/serialize-mcp-json.d.ts +5 -0
  62. package/dist/src/events/mcp/serialize-mcp-json.js +101 -0
  63. package/dist/src/events/queue/pikku-command-queue-map.d.ts +2 -0
  64. package/dist/src/events/queue/pikku-command-queue-map.js +8 -0
  65. package/dist/src/events/queue/pikku-command-queue-service.d.ts +2 -0
  66. package/dist/src/events/queue/pikku-command-queue-service.js +12 -0
  67. package/dist/src/events/queue/pikku-command-queue.d.ts +2 -0
  68. package/dist/src/events/queue/pikku-command-queue.js +10 -0
  69. package/dist/src/events/queue/pikku-queue-map.d.ts +2 -0
  70. package/dist/src/events/queue/pikku-queue-map.js +8 -0
  71. package/dist/src/events/queue/pikku-queue.d.ts +2 -0
  72. package/dist/src/events/queue/pikku-queue.js +10 -0
  73. package/dist/src/events/queue/serialize-queue-map.d.ts +4 -0
  74. package/dist/src/events/queue/serialize-queue-map.js +77 -0
  75. package/dist/src/events/queue/serialize-queue-meta.d.ts +2 -0
  76. package/dist/src/events/queue/serialize-queue-meta.js +6 -0
  77. package/dist/src/events/queue/serialize-queue-wrapper.d.ts +1 -0
  78. package/dist/src/events/queue/serialize-queue-wrapper.js +35 -0
  79. package/dist/src/events/rpc/pikku-command-rpc-client.d.ts +2 -0
  80. package/dist/src/events/rpc/pikku-command-rpc-client.js +12 -0
  81. package/dist/src/events/rpc/pikku-command-rpc-map.d.ts +2 -0
  82. package/dist/src/events/rpc/pikku-command-rpc-map.js +8 -0
  83. package/dist/src/events/rpc/pikku-command-rpc.d.ts +2 -0
  84. package/dist/src/events/rpc/pikku-command-rpc.js +6 -0
  85. package/dist/src/events/rpc/pikku-rpc.d.ts +2 -0
  86. package/dist/src/events/rpc/pikku-rpc.js +6 -0
  87. package/dist/src/events/rpc/serialize-rpc-wrapper.d.ts +1 -0
  88. package/dist/src/events/rpc/serialize-rpc-wrapper.js +29 -0
  89. package/dist/src/{serialize-typed-rpc-map.d.ts → events/rpc/serialize-typed-rpc-map.d.ts} +1 -1
  90. package/dist/src/{serialize-typed-rpc-map.js → events/rpc/serialize-typed-rpc-map.js} +3 -3
  91. package/dist/src/events/scheduler/pikku-command-scheduler.d.ts +2 -0
  92. package/dist/src/events/scheduler/pikku-command-scheduler.js +10 -0
  93. package/dist/src/inspector-glob.d.ts +1 -1
  94. package/dist/src/inspector-glob.js +4 -4
  95. package/dist/src/pikku-cli-config.d.ts +12 -2
  96. package/dist/src/pikku-cli-config.js +79 -30
  97. package/dist/src/pikku-command-schemas.d.ts +2 -0
  98. package/dist/src/pikku-command-schemas.js +8 -0
  99. package/dist/src/runtimes/nextjs/pikku-command-nextjs.d.ts +2 -0
  100. package/dist/src/runtimes/nextjs/pikku-command-nextjs.js +36 -0
  101. package/dist/src/schema-generator.d.ts +3 -2
  102. package/dist/src/schema-generator.js +9 -9
  103. package/dist/src/schemas.d.ts +2 -0
  104. package/dist/src/schemas.js +8 -0
  105. package/dist/src/{utils/serialize-import-map.js → serialize-import-map.js} +3 -0
  106. package/dist/src/serialize-pikku-types.js +378 -1
  107. package/dist/src/types.d.ts +5 -0
  108. package/dist/src/types.js +1 -0
  109. package/dist/src/{utils/utils.d.ts → utils.d.ts} +20 -7
  110. package/dist/src/{utils/utils.js → utils.js} +56 -32
  111. package/dist/tsconfig.tsbuildinfo +1 -1
  112. package/package.json +3 -3
  113. package/{bin → src/events/channels}/pikku-channels.ts +8 -3
  114. package/src/events/channels/pikku-command-channels-map.ts +26 -0
  115. package/src/events/channels/pikku-command-channels.ts +38 -0
  116. package/src/events/channels/pikku-command-websocket-typed.ts +36 -0
  117. package/src/{serialize-typed-channel-map.ts → events/channels/serialize-typed-channel-map.ts} +2 -2
  118. package/src/events/fetch/index.ts +33 -0
  119. package/src/events/functions/pikku-command-function-types.ts +48 -0
  120. package/src/events/functions/pikku-command-functions.ts +84 -0
  121. package/src/events/functions/pikku-command-services.ts +125 -0
  122. package/{bin → src/events/functions}/pikku-function-types.ts +12 -15
  123. package/{bin → src/events/functions}/pikku-functions.ts +9 -6
  124. package/src/events/http/pikku-command-http-map.ts +27 -0
  125. package/src/events/http/pikku-command-http-routes.ts +40 -0
  126. package/src/events/http/pikku-command-openapi.ts +54 -0
  127. package/{bin → src/events/http}/pikku-http-routes.ts +8 -3
  128. package/src/{serialize-typed-http-map.ts → events/http/serialize-typed-http-map.ts} +2 -19
  129. package/src/events/mcp/pikku-command-mcp-json.ts +33 -0
  130. package/src/events/mcp/pikku-command-mcp.ts +110 -0
  131. package/src/events/mcp/serialize-mcp-json.ts +159 -0
  132. package/src/events/queue/pikku-command-queue-map.ts +26 -0
  133. package/src/events/queue/pikku-command-queue-service.ts +33 -0
  134. package/src/events/queue/pikku-command-queue.ts +42 -0
  135. package/src/events/queue/pikku-queue-map.ts +26 -0
  136. package/src/events/queue/pikku-queue.ts +40 -0
  137. package/src/events/queue/serialize-queue-map.ts +119 -0
  138. package/src/events/queue/serialize-queue-meta.ts +10 -0
  139. package/src/events/queue/serialize-queue-wrapper.ts +35 -0
  140. package/src/events/rpc/pikku-command-rpc-client.ts +33 -0
  141. package/src/events/rpc/pikku-command-rpc-map.ts +26 -0
  142. package/src/events/rpc/pikku-command-rpc.ts +22 -0
  143. package/{bin → src/events/rpc}/pikku-rpc.ts +8 -6
  144. package/src/events/rpc/serialize-rpc-wrapper.ts +29 -0
  145. package/src/{serialize-typed-rpc-map.ts → events/rpc/serialize-typed-rpc-map.ts} +5 -4
  146. package/{bin/pikku-scheduler.ts → src/events/scheduler/pikku-command-scheduler.ts} +11 -8
  147. package/src/inspector-glob.ts +4 -2
  148. package/src/pikku-cli-config.ts +119 -42
  149. package/src/pikku-command-schemas.ts +33 -0
  150. package/src/runtimes/nextjs/pikku-command-nextjs.ts +110 -0
  151. package/src/schema-generator.ts +10 -5
  152. package/src/schemas.ts +33 -0
  153. package/src/{utils/serialize-import-map.ts → serialize-import-map.ts} +5 -0
  154. package/src/serialize-pikku-types.ts +378 -1
  155. package/src/types.ts +16 -0
  156. package/src/{utils/utils.ts → utils.ts} +68 -34
  157. package/tsconfig.json +1 -1
  158. package/bin/pikku-channels-map.ts +0 -25
  159. package/bin/pikku-http-map.ts +0 -26
  160. package/bin/pikku-nextjs.test.ts +0 -279
  161. package/bin/pikku-rpc-map.ts +0 -25
  162. package/dist/bin/pikku-channels-map.d.ts +0 -3
  163. package/dist/bin/pikku-channels-map.js +0 -8
  164. package/dist/bin/pikku-channels.d.ts +0 -3
  165. package/dist/bin/pikku-channels.js +0 -9
  166. package/dist/bin/pikku-function-types.d.ts +0 -4
  167. package/dist/bin/pikku-functions.d.ts +0 -7
  168. package/dist/bin/pikku-http-map.d.ts +0 -3
  169. package/dist/bin/pikku-http-map.js +0 -8
  170. package/dist/bin/pikku-http-routes.d.ts +0 -3
  171. package/dist/bin/pikku-http-routes.js +0 -9
  172. package/dist/bin/pikku-rpc-map.d.ts +0 -3
  173. package/dist/bin/pikku-rpc-map.js +0 -8
  174. package/dist/bin/pikku-rpc.d.ts +0 -3
  175. package/dist/bin/pikku-rpc.js +0 -6
  176. package/dist/bin/pikku-scheduler.d.ts +0 -3
  177. package/dist/bin/pikku-scheduler.js +0 -10
  178. /package/dist/src/{serialize-typed-channel-map.d.ts → events/channels/serialize-typed-channel-map.d.ts} +0 -0
  179. /package/dist/src/{serialize-websocket-wrapper.d.ts → events/channels/serialize-websocket-wrapper.d.ts} +0 -0
  180. /package/dist/src/{serialize-websocket-wrapper.js → events/channels/serialize-websocket-wrapper.js} +0 -0
  181. /package/dist/src/{openapi-spec-generator.d.ts → events/http/openapi-spec-generator.d.ts} +0 -0
  182. /package/dist/src/{openapi-spec-generator.js → events/http/openapi-spec-generator.js} +0 -0
  183. /package/dist/src/{serialize-fetch-wrapper.d.ts → events/http/serialize-fetch-wrapper.d.ts} +0 -0
  184. /package/dist/src/{serialize-fetch-wrapper.js → events/http/serialize-fetch-wrapper.js} +0 -0
  185. /package/dist/src/{serialize-scheduler-meta.d.ts → events/scheduler/serialize-scheduler-meta.d.ts} +0 -0
  186. /package/dist/src/{serialize-scheduler-meta.js → events/scheduler/serialize-scheduler-meta.js} +0 -0
  187. /package/dist/src/{serialize-nextjs-backend-wrapper.d.ts → runtimes/nextjs/serialize-nextjs-backend-wrapper.d.ts} +0 -0
  188. /package/dist/src/{serialize-nextjs-backend-wrapper.js → runtimes/nextjs/serialize-nextjs-backend-wrapper.js} +0 -0
  189. /package/dist/src/{serialize-nextjs-http-wrapper.d.ts → runtimes/nextjs/serialize-nextjs-http-wrapper.d.ts} +0 -0
  190. /package/dist/src/{serialize-nextjs-http-wrapper.js → runtimes/nextjs/serialize-nextjs-http-wrapper.js} +0 -0
  191. /package/dist/src/{utils/serialize-import-map.d.ts → serialize-import-map.d.ts} +0 -0
  192. /package/src/{serialize-websocket-wrapper.ts → events/channels/serialize-websocket-wrapper.ts} +0 -0
  193. /package/src/{openapi-spec-generator.ts → events/http/openapi-spec-generator.ts} +0 -0
  194. /package/src/{serialize-fetch-wrapper.ts → events/http/serialize-fetch-wrapper.ts} +0 -0
  195. /package/src/{serialize-scheduler-meta.ts → events/scheduler/serialize-scheduler-meta.ts} +0 -0
  196. /package/src/{serialize-nextjs-backend-wrapper.ts → runtimes/nextjs/serialize-nextjs-backend-wrapper.ts} +0 -0
  197. /package/src/{serialize-nextjs-http-wrapper.ts → runtimes/nextjs/serialize-nextjs-http-wrapper.ts} +0 -0
@@ -1 +1 @@
1
- {"root":["../bin/pikku-all.ts","../bin/pikku-channels-map.ts","../bin/pikku-channels.ts","../bin/pikku-fetch.ts","../bin/pikku-function-types.ts","../bin/pikku-functions.ts","../bin/pikku-http-map.ts","../bin/pikku-http-routes.ts","../bin/pikku-nextjs.ts","../bin/pikku-openapi.ts","../bin/pikku-rpc-map.ts","../bin/pikku-rpc.ts","../bin/pikku-scheduler.ts","../bin/pikku-schemas.ts","../bin/pikku-websocket.ts","../bin/pikku.ts","../src/inspector-glob.ts","../src/openapi-spec-generator.ts","../src/pikku-cli-config.ts","../src/schema-generator.ts","../src/serialize-fetch-wrapper.ts","../src/serialize-nextjs-backend-wrapper.ts","../src/serialize-nextjs-http-wrapper.ts","../src/serialize-pikku-types.ts","../src/serialize-scheduler-meta.ts","../src/serialize-typed-channel-map.ts","../src/serialize-typed-http-map.ts","../src/serialize-typed-rpc-map.ts","../src/serialize-websocket-wrapper.ts","../src/utils/serialize-import-map.ts","../src/utils/utils.ts"],"version":"5.7.3"}
1
+ {"root":["../bin/pikku-all.ts","../bin/pikku-fetch.ts","../bin/pikku-nextjs.ts","../bin/pikku-openapi.ts","../bin/pikku-queue-service.ts","../bin/pikku-schemas.ts","../bin/pikku-websocket.ts","../bin/pikku.ts","../src/inspector-glob.ts","../src/pikku-cli-config.ts","../src/pikku-command-schemas.ts","../src/schema-generator.ts","../src/schemas.ts","../src/serialize-import-map.ts","../src/serialize-pikku-types.ts","../src/types.ts","../src/utils.ts","../src/events/channels/pikku-channels.ts","../src/events/channels/pikku-command-channels-map.ts","../src/events/channels/pikku-command-channels.ts","../src/events/channels/pikku-command-websocket-typed.ts","../src/events/channels/serialize-typed-channel-map.ts","../src/events/channels/serialize-websocket-wrapper.ts","../src/events/fetch/index.ts","../src/events/functions/pikku-command-function-types.ts","../src/events/functions/pikku-command-functions.ts","../src/events/functions/pikku-command-services.ts","../src/events/functions/pikku-function-types.ts","../src/events/functions/pikku-functions.ts","../src/events/http/openapi-spec-generator.ts","../src/events/http/pikku-command-http-map.ts","../src/events/http/pikku-command-http-routes.ts","../src/events/http/pikku-command-openapi.ts","../src/events/http/pikku-http-routes.ts","../src/events/http/serialize-fetch-wrapper.ts","../src/events/http/serialize-typed-http-map.ts","../src/events/mcp/pikku-command-mcp-json.ts","../src/events/mcp/pikku-command-mcp.ts","../src/events/mcp/serialize-mcp-json.ts","../src/events/queue/pikku-command-queue-map.ts","../src/events/queue/pikku-command-queue-service.ts","../src/events/queue/pikku-command-queue.ts","../src/events/queue/pikku-queue-map.ts","../src/events/queue/pikku-queue.ts","../src/events/queue/serialize-queue-map.ts","../src/events/queue/serialize-queue-meta.ts","../src/events/queue/serialize-queue-wrapper.ts","../src/events/rpc/pikku-command-rpc-client.ts","../src/events/rpc/pikku-command-rpc-map.ts","../src/events/rpc/pikku-command-rpc.ts","../src/events/rpc/pikku-rpc.ts","../src/events/rpc/serialize-rpc-wrapper.ts","../src/events/rpc/serialize-typed-rpc-map.ts","../src/events/scheduler/pikku-command-scheduler.ts","../src/events/scheduler/serialize-scheduler-meta.ts","../src/runtimes/nextjs/pikku-command-nextjs.ts","../src/runtimes/nextjs/serialize-nextjs-backend-wrapper.ts","../src/runtimes/nextjs/serialize-nextjs-http-wrapper.ts"],"version":"5.8.3"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@pikku/cli",
3
- "version": "0.7.7",
3
+ "version": "0.8.1",
4
4
  "author": "yasser.fadl@gmail.com",
5
5
  "license": "MIT",
6
6
  "bin": {
@@ -22,8 +22,8 @@
22
22
  },
23
23
  "dependencies": {
24
24
  "@openapi-contrib/json-schema-to-openapi-schema": "^3.0.2",
25
- "@pikku/core": "^0.7.8",
26
- "@pikku/inspector": "^0.7.7",
25
+ "@pikku/core": "^0.8.1",
26
+ "@pikku/inspector": "^0.8.1",
27
27
  "@types/cookie": "^0.6.0",
28
28
  "@types/uuid": "^10.0.0",
29
29
  "chalk": "^5.4.1",
@@ -1,16 +1,19 @@
1
- import { PikkuCLIConfig } from '../src/pikku-cli-config.js'
1
+ import { PikkuCLIConfig } from '../../pikku-cli-config.js'
2
2
  import { InspectorState } from '@pikku/inspector'
3
3
  import {
4
4
  logCommandInfoAndTime,
5
5
  serializeFileImports,
6
6
  writeFileInDir,
7
- } from '../src/utils/utils.js'
7
+ } from '../../utils.js'
8
+ import { PikkuCommand } from '../../types.js'
8
9
 
9
- export const pikkuChannels = async (
10
+ export const pikkuChannels: PikkuCommand = async (
11
+ logger,
10
12
  cliConfig: PikkuCLIConfig,
11
13
  visitState: InspectorState
12
14
  ) => {
13
15
  return await logCommandInfoAndTime(
16
+ logger,
14
17
  'Finding Channels',
15
18
  'Found channels',
16
19
  [visitState.channels.files.size === 0],
@@ -18,6 +21,7 @@ export const pikkuChannels = async (
18
21
  const { channelsFile, channelsMetaFile, packageMappings } = cliConfig
19
22
  const { channels } = visitState
20
23
  await writeFileInDir(
24
+ logger,
21
25
  channelsFile,
22
26
  serializeFileImports(
23
27
  'addChannel',
@@ -27,6 +31,7 @@ export const pikkuChannels = async (
27
31
  )
28
32
  )
29
33
  await writeFileInDir(
34
+ logger,
30
35
  channelsMetaFile,
31
36
  `import { pikkuState } from '@pikku/core'\npikkuState('channel', 'meta', ${JSON.stringify(channels.meta, null, 2)})`
32
37
  )
@@ -0,0 +1,26 @@
1
+ import { logCommandInfoAndTime, writeFileInDir } from '../../utils.js'
2
+ import { serializeTypedChannelsMap } from './serialize-typed-channel-map.js'
3
+ import { PikkuCommand } from '../../types.js'
4
+
5
+ export const pikkuChannelsMap: PikkuCommand = async (
6
+ logger,
7
+ { channelsMapDeclarationFile, packageMappings },
8
+ state
9
+ ) => {
10
+ return await logCommandInfoAndTime(
11
+ logger,
12
+ 'Creating channels map',
13
+ 'Created channels map',
14
+ [state.channels.files.size === 0],
15
+ async () => {
16
+ const content = serializeTypedChannelsMap(
17
+ channelsMapDeclarationFile,
18
+ packageMappings,
19
+ state.functions.typesMap,
20
+ state.functions.meta,
21
+ state.channels.meta
22
+ )
23
+ await writeFileInDir(logger, channelsMapDeclarationFile, content)
24
+ }
25
+ )
26
+ }
@@ -0,0 +1,38 @@
1
+ import {
2
+ logCommandInfoAndTime,
3
+ serializeFileImports,
4
+ writeFileInDir,
5
+ } from '../../utils.js'
6
+ import { PikkuCommand } from '../../types.js'
7
+
8
+ export const pikkuChannels: PikkuCommand = async (
9
+ logger,
10
+ cliConfig,
11
+ visitState
12
+ ) => {
13
+ return await logCommandInfoAndTime(
14
+ logger,
15
+ 'Finding Channels',
16
+ 'Found channels',
17
+ [visitState.channels.files.size === 0],
18
+ async () => {
19
+ const { channelsFile, channelsMetaFile, packageMappings } = cliConfig
20
+ const { channels } = visitState
21
+ await writeFileInDir(
22
+ logger,
23
+ channelsFile,
24
+ serializeFileImports(
25
+ 'addChannel',
26
+ channelsFile,
27
+ channels.files,
28
+ packageMappings
29
+ )
30
+ )
31
+ await writeFileInDir(
32
+ logger,
33
+ channelsMetaFile,
34
+ `import { pikkuState } from '@pikku/core'\npikkuState('channel', 'meta', ${JSON.stringify(channels.meta, null, 2)})`
35
+ )
36
+ }
37
+ )
38
+ }
@@ -0,0 +1,36 @@
1
+ import { PikkuCommandWithoutState } from '../../types.js'
2
+ import {
3
+ logCommandInfoAndTime,
4
+ getFileImportRelativePath,
5
+ writeFileInDir,
6
+ } from '../../utils.js'
7
+ import { serializeWebsocketWrapper } from './serialize-websocket-wrapper.js'
8
+
9
+ export const pikkuWebSocketTyped: PikkuCommandWithoutState = async (
10
+ logger,
11
+ { websocketFile, channelsMapDeclarationFile, packageMappings }
12
+ ) => {
13
+ return await logCommandInfoAndTime(
14
+ logger,
15
+ 'Generating websocket wrapper',
16
+ 'Generated websocket wrapper',
17
+ [
18
+ websocketFile === undefined,
19
+ "websocketFile isn't set in the pikku config",
20
+ ],
21
+ async () => {
22
+ if (!websocketFile) {
23
+ throw new Error("fetchFile is isn't set in the pikku config")
24
+ }
25
+
26
+ const channelsMapDeclarationPath = getFileImportRelativePath(
27
+ websocketFile,
28
+ channelsMapDeclarationFile,
29
+ packageMappings
30
+ )
31
+
32
+ const content = [serializeWebsocketWrapper(channelsMapDeclarationPath)]
33
+ await writeFileInDir(logger, websocketFile, content.join('\n'))
34
+ }
35
+ )
36
+ }
@@ -1,7 +1,7 @@
1
1
  import { ChannelsMeta } from '@pikku/core/channel'
2
- import { serializeImportMap } from './utils/serialize-import-map.js'
2
+ import { serializeImportMap } from '../../serialize-import-map.js'
3
3
  import { TypesMap } from '@pikku/inspector'
4
- import { generateCustomTypes } from './utils/utils.js'
4
+ import { generateCustomTypes } from '../../utils.js'
5
5
  import { FunctionsMeta } from '@pikku/core'
6
6
 
7
7
  export const serializeTypedChannelsMap = (
@@ -0,0 +1,33 @@
1
+ import { serializeFetchWrapper } from '../http/serialize-fetch-wrapper.js'
2
+ import {
3
+ getFileImportRelativePath,
4
+ logCommandInfoAndTime,
5
+ writeFileInDir,
6
+ } from '../../utils.js'
7
+ import { PikkuCommandWithoutState } from '../../types.js'
8
+
9
+ export const pikkuFetch: PikkuCommandWithoutState = async (
10
+ logger,
11
+ { fetchFile, httpRoutesMapDeclarationFile, packageMappings }
12
+ ) => {
13
+ return await logCommandInfoAndTime(
14
+ logger,
15
+ 'Generating fetch wrapper',
16
+ 'Generated fetch wrapper',
17
+ [fetchFile === undefined, "fetchFile isn't set in the pikku config"],
18
+ async () => {
19
+ if (!fetchFile) {
20
+ throw new Error("fetchFile is isn't set in the pikku config")
21
+ }
22
+
23
+ const routesMapDeclarationPath = getFileImportRelativePath(
24
+ fetchFile,
25
+ httpRoutesMapDeclarationFile,
26
+ packageMappings
27
+ )
28
+
29
+ const content = [serializeFetchWrapper(routesMapDeclarationPath)]
30
+ await writeFileInDir(logger, fetchFile, content.join('\n'))
31
+ }
32
+ )
33
+ }
@@ -0,0 +1,48 @@
1
+ import {
2
+ getFileImportRelativePath,
3
+ getPikkuFilesAndMethods,
4
+ logCommandInfoAndTime,
5
+ writeFileInDir,
6
+ } from '../../utils.js'
7
+ import { serializePikkuTypes } from '../../serialize-pikku-types.js'
8
+ import { PikkuCommand } from '../../types.js'
9
+
10
+ export const pikkuFunctionTypes: PikkuCommand = async (
11
+ logger,
12
+ { typesDeclarationFile: typesFile, packageMappings, rpcMapDeclarationFile },
13
+ visitState,
14
+ options = {}
15
+ ) => {
16
+ return await logCommandInfoAndTime(
17
+ logger,
18
+ 'Creating api types',
19
+ 'Created api types',
20
+ [false],
21
+ async () => {
22
+ const { userSessionType, sessionServicesType, singletonServicesType } =
23
+ await getPikkuFilesAndMethods(
24
+ logger,
25
+ visitState,
26
+ packageMappings,
27
+ typesFile,
28
+ options,
29
+ {
30
+ userSessionType: true,
31
+ sessionServiceType: true,
32
+ singletonServicesType: true,
33
+ }
34
+ )
35
+
36
+ const content = serializePikkuTypes(
37
+ `import type { ${userSessionType.type} } from '${getFileImportRelativePath(typesFile, userSessionType.typePath, packageMappings)}'`,
38
+ userSessionType.type,
39
+ `import type { ${singletonServicesType.type} } from '${getFileImportRelativePath(typesFile, singletonServicesType.typePath, packageMappings)}'`,
40
+ singletonServicesType.type,
41
+ `import type { ${sessionServicesType.type} } from '${getFileImportRelativePath(typesFile, sessionServicesType.typePath, packageMappings)}'`,
42
+ `import type { TypedPikkuRPC } from '${getFileImportRelativePath(typesFile, rpcMapDeclarationFile, packageMappings)}'`
43
+ )
44
+
45
+ await writeFileInDir(logger, typesFile, content)
46
+ }
47
+ )
48
+ }
@@ -0,0 +1,84 @@
1
+ import {
2
+ getFileImportRelativePath,
3
+ logCommandInfoAndTime,
4
+ writeFileInDir,
5
+ } from '../../utils.js'
6
+ import { PikkuCommand } from '../../types.js'
7
+
8
+ export const serializeFunctionImports = (
9
+ outputPath: string,
10
+ functionsMap: Map<string, { path: string; exportedName: string }>,
11
+ packageMappings: Record<string, string> = {}
12
+ ) => {
13
+ const serializedImports: string[] = [
14
+ `/* Import and register RPCs */`,
15
+ `import { addFunction } from '@pikku/core'`,
16
+ ]
17
+
18
+ const serializedRegistrations: string[] = []
19
+
20
+ // Sort by function name for consistent output
21
+ const sortedEntries = Array.from(functionsMap.entries()).sort((a, b) =>
22
+ a[0].localeCompare(b[0])
23
+ )
24
+
25
+ for (const [name, { path, exportedName }] of sortedEntries) {
26
+ const filePath = getFileImportRelativePath(
27
+ outputPath,
28
+ path,
29
+ packageMappings
30
+ )
31
+
32
+ // For directly exported functions, we can just import and register them
33
+ if (name === exportedName) {
34
+ serializedImports.push(`import { ${exportedName} } from '${filePath}'`)
35
+ serializedRegistrations.push(
36
+ `addFunction('${name}', { func: ${exportedName} })`
37
+ )
38
+ }
39
+ // For renamed functions, we need to import and alias them
40
+ else {
41
+ serializedImports.push(
42
+ `import { ${exportedName} as ${name} } from '${filePath}'`
43
+ )
44
+ serializedRegistrations.push(`addFunction('${name}', ${name})`)
45
+ }
46
+ }
47
+
48
+ // Add a blank line between imports and registrations
49
+ if (serializedImports.length > 0 && serializedRegistrations.length > 0) {
50
+ serializedImports.push('')
51
+ }
52
+
53
+ // Combine the imports and registrations
54
+ return [...serializedImports, ...serializedRegistrations].join('\n')
55
+ }
56
+
57
+ export const pikkuFunctions: PikkuCommand = async (
58
+ logger,
59
+ { functionsMetaFile, functionsFile, packageMappings },
60
+ { functions }
61
+ ) => {
62
+ return await logCommandInfoAndTime(
63
+ logger,
64
+ 'Serializing Pikku functions',
65
+ 'Serialized Pikku functions',
66
+ [false],
67
+ async () => {
68
+ await writeFileInDir(
69
+ logger,
70
+ functionsFile,
71
+ serializeFunctionImports(
72
+ functionsFile,
73
+ functions.files,
74
+ packageMappings
75
+ )
76
+ )
77
+ await writeFileInDir(
78
+ logger,
79
+ functionsMetaFile,
80
+ `import { pikkuState } from '@pikku/core'\npikkuState('function', 'meta', ${JSON.stringify(functions.meta, null, 2)})`
81
+ )
82
+ }
83
+ )
84
+ }
@@ -0,0 +1,125 @@
1
+ import {
2
+ getFileImportRelativePath,
3
+ getPikkuFilesAndMethods,
4
+ logCommandInfoAndTime,
5
+ writeFileInDir,
6
+ } from '../../utils.js'
7
+ import { PikkuCommand } from '../../types.js'
8
+ import { PikkuCLIConfig } from '../../pikku-cli-config.js'
9
+ import { InspectorState } from '@pikku/inspector'
10
+
11
+ export const serializeServicesMap = (
12
+ functionsMetaData: Record<string, any>,
13
+ middlewareServices: string[] = [],
14
+ servicesImport: string,
15
+ sessionServicesImport: string
16
+ ): string => {
17
+ // Extract all unique services from all functions
18
+ const usedServices = new Set<string>()
19
+
20
+ // Internal services that are created internally and not via the create service script
21
+ const internalServices = new Set(['rpc', 'mcp', 'channel', 'userSession'])
22
+
23
+ for (const funcMeta of Object.values(functionsMetaData)) {
24
+ if (funcMeta.services && Array.isArray(funcMeta.services.services)) {
25
+ funcMeta.services.services.forEach((service: string) => {
26
+ // Only include services that are not internal
27
+ if (!internalServices.has(service)) {
28
+ usedServices.add(service)
29
+ }
30
+ })
31
+ }
32
+ }
33
+
34
+ // Add middleware services that might not be detected from function inspection
35
+ middlewareServices.forEach((service) => {
36
+ if (!internalServices.has(service)) {
37
+ usedServices.add(service)
38
+ }
39
+ })
40
+
41
+ // Create a map of services with true for all needed services
42
+ const servicesMap = Object.fromEntries(
43
+ Array.from(usedServices)
44
+ .sort()
45
+ .map((service) => [service, true])
46
+ )
47
+
48
+ // Generate the TypeScript code
49
+ const serviceKeys = Object.keys(servicesMap).sort()
50
+
51
+ // Services that are always required internally by the framework
52
+ const defaultServices = ['config', 'logger', 'variables', 'schema']
53
+
54
+ // Combine default services with detected services
55
+ const allRequiredServices = [
56
+ ...new Set([...defaultServices, ...serviceKeys]),
57
+ ].sort()
58
+
59
+ // For RequiredSingletonServices, we need to pick from the actual SingletonServices interface
60
+ // This will be resolved at compile time based on what's actually in the SingletonServices interface
61
+ // We don't need to hardcode which services are singletons beyond the core framework ones
62
+
63
+ const code = [
64
+ '/**',
65
+ ' * This file was generated by the @pikku/cli',
66
+ ' */',
67
+ '',
68
+ servicesImport,
69
+ sessionServicesImport,
70
+ "import type { PikkuInteraction } from '@pikku/core'",
71
+ '',
72
+ 'export const singletonServices = {',
73
+ ...Object.keys(servicesMap).map((service) => ` '${service}': true,`),
74
+ '} as const',
75
+ '',
76
+ '// Singleton services (created once at startup)',
77
+ '// Only includes services that are both required and available in SingletonServices',
78
+ `export type RequiredSingletonServices = Pick<SingletonServices, Extract<keyof SingletonServices, ${allRequiredServices.map((key) => `'${key}'`).join(' | ')}>> & Partial<Omit<SingletonServices, ${allRequiredServices.map((key) => `'${key}'`).join(' | ')}>>`,
79
+ '',
80
+ '// Session services (created per request, can access singleton services)',
81
+ '// Omits singleton services and PikkuInteraction (mcp, rpc, http, channel)',
82
+ `export type RequiredSessionServices = Omit<Services, keyof SingletonServices | keyof PikkuInteraction>`,
83
+ '',
84
+ ].join('\n')
85
+
86
+ return code
87
+ }
88
+
89
+ export const pikkuServices: PikkuCommand = async (
90
+ logger,
91
+ cliConfig: PikkuCLIConfig,
92
+ visitState: InspectorState
93
+ ) => {
94
+ return await logCommandInfoAndTime(
95
+ logger,
96
+ 'Generating Pikku services map',
97
+ 'Generated Pikku services map',
98
+ [visitState.functions.files.size === 0],
99
+ async () => {
100
+ const { sessionServicesType, singletonServicesType } =
101
+ await getPikkuFilesAndMethods(
102
+ logger,
103
+ visitState,
104
+ cliConfig.packageMappings,
105
+ cliConfig.typesDeclarationFile,
106
+ {},
107
+ {
108
+ sessionServiceType: true,
109
+ singletonServicesType: true,
110
+ }
111
+ )
112
+
113
+ const servicesImport = `import type { ${singletonServicesType.type} } from '${getFileImportRelativePath(cliConfig.typesDeclarationFile, singletonServicesType.typePath, cliConfig.packageMappings)}'`
114
+ const sessionServicesImport = `import type { ${sessionServicesType.type} } from '${getFileImportRelativePath(cliConfig.typesDeclarationFile, sessionServicesType.typePath, cliConfig.packageMappings)}'`
115
+
116
+ const servicesCode = serializeServicesMap(
117
+ visitState.functions.meta,
118
+ cliConfig.middlewareServices,
119
+ servicesImport,
120
+ sessionServicesImport
121
+ )
122
+ await writeFileInDir(logger, cliConfig.servicesFile, servicesCode)
123
+ }
124
+ )
125
+ }
@@ -1,30 +1,27 @@
1
- import { PikkuCLIConfig } from '../src/pikku-cli-config.js'
2
- import { InspectorState } from '@pikku/inspector'
3
1
  import {
4
2
  getFileImportRelativePath,
5
3
  getPikkuFilesAndMethods,
6
4
  logCommandInfoAndTime,
7
- PikkuCLIOptions,
8
5
  writeFileInDir,
9
- } from '../src/utils/utils.js'
10
- import { serializePikkuTypes } from '../src/serialize-pikku-types.js'
6
+ } from '../../utils.js'
7
+ import { serializePikkuTypes } from '../../serialize-pikku-types.js'
8
+ import { PikkuCommand } from '../../types.js'
11
9
 
12
- export const pikkuFunctionTypes = async (
13
- {
14
- typesDeclarationFile: typesFile,
15
- packageMappings,
16
- rpcMapDeclarationFile,
17
- }: PikkuCLIConfig,
18
- options: PikkuCLIOptions,
19
- visitState: InspectorState
10
+ export const pikkuFunctionTypes: PikkuCommand = async (
11
+ logger,
12
+ { typesDeclarationFile: typesFile, packageMappings, rpcMapDeclarationFile },
13
+ visitState,
14
+ options = {}
20
15
  ) => {
21
- await logCommandInfoAndTime(
16
+ return await logCommandInfoAndTime(
17
+ logger,
22
18
  'Creating api types',
23
19
  'Created api types',
24
20
  [false],
25
21
  async () => {
26
22
  const { userSessionType, sessionServicesType, singletonServicesType } =
27
23
  await getPikkuFilesAndMethods(
24
+ logger,
28
25
  visitState,
29
26
  packageMappings,
30
27
  typesFile,
@@ -44,7 +41,7 @@ export const pikkuFunctionTypes = async (
44
41
  `import type { ${sessionServicesType.type} } from '${getFileImportRelativePath(typesFile, sessionServicesType.typePath, packageMappings)}'`,
45
42
  `import type { TypedPikkuRPC } from '${getFileImportRelativePath(typesFile, rpcMapDeclarationFile, packageMappings)}'`
46
43
  )
47
- await writeFileInDir(typesFile, content)
44
+ await writeFileInDir(logger, typesFile, content)
48
45
  }
49
46
  )
50
47
  }
@@ -1,10 +1,9 @@
1
- import { PikkuCLIConfig } from '../src/pikku-cli-config.js'
2
- import { InspectorState } from '@pikku/inspector'
3
1
  import {
4
2
  getFileImportRelativePath,
5
3
  logCommandInfoAndTime,
6
4
  writeFileInDir,
7
- } from '../src/utils/utils.js'
5
+ } from '../../utils.js'
6
+ import { PikkuCommand } from '../../types.js'
8
7
 
9
8
  export const serializeFunctionImports = (
10
9
  outputPath: string,
@@ -55,16 +54,19 @@ export const serializeFunctionImports = (
55
54
  return [...serializedImports, ...serializedRegistrations].join('\n')
56
55
  }
57
56
 
58
- export const pikkuFunctions = async (
59
- { functionsMetaFile, functionsFile, packageMappings }: PikkuCLIConfig,
60
- { functions }: InspectorState
57
+ export const pikkuFunctions: PikkuCommand = async (
58
+ logger,
59
+ { functionsMetaFile, functionsFile, packageMappings },
60
+ { functions }
61
61
  ) => {
62
62
  return await logCommandInfoAndTime(
63
+ logger,
63
64
  'Serializing Pikku functions',
64
65
  'Serialized Pikku functions',
65
66
  [false],
66
67
  async () => {
67
68
  await writeFileInDir(
69
+ logger,
68
70
  functionsFile,
69
71
  serializeFunctionImports(
70
72
  functionsFile,
@@ -73,6 +75,7 @@ export const pikkuFunctions = async (
73
75
  )
74
76
  )
75
77
  await writeFileInDir(
78
+ logger,
76
79
  functionsMetaFile,
77
80
  `import { pikkuState } from '@pikku/core'\npikkuState('function', 'meta', ${JSON.stringify(functions.meta, null, 2)})`
78
81
  )
@@ -0,0 +1,27 @@
1
+ import { logCommandInfoAndTime, writeFileInDir } from '../../utils.js'
2
+ import { serializeTypedRoutesMap } from './serialize-typed-http-map.js'
3
+ import { PikkuCommand } from '../../types.js'
4
+
5
+ export const pikkuHTTPMap: PikkuCommand = async (
6
+ logger,
7
+ { httpRoutesMapDeclarationFile, packageMappings },
8
+ { http, functions }
9
+ ) => {
10
+ return await logCommandInfoAndTime(
11
+ logger,
12
+ 'Creating HTTP map',
13
+ 'Created HTTP map',
14
+ [http.files.size === 0],
15
+ async () => {
16
+ const content = serializeTypedRoutesMap(
17
+ httpRoutesMapDeclarationFile,
18
+ packageMappings,
19
+ functions.typesMap,
20
+ functions.meta,
21
+ http.meta,
22
+ http.metaInputTypes
23
+ )
24
+ await writeFileInDir(logger, httpRoutesMapDeclarationFile, content)
25
+ }
26
+ )
27
+ }
@@ -0,0 +1,40 @@
1
+ import { PikkuCLIConfig } from '../../pikku-cli-config.js'
2
+ import { InspectorState } from '@pikku/inspector'
3
+ import {
4
+ logCommandInfoAndTime,
5
+ serializeFileImports,
6
+ writeFileInDir,
7
+ } from '../../utils.js'
8
+ import { PikkuCommand } from '../../types.js'
9
+
10
+ export const pikkuHTTP: PikkuCommand = async (
11
+ logger,
12
+ cliConfig: PikkuCLIConfig,
13
+ visitState: InspectorState
14
+ ) => {
15
+ return await logCommandInfoAndTime(
16
+ logger,
17
+ 'Finding HTTP routes',
18
+ 'Found HTTP routes',
19
+ [visitState.http.files.size === 0],
20
+ async () => {
21
+ const { httpRoutesFile, httpRoutesMetaFile, packageMappings } = cliConfig
22
+ const { http } = visitState
23
+ await writeFileInDir(
24
+ logger,
25
+ httpRoutesFile,
26
+ serializeFileImports(
27
+ 'addHTTPRoute',
28
+ httpRoutesFile,
29
+ http.files,
30
+ packageMappings
31
+ )
32
+ )
33
+ await writeFileInDir(
34
+ logger,
35
+ httpRoutesMetaFile,
36
+ `import { pikkuState } from '@pikku/core'\npikkuState('http', 'meta', ${JSON.stringify(http.meta, null, 2)})`
37
+ )
38
+ }
39
+ )
40
+ }