convex
Version:
Client for the Convex Cloud
257 lines (256 loc) • 10.5 kB
JavaScript
var __defProp = Object.defineProperty;
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
var __getOwnPropNames = Object.getOwnPropertyNames;
var __hasOwnProp = Object.prototype.hasOwnProperty;
var __export = (target, all) => {
for (var name in all)
__defProp(target, name, { get: all[name], enumerable: true });
};
var __copyProps = (to, from, except, desc) => {
if (from && typeof from === "object" || typeof from === "function") {
for (let key of __getOwnPropNames(from))
if (!__hasOwnProp.call(to, key) && key !== except)
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
}
return to;
};
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
var registration_impl_exports = {};
__export(registration_impl_exports, {
actionGeneric: () => actionGeneric,
httpActionGeneric: () => httpActionGeneric,
internalActionGeneric: () => internalActionGeneric,
internalMutationGeneric: () => internalMutationGeneric,
internalQueryGeneric: () => internalQueryGeneric,
invokeFunction: () => invokeFunction,
mutationGeneric: () => mutationGeneric,
queryGeneric: () => queryGeneric,
validateReturnValue: () => validateReturnValue
});
module.exports = __toCommonJS(registration_impl_exports);
var import_values = require("../../values/index.js");
var import_actions_impl = require("./actions_impl.js");
var import_vector_search_impl = require("./vector_search_impl.js");
var import_authentication_impl = require("./authentication_impl.js");
var import_database_impl = require("./database_impl.js");
var import_query_impl = require("./query_impl.js");
var import_scheduler_impl = require("./scheduler_impl.js");
var import_storage_impl = require("./storage_impl.js");
var import_common = require("../../common/index.js");
var import_syscall = require("./syscall.js");
var import_validator = require("../../values/validator.js");
async function invokeMutation(func, argsStr) {
const requestId = "";
const args = (0, import_values.jsonToConvex)(JSON.parse(argsStr));
const mutationCtx = {
db: (0, import_database_impl.setupWriter)(),
auth: (0, import_authentication_impl.setupAuth)(requestId),
storage: (0, import_storage_impl.setupStorageWriter)(requestId),
scheduler: (0, import_scheduler_impl.setupMutationScheduler)(),
runQuery: (reference, args2) => runUdf("query", reference, args2),
runMutation: (reference, args2) => runUdf("mutation", reference, args2)
};
const result = await invokeFunction(func, mutationCtx, args);
validateReturnValue(result);
return JSON.stringify((0, import_values.convexToJson)(result === void 0 ? null : result));
}
function validateReturnValue(v2) {
if (v2 instanceof import_query_impl.QueryInitializerImpl || v2 instanceof import_query_impl.QueryImpl) {
throw new Error(
"Return value is a Query. Results must be retrieved with `.collect()`, `.take(n), `.unique()`, or `.first()`."
);
}
}
async function invokeFunction(func, ctx, args) {
let result;
try {
result = await Promise.resolve(func(ctx, ...args));
} catch (thrown) {
throw serializeConvexErrorData(thrown);
}
return result;
}
function serializeConvexErrorData(thrown) {
if (typeof thrown === "object" && thrown !== null && Symbol.for("ConvexError") in thrown) {
const error = thrown;
error.data = JSON.stringify(
(0, import_values.convexToJson)(error.data === void 0 ? null : error.data)
);
error.ConvexErrorSymbol = Symbol.for("ConvexError");
return error;
} else {
return thrown;
}
}
function assertNotBrowser() {
if (typeof window === "undefined" || !window.__convexAllowFunctionsInBrowser) {
return;
}
const isRealBrowser = Object.getOwnPropertyDescriptor(globalThis, "window")?.get?.toString().includes("[native code]") ?? false;
if (isRealBrowser) {
throw new Error("Convex functions should not be imported in the browser.");
}
}
function exportArgs(functionDefinition) {
return () => {
let args = import_values.v.any();
if (typeof functionDefinition === "object" && functionDefinition.args !== void 0) {
args = (0, import_validator.asObjectValidator)(functionDefinition.args);
}
return JSON.stringify(args.json);
};
}
function exportReturns(functionDefinition) {
return () => {
let returns;
if (typeof functionDefinition === "object" && functionDefinition.returns !== void 0) {
returns = (0, import_validator.asObjectValidator)(functionDefinition.returns);
}
return JSON.stringify(returns ? returns.json : null);
};
}
const mutationGeneric = (functionDefinition) => {
const func = typeof functionDefinition === "function" ? functionDefinition : functionDefinition.handler;
if (func.isRegistered) {
throw new Error("Function registered twice " + func);
}
assertNotBrowser();
func.isRegistered = true;
func.isMutation = true;
func.isPublic = true;
func.invokeMutation = (argsStr) => invokeMutation(func, argsStr);
func.exportArgs = exportArgs(functionDefinition);
func.exportReturns = exportReturns(functionDefinition);
return func;
};
const internalMutationGeneric = (functionDefinition) => {
const func = typeof functionDefinition === "function" ? functionDefinition : functionDefinition.handler;
if (func.isRegistered) {
throw new Error("Function registered twice " + func);
}
assertNotBrowser();
func.isRegistered = true;
func.isMutation = true;
func.isInternal = true;
func.invokeMutation = (argsStr) => invokeMutation(func, argsStr);
func.exportArgs = exportArgs(functionDefinition);
func.exportReturns = exportReturns(functionDefinition);
return func;
};
async function invokeQuery(func, argsStr) {
const requestId = "";
const args = (0, import_values.jsonToConvex)(JSON.parse(argsStr));
const queryCtx = {
db: (0, import_database_impl.setupReader)(),
auth: (0, import_authentication_impl.setupAuth)(requestId),
storage: (0, import_storage_impl.setupStorageReader)(requestId),
runQuery: (reference, args2) => runUdf("query", reference, args2)
};
const result = await invokeFunction(func, queryCtx, args);
validateReturnValue(result);
return JSON.stringify((0, import_values.convexToJson)(result === void 0 ? null : result));
}
const queryGeneric = (functionDefinition) => {
const func = typeof functionDefinition === "function" ? functionDefinition : functionDefinition.handler;
if (func.isRegistered) {
throw new Error("Function registered twice " + func);
}
assertNotBrowser();
func.isRegistered = true;
func.isQuery = true;
func.isPublic = true;
func.invokeQuery = (argsStr) => invokeQuery(func, argsStr);
func.exportArgs = exportArgs(functionDefinition);
func.exportReturns = exportReturns(functionDefinition);
return func;
};
const internalQueryGeneric = (functionDefinition) => {
const func = typeof functionDefinition === "function" ? functionDefinition : functionDefinition.handler;
if (func.isRegistered) {
throw new Error("Function registered twice " + func);
}
assertNotBrowser();
func.isRegistered = true;
func.isQuery = true;
func.isInternal = true;
func.invokeQuery = (argsStr) => invokeQuery(func, argsStr);
func.exportArgs = exportArgs(functionDefinition);
func.exportReturns = exportReturns(functionDefinition);
return func;
};
async function invokeAction(func, requestId, argsStr) {
const args = (0, import_values.jsonToConvex)(JSON.parse(argsStr));
const calls = (0, import_actions_impl.setupActionCalls)(requestId);
const ctx = {
...calls,
auth: (0, import_authentication_impl.setupAuth)(requestId),
scheduler: (0, import_scheduler_impl.setupActionScheduler)(requestId),
storage: (0, import_storage_impl.setupStorageActionWriter)(requestId),
vectorSearch: (0, import_vector_search_impl.setupActionVectorSearch)(requestId)
};
const result = await invokeFunction(func, ctx, args);
return JSON.stringify((0, import_values.convexToJson)(result === void 0 ? null : result));
}
const actionGeneric = (functionDefinition) => {
const func = typeof functionDefinition === "function" ? functionDefinition : functionDefinition.handler;
if (func.isRegistered) {
throw new Error("Function registered twice " + func);
}
assertNotBrowser();
func.isRegistered = true;
func.isAction = true;
func.isPublic = true;
func.invokeAction = (requestId, argsStr) => invokeAction(func, requestId, argsStr);
func.exportArgs = exportArgs(functionDefinition);
func.exportReturns = exportReturns(functionDefinition);
return func;
};
const internalActionGeneric = (functionDefinition) => {
const func = typeof functionDefinition === "function" ? functionDefinition : functionDefinition.handler;
if (func.isRegistered) {
throw new Error("Function registered twice " + func);
}
assertNotBrowser();
func.isRegistered = true;
func.isAction = true;
func.isInternal = true;
func.invokeAction = (requestId, argsStr) => invokeAction(func, requestId, argsStr);
func.exportArgs = exportArgs(functionDefinition);
func.exportReturns = exportReturns(functionDefinition);
return func;
};
async function invokeHttpAction(func, request) {
const requestId = "";
const calls = (0, import_actions_impl.setupActionCalls)(requestId);
const ctx = {
...calls,
auth: (0, import_authentication_impl.setupAuth)(requestId),
storage: (0, import_storage_impl.setupStorageActionWriter)(requestId),
scheduler: (0, import_scheduler_impl.setupActionScheduler)(requestId),
vectorSearch: (0, import_vector_search_impl.setupActionVectorSearch)(requestId)
};
return await invokeFunction(func, ctx, [request]);
}
const httpActionGeneric = (func) => {
const q = func;
if (q.isRegistered) {
throw new Error("Function registered twice " + func);
}
assertNotBrowser();
q.isRegistered = true;
q.isHttp = true;
q.invokeHttpAction = (request) => invokeHttpAction(func, request);
return q;
};
async function runUdf(udfType, f, args) {
const queryArgs = (0, import_common.parseArgs)(args);
const syscallArgs = {
udfType,
args: (0, import_values.convexToJson)(queryArgs),
...(0, import_actions_impl.getFunctionAddress)(f)
};
const result = await (0, import_syscall.performAsyncSyscall)("1.0/runUdf", syscallArgs);
return (0, import_values.jsonToConvex)(result);
}
//# sourceMappingURL=registration_impl.js.map
;