p3x-redis-ui-server
Version:
🏍️ P3X Redis UI server — Socket.IO backend for the dual Angular + React frontend with AI queries, 54 languages, and auto data decompression
2 lines (1 loc) • 1.65 kB
JavaScript
import*as e from"../../shared.mjs";export default async e=>{const{socket:t,payload:r}=e;try{const a=t.p3xrs.ioredis,s=r.keys;if(!Array.isArray(s)||0===s.length)return void t.emit(e.responseEvent,{status:"error",error:"No keys specified for export"});const o=a.pipeline();for(const e of s)o.type(e);const n=await o.exec(),i=a.pipeline();for(const e of s)i.pttl(e);const c=await i.exec(),f=[];for(let e=0;e<s.length;e++){const t=s[e];let r=n[e][1];const o=c[e][1];if("ReJSON-RL"===r&&(r="json"),"none"===r)continue;let i;try{switch(r){case"string":{const e=await a.getBuffer(t);i=e?e.toString("base64"):null;break}case"list":i=(await a.lrangeBuffer(t,0,-1)).map(e=>e.toString("base64"));break;case"set":i=(await a.smembersBuffer(t)).map(e=>e.toString("base64"));break;case"zset":{const e=await a.zrangebyscoreBuffer(t,"-inf","+inf","WITHSCORES"),r=[];for(let t=0;t<e.length;t+=2)r.push({member:e[t].toString("base64"),score:parseFloat(e[t+1].toString())});i=r;break}case"hash":{const e=await a.hgetallBuffer(t),r={};if(e)for(const[t,a]of Object.entries(e))r[t]=a.toString("base64");i=r;break}case"stream":i=(await a.xrange(t,"-","+")).map(([e,t])=>{const r={id:e};for(let e=0;e<t.length;e+=2)r[t[e]]=t[e+1];return r});break;case"json":i=await a.call("JSON.GET",t);break;default:continue}}catch(e){console.error(`key-export: failed to read key "${t}" (type=${r}):`,e.message);continue}f.push({key:t,type:r,value:i,pttl:o>0?o:-1})}t.emit(e.responseEvent,{status:"ok",data:{version:1,exportedAt:(new Date).toISOString(),database:t.p3xrs.currentDatabase||0,keys:f}})}catch(r){console.error(r),t.emit(e.responseEvent,{status:"error",error:r.message})}};