@pikku/cli 0.6.20 → 0.7.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 (111) hide show
  1. package/CHANGELOG.md +4 -0
  2. package/cli.schema.json +2 -2
  3. package/dist/bin/pikku-all.js +34 -16
  4. package/dist/bin/pikku-channels-map.js +4 -4
  5. package/dist/bin/pikku-channels.js +6 -10
  6. package/dist/bin/pikku-fetch.d.ts +1 -1
  7. package/dist/bin/pikku-fetch.js +3 -3
  8. package/dist/bin/pikku-function-types.js +4 -4
  9. package/dist/bin/pikku-functions.d.ts +5 -0
  10. package/dist/bin/pikku-functions.js +24 -0
  11. package/dist/bin/pikku-http-map.d.ts +5 -0
  12. package/dist/bin/pikku-http-map.js +23 -0
  13. package/dist/bin/pikku-http-routes.d.ts +5 -0
  14. package/dist/bin/pikku-http-routes.js +24 -0
  15. package/dist/bin/pikku-http.js +3 -5
  16. package/dist/bin/pikku-nextjs.d.ts +1 -1
  17. package/dist/bin/pikku-nextjs.js +8 -8
  18. package/dist/bin/pikku-openapi.d.ts +1 -1
  19. package/dist/bin/pikku-openapi.js +6 -6
  20. package/dist/bin/pikku-routes-map.d.ts +1 -1
  21. package/dist/bin/pikku-routes-map.js +3 -3
  22. package/dist/bin/pikku-scheduler.js +7 -10
  23. package/dist/bin/pikku-schemas.d.ts +1 -1
  24. package/dist/bin/pikku-schemas.js +6 -6
  25. package/dist/bin/pikku-websocket.js +1 -1
  26. package/dist/bin/pikku.js +2 -2
  27. package/dist/src/channels/serialize-typed-channel-map.js +5 -2
  28. package/dist/src/core/serialize-import-map.js +1 -0
  29. package/dist/src/core/serialize-pikku-types.js +90 -6
  30. package/dist/src/events/channels/serialize-channels.d.ts +3 -0
  31. package/dist/src/events/channels/serialize-channels.js +19 -0
  32. package/dist/src/events/channels/serialize-typed-channel-map.d.ts +3 -0
  33. package/dist/src/events/channels/serialize-typed-channel-map.js +90 -0
  34. package/dist/src/events/channels/serialize-websocket-wrapper.d.ts +1 -0
  35. package/{src/channels/serialize-websocket-wrapper.ts → dist/src/events/channels/serialize-websocket-wrapper.js} +4 -4
  36. package/dist/src/events/http/serialize-fetch-wrapper.d.ts +1 -0
  37. package/{src/http/serialize-fetch-wrapper.ts → dist/src/events/http/serialize-fetch-wrapper.js} +4 -4
  38. package/dist/src/events/http/serialize-route-imports.d.ts +1 -0
  39. package/dist/src/events/http/serialize-route-imports.js +13 -0
  40. package/dist/src/events/http/serialize-route-meta.d.ts +2 -0
  41. package/dist/src/events/http/serialize-route-meta.js +6 -0
  42. package/dist/src/events/http/serialize-typed-route-map.d.ts +4 -0
  43. package/dist/src/events/http/serialize-typed-route-map.js +107 -0
  44. package/dist/src/events/scheduler/serialize-schedulers.d.ts +3 -0
  45. package/dist/src/events/scheduler/serialize-schedulers.js +23 -0
  46. package/dist/src/http/serialize-typed-route-map.js +1 -1
  47. package/dist/src/inspector-glob.d.ts +1 -1
  48. package/dist/src/inspector-glob.js +2 -2
  49. package/dist/src/openapi-spec-generator.d.ts +79 -0
  50. package/dist/src/openapi-spec-generator.js +136 -0
  51. package/dist/src/pikku-cli-config.d.ts +9 -4
  52. package/dist/src/pikku-cli-config.js +19 -4
  53. package/dist/src/scheduler/serialize-schedulers.js +3 -2
  54. package/dist/src/schema/schema-generator.d.ts +1 -1
  55. package/dist/src/schema/schema-generator.js +20 -7
  56. package/dist/src/schema-generator.d.ts +5 -0
  57. package/dist/src/schema-generator.js +98 -0
  58. package/dist/src/serialize-fetch-wrapper.d.ts +1 -0
  59. package/dist/src/serialize-fetch-wrapper.js +67 -0
  60. package/dist/src/serialize-import-map.d.ts +2 -0
  61. package/dist/src/serialize-import-map.js +24 -0
  62. package/dist/src/serialize-nextjs-backend-wrapper.d.ts +1 -0
  63. package/{src/nextjs/serialize-nextjs-backend-wrapper.ts → dist/src/serialize-nextjs-backend-wrapper.js} +4 -11
  64. package/dist/src/serialize-nextjs-http-wrapper.d.ts +1 -0
  65. package/{src/nextjs/serialize-nextjs-http-wrapper.ts → dist/src/serialize-nextjs-http-wrapper.js} +4 -7
  66. package/dist/src/serialize-pikku-types.d.ts +4 -0
  67. package/dist/src/serialize-pikku-types.js +136 -0
  68. package/dist/src/serialize-scheduler-meta.d.ts +2 -0
  69. package/dist/src/serialize-scheduler-meta.js +10 -0
  70. package/dist/src/serialize-typed-channel-map.d.ts +3 -0
  71. package/dist/src/serialize-typed-channel-map.js +93 -0
  72. package/dist/src/serialize-typed-function-map.d.ts +4 -0
  73. package/dist/src/serialize-typed-function-map.js +107 -0
  74. package/dist/src/serialize-typed-http-map.d.ts +4 -0
  75. package/dist/src/serialize-typed-http-map.js +107 -0
  76. package/dist/src/serialize-typed-route-map.d.ts +4 -0
  77. package/dist/src/serialize-typed-route-map.js +107 -0
  78. package/dist/src/serialize-websocket-wrapper.d.ts +1 -0
  79. package/dist/src/serialize-websocket-wrapper.js +61 -0
  80. package/dist/src/utils.d.ts +1 -0
  81. package/dist/src/utils.js +17 -5
  82. package/package.json +3 -3
  83. package/bin/pikku-all.ts +0 -180
  84. package/bin/pikku-channels-map.ts +0 -55
  85. package/bin/pikku-channels.ts +0 -58
  86. package/bin/pikku-fetch.ts +0 -55
  87. package/bin/pikku-function-types.ts +0 -84
  88. package/bin/pikku-http.ts +0 -56
  89. package/bin/pikku-nextjs.test.ts +0 -279
  90. package/bin/pikku-nextjs.ts +0 -152
  91. package/bin/pikku-openapi.ts +0 -70
  92. package/bin/pikku-routes-map.ts +0 -55
  93. package/bin/pikku-scheduler.ts +0 -62
  94. package/bin/pikku-schemas.ts +0 -52
  95. package/bin/pikku-websocket.ts +0 -58
  96. package/bin/pikku.ts +0 -26
  97. package/dist/tsconfig.tsbuildinfo +0 -1
  98. package/src/channels/serialize-channels.ts +0 -34
  99. package/src/channels/serialize-typed-channel-map.ts +0 -136
  100. package/src/core/serialize-import-map.ts +0 -33
  101. package/src/core/serialize-pikku-types.ts +0 -55
  102. package/src/http/serialize-route-imports.ts +0 -24
  103. package/src/http/serialize-route-meta.ts +0 -10
  104. package/src/http/serialize-typed-route-map.ts +0 -150
  105. package/src/inspector-glob.ts +0 -28
  106. package/src/openapi/openapi-spec-generator.ts +0 -227
  107. package/src/pikku-cli-config.ts +0 -204
  108. package/src/scheduler/serialize-schedulers.ts +0 -41
  109. package/src/schema/schema-generator.ts +0 -114
  110. package/src/utils.ts +0 -260
  111. package/tsconfig.json +0 -21
package/CHANGELOG.md CHANGED
@@ -1,5 +1,9 @@
1
1
  # @pikku/cli
2
2
 
3
+ ## 0.7.0
4
+
5
+ - Now function first. No breaking changes for end user here, just internals
6
+
3
7
  ## 0.6.20
4
8
 
5
9
  ### Patch Changes
package/cli.schema.json CHANGED
@@ -169,7 +169,7 @@
169
169
  "rootDir": {
170
170
  "type": "string"
171
171
  },
172
- "routeDirectories": {
172
+ "srcDirectories": {
173
173
  "items": {
174
174
  "type": "string"
175
175
  },
@@ -207,7 +207,7 @@
207
207
  "configDir",
208
208
  "packageMappings",
209
209
  "rootDir",
210
- "routeDirectories",
210
+ "srcDirectories",
211
211
  "routesFile",
212
212
  "routesMapDeclarationFile",
213
213
  "schedulersFile",
@@ -1,8 +1,8 @@
1
1
  import { getFileImportRelativePath, logInfo, logPikkuLogo, writeFileInDir, } from '../src/utils.js';
2
2
  import { getPikkuCLIConfig } from '../src/pikku-cli-config.js';
3
- import { pikkuHTTP } from './pikku-http.js';
3
+ import { pikkuHTTP } from './pikku-http-routes.js';
4
4
  import { pikkuFunctionTypes } from './pikku-function-types.js';
5
- import { pikkuHTTPMap } from './pikku-routes-map.js';
5
+ import { pikkuHTTPMap } from './pikku-http-map.js';
6
6
  import { existsSync } from 'fs';
7
7
  import { pikkuFetch } from './pikku-fetch.js';
8
8
  import { pikkuChannelsMap } from './pikku-channels-map.js';
@@ -14,62 +14,80 @@ import { pikkuSchemas } from './pikku-schemas.js';
14
14
  import { pikkuWebSocket } from './pikku-websocket.js';
15
15
  import { inspectorGlob } from '../src/inspector-glob.js';
16
16
  import chokidar from 'chokidar';
17
+ import { pikkuFunctions } from './pikku-functions.js';
17
18
  const runAll = async (cliConfig, options) => {
19
+ const metaImports = [];
18
20
  const imports = [];
19
- const addImport = (from) => {
20
- imports.push(`import '${getFileImportRelativePath(cliConfig.bootstrapFile, from, cliConfig.packageMappings)}'`);
21
+ const addImport = (from, type) => {
22
+ const statement = `import '${getFileImportRelativePath(cliConfig.bootstrapFile, from, cliConfig.packageMappings)}'`;
23
+ if (type === 'meta') {
24
+ metaImports.push(statement);
25
+ }
26
+ else {
27
+ imports.push(statement);
28
+ }
21
29
  };
22
30
  let typesDeclarationFileExists = true;
23
- let visitState = await inspectorGlob(cliConfig.rootDir, cliConfig.routeDirectories, cliConfig.filters);
31
+ let visitState = await inspectorGlob(cliConfig.rootDir, cliConfig.srcDirectories, cliConfig.filters);
24
32
  if (!existsSync(cliConfig.typesDeclarationFile)) {
25
33
  typesDeclarationFileExists = false;
26
34
  }
27
35
  await pikkuFunctionTypes(cliConfig, options, visitState);
28
- // This is needed since the addRoutes function will add the routes to the visitState
36
+ // This is needed since the addHTTPRoute function will add the routes to the visitState
29
37
  if (!typesDeclarationFileExists) {
30
38
  logInfo(`• Type file first created, inspecting again...\x1b[0m`);
31
- visitState = await inspectorGlob(cliConfig.rootDir, cliConfig.routeDirectories, cliConfig.filters);
39
+ visitState = await inspectorGlob(cliConfig.rootDir, cliConfig.srcDirectories, cliConfig.filters);
32
40
  }
41
+ const functions = pikkuFunctions(cliConfig, visitState);
42
+ if (!functions) {
43
+ logInfo(`• No functions found, skipping remaining steps...\x1b[0m`);
44
+ process.exit(1);
45
+ }
46
+ addImport(cliConfig.functionsMetaFile, 'meta');
47
+ addImport(cliConfig.functionsFile, 'events');
33
48
  const routes = await pikkuHTTP(cliConfig, visitState);
34
49
  if (routes) {
35
50
  await pikkuHTTPMap(cliConfig, visitState);
36
51
  await pikkuFetch(cliConfig);
37
- addImport(cliConfig.routesFile);
52
+ addImport(cliConfig.httpRoutesMetaFile, 'meta');
53
+ addImport(cliConfig.httpRoutesFile, 'events');
38
54
  }
39
55
  const scheduled = await pikkuScheduler(cliConfig, visitState);
40
56
  if (scheduled) {
41
- addImport(cliConfig.schedulersFile);
57
+ addImport(cliConfig.schedulersMetaFile, 'meta');
58
+ addImport(cliConfig.schedulersFile, 'events');
42
59
  }
43
60
  const channels = await pikkuChannels(cliConfig, visitState);
44
61
  if (channels) {
45
62
  await pikkuChannelsMap(cliConfig, visitState);
46
63
  await pikkuWebSocket(cliConfig);
47
- addImport(cliConfig.channelsFile);
64
+ addImport(cliConfig.channelsMetaFile, 'meta');
65
+ addImport(cliConfig.channelsFile, 'events');
48
66
  }
49
67
  const schemas = await pikkuSchemas(cliConfig, visitState);
50
68
  if (schemas) {
51
- addImport(`${cliConfig.schemaDirectory}/register.gen.ts`);
69
+ addImport(`${cliConfig.schemaDirectory}/register.gen.ts`, 'other');
52
70
  }
53
71
  if (cliConfig.nextBackendFile || cliConfig.nextHTTPFile) {
54
72
  await pikkuNext(cliConfig, visitState, options);
55
73
  }
56
74
  if (cliConfig.openAPI) {
57
75
  logInfo(`• OpenAPI requires a reinspection to pickup new generated types..`);
58
- visitState = await inspectorGlob(cliConfig.rootDir, cliConfig.routeDirectories, cliConfig.filters);
76
+ visitState = await inspectorGlob(cliConfig.rootDir, cliConfig.srcDirectories, cliConfig.filters);
59
77
  await pikkuOpenAPI(cliConfig, visitState);
60
78
  }
61
- await writeFileInDir(cliConfig.bootstrapFile, imports.join('\n'));
79
+ await writeFileInDir(cliConfig.bootstrapFile, [...metaImports, ...imports].join('\n'));
62
80
  };
63
81
  const watch = (cliConfig, options) => {
64
- const configWatcher = chokidar.watch(cliConfig.routeDirectories, {
82
+ const configWatcher = chokidar.watch(cliConfig.srcDirectories, {
65
83
  ignoreInitial: true,
66
84
  ignored: /.*\.gen\.tsx?/,
67
85
  });
68
86
  let watcher = new chokidar.FSWatcher({});
69
87
  const generatorWatcher = () => {
70
88
  watcher.close();
71
- logInfo(`• Watching directories: \n - ${cliConfig.routeDirectories.join('\n - ')}`);
72
- watcher = chokidar.watch(cliConfig.routeDirectories, {
89
+ logInfo(`• Watching directories: \n - ${cliConfig.srcDirectories.join('\n - ')}`);
90
+ watcher = chokidar.watch(cliConfig.srcDirectories, {
73
91
  ignoreInitial: true,
74
92
  ignored: /.*\.gen\.ts/,
75
93
  });
@@ -1,17 +1,17 @@
1
1
  import { getPikkuCLIConfig } from '../src/pikku-cli-config.js';
2
2
  import { logCommandInfoAndTime, logPikkuLogo, writeFileInDir, } from '../src/utils.js';
3
- import { serializeTypedChannelsMap } from '../src/channels/serialize-typed-channel-map.js';
3
+ import { serializeTypedChannelsMap } from '../src/serialize-typed-channel-map.js';
4
4
  import { inspectorGlob } from '../src/inspector-glob.js';
5
5
  export const pikkuChannelsMap = async ({ channelsMapDeclarationFile, packageMappings }, state) => {
6
6
  return await logCommandInfoAndTime('Creating channels map', 'Created channels map', [state.channels.files.size === 0], async () => {
7
- const content = serializeTypedChannelsMap(channelsMapDeclarationFile, packageMappings, state.channels.typesMap, state.channels.meta);
7
+ const content = serializeTypedChannelsMap(channelsMapDeclarationFile, packageMappings, state.functions.typesMap, state.channels.meta);
8
8
  await writeFileInDir(channelsMapDeclarationFile, content);
9
9
  });
10
10
  };
11
11
  async function action(cliOptions) {
12
12
  logPikkuLogo();
13
- const cliConfig = await getPikkuCLIConfig(cliOptions.config, ['rootDir', 'routeDirectories', 'routesFile'], cliOptions.tags, false);
14
- const visitState = await inspectorGlob(cliConfig.rootDir, cliConfig.routeDirectories, cliConfig.filters);
13
+ const cliConfig = await getPikkuCLIConfig(cliOptions.config, ['rootDir', 'srcDirectories', 'httpRoutesFile'], cliOptions.tags, false);
14
+ const visitState = await inspectorGlob(cliConfig.rootDir, cliConfig.srcDirectories, cliConfig.filters);
15
15
  await pikkuChannelsMap(cliConfig, visitState);
16
16
  }
17
17
  export const channelsMap = (program) => {
@@ -1,22 +1,18 @@
1
1
  import { getPikkuCLIConfig } from '../src/pikku-cli-config.js';
2
- import { logCommandInfoAndTime, logPikkuLogo, writeFileInDir, } from '../src/utils.js';
3
- import { serializeChannels, serializeChannelMeta, } from '../src/channels/serialize-channels.js';
2
+ import { logCommandInfoAndTime, logPikkuLogo, serializeFileImports, writeFileInDir, } from '../src/utils.js';
4
3
  import { inspectorGlob } from '../src/inspector-glob.js';
5
4
  export const pikkuChannels = async (cliConfig, visitState) => {
6
5
  return await logCommandInfoAndTime('Finding Channels', 'Found channels', [visitState.channels.files.size === 0], async () => {
7
- const { channelsFile, packageMappings } = cliConfig;
6
+ const { channelsFile, channelsMetaFile, packageMappings } = cliConfig;
8
7
  const { channels } = visitState;
9
- const content = [
10
- serializeChannels(channelsFile, channels.files, packageMappings),
11
- serializeChannelMeta(channels.meta),
12
- ];
13
- await writeFileInDir(channelsFile, content.join('\n\n'));
8
+ await writeFileInDir(channelsFile, serializeFileImports('addChannel', channelsFile, channels.files, packageMappings));
9
+ await writeFileInDir(channelsMetaFile, `import { pikkuState } from '@pikku/core'\npikkuState('channel', 'meta', ${JSON.stringify(channels.meta, null, 2)})`);
14
10
  });
15
11
  };
16
12
  async function action(cliOptions) {
17
13
  logPikkuLogo();
18
- const cliConfig = await getPikkuCLIConfig(cliOptions.config, ['rootDir', 'routeDirectories', 'routesFile'], cliOptions.tags);
19
- const visitState = await inspectorGlob(cliConfig.rootDir, cliConfig.routeDirectories, cliConfig.filters);
14
+ const cliConfig = await getPikkuCLIConfig(cliOptions.config, ['rootDir', 'srcDirectories', 'httpRoutesFile'], cliOptions.tags);
15
+ const visitState = await inspectorGlob(cliConfig.rootDir, cliConfig.srcDirectories, cliConfig.filters);
20
16
  await pikkuChannels(cliConfig, visitState);
21
17
  }
22
18
  export const channels = (program) => {
@@ -1,6 +1,6 @@
1
1
  import { Command } from 'commander';
2
2
  import { PikkuCLIOptions } from '../src/utils.js';
3
3
  import { PikkuCLIConfig } from '../src/pikku-cli-config.js';
4
- export declare const pikkuFetch: ({ fetchFile, routesMapDeclarationFile, packageMappings, }: PikkuCLIConfig) => Promise<void>;
4
+ export declare const pikkuFetch: ({ fetchFile, httpRoutesMapDeclarationFile, packageMappings, }: PikkuCLIConfig) => Promise<void>;
5
5
  export declare const action: (options: PikkuCLIOptions) => Promise<void>;
6
6
  export declare const fetch: (program: Command) => void;
@@ -1,12 +1,12 @@
1
1
  import { getFileImportRelativePath, logCommandInfoAndTime, logPikkuLogo, writeFileInDir, } from '../src/utils.js';
2
2
  import { getPikkuCLIConfig } from '../src/pikku-cli-config.js';
3
- import { serializeFetchWrapper } from '../src/http/serialize-fetch-wrapper.js';
4
- export const pikkuFetch = async ({ fetchFile, routesMapDeclarationFile, packageMappings, }) => {
3
+ import { serializeFetchWrapper } from '../src/serialize-fetch-wrapper.js';
4
+ export const pikkuFetch = async ({ fetchFile, httpRoutesMapDeclarationFile, packageMappings, }) => {
5
5
  await logCommandInfoAndTime('Generating fetch wrapper', 'Generated fetch wrapper', [fetchFile === undefined, "fetchFile isn't set in the pikku config"], async () => {
6
6
  if (!fetchFile) {
7
7
  throw new Error("fetchFile is isn't set in the pikku config");
8
8
  }
9
- const routesMapDeclarationPath = getFileImportRelativePath(fetchFile, routesMapDeclarationFile, packageMappings);
9
+ const routesMapDeclarationPath = getFileImportRelativePath(fetchFile, httpRoutesMapDeclarationFile, packageMappings);
10
10
  const content = [serializeFetchWrapper(routesMapDeclarationPath)];
11
11
  await writeFileInDir(fetchFile, content.join('\n'));
12
12
  });
@@ -1,8 +1,8 @@
1
1
  import { getPikkuCLIConfig } from '../src/pikku-cli-config.js';
2
2
  import { getFileImportRelativePath, getPikkuFilesAndMethods, logCommandInfoAndTime, logPikkuLogo, writeFileInDir, } from '../src/utils.js';
3
- import { pikkuHTTP } from './pikku-http.js';
3
+ import { pikkuHTTP } from './pikku-http-routes.js';
4
4
  import { inspectorGlob } from '../src/inspector-glob.js';
5
- import { serializePikkuTypes } from '../src/core/serialize-pikku-types.js';
5
+ import { serializePikkuTypes } from '../src/serialize-pikku-types.js';
6
6
  export const pikkuFunctionTypes = async ({ typesDeclarationFile: typesFile, packageMappings }, options, visitState) => {
7
7
  await logCommandInfoAndTime('Creating api types', 'Created api types', [false], async () => {
8
8
  const { userSessionType, sessionServicesType, singletonServicesType } = await getPikkuFilesAndMethods(visitState, packageMappings, typesFile, options, {
@@ -16,8 +16,8 @@ export const pikkuFunctionTypes = async ({ typesDeclarationFile: typesFile, pack
16
16
  };
17
17
  async function action(cliOptions) {
18
18
  logPikkuLogo();
19
- const cliConfig = await getPikkuCLIConfig(cliOptions.config, ['rootDir', 'routeDirectories', 'typesDeclarationFile'], cliOptions.tags);
20
- const visitState = await inspectorGlob(cliConfig.rootDir, cliConfig.routeDirectories, cliConfig.filters);
19
+ const cliConfig = await getPikkuCLIConfig(cliOptions.config, ['rootDir', 'srcDirectories', 'typesDeclarationFile'], cliOptions.tags);
20
+ const visitState = await inspectorGlob(cliConfig.rootDir, cliConfig.srcDirectories, cliConfig.filters);
21
21
  await pikkuHTTP(cliConfig, visitState);
22
22
  }
23
23
  export const functionTypes = (program) => {
@@ -0,0 +1,5 @@
1
+ import { Command } from 'commander';
2
+ import { PikkuCLIConfig } from '../src/pikku-cli-config.js';
3
+ import { InspectorState } from '@pikku/inspector';
4
+ export declare const pikkuFunctions: (cliConfig: PikkuCLIConfig, visitState: InspectorState) => Promise<boolean>;
5
+ export declare const routes: (program: Command) => void;
@@ -0,0 +1,24 @@
1
+ import { getPikkuCLIConfig } from '../src/pikku-cli-config.js';
2
+ import { logCommandInfoAndTime, logPikkuLogo, serializeFileImports, writeFileInDir, } from '../src/utils.js';
3
+ import { inspectorGlob } from '../src/inspector-glob.js';
4
+ export const pikkuFunctions = async (cliConfig, visitState) => {
5
+ return await logCommandInfoAndTime('Finding Pikku functions', 'Found Pikku functions', [visitState.functions.files.size === 0], async () => {
6
+ const { functionsFile, functionsMetaFile, packageMappings } = cliConfig;
7
+ const { functions } = visitState;
8
+ await writeFileInDir(functionsFile, serializeFileImports('addFunction', functionsFile, functions.files, packageMappings));
9
+ await writeFileInDir(functionsMetaFile, `import { pikkuState } from '@pikku/core'\npikkuState('functions', 'meta', ${JSON.stringify(functions.meta, null, 2)})`);
10
+ });
11
+ };
12
+ async function action(cliOptions) {
13
+ logPikkuLogo();
14
+ const cliConfig = await getPikkuCLIConfig(cliOptions.config, ['rootDir', 'srcDirectories', 'functionsFile'], cliOptions.tags);
15
+ const visitState = await inspectorGlob(cliConfig.rootDir, cliConfig.srcDirectories, cliConfig.filters);
16
+ await pikkuFunctions(cliConfig, visitState);
17
+ }
18
+ export const routes = (program) => {
19
+ program
20
+ .command('functions')
21
+ .description('Find all functions to import')
22
+ .option('-c | --config <string>', 'The path to pikku cli config file')
23
+ .action(action);
24
+ };
@@ -0,0 +1,5 @@
1
+ import { Command } from 'commander';
2
+ import { PikkuCLIConfig } from '../src/pikku-cli-config.js';
3
+ import { InspectorState } from '@pikku/inspector';
4
+ export declare const pikkuHTTPMap: ({ httpRoutesMapDeclarationFile, packageMappings }: PikkuCLIConfig, { http, functions }: InspectorState) => Promise<boolean>;
5
+ export declare const routesMap: (program: Command) => void;
@@ -0,0 +1,23 @@
1
+ import { getPikkuCLIConfig } from '../src/pikku-cli-config.js';
2
+ import { logCommandInfoAndTime, logPikkuLogo, writeFileInDir, } from '../src/utils.js';
3
+ import { serializeTypedRoutesMap } from '../src/serialize-typed-http-map.js';
4
+ import { inspectorGlob } from '../src/inspector-glob.js';
5
+ export const pikkuHTTPMap = async ({ httpRoutesMapDeclarationFile, packageMappings }, { http, functions }) => {
6
+ return await logCommandInfoAndTime('Creating HTTP map', 'Created HTTP map', [http.files.size === 0], async () => {
7
+ const content = serializeTypedRoutesMap(httpRoutesMapDeclarationFile, packageMappings, functions.typesMap, http.meta, http.metaInputTypes);
8
+ await writeFileInDir(httpRoutesMapDeclarationFile, content);
9
+ });
10
+ };
11
+ async function action(cliOptions) {
12
+ logPikkuLogo();
13
+ const cliConfig = await getPikkuCLIConfig(cliOptions.config, ['rootDir', 'srcDirectories', 'httpRoutesFile'], cliOptions.tags);
14
+ const visitState = await inspectorGlob(cliConfig.rootDir, cliConfig.srcDirectories, cliConfig.filters);
15
+ await pikkuHTTPMap(cliConfig, visitState);
16
+ }
17
+ export const routesMap = (program) => {
18
+ program
19
+ .command('map')
20
+ .description('Generate a map of all routes to aid in type checking')
21
+ .option('-c | --config <string>', 'The path to pikku cli config file')
22
+ .action(action);
23
+ };
@@ -0,0 +1,5 @@
1
+ import { Command } from 'commander';
2
+ import { PikkuCLIConfig } from '../src/pikku-cli-config.js';
3
+ import { InspectorState } from '@pikku/inspector';
4
+ export declare const pikkuHTTP: (cliConfig: PikkuCLIConfig, visitState: InspectorState) => Promise<boolean>;
5
+ export declare const routes: (program: Command) => void;
@@ -0,0 +1,24 @@
1
+ import { getPikkuCLIConfig } from '../src/pikku-cli-config.js';
2
+ import { logCommandInfoAndTime, logPikkuLogo, serializeFileImports, writeFileInDir, } from '../src/utils.js';
3
+ import { inspectorGlob } from '../src/inspector-glob.js';
4
+ export const pikkuHTTP = async (cliConfig, visitState) => {
5
+ return await logCommandInfoAndTime('Finding HTTP routes', 'Found HTTP routes', [visitState.http.files.size === 0], async () => {
6
+ const { httpRoutesFile, httpRoutesMetaFile, packageMappings } = cliConfig;
7
+ const { http } = visitState;
8
+ await writeFileInDir(httpRoutesFile, serializeFileImports('addHTTPRoute', httpRoutesFile, http.files, packageMappings));
9
+ await writeFileInDir(httpRoutesMetaFile, `import { pikkuState } from '@pikku/core'\npikkuState('http', 'meta', ${JSON.stringify(http.meta, null, 2)})`);
10
+ });
11
+ };
12
+ async function action(cliOptions) {
13
+ logPikkuLogo();
14
+ const cliConfig = await getPikkuCLIConfig(cliOptions.config, ['rootDir', 'srcDirectories', 'httpRoutesFile'], cliOptions.tags);
15
+ const visitState = await inspectorGlob(cliConfig.rootDir, cliConfig.srcDirectories, cliConfig.filters);
16
+ await pikkuHTTP(cliConfig, visitState);
17
+ }
18
+ export const routes = (program) => {
19
+ program
20
+ .command('routes')
21
+ .description('Find all routes to import')
22
+ .option('-c | --config <string>', 'The path to pikku cli config file')
23
+ .action(action);
24
+ };
@@ -1,15 +1,13 @@
1
1
  import { getPikkuCLIConfig } from '../src/pikku-cli-config.js';
2
- import { serializeHTTPRoutesMeta } from '../src/http/serialize-route-meta.js';
3
- import { logCommandInfoAndTime, logPikkuLogo, writeFileInDir, } from '../src/utils.js';
4
- import { serializeRoutes } from '../src/http/serialize-route-imports.js';
2
+ import { logCommandInfoAndTime, logPikkuLogo, serializeFileImports, writeFileInDir, } from '../src/utils.js';
5
3
  import { inspectorGlob } from '../src/inspector-glob.js';
6
4
  export const pikkuHTTP = async (cliConfig, visitState) => {
7
5
  return await logCommandInfoAndTime('Finding HTTP routes', 'Found HTTP routes', [visitState.http.files.size === 0], async () => {
8
6
  const { routesFile, packageMappings } = cliConfig;
9
7
  const { http } = visitState;
10
8
  const content = [
11
- serializeRoutes(routesFile, http.files, packageMappings),
12
- serializeHTTPRoutesMeta(http.meta),
9
+ serializeFileImports('addHTTPRoute', routesFile, http.files, packageMappings),
10
+ `import { pikkuState } from '@pikku/core'\npikkuState('http', 'meta', ${JSON.stringify(http.meta, null, 2)})`
13
11
  ];
14
12
  await writeFileInDir(routesFile, content.join('\n\n'));
15
13
  });
@@ -2,6 +2,6 @@ import { Command } from 'commander';
2
2
  import { PikkuCLIOptions } from '../src/utils.js';
3
3
  import { PikkuCLIConfig } from '../src/pikku-cli-config.js';
4
4
  import { InspectorState } from '@pikku/inspector';
5
- export declare const pikkuNext: ({ nextBackendFile, nextHTTPFile, routesFile, routesMapDeclarationFile, schemaDirectory, packageMappings, fetchFile, }: PikkuCLIConfig, visitState: InspectorState, options: PikkuCLIOptions) => Promise<boolean>;
5
+ export declare const pikkuNext: ({ nextBackendFile, nextHTTPFile, httpRoutesFile, httpRoutesMapDeclarationFile, schemaDirectory, packageMappings, fetchFile, }: PikkuCLIConfig, visitState: InspectorState, options: PikkuCLIOptions) => Promise<boolean>;
6
6
  export declare const action: (options: PikkuCLIOptions) => Promise<void>;
7
7
  export declare const nextjs: (program: Command) => void;
@@ -1,9 +1,9 @@
1
- import { serializeNextJsBackendWrapper as serializeNextBackendWrapper } from '../src/nextjs/serialize-nextjs-backend-wrapper.js';
2
- import { serializeNextJsHTTPWrapper as serializeNextHTTPWrapper } from '../src/nextjs/serialize-nextjs-http-wrapper.js';
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
3
  import { getFileImportRelativePath, getPikkuFilesAndMethods, logCommandInfoAndTime, logPikkuLogo, writeFileInDir, } from '../src/utils.js';
4
4
  import { getPikkuCLIConfig } from '../src/pikku-cli-config.js';
5
5
  import { inspectorGlob } from '../src/inspector-glob.js';
6
- export const pikkuNext = async ({ nextBackendFile, nextHTTPFile, routesFile, routesMapDeclarationFile, schemaDirectory, packageMappings, fetchFile, }, visitState, options) => {
6
+ export const pikkuNext = async ({ nextBackendFile, nextHTTPFile, httpRoutesFile, httpRoutesMapDeclarationFile, schemaDirectory, packageMappings, fetchFile, }, visitState, options) => {
7
7
  return await logCommandInfoAndTime('Generating nextjs wrapper', 'Generated nextjs wrapper', [
8
8
  nextBackendFile === undefined && nextHTTPFile === undefined,
9
9
  'nextjs outfile is not defined',
@@ -23,15 +23,15 @@ export const pikkuNext = async ({ nextBackendFile, nextHTTPFile, routesFile, rou
23
23
  const pikkuConfigImport = `import { ${pikkuConfigFactory.variable} as createConfig } from '${getFileImportRelativePath(nextBackendFile, pikkuConfigFactory.file, packageMappings)}'`;
24
24
  const singletonServicesImport = `import { ${singletonServicesFactory.variable} as createSingletonServices } from '${getFileImportRelativePath(nextBackendFile, singletonServicesFactory.file, packageMappings)}'`;
25
25
  const sessionServicesImport = `import { ${sessionServicesFactory.variable} as createSessionServices } from '${getFileImportRelativePath(nextBackendFile, sessionServicesFactory.file, packageMappings)}'`;
26
- const routesPath = getFileImportRelativePath(nextBackendFile, routesFile, packageMappings);
27
- const routesMapDeclarationPath = getFileImportRelativePath(nextBackendFile, routesMapDeclarationFile, packageMappings);
26
+ const routesPath = getFileImportRelativePath(nextBackendFile, httpRoutesFile, packageMappings);
27
+ const routesMapDeclarationPath = getFileImportRelativePath(nextBackendFile, httpRoutesMapDeclarationFile, packageMappings);
28
28
  const schemasPath = getFileImportRelativePath(nextBackendFile, `${schemaDirectory}/register.gen.ts`, packageMappings);
29
29
  const content = serializeNextBackendWrapper(routesPath, routesMapDeclarationPath, schemasPath, pikkuConfigImport, singletonServicesImport, sessionServicesImport);
30
30
  await writeFileInDir(nextBackendFile, content);
31
31
  }
32
32
  if (nextHTTPFile) {
33
- const routesPath = getFileImportRelativePath(nextHTTPFile, routesFile, packageMappings);
34
- const routesMapDeclarationPath = getFileImportRelativePath(nextHTTPFile, routesMapDeclarationFile, packageMappings);
33
+ const routesPath = getFileImportRelativePath(nextHTTPFile, httpRoutesFile, packageMappings);
34
+ const routesMapDeclarationPath = getFileImportRelativePath(nextHTTPFile, httpRoutesMapDeclarationFile, packageMappings);
35
35
  const content = serializeNextHTTPWrapper(routesPath, routesMapDeclarationPath);
36
36
  await writeFileInDir(nextHTTPFile, content);
37
37
  }
@@ -40,7 +40,7 @@ export const pikkuNext = async ({ nextBackendFile, nextHTTPFile, routesFile, rou
40
40
  export const action = async (options) => {
41
41
  logPikkuLogo();
42
42
  const cliConfig = await getPikkuCLIConfig(options.config, ['rootDir', 'schemaDirectory', 'configDir'], options.tags, true);
43
- const visitState = await inspectorGlob(cliConfig.rootDir, cliConfig.routeDirectories, cliConfig.filters);
43
+ const visitState = await inspectorGlob(cliConfig.rootDir, cliConfig.srcDirectories, cliConfig.filters);
44
44
  await pikkuNext(cliConfig, visitState, options);
45
45
  };
46
46
  export const nextjs = (program) => {
@@ -1,5 +1,5 @@
1
1
  import { Command } from 'commander';
2
2
  import { PikkuCLIConfig } from '../src/pikku-cli-config.js';
3
3
  import { InspectorState } from '@pikku/inspector';
4
- export declare const pikkuOpenAPI: ({ tsconfig, openAPI }: PikkuCLIConfig, { http }: InspectorState) => Promise<void>;
4
+ export declare const pikkuOpenAPI: ({ tsconfig, openAPI }: PikkuCLIConfig, { http, functions }: InspectorState) => Promise<void>;
5
5
  export declare const openapi: (program: Command) => void;
@@ -1,15 +1,15 @@
1
1
  import { logCommandInfoAndTime, logPikkuLogo, writeFileInDir, } from '../src/utils.js';
2
- import { generateSchemas } from '../src/schema/schema-generator.js';
3
- import { generateOpenAPISpec } from '../src/openapi/openapi-spec-generator.js';
2
+ import { generateSchemas } from '../src/schema-generator.js';
3
+ import { generateOpenAPISpec } from '../src/openapi-spec-generator.js';
4
4
  import { getPikkuCLIConfig } from '../src/pikku-cli-config.js';
5
5
  import { stringify } from 'yaml';
6
6
  import { inspectorGlob } from '../src/inspector-glob.js';
7
- export const pikkuOpenAPI = async ({ tsconfig, openAPI }, { http }) => {
7
+ export const pikkuOpenAPI = async ({ tsconfig, openAPI }, { http, functions }) => {
8
8
  await logCommandInfoAndTime('Creating OpenAPI spec', 'Created OpenAPI spec', [openAPI?.outputFile === undefined, 'openAPI outfile is not defined'], async () => {
9
9
  if (!openAPI?.outputFile) {
10
10
  throw new Error('openAPI is required');
11
11
  }
12
- const schemas = await generateSchemas(tsconfig, http.typesMap, http.meta);
12
+ const schemas = await generateSchemas(tsconfig, [http.typesMap, functions.typesMap], http.meta);
13
13
  const openAPISpec = await generateOpenAPISpec(http.meta, schemas, openAPI.additionalInfo);
14
14
  if (openAPI.outputFile.endsWith('.json')) {
15
15
  await writeFileInDir(openAPI.outputFile, JSON.stringify(openAPISpec, null, 2), true);
@@ -22,8 +22,8 @@ export const pikkuOpenAPI = async ({ tsconfig, openAPI }, { http }) => {
22
22
  };
23
23
  async function action({ config, tags }) {
24
24
  logPikkuLogo();
25
- const cliConfig = await getPikkuCLIConfig(config, ['rootDir', 'routesFile', 'openAPI', 'schemaDirectory', 'tsconfig'], tags);
26
- const visitState = await inspectorGlob(cliConfig.rootDir, cliConfig.routeDirectories, cliConfig.filters);
25
+ const cliConfig = await getPikkuCLIConfig(config, ['rootDir', 'httpRoutesFile', 'openAPI', 'schemaDirectory', 'tsconfig'], tags);
26
+ const visitState = await inspectorGlob(cliConfig.rootDir, cliConfig.srcDirectories, cliConfig.filters);
27
27
  await pikkuOpenAPI(cliConfig, visitState);
28
28
  }
29
29
  export const openapi = (program) => {
@@ -1,5 +1,5 @@
1
1
  import { Command } from 'commander';
2
2
  import { PikkuCLIConfig } from '../src/pikku-cli-config.js';
3
3
  import { InspectorState } from '@pikku/inspector';
4
- export declare const pikkuHTTPMap: ({ routesMapDeclarationFile, packageMappings }: PikkuCLIConfig, { http }: InspectorState) => Promise<boolean>;
4
+ export declare const pikkuHTTPMap: ({ routesMapDeclarationFile, packageMappings }: PikkuCLIConfig, { http, functions }: InspectorState) => Promise<boolean>;
5
5
  export declare const routesMap: (program: Command) => void;
@@ -1,10 +1,10 @@
1
1
  import { getPikkuCLIConfig } from '../src/pikku-cli-config.js';
2
2
  import { logCommandInfoAndTime, logPikkuLogo, writeFileInDir, } from '../src/utils.js';
3
- import { serializeTypedRoutesMap } from '../src/http/serialize-typed-route-map.js';
3
+ import { serializeTypedRoutesMap } from '../src/serialize-typed-route-map.js';
4
4
  import { inspectorGlob } from '../src/inspector-glob.js';
5
- export const pikkuHTTPMap = async ({ routesMapDeclarationFile, packageMappings }, { http }) => {
5
+ export const pikkuHTTPMap = async ({ routesMapDeclarationFile, packageMappings }, { http, functions }) => {
6
6
  return await logCommandInfoAndTime('Creating routes map', 'Created routes map', [http.files.size === 0], async () => {
7
- const content = serializeTypedRoutesMap(routesMapDeclarationFile, packageMappings, http.typesMap, http.meta, http.metaInputTypes);
7
+ const content = serializeTypedRoutesMap(routesMapDeclarationFile, packageMappings, functions.typesMap, http.meta, http.metaInputTypes);
8
8
  await writeFileInDir(routesMapDeclarationFile, content);
9
9
  });
10
10
  };
@@ -1,22 +1,19 @@
1
1
  import { getPikkuCLIConfig } from '../src/pikku-cli-config.js';
2
- import { logCommandInfoAndTime, logPikkuLogo, writeFileInDir, } from '../src/utils.js';
3
- import { serializeSchedulerMeta, serializeSchedulers, } from '../src/scheduler/serialize-schedulers.js';
2
+ import { logCommandInfoAndTime, logPikkuLogo, serializeFileImports, writeFileInDir, } from '../src/utils.js';
3
+ import { serializeSchedulerMeta } from '../src/serialize-scheduler-meta.js';
4
4
  import { inspectorGlob } from '../src/inspector-glob.js';
5
5
  export const pikkuScheduler = async (cliConfig, visitState) => {
6
6
  return await logCommandInfoAndTime('Finding scheduled tasks', 'Found scheduled tasks', [visitState.scheduledTasks.files.size === 0], async () => {
7
- const { schedulersFile, packageMappings } = cliConfig;
7
+ const { schedulersFile, schedulersMetaFile, packageMappings } = cliConfig;
8
8
  const { scheduledTasks } = visitState;
9
- const content = [
10
- serializeSchedulers(schedulersFile, scheduledTasks.files, packageMappings),
11
- serializeSchedulerMeta(scheduledTasks.meta),
12
- ];
13
- await writeFileInDir(schedulersFile, content.join('\n\n'));
9
+ await writeFileInDir(schedulersMetaFile, serializeSchedulerMeta(scheduledTasks.meta));
10
+ await writeFileInDir(schedulersFile, serializeFileImports('addSerializedTasks', schedulersFile, scheduledTasks.files, packageMappings));
14
11
  });
15
12
  };
16
13
  async function action(options) {
17
14
  logPikkuLogo();
18
- const cliConfig = await getPikkuCLIConfig(options.config, ['rootDir', 'routeDirectories', 'routesFile'], options.tags);
19
- const visitState = await inspectorGlob(cliConfig.rootDir, cliConfig.routeDirectories, cliConfig.filters);
15
+ const cliConfig = await getPikkuCLIConfig(options.config, ['rootDir', 'srcDirectories', 'httpRoutesFile'], options.tags);
16
+ const visitState = await inspectorGlob(cliConfig.rootDir, cliConfig.srcDirectories, cliConfig.filters);
20
17
  await pikkuScheduler(cliConfig, visitState);
21
18
  }
22
19
  export const schedules = (program) => {
@@ -1,5 +1,5 @@
1
1
  import { Command } from 'commander';
2
2
  import { PikkuCLIConfig } from '../src/pikku-cli-config.js';
3
3
  import { InspectorState } from '@pikku/inspector';
4
- export declare const pikkuSchemas: ({ tsconfig, schemaDirectory, supportsImportAttributes }: PikkuCLIConfig, { http }: InspectorState) => Promise<boolean>;
4
+ export declare const pikkuSchemas: ({ tsconfig, schemaDirectory, supportsImportAttributes }: PikkuCLIConfig, { functions, http, channels }: InspectorState) => Promise<boolean>;
5
5
  export declare const schemas: (program: Command) => void;
@@ -1,21 +1,21 @@
1
- import { saveSchemas, generateSchemas } from '../src/schema/schema-generator.js';
1
+ import { saveSchemas, generateSchemas } from '../src/schema-generator.js';
2
2
  import { getPikkuCLIConfig } from '../src/pikku-cli-config.js';
3
3
  import { logCommandInfoAndTime, logPikkuLogo } from '../src/utils.js';
4
4
  import { inspectorGlob } from '../src/inspector-glob.js';
5
- export const pikkuSchemas = async ({ tsconfig, schemaDirectory, supportsImportAttributes }, { http }) => {
5
+ export const pikkuSchemas = async ({ tsconfig, schemaDirectory, supportsImportAttributes }, { functions, http, channels }) => {
6
6
  return await logCommandInfoAndTime('Creating schemas', 'Created schemas', [false], async () => {
7
- const schemas = await generateSchemas(tsconfig, http.typesMap, http.meta);
8
- await saveSchemas(schemaDirectory, schemas, http.typesMap, http.meta, supportsImportAttributes);
7
+ const schemas = await generateSchemas(tsconfig, [functions.typesMap, http.typesMap, channels.typesMap], http.meta);
8
+ await saveSchemas(schemaDirectory, schemas, functions.typesMap, http.meta, supportsImportAttributes);
9
9
  });
10
10
  };
11
11
  async function action({ config }) {
12
12
  logPikkuLogo();
13
13
  const cliConfig = await getPikkuCLIConfig(config, [
14
- 'routeDirectories',
14
+ 'srcDirectories',
15
15
  'schemaDirectory',
16
16
  'tsconfig',
17
17
  ]);
18
- const visitState = await inspectorGlob(cliConfig.rootDir, cliConfig.routeDirectories, cliConfig.filters);
18
+ const visitState = await inspectorGlob(cliConfig.rootDir, cliConfig.srcDirectories, cliConfig.filters);
19
19
  await pikkuSchemas(cliConfig, visitState);
20
20
  }
21
21
  export const schemas = (program) => {
@@ -1,6 +1,6 @@
1
1
  import { getFileImportRelativePath, logCommandInfoAndTime, logPikkuLogo, writeFileInDir, } from '../src/utils.js';
2
2
  import { getPikkuCLIConfig } from '../src/pikku-cli-config.js';
3
- import { serializeWebsocketWrapper } from '../src/channels/serialize-websocket-wrapper.js';
3
+ import { serializeWebsocketWrapper } from '../src/serialize-websocket-wrapper.js';
4
4
  export const pikkuWebSocket = async ({ websocketFile, channelsMapDeclarationFile, packageMappings, }) => {
5
5
  await logCommandInfoAndTime('Generating websocket wrapper', 'Generated websocket wrapper', [
6
6
  websocketFile === undefined,
package/dist/bin/pikku.js CHANGED
@@ -1,11 +1,11 @@
1
1
  #!/usr/bin/env node
2
2
  import { Command } from 'commander';
3
3
  import { schemas } from './pikku-schemas.js';
4
- import { routes } from './pikku-http.js';
4
+ import { routes } from './pikku-http-routes.js';
5
5
  import { nextjs } from './pikku-nextjs.js';
6
6
  import { all } from './pikku-all.js';
7
7
  import { functionTypes } from './pikku-function-types.js';
8
- import { routesMap } from './pikku-routes-map.js';
8
+ import { routesMap } from './pikku-http-map.js';
9
9
  import { fetch } from './pikku-fetch.js';
10
10
  import { channels } from './pikku-channels.js';
11
11
  import { schedules } from './pikku-scheduler.js';
@@ -41,7 +41,7 @@ export type ChannelRouteHandlerOf<
41
41
  function generateChannels(channelsMeta) {
42
42
  const requiredTypes = new Set();
43
43
  const channelsObject = {};
44
- for (const meta of channelsMeta) {
44
+ for (const meta of Object.values(channelsMeta)) {
45
45
  const { name, messageRoutes, message } = meta;
46
46
  if (!channelsObject[name]) {
47
47
  channelsObject[name] = { message, routes: {} };
@@ -70,7 +70,7 @@ function generateChannels(channelsMeta) {
70
70
  for (const [key, methods] of Object.entries(routes)) {
71
71
  routesStr += ` readonly ${key}: {\n`;
72
72
  for (const [method, handler] of Object.entries(methods)) {
73
- routesStr += ` readonly ${method}: ChannelHandler<${formatTypeArray(handler.inputTypes)}, ${formatTypeArray(handler.outputTypes) || 'never'}>,\n`;
73
+ routesStr += ` readonly ${method}: ChannelHandler<${formatTypeArray(handler.inputTypes) || 'void'}, ${formatTypeArray(handler.outputTypes) || 'never'}>,\n`;
74
74
  }
75
75
  routesStr += ' },\n';
76
76
  }
@@ -79,6 +79,9 @@ function generateChannels(channelsMeta) {
79
79
  if (message) {
80
80
  routesStr += ` readonly defaultMessage: ChannelHandler<${formatTypeArray(message.inputs)}, ${formatTypeArray(message.outputs)}>,\n`;
81
81
  }
82
+ else {
83
+ routesStr += ` readonly defaultMessage: never,\n`;
84
+ }
82
85
  routesStr += ' },\n';
83
86
  }
84
87
  routesStr += '};';
@@ -4,6 +4,7 @@ export const serializeImportMap = (relativeToPath, packageMappings, typesMap, re
4
4
  Array.from(requiredTypes).forEach((requiredType) => {
5
5
  const { originalName, uniqueName, path } = typesMap.getTypeMeta(requiredType);
6
6
  if (!path) {
7
+ // This is a custom type that exists in file, so we don't need to import it
7
8
  return;
8
9
  }
9
10
  const variables = paths.get(path) || [];