crux-wrapper
Version:
A React provider for your crux application
46 lines • 1.58 kB
JavaScript
import { createSender } from "./eventSender.js";
function createSerializer({ BincodeSerializer, BincodeDeserializer, ViewModel, Request, }) {
return {
serialize(entity) {
const serializer = new BincodeSerializer();
entity.serialize(serializer);
return serializer.getBytes();
},
deserializeEffects(bytes) {
const deserializer = new BincodeDeserializer(bytes);
const len = deserializer.deserializeLen();
const requests = [];
for (let i = 0; i < len; i++) {
const request = Request.deserialize(deserializer);
requests.push(request);
}
return requests;
},
deserializeView(bytes) {
return ViewModel.deserialize(new BincodeDeserializer(bytes));
},
};
}
export function wrap({ init, onEffect, serializerConfig, serializer: baseSerializer, log, }) {
const logs = [];
let apiRef = { value: null };
const serializer = baseSerializer ?? createSerializer(serializerConfig);
const logger = !log
? undefined
: typeof log === "function"
? log
: (log) => logs.push(log);
const sender = createSender(apiRef, onEffect, serializer, logger);
return {
init: async () => {
if (apiRef.value) {
return;
}
apiRef.value = init(sender.handleEffect);
await apiRef.value;
},
send: sender.send,
logs,
};
}
//# sourceMappingURL=wrapper.js.map