@budarin/pluggable-serviceworker 1.0.7 → 1.0.9

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 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
- priority: 1, // Выполняется первым
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
- priority: 2, // Выполняется вторым
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 loggingPlugin = {
86
- name: 'logging-plugin',
87
- // Без приоритета - выполняется последним
95
+ const fallbackPlugin = {
96
+ name: 'fallback-plugin',
97
+ order: 2, // Выполняется последним
88
98
 
89
99
  fetch: async (event) => {
90
- console.log('Запрос:', event.request.url);
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([authPlugin, cachePlugin, loggingPlugin]);
108
+ initializeServiceWorker([
109
+ authPlugin,
110
+ loggingPlugin,
111
+ cachePlugin,
112
+ fallbackPlugin,
113
+ ]);
96
114
  ```
97
115
 
98
116
  ### Обработка ошибок
@@ -196,7 +214,7 @@ enum ServiceWorkerErrorType {
196
214
  ```typescript
197
215
  interface ServiceWorkerPlugin {
198
216
  name: string; // Уникальное имя плагина
199
- priority?: number; // Приоритет выполнения (меньше = раньше)
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
- priority: 10,
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. **Плагины с приоритетом** - сортируются по возрастанию значения `priority`
391
- 2. **Плагины без приоритета** - выполняются в порядке добавления
391
+ 1. **Сначала ВСЕ плагины без `order`** - в том порядке, в котором они были добавлены
392
+ 2. **Затем плагины с `order`** - в порядке возрастания значений `order`
392
393
 
393
394
  ### Пример:
394
395
 
395
396
  ```typescript
396
397
  const plugins = [
397
- { name: 'third', priority: 30 },
398
- { name: 'first', priority: 10 },
399
- { name: 'fourth' }, // без приоритета
400
- { name: 'second', priority: 20 },
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 → thirdfourthfifth
405
+ // Порядок выполнения: first → second → fifththirdfourth
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
- priority: 1,
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
- priority: 2,
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
@@ -29,7 +29,7 @@ interface ServiceWorkerEventHandlers {
29
29
  }
30
30
  interface ServiceWorkerPlugin extends ServiceWorkerEventHandlers {
31
31
  name: string;
32
- priority?: number;
32
+ order?: number;
33
33
  }
34
34
  interface ServiceWorkerConfig {
35
35
  plugins?: ServiceWorkerPlugin[];
@@ -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,QAAQ,CAAC,EAAE,MAAM,CAAC;CACrB;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,CA2MA;AAED,wBAAgB,uBAAuB,CACnC,OAAO,EAAE,mBAAmB,EAAE,EAC9B,MAAM,CAAC,EAAE,mBAAmB,GAC7B,IAAI,CAiBN"}
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.priority !== undefined)
22
- .sort((a, b) => (a.priority ?? 0) - (b.priority ?? 0)),
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":"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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": "@budarin/pluggable-serviceworker",
3
- "version": "1.0.7",
3
+ "version": "1.0.9",
4
4
  "description": "Extensible via plugins service worker",
5
5
  "keywords": [
6
6
  "serviceworker",
package/.prettierignore DELETED
@@ -1,3 +0,0 @@
1
- .vscode
2
- # dist
3
- node_modules
package/.prettierrc.mjs DELETED
@@ -1,14 +0,0 @@
1
- /**
2
- * @see https://prettier.io/docs/en/configuration.html
3
- * @type {import("prettier").Config}
4
- */
5
- const config = {
6
- trailingComma: 'es5',
7
- tabWidth: 4,
8
- // semi: false,
9
- singleQuote: true,
10
- plugins: [],
11
- htmlWhitespaceSensitivity: 'ignore',
12
- };
13
-
14
- export default config;
package/src/index.ts DELETED
@@ -1,292 +0,0 @@
1
- export enum ServiceWorkerErrorType {
2
- ERROR = 'error',
3
- MESSAGE_ERROR = 'messageerror',
4
- UNHANDLED_REJECTION = 'unhandledrejection',
5
- REJECTION_HANDLED = 'rejectionhandled',
6
- PLUGIN_ERROR = 'plugin_error',
7
- }
8
-
9
- interface SyncEvent extends ExtendableEvent {
10
- readonly tag: string;
11
- readonly lastChance: boolean;
12
- }
13
-
14
- interface PeriodicSyncEvent extends ExtendableEvent {
15
- readonly tag: string;
16
- }
17
-
18
- // Extend ServiceWorkerGlobalScope to include sync events
19
- declare global {
20
- interface ServiceWorkerGlobalScopeEventMap {
21
- sync: SyncEvent;
22
- periodicsync: PeriodicSyncEvent;
23
- }
24
- }
25
-
26
- interface ServiceWorkerEventHandlers {
27
- install?: (event: ExtendableEvent) => void | Promise<void>;
28
- activate?: (event: ExtendableEvent) => void | Promise<void>;
29
- fetch?: (event: FetchEvent) => Promise<Response | null>;
30
- message?: (event: MessageEvent) => void;
31
- sync?: (event: SyncEvent) => void | Promise<void>;
32
- periodicsync?: (event: PeriodicSyncEvent) => void | Promise<void>;
33
- push?: (event: PushEvent) => void | Promise<void>;
34
- }
35
-
36
- interface ServiceWorkerPlugin extends ServiceWorkerEventHandlers {
37
- name: string;
38
- priority?: number;
39
- }
40
-
41
- interface ServiceWorkerConfig {
42
- plugins?: ServiceWorkerPlugin[];
43
- onError?: (
44
- error: Error | any,
45
- event: Event,
46
- errorType?: ServiceWorkerErrorType
47
- ) => void;
48
- }
49
-
50
- type FetchResponse = Promise<Response | null>;
51
-
52
- export function createEventHandlers(
53
- plugins: ServiceWorkerPlugin[],
54
- config: ServiceWorkerConfig = {}
55
- ): {
56
- install: (event: ExtendableEvent) => void;
57
- activate: (event: ExtendableEvent) => void;
58
- fetch: (event: FetchEvent) => void;
59
- message: (event: MessageEvent) => void;
60
- sync: (event: SyncEvent) => void;
61
- periodicsync: (event: PeriodicSyncEvent) => void;
62
- push: (event: PushEvent) => void;
63
- error: (event: ErrorEvent) => void;
64
- messageerror: (event: MessageEvent) => void;
65
- unhandledrejection: (event: PromiseRejectionEvent) => void;
66
- rejectionhandled: (event: PromiseRejectionEvent) => void;
67
- } {
68
- const handlers = {
69
- install: [] as ((event: ExtendableEvent) => void | Promise<void>)[],
70
- activate: [] as ((event: ExtendableEvent) => void | Promise<void>)[],
71
- fetch: [] as ((event: FetchEvent) => FetchResponse)[],
72
- message: [] as ((event: MessageEvent) => void)[],
73
- sync: [] as ((event: SyncEvent) => void | Promise<void>)[],
74
- periodicsync: [] as ((
75
- event: PeriodicSyncEvent
76
- ) => void | Promise<void>)[],
77
- push: [] as ((event: PushEvent) => void | Promise<void>)[],
78
- };
79
-
80
- // Здесь происходит сортировка плагинов по их приоритету.
81
- // Сначала выбираются плагины, у которых явно указан priority (plugin.priority !== undefined),
82
- // затем они сортируются по возрастанию этого значения (меньший priority — выше в списке).
83
- // После отсортированных по приоритету плагинов добавляются все остальные плагины,
84
- // у которых priority не указан (plugin.priority === undefined), сохраняя их исходный порядок.
85
- const sortedPlugins = [
86
- ...plugins
87
- .filter((plugin) => plugin.priority !== undefined)
88
- .sort((a, b) => (a.priority ?? 0) - (b.priority ?? 0)),
89
- ...plugins.filter((plugin) => plugin.priority === undefined),
90
- ];
91
-
92
- sortedPlugins.forEach((plugin) => {
93
- if (plugin.install) handlers.install.push(plugin.install);
94
- if (plugin.activate) handlers.activate.push(plugin.activate);
95
- if (plugin.fetch) handlers.fetch.push(plugin.fetch);
96
- if (plugin.message) handlers.message.push(plugin.message);
97
- if (plugin.sync) handlers.sync.push(plugin.sync);
98
- if (plugin.periodicsync)
99
- handlers.periodicsync.push(plugin.periodicsync);
100
- if (plugin.push) handlers.push.push(plugin.push);
101
- });
102
-
103
- return {
104
- install: (event: ExtendableEvent): void => {
105
- event.waitUntil(
106
- Promise.all(
107
- handlers.install.map((handler) =>
108
- Promise.resolve(handler(event)).catch(
109
- (error: unknown) =>
110
- config.onError?.(
111
- error as Error,
112
- event,
113
- ServiceWorkerErrorType.PLUGIN_ERROR
114
- )
115
- )
116
- )
117
- )
118
- );
119
- },
120
-
121
- activate: (event: ExtendableEvent): void => {
122
- event.waitUntil(
123
- Promise.all(
124
- handlers.activate.map((handler) =>
125
- Promise.resolve(handler(event)).catch(
126
- (error: unknown) =>
127
- config.onError?.(
128
- error as Error,
129
- event,
130
- ServiceWorkerErrorType.PLUGIN_ERROR
131
- )
132
- )
133
- )
134
- )
135
- );
136
- },
137
-
138
- fetch: (event: FetchEvent): void => {
139
- event.respondWith(
140
- (async (): Promise<Response> => {
141
- for (const handler of handlers.fetch) {
142
- try {
143
- const result = await handler(event);
144
- if (result) {
145
- return result;
146
- }
147
- } catch (error) {
148
- config.onError?.(
149
- error as Error,
150
- event,
151
- ServiceWorkerErrorType.PLUGIN_ERROR
152
- );
153
- }
154
- }
155
- return fetch(event.request);
156
- })()
157
- );
158
- },
159
-
160
- message: (event: MessageEvent): void => {
161
- handlers.message.forEach((handler) => {
162
- try {
163
- handler(event);
164
- } catch (error) {
165
- config.onError?.(error as Error, event);
166
- }
167
- });
168
- },
169
-
170
- sync: (event: SyncEvent): void => {
171
- event.waitUntil(
172
- Promise.all(
173
- handlers.sync.map((handler) =>
174
- Promise.resolve(handler(event)).catch(
175
- (error: unknown) =>
176
- config.onError?.(
177
- error as Error,
178
- event,
179
- ServiceWorkerErrorType.PLUGIN_ERROR
180
- )
181
- )
182
- )
183
- )
184
- );
185
- },
186
-
187
- periodicsync: (event: PeriodicSyncEvent): void => {
188
- event.waitUntil(
189
- Promise.all(
190
- handlers.periodicsync.map((handler) =>
191
- Promise.resolve(handler(event)).catch(
192
- (error: unknown) =>
193
- config.onError?.(
194
- error as Error,
195
- event,
196
- ServiceWorkerErrorType.PLUGIN_ERROR
197
- )
198
- )
199
- )
200
- )
201
- );
202
- },
203
-
204
- push: (event: PushEvent): void => {
205
- event.waitUntil(
206
- (async (): Promise<void> => {
207
- for (const handler of handlers.push) {
208
- try {
209
- await Promise.resolve(handler(event));
210
- } catch (error) {
211
- config.onError?.(
212
- error as Error,
213
- event,
214
- ServiceWorkerErrorType.PLUGIN_ERROR
215
- );
216
- }
217
- }
218
- })()
219
- );
220
- },
221
-
222
- error: (event: ErrorEvent): void => {
223
- try {
224
- config.onError?.(
225
- event.error,
226
- event,
227
- ServiceWorkerErrorType.ERROR
228
- );
229
- } catch (error) {
230
- console.error('Error in error handler:', error);
231
- }
232
- },
233
-
234
- messageerror: (event: MessageEvent): void => {
235
- try {
236
- config.onError?.(
237
- event.data,
238
- event,
239
- ServiceWorkerErrorType.MESSAGE_ERROR
240
- );
241
- } catch (error) {
242
- console.error('Error in messageerror handler:', error);
243
- }
244
- },
245
-
246
- unhandledrejection: (event: PromiseRejectionEvent): void => {
247
- try {
248
- config.onError?.(
249
- event.reason,
250
- event,
251
- ServiceWorkerErrorType.UNHANDLED_REJECTION
252
- );
253
- } catch (error) {
254
- console.error('Error in unhandledrejection handler:', error);
255
- }
256
- },
257
-
258
- rejectionhandled: (event: PromiseRejectionEvent): void => {
259
- try {
260
- config.onError?.(
261
- event.reason,
262
- event,
263
- ServiceWorkerErrorType.REJECTION_HANDLED
264
- );
265
- } catch (error) {
266
- console.error('Error in rejectionhandled handler:', error);
267
- }
268
- },
269
- };
270
- }
271
-
272
- export function initializeServiceWorker(
273
- plugins: ServiceWorkerPlugin[],
274
- config?: ServiceWorkerConfig
275
- ): void {
276
- const handlers = createEventHandlers(plugins, config);
277
-
278
- // Регистрируем стандартные обработчики событий Service Worker
279
- self.addEventListener('install', handlers.install);
280
- self.addEventListener('activate', handlers.activate);
281
- self.addEventListener('fetch', handlers.fetch);
282
- self.addEventListener('message', handlers.message);
283
- self.addEventListener('sync', handlers.sync);
284
- self.addEventListener('periodicsync', handlers.periodicsync);
285
- self.addEventListener('push', handlers.push);
286
-
287
- // Регистрируем глобальные обработчики ошибок
288
- self.addEventListener('error', handlers.error);
289
- self.addEventListener('messageerror', handlers.messageerror);
290
- self.addEventListener('unhandledrejection', handlers.unhandledrejection);
291
- self.addEventListener('rejectionhandled', handlers.rejectionhandled);
292
- }
package/tsconfig.json DELETED
@@ -1,44 +0,0 @@
1
- {
2
- // Visit https://aka.ms/tsconfig to read more about this file
3
- "compilerOptions": {
4
- // File Layout
5
- "rootDir": "./src",
6
- "outDir": "./dist",
7
-
8
- // Environment Settings
9
- // See also https://aka.ms/tsconfig/module
10
- "module": "nodenext",
11
- "target": "esnext",
12
- // For nodejs:
13
- "lib": ["esnext"],
14
- "types": ["node", "serviceworker", "web"],
15
- // and npm install -D @types/node
16
-
17
- // Other Outputs
18
- "sourceMap": true,
19
- "declaration": true,
20
- "declarationMap": true,
21
-
22
- // Stricter Typechecking Options
23
- "noUncheckedIndexedAccess": true,
24
- "exactOptionalPropertyTypes": true,
25
-
26
- // Style Options
27
- "noImplicitReturns": true,
28
- "noImplicitOverride": true,
29
- "noUnusedLocals": true,
30
- "noUnusedParameters": true,
31
- "noFallthroughCasesInSwitch": true,
32
- "noPropertyAccessFromIndexSignature": true,
33
-
34
- // Recommended Options
35
- "strict": true,
36
- "jsx": "react-jsx",
37
- "verbatimModuleSyntax": true,
38
- "isolatedModules": true,
39
- "noUncheckedSideEffectImports": true,
40
- "moduleDetection": "force",
41
- "skipLibCheck": true,
42
- "removeComments": true
43
- }
44
- }