@adocasts.com/dto
Version:
Easily make and generate DTOs from Lucid Models
81 lines (80 loc) • 3.63 kB
JavaScript
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, args, flags } from '@adonisjs/core/ace';
import { stubsRoot } from '../stubs/main.js';
import DtoService from '../services/dto_service.js';
import ModelService from '../services/model_service.js';
import { ImportService } from '../services/import_service.js';
import ValidatorService from '../services/validator_service.js';
export default class MakeDto extends BaseCommand {
static commandName = 'make:dto';
static description = 'Create a new dto';
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 { model, modelFileLines } = await modelService.getModelInfo(this.model, this.name);
const dto = dtoService.getDtoInfo(this.name, model);
const validator = validatorService?.getValidatorInfo(this.name, model);
const codemods = await this.createCodemods();
if (!model.isReadable && this.model) {
// wanted to generate from model, but model couldn't be found or read? cancel with error
this.logger.error(`Unable to find or read desired model ${model.fileName}`);
this.exitCode = 1;
return;
}
else if (!model.isReadable) {
// model not specifically wanted and couldn't be found or read? create plain DTO
await codemods.makeUsingStub(stubsRoot, 'make/dto/plain.stub', {
dto,
});
// If validator flag is set, also create a plain validator
if (this.validator && validator) {
await codemods.makeUsingStub(stubsRoot, 'make/validator/plain.stub', {
validator,
});
}
return;
}
const imports = ImportService.getImportStatements(dto, modelFileLines);
// Create the DTO
await codemods.makeUsingStub(stubsRoot, 'make/dto/main.stub', {
dto,
model,
imports,
});
// If validator flag is set, also create a validator
if (this.validator && validator) {
const validatorImports = ImportService.getImportStatements(validator, modelFileLines);
await codemods.makeUsingStub(stubsRoot, 'make/validator/main.stub', {
validator,
model,
imports: validatorImports,
});
}
}
}
__decorate([
args.string({
description: "Name of the DTO. If a model matches the provided name, it'll be used to generate the DTO",
})
], MakeDto.prototype, "name", void 0);
__decorate([
flags.string({
description: 'Specify a model to build the DTO from',
alias: 'm',
})
], MakeDto.prototype, "model", void 0);
__decorate([
flags.boolean({
description: 'Generate a validator alongside the DTO',
alias: 'v',
})
], MakeDto.prototype, "validator", void 0);