@veloxts/cli 0.3.6 → 0.4.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (139) hide show
  1. package/dist/cli.js +2 -0
  2. package/dist/cli.js.map +1 -1
  3. package/dist/commands/generate.d.ts +17 -0
  4. package/dist/commands/generate.d.ts.map +1 -0
  5. package/dist/commands/generate.js +219 -0
  6. package/dist/commands/generate.js.map +1 -0
  7. package/dist/commands/migrate.d.ts +8 -3
  8. package/dist/commands/migrate.d.ts.map +1 -1
  9. package/dist/commands/migrate.js +17 -123
  10. package/dist/commands/migrate.js.map +1 -1
  11. package/dist/generators/base.d.ts +76 -0
  12. package/dist/generators/base.d.ts.map +1 -0
  13. package/dist/generators/base.js +271 -0
  14. package/dist/generators/base.js.map +1 -0
  15. package/dist/generators/generators/index.d.ts +17 -0
  16. package/dist/generators/generators/index.d.ts.map +1 -0
  17. package/dist/generators/generators/index.js +43 -0
  18. package/dist/generators/generators/index.js.map +1 -0
  19. package/dist/generators/generators/migration.d.ts +43 -0
  20. package/dist/generators/generators/migration.d.ts.map +1 -0
  21. package/dist/generators/generators/migration.js +121 -0
  22. package/dist/generators/generators/migration.js.map +1 -0
  23. package/dist/generators/generators/model.d.ts +38 -0
  24. package/dist/generators/generators/model.d.ts.map +1 -0
  25. package/dist/generators/generators/model.js +108 -0
  26. package/dist/generators/generators/model.js.map +1 -0
  27. package/dist/generators/generators/procedure.d.ts +37 -0
  28. package/dist/generators/generators/procedure.d.ts.map +1 -0
  29. package/dist/generators/generators/procedure.js +99 -0
  30. package/dist/generators/generators/procedure.js.map +1 -0
  31. package/dist/generators/generators/resource.d.ts +29 -0
  32. package/dist/generators/generators/resource.d.ts.map +1 -0
  33. package/dist/generators/generators/resource.js +124 -0
  34. package/dist/generators/generators/resource.js.map +1 -0
  35. package/dist/generators/generators/schema.d.ts +28 -0
  36. package/dist/generators/generators/schema.d.ts.map +1 -0
  37. package/dist/generators/generators/schema.js +83 -0
  38. package/dist/generators/generators/schema.js.map +1 -0
  39. package/dist/generators/generators/test.d.ts +28 -0
  40. package/dist/generators/generators/test.d.ts.map +1 -0
  41. package/dist/generators/generators/test.js +96 -0
  42. package/dist/generators/generators/test.js.map +1 -0
  43. package/dist/generators/index.d.ts +16 -0
  44. package/dist/generators/index.d.ts.map +1 -0
  45. package/dist/generators/index.js +16 -0
  46. package/dist/generators/index.js.map +1 -0
  47. package/dist/generators/registry.d.ts +97 -0
  48. package/dist/generators/registry.d.ts.map +1 -0
  49. package/dist/generators/registry.js +253 -0
  50. package/dist/generators/registry.js.map +1 -0
  51. package/dist/generators/templates/migration.d.ts +23 -0
  52. package/dist/generators/templates/migration.d.ts.map +1 -0
  53. package/dist/generators/templates/migration.js +389 -0
  54. package/dist/generators/templates/migration.js.map +1 -0
  55. package/dist/generators/templates/model.d.ts +37 -0
  56. package/dist/generators/templates/model.d.ts.map +1 -0
  57. package/dist/generators/templates/model.js +374 -0
  58. package/dist/generators/templates/model.js.map +1 -0
  59. package/dist/generators/templates/procedure.d.ts +25 -0
  60. package/dist/generators/templates/procedure.d.ts.map +1 -0
  61. package/dist/generators/templates/procedure.js +274 -0
  62. package/dist/generators/templates/procedure.js.map +1 -0
  63. package/dist/generators/templates/resource.d.ts +34 -0
  64. package/dist/generators/templates/resource.d.ts.map +1 -0
  65. package/dist/generators/templates/resource.js +550 -0
  66. package/dist/generators/templates/resource.js.map +1 -0
  67. package/dist/generators/templates/schema.d.ts +33 -0
  68. package/dist/generators/templates/schema.d.ts.map +1 -0
  69. package/dist/generators/templates/schema.js +248 -0
  70. package/dist/generators/templates/schema.js.map +1 -0
  71. package/dist/generators/templates/test.d.ts +31 -0
  72. package/dist/generators/templates/test.d.ts.map +1 -0
  73. package/dist/generators/templates/test.js +882 -0
  74. package/dist/generators/templates/test.js.map +1 -0
  75. package/dist/generators/types.d.ts +211 -0
  76. package/dist/generators/types.d.ts.map +1 -0
  77. package/dist/generators/types.js +54 -0
  78. package/dist/generators/types.js.map +1 -0
  79. package/dist/generators/utils/filesystem.d.ts +68 -0
  80. package/dist/generators/utils/filesystem.d.ts.map +1 -0
  81. package/dist/generators/utils/filesystem.js +217 -0
  82. package/dist/generators/utils/filesystem.js.map +1 -0
  83. package/dist/generators/utils/naming.d.ts +122 -0
  84. package/dist/generators/utils/naming.d.ts.map +1 -0
  85. package/dist/generators/utils/naming.js +198 -0
  86. package/dist/generators/utils/naming.js.map +1 -0
  87. package/dist/index.d.ts +4 -0
  88. package/dist/index.d.ts.map +1 -1
  89. package/dist/index.js +4 -0
  90. package/dist/index.js.map +1 -1
  91. package/dist/migrations/commands/fresh.d.ts +11 -0
  92. package/dist/migrations/commands/fresh.d.ts.map +1 -0
  93. package/dist/migrations/commands/fresh.js +164 -0
  94. package/dist/migrations/commands/fresh.js.map +1 -0
  95. package/dist/migrations/commands/index.d.ts +11 -0
  96. package/dist/migrations/commands/index.d.ts.map +1 -0
  97. package/dist/migrations/commands/index.js +11 -0
  98. package/dist/migrations/commands/index.js.map +1 -0
  99. package/dist/migrations/commands/reset.d.ts +11 -0
  100. package/dist/migrations/commands/reset.d.ts.map +1 -0
  101. package/dist/migrations/commands/reset.js +258 -0
  102. package/dist/migrations/commands/reset.js.map +1 -0
  103. package/dist/migrations/commands/rollback.d.ts +11 -0
  104. package/dist/migrations/commands/rollback.d.ts.map +1 -0
  105. package/dist/migrations/commands/rollback.js +241 -0
  106. package/dist/migrations/commands/rollback.js.map +1 -0
  107. package/dist/migrations/commands/run.d.ts +11 -0
  108. package/dist/migrations/commands/run.d.ts.map +1 -0
  109. package/dist/migrations/commands/run.js +183 -0
  110. package/dist/migrations/commands/run.js.map +1 -0
  111. package/dist/migrations/commands/status.d.ts +11 -0
  112. package/dist/migrations/commands/status.d.ts.map +1 -0
  113. package/dist/migrations/commands/status.js +154 -0
  114. package/dist/migrations/commands/status.js.map +1 -0
  115. package/dist/migrations/errors.d.ts +74 -0
  116. package/dist/migrations/errors.d.ts.map +1 -0
  117. package/dist/migrations/errors.js +155 -0
  118. package/dist/migrations/errors.js.map +1 -0
  119. package/dist/migrations/index.d.ts +13 -0
  120. package/dist/migrations/index.d.ts.map +1 -0
  121. package/dist/migrations/index.js +17 -0
  122. package/dist/migrations/index.js.map +1 -0
  123. package/dist/migrations/loader.d.ts +44 -0
  124. package/dist/migrations/loader.d.ts.map +1 -0
  125. package/dist/migrations/loader.js +181 -0
  126. package/dist/migrations/loader.js.map +1 -0
  127. package/dist/migrations/prisma-wrapper.d.ts +60 -0
  128. package/dist/migrations/prisma-wrapper.d.ts.map +1 -0
  129. package/dist/migrations/prisma-wrapper.js +184 -0
  130. package/dist/migrations/prisma-wrapper.js.map +1 -0
  131. package/dist/migrations/rollback-runner.d.ts +40 -0
  132. package/dist/migrations/rollback-runner.d.ts.map +1 -0
  133. package/dist/migrations/rollback-runner.js +191 -0
  134. package/dist/migrations/rollback-runner.js.map +1 -0
  135. package/dist/migrations/types.d.ts +214 -0
  136. package/dist/migrations/types.d.ts.map +1 -0
  137. package/dist/migrations/types.js +19 -0
  138. package/dist/migrations/types.js.map +1 -0
  139. package/package.json +29 -8
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/migrations/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,WAAW;AACX,OAAO,EACL,yBAAyB,EACzB,yBAAyB,EACzB,4BAA4B,EAC5B,uBAAuB,EACvB,0BAA0B,GAC3B,MAAM,qBAAqB,CAAC;AAC7B,SAAS;AACT,OAAO,EACL,gBAAgB,EAChB,aAAa,EACb,cAAc,EAEd,iBAAiB,EACjB,qBAAqB,EACrB,mBAAmB,EACnB,mBAAmB,EACnB,cAAc,EACd,WAAW,EACX,cAAc,EACd,cAAc,GACf,MAAM,aAAa,CAAC;AACrB,SAAS;AACT,OAAO,EACL,sBAAsB,EACtB,uBAAuB,EACvB,gCAAgC,EAChC,kBAAkB,EAClB,oBAAoB,EACpB,cAAc,EACd,mBAAmB,EACnB,gBAAgB,GACjB,MAAM,aAAa,CAAC;AACrB,iBAAiB;AACjB,OAAO,EACL,iBAAiB,EAEjB,wBAAwB,EACxB,YAAY,EACZ,YAAY,EACZ,mBAAmB,EACnB,gBAAgB,EAChB,kBAAkB,EAClB,mBAAmB,EACnB,gBAAgB,EAChB,2BAA2B,GAC5B,MAAM,qBAAqB,CAAC;AAC7B,kBAAkB;AAClB,OAAO,EACL,0BAA0B,EAC1B,oBAAoB,EAEpB,WAAW,EACX,iBAAiB,EACjB,gBAAgB,GACjB,MAAM,sBAAsB,CAAC;AAmB9B,OAAO,EAAE,kBAAkB,EAAE,MAAM,YAAY,CAAC"}
@@ -0,0 +1,44 @@
1
+ /**
2
+ * Migration Loader
3
+ *
4
+ * Loads migration files from the filesystem.
5
+ */
6
+ import type { MigrationFile, MigrationStatus, PrismaMigrationRecord } from './types.js';
7
+ /** Default migrations directory (relative to project root) */
8
+ export declare const DEFAULT_MIGRATIONS_PATH = "prisma/migrations";
9
+ /**
10
+ * Load all migrations from the migrations directory
11
+ */
12
+ export declare function loadMigrations(cwd: string, migrationsPath?: string): Promise<MigrationFile[]>;
13
+ /**
14
+ * Get a migration by name
15
+ */
16
+ export declare function getMigrationByName(cwd: string, name: string, migrationsPath?: string): Promise<MigrationFile>;
17
+ /**
18
+ * Read migration SQL content
19
+ */
20
+ export declare function readMigrationSql(migration: MigrationFile): Promise<{
21
+ up: string;
22
+ down: string | null;
23
+ }>;
24
+ /**
25
+ * Query to get applied migrations from _prisma_migrations table
26
+ */
27
+ export declare const GET_APPLIED_MIGRATIONS_SQL = "\n SELECT * FROM \"_prisma_migrations\"\n WHERE \"finished_at\" IS NOT NULL\n ORDER BY \"started_at\" ASC\n";
28
+ /**
29
+ * Compute migration status by comparing files with database records
30
+ */
31
+ export declare function computeMigrationStatus(files: MigrationFile[], records: PrismaMigrationRecord[]): MigrationStatus[];
32
+ /**
33
+ * Get pending migrations
34
+ */
35
+ export declare function getPendingMigrations(files: MigrationFile[], records: PrismaMigrationRecord[]): MigrationFile[];
36
+ /**
37
+ * Get applied migrations with rollback capability
38
+ */
39
+ export declare function getAppliedMigrationsWithRollback(files: MigrationFile[], records: PrismaMigrationRecord[]): MigrationFile[];
40
+ /**
41
+ * Check if migrations directory exists
42
+ */
43
+ export declare function migrationsDirExists(cwd: string, migrationsPath?: string): Promise<boolean>;
44
+ //# sourceMappingURL=loader.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"loader.d.ts","sourceRoot":"","sources":["../../src/migrations/loader.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAMH,OAAO,KAAK,EAAE,aAAa,EAAE,eAAe,EAAE,qBAAqB,EAAE,MAAM,YAAY,CAAC;AAMxF,8DAA8D;AAC9D,eAAO,MAAM,uBAAuB,sBAAsB,CAAC;AAe3D;;GAEG;AACH,wBAAsB,cAAc,CAClC,GAAG,EAAE,MAAM,EACX,cAAc,SAA0B,GACvC,OAAO,CAAC,aAAa,EAAE,CAAC,CAkE1B;AAED;;GAEG;AACH,wBAAsB,kBAAkB,CACtC,GAAG,EAAE,MAAM,EACX,IAAI,EAAE,MAAM,EACZ,cAAc,SAA0B,GACvC,OAAO,CAAC,aAAa,CAAC,CASxB;AAED;;GAEG;AACH,wBAAsB,gBAAgB,CACpC,SAAS,EAAE,aAAa,GACvB,OAAO,CAAC;IAAE,EAAE,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,GAAG,IAAI,CAAA;CAAE,CAAC,CAK9C;AAMD;;GAEG;AACH,eAAO,MAAM,0BAA0B,mHAItC,CAAC;AAMF;;GAEG;AACH,wBAAgB,sBAAsB,CACpC,KAAK,EAAE,aAAa,EAAE,EACtB,OAAO,EAAE,qBAAqB,EAAE,GAC/B,eAAe,EAAE,CAsCnB;AAED;;GAEG;AACH,wBAAgB,oBAAoB,CAClC,KAAK,EAAE,aAAa,EAAE,EACtB,OAAO,EAAE,qBAAqB,EAAE,GAC/B,aAAa,EAAE,CAGjB;AAED;;GAEG;AACH,wBAAgB,gCAAgC,CAC9C,KAAK,EAAE,aAAa,EAAE,EACtB,OAAO,EAAE,qBAAqB,EAAE,GAC/B,aAAa,EAAE,CAGjB;AAED;;GAEG;AACH,wBAAsB,mBAAmB,CACvC,GAAG,EAAE,MAAM,EACX,cAAc,SAA0B,GACvC,OAAO,CAAC,OAAO,CAAC,CAOlB"}
@@ -0,0 +1,181 @@
1
+ /**
2
+ * Migration Loader
3
+ *
4
+ * Loads migration files from the filesystem.
5
+ */
6
+ import fs from 'node:fs/promises';
7
+ import path from 'node:path';
8
+ import { migrationNotFound, migrationsDirNotFound } from './errors.js';
9
+ // ============================================================================
10
+ // Constants
11
+ // ============================================================================
12
+ /** Default migrations directory (relative to project root) */
13
+ export const DEFAULT_MIGRATIONS_PATH = 'prisma/migrations';
14
+ /** Migration SQL file name */
15
+ const MIGRATION_FILE = 'migration.sql';
16
+ /** Rollback SQL file name */
17
+ const DOWN_FILE = 'down.sql';
18
+ /** Migration folder pattern: timestamp_description */
19
+ const MIGRATION_PATTERN = /^(\d{14})_(.+)$/;
20
+ // ============================================================================
21
+ // File Loading
22
+ // ============================================================================
23
+ /**
24
+ * Load all migrations from the migrations directory
25
+ */
26
+ export async function loadMigrations(cwd, migrationsPath = DEFAULT_MIGRATIONS_PATH) {
27
+ const fullPath = path.join(cwd, migrationsPath);
28
+ // Check if directory exists
29
+ try {
30
+ await fs.access(fullPath);
31
+ }
32
+ catch {
33
+ throw migrationsDirNotFound(fullPath);
34
+ }
35
+ // Read directory contents
36
+ const entries = await fs.readdir(fullPath, { withFileTypes: true });
37
+ const migrations = [];
38
+ for (const entry of entries) {
39
+ // Skip non-directories and migration_lock.toml
40
+ if (!entry.isDirectory()) {
41
+ continue;
42
+ }
43
+ // Parse migration name
44
+ const match = MIGRATION_PATTERN.exec(entry.name);
45
+ if (!match) {
46
+ continue; // Skip folders that don't match pattern
47
+ }
48
+ const [, timestamp, description] = match;
49
+ const migrationDir = path.join(fullPath, entry.name);
50
+ // Check for migration.sql
51
+ const upPath = path.join(migrationDir, MIGRATION_FILE);
52
+ const downPath = path.join(migrationDir, DOWN_FILE);
53
+ let hasUp = false;
54
+ let hasDown = false;
55
+ try {
56
+ await fs.access(upPath);
57
+ hasUp = true;
58
+ }
59
+ catch {
60
+ // No migration.sql
61
+ }
62
+ try {
63
+ await fs.access(downPath);
64
+ hasDown = true;
65
+ }
66
+ catch {
67
+ // No down.sql
68
+ }
69
+ // Only include if has migration.sql
70
+ if (hasUp) {
71
+ migrations.push({
72
+ name: entry.name,
73
+ timestamp,
74
+ description,
75
+ upPath,
76
+ downPath: hasDown ? downPath : null,
77
+ hasRollback: hasDown,
78
+ });
79
+ }
80
+ }
81
+ // Sort by timestamp (ascending)
82
+ return migrations.sort((a, b) => a.timestamp.localeCompare(b.timestamp));
83
+ }
84
+ /**
85
+ * Get a migration by name
86
+ */
87
+ export async function getMigrationByName(cwd, name, migrationsPath = DEFAULT_MIGRATIONS_PATH) {
88
+ const migrations = await loadMigrations(cwd, migrationsPath);
89
+ const migration = migrations.find((m) => m.name === name);
90
+ if (!migration) {
91
+ throw migrationNotFound(name);
92
+ }
93
+ return migration;
94
+ }
95
+ /**
96
+ * Read migration SQL content
97
+ */
98
+ export async function readMigrationSql(migration) {
99
+ const up = await fs.readFile(migration.upPath, 'utf-8');
100
+ const down = migration.downPath ? await fs.readFile(migration.downPath, 'utf-8') : null;
101
+ return { up, down };
102
+ }
103
+ // ============================================================================
104
+ // Database Query Helpers
105
+ // ============================================================================
106
+ /**
107
+ * Query to get applied migrations from _prisma_migrations table
108
+ */
109
+ export const GET_APPLIED_MIGRATIONS_SQL = `
110
+ SELECT * FROM "_prisma_migrations"
111
+ WHERE "finished_at" IS NOT NULL
112
+ ORDER BY "started_at" ASC
113
+ `;
114
+ // ============================================================================
115
+ // Status Computation
116
+ // ============================================================================
117
+ /**
118
+ * Compute migration status by comparing files with database records
119
+ */
120
+ export function computeMigrationStatus(files, records) {
121
+ // Create a map of applied migrations
122
+ const appliedMap = new Map();
123
+ for (const record of records) {
124
+ appliedMap.set(record.migration_name, record);
125
+ }
126
+ const statuses = [];
127
+ for (const file of files) {
128
+ const record = appliedMap.get(file.name);
129
+ if (record) {
130
+ // Migration is applied
131
+ const status = {
132
+ name: file.name,
133
+ status: record.finished_at ? 'applied' : 'failed',
134
+ appliedAt: record.finished_at,
135
+ hasRollback: file.hasRollback,
136
+ duration: record.finished_at && record.started_at
137
+ ? new Date(record.finished_at).getTime() - new Date(record.started_at).getTime()
138
+ : null,
139
+ };
140
+ statuses.push(status);
141
+ }
142
+ else {
143
+ // Migration is pending
144
+ statuses.push({
145
+ name: file.name,
146
+ status: 'pending',
147
+ appliedAt: null,
148
+ hasRollback: file.hasRollback,
149
+ duration: null,
150
+ });
151
+ }
152
+ }
153
+ return statuses;
154
+ }
155
+ /**
156
+ * Get pending migrations
157
+ */
158
+ export function getPendingMigrations(files, records) {
159
+ const appliedNames = new Set(records.map((r) => r.migration_name));
160
+ return files.filter((f) => !appliedNames.has(f.name));
161
+ }
162
+ /**
163
+ * Get applied migrations with rollback capability
164
+ */
165
+ export function getAppliedMigrationsWithRollback(files, records) {
166
+ const appliedNames = new Set(records.map((r) => r.migration_name));
167
+ return files.filter((f) => appliedNames.has(f.name)).reverse(); // Most recent first for rollback order
168
+ }
169
+ /**
170
+ * Check if migrations directory exists
171
+ */
172
+ export async function migrationsDirExists(cwd, migrationsPath = DEFAULT_MIGRATIONS_PATH) {
173
+ try {
174
+ await fs.access(path.join(cwd, migrationsPath));
175
+ return true;
176
+ }
177
+ catch {
178
+ return false;
179
+ }
180
+ }
181
+ //# sourceMappingURL=loader.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"loader.js","sourceRoot":"","sources":["../../src/migrations/loader.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,60 @@
1
+ /**
2
+ * Prisma CLI Wrapper
3
+ *
4
+ * Executes Prisma CLI commands programmatically and parses output.
5
+ */
6
+ import type { PrismaResult } from './types.js';
7
+ /**
8
+ * Execute a Prisma CLI command
9
+ */
10
+ export declare function runPrismaCommand(command: string[], cwd: string): Promise<PrismaResult>;
11
+ /**
12
+ * Execute a Prisma CLI command with inherited stdio (shows output in terminal)
13
+ */
14
+ export declare function runPrismaCommandInteractive(command: string[], cwd: string): Promise<PrismaResult>;
15
+ /**
16
+ * Run `prisma migrate status`
17
+ */
18
+ export declare function prismaMigrateStatus(cwd: string): Promise<PrismaResult>;
19
+ /**
20
+ * Run `prisma migrate deploy` (production)
21
+ */
22
+ export declare function prismaMigrateDeploy(cwd: string): Promise<PrismaResult>;
23
+ /**
24
+ * Run `prisma migrate dev` (development)
25
+ */
26
+ export declare function prismaMigrateDev(cwd: string, name?: string): Promise<PrismaResult>;
27
+ /**
28
+ * Run `prisma migrate reset` (drop all + re-run)
29
+ */
30
+ export declare function prismaMigrateReset(cwd: string, force?: boolean): Promise<PrismaResult>;
31
+ /**
32
+ * Run `prisma db push` (sync schema without migrations)
33
+ */
34
+ export declare function prismaDbPush(cwd: string, skipGenerate?: boolean): Promise<PrismaResult>;
35
+ /**
36
+ * Run `prisma db seed`
37
+ */
38
+ export declare function prismaDbSeed(cwd: string): Promise<PrismaResult>;
39
+ /**
40
+ * Parse migration status from Prisma output
41
+ */
42
+ export interface ParsedMigrationStatus {
43
+ /** List of applied migrations */
44
+ applied: string[];
45
+ /** List of pending migrations */
46
+ pending: string[];
47
+ /** Whether database is in sync */
48
+ inSync: boolean;
49
+ /** Any warnings from Prisma */
50
+ warnings: string[];
51
+ }
52
+ /**
53
+ * Parse the output of `prisma migrate status`
54
+ */
55
+ export declare function parseMigrateStatusOutput(output: string): ParsedMigrationStatus;
56
+ /**
57
+ * Check if Prisma is installed and available
58
+ */
59
+ export declare function isPrismaAvailable(cwd: string): Promise<boolean>;
60
+ //# sourceMappingURL=prisma-wrapper.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"prisma-wrapper.d.ts","sourceRoot":"","sources":["../../src/migrations/prisma-wrapper.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAIH,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAM/C;;GAEG;AACH,wBAAsB,gBAAgB,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,YAAY,CAAC,CAuC5F;AAED;;GAEG;AACH,wBAAsB,2BAA2B,CAC/C,OAAO,EAAE,MAAM,EAAE,EACjB,GAAG,EAAE,MAAM,GACV,OAAO,CAAC,YAAY,CAAC,CA8BvB;AAMD;;GAEG;AACH,wBAAsB,mBAAmB,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,YAAY,CAAC,CAE5E;AAED;;GAEG;AACH,wBAAsB,mBAAmB,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,YAAY,CAAC,CAE5E;AAED;;GAEG;AACH,wBAAsB,gBAAgB,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,YAAY,CAAC,CAMxF;AAED;;GAEG;AACH,wBAAsB,kBAAkB,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,UAAQ,GAAG,OAAO,CAAC,YAAY,CAAC,CAM1F;AAED;;GAEG;AACH,wBAAsB,YAAY,CAAC,GAAG,EAAE,MAAM,EAAE,YAAY,UAAQ,GAAG,OAAO,CAAC,YAAY,CAAC,CAM3F;AAED;;GAEG;AACH,wBAAsB,YAAY,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,YAAY,CAAC,CAErE;AAMD;;GAEG;AACH,MAAM,WAAW,qBAAqB;IACpC,iCAAiC;IACjC,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,iCAAiC;IACjC,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,kCAAkC;IAClC,MAAM,EAAE,OAAO,CAAC;IAChB,+BAA+B;IAC/B,QAAQ,EAAE,MAAM,EAAE,CAAC;CACpB;AAED;;GAEG;AACH,wBAAgB,wBAAwB,CAAC,MAAM,EAAE,MAAM,GAAG,qBAAqB,CAmD9E;AAED;;GAEG;AACH,wBAAsB,iBAAiB,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAGrE"}
@@ -0,0 +1,184 @@
1
+ /**
2
+ * Prisma CLI Wrapper
3
+ *
4
+ * Executes Prisma CLI commands programmatically and parses output.
5
+ */
6
+ import { spawn } from 'node:child_process';
7
+ // ============================================================================
8
+ // Core Execution
9
+ // ============================================================================
10
+ /**
11
+ * Execute a Prisma CLI command
12
+ */
13
+ export async function runPrismaCommand(command, cwd) {
14
+ return new Promise((resolve) => {
15
+ const fullCommand = ['prisma', ...command];
16
+ let stdout = '';
17
+ let stderr = '';
18
+ const prismaProcess = spawn('npx', fullCommand, {
19
+ cwd,
20
+ shell: true,
21
+ env: process.env,
22
+ });
23
+ prismaProcess.stdout?.on('data', (data) => {
24
+ stdout += data.toString();
25
+ });
26
+ prismaProcess.stderr?.on('data', (data) => {
27
+ stderr += data.toString();
28
+ });
29
+ prismaProcess.on('error', (err) => {
30
+ resolve({
31
+ success: false,
32
+ output: stdout,
33
+ error: err.message,
34
+ exitCode: 1,
35
+ });
36
+ });
37
+ prismaProcess.on('close', (code) => {
38
+ const exitCode = code ?? 1;
39
+ resolve({
40
+ success: exitCode === 0,
41
+ output: stdout,
42
+ error: exitCode !== 0 ? stderr || stdout : undefined,
43
+ exitCode,
44
+ });
45
+ });
46
+ });
47
+ }
48
+ /**
49
+ * Execute a Prisma CLI command with inherited stdio (shows output in terminal)
50
+ */
51
+ export async function runPrismaCommandInteractive(command, cwd) {
52
+ return new Promise((resolve) => {
53
+ const fullCommand = ['prisma', ...command];
54
+ const prismaProcess = spawn('npx', fullCommand, {
55
+ cwd,
56
+ shell: true,
57
+ env: process.env,
58
+ stdio: 'inherit',
59
+ });
60
+ prismaProcess.on('error', (err) => {
61
+ resolve({
62
+ success: false,
63
+ output: '',
64
+ error: err.message,
65
+ exitCode: 1,
66
+ });
67
+ });
68
+ prismaProcess.on('close', (code) => {
69
+ const exitCode = code ?? 1;
70
+ resolve({
71
+ success: exitCode === 0,
72
+ output: '',
73
+ error: exitCode !== 0 ? `Prisma exited with code ${exitCode}` : undefined,
74
+ exitCode,
75
+ });
76
+ });
77
+ });
78
+ }
79
+ // ============================================================================
80
+ // Specific Commands
81
+ // ============================================================================
82
+ /**
83
+ * Run `prisma migrate status`
84
+ */
85
+ export async function prismaMigrateStatus(cwd) {
86
+ return runPrismaCommand(['migrate', 'status'], cwd);
87
+ }
88
+ /**
89
+ * Run `prisma migrate deploy` (production)
90
+ */
91
+ export async function prismaMigrateDeploy(cwd) {
92
+ return runPrismaCommandInteractive(['migrate', 'deploy'], cwd);
93
+ }
94
+ /**
95
+ * Run `prisma migrate dev` (development)
96
+ */
97
+ export async function prismaMigrateDev(cwd, name) {
98
+ const args = ['migrate', 'dev'];
99
+ if (name) {
100
+ args.push('--name', name);
101
+ }
102
+ return runPrismaCommandInteractive(args, cwd);
103
+ }
104
+ /**
105
+ * Run `prisma migrate reset` (drop all + re-run)
106
+ */
107
+ export async function prismaMigrateReset(cwd, force = false) {
108
+ const args = ['migrate', 'reset'];
109
+ if (force) {
110
+ args.push('--force');
111
+ }
112
+ return runPrismaCommandInteractive(args, cwd);
113
+ }
114
+ /**
115
+ * Run `prisma db push` (sync schema without migrations)
116
+ */
117
+ export async function prismaDbPush(cwd, skipGenerate = false) {
118
+ const args = ['db', 'push'];
119
+ if (skipGenerate) {
120
+ args.push('--skip-generate');
121
+ }
122
+ return runPrismaCommandInteractive(args, cwd);
123
+ }
124
+ /**
125
+ * Run `prisma db seed`
126
+ */
127
+ export async function prismaDbSeed(cwd) {
128
+ return runPrismaCommandInteractive(['db', 'seed'], cwd);
129
+ }
130
+ /**
131
+ * Parse the output of `prisma migrate status`
132
+ */
133
+ export function parseMigrateStatusOutput(output) {
134
+ const applied = [];
135
+ const pending = [];
136
+ const warnings = [];
137
+ const lines = output.split('\n');
138
+ let inAppliedSection = false;
139
+ let inPendingSection = false;
140
+ for (const line of lines) {
141
+ const trimmed = line.trim();
142
+ // Detect sections - check pending first since "not yet applied" also contains "applied"
143
+ if (trimmed.includes('following migration') && trimmed.includes('not yet applied')) {
144
+ inAppliedSection = false;
145
+ inPendingSection = true;
146
+ continue;
147
+ }
148
+ if (trimmed.includes('following migration') &&
149
+ trimmed.includes('applied') &&
150
+ !trimmed.includes('not yet')) {
151
+ inAppliedSection = true;
152
+ inPendingSection = false;
153
+ continue;
154
+ }
155
+ // Parse migration names (they typically start with a timestamp)
156
+ const migrationMatch = trimmed.match(/^(\d{14}_\S+)/);
157
+ if (migrationMatch) {
158
+ if (inAppliedSection) {
159
+ applied.push(migrationMatch[1]);
160
+ }
161
+ else if (inPendingSection) {
162
+ pending.push(migrationMatch[1]);
163
+ }
164
+ }
165
+ // Detect warnings
166
+ if (trimmed.toLowerCase().includes('warning')) {
167
+ warnings.push(trimmed);
168
+ }
169
+ }
170
+ return {
171
+ applied,
172
+ pending,
173
+ inSync: pending.length === 0,
174
+ warnings,
175
+ };
176
+ }
177
+ /**
178
+ * Check if Prisma is installed and available
179
+ */
180
+ export async function isPrismaAvailable(cwd) {
181
+ const result = await runPrismaCommand(['--version'], cwd);
182
+ return result.success;
183
+ }
184
+ //# sourceMappingURL=prisma-wrapper.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"prisma-wrapper.js","sourceRoot":"","sources":["../../src/migrations/prisma-wrapper.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,40 @@
1
+ /**
2
+ * Rollback Runner
3
+ *
4
+ * Custom rollback execution using down.sql files.
5
+ */
6
+ import type { BatchRollbackResult, DatabaseType, MigrationFile, PrismaClientLike, RollbackResult } from './types.js';
7
+ /**
8
+ * Options for rollback execution
9
+ */
10
+ export interface RollbackOptions {
11
+ /** Dry run mode - don't execute, just report */
12
+ dryRun?: boolean;
13
+ /** Database type for SQL dialect */
14
+ database?: DatabaseType;
15
+ }
16
+ /**
17
+ * Rollback a single migration
18
+ */
19
+ export declare function rollbackMigration(prisma: PrismaClientLike, migration: MigrationFile, options?: RollbackOptions): Promise<RollbackResult>;
20
+ /**
21
+ * Rollback multiple migrations in order (most recent first)
22
+ */
23
+ export declare function rollbackMultiple(prisma: PrismaClientLike, migrations: MigrationFile[], options?: RollbackOptions): Promise<BatchRollbackResult>;
24
+ /**
25
+ * Rollback all migrations
26
+ */
27
+ export declare function rollbackAll(prisma: PrismaClientLike, migrations: MigrationFile[], options?: RollbackOptions): Promise<BatchRollbackResult>;
28
+ /**
29
+ * Get applied migrations from the database
30
+ */
31
+ export declare function getAppliedMigrations(prisma: PrismaClientLike): Promise<{
32
+ migration_name: string;
33
+ started_at: Date;
34
+ finished_at: Date | null;
35
+ }[]>;
36
+ /**
37
+ * Check if _prisma_migrations table exists
38
+ */
39
+ export declare function checkMigrationsTableExists(prisma: PrismaClientLike, database?: DatabaseType): Promise<boolean>;
40
+ //# sourceMappingURL=rollback-runner.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"rollback-runner.d.ts","sourceRoot":"","sources":["../../src/migrations/rollback-runner.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAKH,OAAO,KAAK,EACV,mBAAmB,EACnB,YAAY,EACZ,aAAa,EACb,gBAAgB,EAChB,cAAc,EACf,MAAM,YAAY,CAAC;AAMpB;;GAEG;AACH,MAAM,WAAW,eAAe;IAC9B,gDAAgD;IAChD,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,oCAAoC;IACpC,QAAQ,CAAC,EAAE,YAAY,CAAC;CACzB;AAMD;;GAEG;AACH,wBAAsB,iBAAiB,CACrC,MAAM,EAAE,gBAAgB,EACxB,SAAS,EAAE,aAAa,EACxB,OAAO,GAAE,eAAoB,GAC5B,OAAO,CAAC,cAAc,CAAC,CA+CzB;AAMD;;GAEG;AACH,wBAAsB,gBAAgB,CACpC,MAAM,EAAE,gBAAgB,EACxB,UAAU,EAAE,aAAa,EAAE,EAC3B,OAAO,GAAE,eAAoB,GAC5B,OAAO,CAAC,mBAAmB,CAAC,CAoC9B;AAED;;GAEG;AACH,wBAAsB,WAAW,CAC/B,MAAM,EAAE,gBAAgB,EACxB,UAAU,EAAE,aAAa,EAAE,EAC3B,OAAO,GAAE,eAAoB,GAC5B,OAAO,CAAC,mBAAmB,CAAC,CAE9B;AAMD;;GAEG;AACH,wBAAsB,oBAAoB,CACxC,MAAM,EAAE,gBAAgB,GACvB,OAAO,CAAC;IAAE,cAAc,EAAE,MAAM,CAAC;IAAC,UAAU,EAAE,IAAI,CAAC;IAAC,WAAW,EAAE,IAAI,GAAG,IAAI,CAAA;CAAE,EAAE,CAAC,CAcnF;AAED;;GAEG;AACH,wBAAsB,0BAA0B,CAC9C,MAAM,EAAE,gBAAgB,EACxB,QAAQ,GAAE,YAA2B,GACpC,OAAO,CAAC,OAAO,CAAC,CAsBlB"}