# Tipos de entrada de las acciones

> Define y valida los tipos de input, params, query y output de una acción de Total.js 5.

Framework: total5
Product: Total.js 5 (total5@0.0.19)
Language: es
Content-SHA256: 948328121bb928382ae52cd42851a25e7a2323a1fa4e37b26af413f43a057768
Snapshot: c0700e321579725c5cf4f5ace1ad7d2866d1b4f93c24a63c0b41b6b7998e976c
Sources: total5-installed@total5@0.0.19
Review: not-recorded

Una definición es una lista de `name:Type` separados por comas, por ejemplo `*email:Email, age:Number`. Un `*` antes del nombre hace el campo obligatorio. El mismo formato se usa en `input` (el cuerpo), `params`, `query` y `output`. **El tipo convierte el valor**: la acción recibe el valor convertido, no el texto que se envió.

Los nombres de los tipos no distinguen mayúsculas de minúsculas. Cada tipo de abajo se comprobó enviando el valor de la segunda columna.

| Tipo | Valor enviado | Valor recibido | Notas |
|---|---|---|---|
| `String` | `  hello  ` | `hello` | Texto; se eliminan los espacios al principio y al final. |
| `Text` | `  text  ` | `  text  ` | Texto conservado exactamente como se envió. |
| `Email` | ` A@B.CZ ` | `a@b.cz` | Una dirección de correo válida, en minúsculas; cualquier otra cosa se rechaza. |
| `Phone` | `+421 900 123 456` | `+421900123456` | Un número de teléfono; se eliminan los espacios. |
| `URL` | `https://totaljs.com/x` | `https://totaljs.com/x` | Una URL válida; cualquier otra cosa se rechaza. |
| `Name` | `john smith` | `John Smith` | Pone en mayúscula cada palabra. |
| `Capitalize` | `hello big world` | `Hello Big World` | Pone en mayúscula cada palabra. |
| `Capitalize2` | `HELLO big WORLD` | `Hello big world` | Pone en mayúscula solo la primera letra y el resto en minúsculas. |
| `Lowercase` | `ABC` | `abc` | Minúsculas. |
| `Uppercase` | `abc` | `ABC` | Mayúsculas. |
| `Search` | `Žluťoučký Kůň` | `zlutoucki kun` | Minúsculas sin acentos, para buscar. |
| `SafeString` | `plain text` | `plain text` | Texto; un valor con etiquetas HTML como `<b>` se rechaza. |
| `Color` | `#FF0000` | `#FF0000` | [schema-enums-and-formats](/en/total5/schema-enums-and-formats/) |
| `Base64` | `SGVsbG8=` | `SGVsbG8=` | [schema-enums-and-formats](/en/total5/schema-enums-and-formats/) |
| `Zip` | `81101` | `81101` | [schema-enums-and-formats](/en/total5/schema-enums-and-formats/) |
| `Icon` | `ti ti-home` | `ti ti-home` | [schema-enums-and-formats](/en/total5/schema-enums-and-formats/) |
| `Number` | `12.5` | `12.5` | Un número; el texto se convierte. |
| `Float` | `3.14` | `3.14` | Un número; el texto se convierte. |
| `Decimal` | `2.5` | `2.5` | Un número; el texto se convierte. |
| `Boolean` | `true` | `true` | `true` o `false`; el texto `true` se convierte. |
| `Date` | `2026-01-05` | `2026-01-05T00:00:00.000Z` | Una fecha. En JSON se envía como texto ISO. |

Otras formas:

| Forma | Ejemplo | Notas |
|---|---|---|
| `[String]`, `[Number]` | `ze_arr:[String]` | Un array de ese tipo: cada elemento se convierte. |
| `{ x:Number, y:String }` | `zg_obj:{ x:Number, y:String }` | Un objeto anidado, validado con sus propios campos. |
| `String(5)` | `zd_max:String(5)` | Un texto de como máximo 5 caracteres; un texto más largo se rechaza. |

Un valor que no encaja con el tipo se rechaza con el estado 400 y el nombre del campo en el error. Estos valores se rechazaron en las comprobaciones: `SafeString` con `<b>x</b>`, `String(5)` con diez caracteres, un `UID` con `abc` y un `GUID` con `not-guid`. La receta de límites verifica `Int`, `SmallInt`, `TinyInt`, `Number2`: [numeric-schema-boundaries](/en/total5/numeric-schema-boundaries/). En esta versión `Int` no trunca: `7.9` se queda en `7.9`.

`UID` y `GUID` aceptan los valores que crean `UID()` y `GUID()`.

```js definitions/types.js
NEWACTION('Types/all', {
	name: 'Every type',
	input: 'a_string:String, b_text:Text, c_email:Email, d_phone:Phone, e_url:URL, f_name:Name, g_capitalize:Capitalize, h_capitalize2:Capitalize2, i_lowercase:Lowercase, j_uppercase:Uppercase, k_search:Search, l_safestring:SafeString, m_color:Color, n_base64:Base64, o_zip:Zip, p_icon:Icon, q_number:Number, r_float:Float, s_decimal:Decimal, t_boolean:Boolean, u_date:Date, ze_arr:[String], zf_nums:[Number], zg_obj:{ x:Number, y:String }, zd_max:String(5)',
	action: function($, model) {
		$.callback(model);
	}
});

NEWACTION('Types/ids', {
	name: 'UID and GUID',
	input: '*id:UID, *key:GUID',
	action: function($, model) {
		$.callback(model);
	}
});
```

```js controllers/types.js
exports.install = function() {
	ROUTE('POST /types/ @json --> *Types/all');
	ROUTE('POST /ids/ @json --> *Types/ids');
	ROUTE('GET /newids/', ids);
};

function ids($) {
	$.json({ id: UID(), key: GUID() });
}
```
