@anpdgovbr/shared-types
Version:
Biblioteca central de tipos TypeScript compartilhados para os projetos da ANPD (BETA)
105 lines (104 loc) • 3.88 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.validateFieldValue = validateFieldValue;
exports.validatePayload = validatePayload;
exports.toAdAttributes = toAdAttributes;
const vocab_config_1 = require("./vocab.config");
/**
* Valida um único valor contra a configuração do campo.
*
* Aplica regras definidas em FIELD_CONFIGS (tipo, obrigatoriedade, tamanho,
* padrões regexp). Retorna um ValidationError quando a validação falha ou
* null quando o valor é válido.
*
* @param apiName Nome do campo exposto pela API (AllowedField).
* @param value Valor a ser validado (pode ser undefined/null).
* @returns ValidationError | null - erro de validação ou null se válido.
* @public
*/
function validateFieldValue(apiName, value) {
var _a, _b;
const cfg = vocab_config_1.FIELD_CONFIGS[apiName];
if (value == null) {
if (!cfg.allowEmpty) {
return { field: apiName, message: "Valor obrigatório ausente" };
}
return null;
}
if (cfg.type === "string") {
if (typeof value !== "string") {
return { field: apiName, message: "Tipo inválido: esperado string" };
}
if (!cfg.allowEmpty && value.trim() === "") {
return { field: apiName, message: "Valor vazio não permitido" };
}
if (cfg.maxLength && value.length > cfg.maxLength) {
return { field: apiName, message: `Tamanho máximo ${cfg.maxLength}` };
}
if (((_a = cfg.validation) === null || _a === void 0 ? void 0 : _a.pattern) && !cfg.validation.pattern.test(value)) {
return {
field: apiName,
message: (_b = cfg.validation.message) !== null && _b !== void 0 ? _b : "Formato inválido",
};
}
}
// number/boolean support can be extended as needed
return null;
}
/**
* Valida um payload parcial (mapa apiName -> valor).
*
* Percorre as chaves do payload, assegura que cada campo é permitido e usa
* validateFieldValue para validar os valores. Retorna uma lista de erros (vazia
* quando não há problemas).
*
* @param payload Objeto contendo pares nomeDoCampo -> valor (parcial).
* @returns ValidationError[] - lista de erros encontrados (pode ser vazia).
* @public
*/
function validatePayload(payload) {
const erros = [];
for (const k of Object.keys(payload)) {
if (!(k in vocab_config_1.FIELD_CONFIGS)) {
erros.push({ field: k, message: "Campo não permitido" });
continue;
}
const e = validateFieldValue(k, payload[k]);
if (e)
erros.push(e);
}
return erros;
}
/**
* Converte um payload da API para atributos compatíveis com Active Directory.
*
* Primeiro valida o payload usando validatePayload. Se houver erros, retorna
* { ok: false, errors }. Caso contrário, mapeia os nomes dos campos da API
* para os nomes de atributos do AD conforme AD_FIELD_MAPPING e retorna
* { ok: true, attrs }.
*
* @param payload Objeto contendo pares nomeDoCampo -> valor a serem convertidos.
* @returns { ok: true, attrs: Record<string, unknown> } em caso de sucesso ou
* { ok: false, errors: ValidationError[] } quando há erros de validação.
* @public
*/
function toAdAttributes(payload) {
const errors = validatePayload(payload);
if (errors.length)
return { ok: false, errors };
const attrs = {};
for (const [k, v] of Object.entries(payload)) {
const ad = vocab_config_1.AD_FIELD_MAPPING[k];
if (ad)
attrs[ad] = v;
}
return { ok: true, attrs };
}
/**
* Coleção padrão de utilitários para validar e converter vocabulário.
*
* Exporta as funções principais para uso em outros módulos.
*
* @public
*/
exports.default = { validateFieldValue, validatePayload, toAdAttributes };