Files
orca/src/preload/browser-find-subscriptions.ts
T
OrcaWinandOrcaWin 0efc842028 [comment audit] Shorten preload comments (#32257)
* chore: audit preload root comments and track repository coverage

* docs: track repository comment audit coverage

* chore: keep comment audit tracker local

* chore: shorten preload API contract comments

---------

Co-authored-by: OrcaWin <293788423+OrcaWin@users.noreply.github.com>
2026-10-23 02:16:59 -07:00

60 lines
1.9 KiB
TypeScript

import { asBrowserFindTarget, type BrowserFindSource } from '../shared/browser-find-source'
type BrowserFindCallback = () => void
export function createBrowserFindSubscriptions(): {
dispatch: (target: unknown) => void
subscribe: (source: BrowserFindSource, callback: BrowserFindCallback) => () => void
subscribedPageCount: () => number
} {
// Page-only targets must reach every workspace holding that page.
const callbacksByPage = new Map<string, Map<string, Set<BrowserFindCallback>>>()
return {
subscribedPageCount: () => callbacksByPage.size,
dispatch: (target) => {
const findTarget = asBrowserFindTarget(target)
if (!findTarget) {
return
}
const callbacksByWorkspace = callbacksByPage.get(findTarget.browserPageId)
if (!callbacksByWorkspace) {
return
}
const scoped =
findTarget.browserWorkspaceId === undefined
? [...callbacksByWorkspace.values()]
: [callbacksByWorkspace.get(findTarget.browserWorkspaceId)]
for (const callbacks of scoped) {
for (const callback of callbacks ?? []) {
callback()
}
}
},
subscribe: (source, callback) => {
let callbacksByWorkspace = callbacksByPage.get(source.browserPageId)
if (!callbacksByWorkspace) {
callbacksByWorkspace = new Map()
callbacksByPage.set(source.browserPageId, callbacksByWorkspace)
}
let callbacks = callbacksByWorkspace.get(source.browserWorkspaceId)
if (!callbacks) {
callbacks = new Set()
callbacksByWorkspace.set(source.browserWorkspaceId, callbacks)
}
callbacks.add(callback)
return () => {
callbacks.delete(callback)
if (callbacks.size > 0) {
return
}
callbacksByWorkspace.delete(source.browserWorkspaceId)
if (callbacksByWorkspace.size === 0) {
callbacksByPage.delete(source.browserPageId)
}
}
}
}
}