Registering service worker must be called beside db initialisation

This commit is contained in:
NicolasCantu 2025-03-31 15:05:30 +02:00
parent d601d94bf6
commit b9851c587e
2 changed files with 7 additions and 6 deletions

View File

@ -134,7 +134,8 @@ export async function init(): Promise<void> {
try {
const services = await Services.getInstance();
(window as any).myService = services;
await Database.getInstance();
const db = await Database.getInstance();
await db.registerServiceWorker('/src/service-workers/database.worker.js');
let device = await services.getDeviceFromDatabase();
console.log('🚀 ~ setTimeout ~ device:', device);

View File

@ -84,7 +84,6 @@ export class Database {
request.onsuccess = async () => {
this.db = request.result;
await this.initServiceWorker();
resolve();
};
@ -110,15 +109,16 @@ export class Database {
return objectList;
}
private async initServiceWorker() {
public async registerServiceWorker(path: string) {
if (!('serviceWorker' in navigator)) return; // Ensure service workers are supported
console.log('registering worker at', path);
try {
// Get existing service worker registrations
const registrations = await navigator.serviceWorker.getRegistrations();
if (registrations.length === 0) {
// No existing workers: register a new one.
this.serviceWorkerRegistration = await navigator.serviceWorker.register('/src/service-workers/database.worker.js', { type: 'module' });
this.serviceWorkerRegistration = await navigator.serviceWorker.register(path, { type: 'module' });
console.log('Service Worker registered with scope:', this.serviceWorkerRegistration.scope);
} else if (registrations.length === 1) {
// One existing worker: update it (restart it) without unregistering.
@ -130,7 +130,7 @@ export class Database {
console.log('Multiple Service Worker(s) detected. Unregistering all...');
await Promise.all(registrations.map(reg => reg.unregister()));
console.log('All previous Service Workers unregistered.');
this.serviceWorkerRegistration = await navigator.serviceWorker.register('/src/service-workers/database.worker.js', { type: 'module' });
this.serviceWorkerRegistration = await navigator.serviceWorker.register(path, { type: 'module' });
console.log('Service Worker registered with scope:', this.serviceWorkerRegistration.scope);
}
@ -142,7 +142,7 @@ export class Database {
await this.handleServiceWorkerMessage(event.data);
});
// Set up a periodic check to ensure the service worker is active and to send a SYNC message.
// Set up a periodic check to ensure the service worker is active and to send a SCAN message.
this.serviceWorkerCheckIntervalId = window.setInterval(async () => {
const activeWorker = this.serviceWorkerRegistration?.active || (await this.waitForServiceWorkerActivation(this.serviceWorkerRegistration!));
const service = await Services.getInstance();