@custom-generators/simple-prisma-dto-gen 1.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md ADDED
@@ -0,0 +1,49 @@
1
+ npm install prisma --save-dev
2
+ npm install --save dotenv @prisma/adapter-mariadb @prisma/client mariadb
3
+
4
+ npx prisma init
5
+
6
+ main.ts
7
+
8
+ import 'dotenv/config'
9
+
10
+ database.service.ts
11
+
12
+ import { Injectable } from "@nestjs/common"
13
+ import { DatabaseGenService } from "./gen.dto/service/database.gen"
14
+ import { PrismaService } from "./gen.dto/service/prisma.service"
15
+
16
+ @Injectable()
17
+ export class DatabaseService extends DatabaseGenService {
18
+
19
+ constructor(prisma: PrismaService) {
20
+ super(prisma)
21
+ }
22
+ }
23
+
24
+ generator client {
25
+ provider = "prisma-client"
26
+ output = "../src/generated/client"
27
+ engineType = "library"
28
+ }
29
+
30
+ generator classGenerator {
31
+ provider = "npx ts-node ../../demos/simple-prisma-dto-gen/src/bin.ts"
32
+ output = "../src/gen.dto"
33
+ customPrismaClientImportPath = "../../generated/client/client"
34
+ generatePrismaService = true
35
+ }
36
+
37
+ DATABASE_URL=mysql://root:manager@192.168.0.10:3306/atendimento3
38
+
39
+ {
40
+ "version": "0.2.0",
41
+ "configurations": [
42
+ {
43
+ "command": "npm run start:debug",
44
+ "name": "Run npm dev",
45
+ "request": "launch",
46
+ "type": "node-terminal"
47
+ }
48
+ ]
49
+ }
package/dist/bin.js ADDED
@@ -0,0 +1,10 @@
1
+ #!/usr/bin/env node
2
+ "use strict";
3
+ Object.defineProperty(exports, "__esModule", { value: true });
4
+ const generator_helper_1 = require("@prisma/generator-helper");
5
+ const manifest_1 = require("./manifest");
6
+ const generator_1 = require("./generator");
7
+ (0, generator_helper_1.generatorHandler)({
8
+ onManifest: manifest_1.onManifest,
9
+ onGenerate: generator_1.onGenerate,
10
+ });
@@ -0,0 +1,100 @@
1
+ "use strict";
2
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
3
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
4
+ return new (P || (P = Promise))(function (resolve, reject) {
5
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
6
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
7
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
8
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
9
+ });
10
+ };
11
+ Object.defineProperty(exports, "__esModule", { value: true });
12
+ exports.generateDatabaseModelFile = generateDatabaseModelFile;
13
+ const file_util_1 = require("./utils/file.util");
14
+ const formatName_1 = require("./utils/formatName");
15
+ function generateDatabaseModelFile(options) {
16
+ return __awaiter(this, void 0, void 0, function* () {
17
+ const outputDir = options.generator.output.value;
18
+ const file = new file_util_1.FileGenUtil(outputDir);
19
+ let entityNames = '';
20
+ for (const model of options.dmmf.datamodel.models) {
21
+ entityNames += `, ${model.name}`;
22
+ }
23
+ file.addLine('headers', `// This file is auto-generated. Do not edit manually.`);
24
+ var prismaClientImportPath = options.generator.config['customPrismaClientImportPath'] || "@prisma/client"; // generated/prisma/client
25
+ file.addLine('imports', `import { Prisma${entityNames} } from "${prismaClientImportPath}"`);
26
+ file.addLine('imports', `import { PrismaService } from "./prisma.service"`);
27
+ file.addLine('class', `export class DatabaseGenService {\n`);
28
+ file.addLine('class', ` constructor(protected prisma: PrismaService) {}`);
29
+ for (const model of options.dmmf.datamodel.models) {
30
+ file.addLine('class', `\n // CRUD to ${model.name}`);
31
+ file.addLine('imports', `import { ${model.name}InsertDto } from "../insert.dtos/${(0, formatName_1.toDotCase)(model.name)}.insert.dto"`);
32
+ yield generateModelOperations(file, model);
33
+ }
34
+ file.addLine('class', `}`);
35
+ yield file.saveToFile(['headers', 'imports', 'class'], `service/database.gen.ts`);
36
+ });
37
+ }
38
+ function generateModelOperations(file, model) {
39
+ return __awaiter(this, void 0, void 0, function* () {
40
+ const modelFirstLow = model.name.charAt(0).toLowerCase() + model.name.slice(1);
41
+ file.addLine('class', ` async findOne${model.name}(`);
42
+ file.addLine('class', ` ${model.name}WhereUniqueInput: Prisma.${model.name}WhereUniqueInput,`);
43
+ file.addLine('class', ` options?: { select?: Prisma.${model.name}Select }`);
44
+ file.addLine('class', ` ) {`);
45
+ file.addLine('class', ` return this.prisma.${modelFirstLow}.findUnique({`);
46
+ file.addLine('class', ` where: ${model.name}WhereUniqueInput,`);
47
+ file.addLine('class', ` ...options,`);
48
+ file.addLine('class', ` })`);
49
+ file.addLine('class', ` }\n`);
50
+ file.addLine('class', ` async findMany${model.name}(params: {`);
51
+ file.addLine('class', ` skip?: number`);
52
+ file.addLine('class', ` take?: number`);
53
+ file.addLine('class', ` cursor?: Prisma.${model.name}WhereUniqueInput`);
54
+ file.addLine('class', ` where?: Prisma.${model.name}WhereInput`);
55
+ file.addLine('class', ` orderBy?: Prisma.${model.name}OrderByWithRelationInput`);
56
+ file.addLine('class', ` }) {`);
57
+ file.addLine('class', ` const { skip, take, cursor, where, orderBy } = params`);
58
+ file.addLine('class', ` return this.prisma.${modelFirstLow}.findMany({`);
59
+ file.addLine('class', ` skip,`);
60
+ file.addLine('class', ` take,`);
61
+ file.addLine('class', ` cursor,`);
62
+ file.addLine('class', ` where,`);
63
+ file.addLine('class', ` orderBy,`);
64
+ file.addLine('class', ` })`);
65
+ file.addLine('class', ` }\n`);
66
+ file.addLine('class', ` async create${model.name}(data: ${model.name}InsertDto): Promise<${model.name}> {`);
67
+ file.addLine('class', ` return this.prisma.${modelFirstLow}.create({`);
68
+ file.addLine('class', ` data : {`);
69
+ for (const field of model.fields) {
70
+ if (field.kind === 'scalar' && !field.isId && !field.isReadOnly) {
71
+ file.addLine('class', ` ${field.name}: data.${field.name},`);
72
+ }
73
+ if (field.kind === 'enum') {
74
+ file.addLine('class', ` ${field.name}: data.${field.name},`);
75
+ }
76
+ if (field.kind === 'object' && field.relationFromFields.length > 0) {
77
+ const relationField = field.relationFromFields[0];
78
+ file.addLine('class', ` ${field.name}: { connect: { ${relationField}: data.${relationField} } },`);
79
+ }
80
+ }
81
+ file.addLine('class', ` }`);
82
+ file.addLine('class', ` })`);
83
+ file.addLine('class', ` }\n`);
84
+ file.addLine('class', ` async update${model.name}(params: {`);
85
+ file.addLine('class', ` where: Prisma.${model.name}WhereUniqueInput;`);
86
+ file.addLine('class', ` data: Prisma.${model.name}UpdateInput;`);
87
+ file.addLine('class', ` }): Promise<${model.name}> {`);
88
+ file.addLine('class', ` const { where, data } = params`);
89
+ file.addLine('class', ` return this.prisma.${modelFirstLow}.update({`);
90
+ file.addLine('class', ` data,`);
91
+ file.addLine('class', ` where,`);
92
+ file.addLine('class', ` })`);
93
+ file.addLine('class', ` }\n`);
94
+ file.addLine('class', ` async delete${model.name}(where: Prisma.${model.name}WhereUniqueInput): Promise<${model.name}> {`);
95
+ file.addLine('class', ` return this.prisma.${modelFirstLow}.delete({`);
96
+ file.addLine('class', ` where,`);
97
+ file.addLine('class', ` })`);
98
+ file.addLine('class', ` }\n`);
99
+ });
100
+ }
@@ -0,0 +1,164 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || (function () {
19
+ var ownKeys = function(o) {
20
+ ownKeys = Object.getOwnPropertyNames || function (o) {
21
+ var ar = [];
22
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
+ return ar;
24
+ };
25
+ return ownKeys(o);
26
+ };
27
+ return function (mod) {
28
+ if (mod && mod.__esModule) return mod;
29
+ var result = {};
30
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
+ __setModuleDefault(result, mod);
32
+ return result;
33
+ };
34
+ })();
35
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
36
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
37
+ return new (P || (P = Promise))(function (resolve, reject) {
38
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
39
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
40
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
41
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
42
+ });
43
+ };
44
+ Object.defineProperty(exports, "__esModule", { value: true });
45
+ exports.onGenerate = onGenerate;
46
+ const formatName_1 = require("./utils/formatName");
47
+ const mapType_1 = require("./utils/mapType");
48
+ const file_util_1 = require("./utils/file.util");
49
+ const fs = __importStar(require("fs/promises"));
50
+ const path = __importStar(require("path"));
51
+ const generator_database_file_1 = require("./generator.database.file");
52
+ const generator_prisma_service_1 = require("./generator.prisma.service");
53
+ function onGenerate(options) {
54
+ return __awaiter(this, void 0, void 0, function* () {
55
+ const outputDir = options.generator.output.value;
56
+ yield (0, file_util_1.ensureDirectoryExists)(outputDir);
57
+ yield (0, file_util_1.ensureDirectoryExists)(`${outputDir}/dtos`);
58
+ yield (0, file_util_1.ensureDirectoryExists)(`${outputDir}/insert.dtos`);
59
+ yield (0, file_util_1.ensureDirectoryExists)(`${outputDir}/enums`);
60
+ yield (0, file_util_1.ensureDirectoryExists)(`${outputDir}/service`);
61
+ for (const e of options.dmmf.datamodel.enums) {
62
+ yield generateEnumString(options, e);
63
+ }
64
+ for (const model of options.dmmf.datamodel.models) {
65
+ yield generateDtoClassString(options, model);
66
+ yield generateInsertDtoClassString(options, model);
67
+ }
68
+ yield (0, generator_database_file_1.generateDatabaseModelFile)(options);
69
+ if (options.generator.config['generatePrismaService'] === 'true') {
70
+ yield (0, generator_prisma_service_1.generatePrismaServiceFile)(options);
71
+ }
72
+ const modelFilePath = path.join(outputDir, "model.json");
73
+ yield fs.writeFile(modelFilePath, JSON.stringify(options.dmmf, null, 2));
74
+ });
75
+ }
76
+ function generateEnumString(options, e) {
77
+ const outputDir = options.generator.output.value;
78
+ const file = new file_util_1.FileGenUtil(outputDir);
79
+ file.addLine('headers', `// This file is auto-generated. Do not edit manually.`);
80
+ file.addLine('enum', `export enum ${e.name}Enum {`);
81
+ for (const value of e.values) {
82
+ file.addLine('enum', ` ${value.name.trim()} = "${value.name}",`);
83
+ }
84
+ file.addLine('enum', `}`);
85
+ return file.saveToFile(['headers', 'enum'], `enums/${(0, formatName_1.toDotCase)(e.name)}.enum.ts`);
86
+ }
87
+ function generateDtoClassString(options, model) {
88
+ return __awaiter(this, void 0, void 0, function* () {
89
+ const outputDir = options.generator.output.value;
90
+ const file = new file_util_1.FileGenUtil(outputDir);
91
+ file.addLine('headers', `// This file is auto-generated. Do not edit manually.`);
92
+ file.addLine('imports', `import { ApiProperty } from "@nestjs/swagger"`);
93
+ file.addLine('class', `export class ${model.name}Dto {`);
94
+ const fields = model.fields.filter((f) => f.kind === 'scalar' || f.kind === 'enum');
95
+ for (const field of fields) {
96
+ var type = (0, mapType_1.mapPrismaTypeToTypeScript)(field);
97
+ var propertyInfo = ``;
98
+ if (!field.isRequired) {
99
+ propertyInfo = `{required: false, nullable: true`;
100
+ type += ' | null';
101
+ var propType = type.replace(' | null', '');
102
+ if (propType === 'string' || propType === 'number' || propType === 'boolean' || propType === 'Date' || propType.endsWith('Enum')) {
103
+ propType = propType.substring(0, 1).toUpperCase() + propType.substring(1);
104
+ }
105
+ else if (propType === 'any') {
106
+ propType = null;
107
+ }
108
+ if (propType) {
109
+ propertyInfo += `, type: () => ${propType}`;
110
+ }
111
+ propertyInfo += `}`;
112
+ }
113
+ const name = field.name + (field.isRequired ? '' : '?');
114
+ if (isFkIdField(field, model)) {
115
+ continue;
116
+ }
117
+ file.addLine('class', `\n @ApiProperty(${propertyInfo})\n ${name}: ${type}`);
118
+ if (field.kind === 'enum') {
119
+ file.addLine('imports', `import { ${field.type}Enum } from "../enums/${(0, formatName_1.toDotCase)(field.type)}.enum"`);
120
+ }
121
+ }
122
+ const importEntities = new Set();
123
+ const relationFields = model.fields.filter((f) => f.kind === 'object' || f.relationName);
124
+ for (const field of relationFields) {
125
+ const type = field.type;
126
+ const name = field.name + '?';
127
+ file.addLine('class', `\n @ApiProperty({ type: () => ${type}Dto, nullable: true${field.isList ? ', isArray: true' : ''}})`);
128
+ file.addLine('class', ` ${name}: ${type}Dto${field.isList ? '[]' : ''}`);
129
+ if (!importEntities.has(type)) {
130
+ importEntities.add(type);
131
+ file.addLine('imports', `import { ${type}Dto } from "./${(0, formatName_1.toDotCase)(type)}.dto"`);
132
+ }
133
+ }
134
+ file.addLine('class', `}`);
135
+ yield file.saveToFile(['headers', 'imports', 'class'], `dtos/${(0, formatName_1.toDotCase)(model.name)}.dto.ts`);
136
+ });
137
+ }
138
+ function generateInsertDtoClassString(options, model) {
139
+ return __awaiter(this, void 0, void 0, function* () {
140
+ const outputDir = options.generator.output.value;
141
+ const file = new file_util_1.FileGenUtil(outputDir);
142
+ file.addLine('headers', `// This file is auto-generated. Do not edit manually.`);
143
+ file.addLine('imports', `import { ApiProperty } from "@nestjs/swagger"`);
144
+ file.addLine('class', `export class ${model.name}InsertDto {`);
145
+ const fields = model.fields.filter((f) => f.kind === 'scalar' || f.kind === 'enum');
146
+ for (const field of fields) {
147
+ if (field.isId && field.hasDefaultValue) {
148
+ continue;
149
+ }
150
+ const type = (0, mapType_1.mapPrismaTypeToTypeScript)(field);
151
+ const name = field.name + (!field.isRequired || field.hasDefaultValue ? '?' : '');
152
+ file.addLine('class', `\n @ApiProperty()\n ${name}: ${type}`);
153
+ if (field.kind === 'enum') {
154
+ file.addLine('imports', `import { ${field.type}Enum } from "../enums/${(0, formatName_1.toDotCase)(field.type)}.enum"`);
155
+ }
156
+ }
157
+ file.addLine('class', `}`);
158
+ yield file.saveToFile(['headers', 'imports', 'class'], `insert.dtos/${(0, formatName_1.toDotCase)(model.name)}.insert.dto.ts`);
159
+ });
160
+ }
161
+ function isFkIdField(field, model) {
162
+ var r = model.fields.some((f) => f.name !== field.name && f.relationName && f.relationFromFields && f.relationFromFields.includes(field.name));
163
+ return r;
164
+ }
@@ -0,0 +1,67 @@
1
+ "use strict";
2
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
3
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
4
+ return new (P || (P = Promise))(function (resolve, reject) {
5
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
6
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
7
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
8
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
9
+ });
10
+ };
11
+ Object.defineProperty(exports, "__esModule", { value: true });
12
+ exports.generatePrismaServiceFile = generatePrismaServiceFile;
13
+ const file_util_1 = require("./utils/file.util");
14
+ function generatePrismaServiceFile(options) {
15
+ return __awaiter(this, void 0, void 0, function* () {
16
+ const outputDir = options.generator.output.value;
17
+ const file = new file_util_1.FileGenUtil(outputDir);
18
+ file.addLine('headers', `// This file is auto-generated. Do not edit manually.`);
19
+ file.addLine('import', `import { Injectable, OnModuleInit } from '@nestjs/common'`);
20
+ file.addLine('import', `import { PrismaMariaDb } from '@prisma/adapter-mariadb'`);
21
+ file.addLine('import', `import { PrismaClient } from 'src/generated/client/client'`);
22
+ file.addLine('class', `@Injectable()`);
23
+ file.addLine('class', `export class PrismaService extends PrismaClient implements OnModuleInit {\n`);
24
+ file.addLine('class', ` constructor() {`);
25
+ file.addLine('class', ` const connectionString = process.env.DATABASE_URL!`);
26
+ file.addLine('class', ` const url = new URL(connectionString)`);
27
+ file.addLine('class', ` const adapter = new PrismaMariaDb({`);
28
+ file.addLine('class', ` host: url.hostname,`);
29
+ file.addLine('class', ` user: url.username,`);
30
+ file.addLine('class', ` password: url.password,`);
31
+ file.addLine('class', ` database: url.pathname.substring(1),`);
32
+ file.addLine('class', ` port: Number(url.port || 3306),`);
33
+ file.addLine('class', ` })`);
34
+ file.addLine('class', ` super({`);
35
+ file.addLine('class', ` adapter,`);
36
+ file.addLine('class', ` })`);
37
+ file.addLine('class', ` }\n`);
38
+ file.addLine('class', ` async onModuleInit() {`);
39
+ file.addLine('class', ` await this.$connect()`);
40
+ file.addLine('class', ` }`);
41
+ file.addLine('class', `}`);
42
+ yield file.saveToFile(['headers', 'import', 'class'], `service/prisma.service.ts`);
43
+ });
44
+ }
45
+ // import { Injectable, OnModuleInit } from '@nestjs/common'
46
+ // import { PrismaMariaDb } from '@prisma/adapter-mariadb'
47
+ // import { PrismaClient } from 'src/generated/client/client'
48
+ // @Injectable()
49
+ // export class PrismaService extends PrismaClient implements OnModuleInit {
50
+ // constructor() {
51
+ // const connectionString = process.env.DATABASE_URL!
52
+ // const url = new URL(connectionString)
53
+ // const adapter = new PrismaMariaDb({
54
+ // host: url.hostname,
55
+ // user: url.username,
56
+ // password: url.password,
57
+ // database: url.pathname.substring(1),
58
+ // port: Number(url.port || 3306),
59
+ // })
60
+ // super({
61
+ // adapter,
62
+ // })
63
+ // }
64
+ // async onModuleInit() {
65
+ // await this.$connect()
66
+ // }
67
+ // }
@@ -0,0 +1,10 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.onManifest = onManifest;
4
+ function onManifest() {
5
+ return {
6
+ prettyName: 'Simple Prisma DTO Generator',
7
+ version: '1.0.0',
8
+ defaultOutput: './generated-classes',
9
+ };
10
+ }
@@ -0,0 +1,80 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || (function () {
19
+ var ownKeys = function(o) {
20
+ ownKeys = Object.getOwnPropertyNames || function (o) {
21
+ var ar = [];
22
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
+ return ar;
24
+ };
25
+ return ownKeys(o);
26
+ };
27
+ return function (mod) {
28
+ if (mod && mod.__esModule) return mod;
29
+ var result = {};
30
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
+ __setModuleDefault(result, mod);
32
+ return result;
33
+ };
34
+ })();
35
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
36
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
37
+ return new (P || (P = Promise))(function (resolve, reject) {
38
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
39
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
40
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
41
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
42
+ });
43
+ };
44
+ Object.defineProperty(exports, "__esModule", { value: true });
45
+ exports.FileGenUtil = void 0;
46
+ exports.ensureDirectoryExists = ensureDirectoryExists;
47
+ const fs = __importStar(require("fs/promises"));
48
+ const path = __importStar(require("path"));
49
+ class FileGenUtil {
50
+ constructor(outputDir) {
51
+ this.outputDir = outputDir;
52
+ this.fileContent = new Map();
53
+ }
54
+ addLine(group, line) {
55
+ if (!this.fileContent.has(group)) {
56
+ this.fileContent.set(group, []);
57
+ }
58
+ this.fileContent.get(group).push(line + '\n');
59
+ }
60
+ saveToFile(groups, fileName) {
61
+ return __awaiter(this, void 0, void 0, function* () {
62
+ let content = '';
63
+ for (const group of groups) {
64
+ const lines = this.fileContent.get(group);
65
+ for (const line of lines || []) {
66
+ content += line;
67
+ }
68
+ content += '\n';
69
+ }
70
+ const filePath = path.join(this.outputDir, fileName);
71
+ yield fs.writeFile(filePath, content.trim());
72
+ });
73
+ }
74
+ }
75
+ exports.FileGenUtil = FileGenUtil;
76
+ function ensureDirectoryExists(dirPath) {
77
+ return __awaiter(this, void 0, void 0, function* () {
78
+ yield fs.mkdir(dirPath, { recursive: true });
79
+ });
80
+ }
@@ -0,0 +1,9 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.toDotCase = toDotCase;
4
+ function toDotCase(str) {
5
+ return str
6
+ .split(/(?=[A-Z])/)
7
+ .join('.')
8
+ .toLowerCase();
9
+ }
@@ -0,0 +1,29 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.mapPrismaTypeToTypeScript = mapPrismaTypeToTypeScript;
4
+ function mapPrismaTypeToTypeScript(field) {
5
+ if (field.kind === 'enum') {
6
+ return `${field.type}Enum`;
7
+ }
8
+ const suffix = field.isList ? '' : '';
9
+ switch (field.type) {
10
+ case 'String':
11
+ return 'string' + suffix;
12
+ case 'Int':
13
+ case 'Float':
14
+ case 'Decimal':
15
+ return 'number' + suffix;
16
+ case 'BigInt':
17
+ return 'number' + suffix;
18
+ case 'Boolean':
19
+ return 'boolean' + suffix;
20
+ case 'DateTime':
21
+ return 'Date' + suffix;
22
+ case 'Json':
23
+ return 'any' + suffix;
24
+ case 'Bytes':
25
+ return 'Buffer' + suffix;
26
+ default:
27
+ return field.type + suffix;
28
+ }
29
+ }
package/package.json ADDED
@@ -0,0 +1,28 @@
1
+ {
2
+ "name": "@custom-generators/simple-prisma-dto-gen",
3
+ "version": "1.0.0",
4
+ "main": "index.js",
5
+ "bin": {
6
+ "prisma-class-generator": "./dist/bin.js"
7
+ },
8
+ "files": [
9
+ "dist"
10
+ ],
11
+ "scripts": {
12
+ "test": "echo \"Error: no test specified\" && exit 1",
13
+ "build": "tsc",
14
+ "prepublishOnly": "npm run build"
15
+ },
16
+ "keywords": [],
17
+ "author": "",
18
+ "license": "ISC",
19
+ "description": "",
20
+ "dependencies": {
21
+ "@prisma/generator-helper": "^6.19.0"
22
+ },
23
+ "devDependencies": {
24
+ "@types/node": "^24.10.0",
25
+ "ts-node": "^10.9.2",
26
+ "typescript": "^5.9.3"
27
+ }
28
+ }