@actorize/core
Version:
Actorize helps building scalable js apps with a messaging system
61 lines • 2.01 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
const index_1 = require("../index");
const utils_1 = require("../utils");
function createRemoteStorageConsumer(director, opts) {
const { storeLocation } = opts;
const actorName = (0, utils_1.randomstring)();
// @ts-expect-error for now ok
const actor = director.registerActor(actorName);
// eslint-disable-next-line @typescript-eslint/no-unused-vars
let onUpdate = (key, val) => { };
const obj = {
onUpdate: (keys, cb) => {
onUpdate = cb;
// @ts-expect-error for now ok
actor.sendMessage(storeLocation, {
action: 'SUBSCRIBE_TO_KEYS',
keys,
});
return () => {
// @ts-expect-error for now ok
actor.sendMessage(storeLocation, {
action: 'UNSUBSCRIBE_FROM_KEYS',
keys,
});
};
},
get: async (key) => {
// @ts-expect-error for now ok
const resp = await (0, index_1.dispatch)(director, storeLocation, {
action: 'GET',
key,
}, true);
if (!resp) {
return null;
}
// @ts-expect-error for now ok
return resp.payload.value;
},
set: async (key, value) => {
// @ts-expect-error for now ok
actor.sendMessage(storeLocation, {
action: 'SET',
key,
value,
});
},
};
actor.onMessage((msgs) => {
msgs.forEach((tmp) => {
// TODO: just a workaround
const msg = tmp;
if (msg.payload.event === 'KEY_UPDATED') {
onUpdate(msg.payload.key, msg.payload.value);
}
});
});
return obj;
}
exports.default = createRemoteStorageConsumer;
//# sourceMappingURL=remoteStorageConsumer.js.map