From fa491658f1c59385fd64403aca691dfed1f74ca2 Mon Sep 17 00:00:00 2001 From: linonetwo Date: Wed, 11 Feb 2026 18:51:42 +0800 Subject: [PATCH] fix: service type --- src/preload/common/exportServices.ts | 25 ++++++---- src/preload/common/services.ts | 27 ---------- .../wiki/wikiWorker/ipcServerRoutes.ts | 19 ++++++- src/services/wiki/wikiWorker/services.ts | 4 +- .../wiki/wikiWorker/startNodeJSWiki.ts | 7 +-- src/types/tidgi-tw.d.ts | 50 +++++++++++++++++-- 6 files changed, 84 insertions(+), 48 deletions(-) diff --git a/src/preload/common/exportServices.ts b/src/preload/common/exportServices.ts index c5fdbfa3..296ff8ae 100644 --- a/src/preload/common/exportServices.ts +++ b/src/preload/common/exportServices.ts @@ -1,14 +1,11 @@ +import type { TidgiService } from '@/types/tidgi-tw'; import { contextBridge } from 'electron'; import * as service from './services'; const attachServiceToTw = () => { - if (typeof window === 'undefined') return; - const tw = (window as unknown as { $tw?: { tidgi?: Record } }).$tw; - if (!tw) return; - if (!tw.tidgi) { - tw.tidgi = {}; - } - (tw.tidgi as { service?: typeof service }).service = service; + if (typeof $tw === 'undefined') return false; + $tw.tidgi = { service: service as unknown as TidgiService }; + return true; }; // add window.service for browserView content @@ -17,5 +14,15 @@ contextBridge.exposeInMainWorld('service', service); window.service = service; // keep $tw.tidgi.service available once $tw is ready -attachServiceToTw(); -window.addEventListener('DOMContentLoaded', attachServiceToTw); +// retry until $tw is available +const tryAttach = () => { + if (attachServiceToTw()) { + return; + } + const interval = setInterval(() => { + if (attachServiceToTw()) { + clearInterval(interval); + } + }, 50); +}; +tryAttach(); diff --git a/src/preload/common/services.ts b/src/preload/common/services.ts index a263b0a6..3199dba4 100644 --- a/src/preload/common/services.ts +++ b/src/preload/common/services.ts @@ -55,30 +55,3 @@ export const wikiGitWorkspace = createProxy(WikiGitWor export const window = createProxy(WindowServiceIPCDescriptor); export const workspace = createProxy>(WorkspaceServiceIPCDescriptor); export const workspaceView = createProxy(WorkspaceViewServiceIPCDescriptor); - -export const descriptors = { - agentBrowser: AgentBrowserServiceIPCDescriptor, - agentDefinition: AgentDefinitionServiceIPCDescriptor, - agentInstance: AgentInstanceServiceIPCDescriptor, - auth: AuthenticationServiceIPCDescriptor, - context: ContextServiceIPCDescriptor, - deepLink: DeepLinkServiceIPCDescriptor, - git: GitServiceIPCDescriptor, - menu: MenuServiceIPCDescriptor, - native: NativeServiceIPCDescriptor, - notification: NotificationServiceIPCDescriptor, - preference: PreferenceServiceIPCDescriptor, - sync: SyncServiceIPCDescriptor, - systemPreference: SystemPreferenceServiceIPCDescriptor, - theme: ThemeServiceIPCDescriptor, - updater: UpdaterServiceIPCDescriptor, - view: ViewServiceIPCDescriptor, - wiki: WikiServiceIPCDescriptor, - wikiEmbedding: WikiEmbeddingServiceIPCDescriptor, - wikiGitWorkspace: WikiGitWorkspaceServiceIPCDescriptor, - window: WindowServiceIPCDescriptor, - workspace: WorkspaceServiceIPCDescriptor, - workspaceView: WorkspaceViewServiceIPCDescriptor, - externalAPI: ExternalAPIServiceIPCDescriptor, - database: DatabaseServiceIPCDescriptor, -}; diff --git a/src/services/wiki/wikiWorker/ipcServerRoutes.ts b/src/services/wiki/wikiWorker/ipcServerRoutes.ts index a221b730..d77e84d5 100644 --- a/src/services/wiki/wikiWorker/ipcServerRoutes.ts +++ b/src/services/wiki/wikiWorker/ipcServerRoutes.ts @@ -309,7 +309,22 @@ export class IpcServerRoutes { } export const ipcServerRoutes: IpcServerRoutes = new IpcServerRoutes(); -export const ipcServerRoutesMethods = { + +// Explicit method signature to preserve types +type IpcServerRoutesMethodsType = { + deleteTiddler: IpcServerRoutes['deleteTiddler']; + getFavicon: IpcServerRoutes['getFavicon']; + getIndex: IpcServerRoutes['getIndex']; + getStatus: IpcServerRoutes['getStatus']; + getTiddler: IpcServerRoutes['getTiddler']; + getTiddlerHtml: IpcServerRoutes['getTiddlerHtml']; + getTiddlersJSON: IpcServerRoutes['getTiddlersJSON']; + putTiddler: IpcServerRoutes['putTiddler']; + getFile: IpcServerRoutes['getFile']; + getWikiChangeObserver: IpcServerRoutes['getWikiChangeObserver']; +}; + +export const ipcServerRoutesMethods: IpcServerRoutesMethodsType = { deleteTiddler: ipcServerRoutes.deleteTiddler.bind(ipcServerRoutes), getFavicon: ipcServerRoutes.getFavicon.bind(ipcServerRoutes), getIndex: ipcServerRoutes.getIndex.bind(ipcServerRoutes), @@ -325,5 +340,5 @@ export const ipcServerRoutesMethods = { /** * Available methods for ipcServerRoutes exposed from wiki worker */ -export type IpcServerRouteMethods = Omit; +export type IpcServerRouteMethods = Omit; export type IpcServerRouteNames = keyof IpcServerRouteMethods; diff --git a/src/services/wiki/wikiWorker/services.ts b/src/services/wiki/wikiWorker/services.ts index f0301062..4460f8cc 100644 --- a/src/services/wiki/wikiWorker/services.ts +++ b/src/services/wiki/wikiWorker/services.ts @@ -36,7 +36,7 @@ import { type IWorkspaceViewService, WorkspaceViewServiceIPCDescriptor } from '@ export const agentBrowser = createWorkerProxy>(AgentBrowserServiceIPCDescriptor, Observable); export const agentDefinition = createWorkerProxy>(AgentDefinitionServiceIPCDescriptor, Observable); export const agentInstance = createWorkerProxy>(AgentInstanceServiceIPCDescriptor, Observable); -export const authentication = createWorkerProxy>(AuthenticationServiceIPCDescriptor, Observable); +export const auth = createWorkerProxy>(AuthenticationServiceIPCDescriptor, Observable); export const context = createWorkerProxy>(ContextServiceIPCDescriptor, Observable); export const database = createWorkerProxy>(DatabaseServiceIPCDescriptor, Observable); export const deepLink = createWorkerProxy>(DeepLinkServiceIPCDescriptor, Observable); @@ -67,7 +67,7 @@ export const service = { agentBrowser, agentDefinition, agentInstance, - authentication, + auth, context, database, deepLink, diff --git a/src/services/wiki/wikiWorker/startNodeJSWiki.ts b/src/services/wiki/wikiWorker/startNodeJSWiki.ts index 1a236a6e..b9f255db 100644 --- a/src/services/wiki/wikiWorker/startNodeJSWiki.ts +++ b/src/services/wiki/wikiWorker/startNodeJSWiki.ts @@ -5,6 +5,7 @@ import { onWorkerServicesReady } from './servicesReady'; import { getTidGiAuthHeaderWithToken } from '@/constants/auth'; import { defaultServerIP } from '@/constants/urls'; +import type { TidgiService } from '@/types/tidgi-tw'; import { DARK_LIGHT_CHANGE_ACTIONS_TAG } from '@services/theme/interface'; import intercept from 'intercept-stdout'; import { nanoid } from 'nanoid'; @@ -228,10 +229,10 @@ export function startNodeJSWiki(configs: IStartNodeJSWikiConfigs): Observable; + wikiEmbedding: IWikiEmbeddingService; + wikiGitWorkspace: IWikiGitWorkspaceService; + window: IWindowService; + workspace: IWorkspaceService; + workspaceView: IWorkspaceViewService; +}; declare module 'tiddlywiki' { interface ITiddlyWiki {