173 lines
9.8 KiB
TypeScript
173 lines
9.8 KiB
TypeScript
// src/preload/index.ts
|
|
import { contextBridge, ipcRenderer } from 'electron'
|
|
|
|
const electronAPI = {
|
|
window: {
|
|
minimize: () => ipcRenderer.send('window:minimize'),
|
|
maximize: () => ipcRenderer.send('window:maximize'),
|
|
close: () => ipcRenderer.send('window:close'),
|
|
},
|
|
theme: {
|
|
get: (): Promise<boolean> => ipcRenderer.invoke('theme:get'),
|
|
set: (theme: 'system' | 'dark' | 'light') => ipcRenderer.send('theme:set', theme),
|
|
onOsUpdated: (callback: (isDark: boolean) => void) => {
|
|
ipcRenderer.on('theme:os-updated', (_e, isDark: boolean) => callback(isDark))
|
|
},
|
|
},
|
|
dialog: {
|
|
openFile: (options: { title?: string; filters?: { name: string; extensions: string[] }[] }) =>
|
|
ipcRenderer.invoke('dialog:openFile', options),
|
|
},
|
|
credential: {
|
|
encrypt: (text: string): Promise<string> => ipcRenderer.invoke('credential:encrypt', text),
|
|
decrypt: (encoded: string): Promise<string> => ipcRenderer.invoke('credential:decrypt', encoded),
|
|
},
|
|
storage: {
|
|
getConnections: (): Promise<any[]> => ipcRenderer.invoke('storage:getConnections'),
|
|
saveConnection: (conn: any): Promise<any[]> => ipcRenderer.invoke('storage:saveConnection', conn),
|
|
deleteConnection: (id: string): Promise<any[]> => ipcRenderer.invoke('storage:deleteConnection', id),
|
|
reorderConnections: (ids: string[]): Promise<any[]> => ipcRenderer.invoke('storage:reorderConnections', ids),
|
|
getSettings: (): Promise<any> => ipcRenderer.invoke('storage:getSettings'),
|
|
saveSettings: (settings: any): Promise<void> => ipcRenderer.invoke('storage:saveSettings', settings),
|
|
},
|
|
redis: {
|
|
connect: (id: string, opts: any): Promise<any> => ipcRenderer.invoke('redis:connect', id, opts),
|
|
disconnect: (id: string): Promise<void> => ipcRenderer.invoke('redis:disconnect', id),
|
|
execute: (id: string, command: string, args: string[]): Promise<any> =>
|
|
ipcRenderer.invoke('redis:execute', id, command, args),
|
|
getInfo: (id: string): Promise<string> => ipcRenderer.invoke('redis:getInfo', id),
|
|
scanKeys: (id: string, cursor: string, pattern: string, count: number): Promise<any> =>
|
|
ipcRenderer.invoke('redis:scanKeys', id, cursor, pattern, count),
|
|
getKeyType: (id: string, key: string): Promise<string> => ipcRenderer.invoke('redis:getKeyType', id, key),
|
|
getKeyTTL: (id: string, key: string): Promise<number> => ipcRenderer.invoke('redis:getKeyTTL', id, key),
|
|
getString: (id: string, key: string): Promise<string | null> => ipcRenderer.invoke('redis:getString', id, key),
|
|
setString: (id: string, key: string, value: string): Promise<void> =>
|
|
ipcRenderer.invoke('redis:setString', id, key, value),
|
|
// ReJson
|
|
rejsonGet: (id: string, key: string, path: string): Promise<string> =>
|
|
ipcRenderer.invoke('redis:rejsonGet', id, key, path),
|
|
rejsonSet: (id: string, key: string, path: string, value: string): Promise<void> =>
|
|
ipcRenderer.invoke('redis:rejsonSet', id, key, path, value),
|
|
deleteKey: (id: string, key: string): Promise<void> => ipcRenderer.invoke('redis:deleteKey', id, key),
|
|
hashScan: (id: string, key: string, cursor: string, count: number): Promise<any> =>
|
|
ipcRenderer.invoke('redis:hashScan', id, key, cursor, count),
|
|
hashSet: (id: string, key: string, field: string, value: string): Promise<void> =>
|
|
ipcRenderer.invoke('redis:hashSet', id, key, field, value),
|
|
hashDel: (id: string, key: string, field: string): Promise<void> =>
|
|
ipcRenderer.invoke('redis:hashDel', id, key, field),
|
|
setTTL: (id: string, key: string, ttl: number): Promise<void> =>
|
|
ipcRenderer.invoke('redis:setTTL', id, key, ttl),
|
|
selectDb: (id: string, db: number): Promise<void> =>
|
|
ipcRenderer.invoke('redis:selectDb', id, db),
|
|
dbSize: (id: string): Promise<number> => ipcRenderer.invoke('redis:dbSize', id),
|
|
// List
|
|
listRange: (id: string, key: string, start: number, stop: number): Promise<string[]> =>
|
|
ipcRenderer.invoke('redis:listRange', id, key, start, stop),
|
|
listLength: (id: string, key: string): Promise<number> =>
|
|
ipcRenderer.invoke('redis:listLength', id, key),
|
|
listPush: (id: string, key: string, values: string[]): Promise<number> =>
|
|
ipcRenderer.invoke('redis:listPush', id, key, values),
|
|
listSet: (id: string, key: string, index: number, value: string): Promise<void> =>
|
|
ipcRenderer.invoke('redis:listSet', id, key, index, value),
|
|
listRemove: (id: string, key: string, count: number, value: string): Promise<number> =>
|
|
ipcRenderer.invoke('redis:listRemove', id, key, count, value),
|
|
// Set
|
|
setMembers: (id: string, key: string): Promise<string[]> =>
|
|
ipcRenderer.invoke('redis:setMembers', id, key),
|
|
setSize: (id: string, key: string): Promise<number> =>
|
|
ipcRenderer.invoke('redis:setSize', id, key),
|
|
setAdd: (id: string, key: string, members: string[]): Promise<number> =>
|
|
ipcRenderer.invoke('redis:setAdd', id, key, members),
|
|
setRemove: (id: string, key: string, members: string[]): Promise<number> =>
|
|
ipcRenderer.invoke('redis:setRemove', id, key, members),
|
|
// Sorted set
|
|
zsetRange: (id: string, key: string, start: number, stop: number, withScores: boolean): Promise<string[]> =>
|
|
ipcRenderer.invoke('redis:zsetRange', id, key, start, stop, withScores),
|
|
zsetSize: (id: string, key: string): Promise<number> =>
|
|
ipcRenderer.invoke('redis:zsetSize', id, key),
|
|
zsetAdd: (id: string, key: string, score: number, member: string): Promise<number> =>
|
|
ipcRenderer.invoke('redis:zsetAdd', id, key, score, member),
|
|
zsetRemove: (id: string, key: string, members: string[]): Promise<number> =>
|
|
ipcRenderer.invoke('redis:zsetRemove', id, key, members),
|
|
// Slow log
|
|
slowLogGet: (id: string, count: number): Promise<any[]> =>
|
|
ipcRenderer.invoke('redis:slowLogGet', id, count),
|
|
slowLogLen: (id: string): Promise<number> =>
|
|
ipcRenderer.invoke('redis:slowLogLen', id),
|
|
// Memory
|
|
memoryUsage: (id: string, key: string): Promise<number | null> =>
|
|
ipcRenderer.invoke('redis:memoryUsage', id, key),
|
|
batchDelete: (id: string, keys: string[]): Promise<number> =>
|
|
ipcRenderer.invoke('redis:batchDelete', id, keys),
|
|
// Stream
|
|
streamInfo: (id: string, key: string): Promise<any> =>
|
|
ipcRenderer.invoke('redis:streamInfo', id, key),
|
|
streamRange: (id: string, key: string, start: string, end: string, count: number): Promise<any[]> =>
|
|
ipcRenderer.invoke('redis:streamRange', id, key, start, end, count),
|
|
streamAdd: (id: string, key: string, streamId: string, fieldValues: string[]): Promise<string> =>
|
|
ipcRenderer.invoke('redis:streamAdd', id, key, streamId, fieldValues),
|
|
streamTrim: (id: string, key: string, maxLen: number): Promise<number> =>
|
|
ipcRenderer.invoke('redis:streamTrim', id, key, maxLen),
|
|
streamDel: (id: string, key: string, ids: string[]): Promise<number> =>
|
|
ipcRenderer.invoke('redis:streamDel', id, key, ids),
|
|
// Stream consumer groups
|
|
streamGroups: (id: string, key: string): Promise<any[]> =>
|
|
ipcRenderer.invoke('redis:streamGroups', id, key),
|
|
streamConsumers: (id: string, key: string, group: string): Promise<any[]> =>
|
|
ipcRenderer.invoke('redis:streamConsumers', id, key, group),
|
|
streamGroupCreate: (id: string, key: string, group: string, startId: string, mkstream: boolean): Promise<any> =>
|
|
ipcRenderer.invoke('redis:streamGroupCreate', id, key, group, startId, mkstream),
|
|
streamGroupDestroy: (id: string, key: string, group: string): Promise<number> =>
|
|
ipcRenderer.invoke('redis:streamGroupDestroy', id, key, group),
|
|
streamAck: (id: string, key: string, group: string, ids: string[]): Promise<number> =>
|
|
ipcRenderer.invoke('redis:streamAck', id, key, group, ids),
|
|
// Key ops
|
|
renameKey: (id: string, oldKey: string, newKey: string): Promise<void> =>
|
|
ipcRenderer.invoke('redis:renameKey', id, oldKey, newKey),
|
|
existsKey: (id: string, key: string): Promise<boolean> =>
|
|
ipcRenderer.invoke('redis:existsKey', id, key),
|
|
ping: (id: string): Promise<string> =>
|
|
ipcRenderer.invoke('redis:ping', id),
|
|
isConnected: (id: string): Promise<boolean> =>
|
|
ipcRenderer.invoke('redis:isConnected', id),
|
|
// Command log
|
|
getCommandLog: (): Promise<any[]> =>
|
|
ipcRenderer.invoke('redis:getCommandLog'),
|
|
clearCommandLog: (): Promise<void> =>
|
|
ipcRenderer.invoke('redis:clearCommandLog'),
|
|
// Format
|
|
decodeValue: (value: string, format: string): Promise<string> =>
|
|
ipcRenderer.invoke('redis:decodeValue', value, format),
|
|
detectFormat: (value: string): Promise<string> =>
|
|
ipcRenderer.invoke('redis:detectFormat', value),
|
|
customFormat: (value: string, command: string, key: string): Promise<string> =>
|
|
ipcRenderer.invoke('redis:customFormat', value, command, key),
|
|
// Pub/Sub
|
|
subscribe: (id: string, channels: string[], isPattern: boolean): Promise<any> =>
|
|
ipcRenderer.invoke('redis:subscribe', id, channels, isPattern),
|
|
unsubscribe: (id: string): Promise<void> =>
|
|
ipcRenderer.invoke('redis:unsubscribe', id),
|
|
onSubscribeMessage: (callback: (msg: any) => void) => {
|
|
ipcRenderer.on('redis:subscribeMessage', (_e, msg) => callback(msg))
|
|
},
|
|
// Monitor
|
|
monitor: (id: string): Promise<any> =>
|
|
ipcRenderer.invoke('redis:monitor', id),
|
|
monitorStop: (id: string): Promise<void> =>
|
|
ipcRenderer.invoke('redis:monitorStop', id),
|
|
onMonitorMessage: (callback: (msg: any) => void) => {
|
|
ipcRenderer.on('redis:monitorMessage', (_e, msg) => callback(msg))
|
|
},
|
|
},
|
|
updater: {
|
|
check: (): Promise<any> => ipcRenderer.invoke('updater:check'),
|
|
download: (): Promise<any> => ipcRenderer.invoke('updater:download'),
|
|
install: () => ipcRenderer.invoke('updater:install'),
|
|
onStatus: (callback: (status: any) => void) => {
|
|
ipcRenderer.on('updater:status', (_e, status) => callback(status))
|
|
},
|
|
},
|
|
}
|
|
|
|
contextBridge.exposeInMainWorld('electronAPI', electronAPI)
|