import { Component } from "https://esm.sh/preact@10.17.1";
export function isMobile() {
return /iPhone|iPad|iPod|Android/i.test(navigator.userAgent);
}
export function setState
(component: Component
, state: Partial): Promise {
return new Promise((resolve) => {
component.setState(state, () => {
resolve();
});
});
}
export function* map(iter: Iterable, mapper: (item: X) => Y) {
for (const item of iter) {
yield mapper(item);
}
}
export function* filter(iter: Iterable, filterer: (item: X) => boolean) {
for (const item of iter) {
if (filterer(item)) {
yield item;
}
}
}
// f should not resolve, if it does resolve, it should only throw an error
export async function forever(f: Promise) {
const r = await f;
if (r == undefined) {
throw new Error(`${f} should not resolve`);
}
throw r;
}