@magnetarjs/core
Version:
Magnetar core library.
53 lines (52 loc) • 2.44 kB
JavaScript
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),
});
}