@mattpeng/orbit-cli 0.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md ADDED
@@ -0,0 +1,16 @@
1
+ # Orbit CLI
2
+
3
+ A command-line interface for Orbit projects.
4
+
5
+ ## Usage
6
+
7
+ ```bash
8
+ # Initialize a new project
9
+ orbit init
10
+
11
+ # Start development server
12
+ orbit dev
13
+
14
+ # Get help
15
+ orbit --help
16
+ ```
@@ -0,0 +1,38 @@
1
+ import { Command } from 'commander';
2
+ export interface DeployConfig {
3
+ outputDirectory: string;
4
+ name: string;
5
+ routes?: Array<{
6
+ path: string;
7
+ target: string;
8
+ }>;
9
+ }
10
+ /**
11
+ * 加载部署配置文件
12
+ * 支持 JSON、MJS、JS 格式
13
+ */
14
+ export declare function loadConfig(): Promise<DeployConfig | null>;
15
+ /**
16
+ * 将目录压缩为 ZIP 文件
17
+ */
18
+ export declare function zipDirectory(sourceDir: string, outPath: string): Promise<void>;
19
+ export interface UploadResult {
20
+ deployment?: {
21
+ isActive: boolean;
22
+ id: string;
23
+ };
24
+ }
25
+ /**
26
+ * 上传 ZIP 文件到服务器
27
+ */
28
+ export declare function uploadToServer(zipPath: string, token: string, hash: string, branch: string, serverUrl: string): Promise<UploadResult>;
29
+ export interface GitInfo {
30
+ branch: string;
31
+ hash: string;
32
+ }
33
+ /**
34
+ * 获取 Git 信息
35
+ */
36
+ export declare function getGitInfo(): Promise<GitInfo>;
37
+ export declare const deployCommand: Command;
38
+ //# sourceMappingURL=deploy.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"deploy.d.ts","sourceRoot":"","sources":["../../src/commands/deploy.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAA;AAUnC,MAAM,WAAW,YAAY;IAC3B,eAAe,EAAE,MAAM,CAAA;IACvB,IAAI,EAAE,MAAM,CAAA;IACZ,MAAM,CAAC,EAAE,KAAK,CAAC;QACb,IAAI,EAAE,MAAM,CAAA;QACZ,MAAM,EAAE,MAAM,CAAA;KACf,CAAC,CAAA;CACH;AAED;;;GAGG;AACH,wBAAsB,UAAU,IAAI,OAAO,CAAC,YAAY,GAAG,IAAI,CAAC,CAsB/D;AAED;;GAEG;AACH,wBAAsB,YAAY,CAAC,SAAS,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAapF;AAED,MAAM,WAAW,YAAY;IAC3B,UAAU,CAAC,EAAE;QACX,QAAQ,EAAE,OAAO,CAAA;QACjB,EAAE,EAAE,MAAM,CAAA;KACX,CAAA;CACF;AAED;;GAEG;AACH,wBAAsB,cAAc,CAClC,OAAO,EAAE,MAAM,EACf,KAAK,EAAE,MAAM,EACb,IAAI,EAAE,MAAM,EACZ,MAAM,EAAE,MAAM,EACd,SAAS,EAAE,MAAM,GAChB,OAAO,CAAC,YAAY,CAAC,CA0BvB;AAED,MAAM,WAAW,OAAO;IACtB,MAAM,EAAE,MAAM,CAAA;IACd,IAAI,EAAE,MAAM,CAAA;CACb;AAED;;GAEG;AACH,wBAAsB,UAAU,IAAI,OAAO,CAAC,OAAO,CAAC,CAcnD;AAED,eAAO,MAAM,aAAa,SA2EtB,CAAA"}
@@ -0,0 +1,156 @@
1
+ import { Command } from 'commander';
2
+ import chalk from 'chalk';
3
+ import ora from 'ora';
4
+ import fs from 'fs/promises';
5
+ import path from 'path';
6
+ import archiver from 'archiver';
7
+ import { simpleGit } from 'simple-git';
8
+ const git = simpleGit();
9
+ /**
10
+ * 加载部署配置文件
11
+ * 支持 JSON、MJS、JS 格式
12
+ */
13
+ export async function loadConfig() {
14
+ const configFiles = ['orbit-deploy.json', 'orbit-deploy.mjs', 'orbit-deploy.js'];
15
+ for (const configFile of configFiles) {
16
+ const configPath = path.join(process.cwd(), configFile);
17
+ try {
18
+ await fs.access(configPath);
19
+ if (configFile.endsWith('.json')) {
20
+ const content = await fs.readFile(configPath, 'utf-8');
21
+ return JSON.parse(content);
22
+ }
23
+ else {
24
+ const module = await import(configPath);
25
+ return module.default || module;
26
+ }
27
+ }
28
+ catch (error) {
29
+ // 文件不存在,继续尝试下一个
30
+ continue;
31
+ }
32
+ }
33
+ return null;
34
+ }
35
+ /**
36
+ * 将目录压缩为 ZIP 文件
37
+ */
38
+ export async function zipDirectory(sourceDir, outPath) {
39
+ const archive = archiver('zip', { zlib: { level: 9 } });
40
+ const stream = require('fs').createWriteStream(outPath);
41
+ return new Promise((resolve, reject) => {
42
+ archive
43
+ .directory(sourceDir, false)
44
+ .on('error', err => reject(err))
45
+ .pipe(stream);
46
+ stream.on('close', () => resolve());
47
+ archive.finalize();
48
+ });
49
+ }
50
+ /**
51
+ * 上传 ZIP 文件到服务器
52
+ */
53
+ export async function uploadToServer(zipPath, token, hash, branch, serverUrl) {
54
+ // 读取 zip 文件并转换为 base64
55
+ const fileBuffer = await fs.readFile(zipPath);
56
+ const fileData = fileBuffer.toString('base64');
57
+ // 调用 tRPC 接口
58
+ const response = await fetch(`${serverUrl}/trpc/upload.deploy`, {
59
+ method: 'POST',
60
+ headers: {
61
+ 'Content-Type': 'application/json',
62
+ 'x-deploy-token': token,
63
+ },
64
+ body: JSON.stringify({
65
+ hash,
66
+ branch,
67
+ fileData,
68
+ }),
69
+ });
70
+ if (!response.ok) {
71
+ const error = await response.json();
72
+ throw new Error(error.error?.message || 'Upload failed');
73
+ }
74
+ const result = await response.json();
75
+ return result.result?.data || result;
76
+ }
77
+ /**
78
+ * 获取 Git 信息
79
+ */
80
+ export async function getGitInfo() {
81
+ const isRepo = await git.checkIsRepo();
82
+ if (!isRepo) {
83
+ return {
84
+ branch: 'main',
85
+ hash: Date.now().toString(),
86
+ };
87
+ }
88
+ const branch = await git.revparse(['--abbrev-ref', 'HEAD']);
89
+ const hash = await git.revparse(['HEAD']);
90
+ return { branch: branch.trim(), hash: hash.trim() };
91
+ }
92
+ export const deployCommand = new Command('deploy')
93
+ .description('Deploy static assets to Orbit platform')
94
+ .option('--token <token>', 'Deploy token (can also use DEPLOY_TOKEN env var)')
95
+ .option('--server <url>', 'Server URL', 'http://localhost:3001')
96
+ .action(async (options) => {
97
+ console.log(chalk.blue.bold('\n🚀 Orbit Deploy\n'));
98
+ const spinner = ora('Loading configuration...').start();
99
+ try {
100
+ // 1. 加载配置文件
101
+ const config = await loadConfig();
102
+ if (!config) {
103
+ spinner.fail('No deployment configuration found');
104
+ console.log(chalk.yellow('\nPlease create orbit-deploy.json or orbit-deploy.mjs in your project root.'));
105
+ return;
106
+ }
107
+ spinner.succeed('Configuration loaded');
108
+ // 2. 验证 token
109
+ const token = options.token || process.env.DEPLOY_TOKEN;
110
+ if (!token) {
111
+ spinner.fail('Deploy token is required');
112
+ console.log(chalk.yellow('\nUse --token option or set DEPLOY_TOKEN environment variable.'));
113
+ return;
114
+ }
115
+ // 3. 获取 Git 信息
116
+ spinner.start('Reading Git information...');
117
+ const { branch, hash } = await getGitInfo();
118
+ spinner.succeed(`Git info: ${branch}@${hash.substring(0, 7)}`);
119
+ // 4. 检查产物目录
120
+ const outputDir = path.join(process.cwd(), config.outputDirectory);
121
+ spinner.start('Checking output directory...');
122
+ try {
123
+ await fs.access(outputDir);
124
+ }
125
+ catch (error) {
126
+ spinner.fail(`Output directory not found: ${outputDir}`);
127
+ console.log(chalk.yellow('\nPlease build your project first.'));
128
+ return;
129
+ }
130
+ spinner.succeed('Output directory found');
131
+ // 5. 压缩产物
132
+ const zipPath = path.join(process.cwd(), `.orbit-deploy-${Date.now()}.zip`);
133
+ spinner.start('Compressing assets...');
134
+ await zipDirectory(outputDir, zipPath);
135
+ const stats = await fs.stat(zipPath);
136
+ spinner.succeed(`Assets compressed (${(stats.size / 1024 / 1024).toFixed(2)}MB)`);
137
+ // 6. 上传到服务器
138
+ spinner.start('Uploading to server...');
139
+ const result = await uploadToServer(zipPath, token, hash, branch, options.server);
140
+ spinner.succeed('Upload completed');
141
+ // 7. 清理临时文件
142
+ await fs.unlink(zipPath);
143
+ console.log(chalk.green('\n✓ Deployment successful!\n'));
144
+ console.log(chalk.cyan('Details:'));
145
+ console.log(chalk.gray(` Project: ${config.name}`));
146
+ console.log(chalk.gray(` Branch: ${branch}`));
147
+ console.log(chalk.gray(` Hash: ${hash.substring(0, 7)}`));
148
+ console.log(chalk.gray(` Active: ${result.deployment?.isActive ? 'Yes' : 'No'}\n`));
149
+ }
150
+ catch (error) {
151
+ spinner.fail('Deployment failed');
152
+ console.error(chalk.red(`\n✖ ${error.message}\n`));
153
+ process.exit(1);
154
+ }
155
+ });
156
+ //# sourceMappingURL=deploy.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"deploy.js","sourceRoot":"","sources":["../../src/commands/deploy.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ import { Command } from 'commander';
2
+ export declare const devCommand: Command;
3
+ //# sourceMappingURL=dev.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"dev.d.ts","sourceRoot":"","sources":["../../src/commands/dev.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAA;AAGnC,eAAO,MAAM,UAAU,SAMnB,CAAA"}
@@ -0,0 +1,10 @@
1
+ import { Command } from 'commander';
2
+ import chalk from 'chalk';
3
+ export const devCommand = new Command('dev')
4
+ .description('Start development server')
5
+ .option('-p, --port <port>', 'Port to run on', '3000')
6
+ .action(options => {
7
+ console.log(chalk.green(`\n🚀 Starting development server on port ${options.port}...\n`));
8
+ // Development server logic would go here
9
+ });
10
+ //# sourceMappingURL=dev.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"dev.js","sourceRoot":"","sources":["../../src/commands/dev.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAA;AACnC,OAAO,KAAK,MAAM,OAAO,CAAA;AAEzB,MAAM,CAAC,MAAM,UAAU,GAAG,IAAI,OAAO,CAAC,KAAK,CAAC;KACzC,WAAW,CAAC,0BAA0B,CAAC;KACvC,MAAM,CAAC,mBAAmB,EAAE,gBAAgB,EAAE,MAAM,CAAC;KACrD,MAAM,CAAC,OAAO,CAAC,EAAE;IAChB,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,4CAA4C,OAAO,CAAC,IAAI,OAAO,CAAC,CAAC,CAAA;IACzF,yCAAyC;AAC3C,CAAC,CAAC,CAAA"}
@@ -0,0 +1,3 @@
1
+ import { Command } from 'commander';
2
+ export declare const initCommand: Command;
3
+ //# sourceMappingURL=init.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"init.d.ts","sourceRoot":"","sources":["../../src/commands/init.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAA;AAKnC,eAAO,MAAM,WAAW,SAyCpB,CAAA"}
@@ -0,0 +1,41 @@
1
+ import { Command } from 'commander';
2
+ import prompts from 'prompts';
3
+ import chalk from 'chalk';
4
+ import ora from 'ora';
5
+ export const initCommand = new Command('init')
6
+ .description('Initialize a new Orbit project')
7
+ .action(async () => {
8
+ console.log(chalk.blue.bold('\n🚀 Orbit Project Initializer\n'));
9
+ const response = await prompts([
10
+ {
11
+ type: 'text',
12
+ name: 'projectName',
13
+ message: 'What is your project name?',
14
+ initial: 'my-orbit-app',
15
+ },
16
+ {
17
+ type: 'select',
18
+ name: 'template',
19
+ message: 'Choose a template:',
20
+ choices: [
21
+ { title: 'Full Stack (Web + Server)', value: 'fullstack' },
22
+ { title: 'Server Only', value: 'server' },
23
+ { title: 'Web Only', value: 'web' },
24
+ ],
25
+ initial: 0,
26
+ },
27
+ ]);
28
+ if (!response.projectName) {
29
+ console.log(chalk.red('✖ Project initialization cancelled'));
30
+ return;
31
+ }
32
+ const spinner = ora('Creating project...').start();
33
+ // Simulate project creation
34
+ await new Promise(resolve => setTimeout(resolve, 1500));
35
+ spinner.succeed(chalk.green(`✓ Project ${response.projectName} created successfully!`));
36
+ console.log(chalk.cyan('\nNext steps:'));
37
+ console.log(chalk.gray(` cd ${response.projectName}`));
38
+ console.log(chalk.gray(' pnpm install'));
39
+ console.log(chalk.gray(' pnpm dev\n'));
40
+ });
41
+ //# sourceMappingURL=init.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"init.js","sourceRoot":"","sources":["../../src/commands/init.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAA;AACnC,OAAO,OAAO,MAAM,SAAS,CAAA;AAC7B,OAAO,KAAK,MAAM,OAAO,CAAA;AACzB,OAAO,GAAG,MAAM,KAAK,CAAA;AAErB,MAAM,CAAC,MAAM,WAAW,GAAG,IAAI,OAAO,CAAC,MAAM,CAAC;KAC3C,WAAW,CAAC,gCAAgC,CAAC;KAC7C,MAAM,CAAC,KAAK,IAAI,EAAE;IACjB,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,kCAAkC,CAAC,CAAC,CAAA;IAEhE,MAAM,QAAQ,GAAG,MAAM,OAAO,CAAC;QAC7B;YACE,IAAI,EAAE,MAAM;YACZ,IAAI,EAAE,aAAa;YACnB,OAAO,EAAE,4BAA4B;YACrC,OAAO,EAAE,cAAc;SACxB;QACD;YACE,IAAI,EAAE,QAAQ;YACd,IAAI,EAAE,UAAU;YAChB,OAAO,EAAE,oBAAoB;YAC7B,OAAO,EAAE;gBACP,EAAE,KAAK,EAAE,2BAA2B,EAAE,KAAK,EAAE,WAAW,EAAE;gBAC1D,EAAE,KAAK,EAAE,aAAa,EAAE,KAAK,EAAE,QAAQ,EAAE;gBACzC,EAAE,KAAK,EAAE,UAAU,EAAE,KAAK,EAAE,KAAK,EAAE;aACpC;YACD,OAAO,EAAE,CAAC;SACX;KACF,CAAC,CAAA;IAEF,IAAI,CAAC,QAAQ,CAAC,WAAW,EAAE,CAAC;QAC1B,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,oCAAoC,CAAC,CAAC,CAAA;QAC5D,OAAM;IACR,CAAC;IAED,MAAM,OAAO,GAAG,GAAG,CAAC,qBAAqB,CAAC,CAAC,KAAK,EAAE,CAAA;IAElD,4BAA4B;IAC5B,MAAM,IAAI,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC,UAAU,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC,CAAA;IAEvD,OAAO,CAAC,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,aAAa,QAAQ,CAAC,WAAW,wBAAwB,CAAC,CAAC,CAAA;IAEvF,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC,CAAA;IACxC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,QAAQ,QAAQ,CAAC,WAAW,EAAE,CAAC,CAAC,CAAA;IACvD,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC,CAAA;IACzC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC,CAAA;AACzC,CAAC,CAAC,CAAA"}
@@ -0,0 +1,3 @@
1
+ #!/usr/bin/env node
2
+ export {};
3
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":""}
package/dist/index.js ADDED
@@ -0,0 +1,28 @@
1
+ #!/usr/bin/env node
2
+ import { Command } from 'commander';
3
+ import chalk from 'chalk';
4
+ import { APP_NAME } from '@orbit/shared';
5
+ import { initCommand } from './commands/init';
6
+ import { devCommand } from './commands/dev';
7
+ import { deployCommand } from './commands/deploy';
8
+ const program = new Command();
9
+ program
10
+ .name('orbit')
11
+ .description(`${APP_NAME} CLI - A powerful deployment toolkit`)
12
+ .version('0.0.1');
13
+ // Register commands
14
+ program.addCommand(initCommand);
15
+ program.addCommand(devCommand);
16
+ program.addCommand(deployCommand);
17
+ // Handle unknown commands
18
+ program.on('command:*', () => {
19
+ console.error(chalk.red('\n✖ Invalid command: %s\n'), program.args.join(' '));
20
+ program.help();
21
+ });
22
+ // Parse arguments
23
+ program.parse();
24
+ // Show help if no command provided
25
+ if (!process.argv.slice(2).length) {
26
+ program.outputHelp();
27
+ }
28
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AACA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAA;AACnC,OAAO,KAAK,MAAM,OAAO,CAAA;AACzB,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAA;AACxC,OAAO,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAA;AAC7C,OAAO,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAA;AAC3C,OAAO,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAA;AAEjD,MAAM,OAAO,GAAG,IAAI,OAAO,EAAE,CAAA;AAE7B,OAAO;KACJ,IAAI,CAAC,OAAO,CAAC;KACb,WAAW,CAAC,GAAG,QAAQ,sCAAsC,CAAC;KAC9D,OAAO,CAAC,OAAO,CAAC,CAAA;AAEnB,oBAAoB;AACpB,OAAO,CAAC,UAAU,CAAC,WAAW,CAAC,CAAA;AAC/B,OAAO,CAAC,UAAU,CAAC,UAAU,CAAC,CAAA;AAC9B,OAAO,CAAC,UAAU,CAAC,aAAa,CAAC,CAAA;AAEjC,0BAA0B;AAC1B,OAAO,CAAC,EAAE,CAAC,WAAW,EAAE,GAAG,EAAE;IAC3B,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,2BAA2B,CAAC,EAAE,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAA;IAC7E,OAAO,CAAC,IAAI,EAAE,CAAA;AAChB,CAAC,CAAC,CAAA;AAEF,kBAAkB;AAClB,OAAO,CAAC,KAAK,EAAE,CAAA;AAEf,mCAAmC;AACnC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC;IAClC,OAAO,CAAC,UAAU,EAAE,CAAA;AACtB,CAAC"}
package/package.json ADDED
@@ -0,0 +1,62 @@
1
+ {
2
+ "name": "@mattpeng/orbit-cli",
3
+ "version": "0.0.1",
4
+ "description": "Orbit CLI - A powerful deployment toolkit for frontend projects",
5
+ "type": "module",
6
+ "bin": {
7
+ "orbit": "./dist/index.js"
8
+ },
9
+ "files": [
10
+ "dist",
11
+ "README.md"
12
+ ],
13
+ "keywords": [
14
+ "deploy",
15
+ "deployment",
16
+ "cli",
17
+ "frontend",
18
+ "orbit"
19
+ ],
20
+ "author": "mattpeng",
21
+ "license": "MIT",
22
+ "repository": {
23
+ "type": "git",
24
+ "url": "https://github.com/mattpeng/orbit.git",
25
+ "directory": "packages/cli"
26
+ },
27
+ "publishConfig": {
28
+ "access": "public"
29
+ },
30
+ "scripts": {
31
+ "dev": "tsx watch src/index.ts",
32
+ "build": "tsc",
33
+ "start": "node dist/index.js",
34
+ "prepublishOnly": "pnpm build && pnpm test:run && pnpm type-check",
35
+ "test": "vitest",
36
+ "test:ui": "vitest --ui",
37
+ "test:run": "vitest run",
38
+ "test:coverage": "vitest run --coverage",
39
+ "type-check": "tsc --noEmit",
40
+ "lint": "eslint .",
41
+ "format": "prettier --write ."
42
+ },
43
+ "dependencies": {
44
+ "@orbit/shared": "workspace:*",
45
+ "archiver": "^7.0.1",
46
+ "chalk": "^5.4.1",
47
+ "commander": "^12.1.0",
48
+ "form-data": "^4.0.5",
49
+ "ora": "^8.1.1",
50
+ "prompts": "^2.4.2",
51
+ "simple-git": "^3.30.0"
52
+ },
53
+ "devDependencies": {
54
+ "@types/archiver": "^7.0.0",
55
+ "@types/node": "^22.10.2",
56
+ "@types/prompts": "^2.4.9",
57
+ "@vitest/ui": "^4.0.16",
58
+ "tsx": "^4.19.2",
59
+ "typescript": "^5.9.3",
60
+ "vitest": "^4.0.16"
61
+ }
62
+ }