UNPKG

convex

Version:

Client for the Convex Cloud

85 lines (84 loc) 2.61 kB
"use strict"; import { convexToJson, jsonToConvex } from "../../values/index.js"; import { createError, logToConsole } from "../logging.js"; export class MutationManager { constructor() { this.inflightMutations = /* @__PURE__ */ new Map(); } request(udfPath, args, mutationId) { const message = { type: "Mutation", mutationId, udfPath, args: convexToJson(args) }; const result = new Promise((resolve, reject) => { this.inflightMutations.set(mutationId, { message, status: { status: "Requested", onResult: resolve, onFailure: reject } }); }); return { message, result }; } onResponse(response) { const mutationInfo = this.inflightMutations.get(response.mutationId); if (mutationInfo === void 0) { return null; } if (mutationInfo.status.status === "Requested") { const udfPath = mutationInfo.message.udfPath; for (const line of response.logLines) { logToConsole("info", "mutation", udfPath, line); } if (response.success) { const status = mutationInfo.status; const onResult = () => status.onResult(jsonToConvex(response.result)); mutationInfo.status = { status: "Committed", ts: response.ts, onResult }; return null; } else { this.inflightMutations.delete(response.mutationId); logToConsole("error", "mutation", udfPath, response.result); mutationInfo.status.onFailure( createError("mutation", udfPath, response.result) ); return response.mutationId; } } return null; } removeCompletedMutations(ts) { const completeMutations = /* @__PURE__ */ new Set(); for (const [mutationId, mutationInfo] of this.inflightMutations.entries()) { const status = mutationInfo.status; if (status.status == "Committed" && status.ts.lessThanOrEqual(ts)) { status.onResult(); completeMutations.add(mutationId); this.inflightMutations.delete(mutationId); } } return completeMutations; } hasUncommittedMutations() { for (const mutationInfo of this.inflightMutations.values()) { if (mutationInfo.status.status === "Requested") { return true; } } return false; } restart() { const allMessages = []; for (const value of this.inflightMutations.values()) { allMessages.push(value.message); } return allMessages; } hasInflightMutation() { return this.inflightMutations.size > 0; } } //# sourceMappingURL=mutation_manager.js.map