@veloxts/cli 0.4.0 → 0.4.2
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 +23 -144
- package/dist/cli.js +2 -0
- package/dist/cli.js.map +1 -1
- package/dist/commands/generate.d.ts +17 -0
- package/dist/commands/generate.d.ts.map +1 -0
- package/dist/commands/generate.js +219 -0
- package/dist/commands/generate.js.map +1 -0
- package/dist/commands/migrate.d.ts +8 -3
- package/dist/commands/migrate.d.ts.map +1 -1
- package/dist/commands/migrate.js +17 -123
- package/dist/commands/migrate.js.map +1 -1
- package/dist/generators/base.d.ts +76 -0
- package/dist/generators/base.d.ts.map +1 -0
- package/dist/generators/base.js +271 -0
- package/dist/generators/base.js.map +1 -0
- package/dist/generators/generators/index.d.ts +17 -0
- package/dist/generators/generators/index.d.ts.map +1 -0
- package/dist/generators/generators/index.js +43 -0
- package/dist/generators/generators/index.js.map +1 -0
- package/dist/generators/generators/migration.d.ts +43 -0
- package/dist/generators/generators/migration.d.ts.map +1 -0
- package/dist/generators/generators/migration.js +121 -0
- package/dist/generators/generators/migration.js.map +1 -0
- package/dist/generators/generators/model.d.ts +38 -0
- package/dist/generators/generators/model.d.ts.map +1 -0
- package/dist/generators/generators/model.js +108 -0
- package/dist/generators/generators/model.js.map +1 -0
- package/dist/generators/generators/procedure.d.ts +37 -0
- package/dist/generators/generators/procedure.d.ts.map +1 -0
- package/dist/generators/generators/procedure.js +99 -0
- package/dist/generators/generators/procedure.js.map +1 -0
- package/dist/generators/generators/resource.d.ts +29 -0
- package/dist/generators/generators/resource.d.ts.map +1 -0
- package/dist/generators/generators/resource.js +124 -0
- package/dist/generators/generators/resource.js.map +1 -0
- package/dist/generators/generators/schema.d.ts +28 -0
- package/dist/generators/generators/schema.d.ts.map +1 -0
- package/dist/generators/generators/schema.js +83 -0
- package/dist/generators/generators/schema.js.map +1 -0
- package/dist/generators/generators/test.d.ts +28 -0
- package/dist/generators/generators/test.d.ts.map +1 -0
- package/dist/generators/generators/test.js +96 -0
- package/dist/generators/generators/test.js.map +1 -0
- package/dist/generators/index.d.ts +16 -0
- package/dist/generators/index.d.ts.map +1 -0
- package/dist/generators/index.js +16 -0
- package/dist/generators/index.js.map +1 -0
- package/dist/generators/registry.d.ts +97 -0
- package/dist/generators/registry.d.ts.map +1 -0
- package/dist/generators/registry.js +253 -0
- package/dist/generators/registry.js.map +1 -0
- package/dist/generators/templates/migration.d.ts +23 -0
- package/dist/generators/templates/migration.d.ts.map +1 -0
- package/dist/generators/templates/migration.js +389 -0
- package/dist/generators/templates/migration.js.map +1 -0
- package/dist/generators/templates/model.d.ts +37 -0
- package/dist/generators/templates/model.d.ts.map +1 -0
- package/dist/generators/templates/model.js +374 -0
- package/dist/generators/templates/model.js.map +1 -0
- package/dist/generators/templates/procedure.d.ts +25 -0
- package/dist/generators/templates/procedure.d.ts.map +1 -0
- package/dist/generators/templates/procedure.js +274 -0
- package/dist/generators/templates/procedure.js.map +1 -0
- package/dist/generators/templates/resource.d.ts +34 -0
- package/dist/generators/templates/resource.d.ts.map +1 -0
- package/dist/generators/templates/resource.js +550 -0
- package/dist/generators/templates/resource.js.map +1 -0
- package/dist/generators/templates/schema.d.ts +33 -0
- package/dist/generators/templates/schema.d.ts.map +1 -0
- package/dist/generators/templates/schema.js +248 -0
- package/dist/generators/templates/schema.js.map +1 -0
- package/dist/generators/templates/test.d.ts +31 -0
- package/dist/generators/templates/test.d.ts.map +1 -0
- package/dist/generators/templates/test.js +882 -0
- package/dist/generators/templates/test.js.map +1 -0
- package/dist/generators/types.d.ts +211 -0
- package/dist/generators/types.d.ts.map +1 -0
- package/dist/generators/types.js +54 -0
- package/dist/generators/types.js.map +1 -0
- package/dist/generators/utils/filesystem.d.ts +68 -0
- package/dist/generators/utils/filesystem.d.ts.map +1 -0
- package/dist/generators/utils/filesystem.js +217 -0
- package/dist/generators/utils/filesystem.js.map +1 -0
- package/dist/generators/utils/naming.d.ts +122 -0
- package/dist/generators/utils/naming.d.ts.map +1 -0
- package/dist/generators/utils/naming.js +198 -0
- package/dist/generators/utils/naming.js.map +1 -0
- package/dist/index.d.ts +4 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +4 -0
- package/dist/index.js.map +1 -1
- package/dist/migrations/commands/fresh.d.ts +11 -0
- package/dist/migrations/commands/fresh.d.ts.map +1 -0
- package/dist/migrations/commands/fresh.js +164 -0
- package/dist/migrations/commands/fresh.js.map +1 -0
- package/dist/migrations/commands/index.d.ts +11 -0
- package/dist/migrations/commands/index.d.ts.map +1 -0
- package/dist/migrations/commands/index.js +11 -0
- package/dist/migrations/commands/index.js.map +1 -0
- package/dist/migrations/commands/reset.d.ts +11 -0
- package/dist/migrations/commands/reset.d.ts.map +1 -0
- package/dist/migrations/commands/reset.js +258 -0
- package/dist/migrations/commands/reset.js.map +1 -0
- package/dist/migrations/commands/rollback.d.ts +11 -0
- package/dist/migrations/commands/rollback.d.ts.map +1 -0
- package/dist/migrations/commands/rollback.js +241 -0
- package/dist/migrations/commands/rollback.js.map +1 -0
- package/dist/migrations/commands/run.d.ts +11 -0
- package/dist/migrations/commands/run.d.ts.map +1 -0
- package/dist/migrations/commands/run.js +183 -0
- package/dist/migrations/commands/run.js.map +1 -0
- package/dist/migrations/commands/status.d.ts +11 -0
- package/dist/migrations/commands/status.d.ts.map +1 -0
- package/dist/migrations/commands/status.js +154 -0
- package/dist/migrations/commands/status.js.map +1 -0
- package/dist/migrations/errors.d.ts +74 -0
- package/dist/migrations/errors.d.ts.map +1 -0
- package/dist/migrations/errors.js +155 -0
- package/dist/migrations/errors.js.map +1 -0
- package/dist/migrations/index.d.ts +13 -0
- package/dist/migrations/index.d.ts.map +1 -0
- package/dist/migrations/index.js +17 -0
- package/dist/migrations/index.js.map +1 -0
- package/dist/migrations/loader.d.ts +44 -0
- package/dist/migrations/loader.d.ts.map +1 -0
- package/dist/migrations/loader.js +181 -0
- package/dist/migrations/loader.js.map +1 -0
- package/dist/migrations/prisma-wrapper.d.ts +60 -0
- package/dist/migrations/prisma-wrapper.d.ts.map +1 -0
- package/dist/migrations/prisma-wrapper.js +184 -0
- package/dist/migrations/prisma-wrapper.js.map +1 -0
- package/dist/migrations/rollback-runner.d.ts +40 -0
- package/dist/migrations/rollback-runner.d.ts.map +1 -0
- package/dist/migrations/rollback-runner.js +203 -0
- package/dist/migrations/rollback-runner.js.map +1 -0
- package/dist/migrations/types.d.ts +214 -0
- package/dist/migrations/types.d.ts.map +1 -0
- package/dist/migrations/types.js +19 -0
- package/dist/migrations/types.js.map +1 -0
- package/package.json +29 -8
|
@@ -0,0 +1,389 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Migration Template
|
|
3
|
+
*
|
|
4
|
+
* Generates Prisma migration files with common SQL patterns.
|
|
5
|
+
*/
|
|
6
|
+
/**
|
|
7
|
+
* Parse migration name to determine type and extract details
|
|
8
|
+
*
|
|
9
|
+
* Supported patterns:
|
|
10
|
+
* - create_users → CREATE TABLE users
|
|
11
|
+
* - add_email_to_users → ALTER TABLE ADD COLUMN
|
|
12
|
+
* - remove_name_from_users → ALTER TABLE DROP COLUMN
|
|
13
|
+
* - rename_users_to_accounts → RENAME TABLE
|
|
14
|
+
* - drop_users → DROP TABLE
|
|
15
|
+
*/
|
|
16
|
+
function parseMigrationName(name) {
|
|
17
|
+
const lower = name.toLowerCase();
|
|
18
|
+
// create_<table>
|
|
19
|
+
if (lower.startsWith('create_')) {
|
|
20
|
+
return {
|
|
21
|
+
type: 'create',
|
|
22
|
+
table: name.slice(7), // remove 'create_'
|
|
23
|
+
};
|
|
24
|
+
}
|
|
25
|
+
// add_<column>_to_<table>
|
|
26
|
+
const addMatch = lower.match(/^add_(.+)_to_(.+)$/);
|
|
27
|
+
if (addMatch) {
|
|
28
|
+
const column = addMatch[1];
|
|
29
|
+
const table = addMatch[2];
|
|
30
|
+
if (column && table) {
|
|
31
|
+
return {
|
|
32
|
+
type: 'add',
|
|
33
|
+
column,
|
|
34
|
+
table,
|
|
35
|
+
};
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
// remove_<column>_from_<table>
|
|
39
|
+
const removeMatch = lower.match(/^remove_(.+)_from_(.+)$/);
|
|
40
|
+
if (removeMatch) {
|
|
41
|
+
const column = removeMatch[1];
|
|
42
|
+
const table = removeMatch[2];
|
|
43
|
+
if (column && table) {
|
|
44
|
+
return {
|
|
45
|
+
type: 'remove',
|
|
46
|
+
column,
|
|
47
|
+
table,
|
|
48
|
+
};
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
// rename_<old>_to_<new>
|
|
52
|
+
const renameMatch = lower.match(/^rename_(.+)_to_(.+)$/);
|
|
53
|
+
if (renameMatch) {
|
|
54
|
+
const oldName = renameMatch[1];
|
|
55
|
+
const newName = renameMatch[2];
|
|
56
|
+
if (oldName && newName) {
|
|
57
|
+
return {
|
|
58
|
+
type: 'rename',
|
|
59
|
+
oldName,
|
|
60
|
+
newName,
|
|
61
|
+
};
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
// drop_<table>
|
|
65
|
+
if (lower.startsWith('drop_')) {
|
|
66
|
+
return {
|
|
67
|
+
type: 'drop',
|
|
68
|
+
table: name.slice(5), // remove 'drop_'
|
|
69
|
+
};
|
|
70
|
+
}
|
|
71
|
+
// Custom migration
|
|
72
|
+
return { type: 'custom' };
|
|
73
|
+
}
|
|
74
|
+
// ============================================================================
|
|
75
|
+
// SQL Generators
|
|
76
|
+
// ============================================================================
|
|
77
|
+
/**
|
|
78
|
+
* Generate CREATE TABLE SQL
|
|
79
|
+
*/
|
|
80
|
+
function generateCreateTableSql(table, database) {
|
|
81
|
+
const idType = database === 'postgresql' ? 'UUID' : 'TEXT';
|
|
82
|
+
const idDefault = database === 'postgresql' ? 'DEFAULT gen_random_uuid()' : '';
|
|
83
|
+
const timestampType = database === 'mysql' ? 'DATETIME' : 'TIMESTAMP';
|
|
84
|
+
const timestampDefault = database === 'sqlite'
|
|
85
|
+
? "DEFAULT (datetime('now'))"
|
|
86
|
+
: database === 'postgresql'
|
|
87
|
+
? 'DEFAULT CURRENT_TIMESTAMP'
|
|
88
|
+
: 'DEFAULT CURRENT_TIMESTAMP';
|
|
89
|
+
return `-- CreateTable
|
|
90
|
+
CREATE TABLE "${table}" (
|
|
91
|
+
"id" ${idType} PRIMARY KEY ${idDefault},
|
|
92
|
+
-- TODO: Add your columns here
|
|
93
|
+
-- "name" TEXT NOT NULL,
|
|
94
|
+
-- "email" TEXT NOT NULL UNIQUE,
|
|
95
|
+
"created_at" ${timestampType} NOT NULL ${timestampDefault},
|
|
96
|
+
"updated_at" ${timestampType} NOT NULL ${timestampDefault}
|
|
97
|
+
);
|
|
98
|
+
|
|
99
|
+
-- CreateIndex (optional)
|
|
100
|
+
-- CREATE UNIQUE INDEX "${table}_email_key" ON "${table}"("email");
|
|
101
|
+
`;
|
|
102
|
+
}
|
|
103
|
+
/**
|
|
104
|
+
* Generate ADD COLUMN SQL
|
|
105
|
+
*/
|
|
106
|
+
function generateAddColumnSql(table, column, _database) {
|
|
107
|
+
return `-- AddColumn
|
|
108
|
+
ALTER TABLE "${table}" ADD COLUMN "${column}" TEXT;
|
|
109
|
+
-- TODO: Adjust the column type as needed
|
|
110
|
+
-- Common types: TEXT, INTEGER, BOOLEAN, TIMESTAMP, UUID
|
|
111
|
+
-- Add NOT NULL if required (may need DEFAULT value)
|
|
112
|
+
`;
|
|
113
|
+
}
|
|
114
|
+
/**
|
|
115
|
+
* Generate DROP COLUMN SQL
|
|
116
|
+
*/
|
|
117
|
+
function generateRemoveColumnSql(table, column, database) {
|
|
118
|
+
if (database === 'sqlite') {
|
|
119
|
+
return `-- RemoveColumn
|
|
120
|
+
-- SQLite doesn't support DROP COLUMN directly.
|
|
121
|
+
-- You need to recreate the table without the column.
|
|
122
|
+
-- See: https://www.sqlite.org/lang_altertable.html
|
|
123
|
+
|
|
124
|
+
-- Step 1: Create new table without the column
|
|
125
|
+
-- CREATE TABLE "${table}_new" (
|
|
126
|
+
-- "id" TEXT PRIMARY KEY,
|
|
127
|
+
-- -- all columns except "${column}"
|
|
128
|
+
-- "created_at" TIMESTAMP NOT NULL,
|
|
129
|
+
-- "updated_at" TIMESTAMP NOT NULL
|
|
130
|
+
-- );
|
|
131
|
+
|
|
132
|
+
-- Step 2: Copy data
|
|
133
|
+
-- INSERT INTO "${table}_new" SELECT id, ..., created_at, updated_at FROM "${table}";
|
|
134
|
+
|
|
135
|
+
-- Step 3: Drop old table
|
|
136
|
+
-- DROP TABLE "${table}";
|
|
137
|
+
|
|
138
|
+
-- Step 4: Rename new table
|
|
139
|
+
-- ALTER TABLE "${table}_new" RENAME TO "${table}";
|
|
140
|
+
`;
|
|
141
|
+
}
|
|
142
|
+
return `-- RemoveColumn
|
|
143
|
+
ALTER TABLE "${table}" DROP COLUMN "${column}";
|
|
144
|
+
`;
|
|
145
|
+
}
|
|
146
|
+
/**
|
|
147
|
+
* Generate RENAME TABLE SQL
|
|
148
|
+
*/
|
|
149
|
+
function generateRenameTableSql(oldName, newName, database) {
|
|
150
|
+
if (database === 'mysql') {
|
|
151
|
+
return `-- RenameTable
|
|
152
|
+
RENAME TABLE "${oldName}" TO "${newName}";
|
|
153
|
+
`;
|
|
154
|
+
}
|
|
155
|
+
return `-- RenameTable
|
|
156
|
+
ALTER TABLE "${oldName}" RENAME TO "${newName}";
|
|
157
|
+
`;
|
|
158
|
+
}
|
|
159
|
+
/**
|
|
160
|
+
* Generate DROP TABLE SQL
|
|
161
|
+
*/
|
|
162
|
+
function generateDropTableSql(table) {
|
|
163
|
+
return `-- DropTable
|
|
164
|
+
DROP TABLE IF EXISTS "${table}";
|
|
165
|
+
`;
|
|
166
|
+
}
|
|
167
|
+
/**
|
|
168
|
+
* Generate custom migration SQL
|
|
169
|
+
*/
|
|
170
|
+
function generateCustomSql(name) {
|
|
171
|
+
return `-- Migration: ${name}
|
|
172
|
+
--
|
|
173
|
+
-- Write your custom SQL here.
|
|
174
|
+
-- This migration was created because the name didn't match
|
|
175
|
+
-- any known patterns (create_*, add_*_to_*, remove_*_from_*, etc.)
|
|
176
|
+
|
|
177
|
+
-- Example operations:
|
|
178
|
+
-- CREATE TABLE "example" (...);
|
|
179
|
+
-- ALTER TABLE "example" ADD COLUMN "field" TEXT;
|
|
180
|
+
-- CREATE INDEX "example_field_idx" ON "example"("field");
|
|
181
|
+
-- UPDATE "example" SET "field" = 'value' WHERE condition;
|
|
182
|
+
`;
|
|
183
|
+
}
|
|
184
|
+
// ============================================================================
|
|
185
|
+
// Rollback SQL Generators
|
|
186
|
+
// ============================================================================
|
|
187
|
+
/**
|
|
188
|
+
* Generate DROP TABLE SQL for rollback of CREATE TABLE
|
|
189
|
+
*/
|
|
190
|
+
function generateRollbackCreateTableSql(table) {
|
|
191
|
+
return `-- RollbackCreateTable
|
|
192
|
+
DROP TABLE IF EXISTS "${table}";
|
|
193
|
+
`;
|
|
194
|
+
}
|
|
195
|
+
/**
|
|
196
|
+
* Generate DROP COLUMN SQL for rollback of ADD COLUMN
|
|
197
|
+
*/
|
|
198
|
+
function generateRollbackAddColumnSql(table, column, database) {
|
|
199
|
+
if (database === 'sqlite') {
|
|
200
|
+
return `-- RollbackAddColumn
|
|
201
|
+
-- SQLite doesn't support DROP COLUMN directly in older versions.
|
|
202
|
+
-- For SQLite 3.35.0+ you can use:
|
|
203
|
+
ALTER TABLE "${table}" DROP COLUMN "${column}";
|
|
204
|
+
|
|
205
|
+
-- For older SQLite versions, you need to recreate the table.
|
|
206
|
+
-- See: https://www.sqlite.org/lang_altertable.html
|
|
207
|
+
`;
|
|
208
|
+
}
|
|
209
|
+
return `-- RollbackAddColumn
|
|
210
|
+
ALTER TABLE "${table}" DROP COLUMN "${column}";
|
|
211
|
+
`;
|
|
212
|
+
}
|
|
213
|
+
/**
|
|
214
|
+
* Generate ADD COLUMN SQL for rollback of REMOVE COLUMN
|
|
215
|
+
* Note: Data loss warning - column data cannot be recovered
|
|
216
|
+
*/
|
|
217
|
+
function generateRollbackRemoveColumnSql(table, column) {
|
|
218
|
+
return `-- RollbackRemoveColumn
|
|
219
|
+
-- WARNING: Original column data cannot be recovered!
|
|
220
|
+
-- You must manually specify the correct column type.
|
|
221
|
+
ALTER TABLE "${table}" ADD COLUMN "${column}" TEXT;
|
|
222
|
+
-- TODO: Adjust the column type to match the original schema
|
|
223
|
+
`;
|
|
224
|
+
}
|
|
225
|
+
/**
|
|
226
|
+
* Generate reverse RENAME TABLE SQL for rollback
|
|
227
|
+
*/
|
|
228
|
+
function generateRollbackRenameTableSql(oldName, newName, database) {
|
|
229
|
+
// Reverse the rename: newName -> oldName
|
|
230
|
+
if (database === 'mysql') {
|
|
231
|
+
return `-- RollbackRenameTable
|
|
232
|
+
RENAME TABLE "${newName}" TO "${oldName}";
|
|
233
|
+
`;
|
|
234
|
+
}
|
|
235
|
+
return `-- RollbackRenameTable
|
|
236
|
+
ALTER TABLE "${newName}" RENAME TO "${oldName}";
|
|
237
|
+
`;
|
|
238
|
+
}
|
|
239
|
+
/**
|
|
240
|
+
* Generate warning for rollback of DROP TABLE
|
|
241
|
+
* Data loss - cannot recover dropped table
|
|
242
|
+
*/
|
|
243
|
+
function generateRollbackDropTableSql(table) {
|
|
244
|
+
return `-- RollbackDropTable
|
|
245
|
+
-- WARNING: Cannot automatically rollback DROP TABLE!
|
|
246
|
+
-- The original table data and schema are lost.
|
|
247
|
+
-- You must manually recreate the table with its original schema:
|
|
248
|
+
--
|
|
249
|
+
-- CREATE TABLE "${table}" (
|
|
250
|
+
-- "id" TEXT PRIMARY KEY,
|
|
251
|
+
-- -- TODO: Add original columns here
|
|
252
|
+
-- "created_at" TIMESTAMP NOT NULL,
|
|
253
|
+
-- "updated_at" TIMESTAMP NOT NULL
|
|
254
|
+
-- );
|
|
255
|
+
`;
|
|
256
|
+
}
|
|
257
|
+
/**
|
|
258
|
+
* Generate rollback SQL for custom migrations
|
|
259
|
+
*/
|
|
260
|
+
function generateRollbackCustomSql(name) {
|
|
261
|
+
return `-- Rollback Migration: ${name}
|
|
262
|
+
--
|
|
263
|
+
-- Write your rollback SQL here.
|
|
264
|
+
-- This should reverse the operations in migration.sql
|
|
265
|
+
--
|
|
266
|
+
-- Example rollback operations:
|
|
267
|
+
-- DROP TABLE IF EXISTS "example";
|
|
268
|
+
-- ALTER TABLE "example" DROP COLUMN "field";
|
|
269
|
+
-- DROP INDEX "example_field_idx";
|
|
270
|
+
`;
|
|
271
|
+
}
|
|
272
|
+
// ============================================================================
|
|
273
|
+
// Template Functions
|
|
274
|
+
// ============================================================================
|
|
275
|
+
/**
|
|
276
|
+
* Generate migration SQL based on name and database type
|
|
277
|
+
*/
|
|
278
|
+
function generateMigrationSql(name, database) {
|
|
279
|
+
const parsed = parseMigrationName(name);
|
|
280
|
+
switch (parsed.type) {
|
|
281
|
+
case 'create':
|
|
282
|
+
return generateCreateTableSql(parsed.table, database);
|
|
283
|
+
case 'add':
|
|
284
|
+
return generateAddColumnSql(parsed.table, parsed.column, database);
|
|
285
|
+
case 'remove':
|
|
286
|
+
return generateRemoveColumnSql(parsed.table, parsed.column, database);
|
|
287
|
+
case 'rename':
|
|
288
|
+
return generateRenameTableSql(parsed.oldName, parsed.newName, database);
|
|
289
|
+
case 'drop':
|
|
290
|
+
return generateDropTableSql(parsed.table);
|
|
291
|
+
case 'custom':
|
|
292
|
+
return generateCustomSql(name);
|
|
293
|
+
}
|
|
294
|
+
}
|
|
295
|
+
/**
|
|
296
|
+
* Generate rollback SQL based on name and database type
|
|
297
|
+
*/
|
|
298
|
+
function generateRollbackSql(name, database) {
|
|
299
|
+
const parsed = parseMigrationName(name);
|
|
300
|
+
switch (parsed.type) {
|
|
301
|
+
case 'create':
|
|
302
|
+
return generateRollbackCreateTableSql(parsed.table);
|
|
303
|
+
case 'add':
|
|
304
|
+
return generateRollbackAddColumnSql(parsed.table, parsed.column, database);
|
|
305
|
+
case 'remove':
|
|
306
|
+
return generateRollbackRemoveColumnSql(parsed.table, parsed.column);
|
|
307
|
+
case 'rename':
|
|
308
|
+
return generateRollbackRenameTableSql(parsed.oldName, parsed.newName, database);
|
|
309
|
+
case 'drop':
|
|
310
|
+
return generateRollbackDropTableSql(parsed.table);
|
|
311
|
+
case 'custom':
|
|
312
|
+
return generateRollbackCustomSql(name);
|
|
313
|
+
}
|
|
314
|
+
}
|
|
315
|
+
/**
|
|
316
|
+
* Generate timestamp for migration folder name
|
|
317
|
+
*/
|
|
318
|
+
function generateTimestamp() {
|
|
319
|
+
const now = new Date();
|
|
320
|
+
const year = now.getFullYear();
|
|
321
|
+
const month = String(now.getMonth() + 1).padStart(2, '0');
|
|
322
|
+
const day = String(now.getDate()).padStart(2, '0');
|
|
323
|
+
const hours = String(now.getHours()).padStart(2, '0');
|
|
324
|
+
const minutes = String(now.getMinutes()).padStart(2, '0');
|
|
325
|
+
const seconds = String(now.getSeconds()).padStart(2, '0');
|
|
326
|
+
return `${year}${month}${day}${hours}${minutes}${seconds}`;
|
|
327
|
+
}
|
|
328
|
+
// ============================================================================
|
|
329
|
+
// Template Export
|
|
330
|
+
// ============================================================================
|
|
331
|
+
/**
|
|
332
|
+
* Migration template
|
|
333
|
+
*/
|
|
334
|
+
export const migrationTemplate = (ctx) => {
|
|
335
|
+
return generateMigrationSql(ctx.entity.raw, ctx.options.database);
|
|
336
|
+
};
|
|
337
|
+
/**
|
|
338
|
+
* Generate all files for a migration
|
|
339
|
+
*/
|
|
340
|
+
export function generateMigrationFiles(ctx) {
|
|
341
|
+
const timestamp = generateTimestamp();
|
|
342
|
+
// Use raw entity name to preserve original migration name (e.g., create_users)
|
|
343
|
+
const migrationName = ctx.entity.raw;
|
|
344
|
+
const folderName = `${timestamp}_${migrationName}`;
|
|
345
|
+
const upSql = migrationTemplate(ctx);
|
|
346
|
+
const downSql = generateRollbackSql(ctx.entity.raw, ctx.options.database);
|
|
347
|
+
return [
|
|
348
|
+
{
|
|
349
|
+
path: `prisma/migrations/${folderName}/migration.sql`,
|
|
350
|
+
content: upSql,
|
|
351
|
+
},
|
|
352
|
+
{
|
|
353
|
+
path: `prisma/migrations/${folderName}/down.sql`,
|
|
354
|
+
content: downSql,
|
|
355
|
+
},
|
|
356
|
+
];
|
|
357
|
+
}
|
|
358
|
+
/**
|
|
359
|
+
* Generate post-generation instructions
|
|
360
|
+
*/
|
|
361
|
+
export function getMigrationInstructions(migrationName) {
|
|
362
|
+
return `
|
|
363
|
+
1. Review and customize the generated SQL:
|
|
364
|
+
|
|
365
|
+
Edit prisma/migrations/*_${migrationName}/migration.sql
|
|
366
|
+
Edit prisma/migrations/*_${migrationName}/down.sql (rollback)
|
|
367
|
+
|
|
368
|
+
2. Apply the migration:
|
|
369
|
+
|
|
370
|
+
For development (with Prisma):
|
|
371
|
+
pnpm db:push
|
|
372
|
+
|
|
373
|
+
For production migrations:
|
|
374
|
+
npx prisma migrate deploy
|
|
375
|
+
|
|
376
|
+
3. To rollback (if needed):
|
|
377
|
+
|
|
378
|
+
Run the SQL in down.sql manually:
|
|
379
|
+
sqlite3 prisma/dev.db < prisma/migrations/*_${migrationName}/down.sql
|
|
380
|
+
|
|
381
|
+
Or use a database client to execute the rollback SQL.
|
|
382
|
+
|
|
383
|
+
Note: If using Prisma's migration system, you may prefer:
|
|
384
|
+
npx prisma migrate dev --name ${migrationName}
|
|
385
|
+
|
|
386
|
+
This will create a migration with proper Prisma metadata.
|
|
387
|
+
`;
|
|
388
|
+
}
|
|
389
|
+
//# sourceMappingURL=migration.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"migration.js","sourceRoot":"","sources":["../../../src/generators/templates/migration.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAyBH;;;;;;;;;GASG;AACH,SAAS,kBAAkB,CAAC,IAAY;IACtC,MAAM,KAAK,GAAG,IAAI,CAAC,WAAW,EAAE,CAAC;IAEjC,iBAAiB;IACjB,IAAI,KAAK,CAAC,UAAU,CAAC,SAAS,CAAC,EAAE,CAAC;QAChC,OAAO;YACL,IAAI,EAAE,QAAQ;YACd,KAAK,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,mBAAmB;SAC1C,CAAC;IACJ,CAAC;IAED,0BAA0B;IAC1B,MAAM,QAAQ,GAAG,KAAK,CAAC,KAAK,CAAC,oBAAoB,CAAC,CAAC;IACnD,IAAI,QAAQ,EAAE,CAAC;QACb,MAAM,MAAM,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAC;QAC3B,MAAM,KAAK,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAC;QAC1B,IAAI,MAAM,IAAI,KAAK,EAAE,CAAC;YACpB,OAAO;gBACL,IAAI,EAAE,KAAK;gBACX,MAAM;gBACN,KAAK;aACN,CAAC;QACJ,CAAC;IACH,CAAC;IAED,+BAA+B;IAC/B,MAAM,WAAW,GAAG,KAAK,CAAC,KAAK,CAAC,yBAAyB,CAAC,CAAC;IAC3D,IAAI,WAAW,EAAE,CAAC;QAChB,MAAM,MAAM,GAAG,WAAW,CAAC,CAAC,CAAC,CAAC;QAC9B,MAAM,KAAK,GAAG,WAAW,CAAC,CAAC,CAAC,CAAC;QAC7B,IAAI,MAAM,IAAI,KAAK,EAAE,CAAC;YACpB,OAAO;gBACL,IAAI,EAAE,QAAQ;gBACd,MAAM;gBACN,KAAK;aACN,CAAC;QACJ,CAAC;IACH,CAAC;IAED,wBAAwB;IACxB,MAAM,WAAW,GAAG,KAAK,CAAC,KAAK,CAAC,uBAAuB,CAAC,CAAC;IACzD,IAAI,WAAW,EAAE,CAAC;QAChB,MAAM,OAAO,GAAG,WAAW,CAAC,CAAC,CAAC,CAAC;QAC/B,MAAM,OAAO,GAAG,WAAW,CAAC,CAAC,CAAC,CAAC;QAC/B,IAAI,OAAO,IAAI,OAAO,EAAE,CAAC;YACvB,OAAO;gBACL,IAAI,EAAE,QAAQ;gBACd,OAAO;gBACP,OAAO;aACR,CAAC;QACJ,CAAC;IACH,CAAC;IAED,eAAe;IACf,IAAI,KAAK,CAAC,UAAU,CAAC,OAAO,CAAC,EAAE,CAAC;QAC9B,OAAO;YACL,IAAI,EAAE,MAAM;YACZ,KAAK,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,iBAAiB;SACxC,CAAC;IACJ,CAAC;IAED,mBAAmB;IACnB,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAC;AAC5B,CAAC;AAED,+EAA+E;AAC/E,iBAAiB;AACjB,+EAA+E;AAE/E;;GAEG;AACH,SAAS,sBAAsB,CAAC,KAAa,EAAE,QAAgB;IAC7D,MAAM,MAAM,GAAG,QAAQ,KAAK,YAAY,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC;IAC3D,MAAM,SAAS,GAAG,QAAQ,KAAK,YAAY,CAAC,CAAC,CAAC,2BAA2B,CAAC,CAAC,CAAC,EAAE,CAAC;IAC/E,MAAM,aAAa,GAAG,QAAQ,KAAK,OAAO,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,WAAW,CAAC;IACtE,MAAM,gBAAgB,GACpB,QAAQ,KAAK,QAAQ;QACnB,CAAC,CAAC,2BAA2B;QAC7B,CAAC,CAAC,QAAQ,KAAK,YAAY;YACzB,CAAC,CAAC,2BAA2B;YAC7B,CAAC,CAAC,2BAA2B,CAAC;IAEpC,OAAO;gBACO,KAAK;WACV,MAAM,gBAAgB,SAAS;;;;mBAIvB,aAAa,aAAa,gBAAgB;mBAC1C,aAAa,aAAa,gBAAgB;;;;0BAInC,KAAK,mBAAmB,KAAK;CACtD,CAAC;AACF,CAAC;AAED;;GAEG;AACH,SAAS,oBAAoB,CAAC,KAAa,EAAE,MAAc,EAAE,SAAiB;IAC5E,OAAO;eACM,KAAK,iBAAiB,MAAM;;;;CAI1C,CAAC;AACF,CAAC;AAED;;GAEG;AACH,SAAS,uBAAuB,CAAC,KAAa,EAAE,MAAc,EAAE,QAAgB;IAC9E,IAAI,QAAQ,KAAK,QAAQ,EAAE,CAAC;QAC1B,OAAO;;;;;;mBAMQ,KAAK;;gCAEQ,MAAM;;;;;;kBAMpB,KAAK,sDAAsD,KAAK;;;iBAGjE,KAAK;;;kBAGJ,KAAK,oBAAoB,KAAK;CAC/C,CAAC;IACA,CAAC;IAED,OAAO;eACM,KAAK,kBAAkB,MAAM;CAC3C,CAAC;AACF,CAAC;AAED;;GAEG;AACH,SAAS,sBAAsB,CAAC,OAAe,EAAE,OAAe,EAAE,QAAgB;IAChF,IAAI,QAAQ,KAAK,OAAO,EAAE,CAAC;QACzB,OAAO;gBACK,OAAO,SAAS,OAAO;CACtC,CAAC;IACA,CAAC;IAED,OAAO;eACM,OAAO,gBAAgB,OAAO;CAC5C,CAAC;AACF,CAAC;AAED;;GAEG;AACH,SAAS,oBAAoB,CAAC,KAAa;IACzC,OAAO;wBACe,KAAK;CAC5B,CAAC;AACF,CAAC;AAED;;GAEG;AACH,SAAS,iBAAiB,CAAC,IAAY;IACrC,OAAO,iBAAiB,IAAI;;;;;;;;;;;CAW7B,CAAC;AACF,CAAC;AAED,+EAA+E;AAC/E,0BAA0B;AAC1B,+EAA+E;AAE/E;;GAEG;AACH,SAAS,8BAA8B,CAAC,KAAa;IACnD,OAAO;wBACe,KAAK;CAC5B,CAAC;AACF,CAAC;AAED;;GAEG;AACH,SAAS,4BAA4B,CAAC,KAAa,EAAE,MAAc,EAAE,QAAgB;IACnF,IAAI,QAAQ,KAAK,QAAQ,EAAE,CAAC;QAC1B,OAAO;;;eAGI,KAAK,kBAAkB,MAAM;;;;CAI3C,CAAC;IACA,CAAC;IAED,OAAO;eACM,KAAK,kBAAkB,MAAM;CAC3C,CAAC;AACF,CAAC;AAED;;;GAGG;AACH,SAAS,+BAA+B,CAAC,KAAa,EAAE,MAAc;IACpE,OAAO;;;eAGM,KAAK,iBAAiB,MAAM;;CAE1C,CAAC;AACF,CAAC;AAED;;GAEG;AACH,SAAS,8BAA8B,CACrC,OAAe,EACf,OAAe,EACf,QAAgB;IAEhB,yCAAyC;IACzC,IAAI,QAAQ,KAAK,OAAO,EAAE,CAAC;QACzB,OAAO;gBACK,OAAO,SAAS,OAAO;CACtC,CAAC;IACA,CAAC;IAED,OAAO;eACM,OAAO,gBAAgB,OAAO;CAC5C,CAAC;AACF,CAAC;AAED;;;GAGG;AACH,SAAS,4BAA4B,CAAC,KAAa;IACjD,OAAO;;;;;mBAKU,KAAK;;;;;;CAMvB,CAAC;AACF,CAAC;AAED;;GAEG;AACH,SAAS,yBAAyB,CAAC,IAAY;IAC7C,OAAO,0BAA0B,IAAI;;;;;;;;;CAStC,CAAC;AACF,CAAC;AAED,+EAA+E;AAC/E,qBAAqB;AACrB,+EAA+E;AAE/E;;GAEG;AACH,SAAS,oBAAoB,CAAC,IAAY,EAAE,QAAgB;IAC1D,MAAM,MAAM,GAAG,kBAAkB,CAAC,IAAI,CAAC,CAAC;IAExC,QAAQ,MAAM,CAAC,IAAI,EAAE,CAAC;QACpB,KAAK,QAAQ;YACX,OAAO,sBAAsB,CAAC,MAAM,CAAC,KAAK,EAAE,QAAQ,CAAC,CAAC;QAExD,KAAK,KAAK;YACR,OAAO,oBAAoB,CAAC,MAAM,CAAC,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC;QAErE,KAAK,QAAQ;YACX,OAAO,uBAAuB,CAAC,MAAM,CAAC,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC;QAExE,KAAK,QAAQ;YACX,OAAO,sBAAsB,CAAC,MAAM,CAAC,OAAO,EAAE,MAAM,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC;QAE1E,KAAK,MAAM;YACT,OAAO,oBAAoB,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;QAE5C,KAAK,QAAQ;YACX,OAAO,iBAAiB,CAAC,IAAI,CAAC,CAAC;IACnC,CAAC;AACH,CAAC;AAED;;GAEG;AACH,SAAS,mBAAmB,CAAC,IAAY,EAAE,QAAgB;IACzD,MAAM,MAAM,GAAG,kBAAkB,CAAC,IAAI,CAAC,CAAC;IAExC,QAAQ,MAAM,CAAC,IAAI,EAAE,CAAC;QACpB,KAAK,QAAQ;YACX,OAAO,8BAA8B,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;QAEtD,KAAK,KAAK;YACR,OAAO,4BAA4B,CAAC,MAAM,CAAC,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC;QAE7E,KAAK,QAAQ;YACX,OAAO,+BAA+B,CAAC,MAAM,CAAC,KAAK,EAAE,MAAM,CAAC,MAAM,CAAC,CAAC;QAEtE,KAAK,QAAQ;YACX,OAAO,8BAA8B,CAAC,MAAM,CAAC,OAAO,EAAE,MAAM,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC;QAElF,KAAK,MAAM;YACT,OAAO,4BAA4B,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;QAEpD,KAAK,QAAQ;YACX,OAAO,yBAAyB,CAAC,IAAI,CAAC,CAAC;IAC3C,CAAC;AACH,CAAC;AAED;;GAEG;AACH,SAAS,iBAAiB;IACxB,MAAM,GAAG,GAAG,IAAI,IAAI,EAAE,CAAC;IACvB,MAAM,IAAI,GAAG,GAAG,CAAC,WAAW,EAAE,CAAC;IAC/B,MAAM,KAAK,GAAG,MAAM,CAAC,GAAG,CAAC,QAAQ,EAAE,GAAG,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;IAC1D,MAAM,GAAG,GAAG,MAAM,CAAC,GAAG,CAAC,OAAO,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;IACnD,MAAM,KAAK,GAAG,MAAM,CAAC,GAAG,CAAC,QAAQ,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;IACtD,MAAM,OAAO,GAAG,MAAM,CAAC,GAAG,CAAC,UAAU,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;IAC1D,MAAM,OAAO,GAAG,MAAM,CAAC,GAAG,CAAC,UAAU,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;IAE1D,OAAO,GAAG,IAAI,GAAG,KAAK,GAAG,GAAG,GAAG,KAAK,GAAG,OAAO,GAAG,OAAO,EAAE,CAAC;AAC7D,CAAC;AAED,+EAA+E;AAC/E,kBAAkB;AAClB,+EAA+E;AAE/E;;GAEG;AACH,MAAM,CAAC,MAAM,iBAAiB,GAAuC,CAAC,GAAG,EAAE,EAAE;IAC3E,OAAO,oBAAoB,CAAC,GAAG,CAAC,MAAM,CAAC,GAAG,EAAE,GAAG,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;AACpE,CAAC,CAAC;AAEF;;GAEG;AACH,MAAM,UAAU,sBAAsB,CAAC,GAAsC;IAC3E,MAAM,SAAS,GAAG,iBAAiB,EAAE,CAAC;IACtC,+EAA+E;IAC/E,MAAM,aAAa,GAAG,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC;IACrC,MAAM,UAAU,GAAG,GAAG,SAAS,IAAI,aAAa,EAAE,CAAC;IAEnD,MAAM,KAAK,GAAG,iBAAiB,CAAC,GAAG,CAAC,CAAC;IACrC,MAAM,OAAO,GAAG,mBAAmB,CAAC,GAAG,CAAC,MAAM,CAAC,GAAG,EAAE,GAAG,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;IAE1E,OAAO;QACL;YACE,IAAI,EAAE,qBAAqB,UAAU,gBAAgB;YACrD,OAAO,EAAE,KAAK;SACf;QACD;YACE,IAAI,EAAE,qBAAqB,UAAU,WAAW;YAChD,OAAO,EAAE,OAAO;SACjB;KACF,CAAC;AACJ,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,wBAAwB,CAAC,aAAqB;IAC5D,OAAO;;;gCAGuB,aAAa;gCACb,aAAa;;;;;;;;;;;;;qDAaQ,aAAa;;;;;uCAK3B,aAAa;;;CAGnD,CAAC;AACF,CAAC"}
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Model Template
|
|
3
|
+
*
|
|
4
|
+
* Generates Prisma model, Zod schema, and optionally procedures.
|
|
5
|
+
*/
|
|
6
|
+
import type { GeneratedFile, TemplateContext, TemplateFunction } from '../types.js';
|
|
7
|
+
export interface ModelOptions {
|
|
8
|
+
/** Generate CRUD procedures alongside the model */
|
|
9
|
+
crud: boolean;
|
|
10
|
+
/** Include pagination for list operation */
|
|
11
|
+
paginated: boolean;
|
|
12
|
+
/** Include soft delete (deletedAt field) */
|
|
13
|
+
softDelete: boolean;
|
|
14
|
+
/** Include timestamps (createdAt, updatedAt) */
|
|
15
|
+
timestamps: boolean;
|
|
16
|
+
}
|
|
17
|
+
/**
|
|
18
|
+
* Model template - generates Prisma model definition
|
|
19
|
+
*/
|
|
20
|
+
export declare const prismaModelTemplate: TemplateFunction<ModelOptions>;
|
|
21
|
+
/**
|
|
22
|
+
* Schema template - generates Zod schema file
|
|
23
|
+
*/
|
|
24
|
+
export declare const schemaTemplate: TemplateFunction<ModelOptions>;
|
|
25
|
+
/**
|
|
26
|
+
* Procedures template - generates procedure file
|
|
27
|
+
*/
|
|
28
|
+
export declare const proceduresTemplate: TemplateFunction<ModelOptions>;
|
|
29
|
+
/**
|
|
30
|
+
* Generate all files for a model
|
|
31
|
+
*/
|
|
32
|
+
export declare function generateModelFiles(ctx: TemplateContext<ModelOptions>): GeneratedFile[];
|
|
33
|
+
/**
|
|
34
|
+
* Generate post-generation instructions
|
|
35
|
+
*/
|
|
36
|
+
export declare function getModelInstructions(ctx: TemplateContext<ModelOptions>): string;
|
|
37
|
+
//# sourceMappingURL=model.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"model.d.ts","sourceRoot":"","sources":["../../../src/generators/templates/model.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EAAE,aAAa,EAAE,eAAe,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAMpF,MAAM,WAAW,YAAY;IAC3B,mDAAmD;IACnD,IAAI,EAAE,OAAO,CAAC;IACd,4CAA4C;IAC5C,SAAS,EAAE,OAAO,CAAC;IACnB,4CAA4C;IAC5C,UAAU,EAAE,OAAO,CAAC;IACpB,gDAAgD;IAChD,UAAU,EAAE,OAAO,CAAC;CACrB;AA4TD;;GAEG;AACH,eAAO,MAAM,mBAAmB,EAAE,gBAAgB,CAAC,YAAY,CAE9D,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,cAAc,EAAE,gBAAgB,CAAC,YAAY,CAEzD,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,kBAAkB,EAAE,gBAAgB,CAAC,YAAY,CAE7D,CAAC;AAEF;;GAEG;AACH,wBAAgB,kBAAkB,CAAC,GAAG,EAAE,eAAe,CAAC,YAAY,CAAC,GAAG,aAAa,EAAE,CAyBtF;AAED;;GAEG;AACH,wBAAgB,oBAAoB,CAAC,GAAG,EAAE,eAAe,CAAC,YAAY,CAAC,GAAG,MAAM,CAkC/E"}
|