UNPKG

convex

Version:

Client for the Convex Cloud

84 lines (83 loc) 2.52 kB
"use strict"; import { jsonToConvex } from "../../values/index.js"; import { createError, logToConsole } from "../logging.js"; export class RequestManager { constructor() { this.inflightRequests = /* @__PURE__ */ new Map(); } request(message) { const result = new Promise((resolve, reject) => { this.inflightRequests.set(message.requestId, { message, status: { status: "Requested", onResult: resolve, onFailure: reject } }); }); return result; } onResponse(response) { const requestInfo = this.inflightRequests.get(response.requestId); if (requestInfo === void 0) { return null; } if (requestInfo.status.status !== "Requested") { return null; } const udfType = "mutation"; const udfPath = requestInfo.message.udfPath; for (const line of response.logLines) { logToConsole("info", udfType, udfPath, line); } const status = requestInfo.status; let onResolve; if (response.success) { onResolve = () => status.onResult(jsonToConvex(response.result)); } else { logToConsole("error", udfType, udfPath, response.result); onResolve = () => status.onFailure(createError(udfType, udfPath, response.result)); } if (!response.success) { onResolve(); this.inflightRequests.delete(response.requestId); return response.requestId; } requestInfo.status = { status: "Completed", ts: response.ts, onResolve }; return null; } removeCompleted(ts) { const completeMutations = /* @__PURE__ */ new Set(); for (const [requestId, requestInfo] of this.inflightRequests.entries()) { const status = requestInfo.status; if (status.status === "Completed" && status.ts.lessThanOrEqual(ts)) { status.onResolve(); if (requestInfo.message.type === "Mutation") { completeMutations.add(requestId); } this.inflightRequests.delete(requestId); } } return completeMutations; } restart() { const allMessages = []; for (const value of this.inflightRequests.values()) { allMessages.push(value.message); } return allMessages; } hasIncompleteRequests() { for (const requestInfo of this.inflightRequests.values()) { if (requestInfo.status.status === "Requested") { return true; } } return false; } hasInflightRequests() { return this.inflightRequests.size > 0; } } //# sourceMappingURL=request_manager.js.map