@veloxts/cli 0.1.0 → 0.2.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.
- package/README.md +7 -5
- package/package.json +6 -6
- package/dist/cli.d.ts +0 -8
- package/dist/cli.d.ts.map +0 -1
- package/dist/cli.js +0 -46
- package/dist/cli.js.map +0 -1
- package/dist/commands/dev.d.ts +0 -11
- package/dist/commands/dev.d.ts.map +0 -1
- package/dist/commands/dev.js +0 -130
- package/dist/commands/dev.js.map +0 -1
- package/dist/commands/migrate.d.ts +0 -11
- package/dist/commands/migrate.d.ts.map +0 -1
- package/dist/commands/migrate.js +0 -132
- package/dist/commands/migrate.js.map +0 -1
- package/dist/index.d.ts +0 -33
- package/dist/index.d.ts.map +0 -1
- package/dist/index.js +0 -33
- package/dist/index.js.map +0 -1
- package/dist/utils/output.d.ts +0 -50
- package/dist/utils/output.d.ts.map +0 -1
- package/dist/utils/output.js +0 -78
- package/dist/utils/output.js.map +0 -1
- package/dist/utils/paths.d.ts +0 -22
- package/dist/utils/paths.d.ts.map +0 -1
- package/dist/utils/paths.js +0 -53
- package/dist/utils/paths.js.map +0 -1
package/README.md
CHANGED
|
@@ -1,6 +1,8 @@
|
|
|
1
1
|
# @veloxts/cli
|
|
2
2
|
|
|
3
|
-
|
|
3
|
+
> **Alpha Release** - This framework is in early development. APIs may change between versions. Not recommended for production use yet.
|
|
4
|
+
|
|
5
|
+
Command-line interface for the VeloxTS Framework.
|
|
4
6
|
|
|
5
7
|
## Installation
|
|
6
8
|
|
|
@@ -31,14 +33,14 @@ velox dev
|
|
|
31
33
|
|
|
32
34
|
**Options:**
|
|
33
35
|
|
|
34
|
-
- `-p, --port <port>` - Port to listen on (default:
|
|
36
|
+
- `-p, --port <port>` - Port to listen on (default: 3210)
|
|
35
37
|
- `-H, --host <host>` - Host to bind to (default: localhost)
|
|
36
38
|
- `-e, --entry <file>` - Entry point file (auto-detected if not specified)
|
|
37
39
|
|
|
38
40
|
**Examples:**
|
|
39
41
|
|
|
40
42
|
```bash
|
|
41
|
-
# Start on default port
|
|
43
|
+
# Start on default port 3210
|
|
42
44
|
velox dev
|
|
43
45
|
|
|
44
46
|
# Start on custom port
|
|
@@ -94,7 +96,7 @@ pnpm type-check
|
|
|
94
96
|
- Automatic entry point detection
|
|
95
97
|
- Graceful shutdown handling (Ctrl+C)
|
|
96
98
|
- Helpful error messages with suggestions
|
|
97
|
-
-
|
|
99
|
+
- Intuitive command design
|
|
98
100
|
- Built with Commander.js and Clack
|
|
99
101
|
|
|
100
102
|
## Architecture
|
|
@@ -124,7 +126,7 @@ Or ensure your project has one of these files:
|
|
|
124
126
|
### Port Already in Use
|
|
125
127
|
|
|
126
128
|
```
|
|
127
|
-
Error: Port
|
|
129
|
+
Error: Port 3210 is already in use
|
|
128
130
|
```
|
|
129
131
|
|
|
130
132
|
**Solution:** Use a different port:
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@veloxts/cli",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.2.0",
|
|
4
4
|
"description": "Developer tooling and CLI commands for VeloxTS framework",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "dist/index.js",
|
|
@@ -23,11 +23,11 @@
|
|
|
23
23
|
"@clack/prompts": "0.11.0",
|
|
24
24
|
"picocolors": "1.1.1",
|
|
25
25
|
"tsx": "4.21.0",
|
|
26
|
-
"@veloxts/core": "0.
|
|
27
|
-
"@veloxts/router": "0.
|
|
28
|
-
"@veloxts/validation": "0.
|
|
29
|
-
"@veloxts/orm": "0.
|
|
30
|
-
"@veloxts/auth": "0.
|
|
26
|
+
"@veloxts/core": "0.2.0",
|
|
27
|
+
"@veloxts/router": "0.2.0",
|
|
28
|
+
"@veloxts/validation": "0.2.0",
|
|
29
|
+
"@veloxts/orm": "0.2.0",
|
|
30
|
+
"@veloxts/auth": "0.2.0"
|
|
31
31
|
},
|
|
32
32
|
"devDependencies": {
|
|
33
33
|
"@types/node": "24.10.1",
|
package/dist/cli.d.ts
DELETED
package/dist/cli.d.ts.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"cli.d.ts","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":";AAEA;;;;GAIG"}
|
package/dist/cli.js
DELETED
|
@@ -1,46 +0,0 @@
|
|
|
1
|
-
#!/usr/bin/env node
|
|
2
|
-
/**
|
|
3
|
-
* VeloxTS CLI - Main entry point
|
|
4
|
-
*
|
|
5
|
-
* A beautiful, Laravel-inspired command-line interface for the VeloxTS Framework
|
|
6
|
-
*/
|
|
7
|
-
import { Command } from 'commander';
|
|
8
|
-
import { createDevCommand } from './commands/dev.js';
|
|
9
|
-
import { createMigrateCommand } from './commands/migrate.js';
|
|
10
|
-
import { CLI_VERSION } from './index.js';
|
|
11
|
-
/**
|
|
12
|
-
* Create the main CLI program
|
|
13
|
-
*/
|
|
14
|
-
function createCLI() {
|
|
15
|
-
const program = new Command();
|
|
16
|
-
program
|
|
17
|
-
.name('velox')
|
|
18
|
-
.description('VeloxTS Framework - Laravel-inspired TypeScript full-stack framework')
|
|
19
|
-
.version(CLI_VERSION, '-v, --version', 'Output the current version')
|
|
20
|
-
.helpOption('-h, --help', 'Display help for command');
|
|
21
|
-
// Register commands
|
|
22
|
-
program.addCommand(createDevCommand(CLI_VERSION));
|
|
23
|
-
program.addCommand(createMigrateCommand());
|
|
24
|
-
return program;
|
|
25
|
-
}
|
|
26
|
-
/**
|
|
27
|
-
* Main entry point
|
|
28
|
-
*/
|
|
29
|
-
async function main() {
|
|
30
|
-
const program = createCLI();
|
|
31
|
-
try {
|
|
32
|
-
await program.parseAsync(process.argv);
|
|
33
|
-
}
|
|
34
|
-
catch (error) {
|
|
35
|
-
if (error instanceof Error) {
|
|
36
|
-
console.error(`Error: ${error.message}`);
|
|
37
|
-
}
|
|
38
|
-
else {
|
|
39
|
-
console.error('An unknown error occurred');
|
|
40
|
-
}
|
|
41
|
-
process.exit(1);
|
|
42
|
-
}
|
|
43
|
-
}
|
|
44
|
-
// Run the CLI
|
|
45
|
-
main();
|
|
46
|
-
//# sourceMappingURL=cli.js.map
|
package/dist/cli.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":";AAEA;;;;GAIG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAEpC,OAAO,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAC;AACrD,OAAO,EAAE,oBAAoB,EAAE,MAAM,uBAAuB,CAAC;AAC7D,OAAO,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAEzC;;GAEG;AACH,SAAS,SAAS;IAChB,MAAM,OAAO,GAAG,IAAI,OAAO,EAAE,CAAC;IAE9B,OAAO;SACJ,IAAI,CAAC,OAAO,CAAC;SACb,WAAW,CAAC,sEAAsE,CAAC;SACnF,OAAO,CAAC,WAAW,EAAE,eAAe,EAAE,4BAA4B,CAAC;SACnE,UAAU,CAAC,YAAY,EAAE,0BAA0B,CAAC,CAAC;IAExD,oBAAoB;IACpB,OAAO,CAAC,UAAU,CAAC,gBAAgB,CAAC,WAAW,CAAC,CAAC,CAAC;IAClD,OAAO,CAAC,UAAU,CAAC,oBAAoB,EAAE,CAAC,CAAC;IAE3C,OAAO,OAAO,CAAC;AACjB,CAAC;AAED;;GAEG;AACH,KAAK,UAAU,IAAI;IACjB,MAAM,OAAO,GAAG,SAAS,EAAE,CAAC;IAE5B,IAAI,CAAC;QACH,MAAM,OAAO,CAAC,UAAU,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;IACzC,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,IAAI,KAAK,YAAY,KAAK,EAAE,CAAC;YAC3B,OAAO,CAAC,KAAK,CAAC,UAAU,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC;QAC3C,CAAC;aAAM,CAAC;YACN,OAAO,CAAC,KAAK,CAAC,2BAA2B,CAAC,CAAC;QAC7C,CAAC;QACD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;AACH,CAAC;AAED,cAAc;AACd,IAAI,EAAE,CAAC"}
|
package/dist/commands/dev.d.ts
DELETED
|
@@ -1,11 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Dev command - Start development server with hot reload
|
|
3
|
-
*
|
|
4
|
-
* Inspired by Laravel's `php artisan serve` and Vite's dev server
|
|
5
|
-
*/
|
|
6
|
-
import { Command } from 'commander';
|
|
7
|
-
/**
|
|
8
|
-
* Create the dev command
|
|
9
|
-
*/
|
|
10
|
-
export declare function createDevCommand(version: string): Command;
|
|
11
|
-
//# sourceMappingURL=dev.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"dev.d.ts","sourceRoot":"","sources":["../../src/commands/dev.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAKH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAmBpC;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CASzD"}
|
package/dist/commands/dev.js
DELETED
|
@@ -1,130 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Dev command - Start development server with hot reload
|
|
3
|
-
*
|
|
4
|
-
* Inspired by Laravel's `php artisan serve` and Vite's dev server
|
|
5
|
-
*/
|
|
6
|
-
import { spawn } from 'node:child_process';
|
|
7
|
-
import * as p from '@clack/prompts';
|
|
8
|
-
import { Command } from 'commander';
|
|
9
|
-
import pc from 'picocolors';
|
|
10
|
-
import { error, formatCommand, formatPath, info, instruction, printBanner, } from '../utils/output.js';
|
|
11
|
-
import { findEntryPoint, isVeloxProject } from '../utils/paths.js';
|
|
12
|
-
/**
|
|
13
|
-
* Create the dev command
|
|
14
|
-
*/
|
|
15
|
-
export function createDevCommand(version) {
|
|
16
|
-
return new Command('dev')
|
|
17
|
-
.description('Start the development server with hot reload')
|
|
18
|
-
.option('-p, --port <port>', 'Port to listen on', '3000')
|
|
19
|
-
.option('-H, --host <host>', 'Host to bind to', 'localhost')
|
|
20
|
-
.option('-e, --entry <file>', 'Entry point file (auto-detected if not specified)')
|
|
21
|
-
.action(async (options) => {
|
|
22
|
-
await runDevServer(options, version);
|
|
23
|
-
});
|
|
24
|
-
}
|
|
25
|
-
/**
|
|
26
|
-
* Run the development server
|
|
27
|
-
*/
|
|
28
|
-
async function runDevServer(options, version) {
|
|
29
|
-
const s = p.spinner();
|
|
30
|
-
try {
|
|
31
|
-
// Check if we're in a VeloxTS project
|
|
32
|
-
s.start('Checking project...');
|
|
33
|
-
const isVelox = await isVeloxProject();
|
|
34
|
-
if (!isVelox) {
|
|
35
|
-
s.stop('Project check failed');
|
|
36
|
-
error('This does not appear to be a VeloxTS project.');
|
|
37
|
-
instruction(`Run ${formatCommand('npx create-velox-app')} to create a new project.`);
|
|
38
|
-
process.exit(1);
|
|
39
|
-
}
|
|
40
|
-
s.stop('Project validated');
|
|
41
|
-
// Find entry point
|
|
42
|
-
let entryPoint = options.entry;
|
|
43
|
-
if (!entryPoint) {
|
|
44
|
-
s.start('Detecting entry point...');
|
|
45
|
-
const detected = findEntryPoint();
|
|
46
|
-
if (!detected) {
|
|
47
|
-
s.stop('Entry point not found');
|
|
48
|
-
error('Could not find application entry point.');
|
|
49
|
-
instruction('Try specifying the entry point with --entry flag:');
|
|
50
|
-
console.log(` ${formatCommand('velox dev --entry src/index.ts')}`);
|
|
51
|
-
process.exit(1);
|
|
52
|
-
}
|
|
53
|
-
entryPoint = detected;
|
|
54
|
-
s.stop(`Entry point: ${formatPath(entryPoint)}`);
|
|
55
|
-
}
|
|
56
|
-
// Print startup banner
|
|
57
|
-
printBanner(version);
|
|
58
|
-
info('Starting development server...');
|
|
59
|
-
console.log('');
|
|
60
|
-
// Start the development server with tsx watch
|
|
61
|
-
const port = options.port || '3000';
|
|
62
|
-
const host = options.host || 'localhost';
|
|
63
|
-
// Set environment variables for the app
|
|
64
|
-
const env = {
|
|
65
|
-
...process.env,
|
|
66
|
-
PORT: port,
|
|
67
|
-
HOST: host,
|
|
68
|
-
NODE_ENV: 'development',
|
|
69
|
-
};
|
|
70
|
-
// Spawn tsx in watch mode
|
|
71
|
-
const devProcess = spawn('npx', ['tsx', 'watch', entryPoint], {
|
|
72
|
-
stdio: 'inherit',
|
|
73
|
-
env,
|
|
74
|
-
shell: true,
|
|
75
|
-
});
|
|
76
|
-
// Handle process termination
|
|
77
|
-
let isShuttingDown = false;
|
|
78
|
-
const shutdown = (signal) => {
|
|
79
|
-
if (isShuttingDown)
|
|
80
|
-
return;
|
|
81
|
-
isShuttingDown = true;
|
|
82
|
-
console.log(`\n\n${pc.yellow('⚠')} ${pc.dim(`Received ${signal}, shutting down gracefully...`)}`);
|
|
83
|
-
devProcess.kill('SIGTERM');
|
|
84
|
-
// Force kill after 5 seconds if process doesn't exit
|
|
85
|
-
const forceKillTimeout = setTimeout(() => {
|
|
86
|
-
console.log(pc.red('✗ Force killing process...'));
|
|
87
|
-
devProcess.kill('SIGKILL');
|
|
88
|
-
process.exit(1);
|
|
89
|
-
}, 5000);
|
|
90
|
-
devProcess.on('exit', () => {
|
|
91
|
-
clearTimeout(forceKillTimeout);
|
|
92
|
-
console.log(pc.dim('Development server stopped.'));
|
|
93
|
-
process.exit(0);
|
|
94
|
-
});
|
|
95
|
-
};
|
|
96
|
-
// Handle Ctrl+C and other termination signals
|
|
97
|
-
process.on('SIGINT', () => shutdown('SIGINT'));
|
|
98
|
-
process.on('SIGTERM', () => shutdown('SIGTERM'));
|
|
99
|
-
// Handle dev process errors
|
|
100
|
-
devProcess.on('error', (err) => {
|
|
101
|
-
error(`Failed to start development server: ${err.message}`);
|
|
102
|
-
process.exit(1);
|
|
103
|
-
});
|
|
104
|
-
devProcess.on('exit', (code) => {
|
|
105
|
-
if (!isShuttingDown && code !== 0) {
|
|
106
|
-
error(`Development server exited with code ${code}`);
|
|
107
|
-
process.exit(code || 1);
|
|
108
|
-
}
|
|
109
|
-
});
|
|
110
|
-
}
|
|
111
|
-
catch (err) {
|
|
112
|
-
s.stop('Failed to start development server');
|
|
113
|
-
if (err instanceof Error) {
|
|
114
|
-
error(err.message);
|
|
115
|
-
// Provide helpful suggestions based on error
|
|
116
|
-
if (err.message.includes('EADDRINUSE')) {
|
|
117
|
-
instruction(`Port ${options.port} is already in use. Try a different port:`);
|
|
118
|
-
console.log(` ${formatCommand(`velox dev --port ${Number(options.port || 3000) + 1}`)}`);
|
|
119
|
-
}
|
|
120
|
-
else if (err.message.includes('EACCES')) {
|
|
121
|
-
instruction('Permission denied. Try using a port above 1024.');
|
|
122
|
-
}
|
|
123
|
-
}
|
|
124
|
-
else {
|
|
125
|
-
error('An unknown error occurred');
|
|
126
|
-
}
|
|
127
|
-
process.exit(1);
|
|
128
|
-
}
|
|
129
|
-
}
|
|
130
|
-
//# sourceMappingURL=dev.js.map
|
package/dist/commands/dev.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"dev.js","sourceRoot":"","sources":["../../src/commands/dev.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,11 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Migrate command - Run database migrations
|
|
3
|
-
*
|
|
4
|
-
* Wrapper around Prisma migrations with beautiful Laravel-inspired output
|
|
5
|
-
*/
|
|
6
|
-
import { Command } from 'commander';
|
|
7
|
-
/**
|
|
8
|
-
* Create the migrate command
|
|
9
|
-
*/
|
|
10
|
-
export declare function createMigrateCommand(): Command;
|
|
11
|
-
//# sourceMappingURL=migrate.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"migrate.d.ts","sourceRoot":"","sources":["../../src/commands/migrate.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAMH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAWpC;;GAEG;AACH,wBAAgB,oBAAoB,IAAI,OAAO,CAQ9C"}
|
package/dist/commands/migrate.js
DELETED
|
@@ -1,132 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Migrate command - Run database migrations
|
|
3
|
-
*
|
|
4
|
-
* Wrapper around Prisma migrations with beautiful Laravel-inspired output
|
|
5
|
-
*/
|
|
6
|
-
import { spawn } from 'node:child_process';
|
|
7
|
-
import path from 'node:path';
|
|
8
|
-
import * as p from '@clack/prompts';
|
|
9
|
-
import { Command } from 'commander';
|
|
10
|
-
import pc from 'picocolors';
|
|
11
|
-
import { error, formatCommand, info, instruction, success } from '../utils/output.js';
|
|
12
|
-
import { fileExists } from '../utils/paths.js';
|
|
13
|
-
/**
|
|
14
|
-
* Create the migrate command
|
|
15
|
-
*/
|
|
16
|
-
export function createMigrateCommand() {
|
|
17
|
-
return new Command('migrate')
|
|
18
|
-
.description('Run database migrations')
|
|
19
|
-
.option('--deploy', 'Run migrations in production mode (prisma migrate deploy)')
|
|
20
|
-
.option('--force', 'Force push schema without migration (development only)')
|
|
21
|
-
.action(async (options) => {
|
|
22
|
-
await runMigrations(options);
|
|
23
|
-
});
|
|
24
|
-
}
|
|
25
|
-
/**
|
|
26
|
-
* Run database migrations
|
|
27
|
-
*/
|
|
28
|
-
async function runMigrations(options) {
|
|
29
|
-
const s = p.spinner();
|
|
30
|
-
try {
|
|
31
|
-
// Check if Prisma schema exists
|
|
32
|
-
const schemaPath = path.join(process.cwd(), 'prisma', 'schema.prisma');
|
|
33
|
-
if (!fileExists(schemaPath)) {
|
|
34
|
-
error('Prisma schema not found.');
|
|
35
|
-
instruction('Expected to find prisma/schema.prisma in the current directory.');
|
|
36
|
-
instruction(`Initialize Prisma with: ${formatCommand('npx prisma init')}`);
|
|
37
|
-
process.exit(1);
|
|
38
|
-
}
|
|
39
|
-
// Determine which command to run
|
|
40
|
-
let command;
|
|
41
|
-
let description;
|
|
42
|
-
if (options.deploy) {
|
|
43
|
-
// Production: Apply pending migrations
|
|
44
|
-
command = ['prisma', 'migrate', 'deploy'];
|
|
45
|
-
description = 'Applying production migrations';
|
|
46
|
-
}
|
|
47
|
-
else if (options.force) {
|
|
48
|
-
// Development: Force push schema
|
|
49
|
-
command = ['prisma', 'db', 'push', '--skip-generate'];
|
|
50
|
-
description = 'Pushing database schema (development mode)';
|
|
51
|
-
}
|
|
52
|
-
else {
|
|
53
|
-
// Development: Push with generate
|
|
54
|
-
command = ['prisma', 'db', 'push'];
|
|
55
|
-
description = 'Synchronizing database schema';
|
|
56
|
-
}
|
|
57
|
-
info(description);
|
|
58
|
-
console.log('');
|
|
59
|
-
s.start('Running Prisma...');
|
|
60
|
-
// Run the Prisma command
|
|
61
|
-
await new Promise((resolve, reject) => {
|
|
62
|
-
const prismaProcess = spawn('npx', command, {
|
|
63
|
-
stdio: 'inherit',
|
|
64
|
-
shell: true,
|
|
65
|
-
env: process.env,
|
|
66
|
-
});
|
|
67
|
-
prismaProcess.on('error', (err) => {
|
|
68
|
-
reject(new Error(`Failed to run Prisma: ${err.message}`));
|
|
69
|
-
});
|
|
70
|
-
prismaProcess.on('exit', (code) => {
|
|
71
|
-
if (code === 0) {
|
|
72
|
-
resolve();
|
|
73
|
-
}
|
|
74
|
-
else {
|
|
75
|
-
reject(new Error(`Prisma exited with code ${code}`));
|
|
76
|
-
}
|
|
77
|
-
});
|
|
78
|
-
});
|
|
79
|
-
s.stop('Migration completed');
|
|
80
|
-
console.log('');
|
|
81
|
-
success('Database schema synchronized successfully!');
|
|
82
|
-
// Show next steps for production migrations
|
|
83
|
-
if (options.deploy) {
|
|
84
|
-
instruction('Your database is now up to date with the latest migrations.');
|
|
85
|
-
}
|
|
86
|
-
else {
|
|
87
|
-
console.log('');
|
|
88
|
-
info('Development tips:');
|
|
89
|
-
console.log(` ${pc.dim('•')} Use ${formatCommand('velox migrate')} to sync schema changes during development`);
|
|
90
|
-
console.log(` ${pc.dim('•')} Use ${formatCommand('velox migrate --deploy')} in production to apply migrations`);
|
|
91
|
-
console.log(` ${pc.dim('•')} Use ${formatCommand('npx prisma studio')} to explore your database`);
|
|
92
|
-
console.log('');
|
|
93
|
-
}
|
|
94
|
-
}
|
|
95
|
-
catch (err) {
|
|
96
|
-
s.stop('Migration failed');
|
|
97
|
-
console.log('');
|
|
98
|
-
if (err instanceof Error) {
|
|
99
|
-
error(err.message);
|
|
100
|
-
// Provide helpful suggestions based on error
|
|
101
|
-
if (err.message.includes('P1001')) {
|
|
102
|
-
instruction('Cannot reach database server. Check your connection:');
|
|
103
|
-
console.log(` ${pc.dim('1.')} Verify DATABASE_URL in .env file`);
|
|
104
|
-
console.log(` ${pc.dim('2.')} Ensure database server is running`);
|
|
105
|
-
console.log(` ${pc.dim('3.')} Check network connectivity`);
|
|
106
|
-
}
|
|
107
|
-
else if (err.message.includes('P3009')) {
|
|
108
|
-
instruction('Migration failed. Your changes may conflict with existing data.');
|
|
109
|
-
console.log(` ${pc.dim('•')} Review the Prisma error above`);
|
|
110
|
-
console.log(` ${pc.dim('•')} Consider creating a manual migration`);
|
|
111
|
-
}
|
|
112
|
-
else if (err.message.includes('P1003')) {
|
|
113
|
-
instruction('Database does not exist. Create it first:');
|
|
114
|
-
console.log(` ${pc.dim('•')} Check your DATABASE_URL`);
|
|
115
|
-
console.log(` ${pc.dim('•')} Create the database manually if needed`);
|
|
116
|
-
}
|
|
117
|
-
else {
|
|
118
|
-
instruction('Common solutions:');
|
|
119
|
-
console.log(` ${pc.dim('1.')} Check your DATABASE_URL in .env`);
|
|
120
|
-
console.log(` ${pc.dim('2.')} Ensure Prisma schema is valid: ${formatCommand('npx prisma validate')}`);
|
|
121
|
-
console.log(` ${pc.dim('3.')} Review Prisma logs above for specific errors`);
|
|
122
|
-
}
|
|
123
|
-
console.log('');
|
|
124
|
-
instruction(`For more help, see: ${pc.cyan('https://www.prisma.io/docs/reference/api-reference/command-reference')}`);
|
|
125
|
-
}
|
|
126
|
-
else {
|
|
127
|
-
error('An unknown error occurred');
|
|
128
|
-
}
|
|
129
|
-
process.exit(1);
|
|
130
|
-
}
|
|
131
|
-
}
|
|
132
|
-
//# sourceMappingURL=migrate.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"migrate.js","sourceRoot":"","sources":["../../src/commands/migrate.ts"],"names":[],"mappings":"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"}
|
package/dist/index.d.ts
DELETED
|
@@ -1,33 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* @veloxts/cli - Developer tooling and command-line interface
|
|
3
|
-
*
|
|
4
|
-
* A beautiful, Laravel-inspired CLI for the VeloxTS Framework that provides
|
|
5
|
-
* commands for development, database migrations, and other developer workflows.
|
|
6
|
-
*
|
|
7
|
-
* @example
|
|
8
|
-
* ```bash
|
|
9
|
-
* # Start development server
|
|
10
|
-
* velox dev
|
|
11
|
-
*
|
|
12
|
-
* # Run database migrations
|
|
13
|
-
* velox migrate
|
|
14
|
-
*
|
|
15
|
-
* # Show help
|
|
16
|
-
* velox --help
|
|
17
|
-
* ```
|
|
18
|
-
*/
|
|
19
|
-
/**
|
|
20
|
-
* CLI version (synchronized with package.json)
|
|
21
|
-
*/
|
|
22
|
-
export declare const CLI_VERSION = "0.1.0";
|
|
23
|
-
/**
|
|
24
|
-
* Export command functions for programmatic usage
|
|
25
|
-
*/
|
|
26
|
-
export { createDevCommand } from './commands/dev.js';
|
|
27
|
-
export { createMigrateCommand } from './commands/migrate.js';
|
|
28
|
-
/**
|
|
29
|
-
* Export utilities for reuse in other packages
|
|
30
|
-
*/
|
|
31
|
-
export * from './utils/output.js';
|
|
32
|
-
export * from './utils/paths.js';
|
|
33
|
-
//# sourceMappingURL=index.d.ts.map
|
package/dist/index.d.ts.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;GAiBG;AAEH;;GAEG;AACH,eAAO,MAAM,WAAW,UAAU,CAAC;AAEnC;;GAEG;AACH,OAAO,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAC;AACrD,OAAO,EAAE,oBAAoB,EAAE,MAAM,uBAAuB,CAAC;AAC7D;;GAEG;AACH,cAAc,mBAAmB,CAAC;AAClC,cAAc,kBAAkB,CAAC"}
|
package/dist/index.js
DELETED
|
@@ -1,33 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* @veloxts/cli - Developer tooling and command-line interface
|
|
3
|
-
*
|
|
4
|
-
* A beautiful, Laravel-inspired CLI for the VeloxTS Framework that provides
|
|
5
|
-
* commands for development, database migrations, and other developer workflows.
|
|
6
|
-
*
|
|
7
|
-
* @example
|
|
8
|
-
* ```bash
|
|
9
|
-
* # Start development server
|
|
10
|
-
* velox dev
|
|
11
|
-
*
|
|
12
|
-
* # Run database migrations
|
|
13
|
-
* velox migrate
|
|
14
|
-
*
|
|
15
|
-
* # Show help
|
|
16
|
-
* velox --help
|
|
17
|
-
* ```
|
|
18
|
-
*/
|
|
19
|
-
/**
|
|
20
|
-
* CLI version (synchronized with package.json)
|
|
21
|
-
*/
|
|
22
|
-
export const CLI_VERSION = '0.1.0';
|
|
23
|
-
/**
|
|
24
|
-
* Export command functions for programmatic usage
|
|
25
|
-
*/
|
|
26
|
-
export { createDevCommand } from './commands/dev.js';
|
|
27
|
-
export { createMigrateCommand } from './commands/migrate.js';
|
|
28
|
-
/**
|
|
29
|
-
* Export utilities for reuse in other packages
|
|
30
|
-
*/
|
|
31
|
-
export * from './utils/output.js';
|
|
32
|
-
export * from './utils/paths.js';
|
|
33
|
-
//# sourceMappingURL=index.js.map
|
package/dist/index.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;GAiBG;AAEH;;GAEG;AACH,MAAM,CAAC,MAAM,WAAW,GAAG,OAAO,CAAC;AAEnC;;GAEG;AACH,OAAO,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAC;AACrD,OAAO,EAAE,oBAAoB,EAAE,MAAM,uBAAuB,CAAC;AAC7D;;GAEG;AACH,cAAc,mBAAmB,CAAC;AAClC,cAAc,kBAAkB,CAAC"}
|
package/dist/utils/output.d.ts
DELETED
|
@@ -1,50 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Terminal output utilities
|
|
3
|
-
*
|
|
4
|
-
* Provides beautiful, Laravel-inspired terminal output formatting
|
|
5
|
-
*/
|
|
6
|
-
/**
|
|
7
|
-
* Print a beautiful VeloxTS banner
|
|
8
|
-
*/
|
|
9
|
-
export declare function printBanner(version: string): void;
|
|
10
|
-
/**
|
|
11
|
-
* Print server listening information
|
|
12
|
-
*/
|
|
13
|
-
export declare function printServerInfo(url: string): void;
|
|
14
|
-
/**
|
|
15
|
-
* Print a success message
|
|
16
|
-
*/
|
|
17
|
-
export declare function success(message: string): void;
|
|
18
|
-
/**
|
|
19
|
-
* Print an error message
|
|
20
|
-
*/
|
|
21
|
-
export declare function error(message: string): void;
|
|
22
|
-
/**
|
|
23
|
-
* Print a warning message
|
|
24
|
-
*/
|
|
25
|
-
export declare function warning(message: string): void;
|
|
26
|
-
/**
|
|
27
|
-
* Print an info message
|
|
28
|
-
*/
|
|
29
|
-
export declare function info(message: string): void;
|
|
30
|
-
/**
|
|
31
|
-
* Print a step in a process
|
|
32
|
-
*/
|
|
33
|
-
export declare function step(message: string): void;
|
|
34
|
-
/**
|
|
35
|
-
* Print instructions for user
|
|
36
|
-
*/
|
|
37
|
-
export declare function instruction(message: string): void;
|
|
38
|
-
/**
|
|
39
|
-
* Format a file path for display
|
|
40
|
-
*/
|
|
41
|
-
export declare function formatPath(path: string): string;
|
|
42
|
-
/**
|
|
43
|
-
* Format a command for display
|
|
44
|
-
*/
|
|
45
|
-
export declare function formatCommand(command: string): string;
|
|
46
|
-
/**
|
|
47
|
-
* Format a URL for display
|
|
48
|
-
*/
|
|
49
|
-
export declare function formatUrl(url: string): string;
|
|
50
|
-
//# sourceMappingURL=output.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"output.d.ts","sourceRoot":"","sources":["../../src/utils/output.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAIH;;GAEG;AACH,wBAAgB,WAAW,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAKjD;AAED;;GAEG;AACH,wBAAgB,eAAe,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI,CAIjD;AAED;;GAEG;AACH,wBAAgB,OAAO,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAE7C;AAED;;GAEG;AACH,wBAAgB,KAAK,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAE3C;AAED;;GAEG;AACH,wBAAgB,OAAO,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAE7C;AAED;;GAEG;AACH,wBAAgB,IAAI,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAE1C;AAED;;GAEG;AACH,wBAAgB,IAAI,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAE1C;AAED;;GAEG;AACH,wBAAgB,WAAW,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAEjD;AAED;;GAEG;AACH,wBAAgB,UAAU,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAE/C;AAED;;GAEG;AACH,wBAAgB,aAAa,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAErD;AAED;;GAEG;AACH,wBAAgB,SAAS,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAE7C"}
|
package/dist/utils/output.js
DELETED
|
@@ -1,78 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Terminal output utilities
|
|
3
|
-
*
|
|
4
|
-
* Provides beautiful, Laravel-inspired terminal output formatting
|
|
5
|
-
*/
|
|
6
|
-
import pc from 'picocolors';
|
|
7
|
-
/**
|
|
8
|
-
* Print a beautiful VeloxTS banner
|
|
9
|
-
*/
|
|
10
|
-
export function printBanner(version) {
|
|
11
|
-
const divider = '═'.repeat(50);
|
|
12
|
-
console.log(`\n${pc.cyan(divider)}`);
|
|
13
|
-
console.log(pc.cyan(` VELOX ${pc.bold(`v${version}`)}`));
|
|
14
|
-
console.log(pc.cyan(divider));
|
|
15
|
-
}
|
|
16
|
-
/**
|
|
17
|
-
* Print server listening information
|
|
18
|
-
*/
|
|
19
|
-
export function printServerInfo(url) {
|
|
20
|
-
console.log('');
|
|
21
|
-
console.log(` ${pc.green('➜')} Local: ${pc.cyan(url)}`);
|
|
22
|
-
console.log('');
|
|
23
|
-
}
|
|
24
|
-
/**
|
|
25
|
-
* Print a success message
|
|
26
|
-
*/
|
|
27
|
-
export function success(message) {
|
|
28
|
-
console.log(`${pc.green('✓')} ${message}`);
|
|
29
|
-
}
|
|
30
|
-
/**
|
|
31
|
-
* Print an error message
|
|
32
|
-
*/
|
|
33
|
-
export function error(message) {
|
|
34
|
-
console.error(`${pc.red('✗')} ${pc.red(message)}`);
|
|
35
|
-
}
|
|
36
|
-
/**
|
|
37
|
-
* Print a warning message
|
|
38
|
-
*/
|
|
39
|
-
export function warning(message) {
|
|
40
|
-
console.warn(`${pc.yellow('⚠')} ${pc.yellow(message)}`);
|
|
41
|
-
}
|
|
42
|
-
/**
|
|
43
|
-
* Print an info message
|
|
44
|
-
*/
|
|
45
|
-
export function info(message) {
|
|
46
|
-
console.log(`${pc.blue('ℹ')} ${message}`);
|
|
47
|
-
}
|
|
48
|
-
/**
|
|
49
|
-
* Print a step in a process
|
|
50
|
-
*/
|
|
51
|
-
export function step(message) {
|
|
52
|
-
console.log(` ${pc.dim('→')} ${message}`);
|
|
53
|
-
}
|
|
54
|
-
/**
|
|
55
|
-
* Print instructions for user
|
|
56
|
-
*/
|
|
57
|
-
export function instruction(message) {
|
|
58
|
-
console.log(`\n ${pc.dim(message)}\n`);
|
|
59
|
-
}
|
|
60
|
-
/**
|
|
61
|
-
* Format a file path for display
|
|
62
|
-
*/
|
|
63
|
-
export function formatPath(path) {
|
|
64
|
-
return pc.cyan(path);
|
|
65
|
-
}
|
|
66
|
-
/**
|
|
67
|
-
* Format a command for display
|
|
68
|
-
*/
|
|
69
|
-
export function formatCommand(command) {
|
|
70
|
-
return pc.cyan(command);
|
|
71
|
-
}
|
|
72
|
-
/**
|
|
73
|
-
* Format a URL for display
|
|
74
|
-
*/
|
|
75
|
-
export function formatUrl(url) {
|
|
76
|
-
return pc.cyan(url);
|
|
77
|
-
}
|
|
78
|
-
//# sourceMappingURL=output.js.map
|
package/dist/utils/output.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"output.js","sourceRoot":"","sources":["../../src/utils/output.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,MAAM,YAAY,CAAC;AAE5B;;GAEG;AACH,MAAM,UAAU,WAAW,CAAC,OAAe;IACzC,MAAM,OAAO,GAAG,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;IAC/B,OAAO,CAAC,GAAG,CAAC,KAAK,EAAE,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;IACrC,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC,IAAI,CAAC,IAAI,OAAO,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;IAC1D,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC;AAChC,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,eAAe,CAAC,GAAW;IACzC,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IAChB,OAAO,CAAC,GAAG,CAAC,KAAK,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,cAAc,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IAC5D,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;AAClB,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,OAAO,CAAC,OAAe;IACrC,OAAO,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,OAAO,EAAE,CAAC,CAAC;AAC7C,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,KAAK,CAAC,OAAe;IACnC,OAAO,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;AACrD,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,OAAO,CAAC,OAAe;IACrC,OAAO,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,MAAM,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC,MAAM,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;AAC1D,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,IAAI,CAAC,OAAe;IAClC,OAAO,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,OAAO,EAAE,CAAC,CAAC;AAC5C,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,IAAI,CAAC,OAAe;IAClC,OAAO,CAAC,GAAG,CAAC,KAAK,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,OAAO,EAAE,CAAC,CAAC;AAC7C,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,WAAW,CAAC,OAAe;IACzC,OAAO,CAAC,GAAG,CAAC,OAAO,EAAE,CAAC,GAAG,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;AAC1C,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,UAAU,CAAC,IAAY;IACrC,OAAO,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AACvB,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,aAAa,CAAC,OAAe;IAC3C,OAAO,EAAE,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;AAC1B,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,SAAS,CAAC,GAAW;IACnC,OAAO,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AACtB,CAAC"}
|
package/dist/utils/paths.d.ts
DELETED
|
@@ -1,22 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Path utilities for finding project files
|
|
3
|
-
*/
|
|
4
|
-
/**
|
|
5
|
-
* Find the project entry point
|
|
6
|
-
* Looks for common entry points in order of preference
|
|
7
|
-
*/
|
|
8
|
-
export declare function findEntryPoint(cwd?: string): string | null;
|
|
9
|
-
/**
|
|
10
|
-
* Check if a file exists at the given path
|
|
11
|
-
*/
|
|
12
|
-
export declare function fileExists(filePath: string): boolean;
|
|
13
|
-
/**
|
|
14
|
-
* Get the absolute path from a relative path
|
|
15
|
-
*/
|
|
16
|
-
export declare function getAbsolutePath(relativePath: string, cwd?: string): string;
|
|
17
|
-
/**
|
|
18
|
-
* Check if we're in a VeloxTS project
|
|
19
|
-
* Looks for package.json with @veloxts dependencies
|
|
20
|
-
*/
|
|
21
|
-
export declare function isVeloxProject(cwd?: string): Promise<boolean>;
|
|
22
|
-
//# sourceMappingURL=paths.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"paths.d.ts","sourceRoot":"","sources":["../../src/utils/paths.ts"],"names":[],"mappings":"AAAA;;GAEG;AAKH;;;GAGG;AACH,wBAAgB,cAAc,CAAC,GAAG,GAAE,MAAsB,GAAG,MAAM,GAAG,IAAI,CAWzE;AAED;;GAEG;AACH,wBAAgB,UAAU,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAEpD;AAED;;GAEG;AACH,wBAAgB,eAAe,CAAC,YAAY,EAAE,MAAM,EAAE,GAAG,GAAE,MAAsB,GAAG,MAAM,CAEzF;AAED;;;GAGG;AACH,wBAAsB,cAAc,CAAC,GAAG,GAAE,MAAsB,GAAG,OAAO,CAAC,OAAO,CAAC,CAkBlF"}
|
package/dist/utils/paths.js
DELETED
|
@@ -1,53 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Path utilities for finding project files
|
|
3
|
-
*/
|
|
4
|
-
import { existsSync } from 'node:fs';
|
|
5
|
-
import path from 'node:path';
|
|
6
|
-
/**
|
|
7
|
-
* Find the project entry point
|
|
8
|
-
* Looks for common entry points in order of preference
|
|
9
|
-
*/
|
|
10
|
-
export function findEntryPoint(cwd = process.cwd()) {
|
|
11
|
-
const candidates = ['src/index.ts', 'src/main.ts', 'src/app.ts', 'index.ts', 'main.ts'];
|
|
12
|
-
for (const candidate of candidates) {
|
|
13
|
-
const fullPath = path.join(cwd, candidate);
|
|
14
|
-
if (existsSync(fullPath)) {
|
|
15
|
-
return fullPath;
|
|
16
|
-
}
|
|
17
|
-
}
|
|
18
|
-
return null;
|
|
19
|
-
}
|
|
20
|
-
/**
|
|
21
|
-
* Check if a file exists at the given path
|
|
22
|
-
*/
|
|
23
|
-
export function fileExists(filePath) {
|
|
24
|
-
return existsSync(filePath);
|
|
25
|
-
}
|
|
26
|
-
/**
|
|
27
|
-
* Get the absolute path from a relative path
|
|
28
|
-
*/
|
|
29
|
-
export function getAbsolutePath(relativePath, cwd = process.cwd()) {
|
|
30
|
-
return path.isAbsolute(relativePath) ? relativePath : path.join(cwd, relativePath);
|
|
31
|
-
}
|
|
32
|
-
/**
|
|
33
|
-
* Check if we're in a VeloxTS project
|
|
34
|
-
* Looks for package.json with @veloxts dependencies
|
|
35
|
-
*/
|
|
36
|
-
export async function isVeloxProject(cwd = process.cwd()) {
|
|
37
|
-
const packageJsonPath = path.join(cwd, 'package.json');
|
|
38
|
-
if (!existsSync(packageJsonPath)) {
|
|
39
|
-
return false;
|
|
40
|
-
}
|
|
41
|
-
try {
|
|
42
|
-
const fs = await import('node:fs/promises');
|
|
43
|
-
const content = await fs.readFile(packageJsonPath, 'utf-8');
|
|
44
|
-
const pkg = JSON.parse(content);
|
|
45
|
-
// Check if any @veloxts packages are in dependencies
|
|
46
|
-
const deps = { ...pkg.dependencies, ...pkg.devDependencies };
|
|
47
|
-
return Object.keys(deps).some((dep) => dep.startsWith('@veloxts/'));
|
|
48
|
-
}
|
|
49
|
-
catch {
|
|
50
|
-
return false;
|
|
51
|
-
}
|
|
52
|
-
}
|
|
53
|
-
//# sourceMappingURL=paths.js.map
|
package/dist/utils/paths.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"paths.js","sourceRoot":"","sources":["../../src/utils/paths.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AACrC,OAAO,IAAI,MAAM,WAAW,CAAC;AAE7B;;;GAGG;AACH,MAAM,UAAU,cAAc,CAAC,MAAc,OAAO,CAAC,GAAG,EAAE;IACxD,MAAM,UAAU,GAAG,CAAC,cAAc,EAAE,aAAa,EAAE,YAAY,EAAE,UAAU,EAAE,SAAS,CAAC,CAAC;IAExF,KAAK,MAAM,SAAS,IAAI,UAAU,EAAE,CAAC;QACnC,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,SAAS,CAAC,CAAC;QAC3C,IAAI,UAAU,CAAC,QAAQ,CAAC,EAAE,CAAC;YACzB,OAAO,QAAQ,CAAC;QAClB,CAAC;IACH,CAAC;IAED,OAAO,IAAI,CAAC;AACd,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,UAAU,CAAC,QAAgB;IACzC,OAAO,UAAU,CAAC,QAAQ,CAAC,CAAC;AAC9B,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,eAAe,CAAC,YAAoB,EAAE,MAAc,OAAO,CAAC,GAAG,EAAE;IAC/E,OAAO,IAAI,CAAC,UAAU,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,YAAY,CAAC,CAAC;AACrF,CAAC;AAED;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,cAAc,CAAC,MAAc,OAAO,CAAC,GAAG,EAAE;IAC9D,MAAM,eAAe,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,cAAc,CAAC,CAAC;IAEvD,IAAI,CAAC,UAAU,CAAC,eAAe,CAAC,EAAE,CAAC;QACjC,OAAO,KAAK,CAAC;IACf,CAAC;IAED,IAAI,CAAC;QACH,MAAM,EAAE,GAAG,MAAM,MAAM,CAAC,kBAAkB,CAAC,CAAC;QAC5C,MAAM,OAAO,GAAG,MAAM,EAAE,CAAC,QAAQ,CAAC,eAAe,EAAE,OAAO,CAAC,CAAC;QAC5D,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;QAEhC,qDAAqD;QACrD,MAAM,IAAI,GAAG,EAAE,GAAG,GAAG,CAAC,YAAY,EAAE,GAAG,GAAG,CAAC,eAAe,EAAE,CAAC;QAC7D,OAAO,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,UAAU,CAAC,WAAW,CAAC,CAAC,CAAC;IACtE,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,KAAK,CAAC;IACf,CAAC;AACH,CAAC"}
|