convex
Version:
Client for the Convex Cloud
70 lines (69 loc) • 2.1 kB
JavaScript
;
import { convexToJson } from "../../values/index.js";
import { version } from "../../index.js";
import { performAsyncSyscall } from "./syscall.js";
export function setupMutationScheduler() {
return {
runAfter: async (delayMs, name, ...args) => {
const syscallArgs = runAfterSyscallArgs(delayMs, name, args);
return await performAsyncSyscall("schedule", syscallArgs);
},
runAt: async (ms_since_epoch_or_date, name, ...args) => {
const syscallArgs = runAtSyscallArgs(ms_since_epoch_or_date, name, args);
return await performAsyncSyscall("schedule", syscallArgs);
}
};
}
export function setupActionScheduler(requestId) {
return {
runAfter: async (delayMs, name, ...args) => {
const syscallArgs = {
requestId,
...runAfterSyscallArgs(delayMs, name, args)
};
return await performAsyncSyscall("actions/schedule", syscallArgs);
},
runAt: async (ms_since_epoch_or_date, name, ...args) => {
const syscallArgs = {
requestId,
...runAtSyscallArgs(ms_since_epoch_or_date, name, args)
};
return await performAsyncSyscall("actions/schedule", syscallArgs);
}
};
}
function runAfterSyscallArgs(delayMs, name, args) {
if (typeof delayMs !== "number") {
throw new Error("`delayMs` must be a number");
}
if (!isFinite(delayMs)) {
throw new Error("`delayMs` must be a finite number");
}
if (delayMs < 0) {
throw new Error("`delayMs` must be non-negative");
}
const ts = (Date.now() + delayMs) / 1e3;
return {
name,
ts,
args: convexToJson(args),
version
};
}
function runAtSyscallArgs(ms_since_epoch_or_date, name, args) {
let ts;
if (ms_since_epoch_or_date instanceof Date) {
ts = ms_since_epoch_or_date.valueOf() / 1e3;
} else if (typeof ms_since_epoch_or_date === "number") {
ts = ms_since_epoch_or_date / 1e3;
} else {
throw new Error("The invoke time must a Date or a timestamp");
}
return {
name,
ts,
args: convexToJson(args),
version
};
}
//# sourceMappingURL=scheduler_impl.js.map