vovk-cli 0.0.1-draft.39 → 0.0.1-draft.392

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 (140) hide show
  1. package/LICENSE +1 -1
  2. package/README.md +31 -1
  3. package/client-templates/cjs/index.cjs.ejs +20 -0
  4. package/client-templates/cjs/index.d.cts.ejs +22 -0
  5. package/client-templates/mixins/mixins.d.ts.ejs +64 -0
  6. package/client-templates/mixins/mixins.json.ejs +1 -0
  7. package/client-templates/mjs/index.d.mts.ejs +22 -0
  8. package/client-templates/mjs/index.mjs.ejs +19 -0
  9. package/client-templates/openapiCjs/openapi.cjs.ejs +4 -0
  10. package/client-templates/openapiCjs/openapi.d.cts.ejs +4 -0
  11. package/client-templates/openapiJson/openapi.json.ejs +1 -0
  12. package/client-templates/openapiTs/openapi.ts.ejs +4 -0
  13. package/client-templates/packageJson/package.json.ejs +1 -0
  14. package/client-templates/readme/README.md.ejs +39 -0
  15. package/client-templates/schemaCjs/schema.cjs.ejs +24 -0
  16. package/client-templates/schemaCjs/schema.d.cts.ejs +10 -0
  17. package/client-templates/schemaJson/schema.json.ejs +1 -0
  18. package/client-templates/schemaTs/schema.ts.ejs +28 -0
  19. package/client-templates/ts/index.ts.ejs +33 -0
  20. package/dist/bundle/index.d.mts +8 -0
  21. package/dist/bundle/index.mjs +74 -0
  22. package/dist/dev/diffSegmentSchema.d.mts +36 -0
  23. package/dist/dev/{diffSchema.mjs → diffSegmentSchema.mjs} +3 -11
  24. package/dist/dev/ensureSchemaFiles.d.mts +4 -1
  25. package/dist/dev/ensureSchemaFiles.mjs +15 -31
  26. package/dist/dev/index.d.mts +5 -1
  27. package/dist/dev/index.mjs +141 -66
  28. package/dist/dev/logDiffResult.d.mts +1 -1
  29. package/dist/dev/logDiffResult.mjs +6 -43
  30. package/dist/dev/writeMetaJson.d.mts +2 -0
  31. package/dist/dev/writeMetaJson.mjs +20 -0
  32. package/dist/dev/writeOneSegmentSchemaFile.d.mts +12 -0
  33. package/dist/dev/{writeOneSchemaFile.mjs → writeOneSegmentSchemaFile.mjs} +10 -6
  34. package/dist/generate/ensureClient.d.mts +3 -0
  35. package/dist/generate/ensureClient.mjs +28 -0
  36. package/dist/generate/generate.d.mts +13 -0
  37. package/dist/generate/generate.mjs +300 -0
  38. package/dist/generate/getClientTemplateFiles.d.mts +20 -0
  39. package/dist/generate/getClientTemplateFiles.mjs +85 -0
  40. package/dist/generate/getProjectFullSchema.d.mts +8 -0
  41. package/dist/generate/getProjectFullSchema.mjs +66 -0
  42. package/dist/generate/getTemplateClientImports.d.mts +21 -0
  43. package/dist/generate/getTemplateClientImports.mjs +56 -0
  44. package/dist/generate/index.d.mts +33 -0
  45. package/dist/generate/index.mjs +186 -0
  46. package/dist/generate/writeOneClientFile.d.mts +42 -0
  47. package/dist/generate/writeOneClientFile.mjs +151 -0
  48. package/dist/getProjectInfo/getConfig/getConfigAbsolutePaths.d.mts +5 -0
  49. package/dist/getProjectInfo/{getConfigAbsolutePaths.mjs → getConfig/getConfigAbsolutePaths.mjs} +4 -1
  50. package/dist/getProjectInfo/{getRelativeSrcRoot.d.mts → getConfig/getRelativeSrcRoot.d.mts} +1 -1
  51. package/dist/getProjectInfo/{getRelativeSrcRoot.mjs → getConfig/getRelativeSrcRoot.mjs} +2 -2
  52. package/dist/getProjectInfo/getConfig/getTemplateDefs.d.mts +24 -0
  53. package/dist/getProjectInfo/getConfig/getTemplateDefs.mjs +165 -0
  54. package/dist/getProjectInfo/{getUserConfig.d.mts → getConfig/getUserConfig.d.mts} +3 -2
  55. package/dist/getProjectInfo/{getUserConfig.mjs → getConfig/getUserConfig.mjs} +3 -3
  56. package/dist/getProjectInfo/{importUncachedModule.mjs → getConfig/importUncachedModule.mjs} +1 -4
  57. package/dist/getProjectInfo/getConfig/index.d.mts +91 -0
  58. package/dist/getProjectInfo/getConfig/index.mjs +92 -0
  59. package/dist/getProjectInfo/getMetaSchema.d.mts +8 -0
  60. package/dist/getProjectInfo/getMetaSchema.mjs +27 -0
  61. package/dist/getProjectInfo/index.d.mts +14 -9
  62. package/dist/getProjectInfo/index.mjs +24 -22
  63. package/dist/index.d.mts +2 -2
  64. package/dist/index.mjs +116 -35
  65. package/dist/init/createConfig.d.mts +2 -2
  66. package/dist/init/createConfig.mjs +40 -13
  67. package/dist/init/createStandardSchemaValidatorFile.d.mts +4 -0
  68. package/dist/init/createStandardSchemaValidatorFile.mjs +52 -0
  69. package/dist/init/getTemplateFilesFromPackage.mjs +10 -5
  70. package/dist/init/index.d.mts +2 -2
  71. package/dist/init/index.mjs +121 -72
  72. package/dist/init/installDependencies.mjs +4 -2
  73. package/dist/init/logUpdateDependenciesError.d.mts +3 -1
  74. package/dist/init/logUpdateDependenciesError.mjs +7 -1
  75. package/dist/init/updateDependenciesWithoutInstalling.mjs +39 -9
  76. package/dist/init/updateNPMScripts.mjs +1 -1
  77. package/dist/init/updateTypeScriptConfig.d.mts +4 -1
  78. package/dist/init/updateTypeScriptConfig.mjs +11 -7
  79. package/dist/initProgram.d.mts +1 -1
  80. package/dist/initProgram.mjs +17 -17
  81. package/dist/locateSegments.d.mts +8 -1
  82. package/dist/locateSegments.mjs +13 -3
  83. package/dist/new/addClassToSegmentCode.d.mts +1 -2
  84. package/dist/new/addClassToSegmentCode.mjs +3 -3
  85. package/dist/new/index.d.mts +2 -1
  86. package/dist/new/index.mjs +5 -3
  87. package/dist/new/newModule.d.mts +5 -2
  88. package/dist/new/newModule.mjs +26 -24
  89. package/dist/new/newSegment.d.mts +4 -1
  90. package/dist/new/newSegment.mjs +20 -12
  91. package/dist/new/render.d.mts +7 -3
  92. package/dist/new/render.mjs +31 -10
  93. package/dist/types.d.mts +66 -44
  94. package/dist/utils/compileJSONSchemaToTypeScriptType.d.mts +5 -0
  95. package/dist/utils/compileJSONSchemaToTypeScriptType.mjs +9 -0
  96. package/dist/utils/compileTs.d.mts +12 -0
  97. package/dist/utils/compileTs.mjs +261 -0
  98. package/dist/utils/debounceWithArgs.d.mts +1 -1
  99. package/dist/utils/deepExtend.d.mts +54 -0
  100. package/dist/utils/deepExtend.mjs +129 -0
  101. package/dist/utils/formatLoggedSegmentName.d.mts +3 -1
  102. package/dist/utils/formatLoggedSegmentName.mjs +3 -2
  103. package/dist/utils/generateFnName.d.mts +23 -0
  104. package/dist/utils/generateFnName.mjs +76 -0
  105. package/dist/utils/getPackageJson.d.mts +3 -0
  106. package/dist/utils/getPackageJson.mjs +22 -0
  107. package/dist/utils/getPublicModuleNameFromPath.d.mts +4 -0
  108. package/dist/utils/getPublicModuleNameFromPath.mjs +9 -0
  109. package/dist/utils/normalizeOpenAPIMixin.d.mts +14 -0
  110. package/dist/utils/normalizeOpenAPIMixin.mjs +114 -0
  111. package/dist/utils/pickSegmentFullSchema.d.mts +3 -0
  112. package/dist/utils/pickSegmentFullSchema.mjs +15 -0
  113. package/dist/utils/removeUnlistedDirectories.d.mts +10 -0
  114. package/dist/utils/removeUnlistedDirectories.mjs +61 -0
  115. package/dist/utils/resolveAbsoluteModulePath.d.mts +2 -0
  116. package/dist/utils/resolveAbsoluteModulePath.mjs +32 -0
  117. package/module-templates/arktype/controller.ts.ejs +78 -0
  118. package/module-templates/type/controller.ts.ejs +64 -0
  119. package/module-templates/type/service.ts.ejs +37 -0
  120. package/module-templates/valibot/controller.ts.ejs +78 -0
  121. package/package.json +39 -22
  122. package/dist/dev/diffSchema.d.mts +0 -43
  123. package/dist/dev/ensureClient.d.mts +0 -5
  124. package/dist/dev/ensureClient.mjs +0 -31
  125. package/dist/dev/isMetadataEmpty.d.mts +0 -2
  126. package/dist/dev/isMetadataEmpty.mjs +0 -4
  127. package/dist/dev/writeOneSchemaFile.d.mts +0 -11
  128. package/dist/generateClient.d.mts +0 -7
  129. package/dist/generateClient.mjs +0 -97
  130. package/dist/getProjectInfo/getConfig.d.mts +0 -11
  131. package/dist/getProjectInfo/getConfig.mjs +0 -29
  132. package/dist/getProjectInfo/getConfigAbsolutePaths.d.mts +0 -4
  133. package/dist/postinstall.d.mts +0 -1
  134. package/dist/postinstall.mjs +0 -24
  135. package/templates/controller.ejs +0 -52
  136. package/templates/service.ejs +0 -27
  137. package/templates/worker.ejs +0 -24
  138. /package/dist/getProjectInfo/{importUncachedModule.d.mts → getConfig/importUncachedModule.d.mts} +0 -0
  139. /package/dist/getProjectInfo/{importUncachedModuleWorker.d.mts → getConfig/importUncachedModuleWorker.d.mts} +0 -0
  140. /package/dist/getProjectInfo/{importUncachedModuleWorker.mjs → getConfig/importUncachedModuleWorker.mjs} +0 -0
@@ -1,31 +0,0 @@
1
- import path from 'node:path';
2
- import fs from 'node:fs/promises';
3
- export default async function ensureClient(projectInfo) {
4
- const { config, cwd, log } = projectInfo;
5
- const now = Date.now();
6
- const clientoOutDirAbsolutePath = path.join(cwd, config.clientOutDir);
7
- const dts = `// auto-generated
8
- // This is a temporary placeholder to avoid errors if client is imported before it's generated.
9
- // If you still see this text, the client is not generated yet because of an unknown problem.
10
- // Feel free to report an issue at https://github.com/finom/vovk/issues`;
11
- const js = dts;
12
- const ts = dts;
13
- const localJsAbsolutePath = path.join(clientoOutDirAbsolutePath, 'client.js');
14
- const localDtsAbsolutePath = path.join(clientoOutDirAbsolutePath, 'client.d.ts');
15
- const localTsAbsolutePath = path.join(clientoOutDirAbsolutePath, 'index.ts');
16
- const existingJs = await fs.readFile(localJsAbsolutePath, 'utf-8').catch(() => null);
17
- const existingDts = await fs.readFile(localDtsAbsolutePath, 'utf-8').catch(() => null);
18
- const existingTs = await fs.readFile(localTsAbsolutePath, 'utf-8').catch(() => null);
19
- if (existingJs && existingDts && existingTs) {
20
- return { written: false, path: clientoOutDirAbsolutePath };
21
- }
22
- await fs.mkdir(clientoOutDirAbsolutePath, { recursive: true });
23
- if (!existingJs)
24
- await fs.writeFile(localJsAbsolutePath, js);
25
- if (!existingDts)
26
- await fs.writeFile(localDtsAbsolutePath, dts);
27
- if (!existingTs)
28
- await fs.writeFile(localTsAbsolutePath, ts);
29
- log.info(`Empty client files are generated in ${Date.now() - now}ms`);
30
- return { written: true, path: clientoOutDirAbsolutePath };
31
- }
@@ -1,2 +0,0 @@
1
- import type { VovkSchema } from 'vovk';
2
- export default function isSchemaEmpty(schema: VovkSchema): boolean;
@@ -1,4 +0,0 @@
1
- import isEmpty from 'lodash/isEmpty.js';
2
- export default function isSchemaEmpty(schema) {
3
- return isEmpty(schema.controllers) && isEmpty(schema.workers);
4
- }
@@ -1,11 +0,0 @@
1
- import type { VovkSchema } from 'vovk';
2
- import { type DiffResult } from './diffSchema.mjs';
3
- export declare const ROOT_SEGMENT_SCHEMA_NAME = "_root";
4
- export default function writeOneSchemaFile({ schemaOutAbsolutePath, schema, skipIfExists, }: {
5
- schemaOutAbsolutePath: string;
6
- schema: VovkSchema;
7
- skipIfExists?: boolean;
8
- }): Promise<{
9
- isCreated: boolean;
10
- diffResult: DiffResult | null;
11
- }>;
@@ -1,7 +0,0 @@
1
- import type { VovkSchema } from 'vovk';
2
- import type { ProjectInfo } from './getProjectInfo/index.mjs';
3
- import type { Segment } from './locateSegments.mjs';
4
- export default function generateClient(projectInfo: ProjectInfo, segments: Segment[], segmentsSchema: Record<string, VovkSchema>): Promise<{
5
- written: boolean;
6
- path: string;
7
- }>;
@@ -1,97 +0,0 @@
1
- import path from 'node:path';
2
- import fs from 'node:fs/promises';
3
- import formatLoggedSegmentName from './utils/formatLoggedSegmentName.mjs';
4
- import prettify from './utils/prettify.mjs';
5
- export default async function generateClient(projectInfo, segments, segmentsSchema) {
6
- const { config, cwd, log, validateOnClientImportPath, apiEntryPoint, fetcherClientImportPath, schemaOutImportPath } = projectInfo;
7
- const now = Date.now();
8
- const clientoOutDirAbsolutePath = path.join(cwd, config.clientOutDir);
9
- let dts = `// auto-generated
10
- /* eslint-disable */
11
- import type { clientizeController } from 'vovk/client';
12
- import type { promisifyWorker } from 'vovk/worker';
13
- import type { VovkClientFetcher } from 'vovk/client';
14
- import type fetcher from '${fetcherClientImportPath}';
15
-
16
- `;
17
- let js = `// auto-generated
18
- /* eslint-disable */
19
- const { clientizeController } = require('vovk/client');
20
- const { promisifyWorker } = require('vovk/worker');
21
- const { default: fetcher } = require('${fetcherClientImportPath}');
22
- const schema = require('${schemaOutImportPath}');
23
- `;
24
- let ts = `// auto-generated
25
- /* eslint-disable */
26
- import { clientizeController } from 'vovk/client';
27
- import { promisifyWorker } from 'vovk/worker';
28
- import type { VovkClientFetcher } from 'vovk/client';
29
- import fetcher from '${fetcherClientImportPath}';
30
- import schema from '${schemaOutImportPath}';
31
-
32
- `;
33
- for (let i = 0; i < segments.length; i++) {
34
- const { routeFilePath, segmentName } = segments[i];
35
- const schema = segmentsSchema[segmentName];
36
- if (!schema) {
37
- throw new Error(`Unable to generate client. No schema found for ${formatLoggedSegmentName(segmentName)}`);
38
- }
39
- if (!schema.emitSchema)
40
- continue;
41
- const importRouteFilePath = path.relative(config.clientOutDir, routeFilePath);
42
- dts += `import type { Controllers as Controllers${i}, Workers as Workers${i} } from "${importRouteFilePath}";\n`;
43
- ts += `import type { Controllers as Controllers${i}, Workers as Workers${i} } from "${importRouteFilePath}";\n`;
44
- }
45
- dts += `
46
- type Options = typeof fetcher extends VovkClientFetcher<infer U> ? U : never;
47
- `;
48
- ts += `
49
- ${validateOnClientImportPath ? `import validateOnClient from '${validateOnClientImportPath}';\n` : '\nconst validateOnClient = undefined;'}
50
- type Options = typeof fetcher extends VovkClientFetcher<infer U> ? U : never;
51
- const apiRoot = '${apiEntryPoint}';
52
- `;
53
- js += `
54
- const { default: validateOnClient = null } = ${validateOnClientImportPath ? `require('${validateOnClientImportPath}')` : '{}'};
55
- const apiRoot = '${apiEntryPoint}';
56
- `;
57
- for (let i = 0; i < segments.length; i++) {
58
- const { segmentName } = segments[i];
59
- const schema = segmentsSchema[segmentName];
60
- if (!schema) {
61
- throw new Error(`Unable to generate client. No schema found for ${formatLoggedSegmentName(segmentName)}`);
62
- }
63
- if (!schema.emitSchema)
64
- continue;
65
- for (const key of Object.keys(schema.controllers)) {
66
- dts += `export const ${key}: ReturnType<typeof clientizeController<Controllers${i}["${key}"], Options>>;\n`;
67
- js += `exports.${key} = clientizeController(schema['${segmentName}'].controllers.${key}, '${segmentName}', { fetcher, validateOnClient, defaultOptions: { apiRoot } });\n`;
68
- ts += `export const ${key} = clientizeController<Controllers${i}["${key}"], Options>(schema['${segmentName}'].controllers.${key}, '${segmentName}', { fetcher, validateOnClient, defaultOptions: { apiRoot } });\n`;
69
- }
70
- for (const key of Object.keys(schema.workers)) {
71
- dts += `export const ${key}: ReturnType<typeof promisifyWorker<Workers${i}["${key}"]>>;\n`;
72
- js += `exports.${key} = promisifyWorker(null, schema['${segmentName}'].workers.${key});\n`;
73
- ts += `export const ${key} = promisifyWorker<Workers${i}["${key}"]>(null, schema['${segmentName}'].workers.${key});\n`;
74
- }
75
- }
76
- const localJsAbsolutePath = path.join(clientoOutDirAbsolutePath, 'client.js');
77
- const localDtsAbsolutePath = path.join(clientoOutDirAbsolutePath, 'client.d.ts');
78
- const localTsAbsolutePath = path.join(clientoOutDirAbsolutePath, 'index.ts');
79
- const existingJs = await fs.readFile(localJsAbsolutePath, 'utf-8').catch(() => '');
80
- const existingDts = await fs.readFile(localDtsAbsolutePath, 'utf-8').catch(() => '');
81
- const existingTs = await fs.readFile(localTsAbsolutePath, 'utf-8').catch(() => '');
82
- if (config.prettifyClient) {
83
- js = await prettify(js, localJsAbsolutePath);
84
- dts = await prettify(dts, localDtsAbsolutePath);
85
- ts = await prettify(ts, localTsAbsolutePath);
86
- }
87
- if (existingJs === js && existingDts === dts && existingTs === ts) {
88
- log.debug(`Client is up to date and doesn't need to be regenerated (${Date.now() - now}ms)`);
89
- return { written: false, path: clientoOutDirAbsolutePath };
90
- }
91
- await fs.mkdir(clientoOutDirAbsolutePath, { recursive: true });
92
- await fs.writeFile(localJsAbsolutePath, js);
93
- await fs.writeFile(localDtsAbsolutePath, dts);
94
- await fs.writeFile(localTsAbsolutePath, ts);
95
- log.info(`Client generated in ${Date.now() - now}ms`);
96
- return { written: true, path: clientoOutDirAbsolutePath };
97
- }
@@ -1,11 +0,0 @@
1
- import type { VovkConfig } from '../types.mjs';
2
- export default function getConfig({ clientOutDir, cwd }: {
3
- clientOutDir?: string;
4
- cwd: string;
5
- }): Promise<{
6
- config: Required<VovkConfig>;
7
- srcRoot: string;
8
- configAbsolutePaths: string[];
9
- userConfig: VovkConfig | null;
10
- error: Error | undefined;
11
- }>;
@@ -1,29 +0,0 @@
1
- import getUserConfig from './getUserConfig.mjs';
2
- import getRelativeSrcRoot from './getRelativeSrcRoot.mjs';
3
- export default async function getConfig({ clientOutDir, cwd }) {
4
- const env = process.env;
5
- const { configAbsolutePaths, error, userConfig } = await getUserConfig({ cwd });
6
- const conf = userConfig ?? {};
7
- const srcRoot = await getRelativeSrcRoot({ cwd });
8
- const config = {
9
- modulesDir: env.VOVK_MODULES_DIR ?? conf.modulesDir ?? './' + [srcRoot, 'modules'].filter(Boolean).join('/'),
10
- validateOnClient: env.VOVK_VALIDATE_ON_CLIENT ?? conf.validateOnClient ?? null,
11
- validationLibrary: env.VOVK_VALIDATION_LIBRARY ?? conf.validationLibrary ?? null,
12
- fetcher: env.VOVK_FETCHER ?? conf.fetcher ?? 'vovk/client/defaultFetcher',
13
- schemaOutDir: env.VOVK_SCHEMA_OUT_DIR ?? conf.schemaOutDir ?? './.vovk-schema',
14
- clientOutDir: clientOutDir ?? env.VOVK_CLIENT_OUT_DIR ?? conf.clientOutDir ?? './node_modules/.vovk-client',
15
- origin: (env.VOVK_ORIGIN ?? conf.origin ?? '').replace(/\/$/, ''), // Remove trailing slash
16
- rootEntry: env.VOVK_ROOT_ENTRY ?? conf.rootEntry ?? 'api',
17
- rootSegmentModulesDirName: env.VOVK_ROOT_SEGMENT_MODULES_DIR_NAME ?? conf.rootSegmentModulesDirName ?? '',
18
- logLevel: env.VOVK_LOG_LEVEL ?? conf.logLevel ?? 'info',
19
- prettifyClient: (env.VOVK_PRETTIFY_CLIENT ? !!env.VOVK_PRETTIFY_CLIENT : null) ?? conf.prettifyClient ?? false,
20
- devHttps: (env.VOVK_DEV_HTTPS ? !!env.VOVK_DEV_HTTPS : null) ?? conf.devHttps ?? false,
21
- templates: {
22
- service: 'vovk-cli/templates/service.ejs',
23
- controller: 'vovk-cli/templates/controller.ejs',
24
- worker: 'vovk-cli/templates/worker.ejs',
25
- ...conf.templates,
26
- },
27
- };
28
- return { config, srcRoot, configAbsolutePaths, userConfig, error };
29
- }
@@ -1,4 +0,0 @@
1
- export default function getConfigAbsolutePaths({ cwd, relativePath, }: {
2
- cwd: string;
3
- relativePath?: string;
4
- }): Promise<string[]>;
@@ -1 +0,0 @@
1
- export {};
@@ -1,24 +0,0 @@
1
- import fs from 'node:fs/promises';
2
- import path from 'node:path';
3
- /**
4
- * Checks if a file exists at the given path.
5
- * @param {string} filePath - The path to the file.
6
- * @returns {Promise<boolean>} - A promise that resolves to true if the file exists, false otherwise.
7
- */
8
- const getFileSystemEntryType = async (filePath) => !!(await fs.stat(filePath).catch(() => false));
9
- async function postinstall() {
10
- const vovk = path.join(import.meta.dirname, '../../.vovk');
11
- const js = path.join(vovk, 'client.js');
12
- const ts = path.join(vovk, 'client.d.ts');
13
- const index = path.join(vovk, 'index.ts');
14
- if ((await getFileSystemEntryType(js)) ||
15
- (await getFileSystemEntryType(ts)) ||
16
- (await getFileSystemEntryType(index))) {
17
- return;
18
- }
19
- await fs.mkdir(vovk, { recursive: true });
20
- await fs.writeFile(js, '/* postinstall */');
21
- await fs.writeFile(ts, '/* postinstall */');
22
- await fs.writeFile(index, '/* postinstall */');
23
- }
24
- void postinstall();
@@ -1,52 +0,0 @@
1
- <% var modulePascalName = _.upperFirst(_.camelCase(moduleName)); %>
2
- <% var modulePascalNamePlural = pluralize(modulePascalName); %>
3
- <% var controllerName = modulePascalName + 'Controller'; %>
4
- <% var compiledName = modulePascalName + 'RPC'; %>
5
- <% var serviceName = modulePascalName + 'Service'; %>
6
- <% var prefix = pluralize(_.kebabCase(moduleName).toLowerCase()); %>
7
- ---
8
- dir: <%= getModuleDirName(segmentName, moduleName) %>
9
- fileName: <%= controllerName + '.ts' %>
10
- sourceName: <%= controllerName %>
11
- compiledName: <%= compiledName %>
12
- ---
13
-
14
- import { prefix, get, put, post, del, type VovkRequest } from 'vovk';
15
- <% if(withService) { %>
16
- import <%= serviceName %> from './<%= serviceName %>';
17
- <% } %>
18
-
19
- @prefix('<%= prefix %>')
20
- export default class <%= controllerName %> {
21
- @get()
22
- static get<%= modulePascalNamePlural %> = async (req: VovkRequest<null, { search: string }>) => {
23
- const search = req.nextUrl.searchParams.get('search');
24
- <% if(withService) { %>
25
- return <%= serviceName %>.get<%= modulePascalNamePlural %>(search);
26
- <% } else { %>
27
- return { results: [], search };
28
- <% } %>
29
- }
30
-
31
- @put(':id')
32
- static update<%= modulePascalName %> = async (req: VovkRequest<{ foo: 'bar' | 'baz' }, { q: string }>, params: { id: string }) => {
33
- const { id } = params;
34
- const body = await req.json();
35
- const q = req.nextUrl.searchParams.get('q');
36
- <% if(withService) { %>
37
- return <%= serviceName %>.update<%= modulePascalName %>(id, q, body);
38
- <% } else { %>
39
- return { id, body, q };
40
- <% } %>
41
- };
42
-
43
- @post()
44
- static create<%= modulePascalName %> = () => {
45
- // ...
46
- };
47
-
48
- @del(':id')
49
- static delete<%= modulePascalName %> = () => {
50
- // ...
51
- };
52
- }
@@ -1,27 +0,0 @@
1
- <% var modulePascalName = _.upperFirst(_.camelCase(moduleName)); %>
2
- <% var modulePascalNamePlural = pluralize(modulePascalName); %>
3
- <% var serviceName = modulePascalName + 'Service'; %>
4
- <% var controllerName = modulePascalName + 'Controller'; %>
5
- ---
6
- dir: <%= getModuleDirName(segmentName, moduleName) %>
7
- fileName: <%= serviceName + '.ts' %>
8
- ---
9
-
10
- import type { VovkControllerBody, VovkControllerQuery } from 'vovk';
11
- import type <%= controllerName %> from './<%= controllerName %>';
12
-
13
- export default class <%= serviceName %> {
14
- static get<%= modulePascalNamePlural %> = (search: VovkControllerQuery<typeof <%= controllerName %>.get<%= modulePascalNamePlural %>>['search']) => {
15
- return { results: [], search };
16
- };
17
-
18
- static update<%= modulePascalName %> = (
19
- id: string,
20
- q: VovkControllerQuery<typeof <%= controllerName %>.update<%= modulePascalName %>>['q'],
21
- body: VovkControllerBody<typeof <%= controllerName %>.update<%= modulePascalName %>>
22
- ) => {
23
- return { id, q, body };
24
- };
25
-
26
- // ...
27
- }
@@ -1,24 +0,0 @@
1
- <% var modulePascalName = _.upperFirst(_.camelCase(moduleName)); %>
2
- <% var modulePascalNamePlural = pluralize(modulePascalName); %>
3
- <% var workerName = modulePascalName + 'Worker'; %>
4
- <% var compiledName = modulePascalName + 'WPC'; %>
5
- ---
6
- dir: <%= getModuleDirName(segmentName, moduleName) %>
7
- fileName: <%= workerName + '.ts' %>
8
- sourceName: <%= workerName %>
9
- compiledName: <%= compiledName %>
10
- ---
11
- import { worker } from 'vovk';
12
-
13
- @worker()
14
- export default class <%= workerName %> {
15
- static heavyComputation = () => {
16
- return 'Hello, World';
17
- };
18
-
19
- static heavyComputationGenerator = function* () {
20
- for(const str of ['Hello', 'World'] as const) {
21
- yield str;
22
- }
23
- };
24
- }