@veloxts/cli 0.4.14 → 0.6.23
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 +2 -48
- package/dist/cli.d.ts +5 -1
- package/dist/cli.d.ts.map +1 -1
- package/dist/cli.js +7 -1
- package/dist/cli.js.map +1 -1
- package/dist/commands/dev.d.ts.map +1 -1
- package/dist/commands/dev.js +71 -7
- package/dist/commands/dev.js.map +1 -1
- package/dist/commands/introspect.d.ts +16 -0
- package/dist/commands/introspect.d.ts.map +1 -0
- package/dist/commands/introspect.js +559 -0
- package/dist/commands/introspect.js.map +1 -0
- package/dist/commands/make.d.ts.map +1 -1
- package/dist/commands/make.js +18 -8
- package/dist/commands/make.js.map +1 -1
- package/dist/commands/procedures.d.ts.map +1 -1
- package/dist/commands/procedures.js +16 -0
- package/dist/commands/procedures.js.map +1 -1
- package/dist/dev/error-parser.d.ts.map +1 -1
- package/dist/dev/error-parser.js +24 -8
- package/dist/dev/error-parser.js.map +1 -1
- package/dist/dev/hmr-runner.d.ts.map +1 -1
- package/dist/dev/hmr-runner.js +6 -1
- package/dist/dev/hmr-runner.js.map +1 -1
- package/dist/dev/index.d.ts +3 -3
- package/dist/dev/index.d.ts.map +1 -1
- package/dist/dev/index.js +3 -3
- package/dist/dev/index.js.map +1 -1
- package/dist/dev/reload-reporter.d.ts +2 -2
- package/dist/dev/reload-reporter.d.ts.map +1 -1
- package/dist/dev/reload-reporter.js +2 -2
- package/dist/dev/reload-reporter.js.map +1 -1
- package/dist/errors/catalog.d.ts +48 -0
- package/dist/errors/catalog.d.ts.map +1 -0
- package/dist/errors/catalog.js +421 -0
- package/dist/errors/catalog.js.map +1 -0
- package/dist/errors/index.d.ts +26 -0
- package/dist/errors/index.d.ts.map +1 -0
- package/dist/errors/index.js +28 -0
- package/dist/errors/index.js.map +1 -0
- package/dist/errors/velox-error.d.ts +122 -0
- package/dist/errors/velox-error.d.ts.map +1 -0
- package/dist/errors/velox-error.js +216 -0
- package/dist/errors/velox-error.js.map +1 -0
- package/dist/generators/base.d.ts.map +1 -1
- package/dist/generators/base.js +26 -0
- package/dist/generators/base.js.map +1 -1
- package/dist/generators/fields/__tests__/helpers.d.ts +66 -0
- package/dist/generators/fields/__tests__/helpers.d.ts.map +1 -0
- package/dist/generators/fields/__tests__/helpers.js +142 -0
- package/dist/generators/fields/__tests__/helpers.js.map +1 -0
- package/dist/generators/fields/actions.d.ts +58 -0
- package/dist/generators/fields/actions.d.ts.map +1 -0
- package/dist/generators/fields/actions.js +230 -0
- package/dist/generators/fields/actions.js.map +1 -0
- package/dist/generators/fields/display.d.ts +28 -0
- package/dist/generators/fields/display.d.ts.map +1 -0
- package/dist/generators/fields/display.js +214 -0
- package/dist/generators/fields/display.js.map +1 -0
- package/dist/generators/fields/index.d.ts +12 -0
- package/dist/generators/fields/index.d.ts.map +1 -0
- package/dist/generators/fields/index.js +12 -0
- package/dist/generators/fields/index.js.map +1 -0
- package/dist/generators/fields/prompts.d.ts +31 -0
- package/dist/generators/fields/prompts.d.ts.map +1 -0
- package/dist/generators/fields/prompts.js +366 -0
- package/dist/generators/fields/prompts.js.map +1 -0
- package/dist/generators/fields/templates.d.ts +49 -0
- package/dist/generators/fields/templates.d.ts.map +1 -0
- package/dist/generators/fields/templates.js +230 -0
- package/dist/generators/fields/templates.js.map +1 -0
- package/dist/generators/fields/types.d.ts +95 -0
- package/dist/generators/fields/types.d.ts.map +1 -0
- package/dist/generators/fields/types.js +150 -0
- package/dist/generators/fields/types.js.map +1 -0
- package/dist/generators/generators/action.d.ts +37 -0
- package/dist/generators/generators/action.d.ts.map +1 -0
- package/dist/generators/generators/action.js +109 -0
- package/dist/generators/generators/action.js.map +1 -0
- package/dist/generators/generators/exception.d.ts +38 -0
- package/dist/generators/generators/exception.d.ts.map +1 -0
- package/dist/generators/generators/exception.js +109 -0
- package/dist/generators/generators/exception.js.map +1 -0
- package/dist/generators/generators/guard.d.ts +38 -0
- package/dist/generators/generators/guard.d.ts.map +1 -0
- package/dist/generators/generators/guard.js +109 -0
- package/dist/generators/generators/guard.js.map +1 -0
- package/dist/generators/generators/index.d.ts +8 -0
- package/dist/generators/generators/index.d.ts.map +1 -1
- package/dist/generators/generators/index.js +27 -0
- package/dist/generators/generators/index.js.map +1 -1
- package/dist/generators/generators/layout.d.ts +36 -0
- package/dist/generators/generators/layout.d.ts.map +1 -0
- package/dist/generators/generators/layout.js +111 -0
- package/dist/generators/generators/layout.js.map +1 -0
- package/dist/generators/generators/middleware.d.ts +38 -0
- package/dist/generators/generators/middleware.d.ts.map +1 -0
- package/dist/generators/generators/middleware.js +109 -0
- package/dist/generators/generators/middleware.js.map +1 -0
- package/dist/generators/generators/model.d.ts +16 -4
- package/dist/generators/generators/model.d.ts.map +1 -1
- package/dist/generators/generators/model.js +88 -7
- package/dist/generators/generators/model.js.map +1 -1
- package/dist/generators/generators/page.d.ts +36 -0
- package/dist/generators/generators/page.d.ts.map +1 -0
- package/dist/generators/generators/page.js +112 -0
- package/dist/generators/generators/page.js.map +1 -0
- package/dist/generators/generators/policy.d.ts +37 -0
- package/dist/generators/generators/policy.d.ts.map +1 -0
- package/dist/generators/generators/policy.js +100 -0
- package/dist/generators/generators/policy.js.map +1 -0
- package/dist/generators/generators/resource.d.ts +42 -4
- package/dist/generators/generators/resource.d.ts.map +1 -1
- package/dist/generators/generators/resource.js +450 -9
- package/dist/generators/generators/resource.js.map +1 -1
- package/dist/generators/generators/service.d.ts +38 -0
- package/dist/generators/generators/service.d.ts.map +1 -0
- package/dist/generators/generators/service.js +109 -0
- package/dist/generators/generators/service.js.map +1 -0
- package/dist/generators/registry.d.ts.map +1 -1
- package/dist/generators/registry.js +10 -1
- package/dist/generators/registry.js.map +1 -1
- package/dist/generators/templates/action.d.ts +28 -0
- package/dist/generators/templates/action.d.ts.map +1 -0
- package/dist/generators/templates/action.js +359 -0
- package/dist/generators/templates/action.js.map +1 -0
- package/dist/generators/templates/exception.d.ts +26 -0
- package/dist/generators/templates/exception.d.ts.map +1 -0
- package/dist/generators/templates/exception.js +671 -0
- package/dist/generators/templates/exception.js.map +1 -0
- package/dist/generators/templates/guard.d.ts +26 -0
- package/dist/generators/templates/guard.d.ts.map +1 -0
- package/dist/generators/templates/guard.js +555 -0
- package/dist/generators/templates/guard.js.map +1 -0
- package/dist/generators/templates/layout.d.ts +28 -0
- package/dist/generators/templates/layout.d.ts.map +1 -0
- package/dist/generators/templates/layout.js +147 -0
- package/dist/generators/templates/layout.js.map +1 -0
- package/dist/generators/templates/middleware.d.ts +26 -0
- package/dist/generators/templates/middleware.d.ts.map +1 -0
- package/dist/generators/templates/middleware.js +411 -0
- package/dist/generators/templates/middleware.js.map +1 -0
- package/dist/generators/templates/model.d.ts +3 -0
- package/dist/generators/templates/model.d.ts.map +1 -1
- package/dist/generators/templates/model.js +183 -28
- package/dist/generators/templates/model.js.map +1 -1
- package/dist/generators/templates/page.d.ts +36 -0
- package/dist/generators/templates/page.d.ts.map +1 -0
- package/dist/generators/templates/page.js +147 -0
- package/dist/generators/templates/page.js.map +1 -0
- package/dist/generators/templates/policy.d.ts +24 -0
- package/dist/generators/templates/policy.d.ts.map +1 -0
- package/dist/generators/templates/policy.js +499 -0
- package/dist/generators/templates/policy.js.map +1 -0
- package/dist/generators/templates/resource.d.ts +65 -0
- package/dist/generators/templates/resource.d.ts.map +1 -1
- package/dist/generators/templates/resource.js +228 -43
- package/dist/generators/templates/resource.js.map +1 -1
- package/dist/generators/templates/service.d.ts +26 -0
- package/dist/generators/templates/service.d.ts.map +1 -0
- package/dist/generators/templates/service.js +511 -0
- package/dist/generators/templates/service.js.map +1 -0
- package/dist/generators/types.d.ts +26 -14
- package/dist/generators/types.d.ts.map +1 -1
- package/dist/generators/types.js +8 -25
- package/dist/generators/types.js.map +1 -1
- package/dist/generators/utils/ast-helpers.d.ts +147 -0
- package/dist/generators/utils/ast-helpers.d.ts.map +1 -0
- package/dist/generators/utils/ast-helpers.js +350 -0
- package/dist/generators/utils/ast-helpers.js.map +1 -0
- package/dist/generators/utils/prisma-migration.d.ts +59 -0
- package/dist/generators/utils/prisma-migration.d.ts.map +1 -0
- package/dist/generators/utils/prisma-migration.js +161 -0
- package/dist/generators/utils/prisma-migration.js.map +1 -0
- package/dist/generators/utils/prisma-schema.d.ts +97 -0
- package/dist/generators/utils/prisma-schema.d.ts.map +1 -0
- package/dist/generators/utils/prisma-schema.js +235 -0
- package/dist/generators/utils/prisma-schema.js.map +1 -0
- package/dist/generators/utils/router-integration.d.ts +70 -0
- package/dist/generators/utils/router-integration.d.ts.map +1 -0
- package/dist/generators/utils/router-integration.js +305 -0
- package/dist/generators/utils/router-integration.js.map +1 -0
- package/dist/generators/utils/snapshot.d.ts +93 -0
- package/dist/generators/utils/snapshot.d.ts.map +1 -0
- package/dist/generators/utils/snapshot.js +178 -0
- package/dist/generators/utils/snapshot.js.map +1 -0
- package/dist/index.d.ts +6 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +6 -0
- package/dist/index.js.map +1 -1
- package/dist/seeding/errors.d.ts +11 -24
- package/dist/seeding/errors.d.ts.map +1 -1
- package/dist/seeding/errors.js +11 -50
- package/dist/seeding/errors.js.map +1 -1
- package/dist/utils/paths.d.ts +19 -0
- package/dist/utils/paths.d.ts.map +1 -1
- package/dist/utils/paths.js +45 -0
- package/dist/utils/paths.js.map +1 -1
- package/dist/utils/schema-patterns.d.ts +26 -0
- package/dist/utils/schema-patterns.d.ts.map +1 -0
- package/dist/utils/schema-patterns.js +40 -0
- package/dist/utils/schema-patterns.js.map +1 -0
- package/package.json +12 -10
|
@@ -0,0 +1,559 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Introspect command - Query VeloxTS project context for AI tools
|
|
3
|
+
*
|
|
4
|
+
* Provides machine-readable introspection of:
|
|
5
|
+
* - procedures - Procedure definitions with input/output schemas
|
|
6
|
+
* - schemas - Zod validation schemas in the project
|
|
7
|
+
* - routes - REST route mappings
|
|
8
|
+
* - errors - Error catalog with codes and fix suggestions
|
|
9
|
+
* - all - Complete project introspection
|
|
10
|
+
*/
|
|
11
|
+
import { existsSync } from 'node:fs';
|
|
12
|
+
import { readdir, readFile } from 'node:fs/promises';
|
|
13
|
+
import { join, resolve } from 'node:path';
|
|
14
|
+
import { discoverProceduresVerbose, getRouteSummary, isDiscoveryError, } from '@veloxts/router';
|
|
15
|
+
import { Command } from 'commander';
|
|
16
|
+
import { config as loadEnv } from 'dotenv';
|
|
17
|
+
import pc from 'picocolors';
|
|
18
|
+
import { getErrorsByCategory } from '../errors/index.js';
|
|
19
|
+
import { extractSchemaNames, extractSchemaTypes } from '../utils/schema-patterns.js';
|
|
20
|
+
// ============================================================================
|
|
21
|
+
// Constants
|
|
22
|
+
// ============================================================================
|
|
23
|
+
/** Default API prefix for REST routes */
|
|
24
|
+
const DEFAULT_API_PREFIX = '/api';
|
|
25
|
+
// ============================================================================
|
|
26
|
+
// Helper Functions
|
|
27
|
+
// ============================================================================
|
|
28
|
+
/**
|
|
29
|
+
* Load environment variables from .env file if present
|
|
30
|
+
*/
|
|
31
|
+
function loadEnvironment() {
|
|
32
|
+
const envPath = resolve(process.cwd(), '.env');
|
|
33
|
+
if (existsSync(envPath)) {
|
|
34
|
+
loadEnv({ path: envPath });
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
/**
|
|
38
|
+
* Extract procedure info with route mappings
|
|
39
|
+
*/
|
|
40
|
+
function extractProcedureIntrospection(collections, apiPrefix) {
|
|
41
|
+
const procedures = [];
|
|
42
|
+
const routeSummary = getRouteSummary(collections, apiPrefix);
|
|
43
|
+
// Create route lookup by namespace + procedure name
|
|
44
|
+
const routeMap = new Map();
|
|
45
|
+
for (const route of routeSummary) {
|
|
46
|
+
const key = `${route.namespace}:${route.procedure}`;
|
|
47
|
+
routeMap.set(key, { method: route.method, path: route.path });
|
|
48
|
+
}
|
|
49
|
+
for (const collection of collections) {
|
|
50
|
+
for (const [name, proc] of Object.entries(collection.procedures)) {
|
|
51
|
+
// Procedure type is CompiledProcedure from @veloxts/router
|
|
52
|
+
const procedure = proc;
|
|
53
|
+
const key = `${collection.namespace}:${name}`;
|
|
54
|
+
const route = routeMap.get(key);
|
|
55
|
+
procedures.push({
|
|
56
|
+
namespace: collection.namespace,
|
|
57
|
+
name,
|
|
58
|
+
type: procedure.type,
|
|
59
|
+
hasInput: procedure.inputSchema !== undefined,
|
|
60
|
+
hasOutput: procedure.outputSchema !== undefined,
|
|
61
|
+
guards: procedure.guards.map((g) => g.name),
|
|
62
|
+
route,
|
|
63
|
+
});
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
// Sort by namespace, then name
|
|
67
|
+
procedures.sort((a, b) => {
|
|
68
|
+
const nsCompare = a.namespace.localeCompare(b.namespace);
|
|
69
|
+
return nsCompare !== 0 ? nsCompare : a.name.localeCompare(b.name);
|
|
70
|
+
});
|
|
71
|
+
return procedures;
|
|
72
|
+
}
|
|
73
|
+
/**
|
|
74
|
+
* Scan for Zod schemas in project
|
|
75
|
+
*/
|
|
76
|
+
async function scanSchemas(schemasPath) {
|
|
77
|
+
const schemas = [];
|
|
78
|
+
const warnings = [];
|
|
79
|
+
if (!existsSync(schemasPath)) {
|
|
80
|
+
return { schemas, warnings };
|
|
81
|
+
}
|
|
82
|
+
try {
|
|
83
|
+
const entries = await readdir(schemasPath, { withFileTypes: true });
|
|
84
|
+
for (const entry of entries) {
|
|
85
|
+
if (!entry.isFile())
|
|
86
|
+
continue;
|
|
87
|
+
if (!entry.name.endsWith('.ts'))
|
|
88
|
+
continue;
|
|
89
|
+
if (entry.name.endsWith('.test.ts') || entry.name.endsWith('.spec.ts'))
|
|
90
|
+
continue;
|
|
91
|
+
if (entry.name.endsWith('.d.ts'))
|
|
92
|
+
continue;
|
|
93
|
+
const filePath = join(schemasPath, entry.name);
|
|
94
|
+
try {
|
|
95
|
+
const content = await readFile(filePath, 'utf-8');
|
|
96
|
+
// Use shared utilities for pattern matching
|
|
97
|
+
const schemaNames = extractSchemaNames(content);
|
|
98
|
+
const typeMap = extractSchemaTypes(content);
|
|
99
|
+
// Build schema info
|
|
100
|
+
for (const schemaName of schemaNames) {
|
|
101
|
+
schemas.push({
|
|
102
|
+
name: schemaName,
|
|
103
|
+
file: entry.name,
|
|
104
|
+
typeName: typeMap.get(schemaName),
|
|
105
|
+
});
|
|
106
|
+
}
|
|
107
|
+
}
|
|
108
|
+
catch (error) {
|
|
109
|
+
// Track file read errors as warnings
|
|
110
|
+
const message = error instanceof Error ? error.message : 'Unknown error';
|
|
111
|
+
warnings.push(`Failed to read ${entry.name}: ${message}`);
|
|
112
|
+
}
|
|
113
|
+
}
|
|
114
|
+
}
|
|
115
|
+
catch (error) {
|
|
116
|
+
// Track directory read errors as warnings
|
|
117
|
+
const message = error instanceof Error ? error.message : 'Unknown error';
|
|
118
|
+
warnings.push(`Failed to scan schemas directory: ${message}`);
|
|
119
|
+
}
|
|
120
|
+
// Sort by name
|
|
121
|
+
schemas.sort((a, b) => a.name.localeCompare(b.name));
|
|
122
|
+
return { schemas, warnings };
|
|
123
|
+
}
|
|
124
|
+
/**
|
|
125
|
+
* Get error catalog introspection
|
|
126
|
+
*/
|
|
127
|
+
function getErrorIntrospection() {
|
|
128
|
+
const errors = [];
|
|
129
|
+
// Get all category codes
|
|
130
|
+
const categories = ['E1', 'E2', 'E3', 'E4', 'E5', 'E9'];
|
|
131
|
+
const categoryNames = {
|
|
132
|
+
E1: 'Core/Runtime',
|
|
133
|
+
E2: 'Generator',
|
|
134
|
+
E3: 'Seeding',
|
|
135
|
+
E4: 'Migration/Discovery',
|
|
136
|
+
E5: 'Dev Server',
|
|
137
|
+
E9: 'Configuration',
|
|
138
|
+
};
|
|
139
|
+
for (const prefix of categories) {
|
|
140
|
+
const categoryErrors = getErrorsByCategory(prefix);
|
|
141
|
+
const categoryName = categoryNames[prefix] ?? 'Unknown';
|
|
142
|
+
for (const [code, def] of Object.entries(categoryErrors)) {
|
|
143
|
+
errors.push({
|
|
144
|
+
code,
|
|
145
|
+
name: def.name,
|
|
146
|
+
message: def.message,
|
|
147
|
+
fix: def.fix,
|
|
148
|
+
docsUrl: def.docsUrl,
|
|
149
|
+
category: categoryName,
|
|
150
|
+
});
|
|
151
|
+
}
|
|
152
|
+
}
|
|
153
|
+
// Sort by code
|
|
154
|
+
errors.sort((a, b) => a.code.localeCompare(b.code));
|
|
155
|
+
return errors;
|
|
156
|
+
}
|
|
157
|
+
// ============================================================================
|
|
158
|
+
// Output Formatters
|
|
159
|
+
// ============================================================================
|
|
160
|
+
/**
|
|
161
|
+
* Print procedures in human-readable format
|
|
162
|
+
*/
|
|
163
|
+
function printProcedures(procedures) {
|
|
164
|
+
console.log();
|
|
165
|
+
console.log(pc.bold('Procedures'));
|
|
166
|
+
console.log(pc.dim('─'.repeat(60)));
|
|
167
|
+
let currentNs = '';
|
|
168
|
+
for (const proc of procedures) {
|
|
169
|
+
if (proc.namespace !== currentNs) {
|
|
170
|
+
currentNs = proc.namespace;
|
|
171
|
+
console.log();
|
|
172
|
+
console.log(pc.bold(pc.cyan(`/${currentNs}`)));
|
|
173
|
+
}
|
|
174
|
+
const method = proc.route?.method ?? (proc.type === 'query' ? 'GET' : 'POST');
|
|
175
|
+
const methodColor = method === 'GET'
|
|
176
|
+
? pc.green
|
|
177
|
+
: method === 'POST'
|
|
178
|
+
? pc.yellow
|
|
179
|
+
: method === 'PUT'
|
|
180
|
+
? pc.blue
|
|
181
|
+
: method === 'PATCH'
|
|
182
|
+
? pc.cyan
|
|
183
|
+
: pc.red;
|
|
184
|
+
const schemas = [];
|
|
185
|
+
if (proc.hasInput)
|
|
186
|
+
schemas.push('in');
|
|
187
|
+
if (proc.hasOutput)
|
|
188
|
+
schemas.push('out');
|
|
189
|
+
const schemaInfo = schemas.length > 0 ? pc.dim(` [${schemas.join('/')}]`) : '';
|
|
190
|
+
const guardInfo = proc.guards.length > 0 ? pc.magenta(` 🛡 ${proc.guards.join(', ')}`) : '';
|
|
191
|
+
console.log(` ${methodColor(method.padEnd(7))} ${proc.name}${schemaInfo}${guardInfo}`);
|
|
192
|
+
if (proc.route) {
|
|
193
|
+
console.log(pc.dim(` → ${proc.route.path}`));
|
|
194
|
+
}
|
|
195
|
+
}
|
|
196
|
+
console.log();
|
|
197
|
+
}
|
|
198
|
+
/**
|
|
199
|
+
* Print schemas in human-readable format
|
|
200
|
+
*/
|
|
201
|
+
function printSchemas(schemas) {
|
|
202
|
+
console.log();
|
|
203
|
+
console.log(pc.bold('Schemas'));
|
|
204
|
+
console.log(pc.dim('─'.repeat(60)));
|
|
205
|
+
const byFile = new Map();
|
|
206
|
+
for (const schema of schemas) {
|
|
207
|
+
const list = byFile.get(schema.file) ?? [];
|
|
208
|
+
list.push(schema);
|
|
209
|
+
byFile.set(schema.file, list);
|
|
210
|
+
}
|
|
211
|
+
for (const [file, fileSchemas] of byFile) {
|
|
212
|
+
console.log();
|
|
213
|
+
console.log(pc.cyan(file));
|
|
214
|
+
for (const schema of fileSchemas) {
|
|
215
|
+
const typeName = schema.typeName ? pc.dim(` → ${schema.typeName}`) : '';
|
|
216
|
+
console.log(` ${schema.name}${typeName}`);
|
|
217
|
+
}
|
|
218
|
+
}
|
|
219
|
+
console.log();
|
|
220
|
+
}
|
|
221
|
+
/**
|
|
222
|
+
* Print routes in human-readable format
|
|
223
|
+
*/
|
|
224
|
+
function printRoutes(routes) {
|
|
225
|
+
console.log();
|
|
226
|
+
console.log(pc.bold('REST Routes'));
|
|
227
|
+
console.log(pc.dim('─'.repeat(60)));
|
|
228
|
+
for (const route of routes) {
|
|
229
|
+
const methodColor = route.method === 'GET'
|
|
230
|
+
? pc.green
|
|
231
|
+
: route.method === 'POST'
|
|
232
|
+
? pc.yellow
|
|
233
|
+
: route.method === 'PUT'
|
|
234
|
+
? pc.blue
|
|
235
|
+
: route.method === 'PATCH'
|
|
236
|
+
? pc.cyan
|
|
237
|
+
: pc.red;
|
|
238
|
+
console.log(` ${methodColor(route.method.padEnd(7))} ${route.path}`);
|
|
239
|
+
console.log(pc.dim(` → ${route.namespace}.${route.procedure}`));
|
|
240
|
+
}
|
|
241
|
+
console.log();
|
|
242
|
+
}
|
|
243
|
+
/**
|
|
244
|
+
* Print errors in human-readable format
|
|
245
|
+
*/
|
|
246
|
+
function printErrors(errors) {
|
|
247
|
+
console.log();
|
|
248
|
+
console.log(pc.bold('Error Catalog'));
|
|
249
|
+
console.log(pc.dim('─'.repeat(60)));
|
|
250
|
+
let currentCategory = '';
|
|
251
|
+
for (const error of errors) {
|
|
252
|
+
if (error.category !== currentCategory) {
|
|
253
|
+
currentCategory = error.category;
|
|
254
|
+
console.log();
|
|
255
|
+
console.log(pc.bold(pc.cyan(currentCategory)));
|
|
256
|
+
}
|
|
257
|
+
console.log(` ${pc.red(error.code)} ${error.name}`);
|
|
258
|
+
console.log(pc.dim(` ${error.message}`));
|
|
259
|
+
if (error.fix) {
|
|
260
|
+
console.log(pc.yellow(` Fix: ${error.fix}`));
|
|
261
|
+
}
|
|
262
|
+
}
|
|
263
|
+
console.log();
|
|
264
|
+
}
|
|
265
|
+
/**
|
|
266
|
+
* Print summary
|
|
267
|
+
*/
|
|
268
|
+
function printSummary(result) {
|
|
269
|
+
console.log(pc.dim('─'.repeat(60)));
|
|
270
|
+
const parts = [];
|
|
271
|
+
if (result.summary.procedureCount !== undefined) {
|
|
272
|
+
parts.push(`${result.summary.procedureCount} procedures`);
|
|
273
|
+
}
|
|
274
|
+
if (result.summary.schemaCount !== undefined) {
|
|
275
|
+
parts.push(`${result.summary.schemaCount} schemas`);
|
|
276
|
+
}
|
|
277
|
+
if (result.summary.routeCount !== undefined) {
|
|
278
|
+
parts.push(`${result.summary.routeCount} routes`);
|
|
279
|
+
}
|
|
280
|
+
if (result.summary.errorCount !== undefined) {
|
|
281
|
+
parts.push(`${result.summary.errorCount} error codes`);
|
|
282
|
+
}
|
|
283
|
+
console.log(pc.bold(parts.join(' • ')));
|
|
284
|
+
if (result.summary.scannedFiles !== undefined) {
|
|
285
|
+
console.log(pc.dim(`Scanned ${result.summary.scannedFiles} files`));
|
|
286
|
+
}
|
|
287
|
+
if (result.summary.warnings && result.summary.warnings.length > 0) {
|
|
288
|
+
console.log();
|
|
289
|
+
console.log(pc.yellow(`${result.summary.warnings.length} warning(s):`));
|
|
290
|
+
for (const warning of result.summary.warnings) {
|
|
291
|
+
console.log(pc.yellow(` • ${warning}`));
|
|
292
|
+
}
|
|
293
|
+
}
|
|
294
|
+
console.log();
|
|
295
|
+
}
|
|
296
|
+
// ============================================================================
|
|
297
|
+
// Command Implementation
|
|
298
|
+
// ============================================================================
|
|
299
|
+
/**
|
|
300
|
+
* Create the introspect procedures subcommand
|
|
301
|
+
*/
|
|
302
|
+
function createProceduresSubcommand() {
|
|
303
|
+
return new Command('procedures')
|
|
304
|
+
.alias('p')
|
|
305
|
+
.description('Introspect procedure definitions')
|
|
306
|
+
.option('-p, --path <path>', 'Path to procedures directory', './src/procedures')
|
|
307
|
+
.option('-r, --recursive', 'Scan subdirectories', false)
|
|
308
|
+
.option('--api-prefix <prefix>', 'API route prefix', DEFAULT_API_PREFIX)
|
|
309
|
+
.option('--json', 'Output as JSON', false)
|
|
310
|
+
.action(async (options) => {
|
|
311
|
+
loadEnvironment();
|
|
312
|
+
const proceduresPath = options.path ?? './src/procedures';
|
|
313
|
+
const apiPrefix = options.apiPrefix ?? DEFAULT_API_PREFIX;
|
|
314
|
+
const discoveryOptions = {
|
|
315
|
+
recursive: options.recursive ?? false,
|
|
316
|
+
onInvalidExport: 'warn',
|
|
317
|
+
};
|
|
318
|
+
try {
|
|
319
|
+
const discovery = await discoverProceduresVerbose(proceduresPath, discoveryOptions);
|
|
320
|
+
const procedures = extractProcedureIntrospection(discovery.collections, apiPrefix);
|
|
321
|
+
const result = {
|
|
322
|
+
procedures,
|
|
323
|
+
summary: {
|
|
324
|
+
procedureCount: procedures.length,
|
|
325
|
+
scannedFiles: discovery.scannedFiles.length,
|
|
326
|
+
warnings: discovery.warnings.map((w) => `${w.filePath}: ${w.message}`),
|
|
327
|
+
},
|
|
328
|
+
};
|
|
329
|
+
if (options.json) {
|
|
330
|
+
console.log(JSON.stringify(result, null, 2));
|
|
331
|
+
}
|
|
332
|
+
else {
|
|
333
|
+
printProcedures(procedures);
|
|
334
|
+
printSummary(result);
|
|
335
|
+
}
|
|
336
|
+
process.exit(0);
|
|
337
|
+
}
|
|
338
|
+
catch (error) {
|
|
339
|
+
if (isDiscoveryError(error)) {
|
|
340
|
+
if (options.json) {
|
|
341
|
+
console.log(JSON.stringify({ error: error.toJSON() }, null, 2));
|
|
342
|
+
}
|
|
343
|
+
else {
|
|
344
|
+
console.error(pc.red(error.format()));
|
|
345
|
+
}
|
|
346
|
+
process.exit(1);
|
|
347
|
+
}
|
|
348
|
+
throw error;
|
|
349
|
+
}
|
|
350
|
+
});
|
|
351
|
+
}
|
|
352
|
+
/**
|
|
353
|
+
* Create the introspect schemas subcommand
|
|
354
|
+
*/
|
|
355
|
+
function createSchemasSubcommand() {
|
|
356
|
+
return new Command('schemas')
|
|
357
|
+
.alias('s')
|
|
358
|
+
.description('Introspect Zod validation schemas')
|
|
359
|
+
.option('-p, --path <path>', 'Path to schemas directory', './src/schemas')
|
|
360
|
+
.option('--json', 'Output as JSON', false)
|
|
361
|
+
.action(async (options) => {
|
|
362
|
+
const schemasPath = options.path ?? './src/schemas';
|
|
363
|
+
const { schemas, warnings } = await scanSchemas(schemasPath);
|
|
364
|
+
const result = {
|
|
365
|
+
schemas,
|
|
366
|
+
summary: {
|
|
367
|
+
schemaCount: schemas.length,
|
|
368
|
+
warnings: warnings.length > 0 ? warnings : undefined,
|
|
369
|
+
},
|
|
370
|
+
};
|
|
371
|
+
if (options.json) {
|
|
372
|
+
console.log(JSON.stringify(result, null, 2));
|
|
373
|
+
}
|
|
374
|
+
else {
|
|
375
|
+
printSchemas(schemas);
|
|
376
|
+
printSummary(result);
|
|
377
|
+
}
|
|
378
|
+
// Explicit exit to ensure process terminates after async operations
|
|
379
|
+
process.exit(0);
|
|
380
|
+
});
|
|
381
|
+
}
|
|
382
|
+
/**
|
|
383
|
+
* Create the introspect routes subcommand
|
|
384
|
+
*/
|
|
385
|
+
function createRoutesSubcommand() {
|
|
386
|
+
return new Command('routes')
|
|
387
|
+
.alias('r')
|
|
388
|
+
.description('Introspect REST route mappings')
|
|
389
|
+
.option('-p, --path <path>', 'Path to procedures directory', './src/procedures')
|
|
390
|
+
.option('-r, --recursive', 'Scan subdirectories', false)
|
|
391
|
+
.option('--api-prefix <prefix>', 'API route prefix', DEFAULT_API_PREFIX)
|
|
392
|
+
.option('--json', 'Output as JSON', false)
|
|
393
|
+
.action(async (options) => {
|
|
394
|
+
loadEnvironment();
|
|
395
|
+
const proceduresPath = options.path ?? './src/procedures';
|
|
396
|
+
const apiPrefix = options.apiPrefix ?? DEFAULT_API_PREFIX;
|
|
397
|
+
const discoveryOptions = {
|
|
398
|
+
recursive: options.recursive ?? false,
|
|
399
|
+
onInvalidExport: 'warn',
|
|
400
|
+
};
|
|
401
|
+
try {
|
|
402
|
+
const discovery = await discoverProceduresVerbose(proceduresPath, discoveryOptions);
|
|
403
|
+
const routeSummary = getRouteSummary(discovery.collections, apiPrefix);
|
|
404
|
+
const routes = routeSummary.map((r) => ({
|
|
405
|
+
method: r.method,
|
|
406
|
+
path: r.path,
|
|
407
|
+
procedure: r.procedure,
|
|
408
|
+
namespace: r.namespace,
|
|
409
|
+
}));
|
|
410
|
+
const result = {
|
|
411
|
+
routes,
|
|
412
|
+
summary: {
|
|
413
|
+
routeCount: routes.length,
|
|
414
|
+
scannedFiles: discovery.scannedFiles.length,
|
|
415
|
+
},
|
|
416
|
+
};
|
|
417
|
+
if (options.json) {
|
|
418
|
+
console.log(JSON.stringify(result, null, 2));
|
|
419
|
+
}
|
|
420
|
+
else {
|
|
421
|
+
printRoutes(routes);
|
|
422
|
+
printSummary(result);
|
|
423
|
+
}
|
|
424
|
+
process.exit(0);
|
|
425
|
+
}
|
|
426
|
+
catch (error) {
|
|
427
|
+
if (isDiscoveryError(error)) {
|
|
428
|
+
if (options.json) {
|
|
429
|
+
console.log(JSON.stringify({ error: error.toJSON() }, null, 2));
|
|
430
|
+
}
|
|
431
|
+
else {
|
|
432
|
+
console.error(pc.red(error.format()));
|
|
433
|
+
}
|
|
434
|
+
process.exit(1);
|
|
435
|
+
}
|
|
436
|
+
throw error;
|
|
437
|
+
}
|
|
438
|
+
});
|
|
439
|
+
}
|
|
440
|
+
/**
|
|
441
|
+
* Create the introspect errors subcommand
|
|
442
|
+
*/
|
|
443
|
+
function createErrorsSubcommand() {
|
|
444
|
+
return new Command('errors')
|
|
445
|
+
.alias('e')
|
|
446
|
+
.description('Introspect error catalog')
|
|
447
|
+
.option('--json', 'Output as JSON', false)
|
|
448
|
+
.action((options) => {
|
|
449
|
+
const errors = getErrorIntrospection();
|
|
450
|
+
const result = {
|
|
451
|
+
errors,
|
|
452
|
+
summary: {
|
|
453
|
+
errorCount: errors.length,
|
|
454
|
+
},
|
|
455
|
+
};
|
|
456
|
+
if (options.json) {
|
|
457
|
+
console.log(JSON.stringify(result, null, 2));
|
|
458
|
+
}
|
|
459
|
+
else {
|
|
460
|
+
printErrors(errors);
|
|
461
|
+
printSummary(result);
|
|
462
|
+
}
|
|
463
|
+
});
|
|
464
|
+
}
|
|
465
|
+
/**
|
|
466
|
+
* Create the introspect all subcommand
|
|
467
|
+
*/
|
|
468
|
+
function createAllSubcommand() {
|
|
469
|
+
return new Command('all')
|
|
470
|
+
.alias('a')
|
|
471
|
+
.description('Full project introspection')
|
|
472
|
+
.option('-p, --path <path>', 'Path to procedures directory', './src/procedures')
|
|
473
|
+
.option('-s, --schemas-path <path>', 'Path to schemas directory', './src/schemas')
|
|
474
|
+
.option('-r, --recursive', 'Scan subdirectories', false)
|
|
475
|
+
.option('--api-prefix <prefix>', 'API route prefix', DEFAULT_API_PREFIX)
|
|
476
|
+
.option('--json', 'Output as JSON', false)
|
|
477
|
+
.action(async (options) => {
|
|
478
|
+
loadEnvironment();
|
|
479
|
+
const proceduresPath = options.path ?? './src/procedures';
|
|
480
|
+
const schemasPath = options.schemasPath ?? './src/schemas';
|
|
481
|
+
const apiPrefix = options.apiPrefix ?? DEFAULT_API_PREFIX;
|
|
482
|
+
const discoveryOptions = {
|
|
483
|
+
recursive: options.recursive ?? false,
|
|
484
|
+
onInvalidExport: 'warn',
|
|
485
|
+
};
|
|
486
|
+
try {
|
|
487
|
+
// Discover procedures and routes
|
|
488
|
+
const discovery = await discoverProceduresVerbose(proceduresPath, discoveryOptions);
|
|
489
|
+
const procedures = extractProcedureIntrospection(discovery.collections, apiPrefix);
|
|
490
|
+
const routeSummary = getRouteSummary(discovery.collections, apiPrefix);
|
|
491
|
+
const routes = routeSummary.map((r) => ({
|
|
492
|
+
method: r.method,
|
|
493
|
+
path: r.path,
|
|
494
|
+
procedure: r.procedure,
|
|
495
|
+
namespace: r.namespace,
|
|
496
|
+
}));
|
|
497
|
+
// Scan schemas
|
|
498
|
+
const { schemas, warnings: schemaWarnings } = await scanSchemas(schemasPath);
|
|
499
|
+
// Get errors
|
|
500
|
+
const errors = getErrorIntrospection();
|
|
501
|
+
// Combine warnings from procedure discovery and schema scanning
|
|
502
|
+
const allWarnings = [
|
|
503
|
+
...discovery.warnings.map((w) => `${w.filePath}: ${w.message}`),
|
|
504
|
+
...schemaWarnings,
|
|
505
|
+
];
|
|
506
|
+
const result = {
|
|
507
|
+
procedures,
|
|
508
|
+
schemas,
|
|
509
|
+
routes,
|
|
510
|
+
errors,
|
|
511
|
+
summary: {
|
|
512
|
+
procedureCount: procedures.length,
|
|
513
|
+
schemaCount: schemas.length,
|
|
514
|
+
routeCount: routes.length,
|
|
515
|
+
errorCount: errors.length,
|
|
516
|
+
scannedFiles: discovery.scannedFiles.length,
|
|
517
|
+
warnings: allWarnings.length > 0 ? allWarnings : undefined,
|
|
518
|
+
},
|
|
519
|
+
};
|
|
520
|
+
if (options.json) {
|
|
521
|
+
console.log(JSON.stringify(result, null, 2));
|
|
522
|
+
}
|
|
523
|
+
else {
|
|
524
|
+
printProcedures(procedures);
|
|
525
|
+
printSchemas(schemas);
|
|
526
|
+
printRoutes(routes);
|
|
527
|
+
printErrors(errors);
|
|
528
|
+
printSummary(result);
|
|
529
|
+
}
|
|
530
|
+
process.exit(0);
|
|
531
|
+
}
|
|
532
|
+
catch (error) {
|
|
533
|
+
if (isDiscoveryError(error)) {
|
|
534
|
+
if (options.json) {
|
|
535
|
+
console.log(JSON.stringify({ error: error.toJSON() }, null, 2));
|
|
536
|
+
}
|
|
537
|
+
else {
|
|
538
|
+
console.error(pc.red(error.format()));
|
|
539
|
+
}
|
|
540
|
+
process.exit(1);
|
|
541
|
+
}
|
|
542
|
+
throw error;
|
|
543
|
+
}
|
|
544
|
+
});
|
|
545
|
+
}
|
|
546
|
+
/**
|
|
547
|
+
* Create the introspect command with subcommands
|
|
548
|
+
*/
|
|
549
|
+
export function createIntrospectCommand() {
|
|
550
|
+
const introspect = new Command('introspect')
|
|
551
|
+
.description('Introspect VeloxTS project context for AI tools')
|
|
552
|
+
.addCommand(createProceduresSubcommand())
|
|
553
|
+
.addCommand(createSchemasSubcommand())
|
|
554
|
+
.addCommand(createRoutesSubcommand())
|
|
555
|
+
.addCommand(createErrorsSubcommand())
|
|
556
|
+
.addCommand(createAllSubcommand());
|
|
557
|
+
return introspect;
|
|
558
|
+
}
|
|
559
|
+
//# sourceMappingURL=introspect.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"introspect.js","sourceRoot":"","sources":["../../src/commands/introspect.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"make.d.ts","sourceRoot":"","sources":["../../src/commands/make.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAGH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAqCpC;;GAEG;AACH,wBAAgB,iBAAiB,IAAI,OAAO,
|
|
1
|
+
{"version":3,"file":"make.d.ts","sourceRoot":"","sources":["../../src/commands/make.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAGH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAqCpC;;GAEG;AACH,wBAAgB,iBAAiB,IAAI,OAAO,CA2D3C"}
|
package/dist/commands/make.js
CHANGED
|
@@ -45,6 +45,12 @@ export function createMakeCommand() {
|
|
|
45
45
|
.option('--skip-model', 'Skip Prisma model generation', false)
|
|
46
46
|
.option('--skip-schema', 'Skip Zod schema generation', false)
|
|
47
47
|
.option('--skip-procedure', 'Skip procedure generation', false)
|
|
48
|
+
.option('-i, --interactive', 'Interactively define fields (resource/model)', false)
|
|
49
|
+
.option('--skip-fields', 'Skip field prompts, generate skeleton only', false)
|
|
50
|
+
// Auto-registration options
|
|
51
|
+
.option('--skip-registration', 'Skip auto-registering procedures in router', false)
|
|
52
|
+
.option('--skip-migration', 'Skip Prisma migration prompt', false)
|
|
53
|
+
.option('--auto-migrate', 'Auto-run Prisma migration without prompting', false)
|
|
48
54
|
.action(async (type, name, options) => {
|
|
49
55
|
await runMake(type, name, options);
|
|
50
56
|
});
|
|
@@ -53,12 +59,14 @@ export function createMakeCommand() {
|
|
|
53
59
|
Available generators:${formatGeneratorList()}
|
|
54
60
|
|
|
55
61
|
Examples:
|
|
56
|
-
${formatCommand('velox make resource Post')}
|
|
57
|
-
${formatCommand('velox m r User --soft-delete')}
|
|
58
|
-
${formatCommand('velox m
|
|
59
|
-
${formatCommand('velox m
|
|
60
|
-
${formatCommand('velox m
|
|
61
|
-
${formatCommand('velox
|
|
62
|
+
${formatCommand('velox make resource Post')} Scaffold complete Post resource
|
|
63
|
+
${formatCommand('velox m r User --soft-delete')} Resource with soft delete support
|
|
64
|
+
${formatCommand('velox m r Post --auto-migrate')} Auto-run Prisma migration
|
|
65
|
+
${formatCommand('velox m r Post --skip-registration')} Skip auto-registration
|
|
66
|
+
${formatCommand('velox m p User --crud')} Scaffold CRUD procedures only
|
|
67
|
+
${formatCommand('velox m s User --crud')} Scaffold Zod schemas only
|
|
68
|
+
${formatCommand('velox m t User -G procedure')} Scaffold procedure unit tests
|
|
69
|
+
${formatCommand('velox make --dry-run r Post')} Preview resource scaffolding
|
|
62
70
|
`);
|
|
63
71
|
return cmd;
|
|
64
72
|
}
|
|
@@ -128,9 +136,11 @@ async function runMake(type, name, options) {
|
|
|
128
136
|
cwd,
|
|
129
137
|
project,
|
|
130
138
|
}, { dryRun, force, json });
|
|
131
|
-
// Show spinner for generation
|
|
139
|
+
// Show spinner for generation (unless generator handles its own spinner)
|
|
140
|
+
// Resource and model generators handle their own spinner after interactive prompts
|
|
141
|
+
const generatorHandlesSpinner = generator.metadata.name === 'resource' || generator.metadata.name === 'model';
|
|
132
142
|
let output;
|
|
133
|
-
if (isInteractive) {
|
|
143
|
+
if (isInteractive && !generatorHandlesSpinner) {
|
|
134
144
|
const s = p.spinner();
|
|
135
145
|
s.start(`Scaffolding ${generator.metadata.name}...`);
|
|
136
146
|
try {
|