@veloxts/cli 0.4.14 → 0.6.23
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +2 -48
- package/dist/cli.d.ts +5 -1
- package/dist/cli.d.ts.map +1 -1
- package/dist/cli.js +7 -1
- package/dist/cli.js.map +1 -1
- package/dist/commands/dev.d.ts.map +1 -1
- package/dist/commands/dev.js +71 -7
- package/dist/commands/dev.js.map +1 -1
- package/dist/commands/introspect.d.ts +16 -0
- package/dist/commands/introspect.d.ts.map +1 -0
- package/dist/commands/introspect.js +559 -0
- package/dist/commands/introspect.js.map +1 -0
- package/dist/commands/make.d.ts.map +1 -1
- package/dist/commands/make.js +18 -8
- package/dist/commands/make.js.map +1 -1
- package/dist/commands/procedures.d.ts.map +1 -1
- package/dist/commands/procedures.js +16 -0
- package/dist/commands/procedures.js.map +1 -1
- package/dist/dev/error-parser.d.ts.map +1 -1
- package/dist/dev/error-parser.js +24 -8
- package/dist/dev/error-parser.js.map +1 -1
- package/dist/dev/hmr-runner.d.ts.map +1 -1
- package/dist/dev/hmr-runner.js +6 -1
- package/dist/dev/hmr-runner.js.map +1 -1
- package/dist/dev/index.d.ts +3 -3
- package/dist/dev/index.d.ts.map +1 -1
- package/dist/dev/index.js +3 -3
- package/dist/dev/index.js.map +1 -1
- package/dist/dev/reload-reporter.d.ts +2 -2
- package/dist/dev/reload-reporter.d.ts.map +1 -1
- package/dist/dev/reload-reporter.js +2 -2
- package/dist/dev/reload-reporter.js.map +1 -1
- package/dist/errors/catalog.d.ts +48 -0
- package/dist/errors/catalog.d.ts.map +1 -0
- package/dist/errors/catalog.js +421 -0
- package/dist/errors/catalog.js.map +1 -0
- package/dist/errors/index.d.ts +26 -0
- package/dist/errors/index.d.ts.map +1 -0
- package/dist/errors/index.js +28 -0
- package/dist/errors/index.js.map +1 -0
- package/dist/errors/velox-error.d.ts +122 -0
- package/dist/errors/velox-error.d.ts.map +1 -0
- package/dist/errors/velox-error.js +216 -0
- package/dist/errors/velox-error.js.map +1 -0
- package/dist/generators/base.d.ts.map +1 -1
- package/dist/generators/base.js +26 -0
- package/dist/generators/base.js.map +1 -1
- package/dist/generators/fields/__tests__/helpers.d.ts +66 -0
- package/dist/generators/fields/__tests__/helpers.d.ts.map +1 -0
- package/dist/generators/fields/__tests__/helpers.js +142 -0
- package/dist/generators/fields/__tests__/helpers.js.map +1 -0
- package/dist/generators/fields/actions.d.ts +58 -0
- package/dist/generators/fields/actions.d.ts.map +1 -0
- package/dist/generators/fields/actions.js +230 -0
- package/dist/generators/fields/actions.js.map +1 -0
- package/dist/generators/fields/display.d.ts +28 -0
- package/dist/generators/fields/display.d.ts.map +1 -0
- package/dist/generators/fields/display.js +214 -0
- package/dist/generators/fields/display.js.map +1 -0
- package/dist/generators/fields/index.d.ts +12 -0
- package/dist/generators/fields/index.d.ts.map +1 -0
- package/dist/generators/fields/index.js +12 -0
- package/dist/generators/fields/index.js.map +1 -0
- package/dist/generators/fields/prompts.d.ts +31 -0
- package/dist/generators/fields/prompts.d.ts.map +1 -0
- package/dist/generators/fields/prompts.js +366 -0
- package/dist/generators/fields/prompts.js.map +1 -0
- package/dist/generators/fields/templates.d.ts +49 -0
- package/dist/generators/fields/templates.d.ts.map +1 -0
- package/dist/generators/fields/templates.js +230 -0
- package/dist/generators/fields/templates.js.map +1 -0
- package/dist/generators/fields/types.d.ts +95 -0
- package/dist/generators/fields/types.d.ts.map +1 -0
- package/dist/generators/fields/types.js +150 -0
- package/dist/generators/fields/types.js.map +1 -0
- package/dist/generators/generators/action.d.ts +37 -0
- package/dist/generators/generators/action.d.ts.map +1 -0
- package/dist/generators/generators/action.js +109 -0
- package/dist/generators/generators/action.js.map +1 -0
- package/dist/generators/generators/exception.d.ts +38 -0
- package/dist/generators/generators/exception.d.ts.map +1 -0
- package/dist/generators/generators/exception.js +109 -0
- package/dist/generators/generators/exception.js.map +1 -0
- package/dist/generators/generators/guard.d.ts +38 -0
- package/dist/generators/generators/guard.d.ts.map +1 -0
- package/dist/generators/generators/guard.js +109 -0
- package/dist/generators/generators/guard.js.map +1 -0
- package/dist/generators/generators/index.d.ts +8 -0
- package/dist/generators/generators/index.d.ts.map +1 -1
- package/dist/generators/generators/index.js +27 -0
- package/dist/generators/generators/index.js.map +1 -1
- package/dist/generators/generators/layout.d.ts +36 -0
- package/dist/generators/generators/layout.d.ts.map +1 -0
- package/dist/generators/generators/layout.js +111 -0
- package/dist/generators/generators/layout.js.map +1 -0
- package/dist/generators/generators/middleware.d.ts +38 -0
- package/dist/generators/generators/middleware.d.ts.map +1 -0
- package/dist/generators/generators/middleware.js +109 -0
- package/dist/generators/generators/middleware.js.map +1 -0
- package/dist/generators/generators/model.d.ts +16 -4
- package/dist/generators/generators/model.d.ts.map +1 -1
- package/dist/generators/generators/model.js +88 -7
- package/dist/generators/generators/model.js.map +1 -1
- package/dist/generators/generators/page.d.ts +36 -0
- package/dist/generators/generators/page.d.ts.map +1 -0
- package/dist/generators/generators/page.js +112 -0
- package/dist/generators/generators/page.js.map +1 -0
- package/dist/generators/generators/policy.d.ts +37 -0
- package/dist/generators/generators/policy.d.ts.map +1 -0
- package/dist/generators/generators/policy.js +100 -0
- package/dist/generators/generators/policy.js.map +1 -0
- package/dist/generators/generators/resource.d.ts +42 -4
- package/dist/generators/generators/resource.d.ts.map +1 -1
- package/dist/generators/generators/resource.js +450 -9
- package/dist/generators/generators/resource.js.map +1 -1
- package/dist/generators/generators/service.d.ts +38 -0
- package/dist/generators/generators/service.d.ts.map +1 -0
- package/dist/generators/generators/service.js +109 -0
- package/dist/generators/generators/service.js.map +1 -0
- package/dist/generators/registry.d.ts.map +1 -1
- package/dist/generators/registry.js +10 -1
- package/dist/generators/registry.js.map +1 -1
- package/dist/generators/templates/action.d.ts +28 -0
- package/dist/generators/templates/action.d.ts.map +1 -0
- package/dist/generators/templates/action.js +359 -0
- package/dist/generators/templates/action.js.map +1 -0
- package/dist/generators/templates/exception.d.ts +26 -0
- package/dist/generators/templates/exception.d.ts.map +1 -0
- package/dist/generators/templates/exception.js +671 -0
- package/dist/generators/templates/exception.js.map +1 -0
- package/dist/generators/templates/guard.d.ts +26 -0
- package/dist/generators/templates/guard.d.ts.map +1 -0
- package/dist/generators/templates/guard.js +555 -0
- package/dist/generators/templates/guard.js.map +1 -0
- package/dist/generators/templates/layout.d.ts +28 -0
- package/dist/generators/templates/layout.d.ts.map +1 -0
- package/dist/generators/templates/layout.js +147 -0
- package/dist/generators/templates/layout.js.map +1 -0
- package/dist/generators/templates/middleware.d.ts +26 -0
- package/dist/generators/templates/middleware.d.ts.map +1 -0
- package/dist/generators/templates/middleware.js +411 -0
- package/dist/generators/templates/middleware.js.map +1 -0
- package/dist/generators/templates/model.d.ts +3 -0
- package/dist/generators/templates/model.d.ts.map +1 -1
- package/dist/generators/templates/model.js +183 -28
- package/dist/generators/templates/model.js.map +1 -1
- package/dist/generators/templates/page.d.ts +36 -0
- package/dist/generators/templates/page.d.ts.map +1 -0
- package/dist/generators/templates/page.js +147 -0
- package/dist/generators/templates/page.js.map +1 -0
- package/dist/generators/templates/policy.d.ts +24 -0
- package/dist/generators/templates/policy.d.ts.map +1 -0
- package/dist/generators/templates/policy.js +499 -0
- package/dist/generators/templates/policy.js.map +1 -0
- package/dist/generators/templates/resource.d.ts +65 -0
- package/dist/generators/templates/resource.d.ts.map +1 -1
- package/dist/generators/templates/resource.js +228 -43
- package/dist/generators/templates/resource.js.map +1 -1
- package/dist/generators/templates/service.d.ts +26 -0
- package/dist/generators/templates/service.d.ts.map +1 -0
- package/dist/generators/templates/service.js +511 -0
- package/dist/generators/templates/service.js.map +1 -0
- package/dist/generators/types.d.ts +26 -14
- package/dist/generators/types.d.ts.map +1 -1
- package/dist/generators/types.js +8 -25
- package/dist/generators/types.js.map +1 -1
- package/dist/generators/utils/ast-helpers.d.ts +147 -0
- package/dist/generators/utils/ast-helpers.d.ts.map +1 -0
- package/dist/generators/utils/ast-helpers.js +350 -0
- package/dist/generators/utils/ast-helpers.js.map +1 -0
- package/dist/generators/utils/prisma-migration.d.ts +59 -0
- package/dist/generators/utils/prisma-migration.d.ts.map +1 -0
- package/dist/generators/utils/prisma-migration.js +161 -0
- package/dist/generators/utils/prisma-migration.js.map +1 -0
- package/dist/generators/utils/prisma-schema.d.ts +97 -0
- package/dist/generators/utils/prisma-schema.d.ts.map +1 -0
- package/dist/generators/utils/prisma-schema.js +235 -0
- package/dist/generators/utils/prisma-schema.js.map +1 -0
- package/dist/generators/utils/router-integration.d.ts +70 -0
- package/dist/generators/utils/router-integration.d.ts.map +1 -0
- package/dist/generators/utils/router-integration.js +305 -0
- package/dist/generators/utils/router-integration.js.map +1 -0
- package/dist/generators/utils/snapshot.d.ts +93 -0
- package/dist/generators/utils/snapshot.d.ts.map +1 -0
- package/dist/generators/utils/snapshot.js +178 -0
- package/dist/generators/utils/snapshot.js.map +1 -0
- package/dist/index.d.ts +6 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +6 -0
- package/dist/index.js.map +1 -1
- package/dist/seeding/errors.d.ts +11 -24
- package/dist/seeding/errors.d.ts.map +1 -1
- package/dist/seeding/errors.js +11 -50
- package/dist/seeding/errors.js.map +1 -1
- package/dist/utils/paths.d.ts +19 -0
- package/dist/utils/paths.d.ts.map +1 -1
- package/dist/utils/paths.js +45 -0
- package/dist/utils/paths.js.map +1 -1
- package/dist/utils/schema-patterns.d.ts +26 -0
- package/dist/utils/schema-patterns.d.ts.map +1 -0
- package/dist/utils/schema-patterns.js +40 -0
- package/dist/utils/schema-patterns.js.map +1 -0
- package/package.json +12 -10
|
@@ -3,32 +3,84 @@
|
|
|
3
3
|
*
|
|
4
4
|
* Generates Prisma model, Zod schema, and optionally procedures.
|
|
5
5
|
*/
|
|
6
|
+
import { FIELD_TYPES } from '../fields/types.js';
|
|
6
7
|
// ============================================================================
|
|
7
8
|
// Prisma Model Template
|
|
8
9
|
// ============================================================================
|
|
10
|
+
/**
|
|
11
|
+
* Helper: Convert field to Prisma syntax
|
|
12
|
+
*/
|
|
13
|
+
function fieldToPrisma(field) {
|
|
14
|
+
const typeInfo = FIELD_TYPES.find((t) => t.type === field.type);
|
|
15
|
+
let prismaType = typeInfo?.prismaType ?? 'String';
|
|
16
|
+
// Handle enum type specially
|
|
17
|
+
if (field.type === 'enum' && field.enumDef) {
|
|
18
|
+
prismaType = field.enumDef.name;
|
|
19
|
+
}
|
|
20
|
+
// Build attributes
|
|
21
|
+
const attributes = [];
|
|
22
|
+
if (field.attributes.unique)
|
|
23
|
+
attributes.push('@unique');
|
|
24
|
+
if (field.attributes.hasDefault && field.attributes.defaultValue) {
|
|
25
|
+
attributes.push(`@default(${field.attributes.defaultValue})`);
|
|
26
|
+
}
|
|
27
|
+
// Optional fields get ? suffix
|
|
28
|
+
const optional = field.attributes.optional ? '?' : '';
|
|
29
|
+
const attrStr = attributes.length > 0 ? ` ${attributes.join(' ')}` : '';
|
|
30
|
+
return ` ${field.name.padEnd(10)} ${prismaType}${optional}${attrStr}`;
|
|
31
|
+
}
|
|
32
|
+
/**
|
|
33
|
+
* Helper: Generate Prisma enums
|
|
34
|
+
*/
|
|
35
|
+
function generatePrismaEnums(fields) {
|
|
36
|
+
const enumFields = fields.filter((f) => f.type === 'enum' && f.enumDef);
|
|
37
|
+
if (enumFields.length === 0)
|
|
38
|
+
return '';
|
|
39
|
+
const enums = enumFields.map((f) => {
|
|
40
|
+
const enumDef = f.enumDef;
|
|
41
|
+
if (!enumDef)
|
|
42
|
+
return '';
|
|
43
|
+
const values = enumDef.values.map((v) => ` ${v}`).join('\n');
|
|
44
|
+
return `enum ${enumDef.name} {\n${values}\n}`;
|
|
45
|
+
});
|
|
46
|
+
return `\n${enums.join('\n\n')}\n`;
|
|
47
|
+
}
|
|
9
48
|
/**
|
|
10
49
|
* Generate Prisma model definition
|
|
11
50
|
*/
|
|
12
51
|
function generatePrismaModel(ctx) {
|
|
13
52
|
const { entity, options } = ctx;
|
|
14
|
-
const fields = [
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
// Add soft delete if enabled
|
|
21
|
-
if (options.softDelete) {
|
|
22
|
-
fields.push(' deletedAt DateTime?');
|
|
53
|
+
const { softDelete, timestamps, fields = [] } = options;
|
|
54
|
+
const baseFields = [' id String @id @default(uuid())'];
|
|
55
|
+
// Add custom fields or placeholder
|
|
56
|
+
let customFields;
|
|
57
|
+
if (fields.length > 0) {
|
|
58
|
+
customFields = `\n${fields.map((f) => fieldToPrisma(f)).join('\n')}`;
|
|
23
59
|
}
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
model ${entity.pascal} {
|
|
27
|
-
${fields.join('\n')}
|
|
60
|
+
else {
|
|
61
|
+
customFields = `
|
|
28
62
|
|
|
29
63
|
// TODO: Add your ${entity.humanReadable} fields here
|
|
30
64
|
// name String
|
|
31
|
-
// email String @unique
|
|
65
|
+
// email String @unique`;
|
|
66
|
+
}
|
|
67
|
+
// Add timestamps if enabled
|
|
68
|
+
const timestampFields = timestamps
|
|
69
|
+
? `
|
|
70
|
+
createdAt DateTime @default(now())
|
|
71
|
+
updatedAt DateTime @updatedAt`
|
|
72
|
+
: '';
|
|
73
|
+
// Add soft delete if enabled
|
|
74
|
+
const softDeleteField = softDelete
|
|
75
|
+
? `
|
|
76
|
+
deletedAt DateTime?`
|
|
77
|
+
: '';
|
|
78
|
+
// Generate enum definitions if any
|
|
79
|
+
const enumDefs = fields.length > 0 ? generatePrismaEnums(fields) : '';
|
|
80
|
+
return `/// ${entity.humanReadable} model
|
|
81
|
+
/// Add your fields below the id field
|
|
82
|
+
${enumDefs}model ${entity.pascal} {
|
|
83
|
+
${baseFields.join('\n')}${customFields}${timestampFields}${softDeleteField}
|
|
32
84
|
|
|
33
85
|
@@map("${entity.snake}")
|
|
34
86
|
}
|
|
@@ -37,21 +89,90 @@ ${fields.join('\n')}
|
|
|
37
89
|
// ============================================================================
|
|
38
90
|
// Zod Schema Template
|
|
39
91
|
// ============================================================================
|
|
92
|
+
/**
|
|
93
|
+
* Helper: Convert field to Zod schema
|
|
94
|
+
*/
|
|
95
|
+
function fieldToZod(field) {
|
|
96
|
+
const typeInfo = FIELD_TYPES.find((t) => t.type === field.type);
|
|
97
|
+
let zodType;
|
|
98
|
+
// Handle enum type specially
|
|
99
|
+
if (field.type === 'enum' && field.enumDef) {
|
|
100
|
+
const values = field.enumDef.values.map((v) => `'${v}'`).join(', ');
|
|
101
|
+
zodType = `z.enum([${values}])`;
|
|
102
|
+
}
|
|
103
|
+
else {
|
|
104
|
+
zodType = typeInfo?.zodSchema ?? 'z.string()';
|
|
105
|
+
}
|
|
106
|
+
// Optional (nullable)
|
|
107
|
+
if (field.attributes.optional) {
|
|
108
|
+
zodType += '.nullable()';
|
|
109
|
+
}
|
|
110
|
+
return ` ${field.name}: ${zodType},`;
|
|
111
|
+
}
|
|
112
|
+
/**
|
|
113
|
+
* Helper: Convert field to Zod input schema (for create/update)
|
|
114
|
+
*/
|
|
115
|
+
function fieldToZodInput(field, isUpdate) {
|
|
116
|
+
const typeInfo = FIELD_TYPES.find((t) => t.type === field.type);
|
|
117
|
+
let zodType;
|
|
118
|
+
// Handle enum type specially
|
|
119
|
+
if (field.type === 'enum' && field.enumDef) {
|
|
120
|
+
const values = field.enumDef.values.map((v) => `'${v}'`).join(', ');
|
|
121
|
+
zodType = `z.enum([${values}])`;
|
|
122
|
+
}
|
|
123
|
+
else {
|
|
124
|
+
zodType = typeInfo?.zodSchema ?? 'z.string()';
|
|
125
|
+
}
|
|
126
|
+
// For update inputs, make all fields optional
|
|
127
|
+
// For create inputs, respect the field's optional attribute
|
|
128
|
+
if (isUpdate || field.attributes.optional) {
|
|
129
|
+
zodType += '.optional()';
|
|
130
|
+
}
|
|
131
|
+
return ` ${field.name}: ${zodType},`;
|
|
132
|
+
}
|
|
40
133
|
/**
|
|
41
134
|
* Generate Zod schema file
|
|
42
135
|
*/
|
|
43
136
|
function generateZodSchema(ctx) {
|
|
44
137
|
const { entity, options } = ctx;
|
|
138
|
+
const { timestamps, softDelete, fields = [] } = options;
|
|
45
139
|
const schemaFields = [' id: z.string().uuid(),'];
|
|
140
|
+
// Add custom fields or placeholder comments
|
|
141
|
+
if (fields.length > 0) {
|
|
142
|
+
schemaFields.push(...fields.map((f) => fieldToZod(f)));
|
|
143
|
+
}
|
|
46
144
|
// Add timestamps if enabled
|
|
47
|
-
if (
|
|
145
|
+
if (timestamps) {
|
|
48
146
|
schemaFields.push(' createdAt: z.string().datetime(),');
|
|
49
147
|
schemaFields.push(' updatedAt: z.string().datetime(),');
|
|
50
148
|
}
|
|
51
149
|
// Add soft delete if enabled
|
|
52
|
-
if (
|
|
150
|
+
if (softDelete) {
|
|
53
151
|
schemaFields.push(' deletedAt: z.string().datetime().nullable(),');
|
|
54
152
|
}
|
|
153
|
+
// Generate input fields
|
|
154
|
+
const createInputFields = [];
|
|
155
|
+
const updateInputFields = [];
|
|
156
|
+
if (fields.length > 0) {
|
|
157
|
+
createInputFields.push(...fields.map((f) => fieldToZodInput(f, false)));
|
|
158
|
+
updateInputFields.push(...fields.map((f) => fieldToZodInput(f, true)));
|
|
159
|
+
}
|
|
160
|
+
const createInputPlaceholder = fields.length === 0
|
|
161
|
+
? ` // TODO: Add required fields for creating a ${entity.humanReadable}
|
|
162
|
+
// name: z.string().min(1).max(100),
|
|
163
|
+
// email: z.string().email(),`
|
|
164
|
+
: '';
|
|
165
|
+
const updateInputPlaceholder = fields.length === 0
|
|
166
|
+
? ` // TODO: Add optional fields for updating a ${entity.humanReadable}
|
|
167
|
+
// name: z.string().min(1).max(100).optional(),
|
|
168
|
+
// email: z.string().email().optional(),`
|
|
169
|
+
: '';
|
|
170
|
+
const responsePlaceholder = fields.length === 0
|
|
171
|
+
? ` // TODO: Add your ${entity.humanReadable} fields here
|
|
172
|
+
// name: z.string().min(1).max(100),
|
|
173
|
+
// email: z.string().email(),
|
|
174
|
+
`
|
|
175
|
+
: '';
|
|
55
176
|
return `/**
|
|
56
177
|
* ${entity.pascal} Schemas
|
|
57
178
|
*
|
|
@@ -69,10 +190,7 @@ import { z } from '@veloxts/velox';
|
|
|
69
190
|
*/
|
|
70
191
|
export const ${entity.pascal}Schema = z.object({
|
|
71
192
|
${schemaFields.join('\n')}
|
|
72
|
-
|
|
73
|
-
// name: z.string().min(1).max(100),
|
|
74
|
-
// email: z.string().email(),
|
|
75
|
-
});
|
|
193
|
+
${responsePlaceholder}});
|
|
76
194
|
|
|
77
195
|
export type ${entity.pascal} = z.infer<typeof ${entity.pascal}Schema>;
|
|
78
196
|
|
|
@@ -84,9 +202,7 @@ export type ${entity.pascal} = z.infer<typeof ${entity.pascal}Schema>;
|
|
|
84
202
|
* Create ${entity.pascal} input schema
|
|
85
203
|
*/
|
|
86
204
|
export const Create${entity.pascal}Input = z.object({
|
|
87
|
-
|
|
88
|
-
// name: z.string().min(1).max(100),
|
|
89
|
-
// email: z.string().email(),
|
|
205
|
+
${createInputFields.join('\n')}${createInputPlaceholder}
|
|
90
206
|
});
|
|
91
207
|
|
|
92
208
|
export type Create${entity.pascal}Data = z.infer<typeof Create${entity.pascal}Input>;
|
|
@@ -95,9 +211,7 @@ export type Create${entity.pascal}Data = z.infer<typeof Create${entity.pascal}In
|
|
|
95
211
|
* Update ${entity.pascal} input schema
|
|
96
212
|
*/
|
|
97
213
|
export const Update${entity.pascal}Input = z.object({
|
|
98
|
-
|
|
99
|
-
// name: z.string().min(1).max(100).optional(),
|
|
100
|
-
// email: z.string().email().optional(),
|
|
214
|
+
${updateInputFields.join('\n')}${updateInputPlaceholder}
|
|
101
215
|
});
|
|
102
216
|
|
|
103
217
|
export type Update${entity.pascal}Data = z.infer<typeof Update${entity.pascal}Input>;
|
|
@@ -152,7 +266,18 @@ function generateProcedures(ctx) {
|
|
|
152
266
|
const findWhereClause = options.softDelete
|
|
153
267
|
? `{ id: input.id, deletedAt: null }`
|
|
154
268
|
: `{ id: input.id }`;
|
|
269
|
+
const { fields = [] } = options;
|
|
270
|
+
// Build response fields
|
|
155
271
|
const responseFields = ['id: item.id,'];
|
|
272
|
+
// Add custom fields
|
|
273
|
+
for (const field of fields) {
|
|
274
|
+
if (field.type === 'datetime') {
|
|
275
|
+
responseFields.push(`${field.name}: item.${field.name}.toISOString(),`);
|
|
276
|
+
}
|
|
277
|
+
else {
|
|
278
|
+
responseFields.push(`${field.name}: item.${field.name},`);
|
|
279
|
+
}
|
|
280
|
+
}
|
|
156
281
|
if (options.timestamps) {
|
|
157
282
|
responseFields.push('createdAt: item.createdAt.toISOString(),');
|
|
158
283
|
responseFields.push('updatedAt: item.updatedAt.toISOString(),');
|
|
@@ -160,7 +285,34 @@ function generateProcedures(ctx) {
|
|
|
160
285
|
if (options.softDelete) {
|
|
161
286
|
responseFields.push('deletedAt: item.deletedAt?.toISOString() ?? null,');
|
|
162
287
|
}
|
|
288
|
+
// Build database interface fields
|
|
163
289
|
const dbInterfaceFields = ['id: string;'];
|
|
290
|
+
// Add custom fields to interface
|
|
291
|
+
for (const field of fields) {
|
|
292
|
+
let tsType = 'string';
|
|
293
|
+
switch (field.type) {
|
|
294
|
+
case 'int':
|
|
295
|
+
case 'float':
|
|
296
|
+
tsType = 'number';
|
|
297
|
+
break;
|
|
298
|
+
case 'boolean':
|
|
299
|
+
tsType = 'boolean';
|
|
300
|
+
break;
|
|
301
|
+
case 'datetime':
|
|
302
|
+
tsType = 'Date';
|
|
303
|
+
break;
|
|
304
|
+
case 'json':
|
|
305
|
+
tsType = 'unknown';
|
|
306
|
+
break;
|
|
307
|
+
case 'enum':
|
|
308
|
+
tsType = field.enumDef?.name ?? 'string';
|
|
309
|
+
break;
|
|
310
|
+
default:
|
|
311
|
+
tsType = 'string';
|
|
312
|
+
}
|
|
313
|
+
const nullable = field.attributes.optional ? ' | null' : '';
|
|
314
|
+
dbInterfaceFields.push(`${field.name}: ${tsType}${nullable};`);
|
|
315
|
+
}
|
|
164
316
|
if (options.timestamps) {
|
|
165
317
|
dbInterfaceFields.push('createdAt: Date;');
|
|
166
318
|
dbInterfaceFields.push('updatedAt: Date;');
|
|
@@ -168,6 +320,9 @@ function generateProcedures(ctx) {
|
|
|
168
320
|
if (options.softDelete) {
|
|
169
321
|
dbInterfaceFields.push('deletedAt: Date | null;');
|
|
170
322
|
}
|
|
323
|
+
// Build placeholder comments
|
|
324
|
+
const dbInterfacePlaceholder = fields.length === 0 ? '// TODO: Add your fields here' : '';
|
|
325
|
+
const responsePlaceholder = fields.length === 0 ? '// TODO: Map your fields here' : '';
|
|
171
326
|
return `/**
|
|
172
327
|
* ${entity.pascal} Procedures
|
|
173
328
|
*
|
|
@@ -189,14 +344,14 @@ import {
|
|
|
189
344
|
// Database model type - should match your Prisma schema
|
|
190
345
|
interface Db${entity.pascal} {
|
|
191
346
|
${dbInterfaceFields.join('\n ')}
|
|
192
|
-
|
|
347
|
+
${dbInterfacePlaceholder}
|
|
193
348
|
}
|
|
194
349
|
|
|
195
350
|
// Helper to convert database model to response
|
|
196
351
|
function toResponse(item: Db${entity.pascal}) {
|
|
197
352
|
return {
|
|
198
353
|
${responseFields.join('\n ')}
|
|
199
|
-
|
|
354
|
+
${responsePlaceholder}
|
|
200
355
|
};
|
|
201
356
|
}
|
|
202
357
|
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"model.js","sourceRoot":"","sources":["../../../src/generators/templates/model.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"model.js","sourceRoot":"","sources":["../../../src/generators/templates/model.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Page Template
|
|
3
|
+
*
|
|
4
|
+
* Generates RSC page files for VeloxTS full-stack applications.
|
|
5
|
+
*/
|
|
6
|
+
import type { TemplateContext, TemplateFunction } from '../types.js';
|
|
7
|
+
export interface PageOptions {
|
|
8
|
+
/** Generate a client component with "use client" directive */
|
|
9
|
+
client: boolean;
|
|
10
|
+
/** Include a loading state skeleton */
|
|
11
|
+
loading: boolean;
|
|
12
|
+
/** Include data fetching example */
|
|
13
|
+
fetch: boolean;
|
|
14
|
+
}
|
|
15
|
+
/**
|
|
16
|
+
* Get the path for a page file
|
|
17
|
+
*/
|
|
18
|
+
export declare function getPagePath(entityName: string, project: {
|
|
19
|
+
pagesDir?: string;
|
|
20
|
+
}): string;
|
|
21
|
+
/**
|
|
22
|
+
* Get the path for a loading file
|
|
23
|
+
*/
|
|
24
|
+
export declare function getLoadingPath(_entityName: string, project: {
|
|
25
|
+
pagesDir?: string;
|
|
26
|
+
}): string;
|
|
27
|
+
/**
|
|
28
|
+
* Generate a loading skeleton
|
|
29
|
+
*/
|
|
30
|
+
export declare function loadingTemplate(_ctx: TemplateContext<PageOptions>): string;
|
|
31
|
+
/**
|
|
32
|
+
* Page template function
|
|
33
|
+
*/
|
|
34
|
+
export declare const pageTemplate: TemplateFunction<PageOptions>;
|
|
35
|
+
export declare function getPageInstructions(entityName: string, options: PageOptions): string;
|
|
36
|
+
//# sourceMappingURL=page.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"page.d.ts","sourceRoot":"","sources":["../../../src/generators/templates/page.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EAAE,eAAe,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAMrE,MAAM,WAAW,WAAW;IAC1B,8DAA8D;IAC9D,MAAM,EAAE,OAAO,CAAC;IAChB,uCAAuC;IACvC,OAAO,EAAE,OAAO,CAAC;IACjB,oCAAoC;IACpC,KAAK,EAAE,OAAO,CAAC;CAChB;AAMD;;GAEG;AACH,wBAAgB,WAAW,CAAC,UAAU,EAAE,MAAM,EAAE,OAAO,EAAE;IAAE,QAAQ,CAAC,EAAE,MAAM,CAAA;CAAE,GAAG,MAAM,CAGtF;AAED;;GAEG;AACH,wBAAgB,cAAc,CAAC,WAAW,EAAE,MAAM,EAAE,OAAO,EAAE;IAAE,QAAQ,CAAC,EAAE,MAAM,CAAA;CAAE,GAAG,MAAM,CAG1F;AA4ED;;GAEG;AACH,wBAAgB,eAAe,CAAC,IAAI,EAAE,eAAe,CAAC,WAAW,CAAC,GAAG,MAAM,CAmB1E;AAMD;;GAEG;AACH,eAAO,MAAM,YAAY,EAAE,gBAAgB,CAAC,WAAW,CAKtD,CAAC;AAMF,wBAAgB,mBAAmB,CAAC,UAAU,EAAE,MAAM,EAAE,OAAO,EAAE,WAAW,GAAG,MAAM,CAqBpF"}
|
|
@@ -0,0 +1,147 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Page Template
|
|
3
|
+
*
|
|
4
|
+
* Generates RSC page files for VeloxTS full-stack applications.
|
|
5
|
+
*/
|
|
6
|
+
// ============================================================================
|
|
7
|
+
// Path Helpers
|
|
8
|
+
// ============================================================================
|
|
9
|
+
/**
|
|
10
|
+
* Get the path for a page file
|
|
11
|
+
*/
|
|
12
|
+
export function getPagePath(entityName, project) {
|
|
13
|
+
const pagesDir = project.pagesDir ?? 'app/pages';
|
|
14
|
+
return `${pagesDir}/${entityName.toLowerCase()}.tsx`;
|
|
15
|
+
}
|
|
16
|
+
/**
|
|
17
|
+
* Get the path for a loading file
|
|
18
|
+
*/
|
|
19
|
+
export function getLoadingPath(_entityName, project) {
|
|
20
|
+
const pagesDir = project.pagesDir ?? 'app/pages';
|
|
21
|
+
return `${pagesDir}/_loading.tsx`;
|
|
22
|
+
}
|
|
23
|
+
// ============================================================================
|
|
24
|
+
// Templates
|
|
25
|
+
// ============================================================================
|
|
26
|
+
/**
|
|
27
|
+
* Generate a server component page
|
|
28
|
+
*/
|
|
29
|
+
function generateServerPage(ctx) {
|
|
30
|
+
const { entity, options } = ctx;
|
|
31
|
+
const imports = options.fetch
|
|
32
|
+
? `import { db } from '@/lib/db';
|
|
33
|
+
|
|
34
|
+
`
|
|
35
|
+
: '';
|
|
36
|
+
const dataFetch = options.fetch
|
|
37
|
+
? `
|
|
38
|
+
// Fetch data for this page
|
|
39
|
+
const data = await db.${entity.camel}.findMany();
|
|
40
|
+
`
|
|
41
|
+
: '';
|
|
42
|
+
return `${imports}/**
|
|
43
|
+
* ${entity.pascal} Page
|
|
44
|
+
*
|
|
45
|
+
* Server Component - runs on the server at request time.
|
|
46
|
+
*/
|
|
47
|
+
export default async function ${entity.pascal}Page() {${dataFetch}
|
|
48
|
+
return (
|
|
49
|
+
<div className="${entity.kebab}-page">
|
|
50
|
+
<h1>${entity.humanReadable}</h1>
|
|
51
|
+
<p>Welcome to the ${entity.humanReadable} page.</p>
|
|
52
|
+
${options.fetch ? `{/* Display fetched data */}` : ''}
|
|
53
|
+
</div>
|
|
54
|
+
);
|
|
55
|
+
}
|
|
56
|
+
`;
|
|
57
|
+
}
|
|
58
|
+
/**
|
|
59
|
+
* Generate a client component page
|
|
60
|
+
*/
|
|
61
|
+
function generateClientPage(ctx) {
|
|
62
|
+
const { entity } = ctx;
|
|
63
|
+
return `'use client';
|
|
64
|
+
|
|
65
|
+
import { useState } from 'react';
|
|
66
|
+
|
|
67
|
+
/**
|
|
68
|
+
* ${entity.pascal} Page
|
|
69
|
+
*
|
|
70
|
+
* Client Component - hydrated on the client for interactivity.
|
|
71
|
+
*/
|
|
72
|
+
export default function ${entity.pascal}Page() {
|
|
73
|
+
const [count, setCount] = useState(0);
|
|
74
|
+
|
|
75
|
+
return (
|
|
76
|
+
<div className="${entity.kebab}-page">
|
|
77
|
+
<h1>${entity.humanReadable}</h1>
|
|
78
|
+
<p>Welcome to the ${entity.humanReadable} page.</p>
|
|
79
|
+
|
|
80
|
+
<div className="counter">
|
|
81
|
+
<button onClick={() => setCount(c => c - 1)}>-</button>
|
|
82
|
+
<span>{count}</span>
|
|
83
|
+
<button onClick={() => setCount(c => c + 1)}>+</button>
|
|
84
|
+
</div>
|
|
85
|
+
</div>
|
|
86
|
+
);
|
|
87
|
+
}
|
|
88
|
+
`;
|
|
89
|
+
}
|
|
90
|
+
/**
|
|
91
|
+
* Generate a loading skeleton
|
|
92
|
+
*/
|
|
93
|
+
export function loadingTemplate(_ctx) {
|
|
94
|
+
return `/**
|
|
95
|
+
* Loading Skeleton
|
|
96
|
+
*
|
|
97
|
+
* Displayed while the page is loading via React Suspense.
|
|
98
|
+
*/
|
|
99
|
+
export default function Loading() {
|
|
100
|
+
return (
|
|
101
|
+
<div className="loading-skeleton">
|
|
102
|
+
<div className="skeleton-header" />
|
|
103
|
+
<div className="skeleton-content">
|
|
104
|
+
<div className="skeleton-line" />
|
|
105
|
+
<div className="skeleton-line" />
|
|
106
|
+
<div className="skeleton-line short" />
|
|
107
|
+
</div>
|
|
108
|
+
</div>
|
|
109
|
+
);
|
|
110
|
+
}
|
|
111
|
+
`;
|
|
112
|
+
}
|
|
113
|
+
// ============================================================================
|
|
114
|
+
// Main Template
|
|
115
|
+
// ============================================================================
|
|
116
|
+
/**
|
|
117
|
+
* Page template function
|
|
118
|
+
*/
|
|
119
|
+
export const pageTemplate = (ctx) => {
|
|
120
|
+
if (ctx.options.client) {
|
|
121
|
+
return generateClientPage(ctx);
|
|
122
|
+
}
|
|
123
|
+
return generateServerPage(ctx);
|
|
124
|
+
};
|
|
125
|
+
// ============================================================================
|
|
126
|
+
// Post-generation Instructions
|
|
127
|
+
// ============================================================================
|
|
128
|
+
export function getPageInstructions(entityName, options) {
|
|
129
|
+
const lines = [
|
|
130
|
+
`Your ${entityName} page has been created.`,
|
|
131
|
+
'',
|
|
132
|
+
'Next steps:',
|
|
133
|
+
` 1. Add content to ${getPagePath(entityName, { pagesDir: 'app/pages' })}`,
|
|
134
|
+
];
|
|
135
|
+
if (options.client) {
|
|
136
|
+
lines.push(' 2. Add state and event handlers for interactivity');
|
|
137
|
+
}
|
|
138
|
+
else {
|
|
139
|
+
lines.push(' 2. Add data fetching if needed');
|
|
140
|
+
}
|
|
141
|
+
if (options.loading) {
|
|
142
|
+
lines.push(' 3. Customize the loading skeleton');
|
|
143
|
+
}
|
|
144
|
+
lines.push(' 4. Add routing links to navigate to this page');
|
|
145
|
+
return lines.join('\n');
|
|
146
|
+
}
|
|
147
|
+
//# sourceMappingURL=page.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"page.js","sourceRoot":"","sources":["../../../src/generators/templates/page.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Policy Template
|
|
3
|
+
*
|
|
4
|
+
* Generates authorization policy files for VeloxTS applications.
|
|
5
|
+
*/
|
|
6
|
+
import type { ProjectContext, TemplateFunction } from '../types.js';
|
|
7
|
+
export interface PolicyOptions {
|
|
8
|
+
/** Generate CRUD policy */
|
|
9
|
+
crud: boolean;
|
|
10
|
+
/** Generate resource-based policy */
|
|
11
|
+
resource: boolean;
|
|
12
|
+
/** Include soft delete policies */
|
|
13
|
+
softDelete: boolean;
|
|
14
|
+
}
|
|
15
|
+
/**
|
|
16
|
+
* Get the path for a policy file
|
|
17
|
+
*/
|
|
18
|
+
export declare function getPolicyPath(entityName: string, _project: ProjectContext): string;
|
|
19
|
+
/**
|
|
20
|
+
* Policy template function
|
|
21
|
+
*/
|
|
22
|
+
export declare const policyTemplate: TemplateFunction<PolicyOptions>;
|
|
23
|
+
export declare function getPolicyInstructions(entityName: string, options: PolicyOptions): string;
|
|
24
|
+
//# sourceMappingURL=policy.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"policy.d.ts","sourceRoot":"","sources":["../../../src/generators/templates/policy.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EAAE,cAAc,EAAmB,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAMrF,MAAM,WAAW,aAAa;IAC5B,2BAA2B;IAC3B,IAAI,EAAE,OAAO,CAAC;IACd,qCAAqC;IACrC,QAAQ,EAAE,OAAO,CAAC;IAClB,mCAAmC;IACnC,UAAU,EAAE,OAAO,CAAC;CACrB;AAMD;;GAEG;AACH,wBAAgB,aAAa,CAAC,UAAU,EAAE,MAAM,EAAE,QAAQ,EAAE,cAAc,GAAG,MAAM,CAElF;AAkdD;;GAEG;AACH,eAAO,MAAM,cAAc,EAAE,gBAAgB,CAAC,aAAa,CAQ1D,CAAC;AAMF,wBAAgB,qBAAqB,CAAC,UAAU,EAAE,MAAM,EAAE,OAAO,EAAE,aAAa,GAAG,MAAM,CAexF"}
|