@dofe/infra-prisma-crud-generator 0.1.71 → 0.1.73

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/dist/cli.d.ts CHANGED
@@ -3,8 +3,9 @@
3
3
  * dofe-prisma-crud CLI entry point.
4
4
  *
5
5
  * Usage:
6
- * dofe-prisma-crud generate --config <path>
7
- * dofe-prisma-crud generate --schema <path> --out <dir>
6
+ * dofe-prisma-crud generate # Generate CRUD modules from config
7
+ * dofe-prisma-crud generate enums # Generate Zod enum schemas
8
+ * dofe-prisma-crud help
8
9
  */
9
10
  export {};
10
11
  //# sourceMappingURL=cli.d.ts.map
package/dist/cli.d.ts.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"cli.d.ts","sourceRoot":"","sources":["../../../packages/prisma-crud-generator/src/cli.ts"],"names":[],"mappings":";AACA;;;;;;GAMG"}
1
+ {"version":3,"file":"cli.d.ts","sourceRoot":"","sources":["../../../packages/prisma-crud-generator/src/cli.ts"],"names":[],"mappings":";AACA;;;;;;;GAOG"}
package/dist/cli.js CHANGED
@@ -4,8 +4,9 @@
4
4
  * dofe-prisma-crud CLI entry point.
5
5
  *
6
6
  * Usage:
7
- * dofe-prisma-crud generate --config <path>
8
- * dofe-prisma-crud generate --schema <path> --out <dir>
7
+ * dofe-prisma-crud generate # Generate CRUD modules from config
8
+ * dofe-prisma-crud generate enums # Generate Zod enum schemas
9
+ * dofe-prisma-crud help
9
10
  */
10
11
  var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
11
12
  if (k2 === undefined) k2 = k;
@@ -43,16 +44,23 @@ var __importStar = (this && this.__importStar) || (function () {
43
44
  Object.defineProperty(exports, "__esModule", { value: true });
44
45
  const fs = __importStar(require("fs"));
45
46
  const path = __importStar(require("path"));
46
- const args = process.argv.slice(2);
47
- const command = args[0];
48
- async function main() {
47
+ const index_1 = require("./index");
48
+ const DEFAULT_IMPORTS = {
49
+ prismaService: '@dofe/infra-prisma',
50
+ transactionalServiceBase: '@dofe/infra-shared-db',
51
+ prismaError: '@dofe/infra-common',
52
+ pagination: '@dofe/infra-contracts',
53
+ };
54
+ function main() {
55
+ const args = process.argv.slice(2);
56
+ const command = args[0];
49
57
  if (!command || command === 'help' || command === '--help') {
50
58
  printHelp();
51
59
  return;
52
60
  }
53
61
  switch (command) {
54
62
  case 'generate':
55
- await runGenerate(args.slice(1));
63
+ runGenerate(args.slice(1));
56
64
  break;
57
65
  default:
58
66
  console.error(`Unknown command: ${command}`);
@@ -60,80 +68,229 @@ async function main() {
60
68
  process.exit(1);
61
69
  }
62
70
  }
63
- async function runGenerate(generateArgs) {
64
- const configPath = getArg(generateArgs, '--config', '-c');
65
- const schemaPath = getArg(generateArgs, '--schema', '-s');
66
- const outDir = getArg(generateArgs, '--out', '-o');
67
- const dryRun = generateArgs.includes('--dry-run');
68
- console.log('dofe-prisma-crud generate');
69
- console.log('=========================');
70
- if (configPath) {
71
- console.log(`Config: ${configPath}`);
72
- // Load and use config file
73
- const resolvedPath = path.resolve(configPath);
74
- if (!fs.existsSync(resolvedPath)) {
75
- console.error(`Config file not found: ${resolvedPath}`);
76
- process.exit(1);
77
- }
78
- // TODO: Dynamic import of config and full generation
79
- console.log('(Full config-driven generation coming in next version)');
80
- }
81
- if (schemaPath) {
82
- const resolved = path.resolve(schemaPath);
83
- console.log(`Schema: ${resolved}`);
84
- if (!fs.existsSync(resolved)) {
85
- console.error(`Schema file not found: ${resolved}`);
86
- process.exit(1);
87
- }
88
- const content = fs.readFileSync(resolved, 'utf-8');
89
- const { parsePrismaSchema } = await import('./index.js');
90
- const models = parsePrismaSchema(content);
91
- console.log(`\nFound ${models.length} models:`);
92
- for (const model of models) {
93
- console.log(` - ${model.name} (${model.fields.length} fields)`);
94
- }
95
- }
96
- if (outDir) {
97
- console.log(`Output: ${path.resolve(outDir)}`);
71
+ function runGenerate(generateArgs) {
72
+ const subCommand = generateArgs[0];
73
+ if (subCommand === 'enums' || generateArgs.includes('--enums')) {
74
+ runEnumGenerate(generateArgs);
75
+ return;
98
76
  }
99
- if (dryRun) {
100
- console.log('\n[Dry run - no files written]');
77
+ runCrudGenerate(generateArgs);
78
+ }
79
+ function loadConfig(configPath) {
80
+ if (!configPath)
81
+ return { schemaPath: '', modulesDir: '', indexPath: '' };
82
+ const resolved = path.resolve(configPath);
83
+ if (!fs.existsSync(resolved)) {
84
+ console.error(`Config file not found: ${resolved}`);
85
+ process.exit(1);
101
86
  }
102
- console.log('\nDone. Use --config <path> for full generation.');
87
+ // eslint-disable-next-line @typescript-eslint/no-require-imports
88
+ const mod = require(resolved);
89
+ const config = mod.default || mod;
90
+ return config;
103
91
  }
104
92
  function getArg(args, ...names) {
105
93
  for (const name of names) {
106
94
  const idx = args.indexOf(name);
107
- if (idx !== -1 && idx + 1 < args.length) {
95
+ if (idx !== -1 && idx + 1 < args.length)
108
96
  return args[idx + 1];
109
- }
110
97
  }
111
98
  return undefined;
112
99
  }
100
+ function runCrudGenerate(args) {
101
+ const configPath = getArg(args, '--config', '-c');
102
+ const schemaPath = getArg(args, '--schema', '-s');
103
+ const outDir = getArg(args, '--out', '-o');
104
+ const indexPath = getArg(args, '--index', '-i');
105
+ const dryRun = args.includes('--dry-run');
106
+ const force = args.includes('--force');
107
+ const config = configPath ? loadConfig(configPath) : null;
108
+ const effectiveSchemaPath = schemaPath || config?.schemaPath;
109
+ const effectiveModulesDir = outDir || config?.modulesDir;
110
+ const effectiveIndexPath = indexPath || config?.indexPath;
111
+ if (!effectiveSchemaPath) {
112
+ console.error('Schema path required. Use --schema <path> or --config <path>');
113
+ process.exit(1);
114
+ }
115
+ if (!effectiveModulesDir) {
116
+ console.error('Output directory required. Use --out <dir> or --config <path>');
117
+ process.exit(1);
118
+ }
119
+ const resolvedSchema = path.resolve(effectiveSchemaPath);
120
+ if (!fs.existsSync(resolvedSchema)) {
121
+ console.error(`Schema file not found: ${resolvedSchema}`);
122
+ process.exit(1);
123
+ }
124
+ const excludeModels = new Set(config?.excludeModels ?? []);
125
+ const genConfig = {
126
+ excludeModels: config?.excludeModels,
127
+ softDeleteField: config?.softDeleteField ?? 'isDeleted',
128
+ defaultOrderBy: config?.defaultOrderBy,
129
+ imports: config?.imports ?? DEFAULT_IMPORTS,
130
+ };
131
+ console.log('dofe-prisma-crud generate CRUD modules');
132
+ console.log(` Schema: ${resolvedSchema}`);
133
+ console.log(` Output: ${path.resolve(effectiveModulesDir)}`);
134
+ if (effectiveIndexPath)
135
+ console.log(` Index: ${path.resolve(effectiveIndexPath)}`);
136
+ if (dryRun)
137
+ console.log(' Mode: DRY RUN');
138
+ if (force)
139
+ console.log(' Mode: FORCE (overwrite existing)');
140
+ console.log('');
141
+ const schemaContent = fs.readFileSync(resolvedSchema, 'utf8');
142
+ const models = (0, index_1.parsePrismaSchema)(schemaContent);
143
+ console.log(`Found ${models.length} models in schema\n`);
144
+ const modulesDir = path.resolve(effectiveModulesDir);
145
+ if (!dryRun) {
146
+ if (!fs.existsSync(modulesDir))
147
+ fs.mkdirSync(modulesDir, { recursive: true });
148
+ }
149
+ const generatedKebabs = [];
150
+ let skippedCount = 0;
151
+ for (const model of models) {
152
+ if (excludeModels.has(model.name)) {
153
+ console.log(` SKIP ${model.name} (excluded by config)`);
154
+ continue;
155
+ }
156
+ if (!model.idField && model.uniqueFields.length === 0) {
157
+ console.log(` SKIP ${model.name} (no @id and no single @unique)`);
158
+ skippedCount++;
159
+ continue;
160
+ }
161
+ const kebab = model.kebab;
162
+ const dir = path.join(modulesDir, kebab);
163
+ const servicePath = path.join(dir, `${kebab}.service.ts`);
164
+ const modulePath = path.join(dir, `${kebab}.module.ts`);
165
+ const modIndexPath = path.join(dir, 'index.ts');
166
+ generatedKebabs.push(kebab);
167
+ // Skip if service exists (preserve manual changes)
168
+ if (fs.existsSync(servicePath) && !force) {
169
+ console.log(` SKIP ${kebab} (service exists, use --force to overwrite)`);
170
+ continue;
171
+ }
172
+ if (dryRun) {
173
+ console.log(` GEN ${kebab} (dry-run)`);
174
+ continue;
175
+ }
176
+ if (!fs.existsSync(dir))
177
+ fs.mkdirSync(dir, { recursive: true });
178
+ fs.writeFileSync(servicePath, (0, index_1.generateService)(model, genConfig), 'utf8');
179
+ fs.writeFileSync(modulePath, (0, index_1.generateModule)(model), 'utf8');
180
+ fs.writeFileSync(modIndexPath, (0, index_1.generateModuleIndex)(model), 'utf8');
181
+ console.log(` WROTE ${kebab}`);
182
+ }
183
+ // Maintain barrel index
184
+ if (generatedKebabs.length > 0 && effectiveIndexPath) {
185
+ const resolvedIndex = path.resolve(effectiveIndexPath);
186
+ const indexDir = path.dirname(resolvedIndex);
187
+ if (!dryRun && !fs.existsSync(indexDir))
188
+ fs.mkdirSync(indexDir, { recursive: true });
189
+ const newContent = (0, index_1.ensureExportsInIndex)(resolvedIndex, generatedKebabs);
190
+ if (!dryRun) {
191
+ fs.writeFileSync(resolvedIndex, newContent, 'utf8');
192
+ }
193
+ console.log(`\n INDEX ${resolvedIndex} (${generatedKebabs.length} modules)`);
194
+ }
195
+ if (dryRun)
196
+ console.log('\n[Dry run complete - no files written]');
197
+ else
198
+ console.log(`\nDone. Generated ${generatedKebabs.length} modules (${skippedCount} skipped).`);
199
+ }
200
+ function runEnumGenerate(args) {
201
+ const configPath = getArg(args, '--config', '-c');
202
+ const schemaPath = getArg(args, '--schema', '-s');
203
+ const outFile = getArg(args, '--out', '-o');
204
+ const dryRun = args.includes('--dry-run');
205
+ const config = configPath ? loadConfig(configPath) : null;
206
+ const effectiveSchemaPath = schemaPath || config?.schemaPath;
207
+ const effectiveOutFile = outFile || config?.enumOutputPath;
208
+ if (!effectiveSchemaPath) {
209
+ console.error('Schema path required. Use --schema <path> or --config <path>');
210
+ process.exit(1);
211
+ }
212
+ if (!effectiveOutFile) {
213
+ console.error('Output file required. Use --out <path> or set enumOutputPath in config');
214
+ process.exit(1);
215
+ }
216
+ const resolvedSchema = path.resolve(effectiveSchemaPath);
217
+ if (!fs.existsSync(resolvedSchema)) {
218
+ console.error(`Schema file not found: ${resolvedSchema}`);
219
+ process.exit(1);
220
+ }
221
+ const nameMappings = config?.enumNameMappings ?? {};
222
+ console.log('dofe-prisma-crud generate enums');
223
+ console.log(` Schema: ${resolvedSchema}`);
224
+ console.log(` Output: ${path.resolve(effectiveOutFile)}`);
225
+ if (dryRun)
226
+ console.log(' Mode: DRY RUN');
227
+ console.log('');
228
+ const schemaContent = fs.readFileSync(resolvedSchema, 'utf8');
229
+ const enums = (0, index_1.parsePrismaEnums)(schemaContent);
230
+ console.log(`Found ${enums.length} enums in schema`);
231
+ for (const e of enums) {
232
+ const mappedName = nameMappings[e.name] || e.name;
233
+ console.log(` - ${e.name}${e.name !== mappedName ? ` → ${mappedName}` : ''} (${e.values.length} values)`);
234
+ }
235
+ const output = (0, index_1.generateEnumSchemas)(enums, nameMappings);
236
+ if (dryRun) {
237
+ console.log('\n--- Preview (first 30 lines) ---');
238
+ console.log(output.split('\n').slice(0, 30).join('\n'));
239
+ console.log('...');
240
+ console.log('\n[Dry run complete - no files written]');
241
+ }
242
+ else {
243
+ const resolvedOut = path.resolve(effectiveOutFile);
244
+ const outDir = path.dirname(resolvedOut);
245
+ if (!fs.existsSync(outDir))
246
+ fs.mkdirSync(outDir, { recursive: true });
247
+ fs.writeFileSync(resolvedOut, output, 'utf8');
248
+ console.log(`\nWrote ${enums.length} enum schemas to ${resolvedOut}`);
249
+ }
250
+ }
113
251
  function printHelp() {
114
252
  console.log(`
115
- dofe-prisma-crud - Generate Prisma-based CRUD modules
253
+ dofe-prisma-crud - Generate Prisma-based CRUD modules and enum schemas
116
254
 
117
255
  Usage:
118
256
  dofe-prisma-crud <command> [options]
119
257
 
120
258
  Commands:
121
- generate Generate CRUD modules from Prisma schema
122
- help Show this help
259
+ generate Generate CRUD modules from Prisma schema
260
+ generate enums Generate Zod enum schemas from Prisma schema
261
+ help Show this help
123
262
 
124
- Generate Options:
263
+ CRUD Generate Options:
125
264
  --config, -c <path> Path to config file (dofe-prisma-crud.config.ts)
126
265
  --schema, -s <path> Path to Prisma schema file
127
266
  --out, -o <dir> Output directory for generated modules
267
+ --index, -i <path> Barrel index file path
268
+ --force Overwrite existing service files
128
269
  --dry-run Preview without writing files
129
270
 
271
+ Enum Generate Options:
272
+ --config, -c <path> Path to config file
273
+ --schema, -s <path> Path to Prisma schema file
274
+ --out, -o <path> Output file path for generated enum schemas
275
+ --dry-run Preview without writing files
276
+
277
+ Config file format (dofe-prisma-crud.config.ts):
278
+ import type { DofePrismaCrudGeneratorConfig } from '@dofe/infra-prisma-crud-generator';
279
+ const config: DofePrismaCrudGeneratorConfig = {
280
+ schemaPath: 'apps/api/prisma/schema.prisma',
281
+ modulesDir: 'apps/api/generated/db/modules',
282
+ indexPath: 'apps/api/generated/db/index.ts',
283
+ excludeModels: ['UserInfo'],
284
+ softDeleteField: 'isDeleted',
285
+ enumOutputPath: 'packages/contracts/src/schemas/prisma-enums.generated.ts',
286
+ enumNameMappings: { MdFileType: 'BotFocusFileType' },
287
+ };
288
+ export default config;
289
+
130
290
  Examples:
131
- dofe-prisma-crud generate --config dofe-prisma-crud.config.ts
132
- dofe-prisma-crud generate --schema apps/api/prisma/schema.prisma --dry-run
291
+ dofe-prisma-crud generate --schema apps/api/prisma/schema.prisma --out generated/db/modules --index generated/db/index.ts --dry-run
292
+ dofe-prisma-crud generate enums --schema apps/api/prisma/schema.prisma --out packages/contracts/src/schemas/prisma-enums.generated.ts
133
293
  `);
134
294
  }
135
- main().catch((err) => {
136
- console.error('Error:', err);
137
- process.exit(1);
138
- });
295
+ main();
139
296
  //# sourceMappingURL=cli.js.map
package/dist/cli.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"cli.js","sourceRoot":"","sources":["../../../packages/prisma-crud-generator/src/cli.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"cli.js","sourceRoot":"","sources":["../../../packages/prisma-crud-generator/src/cli.ts"],"names":[],"mappings":"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"}
package/dist/index.d.ts CHANGED
@@ -2,39 +2,54 @@
2
2
  * @dofe/infra-prisma-crud-generator
3
3
  *
4
4
  * CLI tool for generating Prisma-based CRUD modules from schema definitions.
5
- *
6
- * Usage:
7
- * dofe-prisma-crud generate --config dofe-prisma-crud.config.ts
8
- *
9
- * @example Configuration file (dofe-prisma-crud.config.ts):
10
- * ```ts
11
- * import type { DofePrismaCrudGeneratorConfig } from '@dofe/infra-prisma-crud-generator/config';
12
- *
13
- * const config: DofePrismaCrudGeneratorConfig = {
14
- * schemaPath: 'apps/api/prisma/schema.prisma',
15
- * modulesDir: 'apps/api/generated/db/modules',
16
- * indexPath: 'apps/api/generated/db/index.ts',
17
- * excludeModels: ['UserInfo'],
18
- * softDeleteField: 'deletedAt',
19
- * };
20
- *
21
- * export default config;
22
- * ```
23
5
  */
24
6
  export { type DofePrismaCrudGeneratorConfig, DEFAULT_IMPORTS, DEFAULT_CONFIG } from './config';
25
- /**
26
- * Parse a Prisma schema file and extract model definitions.
27
- *
28
- * @param schemaContent - Raw Prisma schema content
29
- * @returns Array of parsed model info objects
30
- */
31
- export declare function parsePrismaSchema(schemaContent: string): Array<{
7
+ export interface ParsedField {
8
+ name: string;
9
+ type: string;
10
+ isRequired: boolean;
11
+ isList: boolean;
12
+ isId: boolean;
13
+ isUnique: boolean;
14
+ hasRelation: boolean;
15
+ mapName?: string;
16
+ }
17
+ export interface ParsedModel {
18
+ name: string;
19
+ kebab: string;
20
+ fields: ParsedField[];
21
+ idField?: ParsedField;
22
+ uniqueFields: ParsedField[];
23
+ compositeUniques: string[][];
24
+ hasIsDeleted: boolean;
25
+ hasCreatedAt: boolean;
26
+ hasRelations: boolean;
27
+ }
28
+ export interface ParsedEnum {
32
29
  name: string;
33
- fields: Array<{
30
+ values: Array<{
34
31
  name: string;
35
- type: string;
36
- isRequired: boolean;
37
- isId: boolean;
32
+ mapValue?: string;
38
33
  }>;
39
- }>;
34
+ comment?: string;
35
+ }
36
+ export declare function parsePrismaSchema(schemaContent: string): ParsedModel[];
37
+ export declare function parsePrismaEnums(schemaContent: string): ParsedEnum[];
38
+ export interface GeneratorConfig {
39
+ excludeModels?: string[];
40
+ softDeleteField?: string;
41
+ defaultOrderBy?: Record<string, 'asc' | 'desc'>;
42
+ imports?: {
43
+ prismaService: string;
44
+ transactionalServiceBase: string;
45
+ prismaError: string;
46
+ pagination: string;
47
+ };
48
+ enumNameMappings?: Record<string, string>;
49
+ }
50
+ export declare function generateService(model: ParsedModel, config?: GeneratorConfig): string;
51
+ export declare function generateModule(model: ParsedModel): string;
52
+ export declare function generateModuleIndex(model: ParsedModel): string;
53
+ export declare function generateEnumSchemas(enums: ParsedEnum[], nameMappings?: Record<string, string>): string;
54
+ export declare function ensureExportsInIndex(indexPath: string, generatedModules: string[], existingContent?: string): string;
40
55
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../packages/prisma-crud-generator/src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;GAsBG;AAEH,OAAO,EAAE,KAAK,6BAA6B,EAAE,eAAe,EAAE,cAAc,EAAE,MAAM,UAAU,CAAC;AAE/F;;;;;GAKG;AACH,wBAAgB,iBAAiB,CAAC,aAAa,EAAE,MAAM,GAAG,KAAK,CAAC;IAC9D,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAC;QAAC,UAAU,EAAE,OAAO,CAAC;QAAC,IAAI,EAAE,OAAO,CAAA;KAAE,CAAC,CAAC;CACnF,CAAC,CAmCD"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../packages/prisma-crud-generator/src/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAIH,OAAO,EAAE,KAAK,6BAA6B,EAAE,eAAe,EAAE,cAAc,EAAE,MAAM,UAAU,CAAC;AAM/F,MAAM,WAAW,WAAW;IAC1B,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,UAAU,EAAE,OAAO,CAAC;IACpB,MAAM,EAAE,OAAO,CAAC;IAChB,IAAI,EAAE,OAAO,CAAC;IACd,QAAQ,EAAE,OAAO,CAAC;IAClB,WAAW,EAAE,OAAO,CAAC;IACrB,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,WAAW;IAC1B,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,WAAW,EAAE,CAAC;IACtB,OAAO,CAAC,EAAE,WAAW,CAAC;IACtB,YAAY,EAAE,WAAW,EAAE,CAAC;IAC5B,gBAAgB,EAAE,MAAM,EAAE,EAAE,CAAC;IAC7B,YAAY,EAAE,OAAO,CAAC;IACtB,YAAY,EAAE,OAAO,CAAC;IACtB,YAAY,EAAE,OAAO,CAAC;CACvB;AAED,MAAM,WAAW,UAAU;IACzB,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,QAAQ,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IACnD,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAqBD,wBAAgB,iBAAiB,CAAC,aAAa,EAAE,MAAM,GAAG,WAAW,EAAE,CAmCtE;AAgED,wBAAgB,gBAAgB,CAAC,aAAa,EAAE,MAAM,GAAG,UAAU,EAAE,CA+BpE;AAMD,MAAM,WAAW,eAAe;IAC9B,aAAa,CAAC,EAAE,MAAM,EAAE,CAAC;IACzB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,cAAc,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,KAAK,GAAG,MAAM,CAAC,CAAC;IAChD,OAAO,CAAC,EAAE;QACR,aAAa,EAAE,MAAM,CAAC;QACtB,wBAAwB,EAAE,MAAM,CAAC;QACjC,WAAW,EAAE,MAAM,CAAC;QACpB,UAAU,EAAE,MAAM,CAAC;KACpB,CAAC;IACF,gBAAgB,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CAC3C;AAeD,wBAAgB,eAAe,CAAC,KAAK,EAAE,WAAW,EAAE,MAAM,GAAE,eAAoB,GAAG,MAAM,CA8JxF;AAED,wBAAgB,cAAc,CAAC,KAAK,EAAE,WAAW,GAAG,MAAM,CAiBzD;AAED,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,WAAW,GAAG,MAAM,CAG9D;AAMD,wBAAgB,mBAAmB,CACjC,KAAK,EAAE,UAAU,EAAE,EACnB,YAAY,GAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAM,GACxC,MAAM,CAmBR;AAMD,wBAAgB,oBAAoB,CAClC,SAAS,EAAE,MAAM,EACjB,gBAAgB,EAAE,MAAM,EAAE,EAC1B,eAAe,CAAC,EAAE,MAAM,GACvB,MAAM,CAsBR"}
package/dist/index.js CHANGED
@@ -3,62 +3,411 @@
3
3
  * @dofe/infra-prisma-crud-generator
4
4
  *
5
5
  * CLI tool for generating Prisma-based CRUD modules from schema definitions.
6
- *
7
- * Usage:
8
- * dofe-prisma-crud generate --config dofe-prisma-crud.config.ts
9
- *
10
- * @example Configuration file (dofe-prisma-crud.config.ts):
11
- * ```ts
12
- * import type { DofePrismaCrudGeneratorConfig } from '@dofe/infra-prisma-crud-generator/config';
13
- *
14
- * const config: DofePrismaCrudGeneratorConfig = {
15
- * schemaPath: 'apps/api/prisma/schema.prisma',
16
- * modulesDir: 'apps/api/generated/db/modules',
17
- * indexPath: 'apps/api/generated/db/index.ts',
18
- * excludeModels: ['UserInfo'],
19
- * softDeleteField: 'deletedAt',
20
- * };
21
- *
22
- * export default config;
23
- * ```
24
6
  */
7
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
8
+ if (k2 === undefined) k2 = k;
9
+ var desc = Object.getOwnPropertyDescriptor(m, k);
10
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
11
+ desc = { enumerable: true, get: function() { return m[k]; } };
12
+ }
13
+ Object.defineProperty(o, k2, desc);
14
+ }) : (function(o, m, k, k2) {
15
+ if (k2 === undefined) k2 = k;
16
+ o[k2] = m[k];
17
+ }));
18
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
19
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
20
+ }) : function(o, v) {
21
+ o["default"] = v;
22
+ });
23
+ var __importStar = (this && this.__importStar) || (function () {
24
+ var ownKeys = function(o) {
25
+ ownKeys = Object.getOwnPropertyNames || function (o) {
26
+ var ar = [];
27
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
28
+ return ar;
29
+ };
30
+ return ownKeys(o);
31
+ };
32
+ return function (mod) {
33
+ if (mod && mod.__esModule) return mod;
34
+ var result = {};
35
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
36
+ __setModuleDefault(result, mod);
37
+ return result;
38
+ };
39
+ })();
25
40
  Object.defineProperty(exports, "__esModule", { value: true });
26
41
  exports.DEFAULT_CONFIG = exports.DEFAULT_IMPORTS = void 0;
27
42
  exports.parsePrismaSchema = parsePrismaSchema;
43
+ exports.parsePrismaEnums = parsePrismaEnums;
44
+ exports.generateService = generateService;
45
+ exports.generateModule = generateModule;
46
+ exports.generateModuleIndex = generateModuleIndex;
47
+ exports.generateEnumSchemas = generateEnumSchemas;
48
+ exports.ensureExportsInIndex = ensureExportsInIndex;
49
+ const fs = __importStar(require("fs"));
28
50
  var config_1 = require("./config");
29
51
  Object.defineProperty(exports, "DEFAULT_IMPORTS", { enumerable: true, get: function () { return config_1.DEFAULT_IMPORTS; } });
30
52
  Object.defineProperty(exports, "DEFAULT_CONFIG", { enumerable: true, get: function () { return config_1.DEFAULT_CONFIG; } });
31
- /**
32
- * Parse a Prisma schema file and extract model definitions.
33
- *
34
- * @param schemaContent - Raw Prisma schema content
35
- * @returns Array of parsed model info objects
36
- */
53
+ /** Convert PascalCase to kebab-case */
54
+ function pascalToKebab(str) {
55
+ return str
56
+ .replace(/([a-z])([A-Z])/g, '$1-$2')
57
+ .replace(/([A-Z]+)([A-Z][a-z])/g, '$1-$2')
58
+ .toLowerCase();
59
+ }
60
+ /** Collect all model names for relation detection */
61
+ function collectModelNames(schemaContent) {
62
+ const names = new Set();
63
+ const modelRegex = /model\s+(\w+)\s*\{/g;
64
+ let match;
65
+ while ((match = modelRegex.exec(schemaContent)) !== null) {
66
+ names.add(match[1]);
67
+ }
68
+ return names;
69
+ }
37
70
  function parsePrismaSchema(schemaContent) {
71
+ const modelNames = collectModelNames(schemaContent);
38
72
  const models = [];
39
- const modelRegex = /model\s+(\w+)\s*\{([^}]*)\}/gs;
73
+ const modelRegex = /model\s+(\w+)\s*\{/g;
40
74
  let match;
41
75
  while ((match = modelRegex.exec(schemaContent)) !== null) {
42
76
  const modelName = match[1];
43
- const body = match[2];
44
- const fields = [];
45
- const lines = body.split('\n');
46
- for (const line of lines) {
77
+ const blockStart = match.index + match[0].length;
78
+ const blockEnd = findMatchingBrace(schemaContent, blockStart);
79
+ const body = schemaContent.slice(blockStart, blockEnd);
80
+ const fields = parseFields(body, modelNames);
81
+ const idField = fields.find(f => f.isId);
82
+ const uniqueFields = fields.filter(f => f.isUnique);
83
+ const compositeUniques = parseCompositeUniques(body);
84
+ const hasIsDeleted = fields.some(f => f.name === 'isDeleted' && f.type === 'Boolean');
85
+ const hasCreatedAt = fields.some(f => f.name === 'createdAt' && f.type === 'DateTime');
86
+ const hasRelations = fields.some(f => f.hasRelation);
87
+ models.push({
88
+ name: modelName,
89
+ kebab: pascalToKebab(modelName),
90
+ fields,
91
+ idField,
92
+ uniqueFields,
93
+ compositeUniques,
94
+ hasIsDeleted,
95
+ hasCreatedAt,
96
+ hasRelations,
97
+ });
98
+ }
99
+ return models;
100
+ }
101
+ function findMatchingBrace(content, start) {
102
+ let depth = 1;
103
+ let i = start;
104
+ while (i < content.length && depth > 0) {
105
+ if (content[i] === '{')
106
+ depth++;
107
+ else if (content[i] === '}')
108
+ depth--;
109
+ i++;
110
+ }
111
+ return i - 1;
112
+ }
113
+ function parseFields(body, modelNames) {
114
+ const fields = [];
115
+ const lines = body.split('\n');
116
+ for (const line of lines) {
117
+ const trimmed = line.trim();
118
+ if (!trimmed || trimmed.startsWith('//') || trimmed.startsWith('@@'))
119
+ continue;
120
+ const fieldMatch = trimmed.match(/^(\w+)\s+(\w+)\??(\[\])?\s*((?:@[\w.]+(?:\((?:[^()]|\([^()]*\))*\))?\s*)*)(?:\/\/.*)?$/);
121
+ if (!fieldMatch)
122
+ continue;
123
+ const [, name, type, listMarker, annotations] = fieldMatch;
124
+ const isList = !!listMarker;
125
+ const isRequired = !trimmed.includes('?') && !isList;
126
+ const isId = annotations?.includes('@id') ?? false;
127
+ const isUnique = annotations?.includes('@unique') ?? false;
128
+ const hasRelation = (annotations?.includes('@relation') ?? false) || (type ? modelNames.has(type) : false);
129
+ const mapMatch = annotations?.match(/@map\("([^"]+)"\)/);
130
+ fields.push({
131
+ name: name,
132
+ type: type,
133
+ isRequired,
134
+ isList,
135
+ isId,
136
+ isUnique,
137
+ hasRelation,
138
+ mapName: mapMatch?.[1],
139
+ });
140
+ }
141
+ return fields;
142
+ }
143
+ function parseCompositeUniques(body) {
144
+ const result = [];
145
+ const regex = /@@unique\(\[([^\]]+)\]\)/g;
146
+ let match;
147
+ while ((match = regex.exec(body)) !== null) {
148
+ result.push(match[1].split(',').map(s => s.trim()));
149
+ }
150
+ return result;
151
+ }
152
+ // ============================================================================
153
+ // Enum Parser
154
+ // ============================================================================
155
+ function parsePrismaEnums(schemaContent) {
156
+ const enums = [];
157
+ // Match enum blocks with optional doc comments preceding them
158
+ const enumRegex = /(?:^\s*\/\/\s*(.+)\s*\n)?^\s*enum\s+(\w+)\s*\{([^}]*)\}/gm;
159
+ let match;
160
+ while ((match = enumRegex.exec(schemaContent)) !== null) {
161
+ const comment = match[1] || undefined;
162
+ const name = match[2];
163
+ const body = match[3];
164
+ const values = [];
165
+ const valueLines = body.split('\n');
166
+ for (const line of valueLines) {
47
167
  const trimmed = line.trim();
48
- if (!trimmed || trimmed.startsWith('//') || trimmed.startsWith('@@'))
168
+ if (!trimmed || trimmed.startsWith('//'))
49
169
  continue;
50
- const fieldMatch = trimmed.match(/^(\w+)\s+(\w+)(\[\])?\s*(@id)?/);
51
- if (fieldMatch) {
52
- fields.push({
53
- name: fieldMatch[1],
54
- type: fieldMatch[2],
55
- isRequired: !trimmed.includes('?') && !trimmed.includes('[]'),
56
- isId: trimmed.includes('@id'),
170
+ const valueMatch = trimmed.match(/^(\w+)(?:\s+@map\("([^"]+)"\))?/);
171
+ if (valueMatch) {
172
+ values.push({
173
+ name: valueMatch[1],
174
+ mapValue: valueMatch[2],
57
175
  });
58
176
  }
59
177
  }
60
- models.push({ name: modelName, fields });
178
+ if (values.length > 0) {
179
+ enums.push({ name, values, comment });
180
+ }
61
181
  }
62
- return models;
182
+ return enums;
183
+ }
184
+ const DEFAULT_GEN_CONFIG = {
185
+ excludeModels: [],
186
+ softDeleteField: 'isDeleted',
187
+ defaultOrderBy: {},
188
+ imports: {
189
+ prismaService: '@dofe/infra-prisma',
190
+ transactionalServiceBase: '@dofe/infra-shared-db',
191
+ prismaError: '@dofe/infra-common',
192
+ pagination: '@dofe/infra-contracts',
193
+ },
194
+ enumNameMappings: {},
195
+ };
196
+ function generateService(model, config = {}) {
197
+ const cfg = { ...DEFAULT_GEN_CONFIG, ...config };
198
+ const kebab = model.kebab;
199
+ const pascal = model.name;
200
+ // Use @id field if present, otherwise fall back to first @unique field
201
+ const idField = model.idField || model.uniqueFields[0];
202
+ if (!idField)
203
+ throw new Error(`Model ${model.name} has no @id or @unique field - should have been skipped by CLI`);
204
+ const softDeleteField = cfg.softDeleteField || 'isDeleted';
205
+ const orderField = model.hasCreatedAt ? 'createdAt' : idField.name;
206
+ const orderDir = cfg.defaultOrderBy?.[orderField] ?? 'desc';
207
+ let out = '';
208
+ // Imports
209
+ out += `import { Injectable, Logger } from '@nestjs/common';\n`;
210
+ out += `import { Prisma } from '@prisma/client';\n`;
211
+ out += `import { PAGINATION } from '${cfg.imports.pagination}';\n`;
212
+ out += `import { HandlePrismaError } from '${cfg.imports.prismaError}';\n`;
213
+ out += `import { TransactionalServiceBase } from '${cfg.imports.transactionalServiceBase}';\n`;
214
+ out += `import { PrismaService } from '${cfg.imports.prismaService}';\n\n`;
215
+ // Service class
216
+ out += `@Injectable()\n`;
217
+ out += `export class ${pascal}Service extends TransactionalServiceBase {\n`;
218
+ out += ` private readonly logger = new Logger(${pascal}Service.name);\n\n`;
219
+ out += ` constructor(prisma: PrismaService) {\n`;
220
+ out += ` super(prisma);\n`;
221
+ out += ` }\n\n`;
222
+ // Helper
223
+ const addType = model.hasRelations
224
+ ? 'additional?: { select?: Prisma.XxxSelect; include?: Prisma.XxxInclude }'
225
+ : 'additional?: { select?: Prisma.XxxSelect }';
226
+ const addTypeClean = addType.replace(/Xxx/g, pascal);
227
+ // get
228
+ out += ` @HandlePrismaError('query')\n`;
229
+ out += ` async get(where: Prisma.${pascal}WhereInput, ${addTypeClean}) {\n`;
230
+ out += ` const query: any = { where: { ...where`;
231
+ if (model.hasIsDeleted)
232
+ out += `, ${softDeleteField}: false`;
233
+ out += ` } };\n`;
234
+ out += ` if (additional) Object.assign(query, additional);\n`;
235
+ out += ` return this.getReadClient().${kebab}.findFirst(query);\n`;
236
+ out += ` }\n\n`;
237
+ // getById (only when model has @id)
238
+ if (model.idField) {
239
+ out += ` @HandlePrismaError('query')\n`;
240
+ out += ` async getById(id: string, ${addTypeClean}) {\n`;
241
+ out += ` const where: any = { ${model.idField.name}: id`;
242
+ if (model.hasIsDeleted)
243
+ out += `, ${softDeleteField}: false`;
244
+ out += ` };\n`;
245
+ out += ` return this.getReadClient().${kebab}.findUnique({ where, ...(additional || {}) });\n`;
246
+ out += ` }\n\n`;
247
+ }
248
+ // getByXxx per unique field
249
+ for (const uf of model.uniqueFields) {
250
+ const typeName = uf.type === 'String' ? 'string' : uf.type === 'Int' ? 'number' : 'string';
251
+ out += ` @HandlePrismaError('query')\n`;
252
+ out += ` async getBy${capitalize(uf.name)}(value: ${typeName}, ${addTypeClean}) {\n`;
253
+ out += ` return this.getReadClient().${kebab}.findUnique({ where: { ${uf.name}: value }, ...(additional || {}) });\n`;
254
+ out += ` }\n\n`;
255
+ }
256
+ // list
257
+ out += ` @HandlePrismaError('query')\n`;
258
+ out += ` async list(\n`;
259
+ out += ` where?: Prisma.${pascal}WhereInput,\n`;
260
+ out += ` pagination?: { page?: number; limit?: number; sort?: string; asc?: 'asc' | 'desc' },\n`;
261
+ out += ` ${addTypeClean},\n`;
262
+ out += ` ) {\n`;
263
+ out += ` const page = pagination?.page ?? PAGINATION.DEFAULT_PAGE;\n`;
264
+ out += ` const limit = Math.min(pagination?.limit ?? PAGINATION.DEFAULT_PAGE_SIZE, PAGINATION.MAX_PAGE_SIZE);\n`;
265
+ out += ` const orderBy = pagination?.sort ? { [pagination.sort]: pagination.asc ?? '${orderDir}' } : { ${orderField}: '${orderDir}' as const };\n`;
266
+ out += ` const query: any = {\n`;
267
+ out += ` where: { ...(where || {})`;
268
+ if (model.hasIsDeleted)
269
+ out += `, ${softDeleteField}: false`;
270
+ out += ` },\n`;
271
+ out += ` orderBy,\n`;
272
+ out += ` skip: (page - 1) * limit,\n`;
273
+ out += ` take: limit,\n`;
274
+ out += ` };\n`;
275
+ out += ` if (additional) Object.assign(query, additional);\n`;
276
+ out += ` const [list, total] = await Promise.all([\n`;
277
+ out += ` this.getReadClient().${kebab}.findMany(query),\n`;
278
+ out += ` this.getReadClient().${kebab}.count({ where: query.where }),\n`;
279
+ out += ` ]);\n`;
280
+ out += ` return { list, total, page, limit };\n`;
281
+ out += ` }\n\n`;
282
+ // count
283
+ out += ` @HandlePrismaError('query')\n`;
284
+ out += ` async count(where?: Prisma.${pascal}WhereInput) {\n`;
285
+ out += ` return this.getReadClient().${kebab}.count({\n`;
286
+ out += ` where: { ...(where || {})`;
287
+ if (model.hasIsDeleted)
288
+ out += `, ${softDeleteField}: false`;
289
+ out += ` },\n`;
290
+ out += ` });\n`;
291
+ out += ` }\n\n`;
292
+ // create
293
+ out += ` @HandlePrismaError('create')\n`;
294
+ out += ` async create(data: Prisma.${pascal}CreateInput, additional?: { select?: Prisma.${pascal}Select }) {\n`;
295
+ out += ` return this.getWriteClient().${kebab}.create({ data, ...(additional || {}) });\n`;
296
+ out += ` }\n\n`;
297
+ // update
298
+ out += ` @HandlePrismaError('update')\n`;
299
+ out += ` async update(where: Prisma.${pascal}WhereUniqueInput, data: Prisma.${pascal}UpdateInput, additional?: { select?: Prisma.${pascal}Select }) {\n`;
300
+ out += ` return this.getWriteClient().${kebab}.update({ where, data, ...(additional || {}) });\n`;
301
+ out += ` }\n\n`;
302
+ // delete
303
+ out += ` @HandlePrismaError('delete')\n`;
304
+ out += ` async delete(where: Prisma.${pascal}WhereUniqueInput) {\n`;
305
+ out += ` return this.getWriteClient().${kebab}.delete({ where });\n`;
306
+ out += ` }\n\n`;
307
+ // softDelete (conditional)
308
+ if (model.hasIsDeleted) {
309
+ out += ` @HandlePrismaError('update')\n`;
310
+ out += ` async softDelete(where: Prisma.${pascal}WhereUniqueInput) {\n`;
311
+ out += ` return this.getWriteClient().${kebab}.update({\n`;
312
+ out += ` where,\n`;
313
+ out += ` data: { ${softDeleteField}: true },\n`;
314
+ out += ` });\n`;
315
+ out += ` }\n\n`;
316
+ }
317
+ // createMany
318
+ out += ` @HandlePrismaError('create')\n`;
319
+ out += ` async createMany(data: Prisma.${pascal}CreateManyInput[]) {\n`;
320
+ out += ` return this.getWriteClient().${kebab}.createMany({ data });\n`;
321
+ out += ` }\n\n`;
322
+ // updateMany
323
+ out += ` @HandlePrismaError('update')\n`;
324
+ out += ` async updateMany(where: Prisma.${pascal}WhereInput, data: Prisma.${pascal}UpdateManyMutationInput) {\n`;
325
+ out += ` return this.getWriteClient().${kebab}.updateMany({ where, data });\n`;
326
+ out += ` }\n\n`;
327
+ // upsert
328
+ out += ` @HandlePrismaError('create')\n`;
329
+ out += ` async upsert(args: Prisma.${pascal}UpsertArgs) {\n`;
330
+ out += ` return this.getWriteClient().${kebab}.upsert(args);\n`;
331
+ out += ` }\n\n`;
332
+ // getOrThrow
333
+ out += ` @HandlePrismaError('query')\n`;
334
+ out += ` async getOrThrow(where: Prisma.${pascal}WhereInput, ${addTypeClean}) {\n`;
335
+ out += ` const record = await this.get(where, additional);\n`;
336
+ out += ` if (!record) throw new Error('${pascal} not found');\n`;
337
+ out += ` return record;\n`;
338
+ out += ` }\n`;
339
+ out += `}\n`;
340
+ return out;
341
+ }
342
+ function generateModule(model) {
343
+ const pascal = model.name;
344
+ const kebab = model.kebab;
345
+ return [
346
+ `import { Module } from '@nestjs/common';`,
347
+ `import { PrismaModule } from '@dofe/infra-prisma';`,
348
+ `import { ${pascal}Service } from './${kebab}.service';`,
349
+ ``,
350
+ `@Module({`,
351
+ ` imports: [PrismaModule],`,
352
+ ` providers: [${pascal}Service],`,
353
+ ` exports: [${pascal}Service],`,
354
+ `})`,
355
+ `export class ${pascal}Module {}`,
356
+ ``,
357
+ ].join('\n');
358
+ }
359
+ function generateModuleIndex(model) {
360
+ const kebab = model.kebab;
361
+ return `export * from './${kebab}.service';\nexport * from './${kebab}.module';\n`;
362
+ }
363
+ // ============================================================================
364
+ // Enum Generator
365
+ // ============================================================================
366
+ function generateEnumSchemas(enums, nameMappings = {}) {
367
+ let out = `/**\n * Generated Prisma Enum Zod Schemas\n * DO NOT EDIT MANUALLY\n */\n\n`;
368
+ out += `import { z } from 'zod';\n\n`;
369
+ for (const e of enums) {
370
+ const mappedName = nameMappings[e.name] || e.name;
371
+ if (e.comment)
372
+ out += `// ${e.comment}\n`;
373
+ const displayValues = e.values.map(v => (v.mapValue ? `"${v.mapValue}"` : `"${v.name}"`));
374
+ out += `export const ${mappedName}Schema = z.enum([${displayValues.join(', ')}]);\n`;
375
+ out += `export type ${mappedName} = z.infer<typeof ${mappedName}Schema>;\n`;
376
+ out += `export const ${mappedName}Values = ${mappedName}Schema.options;\n`;
377
+ out += `export const is${mappedName} = (value: unknown): value is ${mappedName} => {\n`;
378
+ out += ` return ${mappedName}Schema.safeParse(value).success;\n`;
379
+ out += `};\n\n`;
380
+ }
381
+ return out;
382
+ }
383
+ // ============================================================================
384
+ // Barrel Index Maintenance
385
+ // ============================================================================
386
+ function ensureExportsInIndex(indexPath, generatedModules, existingContent) {
387
+ const existing = existingContent ?? (fs.existsSync(indexPath) ? fs.readFileSync(indexPath, 'utf8') : '');
388
+ const existingLines = existing.split('\n');
389
+ const existingExports = new Set();
390
+ for (const line of existingLines) {
391
+ const match = line.match(/export \* from '\.\/([\w-]+)\/index'/);
392
+ if (match)
393
+ existingExports.add(match[1]);
394
+ }
395
+ const lines = [...existingLines];
396
+ for (const mod of generatedModules) {
397
+ if (!existingExports.has(mod)) {
398
+ lines.push(`export * from './${mod}/index';`);
399
+ }
400
+ }
401
+ // Remove trailing empty lines, add exactly one
402
+ while (lines.length > 0 && lines[lines.length - 1].trim() === '')
403
+ lines.pop();
404
+ lines.push('');
405
+ return lines.join('\n');
406
+ }
407
+ // ============================================================================
408
+ // Helpers
409
+ // ============================================================================
410
+ function capitalize(s) {
411
+ return s.charAt(0).toUpperCase() + s.slice(1);
63
412
  }
64
413
  //# sourceMappingURL=index.js.map
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../packages/prisma-crud-generator/src/index.ts"],"names":[],"mappings":";AAAA;;;;;;;;;;;;;;;;;;;;;;GAsBG;;;AAUH,8CAsCC;AA9CD,mCAA+F;AAAlD,yGAAA,eAAe,OAAA;AAAE,wGAAA,cAAc,OAAA;AAE5E;;;;;GAKG;AACH,SAAgB,iBAAiB,CAAC,aAAqB;IAIrD,MAAM,MAAM,GAGP,EAAE,CAAC;IAER,MAAM,UAAU,GAAG,+BAA+B,CAAC;IACnD,IAAI,KAA6B,CAAC;IAElC,OAAO,CAAC,KAAK,GAAG,UAAU,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC,KAAK,IAAI,EAAE,CAAC;QACzD,MAAM,SAAS,GAAG,KAAK,CAAC,CAAC,CAAE,CAAC;QAC5B,MAAM,IAAI,GAAG,KAAK,CAAC,CAAC,CAAE,CAAC;QAEvB,MAAM,MAAM,GAA8E,EAAE,CAAC;QAC7F,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QAE/B,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;YACzB,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC;YAC5B,IAAI,CAAC,OAAO,IAAI,OAAO,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,OAAO,CAAC,UAAU,CAAC,IAAI,CAAC;gBAAE,SAAS;YAE/E,MAAM,UAAU,GAAG,OAAO,CAAC,KAAK,CAAC,gCAAgC,CAAC,CAAC;YACnE,IAAI,UAAU,EAAE,CAAC;gBACf,MAAM,CAAC,IAAI,CAAC;oBACV,IAAI,EAAE,UAAU,CAAC,CAAC,CAAE;oBACpB,IAAI,EAAE,UAAU,CAAC,CAAC,CAAE;oBACpB,UAAU,EAAE,CAAC,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAC;oBAC7D,IAAI,EAAE,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAC;iBAC9B,CAAC,CAAC;YACL,CAAC;QACH,CAAC;QAED,MAAM,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,SAAS,EAAE,MAAM,EAAE,CAAC,CAAC;IAC3C,CAAC;IAED,OAAO,MAAM,CAAC;AAChB,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../packages/prisma-crud-generator/src/index.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@dofe/infra-prisma-crud-generator",
3
- "version": "0.1.71",
3
+ "version": "0.1.73",
4
4
  "description": "CLI tool for generating Prisma-based CRUD modules from schema definitions",
5
5
  "main": "./dist/index.js",
6
6
  "types": "./dist/index.d.ts",
@@ -29,11 +29,9 @@
29
29
  "dist"
30
30
  ],
31
31
  "license": "UNLICENSED",
32
- "dependencies": {
33
- "@dofe/infra-contracts-base": "0.1.71"
34
- },
32
+ "dependencies": {},
35
33
  "devDependencies": {
36
- "@types/node": "^25.9.4"
34
+ "vitest": "^3.0.0"
37
35
  },
38
36
  "scripts": {
39
37
  "build": "tsc",