function mapGradually2(iterable, mapper, batch = defaultBatch) {
const length = iterable.length;
const progress = DOM.element(
"progress",
length ? { max: length } : undefined
);
const label = DOM.element("label");
const text1 = DOM.text("0");
const text2 = DOM.text("/" + (iterable.length ?? "?"));
label.appendChild(progress);
label.appendChild(text1);
label.appendChild(text2);
const view = { value: label, done: false };
const output = [];
const doneResult = { value: output, done: true };
let i = 0;
const it = iterable[Symbol.iterator]();
const ourIt = {
next: start,
return: () => ((ourIt.next = finished), it.return?.() ?? doneResult)
};
return ourIt;
function start() {
ourIt.next = process;
return view;
}
function process() {
let value, done;
while ((({ value, done } = it.next()), !done)) {
output.push(mapper ? mapper(value) : value);
if (++i % batch === 0) {
if (length) progress.value = i;
text1.data = i;
return view;
}
}
text1.data = i;
text2.data = "/" + i;
progress.value = i;
progress.max = i;
label.value = output;
ourIt.next = finished;
return view;
}
function finished() {
return doneResult;
}
}