@snap/camera-kit
Version:
Camera Kit Web
44 lines • 1.51 kB
JavaScript
import { __awaiter } from "tslib";
export const createMappingHandler = (map, pageVisibility, maxMapConcurrency = Number.POSITIVE_INFINITY) => {
const buffer = [];
let mapConcurrency = 0;
const processRequest = (request) => __awaiter(void 0, void 0, void 0, function* () {
try {
mapConcurrency++;
const mapped = request.map();
if (mapped instanceof Promise)
request.next(yield mapped);
else if (mapped)
request.next(mapped);
}
catch (error) {
request.reject(error);
}
finally {
mapConcurrency--;
}
while (buffer.length > 0 && mapConcurrency < maxMapConcurrency) {
processRequest(buffer.shift());
}
});
if (pageVisibility) {
pageVisibility.onPageHidden(() => {
while (buffer.length > 0)
processRequest(buffer.shift());
});
}
return (next) => (request, metadata) => {
return new Promise((resolve, reject) => {
const mappableRequest = {
map: () => map(request),
next: (mappedRequest) => next(mappedRequest, metadata).then(resolve).catch(reject),
reject,
};
if (mapConcurrency < maxMapConcurrency)
processRequest(mappableRequest);
else
buffer.push(mappableRequest);
});
};
};
//# sourceMappingURL=mappingHandler.js.map