@igleite/tsutils
Version:
Uma coleção de utilitários em TypeScript para facilitar o desenvolvimento no dia a dia.
95 lines (94 loc) • 3.24 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.Result = exports.ValidationFailure = void 0;
/**
* Classe que representa falhas de validação.
*/
class ValidationFailure {
/**
* Cria uma instância de `ValidationFailure`.
*
* @param {string} propertyName - O nome da propriedade que falhou na validação.
* @param {string} errorMessage - A mensagem de erro associada à falha de validação.
*/
constructor(propertyName, errorMessage) {
this.propertyName = propertyName;
this.errorMessage = errorMessage;
}
}
exports.ValidationFailure = ValidationFailure;
/**
* Classe `Result` para encapsular o sucesso ou falha de uma operação.
*
* @template T - Tipo de dado que pode ser retornado em caso de sucesso, o padrão é `null`.
*/
class Result {
/**
* Cria uma instância de `Result`.
*
* @param {boolean} succeeded - Indica se a operação foi bem-sucedida.
* @param {T} [data] - Dados retornados em caso de sucesso.
* @param {ValidationFailure[]} [failures=[]] - Lista de falhas em caso de erro.
*/
constructor(succeeded, data, failures = []) {
this.succeeded = succeeded;
this.data = data;
this.failures = failures;
}
/**
* Método estático para criar um `Result` com falhas.
*
* Pode receber uma ou mais falhas, sendo elas instâncias de `ValidationFailure` ou strings.
*
* @param {...(ValidationFailure | string)} failures - As falhas que ocorreram, podem ser instâncias de `ValidationFailure` ou mensagens de erro como string.
* @returns {Result<T>} Um novo `Result` indicando falha.
*/
static False(...failures) {
const validationFailures = failures.map((failure) => failure instanceof ValidationFailure
? failure
: new ValidationFailure(failure, 'Invalid value'));
return new Result(false, null, validationFailures);
}
/**
* Método estático para criar um `Result` com sucesso.
*
* @param {T} [data] - Dados retornados em caso de sucesso.
* @returns {Result<T>} Um novo `Result` indicando sucesso.
*/
static True(data) {
return new Result(true, data);
}
/**
* Verifica se o resultado foi bem-sucedido.
*
* @returns {boolean} Retorna `true` se o resultado for sucesso.
*/
isSuccess() {
return this.succeeded;
}
/**
* Verifica se o resultado foi uma falha.
*
* @returns {boolean} Retorna `true` se o resultado for uma falha.
*/
isFailure() {
return !this.succeeded;
}
/**
* Retorna os erros associados ao resultado, se houver falhas.
*
* @returns {ValidationFailure[]} A lista de falhas de validação.
*/
getErrors() {
return this.failures;
}
/**
* Retorna os dados associados ao resultado, se houver sucesso.
*
* @returns {T | undefined} Os dados retornados em caso de sucesso ou `undefined` se não houver dados.
*/
getData() {
return this.data;
}
}
exports.Result = Result;