twing
Version:
First-class Twig engine for Node.js
67 lines (66 loc) • 2 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.iterateSynchronously = exports.iterate = void 0;
/**
* Executes the provided function once for each element of an iterable.
*
* @param {*} iterable An iterable
* @param {IterateCallback} callback Callback to execute for each element, taking a key and a value as arguments
*
* @return {void}
*/
const iterate = async (iterable, callback) => {
if (iterable.entries) {
for (const [key, value] of iterable.entries()) {
await callback(key, value);
}
}
else if (typeof iterable[Symbol.iterator] === 'function') {
let i = 0;
for (let value of iterable) {
await callback(i++, value);
}
}
else if (typeof iterable['next'] === 'function') {
let i = 0;
let next;
while ((next = await iterable.next()) && !next.done) {
await callback(i++, next.value);
}
}
else {
for (const key in iterable) {
await callback(key, iterable[key]);
}
}
};
exports.iterate = iterate;
const iterateSynchronously = (iterable, callback) => {
// todo: maybe useless when we pass records instead of TwingContext
if (iterable.entries) {
for (const [key, value] of iterable.entries()) {
callback(key, value);
}
}
else if (typeof iterable[Symbol.iterator] === 'function') {
let i = 0;
for (let value of iterable) {
callback(i++, value);
}
}
// todo: check why this is not covered anymore
// else if (typeof iterable['next'] === 'function') {
// let i: number = 0;
// let next: any;
//
// while ((next = iterable.next()) && !next.done) {
// callback(i++, next.value)
// }
// }
else {
for (const key in iterable) {
callback(key, iterable[key]);
}
}
};
exports.iterateSynchronously = iterateSynchronously;