mirror of
https://github.com/yu-i-i/overleaf-cep.git
synced 2026-05-24 01:29:35 +02:00
[web] Perform ARS on client-side GitOrigin-RevId: 19703c82758cae450fe52463ad9612d3a2383ba0
48 lines
1.4 KiB
TypeScript
48 lines
1.4 KiB
TypeScript
import BasicReferenceIndex from './basic-reference-index'
|
|
import { ReferenceIndex } from './reference-index'
|
|
import { AdvancedReferenceSearchResult, Changes } from './types'
|
|
import importOverleafModules from '../../../../macros/import-overleaf-module.macro'
|
|
|
|
interface IndexConstructor {
|
|
new (): ReferenceIndex
|
|
}
|
|
|
|
const indices = importOverleafModules('referenceIndices') as {
|
|
import: { default: IndexConstructor }
|
|
path: string
|
|
}[]
|
|
|
|
export type ReferenceWorkerRequest =
|
|
| { type: 'update'; changes: Changes }
|
|
| { type: 'search'; query: string }
|
|
|
|
export type ReferenceWorkerResponse =
|
|
| { type: 'updateKeys'; keys: Set<string> }
|
|
| { type: 'searchResult'; result: AdvancedReferenceSearchResult }
|
|
|
|
function createIndex(): ReferenceIndex {
|
|
const Klass = indices[0]?.import.default ?? BasicReferenceIndex
|
|
return new Klass()
|
|
}
|
|
|
|
const indexer: ReferenceIndex = createIndex()
|
|
|
|
self.addEventListener('message', async (event: MessageEvent) => {
|
|
const message = event.data as ReferenceWorkerRequest
|
|
switch (message.type) {
|
|
case 'update':
|
|
indexer.updateIndex(message.changes)
|
|
self.postMessage({ type: 'updateKeys', keys: indexer.getKeys() })
|
|
break
|
|
|
|
case 'search': {
|
|
const result = await indexer.search(message.query)
|
|
self.postMessage({ type: 'searchResult', result })
|
|
break
|
|
}
|
|
|
|
default:
|
|
console.error('Unknown message type:', message)
|
|
}
|
|
})
|