convex
Version:
Client for the Convex Cloud
101 lines (100 loc) • 3.33 kB
JavaScript
;
import { convexToJson, jsonToConvex } from "../../values/index.js";
import { setupActionDatabaseClient } from "./actions_impl.js";
import { setupActionAuth, setupAuth } from "./authentication_impl.js";
import { setupReader, setupWriter } from "./database_impl.js";
import { setupHttpCalls } from "./http_impl.js";
import {
setupActionScheduler,
setupMutationScheduler
} from "./scheduler_impl.js";
import { setupStorageReader, setupStorageWriter } from "./storage_impl.js";
import { performJsSyscall } from "./syscall.js";
async function invokeMutation(func, argsStr) {
const args = jsonToConvex(JSON.parse(argsStr));
const mutationCtx = {
db: setupWriter(),
auth: setupAuth(),
storage: setupStorageWriter(),
scheduler: setupMutationScheduler()
};
const result = await Promise.resolve(func(mutationCtx, ...args));
return JSON.stringify(convexToJson(result === void 0 ? null : result));
}
export const mutationGeneric = (func) => {
const m = func;
if (m.isRegistered) {
throw new Error("Function registered twice " + func);
}
m.isRegistered = true;
m.isMutation = true;
m.invokeMutation = (argsStr) => invokeMutation(func, argsStr);
return m;
};
async function invokeQuery(func, argsStr) {
const args = jsonToConvex(JSON.parse(argsStr));
const queryCtx = {
db: setupReader(),
auth: setupAuth(),
storage: setupStorageReader()
};
const result = await Promise.resolve(func(queryCtx, ...args));
return JSON.stringify(convexToJson(result === void 0 ? null : result));
}
export const queryGeneric = (func) => {
const q = func;
if (q.isRegistered) {
throw new Error("Function registered twice " + func);
}
q.isRegistered = true;
q.isQuery = true;
q.invokeQuery = (argsStr) => invokeQuery(func, argsStr);
return q;
};
async function invokeAction(func, requestId, argsStr) {
const args = jsonToConvex(JSON.parse(argsStr));
const databaseClient = setupActionDatabaseClient(requestId);
const ctx = {
runQuery: databaseClient.runQuery,
runMutation: databaseClient.runMutation,
auth: setupActionAuth(requestId),
scheduler: setupActionScheduler(requestId)
};
const result = await Promise.resolve(func(ctx, ...args));
return JSON.stringify(convexToJson(result === void 0 ? null : result));
}
export const actionGeneric = (func) => {
const q = func;
if (q.isRegistered) {
throw new Error("Function registered twice " + func);
}
q.isRegistered = true;
q.isAction = true;
q.invokeAction = (requestId, argsStr) => invokeAction(func, requestId, argsStr);
return q;
};
async function invokeHttpEndpoint(func, argsStr) {
const calls = setupHttpCalls();
const ctx = {
...calls,
auth: setupAuth()
};
const request = performJsSyscall("requestFromConvexJson", {
convexJson: JSON.parse(argsStr)
});
const response = await Promise.resolve(func(ctx, request));
return JSON.stringify(
performJsSyscall("convexJsonFromResponse", { response })
);
}
export const httpEndpointGeneric = (func) => {
const q = func;
if (q.isRegistered) {
throw new Error("Function registered twice " + func);
}
q.isRegistered = true;
q.isHttp = true;
q.invokeHttpEndpoint = (argsStr) => invokeHttpEndpoint(func, argsStr);
return q;
};
//# sourceMappingURL=registration_impl.js.map