refactor: remove .bridge
This commit is contained in:
		
							parent
							
								
									38f0a11824
								
							
						
					
					
						commit
						e6b82ec838
					
				| 
						 | 
				
			
			@ -1,5 +1,4 @@
 | 
			
		|||
import fs from 'fs'
 | 
			
		||||
import path from 'path'
 | 
			
		||||
import { contextBridge, ipcRenderer } from 'electron'
 | 
			
		||||
import { domReady } from './utils'
 | 
			
		||||
import { useLoading } from './loading'
 | 
			
		||||
| 
						 | 
				
			
			@ -13,16 +12,10 @@ const { appendLoading, removeLoading } = useLoading()
 | 
			
		|||
  appendLoading()
 | 
			
		||||
})();
 | 
			
		||||
 | 
			
		||||
// ---------------------------------------------------
 | 
			
		||||
 | 
			
		||||
contextBridge.exposeInMainWorld('bridge', {
 | 
			
		||||
  __dirname,
 | 
			
		||||
  __filename,
 | 
			
		||||
  fs,
 | 
			
		||||
  path,
 | 
			
		||||
  ipcRenderer: withPrototype(ipcRenderer),
 | 
			
		||||
  removeLoading,
 | 
			
		||||
})
 | 
			
		||||
// --------- Expose some API to Renderer process. ---------
 | 
			
		||||
contextBridge.exposeInMainWorld('fs', fs)
 | 
			
		||||
contextBridge.exposeInMainWorld('removeLoading', removeLoading)
 | 
			
		||||
contextBridge.exposeInMainWorld('ipcRenderer', withPrototype(ipcRenderer))
 | 
			
		||||
 | 
			
		||||
// `exposeInMainWorld` can not detect `prototype` attribute and methods, manually patch it.
 | 
			
		||||
function withPrototype(obj: Record<string, any>) {
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -1,16 +1,11 @@
 | 
			
		|||
 | 
			
		||||
export {}
 | 
			
		||||
export { }
 | 
			
		||||
 | 
			
		||||
declare global {
 | 
			
		||||
  interface Window {
 | 
			
		||||
    /** Expose some Api through preload script */
 | 
			
		||||
    bridge: {
 | 
			
		||||
      __dirname: string
 | 
			
		||||
      __filename: string
 | 
			
		||||
    // Expose some Api through preload script
 | 
			
		||||
    fs: typeof import('fs')
 | 
			
		||||
      path: typeof import('path')
 | 
			
		||||
    ipcRenderer: import('electron').IpcRenderer
 | 
			
		||||
    removeLoading: () => void
 | 
			
		||||
  }
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -10,16 +10,13 @@ ReactDOM.render(
 | 
			
		|||
    <App />
 | 
			
		||||
  </React.StrictMode>,
 | 
			
		||||
  document.getElementById('root'),
 | 
			
		||||
  () => {
 | 
			
		||||
    window.bridge.removeLoading()
 | 
			
		||||
  },
 | 
			
		||||
  window.removeLoading,
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
// -----------------------------------------------------------
 | 
			
		||||
 | 
			
		||||
console.log('contextBridge ->', window.bridge)
 | 
			
		||||
console.log('fs', window.fs)
 | 
			
		||||
console.log('ipcRenderer', window.ipcRenderer)
 | 
			
		||||
 | 
			
		||||
// Use ipcRenderer.on
 | 
			
		||||
window.bridge.ipcRenderer.on('main-process-message', (_event, ...args) => {
 | 
			
		||||
window.ipcRenderer.on('main-process-message', (_event, ...args) => {
 | 
			
		||||
  console.log('[Receive Main-process message]:', ...args)
 | 
			
		||||
})
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -1,7 +1,7 @@
 | 
			
		|||
// Use 'electron-store'
 | 
			
		||||
const store = {
 | 
			
		||||
  async get(key: string) {
 | 
			
		||||
    const { invoke } = window.bridge.ipcRenderer
 | 
			
		||||
    const { invoke } = window.ipcRenderer
 | 
			
		||||
    let value = await invoke('electron-store', 'get', key)
 | 
			
		||||
    try {
 | 
			
		||||
      value = JSON.parse(value)
 | 
			
		||||
| 
						 | 
				
			
			@ -10,7 +10,7 @@ const store = {
 | 
			
		|||
    }
 | 
			
		||||
  },
 | 
			
		||||
  async set(key: string, value: any) {
 | 
			
		||||
    const { invoke } = window.bridge.ipcRenderer
 | 
			
		||||
    const { invoke } = window.ipcRenderer
 | 
			
		||||
    let val = value
 | 
			
		||||
    try {
 | 
			
		||||
      if (value && typeof value === 'object') {
 | 
			
		||||
| 
						 | 
				
			
			@ -25,7 +25,7 @@ const store = {
 | 
			
		|||
(async () => {
 | 
			
		||||
  await store.set('Date.now', Date.now())
 | 
			
		||||
  console.log('electron-store ->', 'Date.now:', await store.get('Date.now'))
 | 
			
		||||
  console.log('electron-store ->', 'path:', await window.bridge.ipcRenderer.invoke('electron-store', 'path'))
 | 
			
		||||
  console.log('electron-store ->', 'path:', await window.ipcRenderer.invoke('electron-store', 'path'))
 | 
			
		||||
})();
 | 
			
		||||
 | 
			
		||||
export { }
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
		Reference in New Issue