O repositório de componentes do Flow: 146 componentes, o catálogo e o tester
totaljs/flowstreamcomponents contém os componentes de código aberto que o editor do Flow oferece. Na revisão documentada aqui (e34d283) tem 146 componentes em components/, 32 mais antigos guardados em archived/, o gerador do catálogo (db.js), o próprio catálogo (db.json) e um tester.
O que o catálogo cobre
Os componentes estão organizados em grupos. Alguns dos maiores:
| Grupo | Componentes (exemplos) |
|---|---|
| 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 |
Além disso, há componentes para análise (xmlparser, dataparser, csvdataset, cheerio), datas e fusos horários (date, timezone, duration), texto e modelos (tangular, qrcode), OAuth2 (oauth2), transferências (downloader, urldownload), notificações (sms, rssreader, openweather, googlesearch) e o hardware do Linux (nvidiasmi). A pasta archived/ guarda, para referência, a geração anterior da família (GPIO e I2C do Raspberry Pi, RabbitMQ, métricas do sistema).
Como o Flow os encontra: db.json
O Flow não descarrega o HTML de cada componente. Descarrega um catálogo, um ficheiro JSON (por predefinição https://cdn.totaljs.com/flowstream/webcomponents/db.json, definido em as definições) com uma entrada por componente:
{
"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. ..."
}O editor mostra a lista com o readme e descarrega o url do componente quando o acrescenta. Para oferecer os seus próprios componentes junto dos oficiais, publique os seus ficheiros HTML e um db.json seu e escreva o endereço dele na definição components2.
O db.js gera o catálogo: lê cada ficheiro de components/, tira group, name, author, icon, color, version e kind dos seus exports, tira o texto de <readme>, constrói o url na CDN e escreve db.json ordenado por nome. Execute-o com Node.js depois de acrescentar ou alterar um componente.
O tester
tester.js executa um componente sem o editor e tests/ tem exemplos (counter.js, example.js, example-multiple.js, influxdb.js, sqlite3.js, trigger.js) e um readme.md com todas as opções. Um teste tem este aspeto:
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 carrega o componente, test.input(data) envia-lhe uma mensagem, test.output e test.message recebem o que ele envia, test.configure({...}) altera a sua configuração, test.trigger() chama o seu trigger e test.ok() e test.fail() marcam o resultado. Para executar todos os testes: cd flowstreamcomponents, npm install total4 uma vez e node tester.js. O tester desta revisão está escrito para Total.js 4 (require('total4')), como diz o seu readme.
Contribuir
O repositório pede para seguir as normas e orientações de código do Total.js e o seu readme liga-as; o contacto é info@totaljs.com. Para escrever um componente, veja escrever um componente.