@budarin/pluggable-serviceworker 1.0.6 → 1.0.8
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/README.md +49 -42
- package/dist/index.d.ts +1 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +3 -3
- package/dist/index.js.map +1 -1
- package/package.json +1 -1
- package/src/index.ts +7 -9
package/README.md
CHANGED
|
@@ -7,7 +7,7 @@
|
|
|
7
7
|
## ✨ Особенности
|
|
8
8
|
|
|
9
9
|
- 🔌 **Система плагинов** - модульная архитектура для расширения функциональности
|
|
10
|
-
- 📊
|
|
10
|
+
- 📊 **Порядок выполнения** - предсказуемый контроль порядка выполнения плагинов
|
|
11
11
|
- 🛡️ **Обработка ошибок** - централизованная обработка ошибок
|
|
12
12
|
- 🎯 **TypeScript** - полная поддержка типов
|
|
13
13
|
- 🚀 **Простота использования** - минимальная настройка
|
|
@@ -51,14 +51,14 @@ const cachePlugin = {
|
|
|
51
51
|
initializeServiceWorker([cachePlugin]);
|
|
52
52
|
```
|
|
53
53
|
|
|
54
|
-
### Использование с
|
|
54
|
+
### Использование с порядком выполнения
|
|
55
55
|
|
|
56
56
|
```typescript
|
|
57
57
|
import { initializeServiceWorker } from '@budarin/pluggable-serviceworker';
|
|
58
58
|
|
|
59
59
|
const authPlugin = {
|
|
60
60
|
name: 'auth-plugin',
|
|
61
|
-
|
|
61
|
+
// Без order - выполняется первым (в порядке добавления)
|
|
62
62
|
|
|
63
63
|
fetch: async (event) => {
|
|
64
64
|
// Проверка авторизации для API запросов
|
|
@@ -72,9 +72,19 @@ const authPlugin = {
|
|
|
72
72
|
},
|
|
73
73
|
};
|
|
74
74
|
|
|
75
|
+
const loggingPlugin = {
|
|
76
|
+
name: 'logging-plugin',
|
|
77
|
+
// Без order - выполняется вторым (в порядке добавления)
|
|
78
|
+
|
|
79
|
+
fetch: async (event) => {
|
|
80
|
+
console.log('Запрос:', event.request.url);
|
|
81
|
+
return null;
|
|
82
|
+
},
|
|
83
|
+
};
|
|
84
|
+
|
|
75
85
|
const cachePlugin = {
|
|
76
86
|
name: 'cache-plugin',
|
|
77
|
-
|
|
87
|
+
order: 1, // Выполняется после плагинов без order
|
|
78
88
|
|
|
79
89
|
fetch: async (event) => {
|
|
80
90
|
const cachedResponse = await caches.match(event.request);
|
|
@@ -82,17 +92,25 @@ const cachePlugin = {
|
|
|
82
92
|
},
|
|
83
93
|
};
|
|
84
94
|
|
|
85
|
-
const
|
|
86
|
-
name: '
|
|
87
|
-
|
|
95
|
+
const fallbackPlugin = {
|
|
96
|
+
name: 'fallback-plugin',
|
|
97
|
+
order: 2, // Выполняется последним
|
|
88
98
|
|
|
89
99
|
fetch: async (event) => {
|
|
90
|
-
|
|
100
|
+
// Возвращаем fallback страницу для навигационных запросов
|
|
101
|
+
if (event.request.mode === 'navigate') {
|
|
102
|
+
return caches.match('/offline.html');
|
|
103
|
+
}
|
|
91
104
|
return null;
|
|
92
105
|
},
|
|
93
106
|
};
|
|
94
107
|
|
|
95
|
-
initializeServiceWorker([
|
|
108
|
+
initializeServiceWorker([
|
|
109
|
+
authPlugin,
|
|
110
|
+
loggingPlugin,
|
|
111
|
+
cachePlugin,
|
|
112
|
+
fallbackPlugin,
|
|
113
|
+
]);
|
|
96
114
|
```
|
|
97
115
|
|
|
98
116
|
### Обработка ошибок
|
|
@@ -136,8 +154,8 @@ const config = {
|
|
|
136
154
|
break;
|
|
137
155
|
|
|
138
156
|
default:
|
|
139
|
-
//
|
|
140
|
-
console.error('
|
|
157
|
+
// Неизвестные типы ошибок
|
|
158
|
+
console.error('Unknown error type:', error);
|
|
141
159
|
|
|
142
160
|
// Отправка ошибки в аналитику
|
|
143
161
|
fetch('/api/errors', {
|
|
@@ -171,7 +189,7 @@ initializeServiceWorker(
|
|
|
171
189
|
- _`ServiceWorkerErrorType.MESSAGE_ERROR`_ - Ошибки при обработке сообщений (MessageEvent)
|
|
172
190
|
- _`ServiceWorkerErrorType.UNHANDLED_REJECTION`_ - Необработанные Promise rejection
|
|
173
191
|
- _`ServiceWorkerErrorType.REJECTION_HANDLED`_ - Обработанные Promise rejection
|
|
174
|
-
- _`ServiceWorkerErrorType.PLUGIN_ERROR`_ - Ошибки в
|
|
192
|
+
- _`ServiceWorkerErrorType.PLUGIN_ERROR`_ - Ошибки в плагинах
|
|
175
193
|
|
|
176
194
|
## 🔧 API
|
|
177
195
|
|
|
@@ -196,7 +214,7 @@ enum ServiceWorkerErrorType {
|
|
|
196
214
|
```typescript
|
|
197
215
|
interface ServiceWorkerPlugin {
|
|
198
216
|
name: string; // Уникальное имя плагина
|
|
199
|
-
|
|
217
|
+
order?: number; // Порядок выполнения (плагины без order выполняются первыми)
|
|
200
218
|
install?: (event: ExtendableEvent) => void | Promise<void>;
|
|
201
219
|
activate?: (event: ExtendableEvent) => void | Promise<void>;
|
|
202
220
|
fetch?: (event: FetchEvent) => Promise<Response | null>;
|
|
@@ -240,7 +258,7 @@ interface ServiceWorkerConfig {
|
|
|
240
258
|
```typescript
|
|
241
259
|
const cachePlugin = {
|
|
242
260
|
name: 'advanced-cache',
|
|
243
|
-
|
|
261
|
+
order: 1,
|
|
244
262
|
|
|
245
263
|
install: async (event) => {
|
|
246
264
|
const cache = await caches.open('app-cache-v1');
|
|
@@ -364,46 +382,35 @@ async function doPeriodicSync() {
|
|
|
364
382
|
console.error('Ошибка периодической синхронизации:', error);
|
|
365
383
|
}
|
|
366
384
|
}
|
|
367
|
-
|
|
368
|
-
// Регистрация синхронизации из основного потока (main thread):
|
|
369
|
-
//
|
|
370
|
-
// // Фоновая синхронизация (одноразовая)
|
|
371
|
-
// navigator.serviceWorker.ready.then(registration => {
|
|
372
|
-
// return registration.sync.register('sync-data');
|
|
373
|
-
// });
|
|
374
|
-
//
|
|
375
|
-
// // Периодическая синхронизация (требует разрешения)
|
|
376
|
-
// navigator.serviceWorker.ready.then(async registration => {
|
|
377
|
-
// const status = await navigator.permissions.query({ name: 'periodic-background-sync' });
|
|
378
|
-
// if (status.state === 'granted') {
|
|
379
|
-
// await registration.periodicSync.register('content-sync', {
|
|
380
|
-
// minInterval: 24 * 60 * 60 * 1000 // 24 часа
|
|
381
|
-
// });
|
|
382
|
-
// }
|
|
383
|
-
// });
|
|
384
385
|
```
|
|
385
386
|
|
|
386
387
|
## 🎯 Порядок выполнения
|
|
387
388
|
|
|
388
389
|
Плагины выполняются в следующем порядке:
|
|
389
390
|
|
|
390
|
-
1.
|
|
391
|
-
2.
|
|
391
|
+
1. **Сначала ВСЕ плагины без `order`** - в том порядке, в котором они были добавлены
|
|
392
|
+
2. **Затем плагины с `order`** - в порядке возрастания значений `order`
|
|
392
393
|
|
|
393
394
|
### Пример:
|
|
394
395
|
|
|
395
396
|
```typescript
|
|
396
397
|
const plugins = [
|
|
397
|
-
{ name: '
|
|
398
|
-
{ name: '
|
|
399
|
-
{ name: '
|
|
400
|
-
{ name: '
|
|
401
|
-
{ name: 'fifth' }, // без
|
|
398
|
+
{ name: 'first' }, // без order - выполняется первым
|
|
399
|
+
{ name: 'fourth', order: 2 },
|
|
400
|
+
{ name: 'second' }, // без order - выполняется вторым
|
|
401
|
+
{ name: 'third', order: 1 },
|
|
402
|
+
{ name: 'fifth' }, // без order - выполняется третьим
|
|
402
403
|
];
|
|
403
404
|
|
|
404
|
-
// Порядок выполнения: first → second →
|
|
405
|
+
// Порядок выполнения: first → second → fifth → third → fourth
|
|
405
406
|
```
|
|
406
407
|
|
|
408
|
+
**Преимущества новой системы:**
|
|
409
|
+
|
|
410
|
+
- 🎯 **Предсказуемость** - плагины без `order` всегда выполняются первыми
|
|
411
|
+
- 🔧 **Простота** - не нужно знать, какие номера уже заняты
|
|
412
|
+
- 📈 **Масштабируемость** - легко добавлять новые плагины в нужном порядке
|
|
413
|
+
|
|
407
414
|
## ⚡ Логика выполнения обработчиков
|
|
408
415
|
|
|
409
416
|
Разные типы событий Service Worker обрабатываются по-разному в зависимости от их специфики:
|
|
@@ -450,7 +457,7 @@ const installPlugin2 = {
|
|
|
450
457
|
```typescript
|
|
451
458
|
const authPlugin = {
|
|
452
459
|
name: 'auth',
|
|
453
|
-
|
|
460
|
+
// Без order - выполняется первым
|
|
454
461
|
fetch: async (event) => {
|
|
455
462
|
if (needsAuth(event.request)) {
|
|
456
463
|
return new Response('Unauthorized', { status: 401 }); // Прерывает цепочку
|
|
@@ -461,13 +468,13 @@ const authPlugin = {
|
|
|
461
468
|
|
|
462
469
|
const cachePlugin = {
|
|
463
470
|
name: 'cache',
|
|
464
|
-
|
|
471
|
+
order: 1, // Выполняется после плагинов без order
|
|
465
472
|
fetch: async (event) => {
|
|
466
473
|
return await caches.match(event.request); // Может вернуть Response или null
|
|
467
474
|
},
|
|
468
475
|
};
|
|
469
476
|
|
|
470
|
-
// Выполнение: auth → cache → fetch(event.request) если все вернули null
|
|
477
|
+
// Выполнение: auth (без order) → cache (order: 1) → fetch(event.request) если все вернули null
|
|
471
478
|
```
|
|
472
479
|
|
|
473
480
|
#### Push - без прерывания
|
package/dist/index.d.ts
CHANGED
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,oBAAY,sBAAsB;IAC9B,KAAK,UAAU;IACf,aAAa,iBAAiB;IAC9B,mBAAmB,uBAAuB;IAC1C,iBAAiB,qBAAqB;IACtC,YAAY,iBAAiB;CAChC;AAED,UAAU,SAAU,SAAQ,eAAe;IACvC,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,UAAU,EAAE,OAAO,CAAC;CAChC;AAED,UAAU,iBAAkB,SAAQ,eAAe;IAC/C,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;CACxB;AAGD,OAAO,CAAC,MAAM,CAAC;IACX,UAAU,gCAAgC;QACtC,IAAI,EAAE,SAAS,CAAC;QAChB,YAAY,EAAE,iBAAiB,CAAC;KACnC;CACJ;AAED,UAAU,0BAA0B;IAChC,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,eAAe,KAAK,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAC3D,QAAQ,CAAC,EAAE,CAAC,KAAK,EAAE,eAAe,KAAK,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAC5D,KAAK,CAAC,EAAE,CAAC,KAAK,EAAE,UAAU,KAAK,OAAO,CAAC,QAAQ,GAAG,IAAI,CAAC,CAAC;IACxD,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,YAAY,KAAK,IAAI,CAAC;IACxC,IAAI,CAAC,EAAE,CAAC,KAAK,EAAE,SAAS,KAAK,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAClD,YAAY,CAAC,EAAE,CAAC,KAAK,EAAE,iBAAiB,KAAK,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAClE,IAAI,CAAC,EAAE,CAAC,KAAK,EAAE,SAAS,KAAK,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;CACrD;AAED,UAAU,mBAAoB,SAAQ,0BAA0B;IAC5D,IAAI,EAAE,MAAM,CAAC;IACb,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,oBAAY,sBAAsB;IAC9B,KAAK,UAAU;IACf,aAAa,iBAAiB;IAC9B,mBAAmB,uBAAuB;IAC1C,iBAAiB,qBAAqB;IACtC,YAAY,iBAAiB;CAChC;AAED,UAAU,SAAU,SAAQ,eAAe;IACvC,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,UAAU,EAAE,OAAO,CAAC;CAChC;AAED,UAAU,iBAAkB,SAAQ,eAAe;IAC/C,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;CACxB;AAGD,OAAO,CAAC,MAAM,CAAC;IACX,UAAU,gCAAgC;QACtC,IAAI,EAAE,SAAS,CAAC;QAChB,YAAY,EAAE,iBAAiB,CAAC;KACnC;CACJ;AAED,UAAU,0BAA0B;IAChC,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,eAAe,KAAK,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAC3D,QAAQ,CAAC,EAAE,CAAC,KAAK,EAAE,eAAe,KAAK,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAC5D,KAAK,CAAC,EAAE,CAAC,KAAK,EAAE,UAAU,KAAK,OAAO,CAAC,QAAQ,GAAG,IAAI,CAAC,CAAC;IACxD,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,YAAY,KAAK,IAAI,CAAC;IACxC,IAAI,CAAC,EAAE,CAAC,KAAK,EAAE,SAAS,KAAK,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAClD,YAAY,CAAC,EAAE,CAAC,KAAK,EAAE,iBAAiB,KAAK,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAClE,IAAI,CAAC,EAAE,CAAC,KAAK,EAAE,SAAS,KAAK,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;CACrD;AAED,UAAU,mBAAoB,SAAQ,0BAA0B;IAC5D,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,UAAU,mBAAmB;IACzB,OAAO,CAAC,EAAE,mBAAmB,EAAE,CAAC;IAChC,OAAO,CAAC,EAAE,CACN,KAAK,EAAE,KAAK,GAAG,GAAG,EAClB,KAAK,EAAE,KAAK,EACZ,SAAS,CAAC,EAAE,sBAAsB,KACjC,IAAI,CAAC;CACb;AAID,wBAAgB,mBAAmB,CAC/B,OAAO,EAAE,mBAAmB,EAAE,EAC9B,MAAM,GAAE,mBAAwB,GACjC;IACC,OAAO,EAAE,CAAC,KAAK,EAAE,eAAe,KAAK,IAAI,CAAC;IAC1C,QAAQ,EAAE,CAAC,KAAK,EAAE,eAAe,KAAK,IAAI,CAAC;IAC3C,KAAK,EAAE,CAAC,KAAK,EAAE,UAAU,KAAK,IAAI,CAAC;IACnC,OAAO,EAAE,CAAC,KAAK,EAAE,YAAY,KAAK,IAAI,CAAC;IACvC,IAAI,EAAE,CAAC,KAAK,EAAE,SAAS,KAAK,IAAI,CAAC;IACjC,YAAY,EAAE,CAAC,KAAK,EAAE,iBAAiB,KAAK,IAAI,CAAC;IACjD,IAAI,EAAE,CAAC,KAAK,EAAE,SAAS,KAAK,IAAI,CAAC;IACjC,KAAK,EAAE,CAAC,KAAK,EAAE,UAAU,KAAK,IAAI,CAAC;IACnC,YAAY,EAAE,CAAC,KAAK,EAAE,YAAY,KAAK,IAAI,CAAC;IAC5C,kBAAkB,EAAE,CAAC,KAAK,EAAE,qBAAqB,KAAK,IAAI,CAAC;IAC3D,gBAAgB,EAAE,CAAC,KAAK,EAAE,qBAAqB,KAAK,IAAI,CAAC;CAC5D,CAyMA;AAED,wBAAgB,uBAAuB,CACnC,OAAO,EAAE,mBAAmB,EAAE,EAC9B,MAAM,CAAC,EAAE,mBAAmB,GAC7B,IAAI,CAiBN"}
|
package/dist/index.js
CHANGED
|
@@ -17,10 +17,10 @@ export function createEventHandlers(plugins, config = {}) {
|
|
|
17
17
|
push: [],
|
|
18
18
|
};
|
|
19
19
|
const sortedPlugins = [
|
|
20
|
+
...plugins.filter((plugin) => plugin.order === undefined),
|
|
20
21
|
...plugins
|
|
21
|
-
.filter((plugin) => plugin.
|
|
22
|
-
.sort((a, b) => (a.
|
|
23
|
-
...plugins.filter((plugin) => plugin.priority === undefined),
|
|
22
|
+
.filter((plugin) => plugin.order !== undefined)
|
|
23
|
+
.sort((a, b) => (a.order ?? 0) - (b.order ?? 0)),
|
|
24
24
|
];
|
|
25
25
|
sortedPlugins.forEach((plugin) => {
|
|
26
26
|
if (plugin.install)
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,MAAM,CAAN,IAAY,sBAMX;AAND,WAAY,sBAAsB;IAC9B,yCAAe,CAAA;IACf,wDAA8B,CAAA;IAC9B,oEAA0C,CAAA;IAC1C,gEAAsC,CAAA;IACtC,uDAA6B,CAAA;AACjC,CAAC,EANW,sBAAsB,KAAtB,sBAAsB,QAMjC;AA6CD,MAAM,UAAU,mBAAmB,CAC/B,OAA8B,EAC9B,SAA8B,EAAE;IAchC,MAAM,QAAQ,GAAG;QACb,OAAO,EAAE,EAA0D;QACnE,QAAQ,EAAE,EAA0D;QACpE,KAAK,EAAE,EAA8C;QACrD,OAAO,EAAE,EAAuC;QAChD,IAAI,EAAE,EAAoD;QAC1D,YAAY,EAAE,EAEc;QAC5B,IAAI,EAAE,EAAoD;KAC7D,CAAC;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
package/src/index.ts
CHANGED
|
@@ -35,7 +35,7 @@ interface ServiceWorkerEventHandlers {
|
|
|
35
35
|
|
|
36
36
|
interface ServiceWorkerPlugin extends ServiceWorkerEventHandlers {
|
|
37
37
|
name: string;
|
|
38
|
-
|
|
38
|
+
order?: number;
|
|
39
39
|
}
|
|
40
40
|
|
|
41
41
|
interface ServiceWorkerConfig {
|
|
@@ -77,16 +77,14 @@ export function createEventHandlers(
|
|
|
77
77
|
push: [] as ((event: PushEvent) => void | Promise<void>)[],
|
|
78
78
|
};
|
|
79
79
|
|
|
80
|
-
//
|
|
81
|
-
// Сначала
|
|
82
|
-
//
|
|
83
|
-
// После отсортированных по приоритету плагинов добавляются все остальные плагины,
|
|
84
|
-
// у которых priority не указан (plugin.priority === undefined), сохраняя их исходный порядок.
|
|
80
|
+
// Сортировка плагинов по порядку выполнения:
|
|
81
|
+
// 1. Сначала выполняются ВСЕ плагины без order (undefined) в том порядке, в котором они были добавлены
|
|
82
|
+
// 2. Затем выполняются плагины с order в порядке возрастания значений order
|
|
85
83
|
const sortedPlugins = [
|
|
84
|
+
...plugins.filter((plugin) => plugin.order === undefined),
|
|
86
85
|
...plugins
|
|
87
|
-
.filter((plugin) => plugin.
|
|
88
|
-
.sort((a, b) => (a.
|
|
89
|
-
...plugins.filter((plugin) => plugin.priority === undefined),
|
|
86
|
+
.filter((plugin) => plugin.order !== undefined)
|
|
87
|
+
.sort((a, b) => (a.order ?? 0) - (b.order ?? 0)),
|
|
90
88
|
];
|
|
91
89
|
|
|
92
90
|
sortedPlugins.forEach((plugin) => {
|