vovk-cli 0.0.1-beta.31 → 0.0.1-beta.33

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.
@@ -15,7 +15,8 @@ export default async function getConfig({ clientOutDir, cwd }) {
15
15
  rootEntry: env.VOVK_ROOT_ENTRY ?? userConfig.rootEntry ?? 'api',
16
16
  rootSegmentModulesDirName: env.VOVK_ROOT_SEGMENT_MODULES_DIR_NAME ?? userConfig.rootSegmentModulesDirName ?? '',
17
17
  logLevel: env.VOVK_LOG_LEVEL ?? userConfig.logLevel ?? 'debug', // TODO: change to 'warn' when v3 is ready
18
- prettifyClient: userConfig.prettifyClient ?? false,
18
+ prettifyClient: (env.VOVK_PRETTIFY_CLIENT ? !!env.VOVK_PRETTIFY_CLIENT : null) ?? userConfig.prettifyClient ?? false,
19
+ devHttps: (env.VOVK_DEV_HTTPS ? !!env.VOVK_DEV_HTTPS : null) ?? userConfig.devHttps ?? false,
19
20
  templates: {
20
21
  service: 'vovk-cli/templates/service.ejs',
21
22
  controller: 'vovk-cli/templates/controller.ejs',
@@ -26,7 +26,7 @@ export default async function createConfig({ root, log, options: { validationLib
26
26
  Object.assign(templates, validationTemplates);
27
27
  }
28
28
  catch (error) {
29
- log.error(`Failed to fetch validation library templates: ${error.message}`);
29
+ log.warn(`Failed to fetch validation library templates: ${error.message}`);
30
30
  }
31
31
  }
32
32
  config.templates = templates;
@@ -3,4 +3,4 @@
3
3
  * @param packageName - The name of the NPM package.
4
4
  * @returns A promise that resolves to an array of file paths.
5
5
  */
6
- export default function getTemplatesFiles(packageName: string): Promise<Record<string, string>>;
6
+ export default function getTemplatesFiles(packageName: string, channel?: string): Promise<Record<string, string>>;
@@ -6,34 +6,30 @@ import { Readable } from 'stream';
6
6
  * @param packageName - The name of the NPM package.
7
7
  * @returns A promise that resolves to an array of file paths.
8
8
  */
9
- export default async function getTemplatesFiles(packageName) {
10
- try {
11
- // Fetch package metadata from the npm registry
12
- const metadataResponse = await fetch(`https://registry.npmjs.org/${encodeURIComponent(packageName)}`);
13
- if (!metadataResponse.ok) {
14
- throw new Error(`Failed to fetch package metadata: ${metadataResponse.statusText}`);
15
- }
16
- const metadata = (await metadataResponse.json());
17
- const latestVersion = metadata['dist-tags'].latest;
18
- const tarballUrl = metadata.versions[latestVersion].dist.tarball;
19
- // Fetch the tarball
20
- const tarballResponse = await fetch(tarballUrl);
21
- if (!tarballResponse.ok) {
22
- throw new Error(`Failed to fetch tarball: ${tarballResponse.statusText}`);
23
- }
24
- const tarballArrayBuffer = await tarballResponse.arrayBuffer();
25
- const tarballBuffer = Buffer.from(tarballArrayBuffer);
26
- // Extract the tarball in memory and collect template files
27
- const templateFiles = await extractTemplatesFromTarball(tarballBuffer);
28
- const entries = templateFiles
29
- .filter((fileName) => fileName.startsWith('/templates/') && !fileName.endsWith('/') && fileName.endsWith('.ejs'))
30
- .map((fileName) => [fileName.substring('/templates/'.length), `${packageName}${fileName}`]);
31
- return Object.fromEntries(entries);
9
+ export default async function getTemplatesFiles(packageName, channel = 'beta' // TODO change to latest
10
+ ) {
11
+ // Fetch package metadata from the npm registry
12
+ const metadataResponse = await fetch(`https://registry.npmjs.org/${encodeURIComponent(packageName)}`);
13
+ if (!metadataResponse.ok) {
14
+ throw new Error(`Failed to fetch package metadata: ${metadataResponse.statusText}`);
32
15
  }
33
- catch (error) {
34
- console.error('Error fetching templates files:', error);
35
- throw error;
16
+ const metadata = (await metadataResponse.json());
17
+ const latestVersion = metadata['dist-tags'][channel];
18
+ const tarballUrl = metadata.versions[latestVersion].dist.tarball;
19
+ // Fetch the tarball
20
+ const tarballResponse = await fetch(tarballUrl);
21
+ if (!tarballResponse.ok) {
22
+ throw new Error(`Failed to fetch tarball: ${tarballResponse.statusText}`);
36
23
  }
24
+ const tarballArrayBuffer = await tarballResponse.arrayBuffer();
25
+ const tarballBuffer = Buffer.from(tarballArrayBuffer);
26
+ // Extract the tarball in memory and collect template files
27
+ const templateFiles = await extractTemplatesFromTarball(tarballBuffer);
28
+ const entries = templateFiles
29
+ .filter((fileName) => fileName.startsWith('templates/') && !fileName.endsWith('/') && fileName.endsWith('.ejs'))
30
+ .map((fileName) => [fileName.substring('templates/'.length).replace(/\.ejs$/, ''), `${packageName}/${fileName}`]);
31
+ console.log(templateFiles);
32
+ return Object.fromEntries(entries);
37
33
  }
38
34
  /**
39
35
  * Extracts the templates from the tarball buffer.
@@ -46,6 +42,7 @@ function extractTemplatesFromTarball(tarballBuffer) {
46
42
  const files = [];
47
43
  extract.on('entry', (header, stream, next) => {
48
44
  const filePath = header.name;
45
+ console.log('filePath', filePath);
49
46
  // Check if the file is in the 'templates' folder
50
47
  if (filePath.startsWith('package/templates/')) {
51
48
  files.push(filePath.replace('package/', ''));
@@ -66,11 +63,3 @@ function extractTemplatesFromTarball(tarballBuffer) {
66
63
  tarballStream.pipe(gunzip).pipe(extract);
67
64
  });
68
65
  }
69
- // Example usage
70
- getTemplatesFiles('your-package-name')
71
- .then((files) => {
72
- console.log('Files in templates folder:', files);
73
- })
74
- .catch((err) => {
75
- console.error('Error:', err);
76
- });
@@ -80,7 +80,7 @@ export class Init {
80
80
  await Promise.all(configPaths.map((configPath) => fs.rm(configPath)));
81
81
  }
82
82
  if (validationLibrary) {
83
- dependencies.push(validationLibrary + '@beta');
83
+ dependencies.push(validationLibrary + '@beta'); // TODO: change to latest
84
84
  dependencies.push(...({
85
85
  'vovk-zod': ['zod'],
86
86
  'vovk-yup': ['yup'],
@@ -12,41 +12,41 @@ function getPackageManager(options) {
12
12
  }
13
13
  const packageManagerCommands = {
14
14
  npm: {
15
- install: (packages, installDir) => ({
15
+ dependencies: (packages, installDir) => ({
16
16
  command: 'npm',
17
17
  args: ['install', ...packages, '--prefix', installDir],
18
18
  }),
19
- installDev: (packages, installDir) => ({
19
+ devDependencies: (packages, installDir) => ({
20
20
  command: 'npm',
21
21
  args: ['install', '--save-dev', ...packages, '--prefix', installDir],
22
22
  }),
23
23
  },
24
24
  yarn: {
25
- install: (packages, installDir) => ({
25
+ dependencies: (packages, installDir) => ({
26
26
  command: 'yarn',
27
27
  args: ['add', ...packages, '--cwd', installDir],
28
28
  }),
29
- installDev: (packages, installDir) => ({
29
+ devDependencies: (packages, installDir) => ({
30
30
  command: 'yarn',
31
31
  args: ['add', '--dev', ...packages, '--cwd', installDir],
32
32
  }),
33
33
  },
34
34
  pnpm: {
35
- install: (packages, installDir) => ({
35
+ dependencies: (packages, installDir) => ({
36
36
  command: 'pnpm',
37
37
  args: ['install', ...packages, '--dir', installDir],
38
38
  }),
39
- installDev: (packages, installDir) => ({
39
+ devDependencies: (packages, installDir) => ({
40
40
  command: 'pnpm',
41
41
  args: ['install', ...packages, '--save-dev', '--dir', installDir],
42
42
  }),
43
43
  },
44
44
  bun: {
45
- install: (packages, installDir) => ({
45
+ dependencies: (packages, installDir) => ({
46
46
  command: 'bun',
47
47
  args: ['add', ...packages, '--cwd', installDir],
48
48
  }),
49
- installDev: (packages, installDir) => ({
49
+ devDependencies: (packages, installDir) => ({
50
50
  command: 'bun',
51
51
  args: ['add', '-d', ...packages, '--cwd', installDir],
52
52
  }),
@@ -55,10 +55,9 @@ const packageManagerCommands = {
55
55
  export default async function installDependencies({ log, installDir, dependencies, devDependencies, options, }) {
56
56
  const packageManager = getPackageManager(options);
57
57
  // Ensure commandName is typed as CommandName
58
- const installPackages = async (type, packages, commandName) => {
58
+ const installPackages = async (type, packages) => {
59
59
  if (packages.length > 0) {
60
- log.info(`Installing ${type} in ${installDir} using ${packageManager}...`);
61
- const installCommand = packageManagerCommands[packageManager][commandName](packages, installDir);
60
+ const installCommand = packageManagerCommands[packageManager][type](packages, installDir);
62
61
  const { command, args } = installCommand;
63
62
  await new Promise((resolve, reject) => {
64
63
  const child = spawn(command, args, {
@@ -79,6 +78,11 @@ export default async function installDependencies({ log, installDir, dependencie
79
78
  });
80
79
  }
81
80
  };
82
- await installPackages('dependencies', dependencies, 'install');
83
- await installPackages('devDependencies', devDependencies, 'installDev');
81
+ if (dependencies.length === 0 && devDependencies.length === 0) {
82
+ log.warn('No dependencies or devDependencies to install');
83
+ return;
84
+ }
85
+ log.info(`Installing dependencies and devDependencies at ${installDir} using ${packageManager}...`);
86
+ await installPackages('dependencies', dependencies);
87
+ await installPackages('devDependencies', devDependencies);
84
88
  }
@@ -0,0 +1 @@
1
+ export default function updateDependenciesWithoutInstalling(): Promise<void>;
@@ -0,0 +1 @@
1
+ export default async function updateDependenciesWithoutInstalling() { }
package/dist/types.d.mts CHANGED
@@ -13,6 +13,8 @@ export type VovkEnv = {
13
13
  VOVK_API_ENTRY_POINT?: string;
14
14
  VOVK_ROOT_SEGMENT_MODULES_DIR_NAME?: string;
15
15
  VOVK_LOG_LEVEL?: LogLevelNames;
16
+ VOVK_PRETTIFY_CLIENT?: string;
17
+ VOVK_DEV_HTTPS?: string;
16
18
  __VOVK_START_WATCHER_IN_STANDALONE_MODE__?: 'true';
17
19
  };
18
20
  export type VovkConfig = {
@@ -27,6 +29,7 @@ export type VovkConfig = {
27
29
  rootSegmentModulesDirName?: string;
28
30
  logLevel?: LogLevelNames;
29
31
  prettifyClient?: boolean;
32
+ devHttps?: boolean;
30
33
  templates?: {
31
34
  service?: string;
32
35
  controller?: string;
@@ -13,6 +13,7 @@ import isEmpty from 'lodash/isEmpty.js';
13
13
  import formatLoggedSegmentName from '../utils/formatLoggedSegmentName.mjs';
14
14
  import keyBy from 'lodash/keyBy.js';
15
15
  import capitalize from 'lodash/capitalize.js';
16
+ import { Agent, setGlobalDispatcher } from 'undici';
16
17
  export class VovkCLIWatcher {
17
18
  #projectInfo;
18
19
  #segments = [];
@@ -195,8 +196,9 @@ export class VovkCLIWatcher {
195
196
  }
196
197
  };
197
198
  #requestSchema = debounceWithArgs(async (segmentName) => {
198
- const { apiEntryPoint, log, port } = this.#projectInfo;
199
- const endpoint = `${apiEntryPoint.startsWith('http') ? apiEntryPoint : `http://localhost:${port}${apiEntryPoint}`}/${segmentName ? `${segmentName}/` : ''}_schema_`;
199
+ const { apiEntryPoint, log, port, config } = this.#projectInfo;
200
+ const { devHttps } = config;
201
+ const endpoint = `${apiEntryPoint.startsWith(`http${devHttps ? 's' : ''}://`) ? apiEntryPoint : `http${devHttps ? 's' : ''}://localhost:${port}${apiEntryPoint}`}/${segmentName ? `${segmentName}/` : ''}_schema_`;
200
202
  log.debug(`Requesting schema for ${formatLoggedSegmentName(segmentName)} at ${endpoint}`);
201
203
  const resp = await fetch(endpoint);
202
204
  if (resp.status !== 200) {
@@ -218,11 +220,11 @@ export class VovkCLIWatcher {
218
220
  }, 500);
219
221
  async #handleSchema(schema) {
220
222
  const { log, config, cwd } = this.#projectInfo;
221
- log.debug(`Handling received schema`);
222
223
  if (!schema) {
223
224
  log.warn('Segment schema is null');
224
225
  return;
225
226
  }
227
+ log.debug(`Handling received schema from ${formatLoggedSegmentName(schema.segmentName)}`);
226
228
  const schemaOutAbsolutePath = path.join(cwd, config.schemaOutDir);
227
229
  const segment = this.#segments.find((s) => s.segmentName === schema.segmentName);
228
230
  if (!segment) {
@@ -254,6 +256,14 @@ export class VovkCLIWatcher {
254
256
  async start({ clientOutDir } = {}) {
255
257
  this.#projectInfo = await getProjectInfo({ clientOutDir });
256
258
  const { log, config, cwd, apiDir } = this.#projectInfo;
259
+ if (config.devHttps) {
260
+ const agent = new Agent({
261
+ connect: {
262
+ rejectUnauthorized: false,
263
+ },
264
+ });
265
+ setGlobalDispatcher(agent);
266
+ }
257
267
  process.on('uncaughtException', (err) => {
258
268
  log.error(`Uncaught Exception: ${err.message}`);
259
269
  });
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "vovk-cli",
3
- "version": "0.0.1-beta.31",
3
+ "version": "0.0.1-beta.33",
4
4
  "bin": {
5
5
  "vovk": "./dist/index.mjs"
6
6
  },
@@ -10,7 +10,7 @@
10
10
  "prefix": ".",
11
11
  "scripts": {
12
12
  "build": "rm -rf dist tsconfig.build.tsbuildinfo && tsc -P tsconfig.build.json",
13
- "test": "npm run build && chmod +x ./dist/index.mjs && NODE_OPTIONS=\"--loader ts-node/esm\" TS_NODE_PROJECT=./tsconfig.test.json node --test test/**.mts",
13
+ "test": "npm run build && chmod +x ./dist/index.mjs && NODE_OPTIONS=\"--loader ts-node/esm\" TS_NODE_PROJECT=./tsconfig.test.json node --test --test-only test/**.mts",
14
14
  "ncu": "npm-check-updates -u",
15
15
  "npm-publish": "npm publish"
16
16
  },
@@ -31,7 +31,7 @@
31
31
  },
32
32
  "homepage": "https://vovk.dev",
33
33
  "peerDependencies": {
34
- "vovk": "^3.0.0-beta.32"
34
+ "vovk": "^3.0.0-beta.33"
35
35
  },
36
36
  "dependencies": {
37
37
  "@inquirer/prompts": "^5.5.0",
@@ -49,7 +49,8 @@
49
49
  "pluralize": "^8.0.0",
50
50
  "prettier": "^3.3.3",
51
51
  "tar-stream": "^3.1.7",
52
- "ts-morph": "^23.0.0"
52
+ "ts-morph": "^23.0.0",
53
+ "undici": "^6.19.8"
53
54
  },
54
55
  "devDependencies": {
55
56
  "@types/ejs": "^3.1.5",
@@ -11,8 +11,8 @@
11
11
  "next": "14.2.13",
12
12
  "react": "^18",
13
13
  "react-dom": "^18",
14
- "vovk": "^3.0.0-beta.29",
15
- "vovk-zod": "^1.0.0-beta.6",
14
+ "vovk": "^3.0.0-beta.33",
15
+ "vovk-zod": "^1.0.0-beta.10",
16
16
  "zod": "^3.23.8"
17
17
  },
18
18
  "devDependencies": {
@@ -20,7 +20,7 @@
20
20
  "@types/react": "^18",
21
21
  "@types/react-dom": "^18",
22
22
  "typescript": "^5",
23
- "vovk-cli": "^0.0.1-beta.26"
23
+ "vovk-cli": "^0.0.1-beta.32"
24
24
  }
25
25
  },
26
26
  "node_modules/@babel/runtime": {
@@ -105,9 +105,9 @@
105
105
  }
106
106
  },
107
107
  "node_modules/@inquirer/core/node_modules/@types/node": {
108
- "version": "22.7.3",
109
- "resolved": "https://registry.npmjs.org/@types/node/-/node-22.7.3.tgz",
110
- "integrity": "sha512-qXKfhXXqGTyBskvWEzJZPUxSslAiLaB6JGP1ic/XTH9ctGgzdgYguuLP1C601aRTSDNlLb0jbKqXjZ48GNraSA==",
108
+ "version": "22.7.4",
109
+ "resolved": "https://registry.npmjs.org/@types/node/-/node-22.7.4.tgz",
110
+ "integrity": "sha512-y+NPi1rFzDs1NdQHHToqeiX2TIS79SWEAw9GYhkkx8bD0ChpfqC+n2j5OXOCpzfojBEBt6DnEnnG9MY0zk1XLg==",
111
111
  "dev": true,
112
112
  "license": "MIT",
113
113
  "dependencies": {
@@ -650,9 +650,9 @@
650
650
  }
651
651
  },
652
652
  "node_modules/@types/node": {
653
- "version": "20.16.9",
654
- "resolved": "https://registry.npmjs.org/@types/node/-/node-20.16.9.tgz",
655
- "integrity": "sha512-rkvIVJxsOfBejxK7I0FO5sa2WxFmJCzoDwcd88+fq/CUfynNywTo/1/T6hyFz22CyztsnLS9nVlHOnTI36RH5w==",
653
+ "version": "20.16.10",
654
+ "resolved": "https://registry.npmjs.org/@types/node/-/node-20.16.10.tgz",
655
+ "integrity": "sha512-vQUKgWTjEIRFCvK6CyriPH3MZYiYlNy0fKiEYHWbcoWLEgs4opurGGKlebrTLqdSMIbXImH6XExNiIyNUv3WpA==",
656
656
  "dev": true,
657
657
  "license": "MIT",
658
658
  "dependencies": {
@@ -667,9 +667,9 @@
667
667
  "license": "MIT"
668
668
  },
669
669
  "node_modules/@types/react": {
670
- "version": "18.3.9",
671
- "resolved": "https://registry.npmjs.org/@types/react/-/react-18.3.9.tgz",
672
- "integrity": "sha512-+BpAVyTpJkNWWSSnaLBk6ePpHLOGJKnEQNbINNovPWzvEUyAe3e+/d494QdEh71RekM/qV7lw6jzf1HGrJyAtQ==",
670
+ "version": "18.3.10",
671
+ "resolved": "https://registry.npmjs.org/@types/react/-/react-18.3.10.tgz",
672
+ "integrity": "sha512-02sAAlBnP39JgXwkAq3PeU9DVaaGpZyF3MGcC0MKgQVkZor5IiiDAipVaxQHtDJAmO4GIy/rVBy/LzVj76Cyqg==",
673
673
  "dev": true,
674
674
  "license": "MIT",
675
675
  "dependencies": {
@@ -800,6 +800,13 @@
800
800
  "dev": true,
801
801
  "license": "MIT"
802
802
  },
803
+ "node_modules/b4a": {
804
+ "version": "1.6.7",
805
+ "resolved": "https://registry.npmjs.org/b4a/-/b4a-1.6.7.tgz",
806
+ "integrity": "sha512-OnAYlL5b7LEkALw87fUVafQw5rVR9RjwGd4KUwNQ6DrrNmaVaUCgLipfVlzrPQ4tWOR9P0IXGNOx50jYCCdSJg==",
807
+ "dev": true,
808
+ "license": "Apache-2.0"
809
+ },
803
810
  "node_modules/balanced-match": {
804
811
  "version": "1.0.2",
805
812
  "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz",
@@ -807,6 +814,14 @@
807
814
  "dev": true,
808
815
  "license": "MIT"
809
816
  },
817
+ "node_modules/bare-events": {
818
+ "version": "2.5.0",
819
+ "resolved": "https://registry.npmjs.org/bare-events/-/bare-events-2.5.0.tgz",
820
+ "integrity": "sha512-/E8dDe9dsbLyh2qrZ64PEPadOQ0F4gbl1sUJOrmph7xOiIxfY8vwab/4bFLh4Y88/Hk/ujKcrQKc+ps0mv873A==",
821
+ "dev": true,
822
+ "license": "Apache-2.0",
823
+ "optional": true
824
+ },
810
825
  "node_modules/binary-extensions": {
811
826
  "version": "2.3.0",
812
827
  "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.3.0.tgz",
@@ -1249,6 +1264,13 @@
1249
1264
  "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==",
1250
1265
  "license": "MIT"
1251
1266
  },
1267
+ "node_modules/fast-fifo": {
1268
+ "version": "1.3.2",
1269
+ "resolved": "https://registry.npmjs.org/fast-fifo/-/fast-fifo-1.3.2.tgz",
1270
+ "integrity": "sha512-/d9sfos4yxzpwkDkuN7k2SqFKtYNmCTzgfEpz82x34IM9/zc8KGxQoXg1liNC/izpRM/MBdt44Nmx41ZWqk+FQ==",
1271
+ "dev": true,
1272
+ "license": "MIT"
1273
+ },
1252
1274
  "node_modules/fast-glob": {
1253
1275
  "version": "3.3.2",
1254
1276
  "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.2.tgz",
@@ -2130,6 +2152,13 @@
2130
2152
  ],
2131
2153
  "license": "MIT"
2132
2154
  },
2155
+ "node_modules/queue-tick": {
2156
+ "version": "1.0.1",
2157
+ "resolved": "https://registry.npmjs.org/queue-tick/-/queue-tick-1.0.1.tgz",
2158
+ "integrity": "sha512-kJt5qhMxoszgU/62PLP1CJytzd2NKetjSRnyuj31fDd3Rlcz3fzlFdFLD1SItunPwyqEOkca6GbV612BWfaBag==",
2159
+ "dev": true,
2160
+ "license": "MIT"
2161
+ },
2133
2162
  "node_modules/react": {
2134
2163
  "version": "18.3.1",
2135
2164
  "resolved": "https://registry.npmjs.org/react/-/react-18.3.1.tgz",
@@ -2404,6 +2433,21 @@
2404
2433
  "node": ">=10.0.0"
2405
2434
  }
2406
2435
  },
2436
+ "node_modules/streamx": {
2437
+ "version": "2.20.1",
2438
+ "resolved": "https://registry.npmjs.org/streamx/-/streamx-2.20.1.tgz",
2439
+ "integrity": "sha512-uTa0mU6WUC65iUvzKH4X9hEdvSW7rbPxPtwfWiLMSj3qTdQbAiUboZTxauKfpFuGIGa1C2BYijZ7wgdUXICJhA==",
2440
+ "dev": true,
2441
+ "license": "MIT",
2442
+ "dependencies": {
2443
+ "fast-fifo": "^1.3.2",
2444
+ "queue-tick": "^1.0.1",
2445
+ "text-decoder": "^1.1.0"
2446
+ },
2447
+ "optionalDependencies": {
2448
+ "bare-events": "^2.2.0"
2449
+ }
2450
+ },
2407
2451
  "node_modules/string-width": {
2408
2452
  "version": "5.1.2",
2409
2453
  "resolved": "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz",
@@ -2550,6 +2594,28 @@
2550
2594
  "url": "https://github.com/chalk/supports-color?sponsor=1"
2551
2595
  }
2552
2596
  },
2597
+ "node_modules/tar-stream": {
2598
+ "version": "3.1.7",
2599
+ "resolved": "https://registry.npmjs.org/tar-stream/-/tar-stream-3.1.7.tgz",
2600
+ "integrity": "sha512-qJj60CXt7IU1Ffyc3NJMjh6EkuCFej46zUqJ4J7pqYlThyd9bO0XBTmcOIhSzZJVWfsLks0+nle/j538YAW9RQ==",
2601
+ "dev": true,
2602
+ "license": "MIT",
2603
+ "dependencies": {
2604
+ "b4a": "^1.6.4",
2605
+ "fast-fifo": "^1.2.0",
2606
+ "streamx": "^2.15.0"
2607
+ }
2608
+ },
2609
+ "node_modules/text-decoder": {
2610
+ "version": "1.2.0",
2611
+ "resolved": "https://registry.npmjs.org/text-decoder/-/text-decoder-1.2.0.tgz",
2612
+ "integrity": "sha512-n1yg1mOj9DNpk3NeZOx7T6jchTbyJS3i3cucbNN6FcdPriMZx7NsgrGpWWdWZZGxD7ES1XB+3uoqHMgOKaN+fg==",
2613
+ "dev": true,
2614
+ "license": "Apache-2.0",
2615
+ "dependencies": {
2616
+ "b4a": "^1.6.4"
2617
+ }
2618
+ },
2553
2619
  "node_modules/tmp": {
2554
2620
  "version": "0.0.33",
2555
2621
  "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.33.tgz",
@@ -2659,18 +2725,18 @@
2659
2725
  }
2660
2726
  },
2661
2727
  "node_modules/vovk": {
2662
- "version": "3.0.0-beta.29",
2663
- "resolved": "https://registry.npmjs.org/vovk/-/vovk-3.0.0-beta.29.tgz",
2664
- "integrity": "sha512-8LAdt3bj0KT6JWFc1pdbhfBUWC8G9ePYruY84/131NeClfYkNnS0mD8ph4+BfPQwpsXwqphAfHn56MSLhihrAA==",
2728
+ "version": "3.0.0-beta.33",
2729
+ "resolved": "https://registry.npmjs.org/vovk/-/vovk-3.0.0-beta.33.tgz",
2730
+ "integrity": "sha512-Idrrn5NZz4uYf84GUq6Rm31AeytUejxCNDqORwMezM2omTEVKPaH65tcifOlVBbd3/9N5a13YWoE36T5PBR3mg==",
2665
2731
  "license": "MIT",
2666
2732
  "peerDependencies": {
2667
2733
  "next": "*"
2668
2734
  }
2669
2735
  },
2670
2736
  "node_modules/vovk-cli": {
2671
- "version": "0.0.1-beta.26",
2672
- "resolved": "https://registry.npmjs.org/vovk-cli/-/vovk-cli-0.0.1-beta.26.tgz",
2673
- "integrity": "sha512-6IUw4A1j+Vu6ObH/zKpxNLOeP1akXnB3vf1LGT3zSBV8YLb2j3S5yammqVbZznbDkwLr8GwhUioYmO1p+Gsm1Q==",
2737
+ "version": "0.0.1-beta.32",
2738
+ "resolved": "https://registry.npmjs.org/vovk-cli/-/vovk-cli-0.0.1-beta.32.tgz",
2739
+ "integrity": "sha512-GPVO4NmCYUUH733PP2q91wevTyVJ3bEzmLqXhwaT3fuoyHOrpl5TSHrwGn6HGIxcAqCKUnGNIAEK9pXvcCkVbw==",
2674
2740
  "dev": true,
2675
2741
  "license": "MIT",
2676
2742
  "dependencies": {
@@ -2688,39 +2754,40 @@
2688
2754
  "loglevel": "^1.9.2",
2689
2755
  "pluralize": "^8.0.0",
2690
2756
  "prettier": "^3.3.3",
2757
+ "tar-stream": "^3.1.7",
2691
2758
  "ts-morph": "^23.0.0"
2692
2759
  },
2693
2760
  "bin": {
2694
2761
  "vovk": "dist/index.mjs"
2695
2762
  },
2696
2763
  "peerDependencies": {
2697
- "vovk": "^3.0.0-beta.29"
2764
+ "vovk": "^3.0.0-beta.33"
2698
2765
  }
2699
2766
  },
2700
2767
  "node_modules/vovk-validate-client-ajv": {
2701
- "version": "0.0.0-beta.8",
2702
- "resolved": "https://registry.npmjs.org/vovk-validate-client-ajv/-/vovk-validate-client-ajv-0.0.0-beta.8.tgz",
2703
- "integrity": "sha512-p7jZtKa/wnDq4zY3f3/ckVMEB6BWYxoW8n+tKfTHdKfFm5cqAvbNV5pEUq0yQ+OXhBei1BaRX0nCCIWojfmCrg==",
2768
+ "version": "0.0.0-beta.12",
2769
+ "resolved": "https://registry.npmjs.org/vovk-validate-client-ajv/-/vovk-validate-client-ajv-0.0.0-beta.12.tgz",
2770
+ "integrity": "sha512-cFb3pa6+7XxBh0W7iEflD1RYPOqXjE7p+zDIonjefDj+0gEQV/3YhQSTwUwuOqUw0TGsy7NohD6n4TcbIBHlQA==",
2704
2771
  "license": "MIT",
2705
2772
  "dependencies": {
2706
2773
  "ajv": "^8.17.1",
2707
2774
  "ajv-formats": "^3.0.1"
2708
2775
  },
2709
2776
  "peerDependencies": {
2710
- "vovk": "^3.0.0-beta.26"
2777
+ "vovk": "^3.0.0-beta.33"
2711
2778
  }
2712
2779
  },
2713
2780
  "node_modules/vovk-zod": {
2714
- "version": "1.0.0-beta.6",
2715
- "resolved": "https://registry.npmjs.org/vovk-zod/-/vovk-zod-1.0.0-beta.6.tgz",
2716
- "integrity": "sha512-DXSLAwXoEZBELAGy7cDF/+FiApJ6g729aWlc77KoaatCISM/RUUWvJqrH94slf3uHeKYLSc3Z2xSgRvIwrAn1w==",
2781
+ "version": "1.0.0-beta.10",
2782
+ "resolved": "https://registry.npmjs.org/vovk-zod/-/vovk-zod-1.0.0-beta.10.tgz",
2783
+ "integrity": "sha512-Kg8g9QsEbipVk961qj2OUQws2OT5XTWQ/LNmXSC0985Ym7fNXjJzs5zJbYQck51yrswoM+3ek8QP7vRuRnjiRw==",
2717
2784
  "license": "MIT",
2718
2785
  "dependencies": {
2719
- "vovk-validate-client-ajv": "^0.0.0-beta.8",
2786
+ "vovk-validate-client-ajv": "^0.0.0-beta.12",
2720
2787
  "zod-to-json-schema": "^3.23.2"
2721
2788
  },
2722
2789
  "peerDependencies": {
2723
- "vovk": "^3.0.0-beta.26",
2790
+ "vovk": "^3.0.0-beta.33",
2724
2791
  "zod": "*"
2725
2792
  }
2726
2793
  },
@@ -10,8 +10,8 @@
10
10
  "next": "14.2.13",
11
11
  "react": "^18",
12
12
  "react-dom": "^18",
13
- "vovk": "^3.0.0-beta.29",
14
- "vovk-zod": "^1.0.0-beta.6",
13
+ "vovk": "^3.0.0-beta.33",
14
+ "vovk-zod": "^1.0.0-beta.10",
15
15
  "zod": "^3.23.8"
16
16
  },
17
17
  "devDependencies": {
@@ -19,6 +19,6 @@
19
19
  "@types/react": "^18",
20
20
  "@types/react-dom": "^18",
21
21
  "typescript": "^5",
22
- "vovk-cli": "^0.0.1-beta.26"
22
+ "vovk-cli": "^0.0.1-beta.32"
23
23
  }
24
24
  }
@@ -3,8 +3,8 @@ const config = {
3
3
  validationLibrary: 'vovk-zod',
4
4
  validateOnClient: 'vovk-zod/validateOnClient',
5
5
  templates: {
6
- controller: 'vovk-cli/templates/controller.ejs',
7
- service: 'vovk-cli/templates/service.ejs',
6
+ controller: 'vovk-zod/templates/controller.ejs',
7
+ service: 'vovk-zod/templates/service.ejs',
8
8
  worker: 'vovk-cli/templates/worker.ejs',
9
9
  },
10
10
  };