Хранилището с компоненти на Flow: 146 компонента, каталогът и тестерът
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, задава се в настройките) с по един запис за компонент:
{
"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 с всички опции. Един тест изглежда така:
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. За да напишете компонент, вижте напишете компонент.