import { setUpCloudFunctionFactory } from "./CloudFunction"; import { createReactiveUtilities, ReactivityConfig, createStorageUtils, StorageConfig, CloudConfig, createCloudUtils, } from "./Persisters"; import { Json } from "./Primitives"; import { setUpTableFactory } from "./Table"; export * from "./Primitives"; // export { IS_JUST_IN_MEMORY_TABLE } from "./Table"; export function initializeMufasa< TStorageConfig extends StorageConfig | undefined, CloudCheckpoint extends Json, >(params: { cloud: CloudConfig; storage?: TStorageConfig; reactivity: ReactivityConfig; }) { type CanCacheOffline = undefined extends TStorageConfig ? false : true; const { savedJson } = createStorageUtils(params); const reactiveUtils = createReactiveUtilities(params.reactivity); const { startCloudSynchronizer, createCloudFunctionCaller } = createCloudUtils(params.cloud); const { table } = setUpTableFactory({ startCloudSynchronizer, reactiveUtils, savedJson, }); const { cloudFunction } = setUpCloudFunctionFactory({ createCloudFunctionCaller, }); return { table, cloudFunction, }; }