@veloxts/cli 0.4.0 → 0.4.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (140) hide show
  1. package/README.md +23 -144
  2. package/dist/cli.js +2 -0
  3. package/dist/cli.js.map +1 -1
  4. package/dist/commands/generate.d.ts +17 -0
  5. package/dist/commands/generate.d.ts.map +1 -0
  6. package/dist/commands/generate.js +219 -0
  7. package/dist/commands/generate.js.map +1 -0
  8. package/dist/commands/migrate.d.ts +8 -3
  9. package/dist/commands/migrate.d.ts.map +1 -1
  10. package/dist/commands/migrate.js +17 -123
  11. package/dist/commands/migrate.js.map +1 -1
  12. package/dist/generators/base.d.ts +76 -0
  13. package/dist/generators/base.d.ts.map +1 -0
  14. package/dist/generators/base.js +271 -0
  15. package/dist/generators/base.js.map +1 -0
  16. package/dist/generators/generators/index.d.ts +17 -0
  17. package/dist/generators/generators/index.d.ts.map +1 -0
  18. package/dist/generators/generators/index.js +43 -0
  19. package/dist/generators/generators/index.js.map +1 -0
  20. package/dist/generators/generators/migration.d.ts +43 -0
  21. package/dist/generators/generators/migration.d.ts.map +1 -0
  22. package/dist/generators/generators/migration.js +121 -0
  23. package/dist/generators/generators/migration.js.map +1 -0
  24. package/dist/generators/generators/model.d.ts +38 -0
  25. package/dist/generators/generators/model.d.ts.map +1 -0
  26. package/dist/generators/generators/model.js +108 -0
  27. package/dist/generators/generators/model.js.map +1 -0
  28. package/dist/generators/generators/procedure.d.ts +37 -0
  29. package/dist/generators/generators/procedure.d.ts.map +1 -0
  30. package/dist/generators/generators/procedure.js +99 -0
  31. package/dist/generators/generators/procedure.js.map +1 -0
  32. package/dist/generators/generators/resource.d.ts +29 -0
  33. package/dist/generators/generators/resource.d.ts.map +1 -0
  34. package/dist/generators/generators/resource.js +124 -0
  35. package/dist/generators/generators/resource.js.map +1 -0
  36. package/dist/generators/generators/schema.d.ts +28 -0
  37. package/dist/generators/generators/schema.d.ts.map +1 -0
  38. package/dist/generators/generators/schema.js +83 -0
  39. package/dist/generators/generators/schema.js.map +1 -0
  40. package/dist/generators/generators/test.d.ts +28 -0
  41. package/dist/generators/generators/test.d.ts.map +1 -0
  42. package/dist/generators/generators/test.js +96 -0
  43. package/dist/generators/generators/test.js.map +1 -0
  44. package/dist/generators/index.d.ts +16 -0
  45. package/dist/generators/index.d.ts.map +1 -0
  46. package/dist/generators/index.js +16 -0
  47. package/dist/generators/index.js.map +1 -0
  48. package/dist/generators/registry.d.ts +97 -0
  49. package/dist/generators/registry.d.ts.map +1 -0
  50. package/dist/generators/registry.js +253 -0
  51. package/dist/generators/registry.js.map +1 -0
  52. package/dist/generators/templates/migration.d.ts +23 -0
  53. package/dist/generators/templates/migration.d.ts.map +1 -0
  54. package/dist/generators/templates/migration.js +389 -0
  55. package/dist/generators/templates/migration.js.map +1 -0
  56. package/dist/generators/templates/model.d.ts +37 -0
  57. package/dist/generators/templates/model.d.ts.map +1 -0
  58. package/dist/generators/templates/model.js +374 -0
  59. package/dist/generators/templates/model.js.map +1 -0
  60. package/dist/generators/templates/procedure.d.ts +25 -0
  61. package/dist/generators/templates/procedure.d.ts.map +1 -0
  62. package/dist/generators/templates/procedure.js +274 -0
  63. package/dist/generators/templates/procedure.js.map +1 -0
  64. package/dist/generators/templates/resource.d.ts +34 -0
  65. package/dist/generators/templates/resource.d.ts.map +1 -0
  66. package/dist/generators/templates/resource.js +550 -0
  67. package/dist/generators/templates/resource.js.map +1 -0
  68. package/dist/generators/templates/schema.d.ts +33 -0
  69. package/dist/generators/templates/schema.d.ts.map +1 -0
  70. package/dist/generators/templates/schema.js +248 -0
  71. package/dist/generators/templates/schema.js.map +1 -0
  72. package/dist/generators/templates/test.d.ts +31 -0
  73. package/dist/generators/templates/test.d.ts.map +1 -0
  74. package/dist/generators/templates/test.js +882 -0
  75. package/dist/generators/templates/test.js.map +1 -0
  76. package/dist/generators/types.d.ts +211 -0
  77. package/dist/generators/types.d.ts.map +1 -0
  78. package/dist/generators/types.js +54 -0
  79. package/dist/generators/types.js.map +1 -0
  80. package/dist/generators/utils/filesystem.d.ts +68 -0
  81. package/dist/generators/utils/filesystem.d.ts.map +1 -0
  82. package/dist/generators/utils/filesystem.js +217 -0
  83. package/dist/generators/utils/filesystem.js.map +1 -0
  84. package/dist/generators/utils/naming.d.ts +122 -0
  85. package/dist/generators/utils/naming.d.ts.map +1 -0
  86. package/dist/generators/utils/naming.js +198 -0
  87. package/dist/generators/utils/naming.js.map +1 -0
  88. package/dist/index.d.ts +4 -0
  89. package/dist/index.d.ts.map +1 -1
  90. package/dist/index.js +4 -0
  91. package/dist/index.js.map +1 -1
  92. package/dist/migrations/commands/fresh.d.ts +11 -0
  93. package/dist/migrations/commands/fresh.d.ts.map +1 -0
  94. package/dist/migrations/commands/fresh.js +164 -0
  95. package/dist/migrations/commands/fresh.js.map +1 -0
  96. package/dist/migrations/commands/index.d.ts +11 -0
  97. package/dist/migrations/commands/index.d.ts.map +1 -0
  98. package/dist/migrations/commands/index.js +11 -0
  99. package/dist/migrations/commands/index.js.map +1 -0
  100. package/dist/migrations/commands/reset.d.ts +11 -0
  101. package/dist/migrations/commands/reset.d.ts.map +1 -0
  102. package/dist/migrations/commands/reset.js +258 -0
  103. package/dist/migrations/commands/reset.js.map +1 -0
  104. package/dist/migrations/commands/rollback.d.ts +11 -0
  105. package/dist/migrations/commands/rollback.d.ts.map +1 -0
  106. package/dist/migrations/commands/rollback.js +241 -0
  107. package/dist/migrations/commands/rollback.js.map +1 -0
  108. package/dist/migrations/commands/run.d.ts +11 -0
  109. package/dist/migrations/commands/run.d.ts.map +1 -0
  110. package/dist/migrations/commands/run.js +183 -0
  111. package/dist/migrations/commands/run.js.map +1 -0
  112. package/dist/migrations/commands/status.d.ts +11 -0
  113. package/dist/migrations/commands/status.d.ts.map +1 -0
  114. package/dist/migrations/commands/status.js +154 -0
  115. package/dist/migrations/commands/status.js.map +1 -0
  116. package/dist/migrations/errors.d.ts +74 -0
  117. package/dist/migrations/errors.d.ts.map +1 -0
  118. package/dist/migrations/errors.js +155 -0
  119. package/dist/migrations/errors.js.map +1 -0
  120. package/dist/migrations/index.d.ts +13 -0
  121. package/dist/migrations/index.d.ts.map +1 -0
  122. package/dist/migrations/index.js +17 -0
  123. package/dist/migrations/index.js.map +1 -0
  124. package/dist/migrations/loader.d.ts +44 -0
  125. package/dist/migrations/loader.d.ts.map +1 -0
  126. package/dist/migrations/loader.js +181 -0
  127. package/dist/migrations/loader.js.map +1 -0
  128. package/dist/migrations/prisma-wrapper.d.ts +60 -0
  129. package/dist/migrations/prisma-wrapper.d.ts.map +1 -0
  130. package/dist/migrations/prisma-wrapper.js +184 -0
  131. package/dist/migrations/prisma-wrapper.js.map +1 -0
  132. package/dist/migrations/rollback-runner.d.ts +40 -0
  133. package/dist/migrations/rollback-runner.d.ts.map +1 -0
  134. package/dist/migrations/rollback-runner.js +203 -0
  135. package/dist/migrations/rollback-runner.js.map +1 -0
  136. package/dist/migrations/types.d.ts +214 -0
  137. package/dist/migrations/types.d.ts.map +1 -0
  138. package/dist/migrations/types.js +19 -0
  139. package/dist/migrations/types.js.map +1 -0
  140. package/package.json +29 -8
@@ -1 +1 @@
1
- {"version":3,"file":"migrate.js","sourceRoot":"","sources":["../../src/commands/migrate.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"migrate.js","sourceRoot":"","sources":["../../src/commands/migrate.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAEpC,OAAO,EACL,yBAAyB,EACzB,yBAAyB,EACzB,4BAA4B,EAC5B,uBAAuB,EACvB,0BAA0B,GAC3B,MAAM,iCAAiC,CAAC;AAEzC;;GAEG;AACH,MAAM,UAAU,oBAAoB;IAClC,MAAM,OAAO,GAAG,IAAI,OAAO,CAAC,SAAS,CAAC;SACnC,WAAW,CAAC,6BAA6B,CAAC;SAC1C,UAAU,CAAC,0BAA0B,EAAE,CAAC;SACxC,UAAU,CAAC,uBAAuB,EAAE,CAAC;SACrC,UAAU,CAAC,4BAA4B,EAAE,CAAC;SAC1C,UAAU,CAAC,yBAAyB,EAAE,CAAC;SACvC,UAAU,CAAC,yBAAyB,EAAE,CAAC,CAAC;IAE3C,OAAO,OAAO,CAAC;AACjB,CAAC"}
@@ -0,0 +1,76 @@
1
+ /**
2
+ * Base Generator Infrastructure
3
+ *
4
+ * Core utilities and base class for all VeloxTS code generators.
5
+ */
6
+ import type { ConflictStrategy, Generator, GeneratorConfig, GeneratorMetadata, GeneratorOption, GeneratorOutput, ProjectContext, TemplateContext } from './types.js';
7
+ /**
8
+ * Ensure the current directory is a VeloxTS project
9
+ *
10
+ * @throws GeneratorError if not in a VeloxTS project
11
+ */
12
+ export declare function ensureVeloxProject(cwd: string): Promise<void>;
13
+ /**
14
+ * Detect project configuration from package.json and velox config
15
+ */
16
+ export declare function detectProjectContext(cwd: string): Promise<ProjectContext>;
17
+ /**
18
+ * Validate entity name format
19
+ *
20
+ * @returns Error message if invalid, undefined if valid
21
+ */
22
+ export declare function validateEntityNameDefault(name: string): string | undefined;
23
+ /**
24
+ * Abstract base class for all generators.
25
+ * Provides common functionality and enforces the generator contract.
26
+ */
27
+ export declare abstract class BaseGenerator<TOptions = Record<string, unknown>> implements Generator<TOptions> {
28
+ abstract readonly metadata: GeneratorMetadata;
29
+ abstract readonly options: ReadonlyArray<GeneratorOption>;
30
+ /**
31
+ * Default entity name validation.
32
+ * Override in subclasses for custom validation.
33
+ */
34
+ validateEntityName(name: string): string | undefined;
35
+ /**
36
+ * Validate and transform raw CLI options to typed options.
37
+ * Override in subclasses to implement option validation.
38
+ */
39
+ abstract validateOptions(raw: Record<string, unknown>): TOptions;
40
+ /**
41
+ * Generate files based on configuration.
42
+ * Must be implemented by subclasses.
43
+ */
44
+ abstract generate(config: GeneratorConfig<TOptions>): Promise<GeneratorOutput>;
45
+ /**
46
+ * Create a template context for generation
47
+ */
48
+ protected createContext(config: GeneratorConfig<TOptions>): TemplateContext<TOptions>;
49
+ /**
50
+ * Resolve output path relative to project root
51
+ */
52
+ protected resolvePath(cwd: string, relativePath: string): string;
53
+ /**
54
+ * Check if a file would conflict (exists and shouldn't be overwritten)
55
+ */
56
+ protected wouldConflict(filePath: string, strategy: ConflictStrategy, force: boolean): boolean;
57
+ /**
58
+ * Format a success message for generated files
59
+ */
60
+ protected formatSuccessMessage(files: ReadonlyArray<{
61
+ path: string;
62
+ }>, dryRun: boolean): string;
63
+ }
64
+ /**
65
+ * Default generator configuration
66
+ */
67
+ export declare function createDefaultConfig<TOptions>(entityName: string, options: TOptions, project: ProjectContext): Omit<GeneratorConfig<TOptions>, 'cwd'>;
68
+ /**
69
+ * Apply CLI flags to generator config
70
+ */
71
+ export declare function applyCliFlags<TOptions>(config: GeneratorConfig<TOptions>, flags: {
72
+ dryRun?: boolean;
73
+ force?: boolean;
74
+ json?: boolean;
75
+ }): GeneratorConfig<TOptions>;
76
+ //# sourceMappingURL=base.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"base.d.ts","sourceRoot":"","sources":["../../src/generators/base.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAKH,OAAO,KAAK,EACV,gBAAgB,EAChB,SAAS,EACT,eAAe,EACf,iBAAiB,EACjB,eAAe,EACf,eAAe,EACf,cAAc,EACd,eAAe,EAChB,MAAM,YAAY,CAAC;AAapB;;;;GAIG;AACH,wBAAsB,kBAAkB,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CA0BnE;AAED;;GAEG;AACH,wBAAsB,oBAAoB,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,cAAc,CAAC,CA4B/E;AA2GD;;;;GAIG;AACH,wBAAgB,yBAAyB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CA4B1E;AAMD;;;GAGG;AACH,8BAAsB,aAAa,CAAC,QAAQ,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CACpE,YAAW,SAAS,CAAC,QAAQ,CAAC;IAE9B,QAAQ,CAAC,QAAQ,CAAC,QAAQ,EAAE,iBAAiB,CAAC;IAC9C,QAAQ,CAAC,QAAQ,CAAC,OAAO,EAAE,aAAa,CAAC,eAAe,CAAC,CAAC;IAE1D;;;OAGG;IACH,kBAAkB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS;IAIpD;;;OAGG;IACH,QAAQ,CAAC,eAAe,CAAC,GAAG,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,QAAQ;IAEhE;;;OAGG;IACH,QAAQ,CAAC,QAAQ,CAAC,MAAM,EAAE,eAAe,CAAC,QAAQ,CAAC,GAAG,OAAO,CAAC,eAAe,CAAC;IAM9E;;OAEG;IACH,SAAS,CAAC,aAAa,CAAC,MAAM,EAAE,eAAe,CAAC,QAAQ,CAAC,GAAG,eAAe,CAAC,QAAQ,CAAC;IAQrF;;OAEG;IACH,SAAS,CAAC,WAAW,CAAC,GAAG,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,GAAG,MAAM;IAIhE;;OAEG;IACH,SAAS,CAAC,aAAa,CAAC,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE,gBAAgB,EAAE,KAAK,EAAE,OAAO,GAAG,OAAO;IAY9F;;OAEG;IACH,SAAS,CAAC,oBAAoB,CAAC,KAAK,EAAE,aAAa,CAAC;QAAE,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC,EAAE,MAAM,EAAE,OAAO,GAAG,MAAM;CAKhG;AAMD;;GAEG;AACH,wBAAgB,mBAAmB,CAAC,QAAQ,EAC1C,UAAU,EAAE,MAAM,EAClB,OAAO,EAAE,QAAQ,EACjB,OAAO,EAAE,cAAc,GACtB,IAAI,CAAC,eAAe,CAAC,QAAQ,CAAC,EAAE,KAAK,CAAC,CASxC;AAED;;GAEG;AACH,wBAAgB,aAAa,CAAC,QAAQ,EACpC,MAAM,EAAE,eAAe,CAAC,QAAQ,CAAC,EACjC,KAAK,EAAE;IACL,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,IAAI,CAAC,EAAE,OAAO,CAAC;CAChB,GACA,eAAe,CAAC,QAAQ,CAAC,CAO3B"}
@@ -0,0 +1,271 @@
1
+ /**
2
+ * Base Generator Infrastructure
3
+ *
4
+ * Core utilities and base class for all VeloxTS code generators.
5
+ */
6
+ import { existsSync, readFileSync } from 'node:fs';
7
+ import { join, resolve } from 'node:path';
8
+ import { GeneratorError, GeneratorErrorCode } from './types.js';
9
+ import { deriveEntityNames } from './utils/naming.js';
10
+ // ============================================================================
11
+ // Project Detection
12
+ // ============================================================================
13
+ /**
14
+ * Markers that indicate a VeloxTS project
15
+ */
16
+ const VELOX_PROJECT_MARKERS = ['@veloxts/velox', '@veloxts/core', '@veloxts/router'];
17
+ /**
18
+ * Ensure the current directory is a VeloxTS project
19
+ *
20
+ * @throws GeneratorError if not in a VeloxTS project
21
+ */
22
+ export async function ensureVeloxProject(cwd) {
23
+ const packageJsonPath = join(cwd, 'package.json');
24
+ if (!existsSync(packageJsonPath)) {
25
+ throw new GeneratorError(GeneratorErrorCode.NOT_IN_PROJECT, 'No package.json found. Are you in a VeloxTS project?', 'Run this command from the root of your VeloxTS project, or create a new project with: npx create-velox-app my-app');
26
+ }
27
+ const packageJson = JSON.parse(readFileSync(packageJsonPath, 'utf-8'));
28
+ const dependencies = {
29
+ ...packageJson.dependencies,
30
+ ...packageJson.devDependencies,
31
+ };
32
+ const hasVeloxMarker = VELOX_PROJECT_MARKERS.some((marker) => marker in dependencies);
33
+ if (!hasVeloxMarker) {
34
+ throw new GeneratorError(GeneratorErrorCode.NOT_IN_PROJECT, 'This does not appear to be a VeloxTS project.', 'VeloxTS packages not found in dependencies. Create a new project with: npx create-velox-app my-app');
35
+ }
36
+ }
37
+ /**
38
+ * Detect project configuration from package.json and velox config
39
+ */
40
+ export async function detectProjectContext(cwd) {
41
+ const packageJsonPath = join(cwd, 'package.json');
42
+ if (!existsSync(packageJsonPath)) {
43
+ return {
44
+ name: 'unknown',
45
+ hasAuth: false,
46
+ database: 'sqlite',
47
+ };
48
+ }
49
+ const packageJson = JSON.parse(readFileSync(packageJsonPath, 'utf-8'));
50
+ const dependencies = {
51
+ ...packageJson.dependencies,
52
+ ...packageJson.devDependencies,
53
+ };
54
+ // Detect auth package
55
+ const hasAuth = '@veloxts/auth' in dependencies;
56
+ // Detect database from Prisma schema or default to SQLite
57
+ const database = detectDatabase(cwd);
58
+ return {
59
+ name: packageJson.name ?? 'velox-app',
60
+ hasAuth,
61
+ database,
62
+ };
63
+ }
64
+ /**
65
+ * Detect database type from Prisma schema
66
+ */
67
+ function detectDatabase(cwd) {
68
+ const prismaSchemaPath = join(cwd, 'prisma', 'schema.prisma');
69
+ if (!existsSync(prismaSchemaPath)) {
70
+ return 'sqlite';
71
+ }
72
+ const schema = readFileSync(prismaSchemaPath, 'utf-8');
73
+ if (schema.includes('provider = "postgresql"') || schema.includes('provider = "postgres"')) {
74
+ return 'postgresql';
75
+ }
76
+ if (schema.includes('provider = "mysql"')) {
77
+ return 'mysql';
78
+ }
79
+ return 'sqlite';
80
+ }
81
+ // ============================================================================
82
+ // Entity Name Validation
83
+ // ============================================================================
84
+ /**
85
+ * Reserved words that cannot be used as entity names
86
+ */
87
+ const RESERVED_WORDS = new Set([
88
+ // JavaScript/TypeScript keywords
89
+ 'break',
90
+ 'case',
91
+ 'catch',
92
+ 'class',
93
+ 'const',
94
+ 'continue',
95
+ 'debugger',
96
+ 'default',
97
+ 'delete',
98
+ 'do',
99
+ 'else',
100
+ 'enum',
101
+ 'export',
102
+ 'extends',
103
+ 'false',
104
+ 'finally',
105
+ 'for',
106
+ 'function',
107
+ 'if',
108
+ 'import',
109
+ 'in',
110
+ 'instanceof',
111
+ 'let',
112
+ 'new',
113
+ 'null',
114
+ 'return',
115
+ 'static',
116
+ 'super',
117
+ 'switch',
118
+ 'this',
119
+ 'throw',
120
+ 'true',
121
+ 'try',
122
+ 'typeof',
123
+ 'var',
124
+ 'void',
125
+ 'while',
126
+ 'with',
127
+ 'yield',
128
+ 'async',
129
+ 'await',
130
+ 'implements',
131
+ 'interface',
132
+ 'package',
133
+ 'private',
134
+ 'protected',
135
+ 'public',
136
+ 'type',
137
+ 'any',
138
+ 'unknown',
139
+ 'never',
140
+ 'object',
141
+ 'string',
142
+ 'number',
143
+ 'boolean',
144
+ 'symbol',
145
+ 'bigint',
146
+ // VeloxTS reserved
147
+ 'procedure',
148
+ 'procedures',
149
+ 'context',
150
+ 'router',
151
+ 'velox',
152
+ 'api',
153
+ 'query',
154
+ 'mutation',
155
+ 'input',
156
+ 'output',
157
+ 'guard',
158
+ 'middleware',
159
+ ]);
160
+ /**
161
+ * Validate entity name format
162
+ *
163
+ * @returns Error message if invalid, undefined if valid
164
+ */
165
+ export function validateEntityNameDefault(name) {
166
+ // Must not be empty
167
+ if (!name || name.trim().length === 0) {
168
+ return 'Entity name cannot be empty';
169
+ }
170
+ // Must start with a letter
171
+ if (!/^[a-zA-Z]/.test(name)) {
172
+ return 'Entity name must start with a letter';
173
+ }
174
+ // Can only contain letters, numbers, hyphens, underscores
175
+ if (!/^[a-zA-Z][a-zA-Z0-9_-]*$/.test(name)) {
176
+ return 'Entity name can only contain letters, numbers, hyphens, and underscores';
177
+ }
178
+ // Must not be too long
179
+ if (name.length > 64) {
180
+ return 'Entity name must be 64 characters or less';
181
+ }
182
+ // Must not be a reserved word
183
+ const lower = name.toLowerCase();
184
+ if (RESERVED_WORDS.has(lower)) {
185
+ return `"${name}" is a reserved word and cannot be used as an entity name`;
186
+ }
187
+ return undefined;
188
+ }
189
+ // ============================================================================
190
+ // Base Generator Class
191
+ // ============================================================================
192
+ /**
193
+ * Abstract base class for all generators.
194
+ * Provides common functionality and enforces the generator contract.
195
+ */
196
+ export class BaseGenerator {
197
+ /**
198
+ * Default entity name validation.
199
+ * Override in subclasses for custom validation.
200
+ */
201
+ validateEntityName(name) {
202
+ return validateEntityNameDefault(name);
203
+ }
204
+ // ============================================================================
205
+ // Helper Methods
206
+ // ============================================================================
207
+ /**
208
+ * Create a template context for generation
209
+ */
210
+ createContext(config) {
211
+ return {
212
+ entity: deriveEntityNames(config.entityName),
213
+ project: config.project,
214
+ options: config.options,
215
+ };
216
+ }
217
+ /**
218
+ * Resolve output path relative to project root
219
+ */
220
+ resolvePath(cwd, relativePath) {
221
+ return resolve(cwd, relativePath);
222
+ }
223
+ /**
224
+ * Check if a file would conflict (exists and shouldn't be overwritten)
225
+ */
226
+ wouldConflict(filePath, strategy, force) {
227
+ if (force) {
228
+ return false;
229
+ }
230
+ if (!existsSync(filePath)) {
231
+ return false;
232
+ }
233
+ return strategy !== 'overwrite';
234
+ }
235
+ /**
236
+ * Format a success message for generated files
237
+ */
238
+ formatSuccessMessage(files, dryRun) {
239
+ const prefix = dryRun ? '[dry-run] Would create' : 'Created';
240
+ const fileList = files.map((f) => ` • ${f.path}`).join('\n');
241
+ return `${prefix}:\n${fileList}`;
242
+ }
243
+ }
244
+ // ============================================================================
245
+ // Configuration Helpers
246
+ // ============================================================================
247
+ /**
248
+ * Default generator configuration
249
+ */
250
+ export function createDefaultConfig(entityName, options, project) {
251
+ return {
252
+ entityName,
253
+ options,
254
+ conflictStrategy: 'prompt',
255
+ dryRun: false,
256
+ force: false,
257
+ project,
258
+ };
259
+ }
260
+ /**
261
+ * Apply CLI flags to generator config
262
+ */
263
+ export function applyCliFlags(config, flags) {
264
+ return {
265
+ ...config,
266
+ dryRun: flags.dryRun ?? config.dryRun,
267
+ force: flags.force ?? config.force,
268
+ conflictStrategy: flags.force ? 'overwrite' : config.conflictStrategy,
269
+ };
270
+ }
271
+ //# sourceMappingURL=base.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"base.js","sourceRoot":"","sources":["../../src/generators/base.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,17 @@
1
+ /**
2
+ * Built-in Generators
3
+ *
4
+ * Re-exports all built-in generators and provides auto-registration.
5
+ */
6
+ export { createMigrationGenerator, MigrationGenerator } from './migration.js';
7
+ export { createModelGenerator, ModelGenerator } from './model.js';
8
+ export { createProcedureGenerator, ProcedureGenerator } from './procedure.js';
9
+ export { createResourceGenerator, ResourceGenerator } from './resource.js';
10
+ export { createSchemaGenerator, SchemaGenerator } from './schema.js';
11
+ export { createTestGenerator, TestGenerator } from './test.js';
12
+ /**
13
+ * Register all built-in generators with the global registry.
14
+ * Call this once during CLI initialization.
15
+ */
16
+ export declare function registerBuiltinGenerators(): void;
17
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/generators/generators/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAcH,OAAO,EAAE,wBAAwB,EAAE,kBAAkB,EAAE,MAAM,gBAAgB,CAAC;AAC9E,OAAO,EAAE,oBAAoB,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAClE,OAAO,EAAE,wBAAwB,EAAE,kBAAkB,EAAE,MAAM,gBAAgB,CAAC;AAC9E,OAAO,EAAE,uBAAuB,EAAE,iBAAiB,EAAE,MAAM,eAAe,CAAC;AAC3E,OAAO,EAAE,qBAAqB,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AACrE,OAAO,EAAE,mBAAmB,EAAE,aAAa,EAAE,MAAM,WAAW,CAAC;AAM/D;;;GAGG;AACH,wBAAgB,yBAAyB,IAAI,IAAI,CAkBhD"}
@@ -0,0 +1,43 @@
1
+ /**
2
+ * Built-in Generators
3
+ *
4
+ * Re-exports all built-in generators and provides auto-registration.
5
+ */
6
+ import { registerGenerator } from '../registry.js';
7
+ import { createMigrationGenerator } from './migration.js';
8
+ import { createModelGenerator } from './model.js';
9
+ import { createProcedureGenerator } from './procedure.js';
10
+ import { createResourceGenerator } from './resource.js';
11
+ import { createSchemaGenerator } from './schema.js';
12
+ import { createTestGenerator } from './test.js';
13
+ // ============================================================================
14
+ // Generator Exports
15
+ // ============================================================================
16
+ export { createMigrationGenerator, MigrationGenerator } from './migration.js';
17
+ export { createModelGenerator, ModelGenerator } from './model.js';
18
+ export { createProcedureGenerator, ProcedureGenerator } from './procedure.js';
19
+ export { createResourceGenerator, ResourceGenerator } from './resource.js';
20
+ export { createSchemaGenerator, SchemaGenerator } from './schema.js';
21
+ export { createTestGenerator, TestGenerator } from './test.js';
22
+ // ============================================================================
23
+ // Auto-Registration
24
+ // ============================================================================
25
+ /**
26
+ * Register all built-in generators with the global registry.
27
+ * Call this once during CLI initialization.
28
+ */
29
+ export function registerBuiltinGenerators() {
30
+ // Register procedure generator
31
+ registerGenerator(createProcedureGenerator());
32
+ // Register model generator
33
+ registerGenerator(createModelGenerator());
34
+ // Register migration generator
35
+ registerGenerator(createMigrationGenerator());
36
+ // Register schema generator
37
+ registerGenerator(createSchemaGenerator());
38
+ // Register test generator
39
+ registerGenerator(createTestGenerator());
40
+ // Register resource generator (full stack)
41
+ registerGenerator(createResourceGenerator());
42
+ }
43
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/generators/generators/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,iBAAiB,EAAE,MAAM,gBAAgB,CAAC;AACnD,OAAO,EAAE,wBAAwB,EAAE,MAAM,gBAAgB,CAAC;AAC1D,OAAO,EAAE,oBAAoB,EAAE,MAAM,YAAY,CAAC;AAClD,OAAO,EAAE,wBAAwB,EAAE,MAAM,gBAAgB,CAAC;AAC1D,OAAO,EAAE,uBAAuB,EAAE,MAAM,eAAe,CAAC;AACxD,OAAO,EAAE,qBAAqB,EAAE,MAAM,aAAa,CAAC;AACpD,OAAO,EAAE,mBAAmB,EAAE,MAAM,WAAW,CAAC;AAEhD,+EAA+E;AAC/E,oBAAoB;AACpB,+EAA+E;AAE/E,OAAO,EAAE,wBAAwB,EAAE,kBAAkB,EAAE,MAAM,gBAAgB,CAAC;AAC9E,OAAO,EAAE,oBAAoB,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAClE,OAAO,EAAE,wBAAwB,EAAE,kBAAkB,EAAE,MAAM,gBAAgB,CAAC;AAC9E,OAAO,EAAE,uBAAuB,EAAE,iBAAiB,EAAE,MAAM,eAAe,CAAC;AAC3E,OAAO,EAAE,qBAAqB,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AACrE,OAAO,EAAE,mBAAmB,EAAE,aAAa,EAAE,MAAM,WAAW,CAAC;AAE/D,+EAA+E;AAC/E,oBAAoB;AACpB,+EAA+E;AAE/E;;;GAGG;AACH,MAAM,UAAU,yBAAyB;IACvC,+BAA+B;IAC/B,iBAAiB,CAAC,wBAAwB,EAAE,CAAC,CAAC;IAE9C,2BAA2B;IAC3B,iBAAiB,CAAC,oBAAoB,EAAE,CAAC,CAAC;IAE1C,+BAA+B;IAC/B,iBAAiB,CAAC,wBAAwB,EAAE,CAAC,CAAC;IAE9C,4BAA4B;IAC5B,iBAAiB,CAAC,qBAAqB,EAAE,CAAC,CAAC;IAE3C,0BAA0B;IAC1B,iBAAiB,CAAC,mBAAmB,EAAE,CAAC,CAAC;IAEzC,2CAA2C;IAC3C,iBAAiB,CAAC,uBAAuB,EAAE,CAAC,CAAC;AAC/C,CAAC"}
@@ -0,0 +1,43 @@
1
+ /**
2
+ * Migration Generator
3
+ *
4
+ * Generates Prisma migration files with SQL scaffolding.
5
+ *
6
+ * Usage:
7
+ * velox generate migration <name> [options]
8
+ * velox g mig <name> [options]
9
+ *
10
+ * Examples:
11
+ * velox generate migration create_posts
12
+ * velox generate migration add_email_to_users
13
+ * velox generate migration remove_name_from_users
14
+ * velox g mig rename_posts_to_articles
15
+ */
16
+ import { BaseGenerator } from '../base.js';
17
+ import { type MigrationOptions } from '../templates/migration.js';
18
+ import type { GeneratorConfig, GeneratorMetadata, GeneratorOption, GeneratorOutput } from '../types.js';
19
+ /**
20
+ * Migration generator - creates Prisma migration files
21
+ */
22
+ export declare class MigrationGenerator extends BaseGenerator<MigrationOptions> {
23
+ readonly metadata: GeneratorMetadata;
24
+ readonly options: ReadonlyArray<GeneratorOption>;
25
+ /**
26
+ * Custom validation for migration names
27
+ * Migration names should be snake_case and descriptive
28
+ */
29
+ validateEntityName(name: string): string | undefined;
30
+ /**
31
+ * Validate and transform raw options
32
+ */
33
+ validateOptions(raw: Record<string, unknown>): MigrationOptions;
34
+ /**
35
+ * Generate migration files
36
+ */
37
+ generate(config: GeneratorConfig<MigrationOptions>): Promise<GeneratorOutput>;
38
+ }
39
+ /**
40
+ * Create a new migration generator instance
41
+ */
42
+ export declare function createMigrationGenerator(): MigrationGenerator;
43
+ //# sourceMappingURL=migration.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"migration.d.ts","sourceRoot":"","sources":["../../../src/generators/generators/migration.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAEH,OAAO,EAAE,aAAa,EAAwB,MAAM,YAAY,CAAC;AACjE,OAAO,EAGL,KAAK,gBAAgB,EACtB,MAAM,2BAA2B,CAAC;AACnC,OAAO,KAAK,EACV,eAAe,EACf,iBAAiB,EACjB,eAAe,EACf,eAAe,EAChB,MAAM,aAAa,CAAC;AAMrB;;GAEG;AACH,qBAAa,kBAAmB,SAAQ,aAAa,CAAC,gBAAgB,CAAC;IACrE,QAAQ,CAAC,QAAQ,EAAE,iBAAiB,CAsBlC;IAEF,QAAQ,CAAC,OAAO,EAAE,aAAa,CAAC,eAAe,CAAC,CAS9C;IAEF;;;OAGG;IACH,kBAAkB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS;IAiBpD;;OAEG;IACH,eAAe,CAAC,GAAG,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,gBAAgB;IAa/D;;OAEG;IACG,QAAQ,CAAC,MAAM,EAAE,eAAe,CAAC,gBAAgB,CAAC,GAAG,OAAO,CAAC,eAAe,CAAC;CAwBpF;AAMD;;GAEG;AACH,wBAAgB,wBAAwB,IAAI,kBAAkB,CAE7D"}
@@ -0,0 +1,121 @@
1
+ /**
2
+ * Migration Generator
3
+ *
4
+ * Generates Prisma migration files with SQL scaffolding.
5
+ *
6
+ * Usage:
7
+ * velox generate migration <name> [options]
8
+ * velox g mig <name> [options]
9
+ *
10
+ * Examples:
11
+ * velox generate migration create_posts
12
+ * velox generate migration add_email_to_users
13
+ * velox generate migration remove_name_from_users
14
+ * velox g mig rename_posts_to_articles
15
+ */
16
+ import { BaseGenerator, detectProjectContext } from '../base.js';
17
+ import { generateMigrationFiles, getMigrationInstructions, } from '../templates/migration.js';
18
+ // ============================================================================
19
+ // Generator Implementation
20
+ // ============================================================================
21
+ /**
22
+ * Migration generator - creates Prisma migration files
23
+ */
24
+ export class MigrationGenerator extends BaseGenerator {
25
+ metadata = {
26
+ name: 'migration',
27
+ description: 'Generate a database migration file',
28
+ longDescription: `
29
+ Generate a Prisma-compatible migration file with SQL scaffolding.
30
+
31
+ The migration name determines the SQL template:
32
+ create_<table> → CREATE TABLE scaffold
33
+ add_<column>_to_<table> → ALTER TABLE ADD COLUMN
34
+ remove_<column>_from_<table> → ALTER TABLE DROP COLUMN
35
+ rename_<old>_to_<new> → RENAME TABLE
36
+ drop_<table> → DROP TABLE
37
+ <anything_else> → Custom migration template
38
+
39
+ Examples:
40
+ velox generate migration create_posts
41
+ velox generate migration add_slug_to_posts
42
+ velox generate migration remove_legacy_field_from_users
43
+ velox g mig rename_posts_to_articles
44
+ `,
45
+ aliases: ['mig'],
46
+ category: 'database',
47
+ };
48
+ options = [
49
+ {
50
+ name: 'database',
51
+ short: 'D',
52
+ description: 'Database type (sqlite, postgresql, mysql)',
53
+ type: 'string',
54
+ choices: ['sqlite', 'postgresql', 'mysql'],
55
+ default: 'sqlite',
56
+ },
57
+ ];
58
+ /**
59
+ * Custom validation for migration names
60
+ * Migration names should be snake_case and descriptive
61
+ */
62
+ validateEntityName(name) {
63
+ if (!name || name.trim().length === 0) {
64
+ return 'Migration name cannot be empty';
65
+ }
66
+ // Must be snake_case or kebab-case
67
+ if (!/^[a-z][a-z0-9_-]*$/.test(name)) {
68
+ return 'Migration name must be lowercase with underscores or hyphens (e.g., create_users)';
69
+ }
70
+ if (name.length > 100) {
71
+ return 'Migration name must be 100 characters or less';
72
+ }
73
+ return undefined;
74
+ }
75
+ /**
76
+ * Validate and transform raw options
77
+ */
78
+ validateOptions(raw) {
79
+ const database = raw.database;
80
+ // Validate database type
81
+ if (database && !['sqlite', 'postgresql', 'mysql'].includes(database)) {
82
+ throw new Error(`Invalid database type: ${database}. Use sqlite, postgresql, or mysql.`);
83
+ }
84
+ return {
85
+ database: database ?? 'sqlite',
86
+ };
87
+ }
88
+ /**
89
+ * Generate migration files
90
+ */
91
+ async generate(config) {
92
+ // Auto-detect database type from project if not specified
93
+ let options = config.options;
94
+ if (!config.options.database || config.options.database === 'sqlite') {
95
+ const project = await detectProjectContext(config.cwd);
96
+ options = { ...config.options, database: project.database };
97
+ }
98
+ const context = this.createContext({
99
+ ...config,
100
+ options,
101
+ });
102
+ // Generate migration files
103
+ const files = generateMigrationFiles(context);
104
+ // Generate post-creation instructions
105
+ const postInstructions = getMigrationInstructions(context.entity.snake);
106
+ return {
107
+ files,
108
+ postInstructions,
109
+ };
110
+ }
111
+ }
112
+ // ============================================================================
113
+ // Export
114
+ // ============================================================================
115
+ /**
116
+ * Create a new migration generator instance
117
+ */
118
+ export function createMigrationGenerator() {
119
+ return new MigrationGenerator();
120
+ }
121
+ //# sourceMappingURL=migration.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"migration.js","sourceRoot":"","sources":["../../../src/generators/generators/migration.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAEH,OAAO,EAAE,aAAa,EAAE,oBAAoB,EAAE,MAAM,YAAY,CAAC;AACjE,OAAO,EACL,sBAAsB,EACtB,wBAAwB,GAEzB,MAAM,2BAA2B,CAAC;AAQnC,+EAA+E;AAC/E,2BAA2B;AAC3B,+EAA+E;AAE/E;;GAEG;AACH,MAAM,OAAO,kBAAmB,SAAQ,aAA+B;IAC5D,QAAQ,GAAsB;QACrC,IAAI,EAAE,WAAW;QACjB,WAAW,EAAE,oCAAoC;QACjD,eAAe,EAAE;;;;;;;;;;;;;;;;CAgBpB;QACG,OAAO,EAAE,CAAC,KAAK,CAAC;QAChB,QAAQ,EAAE,UAAU;KACrB,CAAC;IAEO,OAAO,GAAmC;QACjD;YACE,IAAI,EAAE,UAAU;YAChB,KAAK,EAAE,GAAG;YACV,WAAW,EAAE,2CAA2C;YACxD,IAAI,EAAE,QAAQ;YACd,OAAO,EAAE,CAAC,QAAQ,EAAE,YAAY,EAAE,OAAO,CAAC;YAC1C,OAAO,EAAE,QAAQ;SAClB;KACF,CAAC;IAEF;;;OAGG;IACH,kBAAkB,CAAC,IAAY;QAC7B,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,IAAI,EAAE,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACtC,OAAO,gCAAgC,CAAC;QAC1C,CAAC;QAED,mCAAmC;QACnC,IAAI,CAAC,oBAAoB,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;YACrC,OAAO,mFAAmF,CAAC;QAC7F,CAAC;QAED,IAAI,IAAI,CAAC,MAAM,GAAG,GAAG,EAAE,CAAC;YACtB,OAAO,+CAA+C,CAAC;QACzD,CAAC;QAED,OAAO,SAAS,CAAC;IACnB,CAAC;IAED;;OAEG;IACH,eAAe,CAAC,GAA4B;QAC1C,MAAM,QAAQ,GAAG,GAAG,CAAC,QAA8B,CAAC;QAEpD,yBAAyB;QACzB,IAAI,QAAQ,IAAI,CAAC,CAAC,QAAQ,EAAE,YAAY,EAAE,OAAO,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,EAAE,CAAC;YACtE,MAAM,IAAI,KAAK,CAAC,0BAA0B,QAAQ,qCAAqC,CAAC,CAAC;QAC3F,CAAC;QAED,OAAO;YACL,QAAQ,EAAG,QAAyC,IAAI,QAAQ;SACjE,CAAC;IACJ,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,QAAQ,CAAC,MAAyC;QACtD,0DAA0D;QAC1D,IAAI,OAAO,GAAG,MAAM,CAAC,OAAO,CAAC;QAC7B,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,QAAQ,IAAI,MAAM,CAAC,OAAO,CAAC,QAAQ,KAAK,QAAQ,EAAE,CAAC;YACrE,MAAM,OAAO,GAAG,MAAM,oBAAoB,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;YACvD,OAAO,GAAG,EAAE,GAAG,MAAM,CAAC,OAAO,EAAE,QAAQ,EAAE,OAAO,CAAC,QAAQ,EAAE,CAAC;QAC9D,CAAC;QAED,MAAM,OAAO,GAAG,IAAI,CAAC,aAAa,CAAC;YACjC,GAAG,MAAM;YACT,OAAO;SACR,CAAC,CAAC;QAEH,2BAA2B;QAC3B,MAAM,KAAK,GAAG,sBAAsB,CAAC,OAAO,CAAC,CAAC;QAE9C,sCAAsC;QACtC,MAAM,gBAAgB,GAAG,wBAAwB,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;QAExE,OAAO;YACL,KAAK;YACL,gBAAgB;SACjB,CAAC;IACJ,CAAC;CACF;AAED,+EAA+E;AAC/E,SAAS;AACT,+EAA+E;AAE/E;;GAEG;AACH,MAAM,UAAU,wBAAwB;IACtC,OAAO,IAAI,kBAAkB,EAAE,CAAC;AAClC,CAAC"}
@@ -0,0 +1,38 @@
1
+ /**
2
+ * Model Generator
3
+ *
4
+ * Generates Prisma model, Zod schema, and optionally procedures.
5
+ *
6
+ * Usage:
7
+ * velox generate model <name> [options]
8
+ * velox g m <name> [options]
9
+ *
10
+ * Examples:
11
+ * velox generate model Post # Model + schema only
12
+ * velox generate model Comment --crud # Model + schema + procedures
13
+ * velox g m Order --crud --paginated # With pagination
14
+ * velox g m Article --soft-delete # With soft delete support
15
+ */
16
+ import { BaseGenerator } from '../base.js';
17
+ import { type ModelOptions } from '../templates/model.js';
18
+ import type { GeneratorConfig, GeneratorMetadata, GeneratorOption, GeneratorOutput } from '../types.js';
19
+ /**
20
+ * Model generator - creates Prisma model, Zod schema, and procedures
21
+ */
22
+ export declare class ModelGenerator extends BaseGenerator<ModelOptions> {
23
+ readonly metadata: GeneratorMetadata;
24
+ readonly options: ReadonlyArray<GeneratorOption>;
25
+ /**
26
+ * Validate and transform raw options
27
+ */
28
+ validateOptions(raw: Record<string, unknown>): ModelOptions;
29
+ /**
30
+ * Generate model files
31
+ */
32
+ generate(config: GeneratorConfig<ModelOptions>): Promise<GeneratorOutput>;
33
+ }
34
+ /**
35
+ * Create a new model generator instance
36
+ */
37
+ export declare function createModelGenerator(): ModelGenerator;
38
+ //# sourceMappingURL=model.d.ts.map