# Το αποθετήριο συνιστωσών του Flow: 146 συνιστώσες, ο κατάλογος και ο ελεγκτής

> Μια ξενάγηση στο totaljs/flowstreamcomponents, τις συνιστώσες ανοιχτού κώδικα του Flow: ποιες ομάδες καλύπτει, πώς δημιουργείται το db.json, πώς φορτώνει το Flow τον κατάλογο και πώς δοκιμάζετε μια συνιστώσα με τον ενσωματωμένο ελεγκτή.

Framework: flow
Product: Flow (flow@11.1)
Language: el
Content-SHA256: 22fe2b8b1a56456e55a6f375d2711fa8ebd9d45cce2a0d513c960e1689f2bf4a
Snapshot: c0700e321579725c5cf4f5ace1ad7d2866d1b4f93c24a63c0b41b6b7998e976c
Sources: 
Review: not-recorded

Το [`totaljs/flowstreamcomponents`](https://github.com/totaljs/flowstreamcomponents) περιέχει τις συνιστώσες ανοιχτού κώδικα που προσφέρει ο επεξεργαστής του Flow. Στην αναθεώρηση που τεκμηριώνεται εδώ (`e34d283`) έχει **146 συνιστώσες** στο `components/`, 32 παλαιότερες στο `archived/`, τη γεννήτρια του καταλόγου (`db.js`), τον ίδιο τον κατάλογο (`db.json`) και έναν ελεγκτή.

## Τι καλύπτει ο κατάλογος

Οι συνιστώσες είναι οργανωμένες σε ομάδες. Μερικές από τις μεγαλύτερες:

| Ομάδα | Συνιστώσες (παραδείγματα) |
|---|---|
| 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` |

Επιπλέον, υπάρχουν συνιστώσες για ανάλυση (`xmlparser`, `dataparser`, `csvdataset`, `cheerio`), ημερομηνίες και ζώνες ώρας (`date`, `timezone`, `duration`), κείμενο και πρότυπα (`tangular`, `qrcode`), OAuth2 (`oauth2`), λήψεις (`downloader`, `urldownload`), ειδοποιήσεις (`sms`, `rssreader`, `openweather`, `googlesearch`) και το υλικό του Linux (`nvidiasmi`). Ο φάκελος `archived/` κρατά για αναφορά την παλαιότερη γενιά της οικογένειας (GPIO και I2C του Raspberry Pi, RabbitMQ, μετρικές συστήματος).

## Πώς τις βρίσκει το Flow: `db.json`

Το Flow δεν κατεβάζει το HTML κάθε συνιστώσας. Κατεβάζει **έναν κατάλογο**, ένα αρχείο JSON (από προεπιλογή `https://cdn.totaljs.com/flowstream/webcomponents/db.json`, που ορίζεται στις [ρυθμίσεις](/en/flow/settings-and-files/)) με μία εγγραφή ανά συνιστώσα:

```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. ..."
}
```

Ο επεξεργαστής εμφανίζει τη λίστα με το `readme` και κατεβάζει το `url` της συνιστώσας όταν την προσθέτετε. Για να προσφέρετε δικές σας συνιστώσες δίπλα στις επίσημες, δημοσιεύστε τα αρχεία HTML σας και ένα δικό σας `db.json` και γράψτε τη διεύθυνσή του στη ρύθμιση `components2`.

Το `db.js` δημιουργεί τον κατάλογο: διαβάζει κάθε αρχείο του `components/`, παίρνει τα `group`, `name`, `author`, `icon`, `color`, `version` και `kind` από τα `exports` του, παίρνει το κείμενο του `<readme>`, φτιάχνει το `url` στο CDN και γράφει το `db.json` ταξινομημένο κατά όνομα. Εκτελέστε το με Node.js αφού προσθέσετε ή αλλάξετε μια συνιστώσα.

## Ο ελεγκτής

Το `tester.js` εκτελεί μια συνιστώσα χωρίς τον επεξεργαστή και το `tests/` έχει παραδείγματα (`counter.js`, `example.js`, `example-multiple.js`, `influxdb.js`, `sqlite3.js`, `trigger.js`) και ένα `readme.md` με όλες τις επιλογές. Ένα τεστ μοιάζει έτσι:

```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` φορτώνει τη συνιστώσα, το `test.input(data)` της στέλνει ένα μήνυμα, τα `test.output` και `test.message` λαμβάνουν ό,τι στέλνει, το `test.configure({...})` αλλάζει τη διαμόρφωσή της, το `test.trigger()` καλεί το trigger της και τα `test.ok()` και `test.fail()` σημειώνουν το αποτέλεσμα. Για να εκτελέσετε όλα τα τεστ: `cd flowstreamcomponents`, μία φορά `npm install total4` και `node tester.js`. Ο ελεγκτής αυτής της αναθεώρησης είναι γραμμένος για Total.js 4 (`require('total4')`), όπως λέει το readme του.

## Συνεισφορά

Το αποθετήριο ζητά να ακολουθείτε τα πρότυπα και τις οδηγίες κώδικα του Total.js και το readme του τα συνδέει· η επαφή είναι `info@totaljs.com`. Για να γράψετε μια συνιστώσα, δείτε [γράψτε μια συνιστώσα](/en/flow/write-a-component/).
