@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,107 +1,122 @@
1
- import { getFileImportRelativePath, logInfo, logPikkuLogo, writeFileInDir, } from '../src/utils/utils.js';
1
+ import { CLILogger, getFileImportRelativePath, writeFileInDir, } from '../src/utils.js';
2
2
  import { getPikkuCLIConfig } from '../src/pikku-cli-config.js';
3
- import { pikkuHTTP } from './pikku-http-routes.js';
4
- import { pikkuFunctionTypes } from './pikku-function-types.js';
5
- import { pikkuHTTPMap } from './pikku-http-map.js';
3
+ import { pikkuHTTP } from '../src/events/http/pikku-command-http-routes.js';
4
+ import { pikkuFunctionTypes } from '../src/events/functions/pikku-command-function-types.js';
5
+ import { pikkuHTTPMap } from '../src/events/http/pikku-command-http-map.js';
6
6
  import { existsSync } from 'fs';
7
- import { pikkuFetch } from './pikku-fetch.js';
8
- import { pikkuChannelsMap } from './pikku-channels-map.js';
9
- import { pikkuChannels } from './pikku-channels.js';
10
- import { pikkuNext } from './pikku-nextjs.js';
11
- import { pikkuOpenAPI } from './pikku-openapi.js';
12
- import { pikkuScheduler } from './pikku-scheduler.js';
13
- import { pikkuSchemas } from './pikku-schemas.js';
14
- import { pikkuWebSocket } from './pikku-websocket.js';
7
+ import { pikkuChannelsMap } from '../src/events/channels/pikku-command-channels-map.js';
8
+ import { pikkuChannels } from '../src/events/channels/pikku-command-channels.js';
15
9
  import { inspectorGlob } from '../src/inspector-glob.js';
16
10
  import chokidar from 'chokidar';
17
- import { pikkuFunctions } from './pikku-functions.js';
18
- import { pikkuRPC } from './pikku-rpc.js';
19
- import { pikkuRPCMap } from './pikku-rpc-map.js';
20
- import { PikkuEventTypes } from '@pikku/core';
21
- const runAll = async (cliConfig, options) => {
22
- const boostrapImports = {
23
- all: { meta: [], events: [] },
24
- };
25
- const addImport = (from, type, addTo) => {
26
- const statement = `import '${getFileImportRelativePath(cliConfig.bootstrapFile, from, cliConfig.packageMappings)}'`;
27
- if (type === 'meta') {
28
- boostrapImports.all.meta.push(statement);
29
- }
30
- else {
31
- boostrapImports.all.events.push(statement);
32
- }
33
- for (const transport of Object.keys(PikkuEventTypes)) {
34
- if (!addTo || addTo?.includes(transport)) {
35
- boostrapImports[transport] = boostrapImports[transport] || {
36
- meta: [],
37
- events: [],
38
- };
39
- if (type === 'meta') {
40
- boostrapImports[transport].meta.push(statement);
41
- }
42
- else {
43
- boostrapImports[transport].events.push(statement);
44
- }
45
- }
46
- }
47
- };
11
+ import { pikkuFunctions } from '../src/events/functions/pikku-command-functions.js';
12
+ import { pikkuServices } from '../src/events/functions/pikku-command-services.js';
13
+ import { pikkuRPC } from '../src/events/rpc/pikku-command-rpc.js';
14
+ import { pikkuRPCMap } from '../src/events/rpc/pikku-command-rpc-map.js';
15
+ import { pikkuQueue } from '../src/events/queue/pikku-command-queue.js';
16
+ import { pikkuQueueMap } from '../src/events/queue/pikku-command-queue-map.js';
17
+ import { pikkuFetch } from '../src/events/fetch/index.js';
18
+ import { pikkuRPCClient } from '../src/events/rpc/pikku-command-rpc-client.js';
19
+ import { pikkuWebSocketTyped } from '../src/events/channels/pikku-command-websocket-typed.js';
20
+ import { pikkuOpenAPI } from '../src/events/http/pikku-command-openapi.js';
21
+ import { pikkuMCP } from '../src/events/mcp/pikku-command-mcp.js';
22
+ import { pikkuQueueService } from '../src/events/queue/pikku-command-queue-service.js';
23
+ import { pikkuScheduler } from '../src/events/scheduler/pikku-command-scheduler.js';
24
+ import { pikkuSchemas } from '../src/schemas.js';
25
+ import { pikkuMCPJSON } from '../src/events/mcp/pikku-command-mcp-json.js';
26
+ import { pikkuNext } from '../src/runtimes/nextjs/pikku-command-nextjs.js';
27
+ const generateBootstrapFile = async (logger, cliConfig, bootstrapFile, specificImports, schemas) => {
28
+ // Common imports that every bootstrap file needs
29
+ const commonImports = [cliConfig.functionsMetaFile, cliConfig.functionsFile];
30
+ // Add schema if it exists
31
+ if (schemas) {
32
+ commonImports.push(`${cliConfig.schemaDirectory}/register.gen.ts`);
33
+ }
34
+ // Combine common imports with specific imports
35
+ const allImports = [...commonImports, ...specificImports];
36
+ await writeFileInDir(logger, bootstrapFile, allImports
37
+ .map((to) => `import '${getFileImportRelativePath(bootstrapFile, to, cliConfig.packageMappings)}'`)
38
+ .sort((to) => (to.includes('meta') ? -1 : 1)) // Ensure meta files are at the top
39
+ .join('\n'));
40
+ };
41
+ const runAll = async (logger, cliConfig, options) => {
42
+ const allImports = [];
48
43
  let typesDeclarationFileExists = true;
49
- let visitState = await inspectorGlob(cliConfig.rootDir, cliConfig.srcDirectories, cliConfig.filters);
44
+ let visitState = await inspectorGlob(logger, cliConfig.rootDir, cliConfig.srcDirectories, cliConfig.filters);
50
45
  if (!existsSync(cliConfig.typesDeclarationFile)) {
51
46
  typesDeclarationFileExists = false;
52
47
  }
53
- await pikkuFunctionTypes(cliConfig, options, visitState);
48
+ await pikkuFunctionTypes(logger, cliConfig, visitState, options);
54
49
  // This is needed since the addHTTPRoute function will add the routes to the visitState
55
50
  if (!typesDeclarationFileExists) {
56
- logInfo(`• Type file first created, inspecting again...\x1b[0m`);
57
- visitState = await inspectorGlob(cliConfig.rootDir, cliConfig.srcDirectories, cliConfig.filters);
51
+ logger.info(`• Type file first created, inspecting again...\x1b[0m`);
52
+ visitState = await inspectorGlob(logger, cliConfig.rootDir, cliConfig.srcDirectories, cliConfig.filters);
58
53
  }
59
- const functions = pikkuFunctions(cliConfig, visitState);
54
+ const functions = pikkuFunctions(logger, cliConfig, visitState);
60
55
  if (!functions) {
61
- logInfo(`• No functions found, skipping remaining steps...\x1b[0m`);
56
+ logger.info(`• No functions found, skipping remaining steps...\x1b[0m`);
62
57
  process.exit(1);
63
58
  }
64
- addImport(cliConfig.functionsMetaFile, 'meta');
65
- addImport(cliConfig.functionsFile, 'events');
66
- await pikkuRPC(cliConfig, visitState);
67
- await pikkuRPCMap(cliConfig, visitState);
68
- addImport(cliConfig.rpcMetaFile, 'meta', [PikkuEventTypes.rpc]);
69
- const schemas = await pikkuSchemas(cliConfig, visitState);
59
+ // Base imports for all bootstrap files
60
+ allImports.push(cliConfig.functionsMetaFile, cliConfig.functionsFile);
61
+ // Generate services map
62
+ await pikkuServices(logger, cliConfig, visitState);
63
+ await pikkuRPC(logger, cliConfig, visitState);
64
+ await pikkuRPCMap(logger, cliConfig, visitState);
65
+ await pikkuRPCClient(logger, cliConfig);
66
+ allImports.push(cliConfig.rpcMetaFile);
67
+ const schemas = await pikkuSchemas(logger, cliConfig, visitState);
70
68
  if (schemas) {
71
- addImport(`${cliConfig.schemaDirectory}/register.gen.ts`, 'other');
69
+ allImports.push(`${cliConfig.schemaDirectory}/register.gen.ts`);
72
70
  }
73
- const http = await pikkuHTTP(cliConfig, visitState);
71
+ // RPC bootstrap is always generated since RPC is always present
72
+ await generateBootstrapFile(logger, cliConfig, cliConfig.bootstrapFiles.rpc, [cliConfig.rpcMetaFile], schemas);
73
+ const http = await pikkuHTTP(logger, cliConfig, visitState);
74
74
  if (http) {
75
- await pikkuHTTPMap(cliConfig, visitState);
76
- await pikkuFetch(cliConfig);
77
- addImport(cliConfig.httpRoutesMetaFile, 'meta', [PikkuEventTypes.http]);
78
- addImport(cliConfig.httpRoutesFile, 'events', [PikkuEventTypes.http]);
75
+ await pikkuHTTPMap(logger, cliConfig, visitState);
76
+ await pikkuFetch(logger, cliConfig);
77
+ allImports.push(cliConfig.httpRoutesMetaFile, cliConfig.httpRoutesFile);
78
+ await generateBootstrapFile(logger, cliConfig, cliConfig.bootstrapFiles.http, [cliConfig.httpRoutesMetaFile, cliConfig.httpRoutesFile], schemas);
79
+ }
80
+ const scheduler = await pikkuScheduler(logger, cliConfig, visitState);
81
+ if (scheduler) {
82
+ allImports.push(cliConfig.schedulersMetaFile, cliConfig.schedulersFile);
83
+ await generateBootstrapFile(logger, cliConfig, cliConfig.bootstrapFiles.scheduler, [cliConfig.schedulersMetaFile, cliConfig.schedulersFile], schemas);
79
84
  }
80
- const scheduled = await pikkuScheduler(cliConfig, visitState);
81
- if (scheduled) {
82
- addImport(cliConfig.schedulersMetaFile, 'meta', [PikkuEventTypes.scheduled]);
83
- addImport(cliConfig.schedulersFile, 'events', [PikkuEventTypes.scheduled]);
85
+ const queues = await pikkuQueue(logger, cliConfig, visitState);
86
+ if (queues) {
87
+ await pikkuQueueMap(logger, cliConfig, visitState);
88
+ await pikkuQueueService(logger, cliConfig);
89
+ allImports.push(cliConfig.queueWorkersMetaFile, cliConfig.queueWorkersFile);
90
+ await generateBootstrapFile(logger, cliConfig, cliConfig.bootstrapFiles.queue, [cliConfig.queueWorkersMetaFile, cliConfig.queueWorkersFile], schemas);
84
91
  }
85
- const channels = await pikkuChannels(cliConfig, visitState);
92
+ const channels = await pikkuChannels(logger, cliConfig, visitState);
86
93
  if (channels) {
87
- await pikkuChannelsMap(cliConfig, visitState);
88
- await pikkuWebSocket(cliConfig);
89
- addImport(cliConfig.channelsMetaFile, 'meta', [PikkuEventTypes.channel]);
90
- addImport(cliConfig.channelsFile, 'events', [PikkuEventTypes.channel]);
94
+ await pikkuChannelsMap(logger, cliConfig, visitState);
95
+ await pikkuWebSocketTyped(logger, cliConfig);
96
+ allImports.push(cliConfig.channelsMetaFile, cliConfig.channelsFile);
97
+ await generateBootstrapFile(logger, cliConfig, cliConfig.bootstrapFiles.channel, [cliConfig.channelsMetaFile, cliConfig.channelsFile], schemas);
98
+ }
99
+ const mcp = await pikkuMCP(logger, cliConfig, visitState);
100
+ if (mcp) {
101
+ await pikkuMCPJSON(logger, cliConfig, visitState);
102
+ allImports.push(cliConfig.mcpEndpointsMetaFile, cliConfig.mcpEndpointsFile);
103
+ await generateBootstrapFile(logger, cliConfig, cliConfig.bootstrapFiles.mcp, [cliConfig.mcpEndpointsMetaFile, cliConfig.mcpEndpointsFile], schemas);
91
104
  }
92
105
  if (cliConfig.nextBackendFile || cliConfig.nextHTTPFile) {
93
- await pikkuNext(cliConfig, visitState, options);
106
+ await pikkuNext(logger, cliConfig, visitState, options);
94
107
  }
95
108
  if (cliConfig.openAPI) {
96
- logInfo(`• OpenAPI requires a reinspection to pickup new generated types..`);
97
- visitState = await inspectorGlob(cliConfig.rootDir, cliConfig.srcDirectories, cliConfig.filters);
98
- await pikkuOpenAPI(cliConfig, visitState);
99
- }
100
- for (const [type, { meta, events }] of Object.entries(boostrapImports)) {
101
- await writeFileInDir(type === 'all' ? cliConfig.bootstrapFile : cliConfig.bootstrapFiles[type], [...meta, ...events].join('\n'));
109
+ logger.info(`• OpenAPI requires a reinspection to pickup new generated types..`);
110
+ visitState = await inspectorGlob(logger, cliConfig.rootDir, cliConfig.srcDirectories, cliConfig.filters);
111
+ await pikkuOpenAPI(logger, cliConfig, visitState);
102
112
  }
113
+ // Generate main bootstrap file (pass all imports directly since this is the main file)
114
+ await writeFileInDir(logger, cliConfig.bootstrapFile, allImports
115
+ .map((to) => `import '${getFileImportRelativePath(cliConfig.bootstrapFile, to, cliConfig.packageMappings)}'`)
116
+ .sort((to) => (to.includes('meta') ? -1 : 1)) // Ensure meta files are at the top
117
+ .join('\n'));
103
118
  };
104
- const watch = (cliConfig, options) => {
119
+ const watch = (logger, cliConfig, options) => {
105
120
  const configWatcher = chokidar.watch(cliConfig.srcDirectories, {
106
121
  ignoreInitial: true,
107
122
  ignored: /.*\.gen\.tsx?/,
@@ -109,7 +124,7 @@ const watch = (cliConfig, options) => {
109
124
  let watcher = new chokidar.FSWatcher({});
110
125
  const generatorWatcher = () => {
111
126
  watcher.close();
112
- logInfo(`• Watching directories: \n - ${cliConfig.srcDirectories.join('\n - ')}`);
127
+ logger.info(`• Watching directories: \n - ${cliConfig.srcDirectories.join('\n - ')}`);
113
128
  watcher = chokidar.watch(cliConfig.srcDirectories, {
114
129
  ignoreInitial: true,
115
130
  ignored: /.*\.gen\.ts/,
@@ -117,7 +132,7 @@ const watch = (cliConfig, options) => {
117
132
  watcher.on('ready', async () => {
118
133
  const handle = async () => {
119
134
  try {
120
- await runAll(cliConfig, options);
135
+ await runAll(logger, cliConfig, options);
121
136
  }
122
137
  catch (err) {
123
138
  console.error(err);
@@ -141,13 +156,17 @@ const watch = (cliConfig, options) => {
141
156
  configWatcher.on('change', generatorWatcher);
142
157
  };
143
158
  export const action = async (options) => {
144
- logPikkuLogo();
145
- const cliConfig = await getPikkuCLIConfig(options.config, [], options.tags, true);
159
+ const logger = new CLILogger({ logLogo: true });
160
+ const cliConfig = await getPikkuCLIConfig(options.config, [], {
161
+ tags: options.tags,
162
+ types: options.types,
163
+ directories: options.directories,
164
+ }, true);
146
165
  if (options.watch) {
147
- watch(cliConfig, options);
166
+ watch(logger, cliConfig, options);
148
167
  }
149
168
  else {
150
- await runAll(cliConfig, options);
169
+ await runAll(logger, cliConfig, options);
151
170
  }
152
171
  };
153
172
  export const all = (program) => {
@@ -159,6 +178,8 @@ export const all = (program) => {
159
178
  .option('-se | --session-services-factory-type', 'The type of your session services factory')
160
179
  .option('-c | --config <string>', 'The path to pikku cli config file')
161
180
  .option('-t | --tags <tags...>', 'Which tags to filter by')
181
+ .option('--types <types...>', 'Which types to filter by (http, channel, queue, scheduler, rpc, mcp)')
182
+ .option('--directories <directories...>', 'Which directories to filter by')
162
183
  .option('-w | --watch', 'Whether to watch file changes')
163
184
  .action(action);
164
185
  };
@@ -1,6 +1,4 @@
1
1
  import { Command } from 'commander';
2
- import { PikkuCLIConfig } from '../src/pikku-cli-config.js';
3
- import { PikkuCLIOptions } from '../src/utils/utils.js';
4
- export declare const pikkuFetch: ({ fetchFile, httpRoutesMapDeclarationFile, packageMappings, }: PikkuCLIConfig) => Promise<void>;
2
+ import { PikkuCLIOptions } from '../src/utils.js';
5
3
  export declare const action: (options: PikkuCLIOptions) => Promise<void>;
6
4
  export declare const fetch: (program: Command) => void;
@@ -1,20 +1,14 @@
1
1
  import { getPikkuCLIConfig } from '../src/pikku-cli-config.js';
2
- import { serializeFetchWrapper } from '../src/serialize-fetch-wrapper.js';
3
- import { getFileImportRelativePath, logCommandInfoAndTime, logPikkuLogo, writeFileInDir, } from '../src/utils/utils.js';
4
- export const pikkuFetch = async ({ fetchFile, httpRoutesMapDeclarationFile, packageMappings, }) => {
5
- await logCommandInfoAndTime('Generating fetch wrapper', 'Generated fetch wrapper', [fetchFile === undefined, "fetchFile isn't set in the pikku config"], async () => {
6
- if (!fetchFile) {
7
- throw new Error("fetchFile is isn't set in the pikku config");
8
- }
9
- const routesMapDeclarationPath = getFileImportRelativePath(fetchFile, httpRoutesMapDeclarationFile, packageMappings);
10
- const content = [serializeFetchWrapper(routesMapDeclarationPath)];
11
- await writeFileInDir(fetchFile, content.join('\n'));
12
- });
13
- };
2
+ import { pikkuFetch } from '../src/events/fetch/index.js';
3
+ import { CLILogger } from '../src/utils.js';
14
4
  export const action = async (options) => {
15
- logPikkuLogo();
16
- const cliConfig = await getPikkuCLIConfig(options.config, ['rootDir', 'schemaDirectory', 'configDir', 'fetchFile'], options.tags, true);
17
- await pikkuFetch(cliConfig);
5
+ const logger = new CLILogger({ logLogo: true });
6
+ const cliConfig = await getPikkuCLIConfig(options.config, ['rootDir', 'schemaDirectory', 'configDir', 'fetchFile'], {
7
+ tags: options.tags,
8
+ types: options.types,
9
+ directories: options.directories,
10
+ }, true);
11
+ await pikkuFetch(logger, cliConfig);
18
12
  };
19
13
  export const fetch = (program) => {
20
14
  program
@@ -1,7 +1,4 @@
1
1
  import { Command } from 'commander';
2
- import { PikkuCLIOptions } from '../src/utils/utils.js';
3
- import { PikkuCLIConfig } from '../src/pikku-cli-config.js';
4
- import { InspectorState } from '@pikku/inspector';
5
- export declare const pikkuNext: ({ nextBackendFile, nextHTTPFile, httpRoutesMapDeclarationFile, packageMappings, fetchFile, bootstrapFiles, }: PikkuCLIConfig, visitState: InspectorState, options: PikkuCLIOptions) => Promise<boolean>;
2
+ import { PikkuCLIOptions } from '../src/utils.js';
6
3
  export declare const action: (options: PikkuCLIOptions) => Promise<void>;
7
4
  export declare const nextjs: (program: Command) => void;
@@ -1,46 +1,16 @@
1
- import { serializeNextJsBackendWrapper as serializeNextBackendWrapper } from '../src/serialize-nextjs-backend-wrapper.js';
2
- import { serializeNextJsHTTPWrapper as serializeNextHTTPWrapper } from '../src/serialize-nextjs-http-wrapper.js';
3
- import { getFileImportRelativePath, getPikkuFilesAndMethods, logCommandInfoAndTime, logPikkuLogo, writeFileInDir, } from '../src/utils/utils.js';
1
+ import { CLILogger } from '../src/utils.js';
4
2
  import { getPikkuCLIConfig } from '../src/pikku-cli-config.js';
5
3
  import { inspectorGlob } from '../src/inspector-glob.js';
6
- export const pikkuNext = async ({ nextBackendFile, nextHTTPFile, httpRoutesMapDeclarationFile, packageMappings, fetchFile, bootstrapFiles, }, visitState, options) => {
7
- return await logCommandInfoAndTime('Generating nextjs wrapper', 'Generated nextjs wrapper', [
8
- nextBackendFile === undefined && nextHTTPFile === undefined,
9
- 'nextjs outfile is not defined',
10
- ], async () => {
11
- if (!nextBackendFile && !nextHTTPFile) {
12
- throw new Error('nextBackendFile or nextHTTPFile is required in pikku config for nextJS');
13
- }
14
- if (nextHTTPFile && !fetchFile) {
15
- throw new Error('fetchFile is required in pikku config in order for nextJS http wrapper to work');
16
- }
17
- if (nextBackendFile) {
18
- const { pikkuConfigFactory, singletonServicesFactory, sessionServicesFactory, } = await getPikkuFilesAndMethods(visitState, packageMappings, nextBackendFile, options, {
19
- config: true,
20
- singletonServicesFactory: true,
21
- sessionServicesFactory: true,
22
- });
23
- const pikkuConfigImport = `import { ${pikkuConfigFactory.variable} as createConfig } from '${getFileImportRelativePath(nextBackendFile, pikkuConfigFactory.file, packageMappings)}'`;
24
- const singletonServicesImport = `import { ${singletonServicesFactory.variable} as createSingletonServices } from '${getFileImportRelativePath(nextBackendFile, singletonServicesFactory.file, packageMappings)}'`;
25
- const sessionServicesImport = `import { ${sessionServicesFactory.variable} as createSessionServices } from '${getFileImportRelativePath(nextBackendFile, sessionServicesFactory.file, packageMappings)}'`;
26
- const httpBootstrapPath = getFileImportRelativePath(nextBackendFile, bootstrapFiles.http, packageMappings);
27
- const routesMapDeclarationPath = getFileImportRelativePath(nextBackendFile, httpRoutesMapDeclarationFile, packageMappings);
28
- const content = serializeNextBackendWrapper(httpBootstrapPath, routesMapDeclarationPath, pikkuConfigImport, singletonServicesImport, sessionServicesImport);
29
- await writeFileInDir(nextBackendFile, content);
30
- }
31
- if (nextHTTPFile && fetchFile) {
32
- const routesMapDeclarationPath = getFileImportRelativePath(nextHTTPFile, httpRoutesMapDeclarationFile, packageMappings);
33
- const fetchPath = getFileImportRelativePath(nextHTTPFile, fetchFile, packageMappings);
34
- const content = serializeNextHTTPWrapper(routesMapDeclarationPath, fetchPath);
35
- await writeFileInDir(nextHTTPFile, content);
36
- }
37
- });
38
- };
4
+ import { pikkuNext } from '../src/runtimes/nextjs/pikku-command-nextjs.js';
39
5
  export const action = async (options) => {
40
- logPikkuLogo();
41
- const cliConfig = await getPikkuCLIConfig(options.config, ['rootDir', 'schemaDirectory', 'configDir'], options.tags, true);
42
- const visitState = await inspectorGlob(cliConfig.rootDir, cliConfig.srcDirectories, cliConfig.filters);
43
- await pikkuNext(cliConfig, visitState, options);
6
+ const logger = new CLILogger({ logLogo: true });
7
+ const cliConfig = await getPikkuCLIConfig(options.config, ['rootDir', 'schemaDirectory', 'configDir'], {
8
+ tags: options.tags,
9
+ types: options.types,
10
+ directories: options.directories,
11
+ }, true);
12
+ const visitState = await inspectorGlob(logger, cliConfig.rootDir, cliConfig.srcDirectories, cliConfig.filters);
13
+ await pikkuNext(logger, cliConfig, visitState, options);
44
14
  };
45
15
  export const nextjs = (program) => {
46
16
  program
@@ -1,5 +1,2 @@
1
1
  import { Command } from 'commander';
2
- import { PikkuCLIConfig } from '../src/pikku-cli-config.js';
3
- import { InspectorState } from '@pikku/inspector';
4
- export declare const pikkuOpenAPI: ({ tsconfig, openAPI }: PikkuCLIConfig, { http, functions }: InspectorState) => Promise<void>;
5
2
  export declare const openapi: (program: Command) => void;
@@ -1,30 +1,14 @@
1
- import { logCommandInfoAndTime, logPikkuLogo, writeFileInDir, } from '../src/utils/utils.js';
2
- import { generateSchemas } from '../src/schema-generator.js';
3
- import { generateOpenAPISpec } from '../src/openapi-spec-generator.js';
1
+ import { CLILogger } from '../src/utils.js';
4
2
  import { getPikkuCLIConfig } from '../src/pikku-cli-config.js';
5
- import { stringify } from 'yaml';
6
3
  import { inspectorGlob } from '../src/inspector-glob.js';
7
- export const pikkuOpenAPI = async ({ tsconfig, openAPI }, { http, functions }) => {
8
- await logCommandInfoAndTime('Creating OpenAPI spec', 'Created OpenAPI spec', [openAPI?.outputFile === undefined, 'openAPI outfile is not defined'], async () => {
9
- if (!openAPI?.outputFile) {
10
- throw new Error('openAPI is required');
11
- }
12
- const schemas = await generateSchemas(tsconfig, functions.typesMap, functions.meta, http.meta);
13
- const openAPISpec = await generateOpenAPISpec(functions.meta, http.meta, schemas, openAPI.additionalInfo);
14
- if (openAPI.outputFile.endsWith('.json')) {
15
- await writeFileInDir(openAPI.outputFile, JSON.stringify(openAPISpec, null, 2), true);
16
- }
17
- else if (openAPI.outputFile.endsWith('.yaml') ||
18
- openAPI.outputFile.endsWith('.yml')) {
19
- await writeFileInDir(openAPI.outputFile, stringify(openAPISpec), true);
20
- }
21
- });
22
- };
4
+ import { pikkuOpenAPI } from '../src/events/http/pikku-command-openapi.js';
23
5
  async function action({ config, tags }) {
24
- logPikkuLogo();
25
- const cliConfig = await getPikkuCLIConfig(config, ['rootDir', 'httpRoutesFile', 'openAPI', 'schemaDirectory', 'tsconfig'], tags);
26
- const visitState = await inspectorGlob(cliConfig.rootDir, cliConfig.srcDirectories, cliConfig.filters);
27
- await pikkuOpenAPI(cliConfig, visitState);
6
+ const logger = new CLILogger({ logLogo: true });
7
+ const cliConfig = await getPikkuCLIConfig(config, ['rootDir', 'httpRoutesFile', 'openAPI', 'schemaDirectory', 'tsconfig'], {
8
+ tags: tags || [],
9
+ });
10
+ const visitState = await inspectorGlob(logger, cliConfig.rootDir, cliConfig.srcDirectories, cliConfig.filters);
11
+ await pikkuOpenAPI(logger, cliConfig, visitState);
28
12
  }
29
13
  export const openapi = (program) => {
30
14
  program
@@ -0,0 +1,4 @@
1
+ import { Command } from 'commander';
2
+ import { PikkuCLIOptions } from '../src/utils.js';
3
+ export declare const action: (options: PikkuCLIOptions) => Promise<void>;
4
+ export declare const queue: (program: Command) => void;
@@ -0,0 +1,19 @@
1
+ import { getPikkuCLIConfig } from '../src/pikku-cli-config.js';
2
+ import { CLILogger } from '../src/utils.js';
3
+ import { pikkuQueueService } from '../src/events/queue/pikku-command-queue-service.js';
4
+ export const action = async (options) => {
5
+ const logger = new CLILogger({ logLogo: true });
6
+ const cliConfig = await getPikkuCLIConfig(options.config, ['rootDir', 'schemaDirectory', 'configDir', 'queueFile'], {
7
+ tags: options.tags,
8
+ types: options.types,
9
+ directories: options.directories,
10
+ }, true);
11
+ await pikkuQueueService(logger, cliConfig);
12
+ };
13
+ export const queue = (program) => {
14
+ program
15
+ .command('queue')
16
+ .description('generate queue service wrapper')
17
+ .option('-c | --config <string>', 'The path to pikku cli config file')
18
+ .action(action);
19
+ };
@@ -1,5 +1,2 @@
1
1
  import { Command } from 'commander';
2
- import { PikkuCLIConfig } from '../src/pikku-cli-config.js';
3
- import { InspectorState } from '@pikku/inspector';
4
- export declare const pikkuSchemas: ({ tsconfig, schemaDirectory, supportsImportAttributes }: PikkuCLIConfig, { functions, http }: InspectorState) => Promise<boolean>;
5
2
  export declare const schemas: (program: Command) => void;
@@ -1,22 +1,16 @@
1
- import { saveSchemas, generateSchemas } from '../src/schema-generator.js';
2
1
  import { getPikkuCLIConfig } from '../src/pikku-cli-config.js';
3
- import { logCommandInfoAndTime, logPikkuLogo } from '../src/utils/utils.js';
4
2
  import { inspectorGlob } from '../src/inspector-glob.js';
5
- export const pikkuSchemas = async ({ tsconfig, schemaDirectory, supportsImportAttributes }, { functions, http }) => {
6
- return await logCommandInfoAndTime('Creating schemas', 'Created schemas', [false], async () => {
7
- const schemas = await generateSchemas(tsconfig, functions.typesMap, functions.meta, http.meta);
8
- await saveSchemas(schemaDirectory, schemas, functions.typesMap, functions.meta, supportsImportAttributes);
9
- });
10
- };
3
+ import { pikkuSchemas } from '../src/schemas.js';
4
+ import { CLILogger } from '../src/utils.js';
11
5
  async function action({ config }) {
12
- logPikkuLogo();
6
+ const logger = new CLILogger({ logLogo: true });
13
7
  const cliConfig = await getPikkuCLIConfig(config, [
14
8
  'srcDirectories',
15
9
  'schemaDirectory',
16
10
  'tsconfig',
17
11
  ]);
18
- const visitState = await inspectorGlob(cliConfig.rootDir, cliConfig.srcDirectories, cliConfig.filters);
19
- await pikkuSchemas(cliConfig, visitState);
12
+ const visitState = await inspectorGlob(logger, cliConfig.rootDir, cliConfig.srcDirectories, cliConfig.filters);
13
+ await pikkuSchemas(logger, cliConfig, visitState);
20
14
  }
21
15
  export const schemas = (program) => {
22
16
  program
@@ -1,6 +1,4 @@
1
1
  import { Command } from 'commander';
2
- import { PikkuCLIOptions } from '../src/utils/utils.js';
3
- import { PikkuCLIConfig } from '../src/pikku-cli-config.js';
4
- export declare const pikkuWebSocket: ({ websocketFile, channelsMapDeclarationFile, packageMappings, }: PikkuCLIConfig) => Promise<void>;
2
+ import { PikkuCLIOptions } from '../src/utils.js';
5
3
  export declare const action: (options: PikkuCLIOptions) => Promise<void>;
6
4
  export declare const websocket: (program: Command) => void;
@@ -1,23 +1,14 @@
1
- import { getFileImportRelativePath, logCommandInfoAndTime, logPikkuLogo, writeFileInDir, } from '../src/utils/utils.js';
1
+ import { CLILogger } from '../src/utils.js';
2
2
  import { getPikkuCLIConfig } from '../src/pikku-cli-config.js';
3
- import { serializeWebsocketWrapper } from '../src/serialize-websocket-wrapper.js';
4
- export const pikkuWebSocket = async ({ websocketFile, channelsMapDeclarationFile, packageMappings, }) => {
5
- await logCommandInfoAndTime('Generating websocket wrapper', 'Generated websocket wrapper', [
6
- websocketFile === undefined,
7
- "websocketFile isn't set in the pikku config",
8
- ], async () => {
9
- if (!websocketFile) {
10
- throw new Error("fetchFile is isn't set in the pikku config");
11
- }
12
- const channelsMapDeclarationPath = getFileImportRelativePath(websocketFile, channelsMapDeclarationFile, packageMappings);
13
- const content = [serializeWebsocketWrapper(channelsMapDeclarationPath)];
14
- await writeFileInDir(websocketFile, content.join('\n'));
15
- });
16
- };
3
+ import { pikkuWebSocketTyped } from '../src/events/channels/pikku-command-websocket-typed.js';
17
4
  export const action = async (options) => {
18
- logPikkuLogo();
19
- const cliConfig = await getPikkuCLIConfig(options.config, ['rootDir', 'schemaDirectory', 'configDir', 'fetchFile'], options.tags, true);
20
- await pikkuWebSocket(cliConfig);
5
+ const logger = new CLILogger({ logLogo: true });
6
+ const cliConfig = await getPikkuCLIConfig(options.config, ['rootDir', 'schemaDirectory', 'configDir', 'fetchFile'], {
7
+ tags: options.tags,
8
+ types: options.types,
9
+ directories: options.directories,
10
+ }, true);
11
+ await pikkuWebSocketTyped(logger, cliConfig);
21
12
  };
22
13
  export const websocket = (program) => {
23
14
  program
package/dist/bin/pikku.js CHANGED
@@ -4,10 +4,12 @@ import { schemas } from './pikku-schemas.js';
4
4
  import { nextjs } from './pikku-nextjs.js';
5
5
  import { all } from './pikku-all.js';
6
6
  import { fetch } from './pikku-fetch.js';
7
+ import { queue } from './pikku-queue-service.js';
7
8
  const program = new Command('pikku');
8
9
  program.usage('[command]');
9
10
  all(program);
10
11
  schemas(program);
11
12
  nextjs(program);
12
13
  fetch(program);
14
+ queue(program);
13
15
  program.parse(process.argv);
@@ -0,0 +1,2 @@
1
+ import { PikkuCommand } from '../../types.js';
2
+ export declare const pikkuChannels: PikkuCommand;
@@ -0,0 +1,9 @@
1
+ import { logCommandInfoAndTime, serializeFileImports, writeFileInDir, } from '../../utils.js';
2
+ export const pikkuChannels = async (logger, cliConfig, visitState) => {
3
+ return await logCommandInfoAndTime(logger, 'Finding Channels', 'Found channels', [visitState.channels.files.size === 0], async () => {
4
+ const { channelsFile, channelsMetaFile, packageMappings } = cliConfig;
5
+ const { channels } = visitState;
6
+ await writeFileInDir(logger, channelsFile, serializeFileImports('addChannel', channelsFile, channels.files, packageMappings));
7
+ await writeFileInDir(logger, channelsMetaFile, `import { pikkuState } from '@pikku/core'\npikkuState('channel', 'meta', ${JSON.stringify(channels.meta, null, 2)})`);
8
+ });
9
+ };
@@ -0,0 +1,2 @@
1
+ import { PikkuCommand } from '../../types.js';
2
+ export declare const pikkuChannelsMap: PikkuCommand;
@@ -0,0 +1,8 @@
1
+ import { logCommandInfoAndTime, writeFileInDir } from '../../utils.js';
2
+ import { serializeTypedChannelsMap } from './serialize-typed-channel-map.js';
3
+ export const pikkuChannelsMap = async (logger, { channelsMapDeclarationFile, packageMappings }, state) => {
4
+ return await logCommandInfoAndTime(logger, 'Creating channels map', 'Created channels map', [state.channels.files.size === 0], async () => {
5
+ const content = serializeTypedChannelsMap(channelsMapDeclarationFile, packageMappings, state.functions.typesMap, state.functions.meta, state.channels.meta);
6
+ await writeFileInDir(logger, channelsMapDeclarationFile, content);
7
+ });
8
+ };
@@ -0,0 +1,2 @@
1
+ import { PikkuCommand } from '../../types.js';
2
+ export declare const pikkuChannels: PikkuCommand;
@@ -0,0 +1,9 @@
1
+ import { logCommandInfoAndTime, serializeFileImports, writeFileInDir, } from '../../utils.js';
2
+ export const pikkuChannels = async (logger, cliConfig, visitState) => {
3
+ return await logCommandInfoAndTime(logger, 'Finding Channels', 'Found channels', [visitState.channels.files.size === 0], async () => {
4
+ const { channelsFile, channelsMetaFile, packageMappings } = cliConfig;
5
+ const { channels } = visitState;
6
+ await writeFileInDir(logger, channelsFile, serializeFileImports('addChannel', channelsFile, channels.files, packageMappings));
7
+ await writeFileInDir(logger, channelsMetaFile, `import { pikkuState } from '@pikku/core'\npikkuState('channel', 'meta', ${JSON.stringify(channels.meta, null, 2)})`);
8
+ });
9
+ };
@@ -0,0 +1,2 @@
1
+ import { PikkuCommandWithoutState } from '../../types.js';
2
+ export declare const pikkuWebSocketTyped: PikkuCommandWithoutState;
@@ -0,0 +1,15 @@
1
+ import { logCommandInfoAndTime, getFileImportRelativePath, writeFileInDir, } from '../../utils.js';
2
+ import { serializeWebsocketWrapper } from './serialize-websocket-wrapper.js';
3
+ export const pikkuWebSocketTyped = async (logger, { websocketFile, channelsMapDeclarationFile, packageMappings }) => {
4
+ return await logCommandInfoAndTime(logger, 'Generating websocket wrapper', 'Generated websocket wrapper', [
5
+ websocketFile === undefined,
6
+ "websocketFile isn't set in the pikku config",
7
+ ], async () => {
8
+ if (!websocketFile) {
9
+ throw new Error("fetchFile is isn't set in the pikku config");
10
+ }
11
+ const channelsMapDeclarationPath = getFileImportRelativePath(websocketFile, channelsMapDeclarationFile, packageMappings);
12
+ const content = [serializeWebsocketWrapper(channelsMapDeclarationPath)];
13
+ await writeFileInDir(logger, websocketFile, content.join('\n'));
14
+ });
15
+ };
@@ -1,5 +1,5 @@
1
- import { serializeImportMap } from './utils/serialize-import-map.js';
2
- import { generateCustomTypes } from './utils/utils.js';
1
+ import { serializeImportMap } from '../../serialize-import-map.js';
2
+ import { generateCustomTypes } from '../../utils.js';
3
3
  export const serializeTypedChannelsMap = (relativeToPath, packageMappings, typesMap, functionsMeta, channelsMeta) => {
4
4
  const { channels, requiredTypes } = generateChannels(functionsMeta, channelsMeta);
5
5
  typesMap.customTypes.forEach(({ references }) => {
@@ -0,0 +1,2 @@
1
+ import { PikkuCommandWithoutState } from '../../types.js';
2
+ export declare const pikkuFetch: PikkuCommandWithoutState;