mirror of
https://github.com/nbd-wtf/nostr-tools.git
synced 2025-12-09 00:28:51 +00:00
nip77: adds wrapper for negentropy and fallback for yieldThread MessageChannel
This commit is contained in:
37
helpers.ts
37
helpers.ts
@@ -1,17 +1,34 @@
|
||||
import { verifiedSymbol, type Event, type Nostr, VerifiedEvent } from './core.ts'
|
||||
|
||||
export async function yieldThread() {
|
||||
return new Promise<void>(resolve => {
|
||||
const ch = new MessageChannel()
|
||||
const handler = () => {
|
||||
// @ts-ignore (typescript thinks this property should be called `removeListener`, but in fact it's `removeEventListener`)
|
||||
ch.port1.removeEventListener('message', handler)
|
||||
resolve()
|
||||
return new Promise<void>((resolve, reject) => {
|
||||
try {
|
||||
// Check if MessageChannel is available
|
||||
if (typeof MessageChannel !== 'undefined') {
|
||||
const ch = new MessageChannel()
|
||||
const handler = () => {
|
||||
// @ts-ignore (typescript thinks this property should be called `removeListener`, but in fact it's `removeEventListener`)
|
||||
ch.port1.removeEventListener('message', handler)
|
||||
resolve()
|
||||
}
|
||||
// @ts-ignore (typescript thinks this property should be called `addListener`, but in fact it's `addEventListener`)
|
||||
ch.port1.addEventListener('message', handler)
|
||||
ch.port2.postMessage(0)
|
||||
ch.port1.start()
|
||||
} else {
|
||||
if (typeof setImmediate !== 'undefined') {
|
||||
setImmediate(resolve)
|
||||
} else if (typeof setTimeout !== 'undefined') {
|
||||
setTimeout(resolve, 0)
|
||||
} else {
|
||||
// Last resort - resolve immediately
|
||||
resolve()
|
||||
}
|
||||
}
|
||||
} catch (e) {
|
||||
console.error('during yield: ', e)
|
||||
reject(e)
|
||||
}
|
||||
// @ts-ignore (typescript thinks this property should be called `addListener`, but in fact it's `addEventListener`)
|
||||
ch.port1.addEventListener('message', handler)
|
||||
ch.port2.postMessage(0)
|
||||
ch.port1.start()
|
||||
})
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user