@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.
Files changed (203) hide show
  1. package/README.md +2 -48
  2. package/dist/cli.d.ts +5 -1
  3. package/dist/cli.d.ts.map +1 -1
  4. package/dist/cli.js +7 -1
  5. package/dist/cli.js.map +1 -1
  6. package/dist/commands/dev.d.ts.map +1 -1
  7. package/dist/commands/dev.js +71 -7
  8. package/dist/commands/dev.js.map +1 -1
  9. package/dist/commands/introspect.d.ts +16 -0
  10. package/dist/commands/introspect.d.ts.map +1 -0
  11. package/dist/commands/introspect.js +559 -0
  12. package/dist/commands/introspect.js.map +1 -0
  13. package/dist/commands/make.d.ts.map +1 -1
  14. package/dist/commands/make.js +18 -8
  15. package/dist/commands/make.js.map +1 -1
  16. package/dist/commands/procedures.d.ts.map +1 -1
  17. package/dist/commands/procedures.js +16 -0
  18. package/dist/commands/procedures.js.map +1 -1
  19. package/dist/dev/error-parser.d.ts.map +1 -1
  20. package/dist/dev/error-parser.js +24 -8
  21. package/dist/dev/error-parser.js.map +1 -1
  22. package/dist/dev/hmr-runner.d.ts.map +1 -1
  23. package/dist/dev/hmr-runner.js +6 -1
  24. package/dist/dev/hmr-runner.js.map +1 -1
  25. package/dist/dev/index.d.ts +3 -3
  26. package/dist/dev/index.d.ts.map +1 -1
  27. package/dist/dev/index.js +3 -3
  28. package/dist/dev/index.js.map +1 -1
  29. package/dist/dev/reload-reporter.d.ts +2 -2
  30. package/dist/dev/reload-reporter.d.ts.map +1 -1
  31. package/dist/dev/reload-reporter.js +2 -2
  32. package/dist/dev/reload-reporter.js.map +1 -1
  33. package/dist/errors/catalog.d.ts +48 -0
  34. package/dist/errors/catalog.d.ts.map +1 -0
  35. package/dist/errors/catalog.js +421 -0
  36. package/dist/errors/catalog.js.map +1 -0
  37. package/dist/errors/index.d.ts +26 -0
  38. package/dist/errors/index.d.ts.map +1 -0
  39. package/dist/errors/index.js +28 -0
  40. package/dist/errors/index.js.map +1 -0
  41. package/dist/errors/velox-error.d.ts +122 -0
  42. package/dist/errors/velox-error.d.ts.map +1 -0
  43. package/dist/errors/velox-error.js +216 -0
  44. package/dist/errors/velox-error.js.map +1 -0
  45. package/dist/generators/base.d.ts.map +1 -1
  46. package/dist/generators/base.js +26 -0
  47. package/dist/generators/base.js.map +1 -1
  48. package/dist/generators/fields/__tests__/helpers.d.ts +66 -0
  49. package/dist/generators/fields/__tests__/helpers.d.ts.map +1 -0
  50. package/dist/generators/fields/__tests__/helpers.js +142 -0
  51. package/dist/generators/fields/__tests__/helpers.js.map +1 -0
  52. package/dist/generators/fields/actions.d.ts +58 -0
  53. package/dist/generators/fields/actions.d.ts.map +1 -0
  54. package/dist/generators/fields/actions.js +230 -0
  55. package/dist/generators/fields/actions.js.map +1 -0
  56. package/dist/generators/fields/display.d.ts +28 -0
  57. package/dist/generators/fields/display.d.ts.map +1 -0
  58. package/dist/generators/fields/display.js +214 -0
  59. package/dist/generators/fields/display.js.map +1 -0
  60. package/dist/generators/fields/index.d.ts +12 -0
  61. package/dist/generators/fields/index.d.ts.map +1 -0
  62. package/dist/generators/fields/index.js +12 -0
  63. package/dist/generators/fields/index.js.map +1 -0
  64. package/dist/generators/fields/prompts.d.ts +31 -0
  65. package/dist/generators/fields/prompts.d.ts.map +1 -0
  66. package/dist/generators/fields/prompts.js +366 -0
  67. package/dist/generators/fields/prompts.js.map +1 -0
  68. package/dist/generators/fields/templates.d.ts +49 -0
  69. package/dist/generators/fields/templates.d.ts.map +1 -0
  70. package/dist/generators/fields/templates.js +230 -0
  71. package/dist/generators/fields/templates.js.map +1 -0
  72. package/dist/generators/fields/types.d.ts +95 -0
  73. package/dist/generators/fields/types.d.ts.map +1 -0
  74. package/dist/generators/fields/types.js +150 -0
  75. package/dist/generators/fields/types.js.map +1 -0
  76. package/dist/generators/generators/action.d.ts +37 -0
  77. package/dist/generators/generators/action.d.ts.map +1 -0
  78. package/dist/generators/generators/action.js +109 -0
  79. package/dist/generators/generators/action.js.map +1 -0
  80. package/dist/generators/generators/exception.d.ts +38 -0
  81. package/dist/generators/generators/exception.d.ts.map +1 -0
  82. package/dist/generators/generators/exception.js +109 -0
  83. package/dist/generators/generators/exception.js.map +1 -0
  84. package/dist/generators/generators/guard.d.ts +38 -0
  85. package/dist/generators/generators/guard.d.ts.map +1 -0
  86. package/dist/generators/generators/guard.js +109 -0
  87. package/dist/generators/generators/guard.js.map +1 -0
  88. package/dist/generators/generators/index.d.ts +8 -0
  89. package/dist/generators/generators/index.d.ts.map +1 -1
  90. package/dist/generators/generators/index.js +27 -0
  91. package/dist/generators/generators/index.js.map +1 -1
  92. package/dist/generators/generators/layout.d.ts +36 -0
  93. package/dist/generators/generators/layout.d.ts.map +1 -0
  94. package/dist/generators/generators/layout.js +111 -0
  95. package/dist/generators/generators/layout.js.map +1 -0
  96. package/dist/generators/generators/middleware.d.ts +38 -0
  97. package/dist/generators/generators/middleware.d.ts.map +1 -0
  98. package/dist/generators/generators/middleware.js +109 -0
  99. package/dist/generators/generators/middleware.js.map +1 -0
  100. package/dist/generators/generators/model.d.ts +16 -4
  101. package/dist/generators/generators/model.d.ts.map +1 -1
  102. package/dist/generators/generators/model.js +88 -7
  103. package/dist/generators/generators/model.js.map +1 -1
  104. package/dist/generators/generators/page.d.ts +36 -0
  105. package/dist/generators/generators/page.d.ts.map +1 -0
  106. package/dist/generators/generators/page.js +112 -0
  107. package/dist/generators/generators/page.js.map +1 -0
  108. package/dist/generators/generators/policy.d.ts +37 -0
  109. package/dist/generators/generators/policy.d.ts.map +1 -0
  110. package/dist/generators/generators/policy.js +100 -0
  111. package/dist/generators/generators/policy.js.map +1 -0
  112. package/dist/generators/generators/resource.d.ts +42 -4
  113. package/dist/generators/generators/resource.d.ts.map +1 -1
  114. package/dist/generators/generators/resource.js +450 -9
  115. package/dist/generators/generators/resource.js.map +1 -1
  116. package/dist/generators/generators/service.d.ts +38 -0
  117. package/dist/generators/generators/service.d.ts.map +1 -0
  118. package/dist/generators/generators/service.js +109 -0
  119. package/dist/generators/generators/service.js.map +1 -0
  120. package/dist/generators/registry.d.ts.map +1 -1
  121. package/dist/generators/registry.js +10 -1
  122. package/dist/generators/registry.js.map +1 -1
  123. package/dist/generators/templates/action.d.ts +28 -0
  124. package/dist/generators/templates/action.d.ts.map +1 -0
  125. package/dist/generators/templates/action.js +359 -0
  126. package/dist/generators/templates/action.js.map +1 -0
  127. package/dist/generators/templates/exception.d.ts +26 -0
  128. package/dist/generators/templates/exception.d.ts.map +1 -0
  129. package/dist/generators/templates/exception.js +671 -0
  130. package/dist/generators/templates/exception.js.map +1 -0
  131. package/dist/generators/templates/guard.d.ts +26 -0
  132. package/dist/generators/templates/guard.d.ts.map +1 -0
  133. package/dist/generators/templates/guard.js +555 -0
  134. package/dist/generators/templates/guard.js.map +1 -0
  135. package/dist/generators/templates/layout.d.ts +28 -0
  136. package/dist/generators/templates/layout.d.ts.map +1 -0
  137. package/dist/generators/templates/layout.js +147 -0
  138. package/dist/generators/templates/layout.js.map +1 -0
  139. package/dist/generators/templates/middleware.d.ts +26 -0
  140. package/dist/generators/templates/middleware.d.ts.map +1 -0
  141. package/dist/generators/templates/middleware.js +411 -0
  142. package/dist/generators/templates/middleware.js.map +1 -0
  143. package/dist/generators/templates/model.d.ts +3 -0
  144. package/dist/generators/templates/model.d.ts.map +1 -1
  145. package/dist/generators/templates/model.js +183 -28
  146. package/dist/generators/templates/model.js.map +1 -1
  147. package/dist/generators/templates/page.d.ts +36 -0
  148. package/dist/generators/templates/page.d.ts.map +1 -0
  149. package/dist/generators/templates/page.js +147 -0
  150. package/dist/generators/templates/page.js.map +1 -0
  151. package/dist/generators/templates/policy.d.ts +24 -0
  152. package/dist/generators/templates/policy.d.ts.map +1 -0
  153. package/dist/generators/templates/policy.js +499 -0
  154. package/dist/generators/templates/policy.js.map +1 -0
  155. package/dist/generators/templates/resource.d.ts +65 -0
  156. package/dist/generators/templates/resource.d.ts.map +1 -1
  157. package/dist/generators/templates/resource.js +228 -43
  158. package/dist/generators/templates/resource.js.map +1 -1
  159. package/dist/generators/templates/service.d.ts +26 -0
  160. package/dist/generators/templates/service.d.ts.map +1 -0
  161. package/dist/generators/templates/service.js +511 -0
  162. package/dist/generators/templates/service.js.map +1 -0
  163. package/dist/generators/types.d.ts +26 -14
  164. package/dist/generators/types.d.ts.map +1 -1
  165. package/dist/generators/types.js +8 -25
  166. package/dist/generators/types.js.map +1 -1
  167. package/dist/generators/utils/ast-helpers.d.ts +147 -0
  168. package/dist/generators/utils/ast-helpers.d.ts.map +1 -0
  169. package/dist/generators/utils/ast-helpers.js +350 -0
  170. package/dist/generators/utils/ast-helpers.js.map +1 -0
  171. package/dist/generators/utils/prisma-migration.d.ts +59 -0
  172. package/dist/generators/utils/prisma-migration.d.ts.map +1 -0
  173. package/dist/generators/utils/prisma-migration.js +161 -0
  174. package/dist/generators/utils/prisma-migration.js.map +1 -0
  175. package/dist/generators/utils/prisma-schema.d.ts +97 -0
  176. package/dist/generators/utils/prisma-schema.d.ts.map +1 -0
  177. package/dist/generators/utils/prisma-schema.js +235 -0
  178. package/dist/generators/utils/prisma-schema.js.map +1 -0
  179. package/dist/generators/utils/router-integration.d.ts +70 -0
  180. package/dist/generators/utils/router-integration.d.ts.map +1 -0
  181. package/dist/generators/utils/router-integration.js +305 -0
  182. package/dist/generators/utils/router-integration.js.map +1 -0
  183. package/dist/generators/utils/snapshot.d.ts +93 -0
  184. package/dist/generators/utils/snapshot.d.ts.map +1 -0
  185. package/dist/generators/utils/snapshot.js +178 -0
  186. package/dist/generators/utils/snapshot.js.map +1 -0
  187. package/dist/index.d.ts +6 -0
  188. package/dist/index.d.ts.map +1 -1
  189. package/dist/index.js +6 -0
  190. package/dist/index.js.map +1 -1
  191. package/dist/seeding/errors.d.ts +11 -24
  192. package/dist/seeding/errors.d.ts.map +1 -1
  193. package/dist/seeding/errors.js +11 -50
  194. package/dist/seeding/errors.js.map +1 -1
  195. package/dist/utils/paths.d.ts +19 -0
  196. package/dist/utils/paths.d.ts.map +1 -1
  197. package/dist/utils/paths.js +45 -0
  198. package/dist/utils/paths.js.map +1 -1
  199. package/dist/utils/schema-patterns.d.ts +26 -0
  200. package/dist/utils/schema-patterns.d.ts.map +1 -0
  201. package/dist/utils/schema-patterns.js +40 -0
  202. package/dist/utils/schema-patterns.js.map +1 -0
  203. 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":"AAAA;;;;;;;;;GASG;AAEH,OAAO,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AACrC,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AACrD,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAE1C,OAAO,EAGL,yBAAyB,EACzB,eAAe,EACf,gBAAgB,GAEjB,MAAM,iBAAiB,CAAC;AACzB,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,MAAM,IAAI,OAAO,EAAE,MAAM,QAAQ,CAAC;AAC3C,OAAO,EAAE,MAAM,YAAY,CAAC;AAE5B,OAAO,EAAE,mBAAmB,EAAE,MAAM,oBAAoB,CAAC;AACzD,OAAO,EAAE,kBAAkB,EAAE,kBAAkB,EAAE,MAAM,6BAA6B,CAAC;AAErF,+EAA+E;AAC/E,YAAY;AACZ,+EAA+E;AAE/E,yCAAyC;AACzC,MAAM,kBAAkB,GAAG,MAAM,CAAC;AA+DlC,+EAA+E;AAC/E,mBAAmB;AACnB,+EAA+E;AAE/E;;GAEG;AACH,SAAS,eAAe;IACtB,MAAM,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,MAAM,CAAC,CAAC;IAC/C,IAAI,UAAU,CAAC,OAAO,CAAC,EAAE,CAAC;QACxB,OAAO,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC,CAAC;IAC7B,CAAC;AACH,CAAC;AAED;;GAEG;AACH,SAAS,6BAA6B,CACpC,WAAkC,EAClC,SAAiB;IAEjB,MAAM,UAAU,GAA6B,EAAE,CAAC;IAChD,MAAM,YAAY,GAAG,eAAe,CAAC,WAAW,EAAE,SAAS,CAAC,CAAC;IAE7D,oDAAoD;IACpD,MAAM,QAAQ,GAAG,IAAI,GAAG,EAA4C,CAAC;IACrE,KAAK,MAAM,KAAK,IAAI,YAAY,EAAE,CAAC;QACjC,MAAM,GAAG,GAAG,GAAG,KAAK,CAAC,SAAS,IAAI,KAAK,CAAC,SAAS,EAAE,CAAC;QACpD,QAAQ,CAAC,GAAG,CAAC,GAAG,EAAE,EAAE,MAAM,EAAE,KAAK,CAAC,MAAM,EAAE,IAAI,EAAE,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC;IAChE,CAAC;IAED,KAAK,MAAM,UAAU,IAAI,WAAW,EAAE,CAAC;QACrC,KAAK,MAAM,CAAC,IAAI,EAAE,IAAI,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,UAAU,CAAC,UAAU,CAAC,EAAE,CAAC;YACjE,2DAA2D;YAC3D,MAAM,SAAS,GAAG,IAAyB,CAAC;YAE5C,MAAM,GAAG,GAAG,GAAG,UAAU,CAAC,SAAS,IAAI,IAAI,EAAE,CAAC;YAC9C,MAAM,KAAK,GAAG,QAAQ,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;YAEhC,UAAU,CAAC,IAAI,CAAC;gBACd,SAAS,EAAE,UAAU,CAAC,SAAS;gBAC/B,IAAI;gBACJ,IAAI,EAAE,SAAS,CAAC,IAAI;gBACpB,QAAQ,EAAE,SAAS,CAAC,WAAW,KAAK,SAAS;gBAC7C,SAAS,EAAE,SAAS,CAAC,YAAY,KAAK,SAAS;gBAC/C,MAAM,EAAE,SAAS,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC;gBAC3C,KAAK;aACN,CAAC,CAAC;QACL,CAAC;IACH,CAAC;IAED,+BAA+B;IAC/B,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE;QACvB,MAAM,SAAS,GAAG,CAAC,CAAC,SAAS,CAAC,aAAa,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC;QACzD,OAAO,SAAS,KAAK,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;IACpE,CAAC,CAAC,CAAC;IAEH,OAAO,UAAU,CAAC;AACpB,CAAC;AAUD;;GAEG;AACH,KAAK,UAAU,WAAW,CAAC,WAAmB;IAC5C,MAAM,OAAO,GAA0B,EAAE,CAAC;IAC1C,MAAM,QAAQ,GAAa,EAAE,CAAC;IAE9B,IAAI,CAAC,UAAU,CAAC,WAAW,CAAC,EAAE,CAAC;QAC7B,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,CAAC;IAC/B,CAAC;IAED,IAAI,CAAC;QACH,MAAM,OAAO,GAAG,MAAM,OAAO,CAAC,WAAW,EAAE,EAAE,aAAa,EAAE,IAAI,EAAE,CAAC,CAAC;QAEpE,KAAK,MAAM,KAAK,IAAI,OAAO,EAAE,CAAC;YAC5B,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE;gBAAE,SAAS;YAC9B,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC;gBAAE,SAAS;YAC1C,IAAI,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,UAAU,CAAC,IAAI,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,UAAU,CAAC;gBAAE,SAAS;YACjF,IAAI,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC;gBAAE,SAAS;YAE3C,MAAM,QAAQ,GAAG,IAAI,CAAC,WAAW,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC;YAC/C,IAAI,CAAC;gBACH,MAAM,OAAO,GAAG,MAAM,QAAQ,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;gBAElD,4CAA4C;gBAC5C,MAAM,WAAW,GAAG,kBAAkB,CAAC,OAAO,CAAC,CAAC;gBAChD,MAAM,OAAO,GAAG,kBAAkB,CAAC,OAAO,CAAC,CAAC;gBAE5C,oBAAoB;gBACpB,KAAK,MAAM,UAAU,IAAI,WAAW,EAAE,CAAC;oBACrC,OAAO,CAAC,IAAI,CAAC;wBACX,IAAI,EAAE,UAAU;wBAChB,IAAI,EAAE,KAAK,CAAC,IAAI;wBAChB,QAAQ,EAAE,OAAO,CAAC,GAAG,CAAC,UAAU,CAAC;qBAClC,CAAC,CAAC;gBACL,CAAC;YACH,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBACf,qCAAqC;gBACrC,MAAM,OAAO,GAAG,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,eAAe,CAAC;gBACzE,QAAQ,CAAC,IAAI,CAAC,kBAAkB,KAAK,CAAC,IAAI,KAAK,OAAO,EAAE,CAAC,CAAC;YAC5D,CAAC;QACH,CAAC;IACH,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,0CAA0C;QAC1C,MAAM,OAAO,GAAG,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,eAAe,CAAC;QACzE,QAAQ,CAAC,IAAI,CAAC,qCAAqC,OAAO,EAAE,CAAC,CAAC;IAChE,CAAC;IAED,eAAe;IACf,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC;IAErD,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,CAAC;AAC/B,CAAC;AAED;;GAEG;AACH,SAAS,qBAAqB;IAC5B,MAAM,MAAM,GAAyB,EAAE,CAAC;IAExC,yBAAyB;IACzB,MAAM,UAAU,GAAG,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC;IACxD,MAAM,aAAa,GAA2B;QAC5C,EAAE,EAAE,cAAc;QAClB,EAAE,EAAE,WAAW;QACf,EAAE,EAAE,SAAS;QACb,EAAE,EAAE,qBAAqB;QACzB,EAAE,EAAE,YAAY;QAChB,EAAE,EAAE,eAAe;KACpB,CAAC;IAEF,KAAK,MAAM,MAAM,IAAI,UAAU,EAAE,CAAC;QAChC,MAAM,cAAc,GAAG,mBAAmB,CAAC,MAAM,CAAC,CAAC;QACnD,MAAM,YAAY,GAAG,aAAa,CAAC,MAAM,CAAC,IAAI,SAAS,CAAC;QAExD,KAAK,MAAM,CAAC,IAAI,EAAE,GAAG,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,cAAc,CAAC,EAAE,CAAC;YACzD,MAAM,CAAC,IAAI,CAAC;gBACV,IAAI;gBACJ,IAAI,EAAE,GAAG,CAAC,IAAI;gBACd,OAAO,EAAE,GAAG,CAAC,OAAO;gBACpB,GAAG,EAAE,GAAG,CAAC,GAAG;gBACZ,OAAO,EAAE,GAAG,CAAC,OAAO;gBACpB,QAAQ,EAAE,YAAY;aACvB,CAAC,CAAC;QACL,CAAC;IACH,CAAC;IAED,eAAe;IACf,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC;IAEpD,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,+EAA+E;AAC/E,oBAAoB;AACpB,+EAA+E;AAE/E;;GAEG;AACH,SAAS,eAAe,CAAC,UAAoC;IAC3D,OAAO,CAAC,GAAG,EAAE,CAAC;IACd,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC,CAAC;IACnC,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;IAEpC,IAAI,SAAS,GAAG,EAAE,CAAC;IACnB,KAAK,MAAM,IAAI,IAAI,UAAU,EAAE,CAAC;QAC9B,IAAI,IAAI,CAAC,SAAS,KAAK,SAAS,EAAE,CAAC;YACjC,SAAS,GAAG,IAAI,CAAC,SAAS,CAAC;YAC3B,OAAO,CAAC,GAAG,EAAE,CAAC;YACd,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,IAAI,SAAS,EAAE,CAAC,CAAC,CAAC,CAAC;QACjD,CAAC;QAED,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,EAAE,MAAM,IAAI,CAAC,IAAI,CAAC,IAAI,KAAK,OAAO,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC;QAC9E,MAAM,WAAW,GACf,MAAM,KAAK,KAAK;YACd,CAAC,CAAC,EAAE,CAAC,KAAK;YACV,CAAC,CAAC,MAAM,KAAK,MAAM;gBACjB,CAAC,CAAC,EAAE,CAAC,MAAM;gBACX,CAAC,CAAC,MAAM,KAAK,KAAK;oBAChB,CAAC,CAAC,EAAE,CAAC,IAAI;oBACT,CAAC,CAAC,MAAM,KAAK,OAAO;wBAClB,CAAC,CAAC,EAAE,CAAC,IAAI;wBACT,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC;QAEnB,MAAM,OAAO,GAAG,EAAE,CAAC;QACnB,IAAI,IAAI,CAAC,QAAQ;YAAE,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACtC,IAAI,IAAI,CAAC,SAAS;YAAE,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QACxC,MAAM,UAAU,GAAG,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,KAAK,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;QAC/E,MAAM,SAAS,GAAG,IAAI,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,OAAO,CAAC,OAAO,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;QAE5F,OAAO,CAAC,GAAG,CAAC,KAAK,WAAW,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC,IAAI,GAAG,UAAU,GAAG,SAAS,EAAE,CAAC,CAAC;QAExF,IAAI,IAAI,CAAC,KAAK,EAAE,CAAC;YACf,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,eAAe,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC;QACxD,CAAC;IACH,CAAC;IAED,OAAO,CAAC,GAAG,EAAE,CAAC;AAChB,CAAC;AAED;;GAEG;AACH,SAAS,YAAY,CAAC,OAA8B;IAClD,OAAO,CAAC,GAAG,EAAE,CAAC;IACd,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC;IAChC,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;IAEpC,MAAM,MAAM,GAAG,IAAI,GAAG,EAAiC,CAAC;IACxD,KAAK,MAAM,MAAM,IAAI,OAAO,EAAE,CAAC;QAC7B,MAAM,IAAI,GAAG,MAAM,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC;QAC3C,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QAClB,MAAM,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;IAChC,CAAC;IAED,KAAK,MAAM,CAAC,IAAI,EAAE,WAAW,CAAC,IAAI,MAAM,EAAE,CAAC;QACzC,OAAO,CAAC,GAAG,EAAE,CAAC;QACd,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;QAC3B,KAAK,MAAM,MAAM,IAAI,WAAW,EAAE,CAAC;YACjC,MAAM,QAAQ,GAAG,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,MAAM,MAAM,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;YACxE,OAAO,CAAC,GAAG,CAAC,KAAK,MAAM,CAAC,IAAI,GAAG,QAAQ,EAAE,CAAC,CAAC;QAC7C,CAAC;IACH,CAAC;IAED,OAAO,CAAC,GAAG,EAAE,CAAC;AAChB,CAAC;AAED;;GAEG;AACH,SAAS,WAAW,CAAC,MAA4B;IAC/C,OAAO,CAAC,GAAG,EAAE,CAAC;IACd,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC;IACpC,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;IAEpC,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC;QAC3B,MAAM,WAAW,GACf,KAAK,CAAC,MAAM,KAAK,KAAK;YACpB,CAAC,CAAC,EAAE,CAAC,KAAK;YACV,CAAC,CAAC,KAAK,CAAC,MAAM,KAAK,MAAM;gBACvB,CAAC,CAAC,EAAE,CAAC,MAAM;gBACX,CAAC,CAAC,KAAK,CAAC,MAAM,KAAK,KAAK;oBACtB,CAAC,CAAC,EAAE,CAAC,IAAI;oBACT,CAAC,CAAC,KAAK,CAAC,MAAM,KAAK,OAAO;wBACxB,CAAC,CAAC,EAAE,CAAC,IAAI;wBACT,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC;QAEnB,OAAO,CAAC,GAAG,CAAC,KAAK,WAAW,CAAC,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,IAAI,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC;QACtE,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,eAAe,KAAK,CAAC,SAAS,IAAI,KAAK,CAAC,SAAS,EAAE,CAAC,CAAC,CAAC;IAC3E,CAAC;IAED,OAAO,CAAC,GAAG,EAAE,CAAC;AAChB,CAAC;AAED;;GAEG;AACH,SAAS,WAAW,CAAC,MAA4B;IAC/C,OAAO,CAAC,GAAG,EAAE,CAAC;IACd,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC,CAAC;IACtC,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;IAEpC,IAAI,eAAe,GAAG,EAAE,CAAC;IACzB,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC;QAC3B,IAAI,KAAK,CAAC,QAAQ,KAAK,eAAe,EAAE,CAAC;YACvC,eAAe,GAAG,KAAK,CAAC,QAAQ,CAAC;YACjC,OAAO,CAAC,GAAG,EAAE,CAAC;YACd,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC;QACjD,CAAC;QAED,OAAO,CAAC,GAAG,CAAC,KAAK,EAAE,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC;QACrD,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,UAAU,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC;QAC/C,IAAI,KAAK,CAAC,GAAG,EAAE,CAAC;YACd,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,MAAM,CAAC,eAAe,KAAK,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC;QACrD,CAAC;IACH,CAAC;IAED,OAAO,CAAC,GAAG,EAAE,CAAC;AAChB,CAAC;AAED;;GAEG;AACH,SAAS,YAAY,CAAC,MAAwB;IAC5C,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;IACpC,MAAM,KAAK,GAAG,EAAE,CAAC;IACjB,IAAI,MAAM,CAAC,OAAO,CAAC,cAAc,KAAK,SAAS,EAAE,CAAC;QAChD,KAAK,CAAC,IAAI,CAAC,GAAG,MAAM,CAAC,OAAO,CAAC,cAAc,aAAa,CAAC,CAAC;IAC5D,CAAC;IACD,IAAI,MAAM,CAAC,OAAO,CAAC,WAAW,KAAK,SAAS,EAAE,CAAC;QAC7C,KAAK,CAAC,IAAI,CAAC,GAAG,MAAM,CAAC,OAAO,CAAC,WAAW,UAAU,CAAC,CAAC;IACtD,CAAC;IACD,IAAI,MAAM,CAAC,OAAO,CAAC,UAAU,KAAK,SAAS,EAAE,CAAC;QAC5C,KAAK,CAAC,IAAI,CAAC,GAAG,MAAM,CAAC,OAAO,CAAC,UAAU,SAAS,CAAC,CAAC;IACpD,CAAC;IACD,IAAI,MAAM,CAAC,OAAO,CAAC,UAAU,KAAK,SAAS,EAAE,CAAC;QAC5C,KAAK,CAAC,IAAI,CAAC,GAAG,MAAM,CAAC,OAAO,CAAC,UAAU,cAAc,CAAC,CAAC;IACzD,CAAC;IACD,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;IAExC,IAAI,MAAM,CAAC,OAAO,CAAC,YAAY,KAAK,SAAS,EAAE,CAAC;QAC9C,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,WAAW,MAAM,CAAC,OAAO,CAAC,YAAY,QAAQ,CAAC,CAAC,CAAC;IACtE,CAAC;IAED,IAAI,MAAM,CAAC,OAAO,CAAC,QAAQ,IAAI,MAAM,CAAC,OAAO,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAClE,OAAO,CAAC,GAAG,EAAE,CAAC;QACd,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,MAAM,CAAC,GAAG,MAAM,CAAC,OAAO,CAAC,QAAQ,CAAC,MAAM,cAAc,CAAC,CAAC,CAAC;QACxE,KAAK,MAAM,OAAO,IAAI,MAAM,CAAC,OAAO,CAAC,QAAQ,EAAE,CAAC;YAC9C,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,MAAM,CAAC,OAAO,OAAO,EAAE,CAAC,CAAC,CAAC;QAC3C,CAAC;IACH,CAAC;IAED,OAAO,CAAC,GAAG,EAAE,CAAC;AAChB,CAAC;AAED,+EAA+E;AAC/E,yBAAyB;AACzB,+EAA+E;AAE/E;;GAEG;AACH,SAAS,0BAA0B;IACjC,OAAO,IAAI,OAAO,CAAC,YAAY,CAAC;SAC7B,KAAK,CAAC,GAAG,CAAC;SACV,WAAW,CAAC,kCAAkC,CAAC;SAC/C,MAAM,CAAC,mBAAmB,EAAE,8BAA8B,EAAE,kBAAkB,CAAC;SAC/E,MAAM,CAAC,iBAAiB,EAAE,qBAAqB,EAAE,KAAK,CAAC;SACvD,MAAM,CAAC,uBAAuB,EAAE,kBAAkB,EAAE,kBAAkB,CAAC;SACvE,MAAM,CAAC,QAAQ,EAAE,gBAAgB,EAAE,KAAK,CAAC;SACzC,MAAM,CAAC,KAAK,EAAE,OAA0B,EAAE,EAAE;QAC3C,eAAe,EAAE,CAAC;QAElB,MAAM,cAAc,GAAG,OAAO,CAAC,IAAI,IAAI,kBAAkB,CAAC;QAC1D,MAAM,SAAS,GAAG,OAAO,CAAC,SAAS,IAAI,kBAAkB,CAAC;QAC1D,MAAM,gBAAgB,GAAqB;YACzC,SAAS,EAAE,OAAO,CAAC,SAAS,IAAI,KAAK;YACrC,eAAe,EAAE,MAAM;SACxB,CAAC;QAEF,IAAI,CAAC;YACH,MAAM,SAAS,GAAG,MAAM,yBAAyB,CAAC,cAAc,EAAE,gBAAgB,CAAC,CAAC;YACpF,MAAM,UAAU,GAAG,6BAA6B,CAAC,SAAS,CAAC,WAAW,EAAE,SAAS,CAAC,CAAC;YAEnF,MAAM,MAAM,GAAqB;gBAC/B,UAAU;gBACV,OAAO,EAAE;oBACP,cAAc,EAAE,UAAU,CAAC,MAAM;oBACjC,YAAY,EAAE,SAAS,CAAC,YAAY,CAAC,MAAM;oBAC3C,QAAQ,EAAE,SAAS,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,CAAC,CAAC,QAAQ,KAAK,CAAC,CAAC,OAAO,EAAE,CAAC;iBACvE;aACF,CAAC;YAEF,IAAI,OAAO,CAAC,IAAI,EAAE,CAAC;gBACjB,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;YAC/C,CAAC;iBAAM,CAAC;gBACN,eAAe,CAAC,UAAU,CAAC,CAAC;gBAC5B,YAAY,CAAC,MAAM,CAAC,CAAC;YACvB,CAAC;YAED,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,IAAI,gBAAgB,CAAC,KAAK,CAAC,EAAE,CAAC;gBAC5B,IAAI,OAAO,CAAC,IAAI,EAAE,CAAC;oBACjB,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,KAAK,EAAE,KAAK,CAAC,MAAM,EAAE,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;gBAClE,CAAC;qBAAM,CAAC;oBACN,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC;gBACxC,CAAC;gBACD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;YAClB,CAAC;YACD,MAAM,KAAK,CAAC;QACd,CAAC;IACH,CAAC,CAAC,CAAC;AACP,CAAC;AAED;;GAEG;AACH,SAAS,uBAAuB;IAC9B,OAAO,IAAI,OAAO,CAAC,SAAS,CAAC;SAC1B,KAAK,CAAC,GAAG,CAAC;SACV,WAAW,CAAC,mCAAmC,CAAC;SAChD,MAAM,CAAC,mBAAmB,EAAE,2BAA2B,EAAE,eAAe,CAAC;SACzE,MAAM,CAAC,QAAQ,EAAE,gBAAgB,EAAE,KAAK,CAAC;SACzC,MAAM,CAAC,KAAK,EAAE,OAA0B,EAAE,EAAE;QAC3C,MAAM,WAAW,GAAG,OAAO,CAAC,IAAI,IAAI,eAAe,CAAC;QACpD,MAAM,EAAE,OAAO,EAAE,QAAQ,EAAE,GAAG,MAAM,WAAW,CAAC,WAAW,CAAC,CAAC;QAE7D,MAAM,MAAM,GAAqB;YAC/B,OAAO;YACP,OAAO,EAAE;gBACP,WAAW,EAAE,OAAO,CAAC,MAAM;gBAC3B,QAAQ,EAAE,QAAQ,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,SAAS;aACrD;SACF,CAAC;QAEF,IAAI,OAAO,CAAC,IAAI,EAAE,CAAC;YACjB,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;QAC/C,CAAC;aAAM,CAAC;YACN,YAAY,CAAC,OAAO,CAAC,CAAC;YACtB,YAAY,CAAC,MAAM,CAAC,CAAC;QACvB,CAAC;QAED,oEAAoE;QACpE,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC,CAAC,CAAC;AACP,CAAC;AAED;;GAEG;AACH,SAAS,sBAAsB;IAC7B,OAAO,IAAI,OAAO,CAAC,QAAQ,CAAC;SACzB,KAAK,CAAC,GAAG,CAAC;SACV,WAAW,CAAC,gCAAgC,CAAC;SAC7C,MAAM,CAAC,mBAAmB,EAAE,8BAA8B,EAAE,kBAAkB,CAAC;SAC/E,MAAM,CAAC,iBAAiB,EAAE,qBAAqB,EAAE,KAAK,CAAC;SACvD,MAAM,CAAC,uBAAuB,EAAE,kBAAkB,EAAE,kBAAkB,CAAC;SACvE,MAAM,CAAC,QAAQ,EAAE,gBAAgB,EAAE,KAAK,CAAC;SACzC,MAAM,CAAC,KAAK,EAAE,OAA0B,EAAE,EAAE;QAC3C,eAAe,EAAE,CAAC;QAElB,MAAM,cAAc,GAAG,OAAO,CAAC,IAAI,IAAI,kBAAkB,CAAC;QAC1D,MAAM,SAAS,GAAG,OAAO,CAAC,SAAS,IAAI,kBAAkB,CAAC;QAC1D,MAAM,gBAAgB,GAAqB;YACzC,SAAS,EAAE,OAAO,CAAC,SAAS,IAAI,KAAK;YACrC,eAAe,EAAE,MAAM;SACxB,CAAC;QAEF,IAAI,CAAC;YACH,MAAM,SAAS,GAAG,MAAM,yBAAyB,CAAC,cAAc,EAAE,gBAAgB,CAAC,CAAC;YACpF,MAAM,YAAY,GAAG,eAAe,CAAC,SAAS,CAAC,WAAW,EAAE,SAAS,CAAC,CAAC;YAEvE,MAAM,MAAM,GAAyB,YAAY,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;gBAC5D,MAAM,EAAE,CAAC,CAAC,MAAM;gBAChB,IAAI,EAAE,CAAC,CAAC,IAAI;gBACZ,SAAS,EAAE,CAAC,CAAC,SAAS;gBACtB,SAAS,EAAE,CAAC,CAAC,SAAS;aACvB,CAAC,CAAC,CAAC;YAEJ,MAAM,MAAM,GAAqB;gBAC/B,MAAM;gBACN,OAAO,EAAE;oBACP,UAAU,EAAE,MAAM,CAAC,MAAM;oBACzB,YAAY,EAAE,SAAS,CAAC,YAAY,CAAC,MAAM;iBAC5C;aACF,CAAC;YAEF,IAAI,OAAO,CAAC,IAAI,EAAE,CAAC;gBACjB,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;YAC/C,CAAC;iBAAM,CAAC;gBACN,WAAW,CAAC,MAAM,CAAC,CAAC;gBACpB,YAAY,CAAC,MAAM,CAAC,CAAC;YACvB,CAAC;YAED,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,IAAI,gBAAgB,CAAC,KAAK,CAAC,EAAE,CAAC;gBAC5B,IAAI,OAAO,CAAC,IAAI,EAAE,CAAC;oBACjB,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,KAAK,EAAE,KAAK,CAAC,MAAM,EAAE,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;gBAClE,CAAC;qBAAM,CAAC;oBACN,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC;gBACxC,CAAC;gBACD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;YAClB,CAAC;YACD,MAAM,KAAK,CAAC;QACd,CAAC;IACH,CAAC,CAAC,CAAC;AACP,CAAC;AAED;;GAEG;AACH,SAAS,sBAAsB;IAC7B,OAAO,IAAI,OAAO,CAAC,QAAQ,CAAC;SACzB,KAAK,CAAC,GAAG,CAAC;SACV,WAAW,CAAC,0BAA0B,CAAC;SACvC,MAAM,CAAC,QAAQ,EAAE,gBAAgB,EAAE,KAAK,CAAC;SACzC,MAAM,CAAC,CAAC,OAA2B,EAAE,EAAE;QACtC,MAAM,MAAM,GAAG,qBAAqB,EAAE,CAAC;QAEvC,MAAM,MAAM,GAAqB;YAC/B,MAAM;YACN,OAAO,EAAE;gBACP,UAAU,EAAE,MAAM,CAAC,MAAM;aAC1B;SACF,CAAC;QAEF,IAAI,OAAO,CAAC,IAAI,EAAE,CAAC;YACjB,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;QAC/C,CAAC;aAAM,CAAC;YACN,WAAW,CAAC,MAAM,CAAC,CAAC;YACpB,YAAY,CAAC,MAAM,CAAC,CAAC;QACvB,CAAC;IACH,CAAC,CAAC,CAAC;AACP,CAAC;AAED;;GAEG;AACH,SAAS,mBAAmB;IAC1B,OAAO,IAAI,OAAO,CAAC,KAAK,CAAC;SACtB,KAAK,CAAC,GAAG,CAAC;SACV,WAAW,CAAC,4BAA4B,CAAC;SACzC,MAAM,CAAC,mBAAmB,EAAE,8BAA8B,EAAE,kBAAkB,CAAC;SAC/E,MAAM,CAAC,2BAA2B,EAAE,2BAA2B,EAAE,eAAe,CAAC;SACjF,MAAM,CAAC,iBAAiB,EAAE,qBAAqB,EAAE,KAAK,CAAC;SACvD,MAAM,CAAC,uBAAuB,EAAE,kBAAkB,EAAE,kBAAkB,CAAC;SACvE,MAAM,CAAC,QAAQ,EAAE,gBAAgB,EAAE,KAAK,CAAC;SACzC,MAAM,CAAC,KAAK,EAAE,OAAqD,EAAE,EAAE;QACtE,eAAe,EAAE,CAAC;QAElB,MAAM,cAAc,GAAG,OAAO,CAAC,IAAI,IAAI,kBAAkB,CAAC;QAC1D,MAAM,WAAW,GAAG,OAAO,CAAC,WAAW,IAAI,eAAe,CAAC;QAC3D,MAAM,SAAS,GAAG,OAAO,CAAC,SAAS,IAAI,kBAAkB,CAAC;QAC1D,MAAM,gBAAgB,GAAqB;YACzC,SAAS,EAAE,OAAO,CAAC,SAAS,IAAI,KAAK;YACrC,eAAe,EAAE,MAAM;SACxB,CAAC;QAEF,IAAI,CAAC;YACH,iCAAiC;YACjC,MAAM,SAAS,GAAG,MAAM,yBAAyB,CAAC,cAAc,EAAE,gBAAgB,CAAC,CAAC;YACpF,MAAM,UAAU,GAAG,6BAA6B,CAAC,SAAS,CAAC,WAAW,EAAE,SAAS,CAAC,CAAC;YACnF,MAAM,YAAY,GAAG,eAAe,CAAC,SAAS,CAAC,WAAW,EAAE,SAAS,CAAC,CAAC;YACvE,MAAM,MAAM,GAAyB,YAAY,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;gBAC5D,MAAM,EAAE,CAAC,CAAC,MAAM;gBAChB,IAAI,EAAE,CAAC,CAAC,IAAI;gBACZ,SAAS,EAAE,CAAC,CAAC,SAAS;gBACtB,SAAS,EAAE,CAAC,CAAC,SAAS;aACvB,CAAC,CAAC,CAAC;YAEJ,eAAe;YACf,MAAM,EAAE,OAAO,EAAE,QAAQ,EAAE,cAAc,EAAE,GAAG,MAAM,WAAW,CAAC,WAAW,CAAC,CAAC;YAE7E,aAAa;YACb,MAAM,MAAM,GAAG,qBAAqB,EAAE,CAAC;YAEvC,gEAAgE;YAChE,MAAM,WAAW,GAAG;gBAClB,GAAG,SAAS,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,CAAC,CAAC,QAAQ,KAAK,CAAC,CAAC,OAAO,EAAE,CAAC;gBAC/D,GAAG,cAAc;aAClB,CAAC;YAEF,MAAM,MAAM,GAAqB;gBAC/B,UAAU;gBACV,OAAO;gBACP,MAAM;gBACN,MAAM;gBACN,OAAO,EAAE;oBACP,cAAc,EAAE,UAAU,CAAC,MAAM;oBACjC,WAAW,EAAE,OAAO,CAAC,MAAM;oBAC3B,UAAU,EAAE,MAAM,CAAC,MAAM;oBACzB,UAAU,EAAE,MAAM,CAAC,MAAM;oBACzB,YAAY,EAAE,SAAS,CAAC,YAAY,CAAC,MAAM;oBAC3C,QAAQ,EAAE,WAAW,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,SAAS;iBAC3D;aACF,CAAC;YAEF,IAAI,OAAO,CAAC,IAAI,EAAE,CAAC;gBACjB,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;YAC/C,CAAC;iBAAM,CAAC;gBACN,eAAe,CAAC,UAAU,CAAC,CAAC;gBAC5B,YAAY,CAAC,OAAO,CAAC,CAAC;gBACtB,WAAW,CAAC,MAAM,CAAC,CAAC;gBACpB,WAAW,CAAC,MAAM,CAAC,CAAC;gBACpB,YAAY,CAAC,MAAM,CAAC,CAAC;YACvB,CAAC;YAED,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,IAAI,gBAAgB,CAAC,KAAK,CAAC,EAAE,CAAC;gBAC5B,IAAI,OAAO,CAAC,IAAI,EAAE,CAAC;oBACjB,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,KAAK,EAAE,KAAK,CAAC,MAAM,EAAE,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;gBAClE,CAAC;qBAAM,CAAC;oBACN,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC;gBACxC,CAAC;gBACD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;YAClB,CAAC;YACD,MAAM,KAAK,CAAC;QACd,CAAC;IACH,CAAC,CAAC,CAAC;AACP,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,uBAAuB;IACrC,MAAM,UAAU,GAAG,IAAI,OAAO,CAAC,YAAY,CAAC;SACzC,WAAW,CAAC,iDAAiD,CAAC;SAC9D,UAAU,CAAC,0BAA0B,EAAE,CAAC;SACxC,UAAU,CAAC,uBAAuB,EAAE,CAAC;SACrC,UAAU,CAAC,sBAAsB,EAAE,CAAC;SACpC,UAAU,CAAC,sBAAsB,EAAE,CAAC;SACpC,UAAU,CAAC,mBAAmB,EAAE,CAAC,CAAC;IAErC,OAAO,UAAU,CAAC;AACpB,CAAC"}
@@ -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,CAmD3C"}
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"}
@@ -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')} Scaffold complete Post resource
57
- ${formatCommand('velox m r User --soft-delete')} Resource with soft delete support
58
- ${formatCommand('velox m p User --crud')} Scaffold CRUD procedures only
59
- ${formatCommand('velox m s User --crud')} Scaffold Zod schemas only
60
- ${formatCommand('velox m t User -G procedure')} Scaffold procedure unit tests
61
- ${formatCommand('velox make --dry-run r Post')} Preview resource scaffolding
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 {