export function setUpCloudFunctionFactory(factoryConfig: { createCloudFunctionCaller: CreateCloudFunctionCaller; }) { return { cloudFunction(functionConfig: { path: string }) { return { implement(compute: T): CloudFunctionFor { const cloudFunctionCaller = factoryConfig.createCloudFunctionCaller(functionConfig); return cloudFunctionCaller; }, }; }, }; } export type CreateCloudFunctionCaller = < T extends AnyFunction, >(functionConfig: { path: string; }) => CloudFunctionFor; export type CloudFunctionFor = ( ...args: Parameters ) => Promise | Error>; export type AnyFunction = (...args: any[]) => any;