Sanitize Form
Utilitário para sanitizar dados de formulário antes de enviá-los ao backend.
Instalação e Importação
typescript
import { sanitizeForm } from '@sysvale/foundry';Função
sanitizeForm()
Sanitiza dados de formulário
- Extrai IDs de objetos do tipo
{ id: string | number, value: string } - Mantém valores primitivos inalterados
- Processa recursivamente campos aninhados
- Aplica transformações em campos específicos por meio de
sanitizers
Sintaxe
typescript
sanitizeForm(
values: Record<string, FormValue>,
sanitizableFields?: SanitizableField[]
): Record<string, FormValue>Parâmetros
values(Record<string, FormValue>): Dados do formulário a serem sanitizadossanitizableFields(SanitizableField[], opcional): Array de campos com sanitizadores personalizados
Tipos
typescript
type FormValue =
| string
| number
| boolean
| null
| undefined
| FormObject
| FormValue[];
type FormObject = {
id?: string | number;
[key: string]: FormValue;
};
interface SanitizableField {
field: string;
sanitizer: (value: any) => FormValue;
}Retorno
Record<string, FormValue> - Dados sanitizados conforme as regras aplicadas
Regras de Sanitização
- Valores primitivos: Mantidos inalterados (string, number, boolean, null, undefined)
- Arrays de primitivos: Preservados sem modificação
- Objetos com
id: Substituídos pelo valor da propriedadeid - Objetos sem
id: Processados recursivamente campo por campo - Arrays com objetos: Cada item é sanitizado recursivamente
- Sanitizadores personalizados: Aplicados a campos específicos quando configurados
- Estruturas aninhadas: Processamento recursivo em todos os níveis
Exemplos
Extração de IDs:
typescript
// Objeto com ID é substituído pelo ID
sanitizeForm({
category: { id: 'cat-123', name: 'Categoria A' },
});
// → { category: 'cat-123' }
// Array de objetos com IDs
sanitizeForm({
users: [
{ id: 1, name: 'João' },
{ id: 2, name: 'Maria' },
{ id: 3, name: 'Pedro' },
],
});
// → { users: [1, 2, 3] }Processamento recursivo:
typescript
// Objetos sem ID são processados recursivamente
sanitizeForm({
config: {
theme: 'dark',
notifications: {
email: true,
push: false,
},
},
});
// → { config: { theme: 'dark', notifications: { email: true, push: false } } }
// Combinação de extração de ID e processamento recursivo
sanitizeForm({
user: { id: 1, name: 'João' },
preferences: {
theme: 'dark',
language: { id: 'pt-BR', name: 'Português' },
},
});
// → { user: 1, preferences: { theme: 'dark', language: 'pt-BR' } }Estruturas complexas:
typescript
// Arrays aninhados com objetos
sanitizeForm({
categories: [
{
id: 1,
items: [
{ id: 10, name: 'Item A' },
{ id: 11, name: 'Item B' },
],
},
{
id: 2,
items: [{ id: 20, name: 'Item C' }],
},
],
});
// → { categories: [1, 2] }
// Objetos profundamente aninhados
sanitizeForm({
company: {
id: 100,
departments: [
{
id: 200,
employees: [
{ id: 300, name: 'João' },
{ id: 301, name: 'Maria' },
],
},
],
},
});
// → { company: 100 }Sanitizadores personalizados:
typescript
// Aplicação de sanitizadores customizados
const sanitizers = [
{
field: 'name',
sanitizer: value => value.toUpperCase(),
},
{
field: 'phone',
sanitizer: value => value.replace(/\D/g, ''),
},
];
sanitizeForm(
{
name: 'joão',
phone: '(11) 99999-9999',
age: 25,
},
sanitizers
);
// → { name: 'JOÃO', phone: '11999999999', age: 25 }Limitações
- A função assume que objetos com propriedade
iddevem ser convertidos para seu ID - Arrays são sempre processados recursivamente, não há opção para preservar objetos em arrays
- A propriedade
idsempre tem prioridade sobre processamento recursivo do objeto