@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.
- package/README.md +2 -48
- package/dist/cli.d.ts +5 -1
- package/dist/cli.d.ts.map +1 -1
- package/dist/cli.js +7 -1
- package/dist/cli.js.map +1 -1
- package/dist/commands/dev.d.ts.map +1 -1
- package/dist/commands/dev.js +71 -7
- package/dist/commands/dev.js.map +1 -1
- package/dist/commands/introspect.d.ts +16 -0
- package/dist/commands/introspect.d.ts.map +1 -0
- package/dist/commands/introspect.js +559 -0
- package/dist/commands/introspect.js.map +1 -0
- package/dist/commands/make.d.ts.map +1 -1
- package/dist/commands/make.js +18 -8
- package/dist/commands/make.js.map +1 -1
- package/dist/commands/procedures.d.ts.map +1 -1
- package/dist/commands/procedures.js +16 -0
- package/dist/commands/procedures.js.map +1 -1
- package/dist/dev/error-parser.d.ts.map +1 -1
- package/dist/dev/error-parser.js +24 -8
- package/dist/dev/error-parser.js.map +1 -1
- package/dist/dev/hmr-runner.d.ts.map +1 -1
- package/dist/dev/hmr-runner.js +6 -1
- package/dist/dev/hmr-runner.js.map +1 -1
- package/dist/dev/index.d.ts +3 -3
- package/dist/dev/index.d.ts.map +1 -1
- package/dist/dev/index.js +3 -3
- package/dist/dev/index.js.map +1 -1
- package/dist/dev/reload-reporter.d.ts +2 -2
- package/dist/dev/reload-reporter.d.ts.map +1 -1
- package/dist/dev/reload-reporter.js +2 -2
- package/dist/dev/reload-reporter.js.map +1 -1
- package/dist/errors/catalog.d.ts +48 -0
- package/dist/errors/catalog.d.ts.map +1 -0
- package/dist/errors/catalog.js +421 -0
- package/dist/errors/catalog.js.map +1 -0
- package/dist/errors/index.d.ts +26 -0
- package/dist/errors/index.d.ts.map +1 -0
- package/dist/errors/index.js +28 -0
- package/dist/errors/index.js.map +1 -0
- package/dist/errors/velox-error.d.ts +122 -0
- package/dist/errors/velox-error.d.ts.map +1 -0
- package/dist/errors/velox-error.js +216 -0
- package/dist/errors/velox-error.js.map +1 -0
- package/dist/generators/base.d.ts.map +1 -1
- package/dist/generators/base.js +26 -0
- package/dist/generators/base.js.map +1 -1
- package/dist/generators/fields/__tests__/helpers.d.ts +66 -0
- package/dist/generators/fields/__tests__/helpers.d.ts.map +1 -0
- package/dist/generators/fields/__tests__/helpers.js +142 -0
- package/dist/generators/fields/__tests__/helpers.js.map +1 -0
- package/dist/generators/fields/actions.d.ts +58 -0
- package/dist/generators/fields/actions.d.ts.map +1 -0
- package/dist/generators/fields/actions.js +230 -0
- package/dist/generators/fields/actions.js.map +1 -0
- package/dist/generators/fields/display.d.ts +28 -0
- package/dist/generators/fields/display.d.ts.map +1 -0
- package/dist/generators/fields/display.js +214 -0
- package/dist/generators/fields/display.js.map +1 -0
- package/dist/generators/fields/index.d.ts +12 -0
- package/dist/generators/fields/index.d.ts.map +1 -0
- package/dist/generators/fields/index.js +12 -0
- package/dist/generators/fields/index.js.map +1 -0
- package/dist/generators/fields/prompts.d.ts +31 -0
- package/dist/generators/fields/prompts.d.ts.map +1 -0
- package/dist/generators/fields/prompts.js +366 -0
- package/dist/generators/fields/prompts.js.map +1 -0
- package/dist/generators/fields/templates.d.ts +49 -0
- package/dist/generators/fields/templates.d.ts.map +1 -0
- package/dist/generators/fields/templates.js +230 -0
- package/dist/generators/fields/templates.js.map +1 -0
- package/dist/generators/fields/types.d.ts +95 -0
- package/dist/generators/fields/types.d.ts.map +1 -0
- package/dist/generators/fields/types.js +150 -0
- package/dist/generators/fields/types.js.map +1 -0
- package/dist/generators/generators/action.d.ts +37 -0
- package/dist/generators/generators/action.d.ts.map +1 -0
- package/dist/generators/generators/action.js +109 -0
- package/dist/generators/generators/action.js.map +1 -0
- package/dist/generators/generators/exception.d.ts +38 -0
- package/dist/generators/generators/exception.d.ts.map +1 -0
- package/dist/generators/generators/exception.js +109 -0
- package/dist/generators/generators/exception.js.map +1 -0
- package/dist/generators/generators/guard.d.ts +38 -0
- package/dist/generators/generators/guard.d.ts.map +1 -0
- package/dist/generators/generators/guard.js +109 -0
- package/dist/generators/generators/guard.js.map +1 -0
- package/dist/generators/generators/index.d.ts +8 -0
- package/dist/generators/generators/index.d.ts.map +1 -1
- package/dist/generators/generators/index.js +27 -0
- package/dist/generators/generators/index.js.map +1 -1
- package/dist/generators/generators/layout.d.ts +36 -0
- package/dist/generators/generators/layout.d.ts.map +1 -0
- package/dist/generators/generators/layout.js +111 -0
- package/dist/generators/generators/layout.js.map +1 -0
- package/dist/generators/generators/middleware.d.ts +38 -0
- package/dist/generators/generators/middleware.d.ts.map +1 -0
- package/dist/generators/generators/middleware.js +109 -0
- package/dist/generators/generators/middleware.js.map +1 -0
- package/dist/generators/generators/model.d.ts +16 -4
- package/dist/generators/generators/model.d.ts.map +1 -1
- package/dist/generators/generators/model.js +88 -7
- package/dist/generators/generators/model.js.map +1 -1
- package/dist/generators/generators/page.d.ts +36 -0
- package/dist/generators/generators/page.d.ts.map +1 -0
- package/dist/generators/generators/page.js +112 -0
- package/dist/generators/generators/page.js.map +1 -0
- package/dist/generators/generators/policy.d.ts +37 -0
- package/dist/generators/generators/policy.d.ts.map +1 -0
- package/dist/generators/generators/policy.js +100 -0
- package/dist/generators/generators/policy.js.map +1 -0
- package/dist/generators/generators/resource.d.ts +42 -4
- package/dist/generators/generators/resource.d.ts.map +1 -1
- package/dist/generators/generators/resource.js +450 -9
- package/dist/generators/generators/resource.js.map +1 -1
- package/dist/generators/generators/service.d.ts +38 -0
- package/dist/generators/generators/service.d.ts.map +1 -0
- package/dist/generators/generators/service.js +109 -0
- package/dist/generators/generators/service.js.map +1 -0
- package/dist/generators/registry.d.ts.map +1 -1
- package/dist/generators/registry.js +10 -1
- package/dist/generators/registry.js.map +1 -1
- package/dist/generators/templates/action.d.ts +28 -0
- package/dist/generators/templates/action.d.ts.map +1 -0
- package/dist/generators/templates/action.js +359 -0
- package/dist/generators/templates/action.js.map +1 -0
- package/dist/generators/templates/exception.d.ts +26 -0
- package/dist/generators/templates/exception.d.ts.map +1 -0
- package/dist/generators/templates/exception.js +671 -0
- package/dist/generators/templates/exception.js.map +1 -0
- package/dist/generators/templates/guard.d.ts +26 -0
- package/dist/generators/templates/guard.d.ts.map +1 -0
- package/dist/generators/templates/guard.js +555 -0
- package/dist/generators/templates/guard.js.map +1 -0
- package/dist/generators/templates/layout.d.ts +28 -0
- package/dist/generators/templates/layout.d.ts.map +1 -0
- package/dist/generators/templates/layout.js +147 -0
- package/dist/generators/templates/layout.js.map +1 -0
- package/dist/generators/templates/middleware.d.ts +26 -0
- package/dist/generators/templates/middleware.d.ts.map +1 -0
- package/dist/generators/templates/middleware.js +411 -0
- package/dist/generators/templates/middleware.js.map +1 -0
- package/dist/generators/templates/model.d.ts +3 -0
- package/dist/generators/templates/model.d.ts.map +1 -1
- package/dist/generators/templates/model.js +183 -28
- package/dist/generators/templates/model.js.map +1 -1
- package/dist/generators/templates/page.d.ts +36 -0
- package/dist/generators/templates/page.d.ts.map +1 -0
- package/dist/generators/templates/page.js +147 -0
- package/dist/generators/templates/page.js.map +1 -0
- package/dist/generators/templates/policy.d.ts +24 -0
- package/dist/generators/templates/policy.d.ts.map +1 -0
- package/dist/generators/templates/policy.js +499 -0
- package/dist/generators/templates/policy.js.map +1 -0
- package/dist/generators/templates/resource.d.ts +65 -0
- package/dist/generators/templates/resource.d.ts.map +1 -1
- package/dist/generators/templates/resource.js +228 -43
- package/dist/generators/templates/resource.js.map +1 -1
- package/dist/generators/templates/service.d.ts +26 -0
- package/dist/generators/templates/service.d.ts.map +1 -0
- package/dist/generators/templates/service.js +511 -0
- package/dist/generators/templates/service.js.map +1 -0
- package/dist/generators/types.d.ts +26 -14
- package/dist/generators/types.d.ts.map +1 -1
- package/dist/generators/types.js +8 -25
- package/dist/generators/types.js.map +1 -1
- package/dist/generators/utils/ast-helpers.d.ts +147 -0
- package/dist/generators/utils/ast-helpers.d.ts.map +1 -0
- package/dist/generators/utils/ast-helpers.js +350 -0
- package/dist/generators/utils/ast-helpers.js.map +1 -0
- package/dist/generators/utils/prisma-migration.d.ts +59 -0
- package/dist/generators/utils/prisma-migration.d.ts.map +1 -0
- package/dist/generators/utils/prisma-migration.js +161 -0
- package/dist/generators/utils/prisma-migration.js.map +1 -0
- package/dist/generators/utils/prisma-schema.d.ts +97 -0
- package/dist/generators/utils/prisma-schema.d.ts.map +1 -0
- package/dist/generators/utils/prisma-schema.js +235 -0
- package/dist/generators/utils/prisma-schema.js.map +1 -0
- package/dist/generators/utils/router-integration.d.ts +70 -0
- package/dist/generators/utils/router-integration.d.ts.map +1 -0
- package/dist/generators/utils/router-integration.js +305 -0
- package/dist/generators/utils/router-integration.js.map +1 -0
- package/dist/generators/utils/snapshot.d.ts +93 -0
- package/dist/generators/utils/snapshot.d.ts.map +1 -0
- package/dist/generators/utils/snapshot.js +178 -0
- package/dist/generators/utils/snapshot.js.map +1 -0
- package/dist/index.d.ts +6 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +6 -0
- package/dist/index.js.map +1 -1
- package/dist/seeding/errors.d.ts +11 -24
- package/dist/seeding/errors.d.ts.map +1 -1
- package/dist/seeding/errors.js +11 -50
- package/dist/seeding/errors.js.map +1 -1
- package/dist/utils/paths.d.ts +19 -0
- package/dist/utils/paths.d.ts.map +1 -1
- package/dist/utils/paths.js +45 -0
- package/dist/utils/paths.js.map +1 -1
- package/dist/utils/schema-patterns.d.ts +26 -0
- package/dist/utils/schema-patterns.d.ts.map +1 -0
- package/dist/utils/schema-patterns.js +40 -0
- package/dist/utils/schema-patterns.js.map +1 -0
- 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":"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"}
|
|
@@ -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"}
|