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
id
devem ser convertidos para seu ID - Arrays são sempre processados recursivamente, não há opção para preservar objetos em arrays
- A propriedade
id
sempre tem prioridade sobre processamento recursivo do objeto