UNPKG

@adocasts.com/dto

Version:

Easily make and generate DTOs from Lucid Models

59 lines (58 loc) 2.92 kB
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) { var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d; if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc); else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r; return c > 3 && r && Object.defineProperty(target, key, r), r; }; import { BaseCommand, flags } from '@adonisjs/core/ace'; import DtoService from '../services/dto_service.js'; import ModelService from '../services/model_service.js'; import { stubsRoot } from '../stubs/main.js'; import { ImportService } from '../services/import_service.js'; import ValidatorService from '../services/validator_service.js'; export default class GererateDtos extends BaseCommand { static commandName = 'generate:dtos'; static description = 'Reads, converts, and generates DTOs from all Lucid Models'; static options = { strict: true, }; async run() { const modelService = new ModelService(this.app); const dtoService = new DtoService(this.app); const validatorService = this.validator ? new ValidatorService(this.app) : null; const files = await modelService.getFromFiles(); const unreadable = files.filter((file) => !file.model.isReadable); if (unreadable.length) { this.logger.error(`Unable to find or read one or more models: ${unreadable.map((file) => file.model.name).join(', ')}`); this.exitCode = 1; return; } for (const file of files) { const dto = dtoService.getDtoInfo(file.model.name, file.model); const validator = validatorService?.getValidatorInfo(file.model.name, file.model); const codemods = await this.createCodemods(); const imports = ImportService.getImportStatements(dto, file.modelFileLines); // Create the DTO await codemods.makeUsingStub(stubsRoot, 'make/dto/main.stub', { model: file.model, dto, imports, }); // If validator flag is set, also create a validator if (this.validator && validator) { const validatorImports = ImportService.getImportStatements(validator, file.modelFileLines); await codemods.makeUsingStub(stubsRoot, 'make/validator/main.stub', { model: file.model, validator, imports: validatorImports, }); } } } } __decorate([ flags.boolean({ description: 'Generate validators alongside DTOs', alias: 'v', }) ], GererateDtos.prototype, "validator", void 0);