@anpdgovbr/shared-types
Version:
Biblioteca central de tipos TypeScript compartilhados para os projetos da ANPD (BETA)
131 lines (130 loc) • 3.96 kB
JavaScript
;
/**
* @packageDocumentation
*
* Tipagens auxiliares para permissões do sistema.
*
* Este módulo define as ações e recursos que compõem o modelo de permissão,
* helpers de validação/coerção e um tipo que representa permissões concedidas
* na forma `${Acao}_${Recurso}`.
*
* @remarks
* Os valores imutáveis expostos permitem iteração/validação em tempo de execução.
*
* @public
*/
Object.defineProperty(exports, "__esModule", { value: true });
exports.RECURSOS_PERMISSAO_VALUES = exports.ACOES_PERMISSAO_VALUES = void 0;
exports.isAcaoPermissao = isAcaoPermissao;
exports.isRecursoPermissao = isRecursoPermissao;
exports.assertAcaoPermissao = assertAcaoPermissao;
exports.assertRecursoPermissao = assertRecursoPermissao;
exports.coerceAcaoPermissao = coerceAcaoPermissao;
exports.coerceRecursoPermissao = coerceRecursoPermissao;
/** Lista imutável com as ações de permissão.
*
* @remarks
* Utilizada para validação em tempo de execução e construção de tipos literais.
*
* @readonly
* @public
*/
exports.ACOES_PERMISSAO_VALUES = [
"Exibir",
"VerHistorico",
"EditarProprio",
"EditarGeral",
"Alterar",
"Cadastrar",
"Editar",
"Desabilitar",
"Criar",
"Acessar",
"Registrar",
];
/** Lista imutável com os recursos de permissão.
*
* @remarks
* Valores representando entidades/módulos do sistema que podem receber permissões.
*
* @readonly
* @public
*/
exports.RECURSOS_PERMISSAO_VALUES = [
"Processo",
"Responsavel",
"Metadados",
"Relatorios",
"Permissoes",
"Usuario",
"Admin",
"Auditoria",
];
/**
* Verifica se um valor corresponde a uma ação de permissão válida.
*
* @param x - Valor a ser verificado em tempo de execução.
* @returns true se `x` for um dos valores definidos em `ACOES_PERMISSAO_VALUES`.
*/
function isAcaoPermissao(x) {
return (typeof x === "string" &&
exports.ACOES_PERMISSAO_VALUES.includes(x));
}
/**
* Verifica se um valor corresponde a um recurso de permissão válida.
*
* @param x - Valor a ser verificado em tempo de execução.
* @returns true se `x` for um dos valores definidos em `RECURSOS_PERMISSAO_VALUES`.
*/
function isRecursoPermissao(x) {
return (typeof x === "string" &&
exports.RECURSOS_PERMISSAO_VALUES.includes(x));
}
/**
* Asserção de tipo para `AcaoPermissao`.
*
* Lança um erro se o valor fornecido não for uma ação de permissão válida.
*
* @param x - Valor a ser validado.
* @throws {Error} Se `x` não for um `AcaoPermissao`.
*/
function assertAcaoPermissao(x) {
if (!isAcaoPermissao(x))
throw new Error(`AcaoPermissao inválida: ${String(x)}`);
}
/**
* Asserção de tipo para `RecursoPermissao`.
*
* Lança um erro se o valor fornecido não for um recurso de permissão válido.
*
* @param x - Valor a ser validado.
* @throws {Error} Se `x` não for um `RecursoPermissao`.
*/
function assertRecursoPermissao(x) {
if (!isRecursoPermissao(x))
throw new Error(`RecursoPermissao inválido: ${String(x)}`);
}
/**
* Coerção de valor para `AcaoPermissao`.
*
* Retorna o valor se for uma ação válida, caso contrário retorna o `fallback`.
*
* @param x - Valor a ser coerido.
* @param fallback - Valor padrão retornado quando `x` não é válido (padrão: "Exibir").
* @returns Um valor garantidamente do tipo `AcaoPermissao`.
*/
function coerceAcaoPermissao(x, fallback = "Exibir") {
return isAcaoPermissao(x) ? x : fallback;
}
/**
* Coerção de valor para `RecursoPermissao`.
*
* Retorna o valor se for um recurso válido, caso contrário retorna o `fallback`.
*
* @param x - Valor a ser coerido.
* @param fallback - Valor padrão retornado quando `x` não é válido (padrão: "Processo").
* @returns Um valor garantidamente do tipo `RecursoPermissao`.
*/
function coerceRecursoPermissao(x, fallback = "Processo") {
return isRecursoPermissao(x) ? x : fallback;
}