UNPKG

@magnetarjs/core

Version:
53 lines (52 loc) 2.44 kB
import { executeSetupModulePerStore, getDataFromDataStore, getExistsFromDataStore, proxify, } from './helpers/moduleHelpers.js'; import { handleFetchPerStore, } from './moduleActions/handleFetchPerStore.js'; import { handleStreamPerStore } from './moduleActions/handleStreamPerStore.js'; import { handleWritePerStore, } from './moduleActions/handleWritePerStore.js'; export function createDocWithContext([collectionPath, docId], moduleConfig, globalConfig, docFn, collectionFn, streamAndFetchPromises) { const { writeLockMap, fetchPromises, cacheStream, streaming, closeStream } = streamAndFetchPromises; // prettier-ignore const path = [collectionPath, docId].join('/'); const collection = (collectionId, _moduleConfig = {}) => { return collectionFn(`${path}/${collectionId}`, _moduleConfig); }; const writeParams = { collectionPath, _docId: docId, moduleConfig, globalConfig, writeLockMap, docFn, }; const fetchParams = { collectionPath, _docId: docId, moduleConfig, globalConfig, fetchPromises, writeLockMap, docFn, }; const actions = { insert: handleWritePerStore(writeParams, 'insert'), // prettier-ignore merge: handleWritePerStore(writeParams, 'merge'), // prettier-ignore assign: handleWritePerStore(writeParams, 'assign'), // prettier-ignore replace: handleWritePerStore(writeParams, 'replace'), // prettier-ignore deleteProp: handleWritePerStore(writeParams, 'deleteProp'), // prettier-ignore delete: handleWritePerStore(writeParams, 'delete'), // prettier-ignore fetch: handleFetchPerStore(fetchParams, 'fetch'), // prettier-ignore stream: handleStreamPerStore([collectionPath, docId], moduleConfig, globalConfig, 'write', streaming, cacheStream, writeLockMap), // prettier-ignore }; // Every store will have its 'setupModule' function executed executeSetupModulePerStore(globalConfig.stores, [collectionPath, docId], moduleConfig); const moduleInstance = { collection, id: docId, path, streaming, closeStream, ...actions, }; return proxify(moduleInstance, { data: () => getDataFromDataStore(moduleConfig, globalConfig, collectionPath, docId), exists: () => getExistsFromDataStore(globalConfig, collectionPath, docId), }); }