import { renderMethodNotFoundError, renderMissingResponseError, renderUnexpectedResultError } from './error-renderers';
|
export const createMessageHandler = (receiver, workerImplementation) => {
|
return async ({ data: { id, method, params } }) => {
|
const messageHandler = workerImplementation[method];
|
try {
|
if (messageHandler === undefined) {
|
throw renderMethodNotFoundError(method);
|
}
|
const response = params === undefined
|
? messageHandler()
|
: messageHandler(params);
|
if (response === undefined) {
|
throw renderMissingResponseError(method);
|
}
|
const synchronousResponse = response instanceof Promise ? await response : response;
|
if (id === null) {
|
if (synchronousResponse.result !== undefined) {
|
throw renderUnexpectedResultError(method);
|
}
|
}
|
else {
|
if (synchronousResponse.result === undefined) {
|
throw renderUnexpectedResultError(method);
|
}
|
const { result, transferables = [] } = synchronousResponse;
|
receiver.postMessage({ id, result }, transferables);
|
}
|
}
|
catch (err) {
|
const { message, status = -32603 } = err;
|
receiver.postMessage({ error: { code: status, message }, id });
|
}
|
};
|
};
|
//# sourceMappingURL=create-message-handler.js.map
|