seitu
Version:
41 lines (40 loc) • 1.14 kB
JavaScript
//#region src/internal/indexed-db-request.ts
function requestToPromise(request) {
return new Promise((resolve, reject) => {
request.onsuccess = () => resolve(request.result);
request.onerror = () => reject(request.error);
});
}
function transactionDone(transaction) {
return new Promise((resolve, reject) => {
transaction.oncomplete = () => resolve();
transaction.onerror = () => reject(transaction.error);
transaction.onabort = () => reject(transaction.error);
});
}
function createBroadcaster(channelName) {
let channel;
return {
broadcast: () => {
if (typeof BroadcastChannel === "undefined") return;
if (channel) {
channel.postMessage(null);
return;
}
const ephemeral = new BroadcastChannel(channelName);
ephemeral.postMessage(null);
ephemeral.close();
},
listen: (onMessage) => {
if (typeof BroadcastChannel === "undefined") return;
channel = new BroadcastChannel(channelName);
channel.onmessage = onMessage;
return () => {
channel?.close();
channel = void 0;
};
}
};
}
//#endregion
export { requestToPromise as n, transactionDone as r, createBroadcaster as t };