ForgeTotal.js 5
sk

Total.js 5

Malí globálni pomocníci: MAIN, REPO, FUNC, NOW, CLONE, COPY, QUERIFY a PROMISIFY

Total.js 5 · total5@0.0.19 globalsutilitieshelpers Spustené s Total.js 5

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, REPO a FUNC sú prázdne objekty, ktoré framework vytvorí raz: dáta aplikácie držte v MAIN, iné dáta v REPO a vlastné funkcie vo FUNC. TEMP je 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.
  • NOW je aktuálny dátum ako Date. Obnovuje sa približne raz za minútu (a niektorými volaniami), takže keď potrebujete presný čas, použite new Date().
  • EMPTYARRAY a EMPTYOBJECT sú zmrazené prázdne hodnoty, ktoré môžete vrátiť namiesto vytvárania nových: nedajú sa zmeniť.
  • MODS a PLUGINS sú objekty s načítanými modulmi a pluginmi podľa id. F a Total sú ten istý objekt, framework, a print je console.log. NOOP je funkcia, ktorá nerobí nič.
  • REQUIRE(name) je require, ktorý navyše rozlišuje balíky z node_modules aplikácie a akceptuje názvy ako node: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 a null sa preskočia a pole sa stane hodnotou oddelenou čiarkami. S url vráti url?..., 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.
controllers/helpers.js
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 });
}