MCPcopy Index your code
hub / github.com/anomalyco/opencode / waitForFreshPush

Function waitForFreshPush

packages/opencode/src/lsp/client.ts:464–497  ·  view source on GitHub ↗
(request: { path: string; version: number; after: number; timeout: number })

Source from the content-addressed store, hash-verified

462 }
463
464 function waitForFreshPush(request: { path: string; version: number; after: number; timeout: number }) {
465 if (request.timeout <= 0) return Promise.resolve(false)
466 return new Promise<boolean>((resolve) => {
467 let finished = false
468 let debounceTimer: ReturnType<typeof setTimeout> | undefined
469 let timeoutTimer: ReturnType<typeof setTimeout> | undefined
470 let unsub: (() => void) | undefined
471 const finish = (result: boolean) => {
472 if (finished) return
473 finished = true
474 if (debounceTimer) clearTimeout(debounceTimer)
475 if (timeoutTimer) clearTimeout(timeoutTimer)
476 unsub?.()
477 resolve(result)
478 }
479 const schedule = () => {
480 const hit = published.get(request.path)
481 if (!hit) return
482 if (typeof hit.version === "number" && hit.version !== request.version) return
483 if (hit.at < request.after && hit.version !== request.version) return
484 if (debounceTimer) clearTimeout(debounceTimer)
485 debounceTimer = setTimeout(() => finish(true), Math.max(0, DIAGNOSTICS_DEBOUNCE_MS - (Date.now() - hit.at)))
486 }
487
488 timeoutTimer = setTimeout(() => finish(false), request.timeout)
489 const listener = (event: { path: string; serverID: string }) => {
490 if (event.path !== request.path || event.serverID !== input.serverID) return
491 schedule()
492 }
493 diagnosticListeners.add(listener)
494 unsub = () => diagnosticListeners.delete(listener)
495 schedule()
496 })
497 }
498
499 async function waitForDocumentDiagnostics(request: { path: string; version: number; after?: number }) {
500 const startedAt = request.after ?? Date.now()

Callers 2

waitForFullDiagnosticsFunction · 0.85

Calls 4

finishFunction · 0.70
scheduleFunction · 0.70
addMethod · 0.65
deleteMethod · 0.45

Tested by

no test coverage detected