# Depozitul de componente Flow: 146 de componente, catalogul și testerul

> Un tur al totaljs/flowstreamcomponents, componentele open source ale Flow: ce grupuri acoperă, cum se generează db.json, cum încarcă Flow catalogul și cum testezi o componentă cu testerul inclus.

Framework: flow
Product: Flow (flow@11.1)
Language: ro
Content-SHA256: cc7c264298aadba235ab664f088cb939f85a689fb61e909e1d30f4f234b15649
Snapshot: c0700e321579725c5cf4f5ace1ad7d2866d1b4f93c24a63c0b41b6b7998e976c
Sources: 
Review: not-recorded

[`totaljs/flowstreamcomponents`](https://github.com/totaljs/flowstreamcomponents) conține componentele open source pe care le oferă editorul Flow. În revizia documentată aici (`e34d283`) are **146 de componente** în `components/`, 32 mai vechi păstrate în `archived/`, generatorul catalogului (`db.js`), catalogul însuși (`db.json`) și un tester.

## Ce acoperă catalogul

Componentele sunt organizate în grupuri. Câteva dintre cele mai mari:

| Grup | Componente (exemple) |
|---|---|
| Common (40) | `delay`, `print`, `counter`, `switch`, `merge`, `code`, `request`, `throttle`, `transform`, `macro`, `modify`, `stringoperations` |
| Total.js (17) | `taction`, `troute`, `tschema`, `tcors`, `tresponse`, `tauthtoken`, `twebsocketroute`, `tuploadedfiles`, `tsql`, `querybuilderpg` |
| Total.js API Services (13) | `tapiocrapi`, `tapigeoipapi`, `tapiweatherapi`, `tapismsapi`, `tapichatgptapi`, `tapiinvoiceparserapi`, `tapicheckvatapi`, `tapiprintapi` |
| Databases (8) | `postgresql`, `mysql`, `sqlite3`, `mongodb-query`, `mongodb-insert`, `influxdb`, `nosql`, `localstorage` |
| Triggers (7) | `timer`, `trigger`, `crontab`, `minutely`, `notify` |
| Files (6) | `filewriter`, `filewatcher`, `fileswatcher`, `fsrename`, `fstouch`, `fsunlink` |
| Flow, FlowStream, Stats, Checks, Security... | `debug`, `flowstats`, `input`, `output`, `publish`, `subscribe`, `stopwatch`, `checkurl`, `checklog`, `checkfreespace`, `totp`, `iplimiter` |
| MQTT, AI, Ollama | `mqtt-broker`, `mqtt-publish`, `mqtt-subscribe`, `aiagent`, `aitool`, `aicontext`, `chatgpt`, `ollamaprompt`, `ollamals`, `ollamawebsearch` |

În plus, există componente pentru analiză (`xmlparser`, `dataparser`, `csvdataset`, `cheerio`), date și fusuri orare (`date`, `timezone`, `duration`), text și șabloane (`tangular`, `qrcode`), OAuth2 (`oauth2`), descărcări (`downloader`, `urldownload`), notificări (`sms`, `rssreader`, `openweather`, `googlesearch`) și hardware-ul Linux (`nvidiasmi`). Folderul `archived/` păstrează pentru referință generația mai veche a familiei (GPIO și I2C de Raspberry Pi, RabbitMQ, metrici de sistem).

## Cum le găsește Flow: `db.json`

Flow nu descarcă HTML-ul fiecărei componente. Descarcă **un catalog**, un fișier JSON (implicit `https://cdn.totaljs.com/flowstream/webcomponents/db.json`, setat în [setări](/en/flow/settings-and-files/)) cu câte o intrare pe componentă:

```json
{
  "id": "taction",
  "group": "Total.js",
  "name": "Action",
  "url": "https://cdn.totaljs.com/flowstream/webcomponents/taction.html",
  "author": "Peter Širka | Total.js",
  "icon": "ti ti-totaljs",
  "color": "",
  "version": "2",
  "kind": "",
  "readme": "This component creates similar functionality as Total.js Actions. ..."
}
```

Editorul afișează lista cu `readme` și descarcă `url` al componentei când o adaugi. Ca să oferi propriile componente alături de cele oficiale, publică fișierele tale HTML și un `db.json` propriu și scrie adresa lui în setarea `components2`.

`db.js` generează catalogul: citește fiecare fișier din `components/`, ia `group`, `name`, `author`, `icon`, `color`, `version` și `kind` din `exports`, ia textul din `<readme>`, construiește `url` pe CDN și scrie `db.json` sortat după nume. Rulează-l cu Node.js după ce adaugi sau schimbi o componentă.

## Testerul

`tester.js` rulează o componentă fără editor, iar `tests/` conține exemple (`counter.js`, `example.js`, `example-multiple.js`, `influxdb.js`, `sqlite3.js`, `trigger.js`) și un `readme.md` cu toate opțiunile. Un test arată așa:

```js
require('../tester')(async function(describe, done) {

	await describe(function(test, next) {

		let messages = 0;
		let status = 0;

		test.status = function(data) {
			status = data;
		};

		test.input('Hello World!');
		messages++;

		setTimeout(function() {
			test.ok(status === messages, 'Counting');
			next();
		}, 2000);

	});

	done();
});
```

`describe` încarcă componenta, `test.input(data)` îi trimite un mesaj, `test.output` și `test.message` primesc ce trimite, `test.configure({...})` îi schimbă configurația, `test.trigger()` îi apelează trigger-ul, iar `test.ok()` și `test.fail()` marchează rezultatul. Pentru a rula toate testele: `cd flowstreamcomponents`, o dată `npm install total4` și `node tester.js`. Testerul acestei revizii este scris pentru Total.js 4 (`require('total4')`), după cum spune readme-ul lui.

## Contribuie

Depozitul cere respectarea standardelor și ghidurilor de cod Total.js, iar readme-ul lui le leagă; contactul este `info@totaljs.com`. Pentru a scrie o componentă, vezi [scrie o componentă](/en/flow/write-a-component/).
