@vegardit/prisma-generator-nestjs-dto
Version:
Generates DTO and Entity classes from Prisma Schema for NestJS
88 lines (87 loc) • 3.81 kB
JavaScript
;
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.run = void 0;
const node_path_1 = __importDefault(require("node:path"));
const case_1 = require("case");
const sdk_1 = require("@prisma/sdk");
const template_helpers_1 = require("./template-helpers");
const compute_model_params_1 = require("./compute-model-params");
const generate_connect_dto_1 = require("./generate-connect-dto");
const generate_create_dto_1 = require("./generate-create-dto");
const generate_update_dto_1 = require("./generate-update-dto");
const generate_entity_1 = require("./generate-entity");
const annotations_1 = require("./annotations");
const field_classifiers_1 = require("./field-classifiers");
const run = ({ output, dmmf, ...options }) => {
const { exportRelationModifierClasses, outputToNestJsResourceStructure, fileNamingStyle = 'camel', ...preAndSuffixes } = options;
const transformers = {
camel: case_1.camel,
kebab: case_1.kebab,
pascal: case_1.pascal,
snake: case_1.snake,
};
const transformFileNameCase = transformers[fileNamingStyle];
const templateHelpers = (0, template_helpers_1.makeHelpers)({
transformFileNameCase,
transformClassNameCase: case_1.pascal,
...preAndSuffixes,
});
const allModels = dmmf.datamodel.models;
const filteredModels = allModels
.filter((model) => !(0, field_classifiers_1.isAnnotatedWith)(model, annotations_1.DTO_IGNORE_MODEL))
.map((model) => ({
...model,
output: {
dto: outputToNestJsResourceStructure
? node_path_1.default.join(output, transformFileNameCase(model.name), 'dto')
: output,
entity: outputToNestJsResourceStructure
? node_path_1.default.join(output, transformFileNameCase(model.name), 'entities')
: output,
},
}));
const modelFiles = filteredModels.map((model) => {
sdk_1.logger.info(`Processing Model ${model.name}`);
const modelParams = (0, compute_model_params_1.computeModelParams)({
model,
allModels: filteredModels,
templateHelpers,
});
const connectDto = {
fileName: node_path_1.default.join(model.output.dto, templateHelpers.connectDtoFilename(model.name, true)),
content: (0, generate_connect_dto_1.generateConnectDto)({
...modelParams.connect,
templateHelpers,
}),
};
const createDto = {
fileName: node_path_1.default.join(model.output.dto, templateHelpers.createDtoFilename(model.name, true)),
content: (0, generate_create_dto_1.generateCreateDto)({
...modelParams.create,
exportRelationModifierClasses,
templateHelpers,
}),
};
const updateDto = {
fileName: node_path_1.default.join(model.output.dto, templateHelpers.updateDtoFilename(model.name, true)),
content: (0, generate_update_dto_1.generateUpdateDto)({
...modelParams.update,
exportRelationModifierClasses,
templateHelpers,
}),
};
const entity = {
fileName: node_path_1.default.join(model.output.entity, templateHelpers.entityFilename(model.name, true)),
content: (0, generate_entity_1.generateEntity)({
...modelParams.entity,
templateHelpers,
}),
};
return [connectDto, createDto, updateDto, entity];
});
return [...modelFiles].flat();
};
exports.run = run;