@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
@@ -4,12 +4,133 @@
4
4
  * Generates a complete resource with model, schema, procedures, and tests.
5
5
  * This is the "full stack" generator for quickly scaffolding new entities.
6
6
  */
7
+ import { FIELD_TYPES } from '../fields/types.js';
7
8
  // ============================================================================
8
- // Prisma Model Template
9
+ // Field Conversion Helpers
9
10
  // ============================================================================
10
- function generatePrismaModel(entity, options) {
11
+ /**
12
+ * Get field type info by type
13
+ */
14
+ export function getFieldTypeInfo(type) {
15
+ return FIELD_TYPES.find((t) => t.type === type);
16
+ }
17
+ /**
18
+ * Convert a field definition to Prisma field line
19
+ *
20
+ * @param field - Field definition to convert
21
+ * @param database - Optional database type for native type modifiers (default: 'sqlite')
22
+ */
23
+ export function fieldToPrisma(field, database = 'sqlite') {
24
+ const typeInfo = getFieldTypeInfo(field.type);
25
+ let prismaType;
26
+ // Handle enum type specially
27
+ if (field.type === 'enum' && field.enumDef) {
28
+ prismaType = field.enumDef.name;
29
+ }
30
+ else {
31
+ prismaType = typeInfo?.prismaType ?? 'String';
32
+ }
33
+ // Build modifiers
34
+ const modifiers = [];
35
+ // Add @db.Text for long text fields (only for PostgreSQL and MySQL, not SQLite)
36
+ if (field.type === 'text' && database !== 'sqlite') {
37
+ modifiers.push('@db.Text');
38
+ }
39
+ // Optional (nullable)
40
+ if (field.attributes.optional) {
41
+ prismaType += '?';
42
+ }
43
+ // Unique constraint
44
+ if (field.attributes.unique) {
45
+ modifiers.push('@unique');
46
+ }
47
+ // Default value
48
+ if (field.attributes.hasDefault && field.attributes.defaultValue !== undefined) {
49
+ const defaultVal = formatPrismaDefault(field.type, field.attributes.defaultValue);
50
+ modifiers.push(`@default(${defaultVal})`);
51
+ }
52
+ const modifierStr = modifiers.length > 0 ? ` ${modifiers.join(' ')}` : '';
53
+ return ` ${field.name} ${prismaType}${modifierStr}`;
54
+ }
55
+ /**
56
+ * Format default value for Prisma
57
+ *
58
+ * Different types require different formatting:
59
+ * - Strings: quoted ("value")
60
+ * - Numbers: unquoted (123, 3.14)
61
+ * - Booleans: unquoted (true, false)
62
+ * - Enums: unquoted (DRAFT, ACTIVE)
63
+ * - DateTime: function call (now())
64
+ * - JSON: not supported for defaults
65
+ */
66
+ export function formatPrismaDefault(type, value) {
67
+ switch (type) {
68
+ case 'string':
69
+ case 'text':
70
+ return `"${value}"`;
71
+ case 'boolean':
72
+ case 'int':
73
+ case 'float':
74
+ return value; // Unquoted: true, false, 123, 3.14
75
+ case 'enum':
76
+ return value; // Unquoted: DRAFT, ACTIVE, PENDING
77
+ case 'datetime':
78
+ // Support special Prisma functions or quoted string values
79
+ if (value === 'now()' || value === 'now') {
80
+ return 'now()';
81
+ }
82
+ return `"${value}"`;
83
+ case 'json':
84
+ // JSON defaults are complex - return as-is (user must format correctly)
85
+ return value;
86
+ default:
87
+ return `"${value}"`;
88
+ }
89
+ }
90
+ /**
91
+ * Convert a field definition to Zod schema field
92
+ */
93
+ export function fieldToZod(field) {
94
+ const typeInfo = getFieldTypeInfo(field.type);
95
+ let zodType;
96
+ // Handle enum type specially
97
+ if (field.type === 'enum' && field.enumDef) {
98
+ const values = field.enumDef.values.map((v) => `'${v}'`).join(', ');
99
+ zodType = `z.enum([${values}])`;
100
+ }
101
+ else {
102
+ zodType = typeInfo?.zodSchema ?? 'z.string()';
103
+ }
104
+ // Optional (nullable)
105
+ if (field.attributes.optional) {
106
+ zodType += '.nullable()';
107
+ }
108
+ return ` ${field.name}: ${zodType},`;
109
+ }
110
+ /**
111
+ * Generate Prisma enum definitions
112
+ */
113
+ export function generatePrismaEnums(fields) {
114
+ const enumFields = fields.filter((f) => f.type === 'enum' && f.enumDef);
115
+ if (enumFields.length === 0)
116
+ return '';
117
+ const enums = enumFields.map((f) => {
118
+ const enumDef = f.enumDef;
119
+ if (!enumDef)
120
+ return '';
121
+ const values = enumDef.values.map((v) => ` ${v}`).join('\n');
122
+ return `enum ${enumDef.name} {\n${values}\n}`;
123
+ });
124
+ return `\n${enums.join('\n\n')}\n`;
125
+ }
126
+ /**
127
+ * Generate injectable Prisma content (model + enums without comments)
128
+ *
129
+ * This content can be directly injected into schema.prisma
130
+ */
131
+ export function generateInjectablePrismaContent(entity, options, database = 'sqlite') {
11
132
  const { pascal, camel } = entity;
12
- const { softDelete, timestamps } = options;
133
+ const { softDelete, timestamps, fields = [] } = options;
13
134
  const timestampFields = timestamps
14
135
  ? `
15
136
  createdAt DateTime @default(now())
@@ -19,37 +140,73 @@ function generatePrismaModel(entity, options) {
19
140
  ? `
20
141
  deletedAt DateTime?`
21
142
  : '';
22
- return `// Add this model to your prisma/schema.prisma file
23
-
24
- model ${pascal} {
143
+ // Generate custom fields
144
+ let customFields;
145
+ if (fields.length > 0) {
146
+ customFields = `\n${fields.map((f) => fieldToPrisma(f, database)).join('\n')}`;
147
+ }
148
+ else {
149
+ // Placeholder comment for when no fields are defined
150
+ customFields = `
151
+ // TODO: Add your fields here`;
152
+ }
153
+ // Generate model content (without header comment)
154
+ const modelContent = `model ${pascal} {
25
155
  id String @id @default(uuid())
26
-
27
- // TODO: Add your fields here
28
- // name String
29
- // email String @unique
30
- // status Status @default(ACTIVE)
156
+ ${customFields}
31
157
  ${timestampFields}${softDeleteField}
32
158
 
33
- // Relations
34
- // posts Post[]
35
-
36
159
  @@map("${camel}s")
160
+ }`;
161
+ // Generate structured enum definitions
162
+ const enums = [];
163
+ if (fields.length > 0) {
164
+ const enumFields = fields.filter((f) => f.type === 'enum' && f.enumDef);
165
+ for (const field of enumFields) {
166
+ const enumDef = field.enumDef;
167
+ if (enumDef) {
168
+ const values = enumDef.values.map((v) => ` ${v}`).join('\n');
169
+ enums.push({
170
+ name: enumDef.name,
171
+ content: `enum ${enumDef.name} {\n${values}\n}`,
172
+ });
173
+ }
174
+ }
175
+ }
176
+ return {
177
+ modelContent,
178
+ modelName: pascal,
179
+ enums,
180
+ };
37
181
  }
38
-
182
+ /**
183
+ * Generate Prisma model as a standalone file (with instructions header)
184
+ */
185
+ function generatePrismaModel(entity, options, database = 'sqlite') {
186
+ const { fields = [] } = options;
187
+ const injectable = generateInjectablePrismaContent(entity, options, database);
188
+ const enumComment = fields.length === 0
189
+ ? `
39
190
  // Optional: Add enum if needed
40
191
  // enum Status {
41
192
  // ACTIVE
42
193
  // INACTIVE
43
194
  // PENDING
44
195
  // }
45
- `;
196
+ `
197
+ : '';
198
+ const enumSection = injectable.enums.length > 0 ? `\n${injectable.enums.map((e) => e.content).join('\n\n')}\n` : '';
199
+ return `// Add this model to your prisma/schema.prisma file
200
+ ${enumSection}
201
+ ${injectable.modelContent}
202
+ ${enumComment}`;
46
203
  }
47
204
  // ============================================================================
48
205
  // Zod Schema Template
49
206
  // ============================================================================
50
207
  function generateZodSchema(entity, options) {
51
208
  const { pascal, camel } = entity;
52
- const { softDelete, timestamps, crud } = options;
209
+ const { softDelete, timestamps, crud, fields = [] } = options;
53
210
  const timestampFields = timestamps
54
211
  ? `
55
212
  createdAt: z.date(),
@@ -59,6 +216,18 @@ function generateZodSchema(entity, options) {
59
216
  ? `
60
217
  deletedAt: z.date().nullable(),`
61
218
  : '';
219
+ // Generate custom fields or placeholder
220
+ let customFields;
221
+ if (fields.length > 0) {
222
+ customFields = `\n${fields.map(fieldToZod).join('\n')}`;
223
+ }
224
+ else {
225
+ customFields = `
226
+ // TODO: Add your fields here
227
+ // name: z.string().min(1).max(255),
228
+ // email: z.string().email(),
229
+ // status: z.enum(['ACTIVE', 'INACTIVE', 'PENDING']),`;
230
+ }
62
231
  // Fields to omit for create/update
63
232
  const omitFields = ['id'];
64
233
  if (timestamps)
@@ -158,11 +327,7 @@ import { z } from 'zod';
158
327
  * ${pascal} - Full entity schema
159
328
  */
160
329
  export const ${camel}Schema = z.object({
161
- id: z.string().uuid(),
162
- // TODO: Add your fields here
163
- // name: z.string().min(1).max(255),
164
- // email: z.string().email(),
165
- // status: z.enum(['ACTIVE', 'INACTIVE', 'PENDING']),${timestampFields}${softDeleteField}
330
+ id: z.string().uuid(),${customFields}${timestampFields}${softDeleteField}
166
331
  });
167
332
 
168
333
  export type ${pascal} = z.infer<typeof ${camel}Schema>;
@@ -183,7 +348,7 @@ function generateProcedure(entity, options) {
183
348
  * API procedures for ${pascal} operations.
184
349
  */
185
350
 
186
- import { procedure, defineProcedures } from '@veloxts/router';
351
+ import { defineProcedures, procedure } from '@veloxts/velox';
187
352
  import { ${camel}Schema, ${camel}IdParamSchema } from '../schemas/${kebab}.schema.js';
188
353
 
189
354
  export const ${camel}Procedures = defineProcedures('${kebab}s', {
@@ -236,8 +401,7 @@ export const ${camel}Procedures = defineProcedures('${kebab}s', {
236
401
  * CRUD procedures for ${pascal} entity.
237
402
  */
238
403
 
239
- import { z } from 'zod';
240
- import { procedure, defineProcedures } from '@veloxts/router';
404
+ import { defineProcedures, procedure, z } from '@veloxts/velox';
241
405
  import {
242
406
  ${camel}Schema,
243
407
  ${camel}IdParamSchema,
@@ -464,12 +628,12 @@ describe('${pascal} Procedures', () => {
464
628
  */
465
629
  export function generateResourceFiles(ctx) {
466
630
  const files = [];
467
- const { entity, options } = ctx;
631
+ const { entity, options, project } = ctx;
468
632
  // Prisma model (added to models folder for reference)
469
633
  if (!options.skipModel) {
470
634
  files.push({
471
635
  path: `src/models/${entity.kebab}.prisma`,
472
- content: generatePrismaModel(entity, options),
636
+ content: generatePrismaModel(entity, options, project.database),
473
637
  });
474
638
  }
475
639
  // Zod schema
@@ -501,50 +665,71 @@ export function generateResourceFiles(ctx) {
501
665
  export function getResourceInstructions(entityName, options) {
502
666
  const steps = [];
503
667
  let stepNum = 1;
668
+ const lowerName = entityName.toLowerCase();
669
+ const camelName = entityName.charAt(0).toLowerCase() + entityName.slice(1);
670
+ const hasFields = options.fields && options.fields.length > 0;
671
+ const fieldCount = options.fields?.length ?? 0;
672
+ // Step 1: Prisma model (always needed unless skipped)
504
673
  if (!options.skipModel) {
505
- steps.push(`${stepNum}. Add the Prisma model to your schema:
674
+ const fieldInfo = hasFields
675
+ ? ` (${fieldCount} field${fieldCount === 1 ? '' : 's'} defined)`
676
+ : '';
677
+ steps.push(`${stepNum}. Add the Prisma model to your schema${fieldInfo}:
506
678
 
507
- Copy the contents of src/models/${entityName.toLowerCase()}.prisma
679
+ Copy the contents of src/models/${lowerName}.prisma
508
680
  into your prisma/schema.prisma file.
509
681
 
510
682
  Then run:
511
683
  npx prisma db push
512
684
  # or
513
- npx prisma migrate dev --name add_${entityName.toLowerCase()}`);
685
+ npx prisma migrate dev --name add_${lowerName}`);
514
686
  stepNum++;
515
687
  }
688
+ // Step 2: Zod schema - different message based on whether fields were defined
516
689
  if (!options.skipSchema) {
517
- steps.push(`${stepNum}. Customize the Zod schema:
518
-
519
- Edit src/schemas/${entityName.toLowerCase()}.schema.ts
520
- to match your Prisma model fields.`);
690
+ if (hasFields) {
691
+ steps.push(`${stepNum}. Review the Zod validation (optional):
692
+
693
+ The schema at src/schemas/${lowerName}.schema.ts
694
+ already includes your ${fieldCount} field${fieldCount === 1 ? '' : 's'}.
695
+ Customize validation rules if needed (min/max, patterns, etc.)`);
696
+ }
697
+ else {
698
+ steps.push(`${stepNum}. Add fields to the Zod schema:
699
+
700
+ Edit src/schemas/${lowerName}.schema.ts
701
+ to define your validation schema.`);
702
+ }
521
703
  stepNum++;
522
704
  }
705
+ // Step 3: Register procedures
523
706
  if (!options.skipProcedure) {
524
707
  steps.push(`${stepNum}. Register the procedures in your router:
525
708
 
526
- import { ${entityName.charAt(0).toLowerCase() + entityName.slice(1)}Procedures } from './procedures/${entityName.toLowerCase()}.js';
709
+ import { ${camelName}Procedures } from './procedures/${lowerName}.js';
527
710
 
528
711
  // Add to your router
529
712
  const router = createRouter({
530
- ${entityName.charAt(0).toLowerCase() + entityName.slice(1)}: ${entityName.charAt(0).toLowerCase() + entityName.slice(1)}Procedures,
713
+ ${camelName}: ${camelName}Procedures,
531
714
  });`);
532
715
  stepNum++;
533
716
  }
717
+ // Step 4: Run tests (only if tests were generated)
534
718
  if (options.withTests) {
535
719
  steps.push(`${stepNum}. Run the tests:
536
720
 
537
- pnpm test src/procedures/__tests__/${entityName.toLowerCase()}.test.ts`);
721
+ pnpm test src/procedures/__tests__/${lowerName}.test.ts`);
538
722
  stepNum++;
539
723
  }
724
+ // Final step: API endpoints summary
540
725
  steps.push(`${stepNum}. Your ${entityName} API is ready:
541
726
 
542
- GET /api/${entityName.toLowerCase()}s - List all
543
- GET /api/${entityName.toLowerCase()}s/:id - Get by ID
544
- POST /api/${entityName.toLowerCase()}s - Create new
545
- PUT /api/${entityName.toLowerCase()}s/:id - Full update
546
- PATCH /api/${entityName.toLowerCase()}s/:id - Partial update
547
- DELETE /api/${entityName.toLowerCase()}s/:id - Delete`);
727
+ GET /api/${lowerName}s - List all
728
+ GET /api/${lowerName}s/:id - Get by ID
729
+ POST /api/${lowerName}s - Create new
730
+ PUT /api/${lowerName}s/:id - Full update
731
+ PATCH /api/${lowerName}s/:id - Partial update
732
+ DELETE /api/${lowerName}s/:id - Delete`);
548
733
  return `\n ${steps.join('\n\n ')}`;
549
734
  }
550
735
  //# sourceMappingURL=resource.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"resource.js","sourceRoot":"","sources":["../../../src/generators/templates/resource.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"resource.js","sourceRoot":"","sources":["../../../src/generators/templates/resource.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,26 @@
1
+ /**
2
+ * Service Template
3
+ *
4
+ * Generates service class files for VeloxTS applications.
5
+ */
6
+ import type { ProjectContext, TemplateFunction } from '../types.js';
7
+ export interface ServiceOptions {
8
+ /** Generate CRUD service */
9
+ crud: boolean;
10
+ /** Include caching layer */
11
+ cache: boolean;
12
+ /** Include event emitter */
13
+ events: boolean;
14
+ /** Generate injectable service (DI) */
15
+ injectable: boolean;
16
+ }
17
+ /**
18
+ * Get the path for a service file
19
+ */
20
+ export declare function getServicePath(entityName: string, _project: ProjectContext): string;
21
+ /**
22
+ * Service template function
23
+ */
24
+ export declare const serviceTemplate: TemplateFunction<ServiceOptions>;
25
+ export declare function getServiceInstructions(entityName: string, options: ServiceOptions): string;
26
+ //# sourceMappingURL=service.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"service.d.ts","sourceRoot":"","sources":["../../../src/generators/templates/service.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EAAE,cAAc,EAAmB,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAMrF,MAAM,WAAW,cAAc;IAC7B,4BAA4B;IAC5B,IAAI,EAAE,OAAO,CAAC;IACd,4BAA4B;IAC5B,KAAK,EAAE,OAAO,CAAC;IACf,4BAA4B;IAC5B,MAAM,EAAE,OAAO,CAAC;IAChB,uCAAuC;IACvC,UAAU,EAAE,OAAO,CAAC;CACrB;AAMD;;GAEG;AACH,wBAAgB,cAAc,CAAC,UAAU,EAAE,MAAM,EAAE,QAAQ,EAAE,cAAc,GAAG,MAAM,CAEnF;AA6dD;;GAEG;AACH,eAAO,MAAM,eAAe,EAAE,gBAAgB,CAAC,cAAc,CAQ5D,CAAC;AAMF,wBAAgB,sBAAsB,CAAC,UAAU,EAAE,MAAM,EAAE,OAAO,EAAE,cAAc,GAAG,MAAM,CA0B1F"}