@dofe/infra-prisma-crud-generator 0.1.70 → 0.1.72
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 +3 -2
- package/dist/cli.d.ts.map +1 -1
- package/dist/cli.js +213 -56
- package/dist/cli.js.map +1 -1
- package/dist/index.d.ts +45 -30
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +379 -39
- package/dist/index.js.map +1 -1
- package/package.json +2 -2
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
|
|
7
|
-
* dofe-prisma-crud generate
|
|
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
|
|
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
|
|
8
|
-
* dofe-prisma-crud generate
|
|
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
|
|
47
|
-
const
|
|
48
|
-
|
|
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
|
-
|
|
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
|
-
|
|
64
|
-
const
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
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
|
-
|
|
100
|
-
|
|
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
|
-
|
|
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
|
|
122
|
-
|
|
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 --
|
|
132
|
-
dofe-prisma-crud generate --schema apps/api/prisma/schema.prisma --
|
|
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()
|
|
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":";;AACA
|
|
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
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
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
|
-
|
|
30
|
+
values: Array<{
|
|
34
31
|
name: string;
|
|
35
|
-
|
|
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
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../packages/prisma-crud-generator/src/index.ts"],"names":[],"mappings":"AAAA
|
|
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,CAuJxF;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,402 @@
|
|
|
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
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
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*\{
|
|
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
|
|
44
|
-
const
|
|
45
|
-
const
|
|
46
|
-
|
|
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('//')
|
|
168
|
+
if (!trimmed || trimmed.startsWith('//'))
|
|
49
169
|
continue;
|
|
50
|
-
const
|
|
51
|
-
if (
|
|
52
|
-
|
|
53
|
-
name:
|
|
54
|
-
|
|
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
|
-
|
|
178
|
+
if (values.length > 0) {
|
|
179
|
+
enums.push({ name, values, comment });
|
|
180
|
+
}
|
|
61
181
|
}
|
|
62
|
-
return
|
|
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
|
+
const idField = model.idField;
|
|
201
|
+
const softDeleteField = cfg.softDeleteField || 'isDeleted';
|
|
202
|
+
const orderField = model.hasCreatedAt ? 'createdAt' : idField.name;
|
|
203
|
+
const orderDir = cfg.defaultOrderBy?.[orderField] ?? 'desc';
|
|
204
|
+
let out = '';
|
|
205
|
+
// Imports
|
|
206
|
+
out += `import { Injectable, Logger } from '@nestjs/common';\n`;
|
|
207
|
+
out += `import { Prisma } from '@prisma/client';\n`;
|
|
208
|
+
out += `import { PAGINATION } from '${cfg.imports.pagination}';\n`;
|
|
209
|
+
out += `import { HandlePrismaError } from '${cfg.imports.prismaError}';\n`;
|
|
210
|
+
out += `import { TransactionalServiceBase } from '${cfg.imports.transactionalServiceBase}';\n`;
|
|
211
|
+
out += `import { PrismaService } from '${cfg.imports.prismaService}';\n\n`;
|
|
212
|
+
// Service class
|
|
213
|
+
out += `@Injectable()\n`;
|
|
214
|
+
out += `export class ${pascal}Service extends TransactionalServiceBase {\n`;
|
|
215
|
+
out += ` private readonly logger = new Logger(${pascal}Service.name);\n\n`;
|
|
216
|
+
out += ` constructor(prisma: PrismaService) {\n`;
|
|
217
|
+
out += ` super(prisma);\n`;
|
|
218
|
+
out += ` }\n\n`;
|
|
219
|
+
// Helper
|
|
220
|
+
const addType = model.hasRelations
|
|
221
|
+
? 'additional?: { select?: Prisma.XxxSelect; include?: Prisma.XxxInclude }'
|
|
222
|
+
: 'additional?: { select?: Prisma.XxxSelect }';
|
|
223
|
+
const addTypeClean = addType.replace(/Xxx/g, pascal);
|
|
224
|
+
// get
|
|
225
|
+
out += ` @HandlePrismaError('query')\n`;
|
|
226
|
+
out += ` async get(where: Prisma.${pascal}WhereInput, ${addTypeClean}) {\n`;
|
|
227
|
+
out += ` const query: any = { where: { ...where`;
|
|
228
|
+
if (model.hasIsDeleted)
|
|
229
|
+
out += `, ${softDeleteField}: false`;
|
|
230
|
+
out += ` } };\n`;
|
|
231
|
+
out += ` if (additional) Object.assign(query, additional);\n`;
|
|
232
|
+
out += ` return this.getReadClient().${kebab}.findFirst(query);\n`;
|
|
233
|
+
out += ` }\n\n`;
|
|
234
|
+
// getById
|
|
235
|
+
out += ` @HandlePrismaError('query')\n`;
|
|
236
|
+
out += ` async getById(id: string, ${addTypeClean}) {\n`;
|
|
237
|
+
out += ` return this.getReadClient().${kebab}.findUnique({ where: { ${idField.name}: id }, ...(additional || {}) });\n`;
|
|
238
|
+
out += ` }\n\n`;
|
|
239
|
+
// getByXxx per unique field
|
|
240
|
+
for (const uf of model.uniqueFields) {
|
|
241
|
+
const typeName = uf.type === 'String' ? 'string' : uf.type === 'Int' ? 'number' : 'string';
|
|
242
|
+
out += ` @HandlePrismaError('query')\n`;
|
|
243
|
+
out += ` async getBy${capitalize(uf.name)}(value: ${typeName}, ${addTypeClean}) {\n`;
|
|
244
|
+
out += ` return this.getReadClient().${kebab}.findUnique({ where: { ${uf.name}: value }, ...(additional || {}) });\n`;
|
|
245
|
+
out += ` }\n\n`;
|
|
246
|
+
}
|
|
247
|
+
// list
|
|
248
|
+
out += ` @HandlePrismaError('query')\n`;
|
|
249
|
+
out += ` async list(\n`;
|
|
250
|
+
out += ` where?: Prisma.${pascal}WhereInput,\n`;
|
|
251
|
+
out += ` pagination?: { page?: number; limit?: number; sort?: string; asc?: 'asc' | 'desc' },\n`;
|
|
252
|
+
out += ` ${addTypeClean},\n`;
|
|
253
|
+
out += ` ) {\n`;
|
|
254
|
+
out += ` const page = pagination?.page ?? PAGINATION.DEFAULT_PAGE;\n`;
|
|
255
|
+
out += ` const limit = Math.min(pagination?.limit ?? PAGINATION.DEFAULT_PAGE_SIZE, PAGINATION.MAX_PAGE_SIZE);\n`;
|
|
256
|
+
out += ` const orderBy = pagination?.sort ? { [pagination.sort]: pagination.asc ?? '${orderDir}' } : { ${orderField}: '${orderDir}' as const };\n`;
|
|
257
|
+
out += ` const query: any = {\n`;
|
|
258
|
+
out += ` where: { ...(where || {})`;
|
|
259
|
+
if (model.hasIsDeleted)
|
|
260
|
+
out += `, ${softDeleteField}: false`;
|
|
261
|
+
out += ` },\n`;
|
|
262
|
+
out += ` orderBy,\n`;
|
|
263
|
+
out += ` skip: (page - 1) * limit,\n`;
|
|
264
|
+
out += ` take: limit,\n`;
|
|
265
|
+
out += ` };\n`;
|
|
266
|
+
out += ` if (additional) Object.assign(query, additional);\n`;
|
|
267
|
+
out += ` const [list, total] = await Promise.all([\n`;
|
|
268
|
+
out += ` this.getReadClient().${kebab}.findMany(query),\n`;
|
|
269
|
+
out += ` this.getReadClient().${kebab}.count({ where: query.where }),\n`;
|
|
270
|
+
out += ` ]);\n`;
|
|
271
|
+
out += ` return { list, total, page, limit };\n`;
|
|
272
|
+
out += ` }\n\n`;
|
|
273
|
+
// count
|
|
274
|
+
out += ` @HandlePrismaError('query')\n`;
|
|
275
|
+
out += ` async count(where?: Prisma.${pascal}WhereInput) {\n`;
|
|
276
|
+
out += ` return this.getReadClient().${kebab}.count({\n`;
|
|
277
|
+
out += ` where: { ...(where || {})`;
|
|
278
|
+
if (model.hasIsDeleted)
|
|
279
|
+
out += `, ${softDeleteField}: false`;
|
|
280
|
+
out += ` },\n`;
|
|
281
|
+
out += ` });\n`;
|
|
282
|
+
out += ` }\n\n`;
|
|
283
|
+
// create
|
|
284
|
+
out += ` @HandlePrismaError('create')\n`;
|
|
285
|
+
out += ` async create(data: Prisma.${pascal}CreateInput) {\n`;
|
|
286
|
+
out += ` return this.getWriteClient().${kebab}.create({ data });\n`;
|
|
287
|
+
out += ` }\n\n`;
|
|
288
|
+
// update
|
|
289
|
+
out += ` @HandlePrismaError('update')\n`;
|
|
290
|
+
out += ` async update(where: Prisma.${pascal}WhereUniqueInput, data: Prisma.${pascal}UpdateInput) {\n`;
|
|
291
|
+
out += ` return this.getWriteClient().${kebab}.update({ where, data });\n`;
|
|
292
|
+
out += ` }\n\n`;
|
|
293
|
+
// delete
|
|
294
|
+
out += ` @HandlePrismaError('delete')\n`;
|
|
295
|
+
out += ` async delete(where: Prisma.${pascal}WhereUniqueInput) {\n`;
|
|
296
|
+
out += ` return this.getWriteClient().${kebab}.delete({ where });\n`;
|
|
297
|
+
out += ` }\n\n`;
|
|
298
|
+
// softDelete (conditional)
|
|
299
|
+
if (model.hasIsDeleted) {
|
|
300
|
+
out += ` @HandlePrismaError('update')\n`;
|
|
301
|
+
out += ` async softDelete(where: Prisma.${pascal}WhereUniqueInput) {\n`;
|
|
302
|
+
out += ` return this.getWriteClient().${kebab}.update({\n`;
|
|
303
|
+
out += ` where,\n`;
|
|
304
|
+
out += ` data: { ${softDeleteField}: true },\n`;
|
|
305
|
+
out += ` });\n`;
|
|
306
|
+
out += ` }\n\n`;
|
|
307
|
+
}
|
|
308
|
+
// createMany
|
|
309
|
+
out += ` @HandlePrismaError('create')\n`;
|
|
310
|
+
out += ` async createMany(data: Prisma.${pascal}CreateManyInput[]) {\n`;
|
|
311
|
+
out += ` return this.getWriteClient().${kebab}.createMany({ data });\n`;
|
|
312
|
+
out += ` }\n\n`;
|
|
313
|
+
// updateMany
|
|
314
|
+
out += ` @HandlePrismaError('update')\n`;
|
|
315
|
+
out += ` async updateMany(where: Prisma.${pascal}WhereInput, data: Prisma.${pascal}UpdateManyMutationInput) {\n`;
|
|
316
|
+
out += ` return this.getWriteClient().${kebab}.updateMany({ where, data });\n`;
|
|
317
|
+
out += ` }\n\n`;
|
|
318
|
+
// upsert
|
|
319
|
+
out += ` @HandlePrismaError('create')\n`;
|
|
320
|
+
out += ` async upsert(args: Prisma.${pascal}UpsertArgs) {\n`;
|
|
321
|
+
out += ` return this.getWriteClient().${kebab}.upsert(args);\n`;
|
|
322
|
+
out += ` }\n\n`;
|
|
323
|
+
// getOrThrow
|
|
324
|
+
out += ` @HandlePrismaError('query')\n`;
|
|
325
|
+
out += ` async getOrThrow(where: Prisma.${pascal}WhereInput, ${addTypeClean}) {\n`;
|
|
326
|
+
out += ` const record = await this.get(where, additional);\n`;
|
|
327
|
+
out += ` if (!record) throw new Error('${pascal} not found');\n`;
|
|
328
|
+
out += ` return record;\n`;
|
|
329
|
+
out += ` }\n`;
|
|
330
|
+
out += `}\n`;
|
|
331
|
+
return out;
|
|
332
|
+
}
|
|
333
|
+
function generateModule(model) {
|
|
334
|
+
const pascal = model.name;
|
|
335
|
+
const kebab = model.kebab;
|
|
336
|
+
return [
|
|
337
|
+
`import { Module } from '@nestjs/common';`,
|
|
338
|
+
`import { PrismaModule } from '@dofe/infra-prisma';`,
|
|
339
|
+
`import { ${pascal}Service } from './${kebab}.service';`,
|
|
340
|
+
``,
|
|
341
|
+
`@Module({`,
|
|
342
|
+
` imports: [PrismaModule],`,
|
|
343
|
+
` providers: [${pascal}Service],`,
|
|
344
|
+
` exports: [${pascal}Service],`,
|
|
345
|
+
`})`,
|
|
346
|
+
`export class ${pascal}Module {}`,
|
|
347
|
+
``,
|
|
348
|
+
].join('\n');
|
|
349
|
+
}
|
|
350
|
+
function generateModuleIndex(model) {
|
|
351
|
+
const kebab = model.kebab;
|
|
352
|
+
return `export * from './${kebab}.service';\nexport * from './${kebab}.module';\n`;
|
|
353
|
+
}
|
|
354
|
+
// ============================================================================
|
|
355
|
+
// Enum Generator
|
|
356
|
+
// ============================================================================
|
|
357
|
+
function generateEnumSchemas(enums, nameMappings = {}) {
|
|
358
|
+
let out = `/**\n * Generated Prisma Enum Zod Schemas\n * DO NOT EDIT MANUALLY\n */\n\n`;
|
|
359
|
+
out += `import { z } from 'zod';\n\n`;
|
|
360
|
+
for (const e of enums) {
|
|
361
|
+
const mappedName = nameMappings[e.name] || e.name;
|
|
362
|
+
if (e.comment)
|
|
363
|
+
out += `// ${e.comment}\n`;
|
|
364
|
+
const displayValues = e.values.map(v => (v.mapValue ? `"${v.mapValue}"` : `"${v.name}"`));
|
|
365
|
+
out += `export const ${mappedName}Schema = z.enum([${displayValues.join(', ')}]);\n`;
|
|
366
|
+
out += `export type ${mappedName} = z.infer<typeof ${mappedName}Schema>;\n`;
|
|
367
|
+
out += `export const ${mappedName}Values = ${mappedName}Schema.options;\n`;
|
|
368
|
+
out += `export const is${mappedName} = (value: unknown): value is ${mappedName} => {\n`;
|
|
369
|
+
out += ` return ${mappedName}Schema.safeParse(value).success;\n`;
|
|
370
|
+
out += `};\n\n`;
|
|
371
|
+
}
|
|
372
|
+
return out;
|
|
373
|
+
}
|
|
374
|
+
// ============================================================================
|
|
375
|
+
// Barrel Index Maintenance
|
|
376
|
+
// ============================================================================
|
|
377
|
+
function ensureExportsInIndex(indexPath, generatedModules, existingContent) {
|
|
378
|
+
const existing = existingContent ?? (fs.existsSync(indexPath) ? fs.readFileSync(indexPath, 'utf8') : '');
|
|
379
|
+
const existingLines = existing.split('\n');
|
|
380
|
+
const existingExports = new Set();
|
|
381
|
+
for (const line of existingLines) {
|
|
382
|
+
const match = line.match(/export \* from '\.\/([\w-]+)\/index'/);
|
|
383
|
+
if (match)
|
|
384
|
+
existingExports.add(match[1]);
|
|
385
|
+
}
|
|
386
|
+
const lines = [...existingLines];
|
|
387
|
+
for (const mod of generatedModules) {
|
|
388
|
+
if (!existingExports.has(mod)) {
|
|
389
|
+
lines.push(`export * from './${mod}/index';`);
|
|
390
|
+
}
|
|
391
|
+
}
|
|
392
|
+
// Remove trailing empty lines, add exactly one
|
|
393
|
+
while (lines.length > 0 && lines[lines.length - 1].trim() === '')
|
|
394
|
+
lines.pop();
|
|
395
|
+
lines.push('');
|
|
396
|
+
return lines.join('\n');
|
|
397
|
+
}
|
|
398
|
+
// ============================================================================
|
|
399
|
+
// Helpers
|
|
400
|
+
// ============================================================================
|
|
401
|
+
function capitalize(s) {
|
|
402
|
+
return s.charAt(0).toUpperCase() + s.slice(1);
|
|
63
403
|
}
|
|
64
404
|
//# 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.
|
|
3
|
+
"version": "0.1.72",
|
|
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",
|
|
@@ -30,7 +30,7 @@
|
|
|
30
30
|
],
|
|
31
31
|
"license": "UNLICENSED",
|
|
32
32
|
"dependencies": {
|
|
33
|
-
"@dofe/infra-contracts-base": "0.1.
|
|
33
|
+
"@dofe/infra-contracts-base": "0.1.72"
|
|
34
34
|
},
|
|
35
35
|
"devDependencies": {
|
|
36
36
|
"@types/node": "^25.9.4"
|