@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,511 @@
1
+ /**
2
+ * Service Template
3
+ *
4
+ * Generates service class files for VeloxTS applications.
5
+ */
6
+ // ============================================================================
7
+ // Path Helpers
8
+ // ============================================================================
9
+ /**
10
+ * Get the path for a service file
11
+ */
12
+ export function getServicePath(entityName, _project) {
13
+ return `src/services/${entityName.toLowerCase()}.ts`;
14
+ }
15
+ // ============================================================================
16
+ // Templates
17
+ // ============================================================================
18
+ /**
19
+ * Generate CRUD service
20
+ */
21
+ function generateCrudService(ctx) {
22
+ const { entity, options } = ctx;
23
+ const injectableDecorator = options.injectable
24
+ ? `import { Injectable, Inject } from '@veloxts/core';
25
+ import { DatabaseToken } from '@/di/tokens';
26
+
27
+ @Injectable()
28
+ `
29
+ : '';
30
+ const dbInjection = options.injectable
31
+ ? ` constructor(@Inject(DatabaseToken) private readonly db: PrismaClient) {}`
32
+ : ` constructor(private readonly db: PrismaClient) {}`;
33
+ const cacheImports = options.cache
34
+ ? `
35
+ // Simple in-memory cache (use Redis in production)
36
+ const cache = new Map<string, { data: unknown; expiry: number }>();
37
+ const CACHE_TTL = 60 * 1000; // 1 minute
38
+ `
39
+ : '';
40
+ const cacheHelpers = options.cache
41
+ ? `
42
+
43
+ /**
44
+ * Get from cache
45
+ */
46
+ private getFromCache<T>(key: string): T | null {
47
+ const entry = cache.get(key);
48
+ if (!entry) return null;
49
+ if (Date.now() > entry.expiry) {
50
+ cache.delete(key);
51
+ return null;
52
+ }
53
+ return entry.data as T;
54
+ }
55
+
56
+ /**
57
+ * Set in cache
58
+ */
59
+ private setInCache(key: string, data: unknown): void {
60
+ cache.set(key, { data, expiry: Date.now() + CACHE_TTL });
61
+ }
62
+
63
+ /**
64
+ * Invalidate cache
65
+ */
66
+ private invalidateCache(pattern?: string): void {
67
+ if (pattern) {
68
+ for (const key of cache.keys()) {
69
+ if (key.startsWith(pattern)) {
70
+ cache.delete(key);
71
+ }
72
+ }
73
+ } else {
74
+ cache.clear();
75
+ }
76
+ }`
77
+ : '';
78
+ const findByIdWithCache = options.cache
79
+ ? `
80
+ const cacheKey = \`${entity.camel}:\${id}\`;
81
+ const cached = this.getFromCache<${entity.pascal}>(cacheKey);
82
+ if (cached) return cached;
83
+
84
+ const result = await this.db.${entity.camel}.findUnique({ where: { id } });
85
+ if (result) this.setInCache(cacheKey, result);
86
+ return result;`
87
+ : `
88
+ return this.db.${entity.camel}.findUnique({ where: { id } });`;
89
+ const createWithCache = options.cache
90
+ ? `
91
+ const result = await this.db.${entity.camel}.create({ data });
92
+ this.invalidateCache('${entity.plural}:list');
93
+ return result;`
94
+ : `
95
+ return this.db.${entity.camel}.create({ data });`;
96
+ const updateWithCache = options.cache
97
+ ? `
98
+ const result = await this.db.${entity.camel}.update({ where: { id }, data });
99
+ this.invalidateCache(\`${entity.camel}:\${id}\`);
100
+ this.invalidateCache('${entity.plural}:list');
101
+ return result;`
102
+ : `
103
+ return this.db.${entity.camel}.update({ where: { id }, data });`;
104
+ const deleteWithCache = options.cache
105
+ ? `
106
+ await this.db.${entity.camel}.delete({ where: { id } });
107
+ this.invalidateCache(\`${entity.camel}:\${id}\`);
108
+ this.invalidateCache('${entity.plural}:list');`
109
+ : `
110
+ await this.db.${entity.camel}.delete({ where: { id } });`;
111
+ return `/**
112
+ * ${entity.pascal} Service
113
+ *
114
+ * Business logic for ${entity.humanReadable} operations.
115
+ */
116
+
117
+ import type { PrismaClient } from '@prisma/client';
118
+ ${injectableDecorator ? injectableDecorator : ''}${cacheImports}
119
+ // ============================================================================
120
+ // Types
121
+ // ============================================================================
122
+
123
+ interface ${entity.pascal} {
124
+ id: string;
125
+ name: string;
126
+ createdAt: Date;
127
+ updatedAt: Date;
128
+ }
129
+
130
+ interface Create${entity.pascal}Input {
131
+ name: string;
132
+ // TODO: Add fields
133
+ }
134
+
135
+ interface Update${entity.pascal}Input {
136
+ name?: string;
137
+ // TODO: Add fields
138
+ }
139
+
140
+ interface List${entity.pascalPlural}Options {
141
+ page?: number;
142
+ limit?: number;
143
+ orderBy?: 'createdAt' | 'name';
144
+ order?: 'asc' | 'desc';
145
+ }
146
+
147
+ // ============================================================================
148
+ // Service
149
+ // ============================================================================
150
+
151
+ /**
152
+ * ${entity.pascal} service
153
+ *
154
+ * Encapsulates business logic for ${entity.humanReadable} CRUD operations.
155
+ */
156
+ ${injectableDecorator}export class ${entity.pascal}Service {
157
+ ${dbInjection}
158
+
159
+ /**
160
+ * Find ${entity.humanReadable} by ID
161
+ */
162
+ async findById(id: string): Promise<${entity.pascal} | null> {${findByIdWithCache}
163
+ }
164
+
165
+ /**
166
+ * Find ${entity.humanReadable} by ID or throw
167
+ */
168
+ async findByIdOrThrow(id: string): Promise<${entity.pascal}> {
169
+ const ${entity.camel} = await this.findById(id);
170
+ if (!${entity.camel}) {
171
+ throw new Error(\`${entity.pascal} not found: \${id}\`);
172
+ }
173
+ return ${entity.camel};
174
+ }
175
+
176
+ /**
177
+ * List ${entity.humanReadablePlural} with pagination
178
+ */
179
+ async list(options: List${entity.pascalPlural}Options = {}): Promise<{
180
+ data: ${entity.pascal}[];
181
+ total: number;
182
+ page: number;
183
+ limit: number;
184
+ }> {
185
+ const { page = 1, limit = 20, orderBy = 'createdAt', order = 'desc' } = options;
186
+ const skip = (page - 1) * limit;
187
+
188
+ const [data, total] = await Promise.all([
189
+ this.db.${entity.camel}.findMany({
190
+ skip,
191
+ take: limit,
192
+ orderBy: { [orderBy]: order },
193
+ }),
194
+ this.db.${entity.camel}.count(),
195
+ ]);
196
+
197
+ return { data, total, page, limit };
198
+ }
199
+
200
+ /**
201
+ * Create ${entity.humanReadable}
202
+ */
203
+ async create(data: Create${entity.pascal}Input): Promise<${entity.pascal}> {${createWithCache}
204
+ }
205
+
206
+ /**
207
+ * Update ${entity.humanReadable}
208
+ */
209
+ async update(id: string, data: Update${entity.pascal}Input): Promise<${entity.pascal}> {${updateWithCache}
210
+ }
211
+
212
+ /**
213
+ * Delete ${entity.humanReadable}
214
+ */
215
+ async delete(id: string): Promise<void> {${deleteWithCache}
216
+ }
217
+
218
+ /**
219
+ * Check if ${entity.humanReadable} exists
220
+ */
221
+ async exists(id: string): Promise<boolean> {
222
+ const count = await this.db.${entity.camel}.count({ where: { id } });
223
+ return count > 0;
224
+ }
225
+ ${cacheHelpers}
226
+ }
227
+ `;
228
+ }
229
+ /**
230
+ * Generate service with events
231
+ */
232
+ function generateEventService(ctx) {
233
+ const { entity, options } = ctx;
234
+ const injectableDecorator = options.injectable
235
+ ? `import { Injectable, Inject } from '@veloxts/core';
236
+ import { DatabaseToken } from '@/di/tokens';
237
+
238
+ @Injectable()
239
+ `
240
+ : '';
241
+ return `/**
242
+ * ${entity.pascal} Service
243
+ *
244
+ * Business logic with event emission for ${entity.humanReadable} operations.
245
+ */
246
+
247
+ import { EventEmitter } from 'node:events';
248
+ import type { PrismaClient } from '@prisma/client';
249
+ ${injectableDecorator}
250
+ // ============================================================================
251
+ // Types
252
+ // ============================================================================
253
+
254
+ interface ${entity.pascal} {
255
+ id: string;
256
+ name: string;
257
+ createdAt: Date;
258
+ updatedAt: Date;
259
+ }
260
+
261
+ interface Create${entity.pascal}Input {
262
+ name: string;
263
+ }
264
+
265
+ interface Update${entity.pascal}Input {
266
+ name?: string;
267
+ }
268
+
269
+ // ============================================================================
270
+ // Events
271
+ // ============================================================================
272
+
273
+ export type ${entity.pascal}Events = {
274
+ '${entity.camel}:created': [${entity.pascal}];
275
+ '${entity.camel}:updated': [${entity.pascal}, Update${entity.pascal}Input];
276
+ '${entity.camel}:deleted': [string];
277
+ };
278
+
279
+ // ============================================================================
280
+ // Service
281
+ // ============================================================================
282
+
283
+ /**
284
+ * ${entity.pascal} service with event emission
285
+ */
286
+ ${injectableDecorator ? injectableDecorator : ''}export class ${entity.pascal}Service extends EventEmitter {
287
+ constructor(private readonly db: PrismaClient) {
288
+ super();
289
+ }
290
+
291
+ /**
292
+ * Emit typed event
293
+ */
294
+ private emit<K extends keyof ${entity.pascal}Events>(
295
+ event: K,
296
+ ...args: ${entity.pascal}Events[K]
297
+ ): boolean {
298
+ return super.emit(event, ...args);
299
+ }
300
+
301
+ /**
302
+ * Listen for typed event
303
+ */
304
+ on<K extends keyof ${entity.pascal}Events>(
305
+ event: K,
306
+ listener: (...args: ${entity.pascal}Events[K]) => void
307
+ ): this {
308
+ return super.on(event, listener as (...args: unknown[]) => void);
309
+ }
310
+
311
+ /**
312
+ * Find ${entity.humanReadable} by ID
313
+ */
314
+ async findById(id: string): Promise<${entity.pascal} | null> {
315
+ return this.db.${entity.camel}.findUnique({ where: { id } });
316
+ }
317
+
318
+ /**
319
+ * Create ${entity.humanReadable}
320
+ */
321
+ async create(data: Create${entity.pascal}Input): Promise<${entity.pascal}> {
322
+ const ${entity.camel} = await this.db.${entity.camel}.create({ data });
323
+ this.emit('${entity.camel}:created', ${entity.camel});
324
+ return ${entity.camel};
325
+ }
326
+
327
+ /**
328
+ * Update ${entity.humanReadable}
329
+ */
330
+ async update(id: string, data: Update${entity.pascal}Input): Promise<${entity.pascal}> {
331
+ const ${entity.camel} = await this.db.${entity.camel}.update({ where: { id }, data });
332
+ this.emit('${entity.camel}:updated', ${entity.camel}, data);
333
+ return ${entity.camel};
334
+ }
335
+
336
+ /**
337
+ * Delete ${entity.humanReadable}
338
+ */
339
+ async delete(id: string): Promise<void> {
340
+ await this.db.${entity.camel}.delete({ where: { id } });
341
+ this.emit('${entity.camel}:deleted', id);
342
+ }
343
+ }
344
+
345
+ // ============================================================================
346
+ // Usage Example
347
+ // ============================================================================
348
+
349
+ /*
350
+ const service = new ${entity.pascal}Service(prisma);
351
+
352
+ // Listen for events
353
+ service.on('${entity.camel}:created', (${entity.camel}) => {
354
+ console.log('New ${entity.humanReadable} created:', ${entity.camel}.id);
355
+ // Send notification, update cache, etc.
356
+ });
357
+
358
+ service.on('${entity.camel}:deleted', (id) => {
359
+ console.log('${entity.pascal} deleted:', id);
360
+ // Cleanup related data
361
+ });
362
+
363
+ // Use the service
364
+ const ${entity.camel} = await service.create({ name: 'Example' });
365
+ */
366
+ `;
367
+ }
368
+ /**
369
+ * Generate simple service template
370
+ */
371
+ function generateSimpleService(ctx) {
372
+ const { entity, options } = ctx;
373
+ const injectableImport = options.injectable
374
+ ? `import { Injectable } from '@veloxts/core';
375
+
376
+ @Injectable()
377
+ `
378
+ : '';
379
+ return `/**
380
+ * ${entity.pascal} Service
381
+ *
382
+ * Business logic for ${entity.humanReadable} operations.
383
+ */
384
+ ${injectableImport}
385
+ // ============================================================================
386
+ // Types
387
+ // ============================================================================
388
+
389
+ export interface ${entity.pascal}Data {
390
+ id: string;
391
+ name: string;
392
+ // TODO: Add your fields
393
+ }
394
+
395
+ export interface Create${entity.pascal}Input {
396
+ name: string;
397
+ // TODO: Add creation fields
398
+ }
399
+
400
+ export interface Update${entity.pascal}Input {
401
+ name?: string;
402
+ // TODO: Add update fields
403
+ }
404
+
405
+ // ============================================================================
406
+ // Service
407
+ // ============================================================================
408
+
409
+ /**
410
+ * ${entity.pascal} service
411
+ *
412
+ * Handles business logic for ${entity.humanReadable} operations.
413
+ * Separate from procedures to allow reuse across different endpoints.
414
+ */
415
+ ${injectableImport ? '@Injectable()\n' : ''}export class ${entity.pascal}Service {
416
+ /**
417
+ * Process ${entity.humanReadable} data
418
+ *
419
+ * @example
420
+ * const result = await ${entity.camel}Service.process(data);
421
+ */
422
+ async process(input: Create${entity.pascal}Input): Promise<${entity.pascal}Data> {
423
+ // TODO: Implement processing logic
424
+ return {
425
+ id: crypto.randomUUID(),
426
+ name: input.name,
427
+ };
428
+ }
429
+
430
+ /**
431
+ * Validate ${entity.humanReadable} data
432
+ */
433
+ validate(data: Partial<${entity.pascal}Data>): { valid: boolean; errors: string[] } {
434
+ const errors: string[] = [];
435
+
436
+ if (!data.name || data.name.trim().length === 0) {
437
+ errors.push('Name is required');
438
+ }
439
+
440
+ // TODO: Add more validation rules
441
+
442
+ return { valid: errors.length === 0, errors };
443
+ }
444
+
445
+ /**
446
+ * Transform ${entity.humanReadable} for output
447
+ */
448
+ transform(data: ${entity.pascal}Data): Record<string, unknown> {
449
+ return {
450
+ id: data.id,
451
+ name: data.name,
452
+ // TODO: Transform for API response
453
+ };
454
+ }
455
+ }
456
+
457
+ // ============================================================================
458
+ // Singleton Instance
459
+ // ============================================================================
460
+
461
+ /**
462
+ * Singleton service instance
463
+ *
464
+ * Use this for simple cases without DI.
465
+ */
466
+ export const ${entity.camel}Service = new ${entity.pascal}Service();
467
+ `;
468
+ }
469
+ // ============================================================================
470
+ // Main Template
471
+ // ============================================================================
472
+ /**
473
+ * Service template function
474
+ */
475
+ export const serviceTemplate = (ctx) => {
476
+ if (ctx.options.crud) {
477
+ return generateCrudService(ctx);
478
+ }
479
+ if (ctx.options.events) {
480
+ return generateEventService(ctx);
481
+ }
482
+ return generateSimpleService(ctx);
483
+ };
484
+ // ============================================================================
485
+ // Post-generation Instructions
486
+ // ============================================================================
487
+ export function getServiceInstructions(entityName, options) {
488
+ const lines = [`Your ${entityName} service has been created.`, '', 'Next steps:'];
489
+ if (options.injectable) {
490
+ lines.push(' 1. Register the service in your DI container');
491
+ lines.push(' 2. Inject into procedures or other services');
492
+ }
493
+ else {
494
+ lines.push(' 1. Import the service in your procedures');
495
+ lines.push(` import { ${entityName}Service } from '@/services/${entityName.toLowerCase()}';`);
496
+ }
497
+ if (options.crud) {
498
+ lines.push(' 2. Update the Prisma model name if different');
499
+ }
500
+ else if (options.events) {
501
+ lines.push(' 2. Set up event listeners for side effects');
502
+ }
503
+ else {
504
+ lines.push(' 2. Implement the service methods');
505
+ }
506
+ if (options.cache) {
507
+ lines.push(' 3. Consider using Redis for production caching');
508
+ }
509
+ return lines.join('\n');
510
+ }
511
+ //# sourceMappingURL=service.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"service.js","sourceRoot":"","sources":["../../../src/generators/templates/service.ts"],"names":[],"mappings":"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"}
@@ -3,6 +3,7 @@
3
3
  *
4
4
  * Core type definitions for the VeloxTS code generator system.
5
5
  */
6
+ import { VeloxError } from '../errors/index.js';
6
7
  /**
7
8
  * All naming variations for an entity.
8
9
  * Derived from a single input name (e.g., "User", "BlogPost").
@@ -31,6 +32,10 @@ export interface EntityNames {
31
32
  /** Human readable plural: "Users", "Blog Posts" */
32
33
  readonly humanReadablePlural: string;
33
34
  }
35
+ /**
36
+ * Project type based on architecture
37
+ */
38
+ export type ProjectType = 'api' | 'fullstack';
34
39
  /**
35
40
  * Project-level context for template generation
36
41
  */
@@ -41,6 +46,18 @@ export interface ProjectContext {
41
46
  readonly hasAuth: boolean;
42
47
  /** Database type from configuration */
43
48
  readonly database: 'sqlite' | 'postgresql' | 'mysql';
49
+ /** Project type: 'api' for API-only, 'fullstack' for RSC/Vinxi */
50
+ readonly projectType: ProjectType;
51
+ /** Whether this is a Vinxi/RSC project */
52
+ readonly isVinxiProject: boolean;
53
+ /** Whether @veloxts/web is installed */
54
+ readonly hasWeb: boolean;
55
+ /** Root directory for pages (app/pages for fullstack, undefined for api) */
56
+ readonly pagesDir?: string;
57
+ /** Root directory for layouts (app/layouts for fullstack, undefined for api) */
58
+ readonly layoutsDir?: string;
59
+ /** Root directory for actions (app/actions for fullstack, src/actions for api) */
60
+ readonly actionsDir?: string;
44
61
  }
45
62
  /**
46
63
  * Context available to all templates
@@ -80,7 +97,7 @@ export interface GeneratorOutput {
80
97
  /**
81
98
  * Generator category for grouping in help
82
99
  */
83
- export type GeneratorCategory = 'resource' | 'database' | 'test' | 'composite';
100
+ export type GeneratorCategory = 'resource' | 'database' | 'test' | 'composite' | 'infrastructure' | 'auth';
84
101
  /**
85
102
  * Generator metadata for CLI registration
86
103
  */
@@ -190,22 +207,17 @@ export declare enum GeneratorErrorCode {
190
207
  FILE_ALREADY_EXISTS = "E2003",
191
208
  INVALID_OPTION = "E2004",
192
209
  GENERATION_FAILED = "E2005",
193
- CANCELED = "E2006"
210
+ CANCELED = "E2006",
211
+ PROJECT_STRUCTURE = "E2007",
212
+ MIGRATION_FAILED = "E2008"
194
213
  }
195
214
  /**
196
- * Structured generator error with code and optional fix suggestion
215
+ * Structured generator error with code and optional fix suggestion.
216
+ *
217
+ * Extends VeloxError for consistent error handling across the CLI.
197
218
  */
198
- export declare class GeneratorError extends Error {
219
+ export declare class GeneratorError extends VeloxError {
199
220
  readonly code: GeneratorErrorCode;
200
- readonly fix?: string | undefined;
201
- constructor(code: GeneratorErrorCode, message: string, fix?: string | undefined);
202
- /**
203
- * Format error for display
204
- */
205
- format(): string;
206
- /**
207
- * Convert to JSON for --json output
208
- */
209
- toJSON(): Record<string, unknown>;
221
+ constructor(code: GeneratorErrorCode, message: string, fix?: string);
210
222
  }
211
223
  //# sourceMappingURL=types.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/generators/types.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/generators/types.ts"],"names":[],"mappings":"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"}
@@ -3,6 +3,7 @@
3
3
  *
4
4
  * Core type definitions for the VeloxTS code generator system.
5
5
  */
6
+ import { VeloxError } from '../errors/index.js';
6
7
  // ============================================================================
7
8
  // Error Handling
8
9
  // ============================================================================
@@ -17,38 +18,20 @@ export var GeneratorErrorCode;
17
18
  GeneratorErrorCode["INVALID_OPTION"] = "E2004";
18
19
  GeneratorErrorCode["GENERATION_FAILED"] = "E2005";
19
20
  GeneratorErrorCode["CANCELED"] = "E2006";
21
+ GeneratorErrorCode["PROJECT_STRUCTURE"] = "E2007";
22
+ GeneratorErrorCode["MIGRATION_FAILED"] = "E2008";
20
23
  })(GeneratorErrorCode || (GeneratorErrorCode = {}));
21
24
  /**
22
- * Structured generator error with code and optional fix suggestion
25
+ * Structured generator error with code and optional fix suggestion.
26
+ *
27
+ * Extends VeloxError for consistent error handling across the CLI.
23
28
  */
24
- export class GeneratorError extends Error {
29
+ export class GeneratorError extends VeloxError {
25
30
  code;
26
- fix;
27
31
  constructor(code, message, fix) {
28
- super(message);
32
+ super(code, { message, fix });
29
33
  this.code = code;
30
- this.fix = fix;
31
34
  this.name = 'GeneratorError';
32
35
  }
33
- /**
34
- * Format error for display
35
- */
36
- format() {
37
- let output = `GeneratorError[${this.code}]: ${this.message}`;
38
- if (this.fix) {
39
- output += `\n\n Fix: ${this.fix}`;
40
- }
41
- return output;
42
- }
43
- /**
44
- * Convert to JSON for --json output
45
- */
46
- toJSON() {
47
- return {
48
- code: this.code,
49
- message: this.message,
50
- fix: this.fix,
51
- };
52
- }
53
36
  }
54
37
  //# sourceMappingURL=types.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/generators/types.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAuQH,+EAA+E;AAC/E,iBAAiB;AACjB,+EAA+E;AAE/E;;GAEG;AACH,MAAM,CAAN,IAAY,kBAOX;AAPD,WAAY,kBAAkB;IAC5B,8CAAwB,CAAA;IACxB,mDAA6B,CAAA;IAC7B,mDAA6B,CAAA;IAC7B,8CAAwB,CAAA;IACxB,iDAA2B,CAAA;IAC3B,wCAAkB,CAAA;AACpB,CAAC,EAPW,kBAAkB,KAAlB,kBAAkB,QAO7B;AAED;;GAEG;AACH,MAAM,OAAO,cAAe,SAAQ,KAAK;IAErB;IAEA;IAHlB,YACkB,IAAwB,EACxC,OAAe,EACC,GAAY;QAE5B,KAAK,CAAC,OAAO,CAAC,CAAC;QAJC,SAAI,GAAJ,IAAI,CAAoB;QAExB,QAAG,GAAH,GAAG,CAAS;QAG5B,IAAI,CAAC,IAAI,GAAG,gBAAgB,CAAC;IAC/B,CAAC;IAED;;OAEG;IACH,MAAM;QACJ,IAAI,MAAM,GAAG,kBAAkB,IAAI,CAAC,IAAI,MAAM,IAAI,CAAC,OAAO,EAAE,CAAC;QAC7D,IAAI,IAAI,CAAC,GAAG,EAAE,CAAC;YACb,MAAM,IAAI,cAAc,IAAI,CAAC,GAAG,EAAE,CAAC;QACrC,CAAC;QACD,OAAO,MAAM,CAAC;IAChB,CAAC;IAED;;OAEG;IACH,MAAM;QACJ,OAAO;YACL,IAAI,EAAE,IAAI,CAAC,IAAI;YACf,OAAO,EAAE,IAAI,CAAC,OAAO;YACrB,GAAG,EAAE,IAAI,CAAC,GAAG;SACd,CAAC;IACJ,CAAC;CACF"}
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/generators/types.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;AAoShD,+EAA+E;AAC/E,iBAAiB;AACjB,+EAA+E;AAE/E;;GAEG;AACH,MAAM,CAAN,IAAY,kBASX;AATD,WAAY,kBAAkB;IAC5B,8CAAwB,CAAA;IACxB,mDAA6B,CAAA;IAC7B,mDAA6B,CAAA;IAC7B,8CAAwB,CAAA;IACxB,iDAA2B,CAAA;IAC3B,wCAAkB,CAAA;IAClB,iDAA2B,CAAA;IAC3B,gDAA0B,CAAA;AAC5B,CAAC,EATW,kBAAkB,KAAlB,kBAAkB,QAS7B;AAED;;;;GAIG;AACH,MAAM,OAAO,cAAe,SAAQ,UAAU;IAE1B;IADlB,YACkB,IAAwB,EACxC,OAAe,EACf,GAAY;QAEZ,KAAK,CAAC,IAAI,EAAE,EAAE,OAAO,EAAE,GAAG,EAAE,CAAC,CAAC;QAJd,SAAI,GAAJ,IAAI,CAAoB;QAKxC,IAAI,CAAC,IAAI,GAAG,gBAAgB,CAAC;IAC/B,CAAC;CACF"}