@veloxts/cli 0.4.14 → 0.6.23

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (203) hide show
  1. package/README.md +2 -48
  2. package/dist/cli.d.ts +5 -1
  3. package/dist/cli.d.ts.map +1 -1
  4. package/dist/cli.js +7 -1
  5. package/dist/cli.js.map +1 -1
  6. package/dist/commands/dev.d.ts.map +1 -1
  7. package/dist/commands/dev.js +71 -7
  8. package/dist/commands/dev.js.map +1 -1
  9. package/dist/commands/introspect.d.ts +16 -0
  10. package/dist/commands/introspect.d.ts.map +1 -0
  11. package/dist/commands/introspect.js +559 -0
  12. package/dist/commands/introspect.js.map +1 -0
  13. package/dist/commands/make.d.ts.map +1 -1
  14. package/dist/commands/make.js +18 -8
  15. package/dist/commands/make.js.map +1 -1
  16. package/dist/commands/procedures.d.ts.map +1 -1
  17. package/dist/commands/procedures.js +16 -0
  18. package/dist/commands/procedures.js.map +1 -1
  19. package/dist/dev/error-parser.d.ts.map +1 -1
  20. package/dist/dev/error-parser.js +24 -8
  21. package/dist/dev/error-parser.js.map +1 -1
  22. package/dist/dev/hmr-runner.d.ts.map +1 -1
  23. package/dist/dev/hmr-runner.js +6 -1
  24. package/dist/dev/hmr-runner.js.map +1 -1
  25. package/dist/dev/index.d.ts +3 -3
  26. package/dist/dev/index.d.ts.map +1 -1
  27. package/dist/dev/index.js +3 -3
  28. package/dist/dev/index.js.map +1 -1
  29. package/dist/dev/reload-reporter.d.ts +2 -2
  30. package/dist/dev/reload-reporter.d.ts.map +1 -1
  31. package/dist/dev/reload-reporter.js +2 -2
  32. package/dist/dev/reload-reporter.js.map +1 -1
  33. package/dist/errors/catalog.d.ts +48 -0
  34. package/dist/errors/catalog.d.ts.map +1 -0
  35. package/dist/errors/catalog.js +421 -0
  36. package/dist/errors/catalog.js.map +1 -0
  37. package/dist/errors/index.d.ts +26 -0
  38. package/dist/errors/index.d.ts.map +1 -0
  39. package/dist/errors/index.js +28 -0
  40. package/dist/errors/index.js.map +1 -0
  41. package/dist/errors/velox-error.d.ts +122 -0
  42. package/dist/errors/velox-error.d.ts.map +1 -0
  43. package/dist/errors/velox-error.js +216 -0
  44. package/dist/errors/velox-error.js.map +1 -0
  45. package/dist/generators/base.d.ts.map +1 -1
  46. package/dist/generators/base.js +26 -0
  47. package/dist/generators/base.js.map +1 -1
  48. package/dist/generators/fields/__tests__/helpers.d.ts +66 -0
  49. package/dist/generators/fields/__tests__/helpers.d.ts.map +1 -0
  50. package/dist/generators/fields/__tests__/helpers.js +142 -0
  51. package/dist/generators/fields/__tests__/helpers.js.map +1 -0
  52. package/dist/generators/fields/actions.d.ts +58 -0
  53. package/dist/generators/fields/actions.d.ts.map +1 -0
  54. package/dist/generators/fields/actions.js +230 -0
  55. package/dist/generators/fields/actions.js.map +1 -0
  56. package/dist/generators/fields/display.d.ts +28 -0
  57. package/dist/generators/fields/display.d.ts.map +1 -0
  58. package/dist/generators/fields/display.js +214 -0
  59. package/dist/generators/fields/display.js.map +1 -0
  60. package/dist/generators/fields/index.d.ts +12 -0
  61. package/dist/generators/fields/index.d.ts.map +1 -0
  62. package/dist/generators/fields/index.js +12 -0
  63. package/dist/generators/fields/index.js.map +1 -0
  64. package/dist/generators/fields/prompts.d.ts +31 -0
  65. package/dist/generators/fields/prompts.d.ts.map +1 -0
  66. package/dist/generators/fields/prompts.js +366 -0
  67. package/dist/generators/fields/prompts.js.map +1 -0
  68. package/dist/generators/fields/templates.d.ts +49 -0
  69. package/dist/generators/fields/templates.d.ts.map +1 -0
  70. package/dist/generators/fields/templates.js +230 -0
  71. package/dist/generators/fields/templates.js.map +1 -0
  72. package/dist/generators/fields/types.d.ts +95 -0
  73. package/dist/generators/fields/types.d.ts.map +1 -0
  74. package/dist/generators/fields/types.js +150 -0
  75. package/dist/generators/fields/types.js.map +1 -0
  76. package/dist/generators/generators/action.d.ts +37 -0
  77. package/dist/generators/generators/action.d.ts.map +1 -0
  78. package/dist/generators/generators/action.js +109 -0
  79. package/dist/generators/generators/action.js.map +1 -0
  80. package/dist/generators/generators/exception.d.ts +38 -0
  81. package/dist/generators/generators/exception.d.ts.map +1 -0
  82. package/dist/generators/generators/exception.js +109 -0
  83. package/dist/generators/generators/exception.js.map +1 -0
  84. package/dist/generators/generators/guard.d.ts +38 -0
  85. package/dist/generators/generators/guard.d.ts.map +1 -0
  86. package/dist/generators/generators/guard.js +109 -0
  87. package/dist/generators/generators/guard.js.map +1 -0
  88. package/dist/generators/generators/index.d.ts +8 -0
  89. package/dist/generators/generators/index.d.ts.map +1 -1
  90. package/dist/generators/generators/index.js +27 -0
  91. package/dist/generators/generators/index.js.map +1 -1
  92. package/dist/generators/generators/layout.d.ts +36 -0
  93. package/dist/generators/generators/layout.d.ts.map +1 -0
  94. package/dist/generators/generators/layout.js +111 -0
  95. package/dist/generators/generators/layout.js.map +1 -0
  96. package/dist/generators/generators/middleware.d.ts +38 -0
  97. package/dist/generators/generators/middleware.d.ts.map +1 -0
  98. package/dist/generators/generators/middleware.js +109 -0
  99. package/dist/generators/generators/middleware.js.map +1 -0
  100. package/dist/generators/generators/model.d.ts +16 -4
  101. package/dist/generators/generators/model.d.ts.map +1 -1
  102. package/dist/generators/generators/model.js +88 -7
  103. package/dist/generators/generators/model.js.map +1 -1
  104. package/dist/generators/generators/page.d.ts +36 -0
  105. package/dist/generators/generators/page.d.ts.map +1 -0
  106. package/dist/generators/generators/page.js +112 -0
  107. package/dist/generators/generators/page.js.map +1 -0
  108. package/dist/generators/generators/policy.d.ts +37 -0
  109. package/dist/generators/generators/policy.d.ts.map +1 -0
  110. package/dist/generators/generators/policy.js +100 -0
  111. package/dist/generators/generators/policy.js.map +1 -0
  112. package/dist/generators/generators/resource.d.ts +42 -4
  113. package/dist/generators/generators/resource.d.ts.map +1 -1
  114. package/dist/generators/generators/resource.js +450 -9
  115. package/dist/generators/generators/resource.js.map +1 -1
  116. package/dist/generators/generators/service.d.ts +38 -0
  117. package/dist/generators/generators/service.d.ts.map +1 -0
  118. package/dist/generators/generators/service.js +109 -0
  119. package/dist/generators/generators/service.js.map +1 -0
  120. package/dist/generators/registry.d.ts.map +1 -1
  121. package/dist/generators/registry.js +10 -1
  122. package/dist/generators/registry.js.map +1 -1
  123. package/dist/generators/templates/action.d.ts +28 -0
  124. package/dist/generators/templates/action.d.ts.map +1 -0
  125. package/dist/generators/templates/action.js +359 -0
  126. package/dist/generators/templates/action.js.map +1 -0
  127. package/dist/generators/templates/exception.d.ts +26 -0
  128. package/dist/generators/templates/exception.d.ts.map +1 -0
  129. package/dist/generators/templates/exception.js +671 -0
  130. package/dist/generators/templates/exception.js.map +1 -0
  131. package/dist/generators/templates/guard.d.ts +26 -0
  132. package/dist/generators/templates/guard.d.ts.map +1 -0
  133. package/dist/generators/templates/guard.js +555 -0
  134. package/dist/generators/templates/guard.js.map +1 -0
  135. package/dist/generators/templates/layout.d.ts +28 -0
  136. package/dist/generators/templates/layout.d.ts.map +1 -0
  137. package/dist/generators/templates/layout.js +147 -0
  138. package/dist/generators/templates/layout.js.map +1 -0
  139. package/dist/generators/templates/middleware.d.ts +26 -0
  140. package/dist/generators/templates/middleware.d.ts.map +1 -0
  141. package/dist/generators/templates/middleware.js +411 -0
  142. package/dist/generators/templates/middleware.js.map +1 -0
  143. package/dist/generators/templates/model.d.ts +3 -0
  144. package/dist/generators/templates/model.d.ts.map +1 -1
  145. package/dist/generators/templates/model.js +183 -28
  146. package/dist/generators/templates/model.js.map +1 -1
  147. package/dist/generators/templates/page.d.ts +36 -0
  148. package/dist/generators/templates/page.d.ts.map +1 -0
  149. package/dist/generators/templates/page.js +147 -0
  150. package/dist/generators/templates/page.js.map +1 -0
  151. package/dist/generators/templates/policy.d.ts +24 -0
  152. package/dist/generators/templates/policy.d.ts.map +1 -0
  153. package/dist/generators/templates/policy.js +499 -0
  154. package/dist/generators/templates/policy.js.map +1 -0
  155. package/dist/generators/templates/resource.d.ts +65 -0
  156. package/dist/generators/templates/resource.d.ts.map +1 -1
  157. package/dist/generators/templates/resource.js +228 -43
  158. package/dist/generators/templates/resource.js.map +1 -1
  159. package/dist/generators/templates/service.d.ts +26 -0
  160. package/dist/generators/templates/service.d.ts.map +1 -0
  161. package/dist/generators/templates/service.js +511 -0
  162. package/dist/generators/templates/service.js.map +1 -0
  163. package/dist/generators/types.d.ts +26 -14
  164. package/dist/generators/types.d.ts.map +1 -1
  165. package/dist/generators/types.js +8 -25
  166. package/dist/generators/types.js.map +1 -1
  167. package/dist/generators/utils/ast-helpers.d.ts +147 -0
  168. package/dist/generators/utils/ast-helpers.d.ts.map +1 -0
  169. package/dist/generators/utils/ast-helpers.js +350 -0
  170. package/dist/generators/utils/ast-helpers.js.map +1 -0
  171. package/dist/generators/utils/prisma-migration.d.ts +59 -0
  172. package/dist/generators/utils/prisma-migration.d.ts.map +1 -0
  173. package/dist/generators/utils/prisma-migration.js +161 -0
  174. package/dist/generators/utils/prisma-migration.js.map +1 -0
  175. package/dist/generators/utils/prisma-schema.d.ts +97 -0
  176. package/dist/generators/utils/prisma-schema.d.ts.map +1 -0
  177. package/dist/generators/utils/prisma-schema.js +235 -0
  178. package/dist/generators/utils/prisma-schema.js.map +1 -0
  179. package/dist/generators/utils/router-integration.d.ts +70 -0
  180. package/dist/generators/utils/router-integration.d.ts.map +1 -0
  181. package/dist/generators/utils/router-integration.js +305 -0
  182. package/dist/generators/utils/router-integration.js.map +1 -0
  183. package/dist/generators/utils/snapshot.d.ts +93 -0
  184. package/dist/generators/utils/snapshot.d.ts.map +1 -0
  185. package/dist/generators/utils/snapshot.js +178 -0
  186. package/dist/generators/utils/snapshot.js.map +1 -0
  187. package/dist/index.d.ts +6 -0
  188. package/dist/index.d.ts.map +1 -1
  189. package/dist/index.js +6 -0
  190. package/dist/index.js.map +1 -1
  191. package/dist/seeding/errors.d.ts +11 -24
  192. package/dist/seeding/errors.d.ts.map +1 -1
  193. package/dist/seeding/errors.js +11 -50
  194. package/dist/seeding/errors.js.map +1 -1
  195. package/dist/utils/paths.d.ts +19 -0
  196. package/dist/utils/paths.d.ts.map +1 -1
  197. package/dist/utils/paths.js +45 -0
  198. package/dist/utils/paths.js.map +1 -1
  199. package/dist/utils/schema-patterns.d.ts +26 -0
  200. package/dist/utils/schema-patterns.d.ts.map +1 -0
  201. package/dist/utils/schema-patterns.js +40 -0
  202. package/dist/utils/schema-patterns.js.map +1 -0
  203. package/package.json +12 -10
@@ -0,0 +1,147 @@
1
+ /**
2
+ * AST Helpers for TypeScript Code Modification
3
+ *
4
+ * Uses TypeScript Compiler API for safe, syntax-aware code transformations.
5
+ * Enables adding imports, modifying arrays/objects without breaking code structure.
6
+ */
7
+ import ts from 'typescript';
8
+ /**
9
+ * Represents a code modification to apply
10
+ */
11
+ export interface CodeModification {
12
+ /** Type of modification */
13
+ readonly type: 'add-import' | 'add-to-array' | 'add-to-object' | 'add-export';
14
+ /** Position in file to insert content */
15
+ readonly position: number;
16
+ /** Content to insert */
17
+ readonly content: string;
18
+ }
19
+ /**
20
+ * Result of analyzing a TypeScript file
21
+ */
22
+ export interface FileAnalysis {
23
+ /** The parsed source file */
24
+ readonly sourceFile: ts.SourceFile;
25
+ /** Original file content */
26
+ readonly content: string;
27
+ /** Position after last import statement */
28
+ readonly lastImportEnd: number;
29
+ /** All import declarations found */
30
+ readonly imports: ImportInfo[];
31
+ /** All variable declarations found */
32
+ readonly variables: VariableInfo[];
33
+ /** All export declarations found */
34
+ readonly exports: ExportInfo[];
35
+ }
36
+ /**
37
+ * Information about an import declaration
38
+ */
39
+ export interface ImportInfo {
40
+ /** Module specifier (e.g., './users.js') */
41
+ readonly moduleSpecifier: string;
42
+ /** Named imports (e.g., ['userProcedures', 'UserSchema']) */
43
+ readonly namedImports: string[];
44
+ /** Default import name if present */
45
+ readonly defaultImport: string | undefined;
46
+ /** Whether this is a type-only import */
47
+ readonly isTypeOnly: boolean;
48
+ /** Position in file */
49
+ readonly start: number;
50
+ readonly end: number;
51
+ }
52
+ /**
53
+ * Information about a variable declaration
54
+ */
55
+ export interface VariableInfo {
56
+ /** Variable name */
57
+ readonly name: string;
58
+ /** Whether it's const, let, or var */
59
+ readonly kind: 'const' | 'let' | 'var';
60
+ /** Whether initialized with array literal */
61
+ readonly isArray: boolean;
62
+ /** Whether initialized with object literal */
63
+ readonly isObject: boolean;
64
+ /** Array elements if isArray is true */
65
+ readonly arrayElements: string[];
66
+ /** Object property names if isObject is true */
67
+ readonly objectProperties: string[];
68
+ /** Position in file */
69
+ readonly start: number;
70
+ readonly end: number;
71
+ /** Position of initializer (array/object literal) */
72
+ readonly initializerStart: number;
73
+ readonly initializerEnd: number;
74
+ }
75
+ /**
76
+ * Information about an export declaration
77
+ */
78
+ export interface ExportInfo {
79
+ /** Exported name */
80
+ readonly name: string;
81
+ /** Module specifier if re-export */
82
+ readonly moduleSpecifier: string | undefined;
83
+ /** Position in file */
84
+ readonly start: number;
85
+ readonly end: number;
86
+ }
87
+ /**
88
+ * Parse a TypeScript file into an AST
89
+ */
90
+ export declare function parseTypeScriptFile(filePath: string): ts.SourceFile;
91
+ /**
92
+ * Parse TypeScript source code into an AST
93
+ */
94
+ export declare function parseTypeScriptSource(content: string, fileName?: string): ts.SourceFile;
95
+ /**
96
+ * Analyze a TypeScript file for imports, variables, and exports
97
+ *
98
+ * @throws GeneratorError if file doesn't exist or cannot be parsed
99
+ */
100
+ export declare function analyzeFile(filePath: string): FileAnalysis;
101
+ /**
102
+ * Check if an import already exists for a module
103
+ */
104
+ export declare function hasImport(analysis: FileAnalysis, moduleSpecifier: string): boolean;
105
+ /**
106
+ * Check if a named import exists in any import declaration
107
+ */
108
+ export declare function hasNamedImport(analysis: FileAnalysis, name: string): boolean;
109
+ /**
110
+ * Check if an item exists in an array variable
111
+ */
112
+ export declare function hasArrayItem(analysis: FileAnalysis, variableName: string, item: string): boolean;
113
+ /**
114
+ * Check if a property exists in an object variable
115
+ */
116
+ export declare function hasObjectProperty(analysis: FileAnalysis, variableName: string, property: string): boolean;
117
+ /**
118
+ * Check if an export exists
119
+ */
120
+ export declare function hasExport(analysis: FileAnalysis, name: string): boolean;
121
+ /**
122
+ * Create a modification to add an import statement
123
+ */
124
+ export declare function createAddImport(analysis: FileAnalysis, importName: string, moduleSpecifier: string, isTypeOnly?: boolean): CodeModification | null;
125
+ /**
126
+ * Create a modification to add an item to an array
127
+ */
128
+ export declare function createAddToArray(analysis: FileAnalysis, variableName: string, item: string): CodeModification | null;
129
+ /**
130
+ * Create a modification to add a property to an object
131
+ */
132
+ export declare function createAddToObject(analysis: FileAnalysis, variableName: string, key: string, value: string): CodeModification | null;
133
+ /**
134
+ * Create a modification to add a named re-export
135
+ */
136
+ export declare function createAddExport(analysis: FileAnalysis, exportName: string, moduleSpecifier: string): CodeModification | null;
137
+ /**
138
+ * Apply modifications to file content
139
+ *
140
+ * Modifications are sorted by position (descending) to avoid offset issues
141
+ */
142
+ export declare function applyModifications(content: string, modifications: CodeModification[]): string;
143
+ /**
144
+ * Apply modifications to a file and return the new content
145
+ */
146
+ export declare function modifyFile(filePath: string, modifications: CodeModification[]): string;
147
+ //# sourceMappingURL=ast-helpers.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ast-helpers.d.ts","sourceRoot":"","sources":["../../../src/generators/utils/ast-helpers.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,350 @@
1
+ /**
2
+ * AST Helpers for TypeScript Code Modification
3
+ *
4
+ * Uses TypeScript Compiler API for safe, syntax-aware code transformations.
5
+ * Enables adding imports, modifying arrays/objects without breaking code structure.
6
+ */
7
+ import { existsSync, readFileSync } from 'node:fs';
8
+ import ts from 'typescript';
9
+ import { GeneratorError, GeneratorErrorCode } from '../types.js';
10
+ // ============================================================================
11
+ // File Parsing
12
+ // ============================================================================
13
+ /**
14
+ * Parse a TypeScript file into an AST
15
+ */
16
+ export function parseTypeScriptFile(filePath) {
17
+ const content = readFileSync(filePath, 'utf-8');
18
+ return ts.createSourceFile(filePath, content, ts.ScriptTarget.Latest, true);
19
+ }
20
+ /**
21
+ * Parse TypeScript source code into an AST
22
+ */
23
+ export function parseTypeScriptSource(content, fileName = 'source.ts') {
24
+ return ts.createSourceFile(fileName, content, ts.ScriptTarget.Latest, true);
25
+ }
26
+ /**
27
+ * Analyze a TypeScript file for imports, variables, and exports
28
+ *
29
+ * @throws GeneratorError if file doesn't exist or cannot be parsed
30
+ */
31
+ export function analyzeFile(filePath) {
32
+ // Check file exists
33
+ if (!existsSync(filePath)) {
34
+ throw new GeneratorError(GeneratorErrorCode.PROJECT_STRUCTURE, `TypeScript file not found: ${filePath}`, 'Ensure the file exists and the path is correct.');
35
+ }
36
+ let content;
37
+ try {
38
+ content = readFileSync(filePath, 'utf-8');
39
+ }
40
+ catch (err) {
41
+ throw new GeneratorError(GeneratorErrorCode.PROJECT_STRUCTURE, `Failed to read TypeScript file: ${filePath}`, err instanceof Error ? err.message : String(err));
42
+ }
43
+ let sourceFile;
44
+ try {
45
+ sourceFile = ts.createSourceFile(filePath, content, ts.ScriptTarget.Latest, true);
46
+ }
47
+ catch (err) {
48
+ throw new GeneratorError(GeneratorErrorCode.PROJECT_STRUCTURE, `Failed to parse TypeScript file: ${filePath}`, err instanceof Error ? err.message : String(err));
49
+ }
50
+ const imports = [];
51
+ const variables = [];
52
+ const exports = [];
53
+ let lastImportEnd = 0;
54
+ // Walk the AST
55
+ ts.forEachChild(sourceFile, (node) => {
56
+ // Collect imports
57
+ if (ts.isImportDeclaration(node)) {
58
+ const importInfo = extractImportInfo(node, sourceFile);
59
+ if (importInfo) {
60
+ imports.push(importInfo);
61
+ lastImportEnd = Math.max(lastImportEnd, node.end);
62
+ }
63
+ }
64
+ // Collect variable declarations
65
+ if (ts.isVariableStatement(node)) {
66
+ for (const declaration of node.declarationList.declarations) {
67
+ const varInfo = extractVariableInfo(declaration, node, sourceFile);
68
+ if (varInfo) {
69
+ variables.push(varInfo);
70
+ }
71
+ }
72
+ }
73
+ // Collect exports
74
+ if (ts.isExportDeclaration(node)) {
75
+ const exportInfo = extractExportInfo(node, sourceFile);
76
+ if (exportInfo) {
77
+ exports.push(...exportInfo);
78
+ }
79
+ }
80
+ });
81
+ return {
82
+ sourceFile,
83
+ content,
84
+ lastImportEnd,
85
+ imports,
86
+ variables,
87
+ exports,
88
+ };
89
+ }
90
+ /**
91
+ * Extract import information from an import declaration
92
+ */
93
+ function extractImportInfo(node, sourceFile) {
94
+ const moduleSpecifier = node.moduleSpecifier;
95
+ if (!ts.isStringLiteral(moduleSpecifier)) {
96
+ return null;
97
+ }
98
+ const namedImports = [];
99
+ let defaultImport;
100
+ let isTypeOnly = false;
101
+ const importClause = node.importClause;
102
+ if (importClause) {
103
+ isTypeOnly = importClause.isTypeOnly;
104
+ // Default import
105
+ if (importClause.name) {
106
+ defaultImport = importClause.name.text;
107
+ }
108
+ // Named imports
109
+ const namedBindings = importClause.namedBindings;
110
+ if (namedBindings && ts.isNamedImports(namedBindings)) {
111
+ for (const element of namedBindings.elements) {
112
+ namedImports.push(element.name.text);
113
+ }
114
+ }
115
+ }
116
+ return {
117
+ moduleSpecifier: moduleSpecifier.text,
118
+ namedImports,
119
+ defaultImport,
120
+ isTypeOnly,
121
+ start: node.getStart(sourceFile),
122
+ end: node.getEnd(),
123
+ };
124
+ }
125
+ /**
126
+ * Extract variable information from a variable declaration
127
+ */
128
+ function extractVariableInfo(declaration, statement, sourceFile) {
129
+ if (!ts.isIdentifier(declaration.name)) {
130
+ return null;
131
+ }
132
+ const name = declaration.name.text;
133
+ const kind = getVariableKind(statement.declarationList);
134
+ const initializer = declaration.initializer;
135
+ let isArray = false;
136
+ let isObject = false;
137
+ const arrayElements = [];
138
+ const objectProperties = [];
139
+ let initializerStart = 0;
140
+ let initializerEnd = 0;
141
+ if (initializer) {
142
+ initializerStart = initializer.getStart(sourceFile);
143
+ initializerEnd = initializer.getEnd();
144
+ if (ts.isArrayLiteralExpression(initializer)) {
145
+ isArray = true;
146
+ for (const element of initializer.elements) {
147
+ arrayElements.push(element.getText(sourceFile));
148
+ }
149
+ }
150
+ else if (ts.isObjectLiteralExpression(initializer)) {
151
+ isObject = true;
152
+ for (const prop of initializer.properties) {
153
+ if (ts.isPropertyAssignment(prop) && ts.isIdentifier(prop.name)) {
154
+ objectProperties.push(prop.name.text);
155
+ }
156
+ else if (ts.isShorthandPropertyAssignment(prop)) {
157
+ objectProperties.push(prop.name.text);
158
+ }
159
+ }
160
+ }
161
+ }
162
+ return {
163
+ name,
164
+ kind,
165
+ isArray,
166
+ isObject,
167
+ arrayElements,
168
+ objectProperties,
169
+ start: statement.getStart(sourceFile),
170
+ end: statement.getEnd(),
171
+ initializerStart,
172
+ initializerEnd,
173
+ };
174
+ }
175
+ /**
176
+ * Get variable declaration kind (const, let, var)
177
+ */
178
+ function getVariableKind(list) {
179
+ if (list.flags & ts.NodeFlags.Const)
180
+ return 'const';
181
+ if (list.flags & ts.NodeFlags.Let)
182
+ return 'let';
183
+ return 'var';
184
+ }
185
+ /**
186
+ * Extract export information from an export declaration
187
+ */
188
+ function extractExportInfo(node, sourceFile) {
189
+ const exports = [];
190
+ const moduleSpecifier = node.moduleSpecifier;
191
+ const specifierText = moduleSpecifier && ts.isStringLiteral(moduleSpecifier) ? moduleSpecifier.text : undefined;
192
+ const exportClause = node.exportClause;
193
+ if (exportClause && ts.isNamedExports(exportClause)) {
194
+ for (const element of exportClause.elements) {
195
+ exports.push({
196
+ name: element.name.text,
197
+ moduleSpecifier: specifierText,
198
+ start: node.getStart(sourceFile),
199
+ end: node.getEnd(),
200
+ });
201
+ }
202
+ }
203
+ return exports;
204
+ }
205
+ // ============================================================================
206
+ // Code Modification Helpers
207
+ // ============================================================================
208
+ /**
209
+ * Check if an import already exists for a module
210
+ */
211
+ export function hasImport(analysis, moduleSpecifier) {
212
+ return analysis.imports.some((imp) => imp.moduleSpecifier === moduleSpecifier);
213
+ }
214
+ /**
215
+ * Check if a named import exists in any import declaration
216
+ */
217
+ export function hasNamedImport(analysis, name) {
218
+ return analysis.imports.some((imp) => imp.namedImports.includes(name));
219
+ }
220
+ /**
221
+ * Check if an item exists in an array variable
222
+ */
223
+ export function hasArrayItem(analysis, variableName, item) {
224
+ const variable = analysis.variables.find((v) => v.name === variableName && v.isArray);
225
+ if (!variable)
226
+ return false;
227
+ return variable.arrayElements.includes(item);
228
+ }
229
+ /**
230
+ * Check if a property exists in an object variable
231
+ */
232
+ export function hasObjectProperty(analysis, variableName, property) {
233
+ const variable = analysis.variables.find((v) => v.name === variableName && v.isObject);
234
+ if (!variable)
235
+ return false;
236
+ return variable.objectProperties.includes(property);
237
+ }
238
+ /**
239
+ * Check if an export exists
240
+ */
241
+ export function hasExport(analysis, name) {
242
+ return analysis.exports.some((exp) => exp.name === name);
243
+ }
244
+ // ============================================================================
245
+ // Code Generation
246
+ // ============================================================================
247
+ /**
248
+ * Create a modification to add an import statement
249
+ */
250
+ export function createAddImport(analysis, importName, moduleSpecifier, isTypeOnly = false) {
251
+ // Check if import already exists
252
+ if (hasNamedImport(analysis, importName)) {
253
+ return null;
254
+ }
255
+ const typePrefix = isTypeOnly ? 'type ' : '';
256
+ const content = `\nimport { ${typePrefix}${importName} } from '${moduleSpecifier}';`;
257
+ return {
258
+ type: 'add-import',
259
+ position: analysis.lastImportEnd,
260
+ content,
261
+ };
262
+ }
263
+ /**
264
+ * Create a modification to add an item to an array
265
+ */
266
+ export function createAddToArray(analysis, variableName, item) {
267
+ const variable = analysis.variables.find((v) => v.name === variableName && v.isArray);
268
+ if (!variable) {
269
+ return null;
270
+ }
271
+ // Check if item already exists
272
+ if (variable.arrayElements.includes(item)) {
273
+ return null;
274
+ }
275
+ // Insert before closing bracket
276
+ const insertPosition = variable.initializerEnd - 1;
277
+ const separator = variable.arrayElements.length > 0 ? ', ' : '';
278
+ const content = `${separator}${item}`;
279
+ return {
280
+ type: 'add-to-array',
281
+ position: insertPosition,
282
+ content,
283
+ };
284
+ }
285
+ /**
286
+ * Create a modification to add a property to an object
287
+ */
288
+ export function createAddToObject(analysis, variableName, key, value) {
289
+ const variable = analysis.variables.find((v) => v.name === variableName && v.isObject);
290
+ if (!variable) {
291
+ return null;
292
+ }
293
+ // Check if property already exists
294
+ if (variable.objectProperties.includes(key)) {
295
+ return null;
296
+ }
297
+ // Insert before closing brace
298
+ const insertPosition = variable.initializerEnd - 1;
299
+ const separator = variable.objectProperties.length > 0 ? ', ' : '';
300
+ const content = `${separator}${key}: ${value}`;
301
+ return {
302
+ type: 'add-to-object',
303
+ position: insertPosition,
304
+ content,
305
+ };
306
+ }
307
+ /**
308
+ * Create a modification to add a named re-export
309
+ */
310
+ export function createAddExport(analysis, exportName, moduleSpecifier) {
311
+ // Check if export already exists
312
+ if (hasExport(analysis, exportName)) {
313
+ return null;
314
+ }
315
+ // Find last export position, or use end of imports
316
+ const lastExportEnd = analysis.exports.length > 0 ? Math.max(...analysis.exports.map((e) => e.end)) : 0;
317
+ const insertPosition = lastExportEnd > 0 ? lastExportEnd : analysis.lastImportEnd;
318
+ const content = `\nexport { ${exportName} } from '${moduleSpecifier}';`;
319
+ return {
320
+ type: 'add-export',
321
+ position: insertPosition,
322
+ content,
323
+ };
324
+ }
325
+ // ============================================================================
326
+ // Apply Modifications
327
+ // ============================================================================
328
+ /**
329
+ * Apply modifications to file content
330
+ *
331
+ * Modifications are sorted by position (descending) to avoid offset issues
332
+ */
333
+ export function applyModifications(content, modifications) {
334
+ // Filter out null modifications and sort by position descending
335
+ const validMods = modifications.filter((m) => m !== null);
336
+ const sortedMods = [...validMods].sort((a, b) => b.position - a.position);
337
+ let result = content;
338
+ for (const mod of sortedMods) {
339
+ result = result.slice(0, mod.position) + mod.content + result.slice(mod.position);
340
+ }
341
+ return result;
342
+ }
343
+ /**
344
+ * Apply modifications to a file and return the new content
345
+ */
346
+ export function modifyFile(filePath, modifications) {
347
+ const content = readFileSync(filePath, 'utf-8');
348
+ return applyModifications(content, modifications);
349
+ }
350
+ //# sourceMappingURL=ast-helpers.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ast-helpers.js","sourceRoot":"","sources":["../../../src/generators/utils/ast-helpers.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AAEnD,OAAO,EAAE,MAAM,YAAY,CAAC;AAE5B,OAAO,EAAE,cAAc,EAAE,kBAAkB,EAAE,MAAM,aAAa,CAAC;AA0FjE,+EAA+E;AAC/E,eAAe;AACf,+EAA+E;AAE/E;;GAEG;AACH,MAAM,UAAU,mBAAmB,CAAC,QAAgB;IAClD,MAAM,OAAO,GAAG,YAAY,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;IAChD,OAAO,EAAE,CAAC,gBAAgB,CAAC,QAAQ,EAAE,OAAO,EAAE,EAAE,CAAC,YAAY,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;AAC9E,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,qBAAqB,CAAC,OAAe,EAAE,QAAQ,GAAG,WAAW;IAC3E,OAAO,EAAE,CAAC,gBAAgB,CAAC,QAAQ,EAAE,OAAO,EAAE,EAAE,CAAC,YAAY,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;AAC9E,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,WAAW,CAAC,QAAgB;IAC1C,oBAAoB;IACpB,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,EAAE,CAAC;QAC1B,MAAM,IAAI,cAAc,CACtB,kBAAkB,CAAC,iBAAiB,EACpC,8BAA8B,QAAQ,EAAE,EACxC,iDAAiD,CAClD,CAAC;IACJ,CAAC;IAED,IAAI,OAAe,CAAC;IACpB,IAAI,CAAC;QACH,OAAO,GAAG,YAAY,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;IAC5C,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,MAAM,IAAI,cAAc,CACtB,kBAAkB,CAAC,iBAAiB,EACpC,mCAAmC,QAAQ,EAAE,EAC7C,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CACjD,CAAC;IACJ,CAAC;IAED,IAAI,UAAyB,CAAC;IAC9B,IAAI,CAAC;QACH,UAAU,GAAG,EAAE,CAAC,gBAAgB,CAAC,QAAQ,EAAE,OAAO,EAAE,EAAE,CAAC,YAAY,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;IACpF,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,MAAM,IAAI,cAAc,CACtB,kBAAkB,CAAC,iBAAiB,EACpC,oCAAoC,QAAQ,EAAE,EAC9C,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CACjD,CAAC;IACJ,CAAC;IAED,MAAM,OAAO,GAAiB,EAAE,CAAC;IACjC,MAAM,SAAS,GAAmB,EAAE,CAAC;IACrC,MAAM,OAAO,GAAiB,EAAE,CAAC;IACjC,IAAI,aAAa,GAAG,CAAC,CAAC;IAEtB,eAAe;IACf,EAAE,CAAC,YAAY,CAAC,UAAU,EAAE,CAAC,IAAI,EAAE,EAAE;QACnC,kBAAkB;QAClB,IAAI,EAAE,CAAC,mBAAmB,CAAC,IAAI,CAAC,EAAE,CAAC;YACjC,MAAM,UAAU,GAAG,iBAAiB,CAAC,IAAI,EAAE,UAAU,CAAC,CAAC;YACvD,IAAI,UAAU,EAAE,CAAC;gBACf,OAAO,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;gBACzB,aAAa,GAAG,IAAI,CAAC,GAAG,CAAC,aAAa,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC;YACpD,CAAC;QACH,CAAC;QAED,gCAAgC;QAChC,IAAI,EAAE,CAAC,mBAAmB,CAAC,IAAI,CAAC,EAAE,CAAC;YACjC,KAAK,MAAM,WAAW,IAAI,IAAI,CAAC,eAAe,CAAC,YAAY,EAAE,CAAC;gBAC5D,MAAM,OAAO,GAAG,mBAAmB,CAAC,WAAW,EAAE,IAAI,EAAE,UAAU,CAAC,CAAC;gBACnE,IAAI,OAAO,EAAE,CAAC;oBACZ,SAAS,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;gBAC1B,CAAC;YACH,CAAC;QACH,CAAC;QAED,kBAAkB;QAClB,IAAI,EAAE,CAAC,mBAAmB,CAAC,IAAI,CAAC,EAAE,CAAC;YACjC,MAAM,UAAU,GAAG,iBAAiB,CAAC,IAAI,EAAE,UAAU,CAAC,CAAC;YACvD,IAAI,UAAU,EAAE,CAAC;gBACf,OAAO,CAAC,IAAI,CAAC,GAAG,UAAU,CAAC,CAAC;YAC9B,CAAC;QACH,CAAC;IACH,CAAC,CAAC,CAAC;IAEH,OAAO;QACL,UAAU;QACV,OAAO;QACP,aAAa;QACb,OAAO;QACP,SAAS;QACT,OAAO;KACR,CAAC;AACJ,CAAC;AAED;;GAEG;AACH,SAAS,iBAAiB,CACxB,IAA0B,EAC1B,UAAyB;IAEzB,MAAM,eAAe,GAAG,IAAI,CAAC,eAAe,CAAC;IAC7C,IAAI,CAAC,EAAE,CAAC,eAAe,CAAC,eAAe,CAAC,EAAE,CAAC;QACzC,OAAO,IAAI,CAAC;IACd,CAAC;IAED,MAAM,YAAY,GAAa,EAAE,CAAC;IAClC,IAAI,aAAiC,CAAC;IACtC,IAAI,UAAU,GAAG,KAAK,CAAC;IAEvB,MAAM,YAAY,GAAG,IAAI,CAAC,YAAY,CAAC;IACvC,IAAI,YAAY,EAAE,CAAC;QACjB,UAAU,GAAG,YAAY,CAAC,UAAU,CAAC;QAErC,iBAAiB;QACjB,IAAI,YAAY,CAAC,IAAI,EAAE,CAAC;YACtB,aAAa,GAAG,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC;QACzC,CAAC;QAED,gBAAgB;QAChB,MAAM,aAAa,GAAG,YAAY,CAAC,aAAa,CAAC;QACjD,IAAI,aAAa,IAAI,EAAE,CAAC,cAAc,CAAC,aAAa,CAAC,EAAE,CAAC;YACtD,KAAK,MAAM,OAAO,IAAI,aAAa,CAAC,QAAQ,EAAE,CAAC;gBAC7C,YAAY,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YACvC,CAAC;QACH,CAAC;IACH,CAAC;IAED,OAAO;QACL,eAAe,EAAE,eAAe,CAAC,IAAI;QACrC,YAAY;QACZ,aAAa;QACb,UAAU;QACV,KAAK,EAAE,IAAI,CAAC,QAAQ,CAAC,UAAU,CAAC;QAChC,GAAG,EAAE,IAAI,CAAC,MAAM,EAAE;KACnB,CAAC;AACJ,CAAC;AAED;;GAEG;AACH,SAAS,mBAAmB,CAC1B,WAAmC,EACnC,SAA+B,EAC/B,UAAyB;IAEzB,IAAI,CAAC,EAAE,CAAC,YAAY,CAAC,WAAW,CAAC,IAAI,CAAC,EAAE,CAAC;QACvC,OAAO,IAAI,CAAC;IACd,CAAC;IAED,MAAM,IAAI,GAAG,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC;IACnC,MAAM,IAAI,GAAG,eAAe,CAAC,SAAS,CAAC,eAAe,CAAC,CAAC;IACxD,MAAM,WAAW,GAAG,WAAW,CAAC,WAAW,CAAC;IAE5C,IAAI,OAAO,GAAG,KAAK,CAAC;IACpB,IAAI,QAAQ,GAAG,KAAK,CAAC;IACrB,MAAM,aAAa,GAAa,EAAE,CAAC;IACnC,MAAM,gBAAgB,GAAa,EAAE,CAAC;IACtC,IAAI,gBAAgB,GAAG,CAAC,CAAC;IACzB,IAAI,cAAc,GAAG,CAAC,CAAC;IAEvB,IAAI,WAAW,EAAE,CAAC;QAChB,gBAAgB,GAAG,WAAW,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAC;QACpD,cAAc,GAAG,WAAW,CAAC,MAAM,EAAE,CAAC;QAEtC,IAAI,EAAE,CAAC,wBAAwB,CAAC,WAAW,CAAC,EAAE,CAAC;YAC7C,OAAO,GAAG,IAAI,CAAC;YACf,KAAK,MAAM,OAAO,IAAI,WAAW,CAAC,QAAQ,EAAE,CAAC;gBAC3C,aAAa,CAAC,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC,CAAC;YAClD,CAAC;QACH,CAAC;aAAM,IAAI,EAAE,CAAC,yBAAyB,CAAC,WAAW,CAAC,EAAE,CAAC;YACrD,QAAQ,GAAG,IAAI,CAAC;YAChB,KAAK,MAAM,IAAI,IAAI,WAAW,CAAC,UAAU,EAAE,CAAC;gBAC1C,IAAI,EAAE,CAAC,oBAAoB,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;oBAChE,gBAAgB,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;gBACxC,CAAC;qBAAM,IAAI,EAAE,CAAC,6BAA6B,CAAC,IAAI,CAAC,EAAE,CAAC;oBAClD,gBAAgB,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;gBACxC,CAAC;YACH,CAAC;QACH,CAAC;IACH,CAAC;IAED,OAAO;QACL,IAAI;QACJ,IAAI;QACJ,OAAO;QACP,QAAQ;QACR,aAAa;QACb,gBAAgB;QAChB,KAAK,EAAE,SAAS,CAAC,QAAQ,CAAC,UAAU,CAAC;QACrC,GAAG,EAAE,SAAS,CAAC,MAAM,EAAE;QACvB,gBAAgB;QAChB,cAAc;KACf,CAAC;AACJ,CAAC;AAED;;GAEG;AACH,SAAS,eAAe,CAAC,IAAgC;IACvD,IAAI,IAAI,CAAC,KAAK,GAAG,EAAE,CAAC,SAAS,CAAC,KAAK;QAAE,OAAO,OAAO,CAAC;IACpD,IAAI,IAAI,CAAC,KAAK,GAAG,EAAE,CAAC,SAAS,CAAC,GAAG;QAAE,OAAO,KAAK,CAAC;IAChD,OAAO,KAAK,CAAC;AACf,CAAC;AAED;;GAEG;AACH,SAAS,iBAAiB,CAAC,IAA0B,EAAE,UAAyB;IAC9E,MAAM,OAAO,GAAiB,EAAE,CAAC;IAEjC,MAAM,eAAe,GAAG,IAAI,CAAC,eAAe,CAAC;IAC7C,MAAM,aAAa,GACjB,eAAe,IAAI,EAAE,CAAC,eAAe,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC,eAAe,CAAC,IAAI,CAAC,CAAC,CAAC,SAAS,CAAC;IAE5F,MAAM,YAAY,GAAG,IAAI,CAAC,YAAY,CAAC;IACvC,IAAI,YAAY,IAAI,EAAE,CAAC,cAAc,CAAC,YAAY,CAAC,EAAE,CAAC;QACpD,KAAK,MAAM,OAAO,IAAI,YAAY,CAAC,QAAQ,EAAE,CAAC;YAC5C,OAAO,CAAC,IAAI,CAAC;gBACX,IAAI,EAAE,OAAO,CAAC,IAAI,CAAC,IAAI;gBACvB,eAAe,EAAE,aAAa;gBAC9B,KAAK,EAAE,IAAI,CAAC,QAAQ,CAAC,UAAU,CAAC;gBAChC,GAAG,EAAE,IAAI,CAAC,MAAM,EAAE;aACnB,CAAC,CAAC;QACL,CAAC;IACH,CAAC;IAED,OAAO,OAAO,CAAC;AACjB,CAAC;AAED,+EAA+E;AAC/E,4BAA4B;AAC5B,+EAA+E;AAE/E;;GAEG;AACH,MAAM,UAAU,SAAS,CAAC,QAAsB,EAAE,eAAuB;IACvE,OAAO,QAAQ,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,eAAe,KAAK,eAAe,CAAC,CAAC;AACjF,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,cAAc,CAAC,QAAsB,EAAE,IAAY;IACjE,OAAO,QAAQ,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,YAAY,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC;AACzE,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,YAAY,CAAC,QAAsB,EAAE,YAAoB,EAAE,IAAY;IACrF,MAAM,QAAQ,GAAG,QAAQ,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,YAAY,IAAI,CAAC,CAAC,OAAO,CAAC,CAAC;IACtF,IAAI,CAAC,QAAQ;QAAE,OAAO,KAAK,CAAC;IAC5B,OAAO,QAAQ,CAAC,aAAa,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;AAC/C,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,iBAAiB,CAC/B,QAAsB,EACtB,YAAoB,EACpB,QAAgB;IAEhB,MAAM,QAAQ,GAAG,QAAQ,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,YAAY,IAAI,CAAC,CAAC,QAAQ,CAAC,CAAC;IACvF,IAAI,CAAC,QAAQ;QAAE,OAAO,KAAK,CAAC;IAC5B,OAAO,QAAQ,CAAC,gBAAgB,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;AACtD,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,SAAS,CAAC,QAAsB,EAAE,IAAY;IAC5D,OAAO,QAAQ,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,IAAI,KAAK,IAAI,CAAC,CAAC;AAC3D,CAAC;AAED,+EAA+E;AAC/E,kBAAkB;AAClB,+EAA+E;AAE/E;;GAEG;AACH,MAAM,UAAU,eAAe,CAC7B,QAAsB,EACtB,UAAkB,EAClB,eAAuB,EACvB,UAAU,GAAG,KAAK;IAElB,iCAAiC;IACjC,IAAI,cAAc,CAAC,QAAQ,EAAE,UAAU,CAAC,EAAE,CAAC;QACzC,OAAO,IAAI,CAAC;IACd,CAAC;IAED,MAAM,UAAU,GAAG,UAAU,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC;IAC7C,MAAM,OAAO,GAAG,cAAc,UAAU,GAAG,UAAU,YAAY,eAAe,IAAI,CAAC;IAErF,OAAO;QACL,IAAI,EAAE,YAAY;QAClB,QAAQ,EAAE,QAAQ,CAAC,aAAa;QAChC,OAAO;KACR,CAAC;AACJ,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,gBAAgB,CAC9B,QAAsB,EACtB,YAAoB,EACpB,IAAY;IAEZ,MAAM,QAAQ,GAAG,QAAQ,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,YAAY,IAAI,CAAC,CAAC,OAAO,CAAC,CAAC;IACtF,IAAI,CAAC,QAAQ,EAAE,CAAC;QACd,OAAO,IAAI,CAAC;IACd,CAAC;IAED,+BAA+B;IAC/B,IAAI,QAAQ,CAAC,aAAa,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC;QAC1C,OAAO,IAAI,CAAC;IACd,CAAC;IAED,gCAAgC;IAChC,MAAM,cAAc,GAAG,QAAQ,CAAC,cAAc,GAAG,CAAC,CAAC;IACnD,MAAM,SAAS,GAAG,QAAQ,CAAC,aAAa,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC;IAChE,MAAM,OAAO,GAAG,GAAG,SAAS,GAAG,IAAI,EAAE,CAAC;IAEtC,OAAO;QACL,IAAI,EAAE,cAAc;QACpB,QAAQ,EAAE,cAAc;QACxB,OAAO;KACR,CAAC;AACJ,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,iBAAiB,CAC/B,QAAsB,EACtB,YAAoB,EACpB,GAAW,EACX,KAAa;IAEb,MAAM,QAAQ,GAAG,QAAQ,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,YAAY,IAAI,CAAC,CAAC,QAAQ,CAAC,CAAC;IACvF,IAAI,CAAC,QAAQ,EAAE,CAAC;QACd,OAAO,IAAI,CAAC;IACd,CAAC;IAED,mCAAmC;IACnC,IAAI,QAAQ,CAAC,gBAAgB,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC;QAC5C,OAAO,IAAI,CAAC;IACd,CAAC;IAED,8BAA8B;IAC9B,MAAM,cAAc,GAAG,QAAQ,CAAC,cAAc,GAAG,CAAC,CAAC;IACnD,MAAM,SAAS,GAAG,QAAQ,CAAC,gBAAgB,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC;IACnE,MAAM,OAAO,GAAG,GAAG,SAAS,GAAG,GAAG,KAAK,KAAK,EAAE,CAAC;IAE/C,OAAO;QACL,IAAI,EAAE,eAAe;QACrB,QAAQ,EAAE,cAAc;QACxB,OAAO;KACR,CAAC;AACJ,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,eAAe,CAC7B,QAAsB,EACtB,UAAkB,EAClB,eAAuB;IAEvB,iCAAiC;IACjC,IAAI,SAAS,CAAC,QAAQ,EAAE,UAAU,CAAC,EAAE,CAAC;QACpC,OAAO,IAAI,CAAC;IACd,CAAC;IAED,mDAAmD;IACnD,MAAM,aAAa,GACjB,QAAQ,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IAEpF,MAAM,cAAc,GAAG,aAAa,GAAG,CAAC,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,QAAQ,CAAC,aAAa,CAAC;IAClF,MAAM,OAAO,GAAG,cAAc,UAAU,YAAY,eAAe,IAAI,CAAC;IAExE,OAAO;QACL,IAAI,EAAE,YAAY;QAClB,QAAQ,EAAE,cAAc;QACxB,OAAO;KACR,CAAC;AACJ,CAAC;AAED,+EAA+E;AAC/E,sBAAsB;AACtB,+EAA+E;AAE/E;;;;GAIG;AACH,MAAM,UAAU,kBAAkB,CAAC,OAAe,EAAE,aAAiC;IACnF,gEAAgE;IAChE,MAAM,SAAS,GAAG,aAAa,CAAC,MAAM,CAAC,CAAC,CAAC,EAAyB,EAAE,CAAC,CAAC,KAAK,IAAI,CAAC,CAAC;IACjF,MAAM,UAAU,GAAG,CAAC,GAAG,SAAS,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,GAAG,CAAC,CAAC,QAAQ,CAAC,CAAC;IAE1E,IAAI,MAAM,GAAG,OAAO,CAAC;IAErB,KAAK,MAAM,GAAG,IAAI,UAAU,EAAE,CAAC;QAC7B,MAAM,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,QAAQ,CAAC,GAAG,GAAG,CAAC,OAAO,GAAG,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;IACpF,CAAC;IAED,OAAO,MAAM,CAAC;AAChB,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,UAAU,CAAC,QAAgB,EAAE,aAAiC;IAC5E,MAAM,OAAO,GAAG,YAAY,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;IAChD,OAAO,kBAAkB,CAAC,OAAO,EAAE,aAAa,CAAC,CAAC;AACpD,CAAC"}
@@ -0,0 +1,59 @@
1
+ /**
2
+ * Prisma Migration Runner
3
+ *
4
+ * Executes Prisma commands (db push, generate) with proper error handling
5
+ * and user feedback.
6
+ */
7
+ /**
8
+ * Result of running a Prisma command
9
+ */
10
+ export interface PrismaCommandResult {
11
+ /** Whether command succeeded */
12
+ readonly success: boolean;
13
+ /** Exit code */
14
+ readonly exitCode: number;
15
+ /** Standard output */
16
+ readonly stdout: string;
17
+ /** Standard error */
18
+ readonly stderr: string;
19
+ }
20
+ /**
21
+ * Options for migration operations
22
+ */
23
+ export interface MigrationOptions {
24
+ /** Project root directory */
25
+ readonly cwd: string;
26
+ /** Skip user prompts (auto-run) */
27
+ readonly autoRun?: boolean;
28
+ /** Skip migration entirely */
29
+ readonly skip?: boolean;
30
+ /** Timeout in milliseconds */
31
+ readonly timeout?: number;
32
+ }
33
+ /**
34
+ * Run `prisma db push` to sync schema with database
35
+ */
36
+ export declare function runPrismaDbPush(options: MigrationOptions): Promise<PrismaCommandResult>;
37
+ /**
38
+ * Run `prisma generate` to regenerate Prisma Client
39
+ */
40
+ export declare function runPrismaGenerate(options: MigrationOptions): Promise<PrismaCommandResult>;
41
+ /**
42
+ * Run `prisma format` to format schema file
43
+ */
44
+ export declare function runPrismaFormat(options: MigrationOptions): Promise<PrismaCommandResult>;
45
+ /**
46
+ * Prompt user and run database migration
47
+ *
48
+ * @returns true if migration was run and succeeded, false otherwise
49
+ */
50
+ export declare function promptAndRunMigration(options: MigrationOptions): Promise<boolean>;
51
+ /**
52
+ * Check if Prisma CLI is available
53
+ */
54
+ export declare function checkPrismaAvailable(cwd: string): Promise<boolean>;
55
+ /**
56
+ * Validate schema before migration
57
+ */
58
+ export declare function validatePrismaSchema(cwd: string): Promise<void>;
59
+ //# sourceMappingURL=prisma-migration.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"prisma-migration.d.ts","sourceRoot":"","sources":["../../../src/generators/utils/prisma-migration.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAaH;;GAEG;AACH,MAAM,WAAW,mBAAmB;IAClC,gCAAgC;IAChC,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAC;IAC1B,gBAAgB;IAChB,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,sBAAsB;IACtB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,qBAAqB;IACrB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;CACzB;AAED;;GAEG;AACH,MAAM,WAAW,gBAAgB;IAC/B,6BAA6B;IAC7B,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;IACrB,mCAAmC;IACnC,QAAQ,CAAC,OAAO,CAAC,EAAE,OAAO,CAAC;IAC3B,8BAA8B;IAC9B,QAAQ,CAAC,IAAI,CAAC,EAAE,OAAO,CAAC;IACxB,8BAA8B;IAC9B,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,CAAC;CAC3B;AA4ED;;GAEG;AACH,wBAAsB,eAAe,CAAC,OAAO,EAAE,gBAAgB,GAAG,OAAO,CAAC,mBAAmB,CAAC,CAW7F;AAED;;GAEG;AACH,wBAAsB,iBAAiB,CAAC,OAAO,EAAE,gBAAgB,GAAG,OAAO,CAAC,mBAAmB,CAAC,CAM/F;AAED;;GAEG;AACH,wBAAsB,eAAe,CAAC,OAAO,EAAE,gBAAgB,GAAG,OAAO,CAAC,mBAAmB,CAAC,CAM7F;AAMD;;;;GAIG;AACH,wBAAsB,qBAAqB,CAAC,OAAO,EAAE,gBAAgB,GAAG,OAAO,CAAC,OAAO,CAAC,CAoDvF;AAMD;;GAEG;AACH,wBAAsB,oBAAoB,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAGxE;AAED;;GAEG;AACH,wBAAsB,oBAAoB,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAUrE"}