mwoffliner
Version:
MediaWiki ZIM scraper
64 lines • 2.02 kB
JavaScript
export default class RedisQueue {
redisClient;
dbName;
dehydratedKeys;
hydratedKeys;
constructor(redisClient, dbName, keyMapping) {
this.redisClient = redisClient;
this.dbName = dbName;
if (keyMapping) {
this.hydratedKeys = Object.values(keyMapping);
this.dehydratedKeys = Object.keys(keyMapping);
}
}
async pop() {
const val = await this.redisClient.rPop(this.dbName);
return this.hydrateObject(val);
}
push(val) {
return this.redisClient.lPush(this.dbName, this.dehydrateObject(val));
}
len() {
return this.redisClient.hLen(this.dbName);
}
flush() {
return this.redisClient.del(this.dbName);
}
hydrateObject(value) {
if (!value) {
return value;
}
const obj = JSON.parse(value);
if (this.hydratedKeys && typeof obj === 'object') {
const mappedVal = {};
for (const key of Object.keys(obj)) {
const mapIndex = this.dehydratedKeys.indexOf(key);
if (mapIndex !== -1) {
mappedVal[this.hydratedKeys[mapIndex]] = obj[key];
}
else {
mappedVal[key] = obj[key];
}
}
return mappedVal;
}
return obj;
}
dehydrateObject(obj) {
let mappedVal = obj;
if (obj && this.dehydratedKeys && typeof obj === 'object') {
mappedVal = {};
for (const key of Object.keys(obj)) {
const mapIndex = this.hydratedKeys.indexOf(key);
if (mapIndex !== -1) {
mappedVal[this.dehydratedKeys[mapIndex]] = obj[key];
}
else {
mappedVal[key] = obj[key];
}
}
}
return typeof mappedVal === 'string' ? mappedVal : JSON.stringify(mappedVal);
}
}
//# sourceMappingURL=RedisQueue.js.map