Malí globálni pomocníci: MAIN, REPO, FUNC, NOW, CLONE, COPY, QUERIFY a PROMISIFY
total5 vytvára niekoľko globálnych objektov na vaše použitie a niekoľko helperov, ktoré ušetria riadok kódu. Nič z toho nepotrebuje nastavenie.
MAIN,REPOaFUNCsú prázdne objekty, ktoré framework vytvorí raz: dáta aplikácie držte vMAIN, iné dáta vREPOa vlastné funkcie voFUNC.TEMPje objekt pre dočasné dáta, ktorý framework z času na čas vymení, takže v ňom nič nedržte, ak to budete potrebovať neskôr.NOWje aktuálny dátum akoDate. Obnovuje sa približne raz za minútu (a niektorými volaniami), takže keď potrebujete presný čas, použitenew Date().EMPTYARRAYaEMPTYOBJECTsú zmrazené prázdne hodnoty, ktoré môžete vrátiť namiesto vytvárania nových: nedajú sa zmeniť.MODSaPLUGINSsú objekty s načítanými modulmi a pluginmi podľa id.FaTotalsú ten istý objekt, framework, aprintjeconsole.log.NOOPje funkcia, ktorá nerobí nič.REQUIRE(name)jerequire, ktorý navyše rozlišuje balíky znode_modulesaplikácie a akceptuje názvy akonode:path.CLONE(value)vytvorí hlbokú kópiu: skopírujú sa vnorené objekty, polia a dátumy.COPY(from, to)skopíruje vlastnosti prvého objektu do druhého a vráti druhý.QUERIFY([url], object)zostaví query string z objektu: prázdne hodnoty anullsa preskočia a pole sa stane hodnotou oddelenou čiarkami. S url vrátiurl?..., bez nej vráti?....PROMISIFY(fn, a, b, c)zavoláfn(a, b, c, callback)a vráti promise, ktorý sa vyrieši odpoveďou callbacku alebo zamietne jeho chybou.
MAIN.started = 'yes';
REPO.counter = 1;
FUNC.double = n => n * 2;
exports.install = function() {
ROUTE('GET /helpers/', helpers);
ROUTE('GET /promisify/', promisify);
};
function helpers($) {
const source = { a: 1, nested: { b: [1, 2] }, date: new Date(2026, 0, 5) };
const cloned = CLONE(source);
const target = { x: 1 };
const returned = COPY({ y: 2 }, target);
$.json({
shared: [MAIN.started, REPO.counter, FUNC.double(4), typeof TEMP],
now: [NOW instanceof Date, Math.abs(Date.now() - NOW.getTime()) < 120000],
emptyarray: [EMPTYARRAY.length, Object.isFrozen(EMPTYARRAY)],
emptyobject: [Object.keys(EMPTYOBJECT).length, Object.isFrozen(EMPTYOBJECT)],
registries: [typeof MODS, typeof PLUGINS],
same: [F === Total, typeof print, NOOP() === undefined],
require: typeof REQUIRE('node:path').join,
clone: [cloned !== source, cloned.nested !== source.nested, cloned.nested.b !== source.nested.b, cloned.date instanceof Date, cloned.nested.b.join()],
copy: [returned === target, target.x, target.y],
querify: QUERIFY('/search/', { q: 'a b', page: 2, empty: '', nothing: null, list: [1, 2] }),
querify2: QUERIFY({ q: 'x' })
});
}
async function promisify($) {
const add = (a, b, callback) => setImmediate(callback, null, a + b);
const fail = (callback) => setImmediate(callback, 'It failed');
const sum = await PROMISIFY(add, 2, 3);
let error = null;
try {
await PROMISIFY(fail);
} catch (e) {
error = e.message || String(e);
}
$.json({ sum: sum, error: error });
}