create-velox-app 0.6.27 → 0.6.29
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/CHANGELOG.md +12 -0
- package/dist/cli.js +74 -6
- package/dist/cli.js.map +1 -1
- package/dist/index.d.ts +2 -2
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +7 -7
- package/dist/index.js.map +1 -1
- package/dist/templates/auth.d.ts.map +1 -1
- package/dist/templates/auth.js +9 -8
- package/dist/templates/auth.js.map +1 -1
- package/dist/templates/compiler.js +1 -1
- package/dist/templates/compiler.js.map +1 -1
- package/dist/templates/placeholders.d.ts +25 -2
- package/dist/templates/placeholders.d.ts.map +1 -1
- package/dist/templates/placeholders.js +109 -3
- package/dist/templates/placeholders.js.map +1 -1
- package/dist/templates/rsc.d.ts.map +1 -1
- package/dist/templates/rsc.js +9 -8
- package/dist/templates/rsc.js.map +1 -1
- package/dist/templates/spa.d.ts.map +1 -1
- package/dist/templates/spa.js +9 -8
- package/dist/templates/spa.js.map +1 -1
- package/dist/templates/trpc.d.ts.map +1 -1
- package/dist/templates/trpc.js +9 -8
- package/dist/templates/trpc.js.map +1 -1
- package/dist/templates/types.d.ts.map +1 -1
- package/dist/templates/types.js +1 -2
- package/dist/templates/types.js.map +1 -1
- package/package.json +5 -2
- package/src/templates/source/api/config/database.ts +76 -0
- package/src/templates/source/api/env.auth +1 -4
- package/src/templates/source/api/env.default +1 -4
- package/src/templates/source/api/prisma/schema.auth.prisma +1 -2
- package/src/templates/source/api/prisma/schema.default.prisma +1 -2
- package/src/templates/source/api/procedures/auth.ts +2 -2
- package/src/templates/source/api/procedures/health.ts +2 -2
- package/src/templates/source/api/procedures/users.auth.ts +2 -2
- package/src/templates/source/api/procedures/users.default.ts +2 -8
- package/src/templates/source/root/.cursorrules +3 -3
- package/src/templates/source/root/CLAUDE.auth.md +2 -2
- package/src/templates/source/root/CLAUDE.default.md +2 -2
- package/src/templates/source/rsc/env.example +1 -1
- package/src/templates/source/rsc/prisma/schema.prisma +1 -1
- package/src/templates/source/rsc/src/api/database.ts +76 -0
- package/src/templates/source/rsc/src/api/procedures/health.ts +2 -2
- package/src/templates/source/rsc/src/api/procedures/posts.ts +2 -2
- package/src/templates/source/rsc/src/api/procedures/users.ts +2 -2
|
@@ -25,6 +25,10 @@ export const PLACEHOLDERS = {
|
|
|
25
25
|
API_PORT: '__API_PORT__',
|
|
26
26
|
/** Web dev server port (default: 8080) */
|
|
27
27
|
WEB_PORT: '__WEB_PORT__',
|
|
28
|
+
/** Database provider for Prisma schema (sqlite, postgresql) */
|
|
29
|
+
DATABASE_PROVIDER: '__DATABASE_PROVIDER__',
|
|
30
|
+
/** Database URL for .env files */
|
|
31
|
+
DATABASE_URL: '__DATABASE_URL__',
|
|
28
32
|
};
|
|
29
33
|
/**
|
|
30
34
|
* Default template configuration for templates that don't need real values.
|
|
@@ -76,6 +80,15 @@ export const RSC_CONFIG = {
|
|
|
76
80
|
function getRunCommand(packageManager) {
|
|
77
81
|
return packageManager === 'npm' ? 'npm run' : packageManager;
|
|
78
82
|
}
|
|
83
|
+
/**
|
|
84
|
+
* Get the default DATABASE_URL for the selected database.
|
|
85
|
+
*/
|
|
86
|
+
function getDatabaseUrl(database) {
|
|
87
|
+
if (database === 'postgresql') {
|
|
88
|
+
return 'postgresql://user:password@localhost:5432/myapp';
|
|
89
|
+
}
|
|
90
|
+
return 'file:./dev.db';
|
|
91
|
+
}
|
|
79
92
|
/**
|
|
80
93
|
* Apply placeholder replacements to template content.
|
|
81
94
|
*
|
|
@@ -94,6 +107,8 @@ export function applyPlaceholders(content, config) {
|
|
|
94
107
|
[PLACEHOLDERS.RUN_CMD]: getRunCommand(config.packageManager),
|
|
95
108
|
[PLACEHOLDERS.API_PORT]: '3030',
|
|
96
109
|
[PLACEHOLDERS.WEB_PORT]: '8080',
|
|
110
|
+
[PLACEHOLDERS.DATABASE_PROVIDER]: config.database,
|
|
111
|
+
[PLACEHOLDERS.DATABASE_URL]: getDatabaseUrl(config.database),
|
|
97
112
|
};
|
|
98
113
|
let result = content;
|
|
99
114
|
for (const [placeholder, value] of Object.entries(replacements)) {
|
|
@@ -108,6 +123,45 @@ export function applyPlaceholdersToJson(content, config) {
|
|
|
108
123
|
const jsonString = JSON.stringify(content, null, 2);
|
|
109
124
|
return applyPlaceholders(jsonString, config);
|
|
110
125
|
}
|
|
126
|
+
// Database adapter versions
|
|
127
|
+
const PRISMA_VERSION = '7.2.0';
|
|
128
|
+
const PG_VERSION = '8.16.0';
|
|
129
|
+
/**
|
|
130
|
+
* Apply database-specific dependency modifications to package.json content.
|
|
131
|
+
*
|
|
132
|
+
* - SQLite: Uses @prisma/adapter-better-sqlite3, better-sqlite3
|
|
133
|
+
* - PostgreSQL: Uses @prisma/adapter-pg, pg, @types/pg
|
|
134
|
+
*
|
|
135
|
+
* @param content - Raw package.json content string
|
|
136
|
+
* @param config - Template configuration with database choice
|
|
137
|
+
* @returns Modified package.json string with correct database dependencies
|
|
138
|
+
*/
|
|
139
|
+
export function applyDatabaseDependencies(content, config) {
|
|
140
|
+
const pkg = JSON.parse(content);
|
|
141
|
+
if (config.database === 'postgresql') {
|
|
142
|
+
// Remove SQLite dependencies
|
|
143
|
+
if (pkg.dependencies) {
|
|
144
|
+
delete pkg.dependencies['@prisma/adapter-better-sqlite3'];
|
|
145
|
+
delete pkg.dependencies['better-sqlite3'];
|
|
146
|
+
}
|
|
147
|
+
// Add PostgreSQL dependencies
|
|
148
|
+
pkg.dependencies = pkg.dependencies ?? {};
|
|
149
|
+
pkg.dependencies['@prisma/adapter-pg'] = PRISMA_VERSION;
|
|
150
|
+
pkg.dependencies.pg = PG_VERSION;
|
|
151
|
+
// Add @types/pg to devDependencies
|
|
152
|
+
pkg.devDependencies = pkg.devDependencies ?? {};
|
|
153
|
+
pkg.devDependencies['@types/pg'] = PG_VERSION;
|
|
154
|
+
// Sort dependencies alphabetically
|
|
155
|
+
if (pkg.dependencies) {
|
|
156
|
+
pkg.dependencies = Object.fromEntries(Object.entries(pkg.dependencies).sort(([a], [b]) => a.localeCompare(b)));
|
|
157
|
+
}
|
|
158
|
+
if (pkg.devDependencies) {
|
|
159
|
+
pkg.devDependencies = Object.fromEntries(Object.entries(pkg.devDependencies).sort(([a], [b]) => a.localeCompare(b)));
|
|
160
|
+
}
|
|
161
|
+
}
|
|
162
|
+
// SQLite is already the default in the source files, no changes needed
|
|
163
|
+
return JSON.stringify(pkg, null, 2);
|
|
164
|
+
}
|
|
111
165
|
// ============================================================================
|
|
112
166
|
// Conditional Content
|
|
113
167
|
// ============================================================================
|
|
@@ -122,15 +176,26 @@ function escapeRegex(str) {
|
|
|
122
176
|
* Use these in source files to mark sections that should only appear in certain templates.
|
|
123
177
|
*/
|
|
124
178
|
export const CONDITIONALS = {
|
|
179
|
+
// Template conditionals
|
|
125
180
|
AUTH_START: '/* @if auth */',
|
|
126
181
|
AUTH_END: '/* @endif auth */',
|
|
127
182
|
DEFAULT_START: '/* @if default */',
|
|
128
183
|
DEFAULT_END: '/* @endif default */',
|
|
129
|
-
// JSX-style conditionals (wrapped in braces)
|
|
184
|
+
// JSX-style template conditionals (wrapped in braces)
|
|
130
185
|
JSX_AUTH_START: '{/* @if auth */}',
|
|
131
186
|
JSX_AUTH_END: '{/* @endif auth */}',
|
|
132
187
|
JSX_DEFAULT_START: '{/* @if default */}',
|
|
133
188
|
JSX_DEFAULT_END: '{/* @endif default */}',
|
|
189
|
+
// Database conditionals
|
|
190
|
+
SQLITE_START: '/* @if sqlite */',
|
|
191
|
+
SQLITE_END: '/* @endif sqlite */',
|
|
192
|
+
POSTGRESQL_START: '/* @if postgresql */',
|
|
193
|
+
POSTGRESQL_END: '/* @endif postgresql */',
|
|
194
|
+
// JSX-style database conditionals
|
|
195
|
+
JSX_SQLITE_START: '{/* @if sqlite */}',
|
|
196
|
+
JSX_SQLITE_END: '{/* @endif sqlite */}',
|
|
197
|
+
JSX_POSTGRESQL_START: '{/* @if postgresql */}',
|
|
198
|
+
JSX_POSTGRESQL_END: '{/* @endif postgresql */}',
|
|
134
199
|
};
|
|
135
200
|
/** Pre-compiled regex for auth conditional blocks (performance optimization) */
|
|
136
201
|
const AUTH_BLOCK_PATTERN = new RegExp(`${escapeRegex(CONDITIONALS.AUTH_START)}[\\s\\S]*?${escapeRegex(CONDITIONALS.AUTH_END)}`, 'g');
|
|
@@ -140,15 +205,27 @@ const DEFAULT_BLOCK_PATTERN = new RegExp(`${escapeRegex(CONDITIONALS.DEFAULT_STA
|
|
|
140
205
|
const JSX_AUTH_BLOCK_PATTERN = new RegExp(`${escapeRegex(CONDITIONALS.JSX_AUTH_START)}[\\s\\S]*?${escapeRegex(CONDITIONALS.JSX_AUTH_END)}`, 'g');
|
|
141
206
|
/** Pre-compiled regex for JSX default conditional blocks */
|
|
142
207
|
const JSX_DEFAULT_BLOCK_PATTERN = new RegExp(`${escapeRegex(CONDITIONALS.JSX_DEFAULT_START)}[\\s\\S]*?${escapeRegex(CONDITIONALS.JSX_DEFAULT_END)}`, 'g');
|
|
208
|
+
/** Pre-compiled regex for sqlite conditional blocks */
|
|
209
|
+
const SQLITE_BLOCK_PATTERN = new RegExp(`${escapeRegex(CONDITIONALS.SQLITE_START)}[\\s\\S]*?${escapeRegex(CONDITIONALS.SQLITE_END)}`, 'g');
|
|
210
|
+
/** Pre-compiled regex for postgresql conditional blocks */
|
|
211
|
+
const POSTGRESQL_BLOCK_PATTERN = new RegExp(`${escapeRegex(CONDITIONALS.POSTGRESQL_START)}[\\s\\S]*?${escapeRegex(CONDITIONALS.POSTGRESQL_END)}`, 'g');
|
|
212
|
+
/** Pre-compiled regex for JSX sqlite conditional blocks */
|
|
213
|
+
const JSX_SQLITE_BLOCK_PATTERN = new RegExp(`${escapeRegex(CONDITIONALS.JSX_SQLITE_START)}[\\s\\S]*?${escapeRegex(CONDITIONALS.JSX_SQLITE_END)}`, 'g');
|
|
214
|
+
/** Pre-compiled regex for JSX postgresql conditional blocks */
|
|
215
|
+
const JSX_POSTGRESQL_BLOCK_PATTERN = new RegExp(`${escapeRegex(CONDITIONALS.JSX_POSTGRESQL_START)}[\\s\\S]*?${escapeRegex(CONDITIONALS.JSX_POSTGRESQL_END)}`, 'g');
|
|
143
216
|
/**
|
|
144
217
|
* Process conditional blocks in template content.
|
|
145
218
|
*
|
|
146
219
|
* @param content - Template content with conditional blocks
|
|
147
|
-
* @param
|
|
220
|
+
* @param config - Template configuration (template type and database)
|
|
148
221
|
* @returns Content with appropriate blocks included/removed
|
|
149
222
|
*/
|
|
150
|
-
export function processConditionals(content,
|
|
223
|
+
export function processConditionals(content, config) {
|
|
151
224
|
let result = content;
|
|
225
|
+
const { template, database } = config;
|
|
226
|
+
// =========================================================================
|
|
227
|
+
// Template conditionals
|
|
228
|
+
// =========================================================================
|
|
152
229
|
// Process auth conditionals (both JS and JSX style)
|
|
153
230
|
if (template === 'auth') {
|
|
154
231
|
// Keep auth content but remove markers
|
|
@@ -176,6 +253,35 @@ export function processConditionals(content, template) {
|
|
|
176
253
|
result = result.replace(DEFAULT_BLOCK_PATTERN, '');
|
|
177
254
|
result = result.replace(JSX_DEFAULT_BLOCK_PATTERN, '');
|
|
178
255
|
}
|
|
256
|
+
// =========================================================================
|
|
257
|
+
// Database conditionals
|
|
258
|
+
// =========================================================================
|
|
259
|
+
// Process sqlite conditionals
|
|
260
|
+
if (database === 'sqlite') {
|
|
261
|
+
// Keep sqlite content but remove markers
|
|
262
|
+
result = result.replaceAll(CONDITIONALS.SQLITE_START, '');
|
|
263
|
+
result = result.replaceAll(CONDITIONALS.SQLITE_END, '');
|
|
264
|
+
result = result.replaceAll(CONDITIONALS.JSX_SQLITE_START, '');
|
|
265
|
+
result = result.replaceAll(CONDITIONALS.JSX_SQLITE_END, '');
|
|
266
|
+
}
|
|
267
|
+
else {
|
|
268
|
+
// Remove entire sqlite blocks
|
|
269
|
+
result = result.replace(SQLITE_BLOCK_PATTERN, '');
|
|
270
|
+
result = result.replace(JSX_SQLITE_BLOCK_PATTERN, '');
|
|
271
|
+
}
|
|
272
|
+
// Process postgresql conditionals
|
|
273
|
+
if (database === 'postgresql') {
|
|
274
|
+
// Keep postgresql content but remove markers
|
|
275
|
+
result = result.replaceAll(CONDITIONALS.POSTGRESQL_START, '');
|
|
276
|
+
result = result.replaceAll(CONDITIONALS.POSTGRESQL_END, '');
|
|
277
|
+
result = result.replaceAll(CONDITIONALS.JSX_POSTGRESQL_START, '');
|
|
278
|
+
result = result.replaceAll(CONDITIONALS.JSX_POSTGRESQL_END, '');
|
|
279
|
+
}
|
|
280
|
+
else {
|
|
281
|
+
// Remove entire postgresql blocks
|
|
282
|
+
result = result.replace(POSTGRESQL_BLOCK_PATTERN, '');
|
|
283
|
+
result = result.replace(JSX_POSTGRESQL_BLOCK_PATTERN, '');
|
|
284
|
+
}
|
|
179
285
|
return result;
|
|
180
286
|
}
|
|
181
287
|
//# sourceMappingURL=placeholders.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"placeholders.js","sourceRoot":"","sources":["../../src/templates/placeholders.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAG9C,+EAA+E;AAC/E,0BAA0B;AAC1B,+EAA+E;AAE/E;;;GAGG;AACH,MAAM,CAAC,MAAM,YAAY,GAAG;IAC1B,kDAAkD;IAClD,YAAY,EAAE,kBAAkB;IAChC,+CAA+C;IAC/C,eAAe,EAAE,qBAAqB;IACtC,wCAAwC;IACxC,eAAe,EAAE,qBAAqB;IACtC,wDAAwD;IACxD,OAAO,EAAE,aAAa;IACtB,sCAAsC;IACtC,QAAQ,EAAE,cAAc;IACxB,0CAA0C;IAC1C,QAAQ,EAAE,cAAc;
|
|
1
|
+
{"version":3,"file":"placeholders.js","sourceRoot":"","sources":["../../src/templates/placeholders.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"rsc.d.ts","sourceRoot":"","sources":["../../src/templates/rsc.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAIH,OAAO,KAAK,EAAE,cAAc,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;
|
|
1
|
+
{"version":3,"file":"rsc.d.ts","sourceRoot":"","sources":["../../src/templates/rsc.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAIH,OAAO,KAAK,EAAE,cAAc,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAsK/D,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,cAAc,GAAG,YAAY,EAAE,CA8D1E"}
|
package/dist/templates/rsc.js
CHANGED
|
@@ -11,12 +11,13 @@
|
|
|
11
11
|
* This is a single-package structure (not a monorepo workspace).
|
|
12
12
|
*/
|
|
13
13
|
import { compileTemplate } from './compiler.js';
|
|
14
|
-
import { RSC_CONFIG } from './placeholders.js';
|
|
14
|
+
import { applyDatabaseDependencies, RSC_CONFIG } from './placeholders.js';
|
|
15
15
|
// ============================================================================
|
|
16
16
|
// Template Compilation
|
|
17
17
|
// ============================================================================
|
|
18
18
|
function generatePackageJson(config) {
|
|
19
|
-
|
|
19
|
+
const content = compileTemplate('rsc/package.json', config);
|
|
20
|
+
return applyDatabaseDependencies(content, config);
|
|
20
21
|
}
|
|
21
22
|
function generateAppConfig() {
|
|
22
23
|
return compileTemplate('rsc/app.config.ts', RSC_CONFIG);
|
|
@@ -34,8 +35,8 @@ function generateClaudeMd(config) {
|
|
|
34
35
|
return compileTemplate('rsc/CLAUDE.md', config);
|
|
35
36
|
}
|
|
36
37
|
// Prisma
|
|
37
|
-
function generatePrismaSchema() {
|
|
38
|
-
return compileTemplate('rsc/prisma/schema.prisma',
|
|
38
|
+
function generatePrismaSchema(config) {
|
|
39
|
+
return compileTemplate('rsc/prisma/schema.prisma', config);
|
|
39
40
|
}
|
|
40
41
|
function generatePrismaConfig() {
|
|
41
42
|
return compileTemplate('rsc/prisma.config.ts', RSC_CONFIG);
|
|
@@ -112,8 +113,8 @@ function generateEntryServer() {
|
|
|
112
113
|
function generateApiHandler() {
|
|
113
114
|
return compileTemplate('rsc/src/api/handler.ts', RSC_CONFIG);
|
|
114
115
|
}
|
|
115
|
-
function generateDatabase() {
|
|
116
|
-
return compileTemplate('rsc/src/api/database.ts',
|
|
116
|
+
function generateDatabase(config) {
|
|
117
|
+
return compileTemplate('rsc/src/api/database.ts', config);
|
|
117
118
|
}
|
|
118
119
|
function generateHealthProcedures() {
|
|
119
120
|
return compileTemplate('rsc/src/api/procedures/health.ts', RSC_CONFIG);
|
|
@@ -147,7 +148,7 @@ export function generateRscTemplate(config) {
|
|
|
147
148
|
{ path: '.gitignore', content: generateGitignore() },
|
|
148
149
|
{ path: 'CLAUDE.md', content: generateClaudeMd(config) },
|
|
149
150
|
// Prisma
|
|
150
|
-
{ path: 'prisma/schema.prisma', content: generatePrismaSchema() },
|
|
151
|
+
{ path: 'prisma/schema.prisma', content: generatePrismaSchema(config) },
|
|
151
152
|
{ path: 'prisma.config.ts', content: generatePrismaConfig() },
|
|
152
153
|
// App layer (RSC) - Basic pages
|
|
153
154
|
{ path: 'app/pages/index.tsx', content: generateHomePage() },
|
|
@@ -179,7 +180,7 @@ export function generateRscTemplate(config) {
|
|
|
179
180
|
{ path: 'src/entry.server.tsx', content: generateEntryServer() },
|
|
180
181
|
// Source layer - API
|
|
181
182
|
{ path: 'src/api/handler.ts', content: generateApiHandler() },
|
|
182
|
-
{ path: 'src/api/database.ts', content: generateDatabase() },
|
|
183
|
+
{ path: 'src/api/database.ts', content: generateDatabase(config) },
|
|
183
184
|
{ path: 'src/api/procedures/health.ts', content: generateHealthProcedures() },
|
|
184
185
|
{ path: 'src/api/procedures/users.ts', content: generateUserProcedures() },
|
|
185
186
|
{ path: 'src/api/procedures/posts.ts', content: generatePostProcedures() },
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"rsc.js","sourceRoot":"","sources":["../../src/templates/rsc.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,OAAO,EAAE,eAAe,EAAE,MAAM,eAAe,CAAC;AAChD,OAAO,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;
|
|
1
|
+
{"version":3,"file":"rsc.js","sourceRoot":"","sources":["../../src/templates/rsc.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"spa.d.ts","sourceRoot":"","sources":["../../src/templates/spa.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAKH,OAAO,KAAK,EAAE,cAAc,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;
|
|
1
|
+
{"version":3,"file":"spa.d.ts","sourceRoot":"","sources":["../../src/templates/spa.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAKH,OAAO,KAAK,EAAE,cAAc,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AA+E/D,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,cAAc,GAAG,YAAY,EAAE,CAmC1E"}
|
package/dist/templates/spa.js
CHANGED
|
@@ -8,13 +8,14 @@
|
|
|
8
8
|
* No authentication - suitable for internal APIs or as a starting point.
|
|
9
9
|
*/
|
|
10
10
|
import { compileTemplate } from './compiler.js';
|
|
11
|
-
import { DEFAULT_CONFIG } from './placeholders.js';
|
|
11
|
+
import { applyDatabaseDependencies, DEFAULT_CONFIG } from './placeholders.js';
|
|
12
12
|
import { generateRootFiles, generateWebBaseFiles, generateWebStyleFiles } from './shared/index.js';
|
|
13
13
|
// ============================================================================
|
|
14
14
|
// API Template Compilation
|
|
15
15
|
// ============================================================================
|
|
16
16
|
function generateApiPackageJson(config) {
|
|
17
|
-
|
|
17
|
+
const content = compileTemplate('api/package.default.json', config);
|
|
18
|
+
return applyDatabaseDependencies(content, config);
|
|
18
19
|
}
|
|
19
20
|
function generateApiTsConfig() {
|
|
20
21
|
return compileTemplate('api/tsconfig.json', DEFAULT_CONFIG);
|
|
@@ -25,8 +26,8 @@ function generateApiTsupConfig() {
|
|
|
25
26
|
function generateEnvExample(config) {
|
|
26
27
|
return compileTemplate('api/env.default', config);
|
|
27
28
|
}
|
|
28
|
-
function generatePrismaSchema() {
|
|
29
|
-
return compileTemplate('api/prisma/schema.default.prisma',
|
|
29
|
+
function generatePrismaSchema(config) {
|
|
30
|
+
return compileTemplate('api/prisma/schema.default.prisma', config);
|
|
30
31
|
}
|
|
31
32
|
function generatePrismaConfig() {
|
|
32
33
|
return compileTemplate('api/prisma.config.ts', DEFAULT_CONFIG);
|
|
@@ -43,8 +44,8 @@ function generateIndexTs() {
|
|
|
43
44
|
function generateConfigApp(config) {
|
|
44
45
|
return compileTemplate('api/config/app.ts', config);
|
|
45
46
|
}
|
|
46
|
-
function generateConfigDatabase() {
|
|
47
|
-
return compileTemplate('api/config/database.ts',
|
|
47
|
+
function generateConfigDatabase(config) {
|
|
48
|
+
return compileTemplate('api/config/database.ts', config);
|
|
48
49
|
}
|
|
49
50
|
function generateHealthProcedures() {
|
|
50
51
|
return compileTemplate('api/procedures/health.ts', DEFAULT_CONFIG);
|
|
@@ -77,13 +78,13 @@ export function generateSpaTemplate(config) {
|
|
|
77
78
|
{ path: 'apps/api/.env.example', content: generateEnvExample(config) },
|
|
78
79
|
{ path: 'apps/api/.env', content: generateEnvExample(config) },
|
|
79
80
|
// Prisma
|
|
80
|
-
{ path: 'apps/api/prisma/schema.prisma', content: generatePrismaSchema() },
|
|
81
|
+
{ path: 'apps/api/prisma/schema.prisma', content: generatePrismaSchema(config) },
|
|
81
82
|
// API Source files
|
|
82
83
|
{ path: 'apps/api/src/router.ts', content: generateRouterTs() },
|
|
83
84
|
{ path: 'apps/api/src/router.types.ts', content: generateRouterTypesTs() },
|
|
84
85
|
{ path: 'apps/api/src/index.ts', content: generateIndexTs() },
|
|
85
86
|
{ path: 'apps/api/src/config/app.ts', content: generateConfigApp(config) },
|
|
86
|
-
{ path: 'apps/api/src/config/database.ts', content: generateConfigDatabase() },
|
|
87
|
+
{ path: 'apps/api/src/config/database.ts', content: generateConfigDatabase(config) },
|
|
87
88
|
{ path: 'apps/api/src/procedures/health.ts', content: generateHealthProcedures() },
|
|
88
89
|
{ path: 'apps/api/src/procedures/users.ts', content: generateUserProcedures() },
|
|
89
90
|
{ path: 'apps/api/src/schemas/user.ts', content: generateUserSchema() },
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"spa.js","sourceRoot":"","sources":["../../src/templates/spa.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,EAAE,eAAe,EAAE,MAAM,eAAe,CAAC;AAChD,OAAO,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;
|
|
1
|
+
{"version":3,"file":"spa.js","sourceRoot":"","sources":["../../src/templates/spa.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,EAAE,eAAe,EAAE,MAAM,eAAe,CAAC;AAChD,OAAO,EAAE,yBAAyB,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AAC9E,OAAO,EAAE,iBAAiB,EAAE,oBAAoB,EAAE,qBAAqB,EAAE,MAAM,mBAAmB,CAAC;AAGnG,+EAA+E;AAC/E,2BAA2B;AAC3B,+EAA+E;AAE/E,SAAS,sBAAsB,CAAC,MAAsB;IACpD,MAAM,OAAO,GAAG,eAAe,CAAC,0BAA0B,EAAE,MAAM,CAAC,CAAC;IACpE,OAAO,yBAAyB,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;AACpD,CAAC;AAED,SAAS,mBAAmB;IAC1B,OAAO,eAAe,CAAC,mBAAmB,EAAE,cAAc,CAAC,CAAC;AAC9D,CAAC;AAED,SAAS,qBAAqB;IAC5B,OAAO,eAAe,CAAC,oBAAoB,EAAE,cAAc,CAAC,CAAC;AAC/D,CAAC;AAED,SAAS,kBAAkB,CAAC,MAAsB;IAChD,OAAO,eAAe,CAAC,iBAAiB,EAAE,MAAM,CAAC,CAAC;AACpD,CAAC;AAED,SAAS,oBAAoB,CAAC,MAAsB;IAClD,OAAO,eAAe,CAAC,kCAAkC,EAAE,MAAM,CAAC,CAAC;AACrE,CAAC;AAED,SAAS,oBAAoB;IAC3B,OAAO,eAAe,CAAC,sBAAsB,EAAE,cAAc,CAAC,CAAC;AACjE,CAAC;AAED,SAAS,gBAAgB;IACvB,OAAO,eAAe,CAAC,uBAAuB,EAAE,cAAc,CAAC,CAAC;AAClE,CAAC;AAED,SAAS,qBAAqB;IAC5B,OAAO,eAAe,CAAC,6BAA6B,EAAE,cAAc,CAAC,CAAC;AACxE,CAAC;AAED,SAAS,eAAe;IACtB,OAAO,eAAe,CAAC,sBAAsB,EAAE,cAAc,CAAC,CAAC;AACjE,CAAC;AAED,SAAS,iBAAiB,CAAC,MAAsB;IAC/C,OAAO,eAAe,CAAC,mBAAmB,EAAE,MAAM,CAAC,CAAC;AACtD,CAAC;AAED,SAAS,sBAAsB,CAAC,MAAsB;IACpD,OAAO,eAAe,CAAC,wBAAwB,EAAE,MAAM,CAAC,CAAC;AAC3D,CAAC;AAED,SAAS,wBAAwB;IAC/B,OAAO,eAAe,CAAC,0BAA0B,EAAE,cAAc,CAAC,CAAC;AACrE,CAAC;AAED,SAAS,sBAAsB;IAC7B,OAAO,eAAe,CAAC,iCAAiC,EAAE,cAAc,CAAC,CAAC;AAC5E,CAAC;AAED,SAAS,kBAAkB;IACzB,OAAO,eAAe,CAAC,qBAAqB,EAAE,cAAc,CAAC,CAAC;AAChE,CAAC;AAED,SAAS,oBAAoB;IAC3B,OAAO,eAAe,CAAC,uBAAuB,EAAE,cAAc,CAAC,CAAC;AAClE,CAAC;AAED,SAAS,cAAc;IACrB,OAAO,eAAe,CAAC,uBAAuB,EAAE,cAAc,CAAC,CAAC;AAClE,CAAC;AAED,SAAS,mBAAmB;IAC1B,OAAO,eAAe,CAAC,gBAAgB,EAAE,cAAc,CAAC,CAAC;AAC3D,CAAC;AAED,+EAA+E;AAC/E,yBAAyB;AACzB,+EAA+E;AAE/E,MAAM,UAAU,mBAAmB,CAAC,MAAsB;IACxD,MAAM,KAAK,GAAmB;QAC5B,oBAAoB;QACpB,EAAE,IAAI,EAAE,uBAAuB,EAAE,OAAO,EAAE,sBAAsB,CAAC,MAAM,CAAC,EAAE;QAC1E,EAAE,IAAI,EAAE,wBAAwB,EAAE,OAAO,EAAE,mBAAmB,EAAE,EAAE;QAClE,EAAE,IAAI,EAAE,yBAAyB,EAAE,OAAO,EAAE,qBAAqB,EAAE,EAAE;QACrE,EAAE,IAAI,EAAE,2BAA2B,EAAE,OAAO,EAAE,oBAAoB,EAAE,EAAE;QACtE,EAAE,IAAI,EAAE,uBAAuB,EAAE,OAAO,EAAE,kBAAkB,CAAC,MAAM,CAAC,EAAE;QACtE,EAAE,IAAI,EAAE,eAAe,EAAE,OAAO,EAAE,kBAAkB,CAAC,MAAM,CAAC,EAAE;QAE9D,SAAS;QACT,EAAE,IAAI,EAAE,+BAA+B,EAAE,OAAO,EAAE,oBAAoB,CAAC,MAAM,CAAC,EAAE;QAEhF,mBAAmB;QACnB,EAAE,IAAI,EAAE,wBAAwB,EAAE,OAAO,EAAE,gBAAgB,EAAE,EAAE;QAC/D,EAAE,IAAI,EAAE,8BAA8B,EAAE,OAAO,EAAE,qBAAqB,EAAE,EAAE;QAC1E,EAAE,IAAI,EAAE,uBAAuB,EAAE,OAAO,EAAE,eAAe,EAAE,EAAE;QAC7D,EAAE,IAAI,EAAE,4BAA4B,EAAE,OAAO,EAAE,iBAAiB,CAAC,MAAM,CAAC,EAAE;QAC1E,EAAE,IAAI,EAAE,iCAAiC,EAAE,OAAO,EAAE,sBAAsB,CAAC,MAAM,CAAC,EAAE;QACpF,EAAE,IAAI,EAAE,mCAAmC,EAAE,OAAO,EAAE,wBAAwB,EAAE,EAAE;QAClF,EAAE,IAAI,EAAE,kCAAkC,EAAE,OAAO,EAAE,sBAAsB,EAAE,EAAE;QAC/E,EAAE,IAAI,EAAE,8BAA8B,EAAE,OAAO,EAAE,kBAAkB,EAAE,EAAE;QACvE,EAAE,IAAI,EAAE,gCAAgC,EAAE,OAAO,EAAE,oBAAoB,EAAE,EAAE;QAC3E,EAAE,IAAI,EAAE,wBAAwB,EAAE,OAAO,EAAE,cAAc,EAAE,EAAE;QAC7D,EAAE,IAAI,EAAE,yBAAyB,EAAE,OAAO,EAAE,mBAAmB,EAAE,EAAE;KACpE,CAAC;IAEF,2BAA2B;IAC3B,MAAM,SAAS,GAAG,iBAAiB,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;IAEnD,wBAAwB;IACxB,MAAM,YAAY,GAAG,oBAAoB,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;IACzD,MAAM,aAAa,GAAG,qBAAqB,EAAE,CAAC;IAE9C,OAAO,CAAC,GAAG,KAAK,EAAE,GAAG,SAAS,EAAE,GAAG,YAAY,EAAE,GAAG,aAAa,CAAC,CAAC;AACrE,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"trpc.d.ts","sourceRoot":"","sources":["../../src/templates/trpc.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAKH,OAAO,KAAK,EAAE,cAAc,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;
|
|
1
|
+
{"version":3,"file":"trpc.d.ts","sourceRoot":"","sources":["../../src/templates/trpc.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAKH,OAAO,KAAK,EAAE,cAAc,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAoF/D,wBAAgB,oBAAoB,CAAC,MAAM,EAAE,cAAc,GAAG,YAAY,EAAE,CAmC3E"}
|
package/dist/templates/trpc.js
CHANGED
|
@@ -11,14 +11,15 @@
|
|
|
11
11
|
* - End-to-end type safety without code generation
|
|
12
12
|
*/
|
|
13
13
|
import { compileTemplate } from './compiler.js';
|
|
14
|
-
import { DEFAULT_CONFIG, TRPC_CONFIG } from './placeholders.js';
|
|
14
|
+
import { applyDatabaseDependencies, DEFAULT_CONFIG, TRPC_CONFIG } from './placeholders.js';
|
|
15
15
|
import { generateRootFiles, generateWebBaseFiles, generateWebStyleFiles } from './shared/index.js';
|
|
16
16
|
// ============================================================================
|
|
17
17
|
// API Template Compilation
|
|
18
18
|
// ============================================================================
|
|
19
19
|
function generateApiPackageJson(config) {
|
|
20
20
|
// Reuse default package.json - @veloxts/velox already includes tRPC utilities
|
|
21
|
-
|
|
21
|
+
const content = compileTemplate('api/package.default.json', config);
|
|
22
|
+
return applyDatabaseDependencies(content, config);
|
|
22
23
|
}
|
|
23
24
|
function generateApiTsConfig() {
|
|
24
25
|
return compileTemplate('api/tsconfig.json', DEFAULT_CONFIG);
|
|
@@ -30,9 +31,9 @@ function generateEnvExample(config) {
|
|
|
30
31
|
// Reuse default env - same environment variables
|
|
31
32
|
return compileTemplate('api/env.default', config);
|
|
32
33
|
}
|
|
33
|
-
function generatePrismaSchema() {
|
|
34
|
+
function generatePrismaSchema(config) {
|
|
34
35
|
// Reuse default schema - same data model
|
|
35
|
-
return compileTemplate('api/prisma/schema.default.prisma',
|
|
36
|
+
return compileTemplate('api/prisma/schema.default.prisma', config);
|
|
36
37
|
}
|
|
37
38
|
function generatePrismaConfig() {
|
|
38
39
|
return compileTemplate('api/prisma.config.ts', DEFAULT_CONFIG);
|
|
@@ -50,8 +51,8 @@ function generateIndexTs() {
|
|
|
50
51
|
function generateConfigApp(config) {
|
|
51
52
|
return compileTemplate('api/config/app.ts', config);
|
|
52
53
|
}
|
|
53
|
-
function generateConfigDatabase() {
|
|
54
|
-
return compileTemplate('api/config/database.ts',
|
|
54
|
+
function generateConfigDatabase(config) {
|
|
55
|
+
return compileTemplate('api/config/database.ts', config);
|
|
55
56
|
}
|
|
56
57
|
function generateHealthProcedures() {
|
|
57
58
|
return compileTemplate('api/procedures/health.ts', DEFAULT_CONFIG);
|
|
@@ -85,13 +86,13 @@ export function generateTrpcTemplate(config) {
|
|
|
85
86
|
{ path: 'apps/api/.env.example', content: generateEnvExample(config) },
|
|
86
87
|
{ path: 'apps/api/.env', content: generateEnvExample(config) },
|
|
87
88
|
// Prisma
|
|
88
|
-
{ path: 'apps/api/prisma/schema.prisma', content: generatePrismaSchema() },
|
|
89
|
+
{ path: 'apps/api/prisma/schema.prisma', content: generatePrismaSchema(config) },
|
|
89
90
|
// API Source files
|
|
90
91
|
{ path: 'apps/api/src/router.ts', content: generateRouterTs() },
|
|
91
92
|
{ path: 'apps/api/src/router.types.ts', content: generateRouterTypesTs() },
|
|
92
93
|
{ path: 'apps/api/src/index.ts', content: generateIndexTs() },
|
|
93
94
|
{ path: 'apps/api/src/config/app.ts', content: generateConfigApp(config) },
|
|
94
|
-
{ path: 'apps/api/src/config/database.ts', content: generateConfigDatabase() },
|
|
95
|
+
{ path: 'apps/api/src/config/database.ts', content: generateConfigDatabase(config) },
|
|
95
96
|
{ path: 'apps/api/src/procedures/health.ts', content: generateHealthProcedures() },
|
|
96
97
|
{ path: 'apps/api/src/procedures/users.ts', content: generateUserProcedures() },
|
|
97
98
|
{ path: 'apps/api/src/schemas/user.ts', content: generateUserSchema() },
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"trpc.js","sourceRoot":"","sources":["../../src/templates/trpc.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,OAAO,EAAE,eAAe,EAAE,MAAM,eAAe,CAAC;AAChD,OAAO,EAAE,cAAc,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;
|
|
1
|
+
{"version":3,"file":"trpc.js","sourceRoot":"","sources":["../../src/templates/trpc.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/templates/types.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAMH;;;;;;;GAOG;AACH,MAAM,MAAM,YAAY,GAAG,KAAK,GAAG,MAAM,GAAG,MAAM,GAAG,KAAK,CAAC;AAE3D;;GAEG;AACH,eAAO,MAAM,gBAAgB,EAAE,MAAM,CAAC,MAAM,EAAE,YAAY,CAGzD,CAAC;AAEF;;GAEG;AACH,wBAAgB,oBAAoB,CAAC,QAAQ,EAAE,MAAM,GAAG,YAAY,GAAG,SAAS,CAQ/E;AAED;;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,
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/templates/types.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAMH;;;;;;;GAOG;AACH,MAAM,MAAM,YAAY,GAAG,KAAK,GAAG,MAAM,GAAG,MAAM,GAAG,KAAK,CAAC;AAE3D;;GAEG;AACH,eAAO,MAAM,gBAAgB,EAAE,MAAM,CAAC,MAAM,EAAE,YAAY,CAGzD,CAAC;AAEF;;GAEG;AACH,wBAAgB,oBAAoB,CAAC,QAAQ,EAAE,MAAM,GAAG,YAAY,GAAG,SAAS,CAQ/E;AAED;;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,CAiBpE,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,CAyBpE,CAAC;AAEF;;GAEG;AACH,wBAAgB,qBAAqB,IAAI,gBAAgB,EAAE,CAE1D;AAED;;GAEG;AACH,wBAAgB,eAAe,CAAC,QAAQ,EAAE,MAAM,GAAG,QAAQ,IAAI,YAAY,CAE1E"}
|
package/dist/templates/types.js
CHANGED
|
@@ -34,8 +34,7 @@ export const DATABASE_METADATA = {
|
|
|
34
34
|
postgresql: {
|
|
35
35
|
type: 'postgresql',
|
|
36
36
|
label: 'PostgreSQL',
|
|
37
|
-
hint: '
|
|
38
|
-
disabled: true,
|
|
37
|
+
hint: 'Production-ready, requires running PostgreSQL server',
|
|
39
38
|
},
|
|
40
39
|
mysql: {
|
|
41
40
|
type: 'mysql',
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/templates/types.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAgBH;;GAEG;AACH,MAAM,CAAC,MAAM,gBAAgB,GAAiC;IAC5D,OAAO,EAAE,KAAK;IACd,SAAS,EAAE,KAAK;CACjB,CAAC;AAEF;;GAEG;AACH,MAAM,UAAU,oBAAoB,CAAC,QAAgB;IACnD,IAAI,QAAQ,IAAI,gBAAgB,EAAE,CAAC;QACjC,OAAO,gBAAgB,CAAC,QAAQ,CAAC,CAAC;IACpC,CAAC;IACD,IAAI,eAAe,CAAC,QAAQ,CAAC,EAAE,CAAC;QAC9B,OAAO,QAAwB,CAAC;IAClC,CAAC;IACD,OAAO,SAAS,CAAC;AACnB,CAAC;AAiBD;;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,
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/templates/types.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAgBH;;GAEG;AACH,MAAM,CAAC,MAAM,gBAAgB,GAAiC;IAC5D,OAAO,EAAE,KAAK;IACd,SAAS,EAAE,KAAK;CACjB,CAAC;AAEF;;GAEG;AACH,MAAM,UAAU,oBAAoB,CAAC,QAAgB;IACnD,IAAI,QAAQ,IAAI,gBAAgB,EAAE,CAAC;QACjC,OAAO,gBAAgB,CAAC,QAAQ,CAAC,CAAC;IACpC,CAAC;IACD,IAAI,eAAe,CAAC,QAAQ,CAAC,EAAE,CAAC;QAC9B,OAAO,QAAwB,CAAC;IAClC,CAAC;IACD,OAAO,SAAS,CAAC;AACnB,CAAC;AAiBD;;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,sDAAsD;KAC7D;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,GAAG,EAAE;QACH,IAAI,EAAE,KAAK;QACX,KAAK,EAAE,WAAW;QAClB,WAAW,EAAE,iDAAiD;QAC9D,IAAI,EAAE,2DAA2D;KAClE;IACD,IAAI,EAAE;QACJ,IAAI,EAAE,MAAM;QACZ,KAAK,EAAE,YAAY;QACnB,WAAW,EAAE,yDAAyD;QACtE,IAAI,EAAE,0DAA0D;KACjE;IACD,IAAI,EAAE;QACJ,IAAI,EAAE,MAAM;QACZ,KAAK,EAAE,YAAY;QACnB,WAAW,EAAE,gDAAgD;QAC7D,IAAI,EAAE,2DAA2D;KAClE;IACD,GAAG,EAAE;QACH,IAAI,EAAE,KAAK;QACX,KAAK,EAAE,gBAAgB;QACvB,WAAW,EAAE,uDAAuD;QACpE,IAAI,EAAE,6DAA6D;KACpE;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.6.
|
|
3
|
+
"version": "0.6.29",
|
|
4
4
|
"description": "Project scaffolder for VeloxTS framework",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "dist/index.js",
|
|
@@ -29,7 +29,8 @@
|
|
|
29
29
|
},
|
|
30
30
|
"devDependencies": {
|
|
31
31
|
"@types/node": "25.0.3",
|
|
32
|
-
"typescript": "5.9.3"
|
|
32
|
+
"typescript": "5.9.3",
|
|
33
|
+
"vitest": "4.0.15"
|
|
33
34
|
},
|
|
34
35
|
"keywords": [
|
|
35
36
|
"velox",
|
|
@@ -56,6 +57,8 @@
|
|
|
56
57
|
"type-check": "tsc --noEmit",
|
|
57
58
|
"check:templates": "tsc -p tsconfig.templates.json --noEmit || true",
|
|
58
59
|
"clean": "rm -rf dist tsconfig.tsbuildinfo",
|
|
60
|
+
"test": "vitest run",
|
|
61
|
+
"test:watch": "vitest",
|
|
59
62
|
"smoke-test": "./scripts/smoke-test.sh"
|
|
60
63
|
}
|
|
61
64
|
}
|
|
@@ -11,14 +11,31 @@
|
|
|
11
11
|
// Runtime imports using createRequire for Node.js v24+ CJS interop
|
|
12
12
|
import { createRequire } from 'node:module';
|
|
13
13
|
|
|
14
|
+
/* @if sqlite */
|
|
14
15
|
// Type imports (erased at runtime, safe for ESM)
|
|
15
16
|
import type { PrismaBetterSqlite3 as PrismaBetterSqlite3Type } from '@prisma/adapter-better-sqlite3';
|
|
17
|
+
/* @endif sqlite */
|
|
18
|
+
/* @if postgresql */
|
|
19
|
+
// Type imports (erased at runtime, safe for ESM)
|
|
20
|
+
import type { PrismaPg as PrismaPgType } from '@prisma/adapter-pg';
|
|
21
|
+
/* @endif postgresql */
|
|
16
22
|
import type { PrismaClient as PrismaClientType } from '@prisma/client';
|
|
23
|
+
import type { Pool as PoolType } from 'pg';
|
|
17
24
|
|
|
18
25
|
const require = createRequire(import.meta.url);
|
|
26
|
+
/* @if sqlite */
|
|
19
27
|
const { PrismaBetterSqlite3 } = require('@prisma/adapter-better-sqlite3') as {
|
|
20
28
|
PrismaBetterSqlite3: typeof PrismaBetterSqlite3Type;
|
|
21
29
|
};
|
|
30
|
+
/* @endif sqlite */
|
|
31
|
+
/* @if postgresql */
|
|
32
|
+
const { PrismaPg } = require('@prisma/adapter-pg') as {
|
|
33
|
+
PrismaPg: typeof PrismaPgType;
|
|
34
|
+
};
|
|
35
|
+
const { Pool } = require('pg') as {
|
|
36
|
+
Pool: typeof PoolType;
|
|
37
|
+
};
|
|
38
|
+
/* @endif postgresql */
|
|
22
39
|
const { PrismaClient } = require('@prisma/client') as {
|
|
23
40
|
PrismaClient: typeof PrismaClientType;
|
|
24
41
|
};
|
|
@@ -27,8 +44,13 @@ declare global {
|
|
|
27
44
|
// Allow global `var` declarations for hot reload in development
|
|
28
45
|
// eslint-disable-next-line no-var
|
|
29
46
|
var __db: PrismaClient | undefined;
|
|
47
|
+
/* @if postgresql */
|
|
48
|
+
// eslint-disable-next-line no-var
|
|
49
|
+
var __pool: InstanceType<typeof PoolType> | undefined;
|
|
50
|
+
/* @endif postgresql */
|
|
30
51
|
}
|
|
31
52
|
|
|
53
|
+
/* @if sqlite */
|
|
32
54
|
/**
|
|
33
55
|
* Create a Prisma client instance using the SQLite adapter.
|
|
34
56
|
* Validates that DATABASE_URL is set before creating the client.
|
|
@@ -47,10 +69,64 @@ function createPrismaClient(): PrismaClient {
|
|
|
47
69
|
const adapter = new PrismaBetterSqlite3({ url: databaseUrl });
|
|
48
70
|
return new PrismaClient({ adapter });
|
|
49
71
|
}
|
|
72
|
+
/* @endif sqlite */
|
|
73
|
+
/* @if postgresql */
|
|
74
|
+
/**
|
|
75
|
+
* Create a PostgreSQL connection pool.
|
|
76
|
+
* Uses connection pooling for better performance in production.
|
|
77
|
+
*/
|
|
78
|
+
function createPool(): InstanceType<typeof PoolType> {
|
|
79
|
+
const databaseUrl = process.env.DATABASE_URL;
|
|
50
80
|
|
|
81
|
+
if (!databaseUrl) {
|
|
82
|
+
throw new Error(
|
|
83
|
+
'[VeloxTS] DATABASE_URL environment variable is not set. ' +
|
|
84
|
+
'Ensure .env file exists with DATABASE_URL defined.'
|
|
85
|
+
);
|
|
86
|
+
}
|
|
87
|
+
|
|
88
|
+
return new Pool({
|
|
89
|
+
connectionString: databaseUrl,
|
|
90
|
+
max: 10, // Maximum connections in pool
|
|
91
|
+
});
|
|
92
|
+
}
|
|
93
|
+
|
|
94
|
+
/**
|
|
95
|
+
* Create a Prisma client instance using the PostgreSQL adapter.
|
|
96
|
+
* Uses connection pooling for efficient database access.
|
|
97
|
+
*/
|
|
98
|
+
function createPrismaClient(pool: InstanceType<typeof PoolType>): PrismaClient {
|
|
99
|
+
// Prisma 7 requires driver adapters for direct connections
|
|
100
|
+
const adapter = new PrismaPg(pool);
|
|
101
|
+
return new PrismaClient({ adapter });
|
|
102
|
+
}
|
|
103
|
+
/* @endif postgresql */
|
|
104
|
+
|
|
105
|
+
/* @if sqlite */
|
|
51
106
|
// Use global singleton for hot reload in development
|
|
52
107
|
export const db = globalThis.__db ?? createPrismaClient();
|
|
53
108
|
|
|
54
109
|
if (process.env.NODE_ENV !== 'production') {
|
|
55
110
|
globalThis.__db = db;
|
|
56
111
|
}
|
|
112
|
+
/* @endif sqlite */
|
|
113
|
+
/* @if postgresql */
|
|
114
|
+
// Use global singletons for hot reload in development
|
|
115
|
+
const pool = globalThis.__pool ?? createPool();
|
|
116
|
+
export const db = globalThis.__db ?? createPrismaClient(pool);
|
|
117
|
+
|
|
118
|
+
if (process.env.NODE_ENV !== 'production') {
|
|
119
|
+
globalThis.__pool = pool;
|
|
120
|
+
globalThis.__db = db;
|
|
121
|
+
}
|
|
122
|
+
|
|
123
|
+
// Graceful shutdown - close pool on process exit
|
|
124
|
+
const shutdown = async () => {
|
|
125
|
+
await db.$disconnect();
|
|
126
|
+
await pool.end();
|
|
127
|
+
process.exit(0);
|
|
128
|
+
};
|
|
129
|
+
|
|
130
|
+
process.on('SIGTERM', shutdown);
|
|
131
|
+
process.on('SIGINT', shutdown);
|
|
132
|
+
/* @endif postgresql */
|