Depozitul de componente Flow: 146 de componente, catalogul și testerul
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) cu câte o intrare pe componentă:
{
"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:
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ă.