@acip/cli 1.5.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 (64) hide show
  1. package/README.md +368 -0
  2. package/bin/acip.js +3 -0
  3. package/dist/commands/call.d.ts +3 -0
  4. package/dist/commands/call.d.ts.map +1 -0
  5. package/dist/commands/call.js +65 -0
  6. package/dist/commands/call.js.map +1 -0
  7. package/dist/commands/config.d.ts +3 -0
  8. package/dist/commands/config.d.ts.map +1 -0
  9. package/dist/commands/config.js +144 -0
  10. package/dist/commands/config.js.map +1 -0
  11. package/dist/commands/deploy.d.ts +3 -0
  12. package/dist/commands/deploy.d.ts.map +1 -0
  13. package/dist/commands/deploy.js +280 -0
  14. package/dist/commands/deploy.js.map +1 -0
  15. package/dist/commands/dev.d.ts +3 -0
  16. package/dist/commands/dev.d.ts.map +1 -0
  17. package/dist/commands/dev.js +218 -0
  18. package/dist/commands/dev.js.map +1 -0
  19. package/dist/commands/doctor.d.ts +3 -0
  20. package/dist/commands/doctor.d.ts.map +1 -0
  21. package/dist/commands/doctor.js +289 -0
  22. package/dist/commands/doctor.js.map +1 -0
  23. package/dist/commands/init.d.ts +3 -0
  24. package/dist/commands/init.d.ts.map +1 -0
  25. package/dist/commands/init.js +80 -0
  26. package/dist/commands/init.js.map +1 -0
  27. package/dist/commands/inspect.d.ts +3 -0
  28. package/dist/commands/inspect.d.ts.map +1 -0
  29. package/dist/commands/inspect.js +69 -0
  30. package/dist/commands/inspect.js.map +1 -0
  31. package/dist/commands/list.d.ts +3 -0
  32. package/dist/commands/list.d.ts.map +1 -0
  33. package/dist/commands/list.js +118 -0
  34. package/dist/commands/list.js.map +1 -0
  35. package/dist/commands/monitor.d.ts +3 -0
  36. package/dist/commands/monitor.d.ts.map +1 -0
  37. package/dist/commands/monitor.js +51 -0
  38. package/dist/commands/monitor.js.map +1 -0
  39. package/dist/commands/new.d.ts +3 -0
  40. package/dist/commands/new.d.ts.map +1 -0
  41. package/dist/commands/new.js +252 -0
  42. package/dist/commands/new.js.map +1 -0
  43. package/dist/index.d.ts +3 -0
  44. package/dist/index.d.ts.map +1 -0
  45. package/dist/index.js +79 -0
  46. package/dist/index.js.map +1 -0
  47. package/dist/utils/project.d.ts +13 -0
  48. package/dist/utils/project.d.ts.map +1 -0
  49. package/dist/utils/project.js +149 -0
  50. package/dist/utils/project.js.map +1 -0
  51. package/package.json +87 -0
  52. package/templates/.env.example.template +9 -0
  53. package/templates/.gitignore.template +31 -0
  54. package/templates/README.md.template +33 -0
  55. package/templates/advanced/src/components/assistant.js.template +66 -0
  56. package/templates/advanced/src/components/assistant.ts.template +71 -0
  57. package/templates/advanced/src/index.js.template +45 -0
  58. package/templates/advanced/src/index.ts.template +45 -0
  59. package/templates/basic/src/config/index.js.template +28 -0
  60. package/templates/basic/src/config/index.ts.template +28 -0
  61. package/templates/basic/src/index.js.template +29 -0
  62. package/templates/basic/src/index.ts.template +29 -0
  63. package/templates/package.json.template +21 -0
  64. package/templates/tsconfig.json.template +17 -0
@@ -0,0 +1,280 @@
1
+ import fs from 'fs-extra';
2
+ import path from 'path';
3
+ import chalk from 'chalk';
4
+ import ora from 'ora';
5
+ import { execSync } from 'child_process';
6
+ // 支持的环境类型
7
+ const ENVIRONMENTS = ['production', 'staging', 'development'];
8
+ export default function deployCommand(program) {
9
+ program
10
+ .command('deploy [environment]')
11
+ .description('Deploy ACIP application')
12
+ .option('--dry-run', 'Simulate deployment without making changes')
13
+ .option('--verbose', 'Show detailed output')
14
+ .option('--config <path>', 'Path to deployment config file')
15
+ .option('--force', 'Force deployment and ignore warnings')
16
+ .option('--no-build', 'Skip the build step')
17
+ .action(async (environment = 'production', options) => {
18
+ // 验证环境类型
19
+ if (!ENVIRONMENTS.includes(environment)) {
20
+ console.error(chalk.red(`Error: Invalid environment '${environment}'`));
21
+ console.log(`Available environments: ${ENVIRONMENTS.join(', ')}`);
22
+ return;
23
+ }
24
+ // 检查当前目录是否是ACIP项目
25
+ const projectRoot = process.cwd();
26
+ const packageJsonPath = path.join(projectRoot, 'package.json');
27
+ if (!await fs.pathExists(packageJsonPath)) {
28
+ console.error(chalk.red('Error: Not an ACIP project directory.'));
29
+ console.log(chalk.yellow('Run this command from the root of an ACIP project.'));
30
+ return;
31
+ }
32
+ console.log('');
33
+ console.log(chalk.blue.bold(`🚀 Deploying to ${chalk.bold(environment)} environment...\n`));
34
+ if (options.dryRun) {
35
+ console.log(chalk.yellow('📋 DRY RUN: No changes will be made.\n'));
36
+ }
37
+ try {
38
+ // 加载部署配置
39
+ const config = await loadDeploymentConfig(projectRoot, environment, options);
40
+ // 执行部署前检查
41
+ await runPreDeployChecks(projectRoot, options);
42
+ // 执行pre-deploy钩子
43
+ await runHooks(config.preDeployHooks || [], 'Pre-deploy', options);
44
+ // 构建应用
45
+ if (options.build !== false) {
46
+ await buildApplication(config, options);
47
+ }
48
+ else {
49
+ console.log(chalk.yellow('⏭️ Skipping build step.\n'));
50
+ }
51
+ // 执行部署
52
+ await performDeployment(environment, config, options);
53
+ // 执行post-deploy钩子
54
+ await runHooks(config.postDeployHooks || [], 'Post-deploy', options);
55
+ // 部署完成
56
+ displayDeploymentSummary(environment, options);
57
+ }
58
+ catch (error) {
59
+ console.error(chalk.red('\n❌ Deployment failed:'), error.message);
60
+ process.exit(1);
61
+ }
62
+ });
63
+ }
64
+ async function loadDeploymentConfig(projectRoot, environment, options) {
65
+ let config = { environment };
66
+ // 尝试加载配置文件
67
+ const configPath = options.config || path.join(projectRoot, `.acip/deploy.${environment}.json`);
68
+ if (await fs.pathExists(configPath)) {
69
+ const spinner = ora('Loading deployment configuration...').start();
70
+ try {
71
+ config = await fs.readJson(configPath);
72
+ config.environment = environment;
73
+ spinner.succeed('Configuration loaded successfully.');
74
+ }
75
+ catch (error) {
76
+ spinner.fail('Failed to load configuration file.');
77
+ throw new Error(`Invalid configuration file: ${error.message}`);
78
+ }
79
+ }
80
+ else {
81
+ console.log(chalk.yellow('⚠️ No deployment configuration found, using defaults.\n'));
82
+ }
83
+ return config;
84
+ }
85
+ async function runPreDeployChecks(projectRoot, options) {
86
+ console.log(chalk.cyan.bold('🔍 Running pre-deployment checks...\n'));
87
+ const checks = [
88
+ checkGitStatus,
89
+ checkPackageJson,
90
+ checkEnvironmentVariables,
91
+ checkDependencies
92
+ ];
93
+ for (const check of checks) {
94
+ await check(projectRoot, options);
95
+ }
96
+ console.log();
97
+ }
98
+ async function checkGitStatus(projectRoot, options) {
99
+ const spinner = ora('Checking git status...').start();
100
+ try {
101
+ const gitDir = path.join(projectRoot, '.git');
102
+ if (!await fs.pathExists(gitDir)) {
103
+ spinner.warn('Not a git repository (skipping git checks).');
104
+ return;
105
+ }
106
+ const status = execSync('git status --porcelain', { cwd: projectRoot, encoding: 'utf-8' });
107
+ if (status.trim() && !options.force) {
108
+ spinner.fail('Uncommitted changes detected.');
109
+ console.log(chalk.yellow('\nYou have uncommitted changes. Please commit or stash them first.'));
110
+ console.log(chalk.gray('Or use --force to deploy anyway.\n'));
111
+ throw new Error('Uncommitted changes detected');
112
+ }
113
+ spinner.succeed('Git status clean.');
114
+ }
115
+ catch (error) {
116
+ if (error.message === 'Uncommitted changes detected') {
117
+ throw error;
118
+ }
119
+ spinner.warn('Git check failed (continuing).');
120
+ }
121
+ }
122
+ async function checkPackageJson(projectRoot, options) {
123
+ const spinner = ora('Validating package.json...').start();
124
+ try {
125
+ const packageJson = await fs.readJson(path.join(projectRoot, 'package.json'));
126
+ if (!packageJson.name || !packageJson.version) {
127
+ spinner.fail('Invalid package.json: missing name or version.');
128
+ throw new Error('Invalid package.json');
129
+ }
130
+ if (options.verbose) {
131
+ console.log(chalk.dim(` Found: ${packageJson.name}@${packageJson.version}`));
132
+ }
133
+ spinner.succeed('package.json is valid.');
134
+ }
135
+ catch (error) {
136
+ spinner.fail('package.json validation failed.');
137
+ throw error;
138
+ }
139
+ }
140
+ async function checkEnvironmentVariables(projectRoot, options) {
141
+ const spinner = ora('Checking environment variables...').start();
142
+ const envExamplePath = path.join(projectRoot, '.env.example');
143
+ if (await fs.pathExists(envExamplePath)) {
144
+ spinner.succeed('Environment template found.');
145
+ }
146
+ else {
147
+ spinner.warn('No .env.example file found.');
148
+ }
149
+ }
150
+ async function checkDependencies(projectRoot, options) {
151
+ const spinner = ora('Checking dependencies...').start();
152
+ try {
153
+ const nodeModulesPath = path.join(projectRoot, 'node_modules');
154
+ if (!await fs.pathExists(nodeModulesPath)) {
155
+ spinner.fail('Dependencies not installed.');
156
+ throw new Error('Please run npm install first');
157
+ }
158
+ spinner.succeed('Dependencies installed.');
159
+ }
160
+ catch (error) {
161
+ spinner.fail('Dependency check failed.');
162
+ throw error;
163
+ }
164
+ }
165
+ async function runHooks(hooks, stage, options) {
166
+ if (hooks.length === 0)
167
+ return;
168
+ console.log(chalk.cyan.bold(`🔗 Running ${stage} hooks...\n`));
169
+ for (const hook of hooks) {
170
+ const spinner = ora(`Executing: ${hook}`).start();
171
+ if (options.dryRun) {
172
+ spinner.info(`Would execute: ${hook}`);
173
+ continue;
174
+ }
175
+ try {
176
+ execSync(hook, { stdio: options.verbose ? 'inherit' : 'pipe' });
177
+ spinner.succeed();
178
+ }
179
+ catch (error) {
180
+ spinner.fail();
181
+ throw new Error(`Hook failed: ${hook}`);
182
+ }
183
+ }
184
+ console.log();
185
+ }
186
+ async function buildApplication(config, options) {
187
+ console.log(chalk.cyan.bold('🔨 Building application...\n'));
188
+ const buildCommand = config.buildCommand || 'npm run build';
189
+ const spinner = ora(`Running: ${buildCommand}`).start();
190
+ if (options.dryRun) {
191
+ spinner.info(`Would run: ${buildCommand}`);
192
+ console.log();
193
+ return;
194
+ }
195
+ try {
196
+ execSync(buildCommand, { stdio: options.verbose ? 'inherit' : 'pipe' });
197
+ spinner.succeed('Build completed successfully.');
198
+ console.log();
199
+ }
200
+ catch (error) {
201
+ spinner.fail('Build failed.');
202
+ throw new Error(`Build command failed: ${buildCommand}`);
203
+ }
204
+ }
205
+ async function performDeployment(environment, config, options) {
206
+ console.log(chalk.cyan.bold('📦 Deploying application...\n'));
207
+ if (config.deployCommand) {
208
+ // 使用自定义部署命令
209
+ const spinner = ora(`Running: ${config.deployCommand}`).start();
210
+ if (options.dryRun) {
211
+ spinner.info(`Would run: ${config.deployCommand}`);
212
+ console.log();
213
+ return;
214
+ }
215
+ try {
216
+ execSync(config.deployCommand, { stdio: options.verbose ? 'inherit' : 'pipe' });
217
+ spinner.succeed('Deployment command executed successfully.');
218
+ }
219
+ catch (error) {
220
+ spinner.fail('Deployment command failed.');
221
+ throw error;
222
+ }
223
+ }
224
+ else {
225
+ // 模拟部署流程
226
+ const steps = [
227
+ { name: 'Validating configuration', time: 800 },
228
+ { name: 'Preparing assets', time: 1200 },
229
+ { name: 'Uploading files', time: 2500 },
230
+ { name: 'Updating services', time: 1000 },
231
+ { name: 'Running health checks', time: 1500 },
232
+ ];
233
+ for (const step of steps) {
234
+ const spinner = ora(step.name).start();
235
+ if (options.dryRun) {
236
+ spinner.info(step.name);
237
+ continue;
238
+ }
239
+ await new Promise(resolve => setTimeout(resolve, step.time));
240
+ spinner.succeed();
241
+ if (options.verbose) {
242
+ console.log(chalk.dim(` ✓ ${getRandomLogMessage()}`));
243
+ }
244
+ }
245
+ }
246
+ console.log();
247
+ }
248
+ function displayDeploymentSummary(environment, options) {
249
+ console.log(chalk.green.bold('✅ Deployment completed successfully!\n'));
250
+ const deploymentUrl = `https://${environment === 'production' ? 'app' : environment}.acip-example.com`;
251
+ console.log(chalk.bold('📋 Deployment Information:\n'));
252
+ console.log(` ${chalk.grey('Environment:')} ${chalk.cyan(environment)}`);
253
+ console.log(` ${chalk.grey('URL:')} ${chalk.cyan(deploymentUrl)}`);
254
+ console.log(` ${chalk.grey('Deploy ID:')} ${chalk.cyan(generateDeploymentId())}`);
255
+ console.log(` ${chalk.grey('Timestamp:')} ${chalk.cyan(new Date().toISOString())}`);
256
+ if (options.dryRun) {
257
+ console.log();
258
+ console.log(chalk.yellow('ℹ️ This was a dry run. No actual deployment was performed.'));
259
+ }
260
+ console.log();
261
+ }
262
+ function generateDeploymentId() {
263
+ return 'dpl_' + Math.random().toString(36).substring(2, 15);
264
+ }
265
+ function getRandomLogMessage() {
266
+ const messages = [
267
+ 'Optimizing asset compression',
268
+ 'Configuring CDN cache rules',
269
+ 'Setting up environment variables',
270
+ 'Updating service workers',
271
+ 'Running database migrations',
272
+ 'Configuring auto-scaling rules',
273
+ 'Setting up monitoring alerts',
274
+ 'Updating API gateway routes',
275
+ 'Configuring security policies',
276
+ 'Setting up CORS rules'
277
+ ];
278
+ return messages[Math.floor(Math.random() * messages.length)];
279
+ }
280
+ //# 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 default function devCommand(program: Command): void;
3
+ //# sourceMappingURL=dev.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"dev.d.ts","sourceRoot":"","sources":["../../src/commands/dev.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAoBpC,MAAM,CAAC,OAAO,UAAU,UAAU,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CA+BzD"}
@@ -0,0 +1,218 @@
1
+ import express from 'express';
2
+ import chalk from 'chalk';
3
+ import path from 'path';
4
+ import fs from 'fs-extra';
5
+ import chokidar from 'chokidar';
6
+ import open from 'open';
7
+ import swaggerJsdoc from 'swagger-jsdoc';
8
+ import swaggerUi from 'swagger-ui-express';
9
+ let restartPending = false;
10
+ let serverInstance = null;
11
+ export default function devCommand(program) {
12
+ program
13
+ .command('dev')
14
+ .description('Start a development server with hot reload')
15
+ .option('-p, --port <port>', 'Port to run the server on', (value) => parseInt(value, 10), 3000)
16
+ .option('-h, --host <host>', 'Host to run the server on', 'localhost')
17
+ .option('--https', 'Use HTTPS', false)
18
+ .option('-o, --open', 'Open in browser', false)
19
+ .option('--no-watch', 'Disable file watching')
20
+ .action(async (options) => {
21
+ console.log(chalk.blue.bold('\n🚀 Starting ACIP Development Server...\n'));
22
+ // Start the server
23
+ await startServer(options);
24
+ // Setup file watching if enabled
25
+ if (options.watch) {
26
+ setupFileWatcher(options);
27
+ }
28
+ // Open in browser if requested
29
+ if (options.open) {
30
+ const serverUrl = `${options.https ? 'https' : 'http'}://${options.host}:${options.port}`;
31
+ try {
32
+ await open(serverUrl);
33
+ console.log(chalk.green(`\n✓ Opened ${serverUrl} in browser\n`));
34
+ }
35
+ catch (error) {
36
+ console.log(chalk.yellow(`\n⚠ Could not open browser automatically\n`));
37
+ }
38
+ }
39
+ });
40
+ }
41
+ async function startServer(options) {
42
+ const app = express();
43
+ // Middleware
44
+ app.use(express.json());
45
+ app.use(express.urlencoded({ extended: true }));
46
+ // CORS for development
47
+ app.use((req, res, next) => {
48
+ res.header('Access-Control-Allow-Origin', '*');
49
+ res.header('Access-Control-Allow-Methods', 'GET, POST, PUT, DELETE, OPTIONS');
50
+ res.header('Access-Control-Allow-Headers', 'Content-Type, Authorization');
51
+ next();
52
+ });
53
+ // Health check endpoint
54
+ app.get('/health', (req, res) => {
55
+ res.json({
56
+ status: 'healthy',
57
+ timestamp: new Date().toISOString(),
58
+ uptime: process.uptime()
59
+ });
60
+ });
61
+ // Main API endpoint
62
+ app.get('/api', (req, res) => {
63
+ res.json({
64
+ message: 'ACIP Development Server is running!',
65
+ version: '1.0.0',
66
+ status: 'ready',
67
+ endpoints: {
68
+ health: '/health',
69
+ api: '/api',
70
+ test: '/api/test',
71
+ docs: '/api-docs'
72
+ }
73
+ });
74
+ });
75
+ // Test endpoint
76
+ app.post('/api/test', (req, res) => {
77
+ const { message } = req.body;
78
+ try {
79
+ res.json({
80
+ success: true,
81
+ echo: message || 'Hello from ACIP!',
82
+ timestamp: new Date().toISOString(),
83
+ received: req.body
84
+ });
85
+ }
86
+ catch (error) {
87
+ res.status(400).json({
88
+ success: false,
89
+ message: error.message
90
+ });
91
+ }
92
+ });
93
+ // Swagger documentation setup
94
+ const swaggerSpec = swaggerJsdoc({
95
+ definition: {
96
+ openapi: '3.0.0',
97
+ info: {
98
+ title: 'ACIP Development Server API',
99
+ version: '1.0.0',
100
+ description: 'Development API for ACIP projects'
101
+ },
102
+ servers: [
103
+ {
104
+ url: `http://${options.host}:${options.port}`,
105
+ description: 'Development server'
106
+ }
107
+ ]
108
+ },
109
+ apis: [] // Path to API docs (can be extended)
110
+ });
111
+ app.use('/api-docs', swaggerUi.serve, swaggerUi.setup(swaggerSpec));
112
+ // Serve static files from current directory
113
+ const projectRoot = process.cwd();
114
+ const publicDir = path.join(projectRoot, 'public');
115
+ if (await fs.pathExists(publicDir)) {
116
+ app.use(express.static(publicDir));
117
+ console.log(chalk.gray(` 📁 Serving static files from ${publicDir}`));
118
+ }
119
+ // 404 handler
120
+ app.use((req, res) => {
121
+ res.status(404).json({
122
+ error: 'Not Found',
123
+ path: req.path,
124
+ message: 'The requested endpoint does not exist'
125
+ });
126
+ });
127
+ // Error handler
128
+ app.use((err, req, res, next) => {
129
+ console.error(chalk.red('Error:'), err.message);
130
+ res.status(500).json({
131
+ error: 'Internal Server Error',
132
+ message: err.message
133
+ });
134
+ });
135
+ // Start listening
136
+ return new Promise((resolve) => {
137
+ serverInstance = app.listen(options.port, options.host, () => {
138
+ const serverUrl = `${options.https ? 'https' : 'http'}://${options.host}:${options.port}`;
139
+ console.log(chalk.green.bold('✓ Server started successfully!\n'));
140
+ console.log(chalk.cyan(' Local: ') + chalk.white(serverUrl));
141
+ console.log(chalk.cyan(' Network: ') + chalk.white(`http://localhost:${options.port}`));
142
+ console.log(chalk.cyan(' API Docs:') + chalk.white(`${serverUrl}/api-docs`));
143
+ console.log();
144
+ console.log(chalk.gray(' Press Ctrl+C to stop'));
145
+ if (options.watch) {
146
+ console.log(chalk.gray(' File watching enabled - server will reload on changes'));
147
+ }
148
+ console.log();
149
+ resolve();
150
+ });
151
+ });
152
+ }
153
+ function setupFileWatcher(options) {
154
+ const projectRoot = process.cwd();
155
+ const watchPaths = [
156
+ path.join(projectRoot, 'src/**/*.{ts,js,json}'),
157
+ path.join(projectRoot, 'public/**/*'),
158
+ path.join(projectRoot, 'package.json')
159
+ ];
160
+ console.log(chalk.blue('👀 Watching for file changes...\n'));
161
+ const watcher = chokidar.watch(watchPaths, {
162
+ ignored: [
163
+ '**/node_modules/**',
164
+ '**/dist/**',
165
+ '**/.git/**',
166
+ '**/coverage/**',
167
+ '**/*.test.{ts,js}'
168
+ ],
169
+ persistent: true,
170
+ ignoreInitial: true,
171
+ awaitWriteFinish: {
172
+ stabilityThreshold: 100,
173
+ pollInterval: 100
174
+ }
175
+ });
176
+ watcher.on('change', (filePath) => {
177
+ const relativePath = path.relative(projectRoot, filePath);
178
+ console.log(chalk.yellow(`\n📝 File changed: ${relativePath}`));
179
+ if (!restartPending) {
180
+ restartPending = true;
181
+ console.log(chalk.blue('⟳ Restarting server...\n'));
182
+ // Close existing server
183
+ if (serverInstance) {
184
+ serverInstance.close(async () => {
185
+ // Restart server
186
+ await startServer(options);
187
+ restartPending = false;
188
+ });
189
+ }
190
+ }
191
+ });
192
+ watcher.on('add', (filePath) => {
193
+ const relativePath = path.relative(projectRoot, filePath);
194
+ console.log(chalk.green(`\n➕ File added: ${relativePath}`));
195
+ });
196
+ watcher.on('unlink', (filePath) => {
197
+ const relativePath = path.relative(projectRoot, filePath);
198
+ console.log(chalk.red(`\n➖ File removed: ${relativePath}`));
199
+ });
200
+ watcher.on('error', (error) => {
201
+ console.error(chalk.red('\n❌ Watcher error:'), error.message);
202
+ });
203
+ // Graceful shutdown
204
+ process.on('SIGINT', () => {
205
+ console.log(chalk.yellow('\n\n⏹ Shutting down server...'));
206
+ watcher.close();
207
+ if (serverInstance) {
208
+ serverInstance.close(() => {
209
+ console.log(chalk.green('✓ Server stopped\n'));
210
+ process.exit(0);
211
+ });
212
+ }
213
+ else {
214
+ process.exit(0);
215
+ }
216
+ });
217
+ }
218
+ //# sourceMappingURL=dev.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"dev.js","sourceRoot":"","sources":["../../src/commands/dev.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ import { Command } from 'commander';
2
+ export default function doctorCommand(program: Command): void;
3
+ //# sourceMappingURL=doctor.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"doctor.d.ts","sourceRoot":"","sources":["../../src/commands/doctor.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAgBpC,MAAM,CAAC,OAAO,UAAU,aAAa,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAyE5D"}