@syncular/server-service-worker 0.0.6-229 → 0.0.6-232
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.d.ts +1 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +72 -13
- package/dist/index.js.map +1 -1
- package/package.json +3 -3
- package/src/index.test.ts +201 -5
- package/src/index.ts +105 -18
package/dist/index.d.ts
CHANGED
|
@@ -90,6 +90,7 @@ export interface AttachServiceWorkerServerOptions {
|
|
|
90
90
|
export declare function attachServiceWorkerServer(globalScope: ServiceWorkerGlobalScopeLike, server: ServiceWorkerServer, options?: AttachServiceWorkerServerOptions): void;
|
|
91
91
|
export interface ConfigureServiceWorkerServerOptions {
|
|
92
92
|
scriptPath: string;
|
|
93
|
+
scriptVersion?: string;
|
|
93
94
|
healthPath?: string;
|
|
94
95
|
healthCheck?: (response: Response) => boolean | Promise<boolean>;
|
|
95
96
|
enabled?: boolean;
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
package/dist/index.js
CHANGED
|
@@ -149,9 +149,13 @@ async function getSyncPushContext(request, syncPathnameSet) {
|
|
|
149
149
|
return null;
|
|
150
150
|
if (!isRecord(payload.push))
|
|
151
151
|
return null;
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
152
|
+
const push = payload.push;
|
|
153
|
+
const hasLegacyOperations = Array.isArray(push.operations) && push.operations.length > 0;
|
|
154
|
+
const hasBatchOperations = Array.isArray(push.commits) &&
|
|
155
|
+
push.commits.some((commit) => isRecord(commit) &&
|
|
156
|
+
Array.isArray(commit.operations) &&
|
|
157
|
+
commit.operations.length > 0);
|
|
158
|
+
if (!hasLegacyOperations && !hasBatchOperations)
|
|
155
159
|
return null;
|
|
156
160
|
const sourceClientId = typeof payload.clientId === 'string' && payload.clientId.length > 0
|
|
157
161
|
? payload.clientId
|
|
@@ -171,10 +175,30 @@ async function getAppliedCommitCursor(response) {
|
|
|
171
175
|
return undefined;
|
|
172
176
|
if (!isRecord(payload.push))
|
|
173
177
|
return undefined;
|
|
174
|
-
|
|
178
|
+
const push = payload.push;
|
|
179
|
+
if (Array.isArray(push.commits)) {
|
|
180
|
+
const commitSeqs = push.commits
|
|
181
|
+
.map((commit) => {
|
|
182
|
+
if (!isRecord(commit))
|
|
183
|
+
return null;
|
|
184
|
+
if (commit.status !== 'applied' &&
|
|
185
|
+
commit.status !== 'cached' &&
|
|
186
|
+
commit.status !== 'rejected') {
|
|
187
|
+
return null;
|
|
188
|
+
}
|
|
189
|
+
return typeof commit.commitSeq === 'number' ? commit.commitSeq : null;
|
|
190
|
+
})
|
|
191
|
+
.filter((commitSeq) => commitSeq !== null);
|
|
192
|
+
if (commitSeqs.length > 0) {
|
|
193
|
+
return Math.max(...commitSeqs);
|
|
194
|
+
}
|
|
195
|
+
return undefined;
|
|
196
|
+
}
|
|
197
|
+
if (push.status !== 'applied' && push.status !== 'cached') {
|
|
175
198
|
return undefined;
|
|
176
|
-
|
|
177
|
-
|
|
199
|
+
}
|
|
200
|
+
if (typeof push.commitSeq === 'number') {
|
|
201
|
+
return push.commitSeq;
|
|
178
202
|
}
|
|
179
203
|
return undefined;
|
|
180
204
|
}
|
|
@@ -327,24 +351,38 @@ export async function unregisterServiceWorkerRegistrations(scriptPath) {
|
|
|
327
351
|
return;
|
|
328
352
|
}
|
|
329
353
|
const registrations = await navigator.serviceWorker.getRegistrations();
|
|
354
|
+
const targetPathname = new URL(scriptPath, window.location.origin).pathname;
|
|
330
355
|
const unregisterTasks = registrations
|
|
331
356
|
.filter((registration) => {
|
|
332
357
|
const scriptUrl = registration.active?.scriptURL ??
|
|
333
358
|
registration.waiting?.scriptURL ??
|
|
334
359
|
registration.installing?.scriptURL;
|
|
335
|
-
|
|
360
|
+
if (!scriptUrl)
|
|
361
|
+
return false;
|
|
362
|
+
try {
|
|
363
|
+
return new URL(scriptUrl).pathname === targetPathname;
|
|
364
|
+
}
|
|
365
|
+
catch {
|
|
366
|
+
return scriptUrl.includes(targetPathname);
|
|
367
|
+
}
|
|
336
368
|
})
|
|
337
369
|
.map((registration) => registration.unregister());
|
|
338
370
|
await Promise.all(unregisterTasks);
|
|
339
371
|
}
|
|
340
|
-
function waitForControllerChange(timeoutMs) {
|
|
341
|
-
if (typeof navigator === 'undefined' ||
|
|
342
|
-
|
|
343
|
-
|
|
372
|
+
function waitForControllerChange(timeoutMs, previousController) {
|
|
373
|
+
if (typeof navigator === 'undefined' || !('serviceWorker' in navigator)) {
|
|
374
|
+
return Promise.resolve();
|
|
375
|
+
}
|
|
376
|
+
const hasChanged = () => navigator.serviceWorker.controller !== null &&
|
|
377
|
+
navigator.serviceWorker.controller !== previousController;
|
|
378
|
+
if (hasChanged()) {
|
|
344
379
|
return Promise.resolve();
|
|
345
380
|
}
|
|
346
381
|
return new Promise((resolve) => {
|
|
347
382
|
const onControllerChange = () => {
|
|
383
|
+
if (!hasChanged()) {
|
|
384
|
+
return;
|
|
385
|
+
}
|
|
348
386
|
clearTimeout(timeoutId);
|
|
349
387
|
navigator.serviceWorker.removeEventListener('controllerchange', onControllerChange);
|
|
350
388
|
resolve();
|
|
@@ -356,6 +394,14 @@ function waitForControllerChange(timeoutMs) {
|
|
|
356
394
|
navigator.serviceWorker.addEventListener('controllerchange', onControllerChange);
|
|
357
395
|
});
|
|
358
396
|
}
|
|
397
|
+
function versionServiceWorkerScriptPath(scriptPath, version) {
|
|
398
|
+
const trimmedVersion = version?.trim();
|
|
399
|
+
if (!trimmedVersion)
|
|
400
|
+
return scriptPath;
|
|
401
|
+
const scriptUrl = new URL(scriptPath, window.location.origin);
|
|
402
|
+
scriptUrl.searchParams.set('v', trimmedVersion);
|
|
403
|
+
return `${scriptUrl.pathname}${scriptUrl.search}`;
|
|
404
|
+
}
|
|
359
405
|
async function waitForHealth(args) {
|
|
360
406
|
const started = Date.now();
|
|
361
407
|
while (Date.now() - started < args.timeoutMs) {
|
|
@@ -406,13 +452,26 @@ export async function configureServiceWorkerServer(options) {
|
|
|
406
452
|
return false;
|
|
407
453
|
}
|
|
408
454
|
try {
|
|
409
|
-
|
|
455
|
+
const previousController = navigator.serviceWorker.controller ?? null;
|
|
456
|
+
const versionedScriptPath = versionServiceWorkerScriptPath(options.scriptPath, options.scriptVersion);
|
|
457
|
+
const registration = await navigator.serviceWorker.register(versionedScriptPath, {
|
|
410
458
|
scope: options.scope,
|
|
411
459
|
type: options.type ?? 'module',
|
|
412
460
|
updateViaCache: options.updateViaCache ?? 'none',
|
|
413
461
|
});
|
|
462
|
+
try {
|
|
463
|
+
await registration.update();
|
|
464
|
+
}
|
|
465
|
+
catch {
|
|
466
|
+
// best-effort refresh; continue to health check even if the browser declines
|
|
467
|
+
}
|
|
414
468
|
await navigator.serviceWorker.ready;
|
|
415
|
-
await
|
|
469
|
+
await new Promise((resolve) => setTimeout(resolve, 50));
|
|
470
|
+
if (previousController === null ||
|
|
471
|
+
registration.installing ||
|
|
472
|
+
registration.waiting) {
|
|
473
|
+
await waitForControllerChange(options.controllerTimeoutMs ?? 5_000, previousController);
|
|
474
|
+
}
|
|
416
475
|
const healthy = await waitForHealth({
|
|
417
476
|
path: options.healthPath ?? '/api/health',
|
|
418
477
|
timeoutMs: options.healthTimeoutMs ?? 10_000,
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@syncular/server-service-worker",
|
|
3
|
-
"version": "0.0.6-
|
|
3
|
+
"version": "0.0.6-232",
|
|
4
4
|
"description": "Service Worker server/runtime + wake transport helpers for Syncular",
|
|
5
5
|
"license": "Apache-2.0",
|
|
6
6
|
"author": "Benjamin Kniffler",
|
|
@@ -43,8 +43,8 @@
|
|
|
43
43
|
},
|
|
44
44
|
"sideEffects": false,
|
|
45
45
|
"dependencies": {
|
|
46
|
-
"@syncular/core": "0.0.6-
|
|
47
|
-
"@syncular/transport-http": "0.0.6-
|
|
46
|
+
"@syncular/core": "0.0.6-232",
|
|
47
|
+
"@syncular/transport-http": "0.0.6-232"
|
|
48
48
|
},
|
|
49
49
|
"devDependencies": {
|
|
50
50
|
"@syncular/config": "0.0.0"
|
package/src/index.test.ts
CHANGED
|
@@ -1,9 +1,11 @@
|
|
|
1
|
-
import { describe, expect, test } from 'bun:test';
|
|
1
|
+
import { afterEach, describe, expect, mock, test } from 'bun:test';
|
|
2
2
|
import {
|
|
3
|
+
configureServiceWorkerServer,
|
|
3
4
|
createServiceWorkerServer,
|
|
4
5
|
createSyncWakeMessageResolver,
|
|
5
6
|
isServiceWorkerWakeMessage,
|
|
6
7
|
SERVICE_WORKER_WAKE_MESSAGE_TYPE,
|
|
8
|
+
unregisterServiceWorkerRegistrations,
|
|
7
9
|
} from './index';
|
|
8
10
|
|
|
9
11
|
describe('isServiceWorkerWakeMessage', () => {
|
|
@@ -46,7 +48,13 @@ describe('createSyncWakeMessageResolver', () => {
|
|
|
46
48
|
body: JSON.stringify({
|
|
47
49
|
clientId: 'client-a',
|
|
48
50
|
push: {
|
|
49
|
-
|
|
51
|
+
commits: [
|
|
52
|
+
{
|
|
53
|
+
clientCommitId: 'commit-1',
|
|
54
|
+
operations: [{ table: 'tasks', op: 'upsert' }],
|
|
55
|
+
schemaVersion: 1,
|
|
56
|
+
},
|
|
57
|
+
],
|
|
50
58
|
},
|
|
51
59
|
}),
|
|
52
60
|
});
|
|
@@ -54,8 +62,15 @@ describe('createSyncWakeMessageResolver', () => {
|
|
|
54
62
|
const response = new Response(
|
|
55
63
|
JSON.stringify({
|
|
56
64
|
push: {
|
|
57
|
-
|
|
58
|
-
|
|
65
|
+
ok: true,
|
|
66
|
+
commits: [
|
|
67
|
+
{
|
|
68
|
+
clientCommitId: 'commit-1',
|
|
69
|
+
status: 'applied',
|
|
70
|
+
commitSeq: 42,
|
|
71
|
+
results: [],
|
|
72
|
+
},
|
|
73
|
+
],
|
|
59
74
|
},
|
|
60
75
|
}),
|
|
61
76
|
{
|
|
@@ -78,6 +93,49 @@ describe('createSyncWakeMessageResolver', () => {
|
|
|
78
93
|
expect(wakeMessage?.sourceClientId).toBe('client-a');
|
|
79
94
|
expect(typeof wakeMessage?.timestamp).toBe('number');
|
|
80
95
|
});
|
|
96
|
+
|
|
97
|
+
test('supports legacy single-commit push payloads for wake messages', async () => {
|
|
98
|
+
const resolver = createSyncWakeMessageResolver();
|
|
99
|
+
const request = new Request('https://demo.local/api/sync', {
|
|
100
|
+
method: 'POST',
|
|
101
|
+
headers: {
|
|
102
|
+
'content-type': 'application/json',
|
|
103
|
+
},
|
|
104
|
+
body: JSON.stringify({
|
|
105
|
+
clientId: 'client-a',
|
|
106
|
+
push: {
|
|
107
|
+
clientCommitId: 'commit-legacy',
|
|
108
|
+
operations: [{ table: 'tasks', op: 'upsert' }],
|
|
109
|
+
schemaVersion: 1,
|
|
110
|
+
},
|
|
111
|
+
}),
|
|
112
|
+
});
|
|
113
|
+
|
|
114
|
+
const response = new Response(
|
|
115
|
+
JSON.stringify({
|
|
116
|
+
push: {
|
|
117
|
+
status: 'applied',
|
|
118
|
+
commitSeq: 43,
|
|
119
|
+
},
|
|
120
|
+
}),
|
|
121
|
+
{
|
|
122
|
+
status: 200,
|
|
123
|
+
headers: {
|
|
124
|
+
'content-type': 'application/json',
|
|
125
|
+
},
|
|
126
|
+
}
|
|
127
|
+
);
|
|
128
|
+
|
|
129
|
+
const wakeContext = await resolver.captureContext(request);
|
|
130
|
+
const wakeMessage = await resolver.resolveMessage({
|
|
131
|
+
request,
|
|
132
|
+
response,
|
|
133
|
+
wakeContext,
|
|
134
|
+
});
|
|
135
|
+
|
|
136
|
+
expect(wakeMessage?.cursor).toBe(43);
|
|
137
|
+
expect(wakeMessage?.sourceClientId).toBe('client-a');
|
|
138
|
+
});
|
|
81
139
|
});
|
|
82
140
|
|
|
83
141
|
describe('createServiceWorkerServer', () => {
|
|
@@ -131,7 +189,13 @@ describe('createServiceWorkerServer', () => {
|
|
|
131
189
|
body: JSON.stringify({
|
|
132
190
|
clientId: 'client-x',
|
|
133
191
|
push: {
|
|
134
|
-
|
|
192
|
+
commits: [
|
|
193
|
+
{
|
|
194
|
+
clientCommitId: 'commit-1',
|
|
195
|
+
operations: [{ table: 'tasks', op: 'upsert' }],
|
|
196
|
+
schemaVersion: 1,
|
|
197
|
+
},
|
|
198
|
+
],
|
|
135
199
|
},
|
|
136
200
|
}),
|
|
137
201
|
});
|
|
@@ -148,3 +212,135 @@ describe('createServiceWorkerServer', () => {
|
|
|
148
212
|
expect(wakeMessage?.sourceClientId).toBe('client-x');
|
|
149
213
|
});
|
|
150
214
|
});
|
|
215
|
+
|
|
216
|
+
describe('service worker registration helpers', () => {
|
|
217
|
+
const originalWindow = globalThis.window;
|
|
218
|
+
const originalNavigator = globalThis.navigator;
|
|
219
|
+
|
|
220
|
+
afterEach(() => {
|
|
221
|
+
if (originalWindow) {
|
|
222
|
+
Object.defineProperty(globalThis, 'window', {
|
|
223
|
+
configurable: true,
|
|
224
|
+
value: originalWindow,
|
|
225
|
+
});
|
|
226
|
+
} else {
|
|
227
|
+
// @ts-expect-error test cleanup
|
|
228
|
+
delete globalThis.window;
|
|
229
|
+
}
|
|
230
|
+
|
|
231
|
+
if (originalNavigator) {
|
|
232
|
+
Object.defineProperty(globalThis, 'navigator', {
|
|
233
|
+
configurable: true,
|
|
234
|
+
value: originalNavigator,
|
|
235
|
+
});
|
|
236
|
+
} else {
|
|
237
|
+
// @ts-expect-error test cleanup
|
|
238
|
+
delete globalThis.navigator;
|
|
239
|
+
}
|
|
240
|
+
});
|
|
241
|
+
|
|
242
|
+
test('unregisters versioned service worker registrations by pathname', async () => {
|
|
243
|
+
const unregister = mock(async () => true);
|
|
244
|
+
const registrations = [
|
|
245
|
+
{
|
|
246
|
+
active: {
|
|
247
|
+
scriptURL: 'https://demo.local/__demo/sw-server.js?v=old-release',
|
|
248
|
+
},
|
|
249
|
+
unregister,
|
|
250
|
+
},
|
|
251
|
+
{
|
|
252
|
+
active: {
|
|
253
|
+
scriptURL: 'https://demo.local/__demo/other-worker.js?v=old-release',
|
|
254
|
+
},
|
|
255
|
+
unregister: mock(async () => true),
|
|
256
|
+
},
|
|
257
|
+
];
|
|
258
|
+
|
|
259
|
+
Object.defineProperty(globalThis, 'window', {
|
|
260
|
+
configurable: true,
|
|
261
|
+
value: { location: { origin: 'https://demo.local' } },
|
|
262
|
+
});
|
|
263
|
+
Object.defineProperty(globalThis, 'navigator', {
|
|
264
|
+
configurable: true,
|
|
265
|
+
value: {
|
|
266
|
+
serviceWorker: {
|
|
267
|
+
getRegistrations: async () => registrations,
|
|
268
|
+
},
|
|
269
|
+
},
|
|
270
|
+
});
|
|
271
|
+
|
|
272
|
+
await unregisterServiceWorkerRegistrations(
|
|
273
|
+
'/__demo/sw-server.js?v=current-release'
|
|
274
|
+
);
|
|
275
|
+
|
|
276
|
+
expect(unregister).toHaveBeenCalledTimes(1);
|
|
277
|
+
});
|
|
278
|
+
|
|
279
|
+
test('waits for controller takeover when a pending update exists', async () => {
|
|
280
|
+
const listeners = new Map<string, Set<() => void>>();
|
|
281
|
+
const previousController = {
|
|
282
|
+
scriptURL: 'https://demo.local/__demo/sw-server.js?v=old',
|
|
283
|
+
};
|
|
284
|
+
const nextController = {
|
|
285
|
+
scriptURL: 'https://demo.local/__demo/sw-server.js?v=new',
|
|
286
|
+
};
|
|
287
|
+
let controller: typeof previousController | null = previousController;
|
|
288
|
+
const registration = {
|
|
289
|
+
installing: { scriptURL: nextController.scriptURL },
|
|
290
|
+
waiting: null,
|
|
291
|
+
update: async () => undefined,
|
|
292
|
+
};
|
|
293
|
+
|
|
294
|
+
const serviceWorker = {
|
|
295
|
+
controller,
|
|
296
|
+
ready: Promise.resolve(registration),
|
|
297
|
+
register: async () => registration,
|
|
298
|
+
addEventListener: (type: string, listener: () => void) => {
|
|
299
|
+
const set = listeners.get(type) ?? new Set();
|
|
300
|
+
set.add(listener);
|
|
301
|
+
listeners.set(type, set);
|
|
302
|
+
},
|
|
303
|
+
removeEventListener: (type: string, listener: () => void) => {
|
|
304
|
+
listeners.get(type)?.delete(listener);
|
|
305
|
+
},
|
|
306
|
+
};
|
|
307
|
+
|
|
308
|
+
Object.defineProperty(globalThis, 'window', {
|
|
309
|
+
configurable: true,
|
|
310
|
+
value: { location: { origin: 'https://demo.local' } },
|
|
311
|
+
});
|
|
312
|
+
Object.defineProperty(globalThis, 'navigator', {
|
|
313
|
+
configurable: true,
|
|
314
|
+
value: {
|
|
315
|
+
serviceWorker,
|
|
316
|
+
},
|
|
317
|
+
});
|
|
318
|
+
|
|
319
|
+
const fetchCalls: string[] = [];
|
|
320
|
+
const configurePromise = configureServiceWorkerServer({
|
|
321
|
+
scriptPath: '/__demo/sw-server.js',
|
|
322
|
+
scriptVersion: 'next-release',
|
|
323
|
+
fetchImpl: async (input) => {
|
|
324
|
+
fetchCalls.push(String(input));
|
|
325
|
+
return new Response(null, {
|
|
326
|
+
status: 200,
|
|
327
|
+
headers: { 'x-syncular-sw-server': '1' },
|
|
328
|
+
});
|
|
329
|
+
},
|
|
330
|
+
healthCheck: (response) =>
|
|
331
|
+
response.headers.get('x-syncular-sw-server') === '1',
|
|
332
|
+
logger: {},
|
|
333
|
+
});
|
|
334
|
+
|
|
335
|
+
await Promise.resolve();
|
|
336
|
+
controller = nextController;
|
|
337
|
+
serviceWorker.controller = nextController;
|
|
338
|
+
registration.installing = null;
|
|
339
|
+
listeners.get('controllerchange')?.forEach((listener) => {
|
|
340
|
+
listener();
|
|
341
|
+
});
|
|
342
|
+
|
|
343
|
+
await expect(configurePromise).resolves.toBe(true);
|
|
344
|
+
expect(fetchCalls).toContain('/api/health');
|
|
345
|
+
});
|
|
346
|
+
});
|
package/src/index.ts
CHANGED
|
@@ -260,8 +260,18 @@ async function getSyncPushContext(
|
|
|
260
260
|
const payload = await request.clone().json();
|
|
261
261
|
if (!isRecord(payload)) return null;
|
|
262
262
|
if (!isRecord(payload.push)) return null;
|
|
263
|
-
|
|
264
|
-
|
|
263
|
+
const push = payload.push;
|
|
264
|
+
const hasLegacyOperations =
|
|
265
|
+
Array.isArray(push.operations) && push.operations.length > 0;
|
|
266
|
+
const hasBatchOperations =
|
|
267
|
+
Array.isArray(push.commits) &&
|
|
268
|
+
push.commits.some(
|
|
269
|
+
(commit) =>
|
|
270
|
+
isRecord(commit) &&
|
|
271
|
+
Array.isArray(commit.operations) &&
|
|
272
|
+
commit.operations.length > 0
|
|
273
|
+
);
|
|
274
|
+
if (!hasLegacyOperations && !hasBatchOperations) return null;
|
|
265
275
|
|
|
266
276
|
const sourceClientId =
|
|
267
277
|
typeof payload.clientId === 'string' && payload.clientId.length > 0
|
|
@@ -283,10 +293,33 @@ async function getAppliedCommitCursor(
|
|
|
283
293
|
const payload = await response.clone().json();
|
|
284
294
|
if (!isRecord(payload)) return undefined;
|
|
285
295
|
if (!isRecord(payload.push)) return undefined;
|
|
286
|
-
|
|
296
|
+
const push = payload.push;
|
|
297
|
+
if (Array.isArray(push.commits)) {
|
|
298
|
+
const commitSeqs = push.commits
|
|
299
|
+
.map((commit) => {
|
|
300
|
+
if (!isRecord(commit)) return null;
|
|
301
|
+
if (
|
|
302
|
+
commit.status !== 'applied' &&
|
|
303
|
+
commit.status !== 'cached' &&
|
|
304
|
+
commit.status !== 'rejected'
|
|
305
|
+
) {
|
|
306
|
+
return null;
|
|
307
|
+
}
|
|
308
|
+
return typeof commit.commitSeq === 'number' ? commit.commitSeq : null;
|
|
309
|
+
})
|
|
310
|
+
.filter((commitSeq): commitSeq is number => commitSeq !== null);
|
|
311
|
+
if (commitSeqs.length > 0) {
|
|
312
|
+
return Math.max(...commitSeqs);
|
|
313
|
+
}
|
|
314
|
+
return undefined;
|
|
315
|
+
}
|
|
287
316
|
|
|
288
|
-
if (
|
|
289
|
-
return
|
|
317
|
+
if (push.status !== 'applied' && push.status !== 'cached') {
|
|
318
|
+
return undefined;
|
|
319
|
+
}
|
|
320
|
+
|
|
321
|
+
if (typeof push.commitSeq === 'number') {
|
|
322
|
+
return push.commitSeq;
|
|
290
323
|
}
|
|
291
324
|
|
|
292
325
|
return undefined;
|
|
@@ -520,6 +553,7 @@ export function attachServiceWorkerServer(
|
|
|
520
553
|
|
|
521
554
|
export interface ConfigureServiceWorkerServerOptions {
|
|
522
555
|
scriptPath: string;
|
|
556
|
+
scriptVersion?: string;
|
|
523
557
|
healthPath?: string;
|
|
524
558
|
healthCheck?: (response: Response) => boolean | Promise<boolean>;
|
|
525
559
|
enabled?: boolean;
|
|
@@ -547,30 +581,46 @@ export async function unregisterServiceWorkerRegistrations(
|
|
|
547
581
|
}
|
|
548
582
|
|
|
549
583
|
const registrations = await navigator.serviceWorker.getRegistrations();
|
|
584
|
+
const targetPathname = new URL(scriptPath, window.location.origin).pathname;
|
|
550
585
|
const unregisterTasks = registrations
|
|
551
586
|
.filter((registration) => {
|
|
552
587
|
const scriptUrl =
|
|
553
588
|
registration.active?.scriptURL ??
|
|
554
589
|
registration.waiting?.scriptURL ??
|
|
555
590
|
registration.installing?.scriptURL;
|
|
556
|
-
|
|
591
|
+
if (!scriptUrl) return false;
|
|
592
|
+
try {
|
|
593
|
+
return new URL(scriptUrl).pathname === targetPathname;
|
|
594
|
+
} catch {
|
|
595
|
+
return scriptUrl.includes(targetPathname);
|
|
596
|
+
}
|
|
557
597
|
})
|
|
558
598
|
.map((registration) => registration.unregister());
|
|
559
599
|
|
|
560
600
|
await Promise.all(unregisterTasks);
|
|
561
601
|
}
|
|
562
602
|
|
|
563
|
-
function waitForControllerChange(
|
|
564
|
-
|
|
565
|
-
|
|
566
|
-
|
|
567
|
-
|
|
568
|
-
|
|
603
|
+
function waitForControllerChange(
|
|
604
|
+
timeoutMs: number,
|
|
605
|
+
previousController: ServiceWorker | null
|
|
606
|
+
): Promise<void> {
|
|
607
|
+
if (typeof navigator === 'undefined' || !('serviceWorker' in navigator)) {
|
|
608
|
+
return Promise.resolve();
|
|
609
|
+
}
|
|
610
|
+
|
|
611
|
+
const hasChanged = () =>
|
|
612
|
+
navigator.serviceWorker.controller !== null &&
|
|
613
|
+
navigator.serviceWorker.controller !== previousController;
|
|
614
|
+
|
|
615
|
+
if (hasChanged()) {
|
|
569
616
|
return Promise.resolve();
|
|
570
617
|
}
|
|
571
618
|
|
|
572
619
|
return new Promise((resolve) => {
|
|
573
620
|
const onControllerChange = () => {
|
|
621
|
+
if (!hasChanged()) {
|
|
622
|
+
return;
|
|
623
|
+
}
|
|
574
624
|
clearTimeout(timeoutId);
|
|
575
625
|
navigator.serviceWorker.removeEventListener(
|
|
576
626
|
'controllerchange',
|
|
@@ -594,6 +644,18 @@ function waitForControllerChange(timeoutMs: number): Promise<void> {
|
|
|
594
644
|
});
|
|
595
645
|
}
|
|
596
646
|
|
|
647
|
+
function versionServiceWorkerScriptPath(
|
|
648
|
+
scriptPath: string,
|
|
649
|
+
version: string | undefined
|
|
650
|
+
): string {
|
|
651
|
+
const trimmedVersion = version?.trim();
|
|
652
|
+
if (!trimmedVersion) return scriptPath;
|
|
653
|
+
|
|
654
|
+
const scriptUrl = new URL(scriptPath, window.location.origin);
|
|
655
|
+
scriptUrl.searchParams.set('v', trimmedVersion);
|
|
656
|
+
return `${scriptUrl.pathname}${scriptUrl.search}`;
|
|
657
|
+
}
|
|
658
|
+
|
|
597
659
|
async function waitForHealth(args: {
|
|
598
660
|
path: string;
|
|
599
661
|
timeoutMs: number;
|
|
@@ -663,14 +725,39 @@ export async function configureServiceWorkerServer(
|
|
|
663
725
|
}
|
|
664
726
|
|
|
665
727
|
try {
|
|
666
|
-
|
|
667
|
-
|
|
668
|
-
|
|
669
|
-
|
|
670
|
-
|
|
728
|
+
const previousController = navigator.serviceWorker.controller ?? null;
|
|
729
|
+
const versionedScriptPath = versionServiceWorkerScriptPath(
|
|
730
|
+
options.scriptPath,
|
|
731
|
+
options.scriptVersion
|
|
732
|
+
);
|
|
733
|
+
|
|
734
|
+
const registration = await navigator.serviceWorker.register(
|
|
735
|
+
versionedScriptPath,
|
|
736
|
+
{
|
|
737
|
+
scope: options.scope,
|
|
738
|
+
type: options.type ?? 'module',
|
|
739
|
+
updateViaCache: options.updateViaCache ?? 'none',
|
|
740
|
+
}
|
|
741
|
+
);
|
|
742
|
+
|
|
743
|
+
try {
|
|
744
|
+
await registration.update();
|
|
745
|
+
} catch {
|
|
746
|
+
// best-effort refresh; continue to health check even if the browser declines
|
|
747
|
+
}
|
|
671
748
|
|
|
672
749
|
await navigator.serviceWorker.ready;
|
|
673
|
-
await
|
|
750
|
+
await new Promise((resolve) => setTimeout(resolve, 50));
|
|
751
|
+
if (
|
|
752
|
+
previousController === null ||
|
|
753
|
+
registration.installing ||
|
|
754
|
+
registration.waiting
|
|
755
|
+
) {
|
|
756
|
+
await waitForControllerChange(
|
|
757
|
+
options.controllerTimeoutMs ?? 5_000,
|
|
758
|
+
previousController
|
|
759
|
+
);
|
|
760
|
+
}
|
|
674
761
|
|
|
675
762
|
const healthy = await waitForHealth({
|
|
676
763
|
path: options.healthPath ?? '/api/health',
|