resolve-local-event-broker
Version:
The reSolve framework's event broker for applications on a local machine.
61 lines (51 loc) • 1.27 kB
JavaScript
import { createServer } from 'resolve-local-rpc';
const getProvider = (host, key) => {
switch (key) {
case 'BeginXATransaction':
case 'CommitXATransaction':
case 'RollbackXATransaction':
case 'Drop':
case 'SendEvents':
return host.eventListener;
case 'LoadEvents':
case 'SaveEvent':
return host.eventStore;
default:
{
throw new Error(`Invalid key ${key}`);
}
}
};
const createAndInitConsumer = async config => {
const {
baseResolve,
initResolve,
disposeResolve,
address
} = config;
const consumerMethod = async (key, ...args) => {
const currentResolve = Object.create(baseResolve);
try {
await initResolve(currentResolve);
const provider = getProvider(currentResolve, key);
const result = await provider[key](...args);
return result;
} finally {
await disposeResolve(currentResolve);
}
};
const consumer = new Proxy({}, {
get(_, key) {
return consumerMethod.bind(null, key);
},
set() {
throw new Error(`Consumer API is immutable`);
}
});
return await createServer({
hostObject: consumer,
address
});
};
export default createAndInitConsumer;
//# sourceMappingURL=index.js.map