create-velox-app 0.3.4 → 0.3.6
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/dist/cli.js +126 -13
- package/dist/cli.js.map +1 -1
- package/dist/index.d.ts +3 -2
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +218 -82
- package/dist/index.js.map +1 -1
- package/dist/templates/auth.d.ts +9 -0
- package/dist/templates/auth.d.ts.map +1 -0
- package/dist/templates/auth.js +1143 -0
- package/dist/templates/auth.js.map +1 -0
- package/dist/templates/default.d.ts +9 -0
- package/dist/templates/default.d.ts.map +1 -0
- package/dist/{templates.js → templates/default.js} +52 -300
- package/dist/templates/default.js.map +1 -0
- package/dist/templates/index.d.ts +20 -0
- package/dist/templates/index.d.ts.map +1 -0
- package/dist/templates/index.js +45 -0
- package/dist/templates/index.js.map +1 -0
- package/dist/templates/shared.d.ts +22 -0
- package/dist/templates/shared.d.ts.map +1 -0
- package/dist/templates/shared.js +301 -0
- package/dist/templates/shared.js.map +1 -0
- package/dist/templates/types.d.ts +91 -0
- package/dist/templates/types.d.ts.map +1 -0
- package/dist/templates/types.js +78 -0
- package/dist/templates/types.js.map +1 -0
- package/package.json +2 -1
- package/dist/templates.d.ts +0 -35
- package/dist/templates.d.ts.map +0 -1
- package/dist/templates.js.map +0 -1
|
@@ -0,0 +1,301 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Shared Template Files
|
|
3
|
+
*
|
|
4
|
+
* Common files used by all templates (config, gitignore, etc.)
|
|
5
|
+
*/
|
|
6
|
+
// ============================================================================
|
|
7
|
+
// Version Constant
|
|
8
|
+
// ============================================================================
|
|
9
|
+
/**
|
|
10
|
+
* VeloxTS framework version for generated projects.
|
|
11
|
+
* This is automatically updated during releases via changesets.
|
|
12
|
+
*/
|
|
13
|
+
export const VELOXTS_VERSION = '0.3.1';
|
|
14
|
+
// ============================================================================
|
|
15
|
+
// TypeScript Config
|
|
16
|
+
// ============================================================================
|
|
17
|
+
export function generateTsConfig() {
|
|
18
|
+
return JSON.stringify({
|
|
19
|
+
$schema: 'https://json.schemastore.org/tsconfig',
|
|
20
|
+
compilerOptions: {
|
|
21
|
+
target: 'ES2022',
|
|
22
|
+
module: 'ES2022',
|
|
23
|
+
moduleResolution: 'bundler',
|
|
24
|
+
lib: ['ES2022'],
|
|
25
|
+
strict: true,
|
|
26
|
+
esModuleInterop: true,
|
|
27
|
+
skipLibCheck: true,
|
|
28
|
+
resolveJsonModule: true,
|
|
29
|
+
allowSyntheticDefaultImports: true,
|
|
30
|
+
forceConsistentCasingInFileNames: true,
|
|
31
|
+
isolatedModules: true,
|
|
32
|
+
noUnusedLocals: true,
|
|
33
|
+
noUnusedParameters: true,
|
|
34
|
+
noFallthroughCasesInSwitch: true,
|
|
35
|
+
declaration: false,
|
|
36
|
+
declarationMap: false,
|
|
37
|
+
rootDir: './src',
|
|
38
|
+
outDir: './dist',
|
|
39
|
+
},
|
|
40
|
+
include: ['src/**/*'],
|
|
41
|
+
exclude: ['node_modules', 'dist', '**/*.test.ts', '**/*.spec.ts'],
|
|
42
|
+
}, null, 2);
|
|
43
|
+
}
|
|
44
|
+
// ============================================================================
|
|
45
|
+
// tsup Config
|
|
46
|
+
// ============================================================================
|
|
47
|
+
export function generateTsupConfig() {
|
|
48
|
+
return `import { defineConfig } from 'tsup';
|
|
49
|
+
|
|
50
|
+
export default defineConfig({
|
|
51
|
+
entry: ['src/index.ts'],
|
|
52
|
+
format: ['esm'],
|
|
53
|
+
target: 'node18',
|
|
54
|
+
clean: true,
|
|
55
|
+
dts: false,
|
|
56
|
+
sourcemap: true,
|
|
57
|
+
});
|
|
58
|
+
`;
|
|
59
|
+
}
|
|
60
|
+
// ============================================================================
|
|
61
|
+
// Environment Files
|
|
62
|
+
// ============================================================================
|
|
63
|
+
export function generateGitignore() {
|
|
64
|
+
return `# Dependencies
|
|
65
|
+
node_modules/
|
|
66
|
+
|
|
67
|
+
# Build output
|
|
68
|
+
dist/
|
|
69
|
+
*.tsbuildinfo
|
|
70
|
+
|
|
71
|
+
# Environment variables
|
|
72
|
+
.env
|
|
73
|
+
.env.local
|
|
74
|
+
|
|
75
|
+
# Database
|
|
76
|
+
*.db
|
|
77
|
+
*.db-journal
|
|
78
|
+
|
|
79
|
+
# Generated Prisma client
|
|
80
|
+
src/generated/
|
|
81
|
+
|
|
82
|
+
# Logs
|
|
83
|
+
logs/
|
|
84
|
+
*.log
|
|
85
|
+
|
|
86
|
+
# OS
|
|
87
|
+
.DS_Store
|
|
88
|
+
Thumbs.db
|
|
89
|
+
|
|
90
|
+
# IDE
|
|
91
|
+
.vscode/
|
|
92
|
+
.idea/
|
|
93
|
+
*.swp
|
|
94
|
+
*.swo
|
|
95
|
+
|
|
96
|
+
# Turbo
|
|
97
|
+
.turbo/
|
|
98
|
+
`;
|
|
99
|
+
}
|
|
100
|
+
// ============================================================================
|
|
101
|
+
// Prisma Config (Prisma 7.x)
|
|
102
|
+
// ============================================================================
|
|
103
|
+
export function generatePrismaConfig() {
|
|
104
|
+
return `/**
|
|
105
|
+
* Prisma Configuration (Prisma 7.x)
|
|
106
|
+
*
|
|
107
|
+
* Database URL is now configured here instead of schema.prisma.
|
|
108
|
+
* See: https://www.prisma.io/docs/orm/more/upgrade-guides/upgrading-versions/upgrading-to-prisma-7
|
|
109
|
+
*/
|
|
110
|
+
|
|
111
|
+
import 'dotenv/config';
|
|
112
|
+
import { defineConfig } from 'prisma/config';
|
|
113
|
+
|
|
114
|
+
export default defineConfig({
|
|
115
|
+
earlyAccess: true,
|
|
116
|
+
schema: './prisma/schema.prisma',
|
|
117
|
+
datasource: {
|
|
118
|
+
url: process.env.DATABASE_URL!,
|
|
119
|
+
},
|
|
120
|
+
});
|
|
121
|
+
`;
|
|
122
|
+
}
|
|
123
|
+
// ============================================================================
|
|
124
|
+
// Config Files
|
|
125
|
+
// ============================================================================
|
|
126
|
+
export function generateConfigIndex() {
|
|
127
|
+
return `/**
|
|
128
|
+
* Configuration Exports
|
|
129
|
+
*/
|
|
130
|
+
|
|
131
|
+
export * from './app.js';
|
|
132
|
+
`;
|
|
133
|
+
}
|
|
134
|
+
export function generateConfigApp() {
|
|
135
|
+
return `/**
|
|
136
|
+
* Application Configuration
|
|
137
|
+
*/
|
|
138
|
+
|
|
139
|
+
export interface AppConfig {
|
|
140
|
+
port: number;
|
|
141
|
+
host: string;
|
|
142
|
+
logger: boolean;
|
|
143
|
+
apiPrefix: string;
|
|
144
|
+
env: 'development' | 'production' | 'test';
|
|
145
|
+
}
|
|
146
|
+
|
|
147
|
+
export function createConfig(): AppConfig {
|
|
148
|
+
return {
|
|
149
|
+
port: Number(process.env.PORT) || 3210,
|
|
150
|
+
host: process.env.HOST || '0.0.0.0',
|
|
151
|
+
logger: process.env.LOG_LEVEL !== 'silent',
|
|
152
|
+
apiPrefix: process.env.API_PREFIX || '/api',
|
|
153
|
+
env: (process.env.NODE_ENV as AppConfig['env']) || 'development',
|
|
154
|
+
};
|
|
155
|
+
}
|
|
156
|
+
|
|
157
|
+
export const config = createConfig();
|
|
158
|
+
`;
|
|
159
|
+
}
|
|
160
|
+
// ============================================================================
|
|
161
|
+
// Health Procedures
|
|
162
|
+
// ============================================================================
|
|
163
|
+
export function generateHealthProcedures() {
|
|
164
|
+
return `/**
|
|
165
|
+
* Health Check Procedures
|
|
166
|
+
*/
|
|
167
|
+
|
|
168
|
+
import { VELOX_VERSION, defineProcedures, procedure, z } from '@veloxts/velox';
|
|
169
|
+
|
|
170
|
+
export const healthProcedures = defineProcedures('health', {
|
|
171
|
+
getHealth: procedure()
|
|
172
|
+
.rest({ method: 'GET', path: '/health' })
|
|
173
|
+
.output(
|
|
174
|
+
z.object({
|
|
175
|
+
status: z.literal('ok'),
|
|
176
|
+
version: z.string(),
|
|
177
|
+
timestamp: z.string().datetime(),
|
|
178
|
+
uptime: z.number(),
|
|
179
|
+
})
|
|
180
|
+
)
|
|
181
|
+
.query(async () => ({
|
|
182
|
+
status: 'ok' as const,
|
|
183
|
+
version: VELOX_VERSION,
|
|
184
|
+
timestamp: new Date().toISOString(),
|
|
185
|
+
uptime: process.uptime(),
|
|
186
|
+
})),
|
|
187
|
+
});
|
|
188
|
+
`;
|
|
189
|
+
}
|
|
190
|
+
// ============================================================================
|
|
191
|
+
// Static Files
|
|
192
|
+
// ============================================================================
|
|
193
|
+
export function generateIndexHtml() {
|
|
194
|
+
return `<!DOCTYPE html>
|
|
195
|
+
<html lang="en">
|
|
196
|
+
<head>
|
|
197
|
+
<meta charset="UTF-8">
|
|
198
|
+
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
|
199
|
+
<title>VeloxTS App</title>
|
|
200
|
+
<style>
|
|
201
|
+
* { box-sizing: border-box; margin: 0; padding: 0; }
|
|
202
|
+
body { font-family: system-ui, sans-serif; background: #f5f5f5; padding: 20px; }
|
|
203
|
+
.container { max-width: 800px; margin: 0 auto; }
|
|
204
|
+
h1 { margin-bottom: 20px; color: #333; }
|
|
205
|
+
.card { background: white; border-radius: 8px; padding: 20px; margin-bottom: 20px; box-shadow: 0 1px 3px rgba(0,0,0,0.1); }
|
|
206
|
+
.card h2 { margin-bottom: 15px; color: #555; font-size: 1.1rem; }
|
|
207
|
+
button { background: #007bff; color: white; border: none; padding: 8px 16px; border-radius: 4px; cursor: pointer; }
|
|
208
|
+
button:hover { background: #0056b3; }
|
|
209
|
+
</style>
|
|
210
|
+
</head>
|
|
211
|
+
<body>
|
|
212
|
+
<div class="container">
|
|
213
|
+
<h1>Welcome to VeloxTS</h1>
|
|
214
|
+
<div class="card">
|
|
215
|
+
<h2>Your app is running!</h2>
|
|
216
|
+
<p>Visit <code>/api/health</code> to check the API status.</p>
|
|
217
|
+
<p>Visit <code>/api/users</code> to see the users endpoint.</p>
|
|
218
|
+
</div>
|
|
219
|
+
</div>
|
|
220
|
+
</body>
|
|
221
|
+
</html>
|
|
222
|
+
`;
|
|
223
|
+
}
|
|
224
|
+
// ============================================================================
|
|
225
|
+
// README
|
|
226
|
+
// ============================================================================
|
|
227
|
+
export function generateReadme(config) {
|
|
228
|
+
return `# ${config.projectName}
|
|
229
|
+
|
|
230
|
+
A VeloxTS application - TypeScript full-stack framework.
|
|
231
|
+
|
|
232
|
+
## Getting Started
|
|
233
|
+
|
|
234
|
+
### Install Dependencies
|
|
235
|
+
|
|
236
|
+
\`\`\`bash
|
|
237
|
+
${config.packageManager} install
|
|
238
|
+
\`\`\`
|
|
239
|
+
|
|
240
|
+
### Setup Database
|
|
241
|
+
|
|
242
|
+
\`\`\`bash
|
|
243
|
+
${config.packageManager} db:push
|
|
244
|
+
\`\`\`
|
|
245
|
+
|
|
246
|
+
### Start Development Server
|
|
247
|
+
|
|
248
|
+
\`\`\`bash
|
|
249
|
+
${config.packageManager} dev
|
|
250
|
+
\`\`\`
|
|
251
|
+
|
|
252
|
+
The app will start at http://localhost:3210
|
|
253
|
+
|
|
254
|
+
## Project Structure
|
|
255
|
+
|
|
256
|
+
\`\`\`
|
|
257
|
+
src/
|
|
258
|
+
├── config/ # Application configuration
|
|
259
|
+
├── database/ # Database client
|
|
260
|
+
├── procedures/ # API procedures (business logic)
|
|
261
|
+
├── schemas/ # Zod validation schemas
|
|
262
|
+
└── index.ts # Application entry point
|
|
263
|
+
\`\`\`
|
|
264
|
+
|
|
265
|
+
## Available Scripts
|
|
266
|
+
|
|
267
|
+
- \`${config.packageManager} dev\` - Start development server with hot reload
|
|
268
|
+
- \`${config.packageManager} build\` - Build for production
|
|
269
|
+
- \`${config.packageManager} start\` - Start production server
|
|
270
|
+
- \`${config.packageManager} db:push\` - Sync database schema
|
|
271
|
+
- \`${config.packageManager} db:studio\` - Open Prisma Studio
|
|
272
|
+
|
|
273
|
+
## Learn More
|
|
274
|
+
|
|
275
|
+
- [VeloxTS Documentation](https://veloxts.dev)
|
|
276
|
+
- [TypeScript](https://www.typescriptlang.org/)
|
|
277
|
+
- [Fastify](https://fastify.dev/)
|
|
278
|
+
- [Prisma](https://www.prisma.io/)
|
|
279
|
+
|
|
280
|
+
## License
|
|
281
|
+
|
|
282
|
+
MIT
|
|
283
|
+
`;
|
|
284
|
+
}
|
|
285
|
+
// ============================================================================
|
|
286
|
+
// Shared Files Generator
|
|
287
|
+
// ============================================================================
|
|
288
|
+
export function generateSharedFiles(config) {
|
|
289
|
+
return [
|
|
290
|
+
{ path: 'tsconfig.json', content: generateTsConfig() },
|
|
291
|
+
{ path: 'tsup.config.ts', content: generateTsupConfig() },
|
|
292
|
+
{ path: '.gitignore', content: generateGitignore() },
|
|
293
|
+
{ path: 'prisma.config.ts', content: generatePrismaConfig() },
|
|
294
|
+
{ path: 'README.md', content: generateReadme(config) },
|
|
295
|
+
{ path: 'src/config/index.ts', content: generateConfigIndex() },
|
|
296
|
+
{ path: 'src/config/app.ts', content: generateConfigApp() },
|
|
297
|
+
{ path: 'src/procedures/health.ts', content: generateHealthProcedures() },
|
|
298
|
+
{ path: 'public/index.html', content: generateIndexHtml() },
|
|
299
|
+
];
|
|
300
|
+
}
|
|
301
|
+
//# sourceMappingURL=shared.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"shared.js","sourceRoot":"","sources":["../../src/templates/shared.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,91 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Template Types
|
|
3
|
+
*
|
|
4
|
+
* Shared types for the create-velox-app template system.
|
|
5
|
+
*/
|
|
6
|
+
/**
|
|
7
|
+
* Available template types
|
|
8
|
+
*/
|
|
9
|
+
export type TemplateType = 'default' | 'auth';
|
|
10
|
+
/**
|
|
11
|
+
* Available database types
|
|
12
|
+
*/
|
|
13
|
+
export type DatabaseType = 'sqlite' | 'postgresql' | 'mysql';
|
|
14
|
+
/**
|
|
15
|
+
* Database metadata for CLI display
|
|
16
|
+
*/
|
|
17
|
+
export interface DatabaseMetadata {
|
|
18
|
+
type: DatabaseType;
|
|
19
|
+
label: string;
|
|
20
|
+
hint?: string;
|
|
21
|
+
disabled?: boolean;
|
|
22
|
+
}
|
|
23
|
+
/**
|
|
24
|
+
* Available databases with metadata
|
|
25
|
+
*/
|
|
26
|
+
export declare const DATABASE_METADATA: Record<DatabaseType, DatabaseMetadata>;
|
|
27
|
+
/**
|
|
28
|
+
* Get all available database options
|
|
29
|
+
*/
|
|
30
|
+
export declare function getAvailableDatabases(): DatabaseMetadata[];
|
|
31
|
+
/**
|
|
32
|
+
* Check if a database type is valid
|
|
33
|
+
*/
|
|
34
|
+
export declare function isValidDatabase(database: string): database is DatabaseType;
|
|
35
|
+
/**
|
|
36
|
+
* Check if a database type is available (not disabled)
|
|
37
|
+
*/
|
|
38
|
+
export declare function isDatabaseAvailable(database: DatabaseType): boolean;
|
|
39
|
+
/**
|
|
40
|
+
* Template metadata for CLI display
|
|
41
|
+
*/
|
|
42
|
+
export interface TemplateMetadata {
|
|
43
|
+
type: TemplateType;
|
|
44
|
+
label: string;
|
|
45
|
+
description: string;
|
|
46
|
+
hint?: string;
|
|
47
|
+
}
|
|
48
|
+
/**
|
|
49
|
+
* Template configuration passed to generator functions
|
|
50
|
+
*/
|
|
51
|
+
export interface TemplateConfig {
|
|
52
|
+
projectName: string;
|
|
53
|
+
packageManager: 'npm' | 'pnpm' | 'yarn';
|
|
54
|
+
template: TemplateType;
|
|
55
|
+
database: DatabaseType;
|
|
56
|
+
}
|
|
57
|
+
/**
|
|
58
|
+
* Interface for template generators
|
|
59
|
+
*/
|
|
60
|
+
export interface TemplateGenerator {
|
|
61
|
+
/**
|
|
62
|
+
* Generate all files for this template
|
|
63
|
+
*/
|
|
64
|
+
generateFiles(config: TemplateConfig): TemplateFile[];
|
|
65
|
+
}
|
|
66
|
+
/**
|
|
67
|
+
* A single template file to be written
|
|
68
|
+
*/
|
|
69
|
+
export interface TemplateFile {
|
|
70
|
+
/**
|
|
71
|
+
* Relative path from project root (e.g., 'src/index.ts')
|
|
72
|
+
*/
|
|
73
|
+
path: string;
|
|
74
|
+
/**
|
|
75
|
+
* File content
|
|
76
|
+
*/
|
|
77
|
+
content: string;
|
|
78
|
+
}
|
|
79
|
+
/**
|
|
80
|
+
* Available templates with their metadata
|
|
81
|
+
*/
|
|
82
|
+
export declare const TEMPLATE_METADATA: Record<TemplateType, TemplateMetadata>;
|
|
83
|
+
/**
|
|
84
|
+
* Get all available template types
|
|
85
|
+
*/
|
|
86
|
+
export declare function getAvailableTemplates(): TemplateMetadata[];
|
|
87
|
+
/**
|
|
88
|
+
* Check if a template type is valid
|
|
89
|
+
*/
|
|
90
|
+
export declare function isValidTemplate(template: string): template is TemplateType;
|
|
91
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/templates/types.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAMH;;GAEG;AACH,MAAM,MAAM,YAAY,GAAG,SAAS,GAAG,MAAM,CAAC;AAE9C;;GAEG;AACH,MAAM,MAAM,YAAY,GAAG,QAAQ,GAAG,YAAY,GAAG,OAAO,CAAC;AAE7D;;GAEG;AACH,MAAM,WAAW,gBAAgB;IAC/B,IAAI,EAAE,YAAY,CAAC;IACnB,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB;AAED;;GAEG;AACH,eAAO,MAAM,iBAAiB,EAAE,MAAM,CAAC,YAAY,EAAE,gBAAgB,CAkBpE,CAAC;AAEF;;GAEG;AACH,wBAAgB,qBAAqB,IAAI,gBAAgB,EAAE,CAE1D;AAED;;GAEG;AACH,wBAAgB,eAAe,CAAC,QAAQ,EAAE,MAAM,GAAG,QAAQ,IAAI,YAAY,CAE1E;AAED;;GAEG;AACH,wBAAgB,mBAAmB,CAAC,QAAQ,EAAE,YAAY,GAAG,OAAO,CAEnE;AAED;;GAEG;AACH,MAAM,WAAW,gBAAgB;IAC/B,IAAI,EAAE,YAAY,CAAC;IACnB,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,EAAE,MAAM,CAAC;IACpB,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AAED;;GAEG;AACH,MAAM,WAAW,cAAc;IAC7B,WAAW,EAAE,MAAM,CAAC;IACpB,cAAc,EAAE,KAAK,GAAG,MAAM,GAAG,MAAM,CAAC;IACxC,QAAQ,EAAE,YAAY,CAAC;IACvB,QAAQ,EAAE,YAAY,CAAC;CACxB;AAED;;GAEG;AACH,MAAM,WAAW,iBAAiB;IAChC;;OAEG;IACH,aAAa,CAAC,MAAM,EAAE,cAAc,GAAG,YAAY,EAAE,CAAC;CACvD;AAED;;GAEG;AACH,MAAM,WAAW,YAAY;IAC3B;;OAEG;IACH,IAAI,EAAE,MAAM,CAAC;IACb;;OAEG;IACH,OAAO,EAAE,MAAM,CAAC;CACjB;AAMD;;GAEG;AACH,eAAO,MAAM,iBAAiB,EAAE,MAAM,CAAC,YAAY,EAAE,gBAAgB,CAapE,CAAC;AAEF;;GAEG;AACH,wBAAgB,qBAAqB,IAAI,gBAAgB,EAAE,CAE1D;AAED;;GAEG;AACH,wBAAgB,eAAe,CAAC,QAAQ,EAAE,MAAM,GAAG,QAAQ,IAAI,YAAY,CAE1E"}
|
|
@@ -0,0 +1,78 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Template Types
|
|
3
|
+
*
|
|
4
|
+
* Shared types for the create-velox-app template system.
|
|
5
|
+
*/
|
|
6
|
+
/**
|
|
7
|
+
* Available databases with metadata
|
|
8
|
+
*/
|
|
9
|
+
export const DATABASE_METADATA = {
|
|
10
|
+
sqlite: {
|
|
11
|
+
type: 'sqlite',
|
|
12
|
+
label: 'SQLite',
|
|
13
|
+
hint: 'File-based, zero setup (recommended for development)',
|
|
14
|
+
},
|
|
15
|
+
postgresql: {
|
|
16
|
+
type: 'postgresql',
|
|
17
|
+
label: 'PostgreSQL',
|
|
18
|
+
hint: 'Coming soon - requires running PostgreSQL server',
|
|
19
|
+
disabled: true,
|
|
20
|
+
},
|
|
21
|
+
mysql: {
|
|
22
|
+
type: 'mysql',
|
|
23
|
+
label: 'MySQL',
|
|
24
|
+
hint: 'Coming soon - requires running MySQL server',
|
|
25
|
+
disabled: true,
|
|
26
|
+
},
|
|
27
|
+
};
|
|
28
|
+
/**
|
|
29
|
+
* Get all available database options
|
|
30
|
+
*/
|
|
31
|
+
export function getAvailableDatabases() {
|
|
32
|
+
return Object.values(DATABASE_METADATA);
|
|
33
|
+
}
|
|
34
|
+
/**
|
|
35
|
+
* Check if a database type is valid
|
|
36
|
+
*/
|
|
37
|
+
export function isValidDatabase(database) {
|
|
38
|
+
return database in DATABASE_METADATA;
|
|
39
|
+
}
|
|
40
|
+
/**
|
|
41
|
+
* Check if a database type is available (not disabled)
|
|
42
|
+
*/
|
|
43
|
+
export function isDatabaseAvailable(database) {
|
|
44
|
+
return !DATABASE_METADATA[database].disabled;
|
|
45
|
+
}
|
|
46
|
+
// ============================================================================
|
|
47
|
+
// Template Registry
|
|
48
|
+
// ============================================================================
|
|
49
|
+
/**
|
|
50
|
+
* Available templates with their metadata
|
|
51
|
+
*/
|
|
52
|
+
export const TEMPLATE_METADATA = {
|
|
53
|
+
default: {
|
|
54
|
+
type: 'default',
|
|
55
|
+
label: 'API (Default)',
|
|
56
|
+
description: 'REST API with user CRUD operations',
|
|
57
|
+
hint: 'Basic API setup without authentication',
|
|
58
|
+
},
|
|
59
|
+
auth: {
|
|
60
|
+
type: 'auth',
|
|
61
|
+
label: 'Full Auth',
|
|
62
|
+
description: 'Complete JWT authentication with login, register, guards',
|
|
63
|
+
hint: 'Includes rate limiting, token rotation, password hashing',
|
|
64
|
+
},
|
|
65
|
+
};
|
|
66
|
+
/**
|
|
67
|
+
* Get all available template types
|
|
68
|
+
*/
|
|
69
|
+
export function getAvailableTemplates() {
|
|
70
|
+
return Object.values(TEMPLATE_METADATA);
|
|
71
|
+
}
|
|
72
|
+
/**
|
|
73
|
+
* Check if a template type is valid
|
|
74
|
+
*/
|
|
75
|
+
export function isValidTemplate(template) {
|
|
76
|
+
return template in TEMPLATE_METADATA;
|
|
77
|
+
}
|
|
78
|
+
//# sourceMappingURL=types.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/templates/types.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AA0BH;;GAEG;AACH,MAAM,CAAC,MAAM,iBAAiB,GAA2C;IACvE,MAAM,EAAE;QACN,IAAI,EAAE,QAAQ;QACd,KAAK,EAAE,QAAQ;QACf,IAAI,EAAE,sDAAsD;KAC7D;IACD,UAAU,EAAE;QACV,IAAI,EAAE,YAAY;QAClB,KAAK,EAAE,YAAY;QACnB,IAAI,EAAE,kDAAkD;QACxD,QAAQ,EAAE,IAAI;KACf;IACD,KAAK,EAAE;QACL,IAAI,EAAE,OAAO;QACb,KAAK,EAAE,OAAO;QACd,IAAI,EAAE,6CAA6C;QACnD,QAAQ,EAAE,IAAI;KACf;CACF,CAAC;AAEF;;GAEG;AACH,MAAM,UAAU,qBAAqB;IACnC,OAAO,MAAM,CAAC,MAAM,CAAC,iBAAiB,CAAC,CAAC;AAC1C,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,eAAe,CAAC,QAAgB;IAC9C,OAAO,QAAQ,IAAI,iBAAiB,CAAC;AACvC,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,mBAAmB,CAAC,QAAsB;IACxD,OAAO,CAAC,iBAAiB,CAAC,QAAQ,CAAC,CAAC,QAAQ,CAAC;AAC/C,CAAC;AA8CD,+EAA+E;AAC/E,oBAAoB;AACpB,+EAA+E;AAE/E;;GAEG;AACH,MAAM,CAAC,MAAM,iBAAiB,GAA2C;IACvE,OAAO,EAAE;QACP,IAAI,EAAE,SAAS;QACf,KAAK,EAAE,eAAe;QACtB,WAAW,EAAE,oCAAoC;QACjD,IAAI,EAAE,wCAAwC;KAC/C;IACD,IAAI,EAAE;QACJ,IAAI,EAAE,MAAM;QACZ,KAAK,EAAE,WAAW;QAClB,WAAW,EAAE,0DAA0D;QACvE,IAAI,EAAE,0DAA0D;KACjE;CACF,CAAC;AAEF;;GAEG;AACH,MAAM,UAAU,qBAAqB;IACnC,OAAO,MAAM,CAAC,MAAM,CAAC,iBAAiB,CAAC,CAAC;AAC1C,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,eAAe,CAAC,QAAgB;IAC9C,OAAO,QAAQ,IAAI,iBAAiB,CAAC;AACvC,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "create-velox-app",
|
|
3
|
-
"version": "0.3.
|
|
3
|
+
"version": "0.3.6",
|
|
4
4
|
"description": "Project scaffolder for VeloxTS framework",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "dist/index.js",
|
|
@@ -20,6 +20,7 @@
|
|
|
20
20
|
],
|
|
21
21
|
"dependencies": {
|
|
22
22
|
"@clack/prompts": "0.11.0",
|
|
23
|
+
"ora": "8.1.1",
|
|
23
24
|
"picocolors": "1.1.1"
|
|
24
25
|
},
|
|
25
26
|
"devDependencies": {
|
package/dist/templates.d.ts
DELETED
|
@@ -1,35 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Template Generation Functions
|
|
3
|
-
*
|
|
4
|
-
* Generates all files needed for a new VeloxTS project.
|
|
5
|
-
* Templates are based on the playground app structure.
|
|
6
|
-
*/
|
|
7
|
-
/**
|
|
8
|
-
* VeloxTS framework version for generated projects.
|
|
9
|
-
* This is automatically updated during releases via changesets.
|
|
10
|
-
*/
|
|
11
|
-
export declare const VELOXTS_VERSION = "0.3.1";
|
|
12
|
-
export interface ProjectTemplate {
|
|
13
|
-
projectName: string;
|
|
14
|
-
packageManager: 'npm' | 'pnpm' | 'yarn';
|
|
15
|
-
}
|
|
16
|
-
export declare function generatePackageJson(template: ProjectTemplate): string;
|
|
17
|
-
export declare function generateTsConfig(): string;
|
|
18
|
-
export declare function generateTsupConfig(): string;
|
|
19
|
-
export declare function generateEnvExample(): string;
|
|
20
|
-
export declare function generateGitignore(): string;
|
|
21
|
-
export declare function generatePrismaSchema(): string;
|
|
22
|
-
export declare function generatePrismaConfig(): string;
|
|
23
|
-
export declare function generateIndexTs(): string;
|
|
24
|
-
export declare function generateConfigIndex(): string;
|
|
25
|
-
export declare function generateConfigApp(): string;
|
|
26
|
-
export declare function generateDatabaseIndex(): string;
|
|
27
|
-
export declare function generateProceduresIndex(): string;
|
|
28
|
-
export declare function generateHealthProcedures(): string;
|
|
29
|
-
export declare function generateUserProcedures(): string;
|
|
30
|
-
export declare function generateSchemasIndex(): string;
|
|
31
|
-
export declare function generateUserSchema(): string;
|
|
32
|
-
export declare function generateIndexHtml(): string;
|
|
33
|
-
export declare function generateClaudeMd(projectName: string): string;
|
|
34
|
-
export declare function generateReadme(projectName: string): string;
|
|
35
|
-
//# sourceMappingURL=templates.d.ts.map
|
package/dist/templates.d.ts.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"templates.d.ts","sourceRoot":"","sources":["../src/templates.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAMH;;;GAGG;AACH,eAAO,MAAM,eAAe,UAAU,CAAC;AAMvC,MAAM,WAAW,eAAe;IAC9B,WAAW,EAAE,MAAM,CAAC;IACpB,cAAc,EAAE,KAAK,GAAG,MAAM,GAAG,MAAM,CAAC;CACzC;AAMD,wBAAgB,mBAAmB,CAAC,QAAQ,EAAE,eAAe,GAAG,MAAM,CAsCrE;AAMD,wBAAgB,gBAAgB,IAAI,MAAM,CA8BzC;AAMD,wBAAgB,kBAAkB,IAAI,MAAM,CAY3C;AAMD,wBAAgB,kBAAkB,IAAI,MAAM,CAe3C;AAED,wBAAgB,iBAAiB,IAAI,MAAM,CAoC1C;AAMD,wBAAgB,oBAAoB,IAAI,MAAM,CA8B7C;AAMD,wBAAgB,oBAAoB,IAAI,MAAM,CAmB7C;AAMD,wBAAgB,eAAe,IAAI,MAAM,CAqFxC;AAED,wBAAgB,mBAAmB,IAAI,MAAM,CAO5C;AAED,wBAAgB,iBAAiB,IAAI,MAAM,CAyB1C;AAED,wBAAgB,qBAAqB,IAAI,MAAM,CAwB9C;AAED,wBAAgB,uBAAuB,IAAI,MAAM,CAQhD;AAED,wBAAgB,wBAAwB,IAAI,MAAM,CA0BjD;AAED,wBAAgB,sBAAsB,IAAI,MAAM,CAyH/C;AAED,wBAAgB,oBAAoB,IAAI,MAAM,CAO7C;AAED,wBAAgB,kBAAkB,IAAI,MAAM,CA+B3C;AAED,wBAAgB,iBAAiB,IAAI,MAAM,CA8B1C;AAMD,wBAAgB,gBAAgB,CAAC,WAAW,EAAE,MAAM,GAAG,MAAM,CAuI5D;AAED,wBAAgB,cAAc,CAAC,WAAW,EAAE,MAAM,GAAG,MAAM,CAyD1D"}
|
package/dist/templates.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"templates.js","sourceRoot":"","sources":["../src/templates.ts"],"names":[],"mappings":"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"}
|