# Construiește un pipeline de procesare cu transforms

> Înregistrează mai mulți pași sub un singur nume cu NEWTRANSFORM() și trece o valoare prin ei, în ordine, cu TRANSFORM().

Framework: total5
Product: Total.js 5 (total5@0.0.19)
Language: ro
Content-SHA256: 94f321f94c508ec944f89817518c02dabf623e54d64308bb6e882708bdd1d4db
Snapshot: c0700e321579725c5cf4f5ace1ad7d2866d1b4f93c24a63c0b41b6b7998e976c
Sources: total5-installed@total5@0.0.19
Review: not-recorded

Un transform este un lanț denumit de pași. `NEWTRANSFORM(name, fn, [id])` adaugă un pas lanțului `name`; pașii rulează în ordinea înregistrării, iar fiecare primește obiectul de opțiuni `$` și valoarea curentă. Schimbă valoarea cu `$.value = ...` și apelează `$.next()` pentru a continua cu pasul următor. `$.invalid(message)` adaugă o eroare. `TRANSFORM(name, value)` pornește lanțul și returnează o promisiune cu valoarea finală; promisiunea este respinsă când un pas a raportat o eroare. Cu un callback în loc, `TRANSFORM(name, value, function(err, value) {})`. Un nume fără niciun pas returnează valoarea așa cum este.

Folosește-l pentru munca ce trebuie să poată fi extinsă din mai multe locuri, cum ar fi curățarea unui comentariu înainte de salvare: un filtru de spam, un tăietor de spații și un verificator de linkuri pot trăi fiecare în propriul fișier și pot fi adăugați sau scoși fără a atinge codul care apelează `TRANSFORM()`. `id`-ul opțional îți permite să elimini un pas mai târziu cu `NEWTRANSFORM(name, null, id)`.

```js definitions/transforms.js
NEWTRANSFORM('comment', function($, value) {
	$.value = value.trim();
	$.next();
}, 'trim');

NEWTRANSFORM('comment', function($, value) {
	if (/spam/i.test(value))
		$.invalid('Spam is not allowed');
	$.next();
}, 'spam');

NEWTRANSFORM('comment', function($, value) {
	$.value = value.replace(/\s+/g, ' ');
	$.next();
}, 'spaces');
```

```js controllers/comments.js
exports.install = function() {
	ROUTE('POST /comment/ @json', comment);
	ROUTE('DELETE /comment/spaces/', remove_step);
};

async function comment($) {
	try {
		var text = await TRANSFORM('comment', $.body.text);
		$.json({ text: text });
	} catch (err) {
		$.json({ error: true });
	}
}

function remove_step($) {
	NEWTRANSFORM('comment', null, 'spaces');
	$.success();
}
```
