UNPKG

@anpdgovbr/shared-types

Version:

Biblioteca central de tipos TypeScript compartilhados para os projetos da ANPD (BETA)

105 lines (104 loc) 3.88 kB
"use strict"; 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 };