Play the given AsyncIterable, and then play back that AsyncIterable in reverse
function doppler(it) {
    return __asyncGenerator(this, arguments, function* doppler_1() {
        var e_27, _a;
        const buffer = [];
        try {
            for (var it_7 = __asyncValues(it), it_7_1; it_7_1 = yield __await(it_7.next()), !it_7_1.done;) {
                const item = it_7_1.value;
                buffer.push(item);
                yield yield __await(item);
            }
        }
        catch (e_27_1) { e_27 = { error: e_27_1 }; }
        finally {
            try {
                if (it_7_1 && !it_7_1.done && (_a = it_7.return)) yield __await(_a.call(it_7));
            }
            finally { if (e_27) throw e_27.error; }
        }
        buffer.reverse();
        yield __await(yield* __asyncDelegator(__asyncValues(buffer)));
    });
}