@budarin/pluggable-serviceworker 1.0.3 → 1.0.5
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 +85 -20
- package/dist/index.d.ts +12 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +50 -6
- package/dist/index.js.map +1 -1
- package/package.json +1 -1
- package/src/index.ts +102 -7
package/README.md
CHANGED
|
@@ -97,25 +97,60 @@ initializeServiceWorker([authPlugin, cachePlugin, loggingPlugin]);
|
|
|
97
97
|
|
|
98
98
|
### Обработка ошибок
|
|
99
99
|
|
|
100
|
+
Библиотека предоставляет единый обработчик для всех типов ошибок в Service Worker:
|
|
101
|
+
|
|
100
102
|
```typescript
|
|
101
|
-
import {
|
|
103
|
+
import {
|
|
104
|
+
initializeServiceWorker,
|
|
105
|
+
ServiceWorkerErrorType,
|
|
106
|
+
} from '@budarin/pluggable-serviceworker';
|
|
102
107
|
|
|
103
108
|
const config = {
|
|
104
|
-
onError: (error, event) => {
|
|
105
|
-
console.
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
109
|
+
onError: (error, event, errorType) => {
|
|
110
|
+
console.log(`Ошибка типа "${errorType}":`, error);
|
|
111
|
+
|
|
112
|
+
switch (errorType) {
|
|
113
|
+
case ServiceWorkerErrorType.ERROR:
|
|
114
|
+
// JavaScript ошибки
|
|
115
|
+
console.error('JavaScript error:', error);
|
|
116
|
+
break;
|
|
117
|
+
|
|
118
|
+
case ServiceWorkerErrorType.MESSAGE_ERROR:
|
|
119
|
+
// Ошибки сообщений
|
|
120
|
+
console.error('Message error:', error);
|
|
121
|
+
break;
|
|
122
|
+
|
|
123
|
+
case ServiceWorkerErrorType.UNHANDLED_REJECTION:
|
|
124
|
+
// Необработанные Promise rejection
|
|
125
|
+
console.error('Unhandled promise rejection:', error);
|
|
126
|
+
break;
|
|
127
|
+
|
|
128
|
+
case ServiceWorkerErrorType.REJECTION_HANDLED:
|
|
129
|
+
// Обработанные Promise rejection
|
|
130
|
+
console.log('Promise rejection handled:', error);
|
|
131
|
+
break;
|
|
132
|
+
|
|
133
|
+
case ServiceWorkerErrorType.PLUGIN_ERROR:
|
|
134
|
+
// Ошибки в плагинах
|
|
135
|
+
console.error('Plugin error:', error);
|
|
136
|
+
break;
|
|
137
|
+
|
|
138
|
+
default:
|
|
139
|
+
// Ошибки в обработчиках событий (fetch, install, etc.)
|
|
140
|
+
console.error('Handler error in', event.type, ':', error);
|
|
141
|
+
|
|
142
|
+
// Отправка ошибки в аналитику
|
|
143
|
+
fetch('/api/errors', {
|
|
144
|
+
method: 'POST',
|
|
145
|
+
body: JSON.stringify({
|
|
146
|
+
error: error.message,
|
|
147
|
+
eventType: event.type,
|
|
148
|
+
url: event.request?.url,
|
|
149
|
+
timestamp: Date.now(),
|
|
150
|
+
}),
|
|
151
|
+
}).catch(() => {
|
|
152
|
+
// Игнорируем ошибки отправки логов
|
|
153
|
+
});
|
|
119
154
|
}
|
|
120
155
|
},
|
|
121
156
|
};
|
|
@@ -128,8 +163,32 @@ initializeServiceWorker(
|
|
|
128
163
|
);
|
|
129
164
|
```
|
|
130
165
|
|
|
166
|
+
#### Типы ошибок
|
|
167
|
+
|
|
168
|
+
Используйте enum `ServiceWorkerErrorType` для типизированной обработки ошибок:
|
|
169
|
+
|
|
170
|
+
- **`ServiceWorkerErrorType.ERROR`** - JavaScript ошибки (ErrorEvent)
|
|
171
|
+
- **`ServiceWorkerErrorType.MESSAGE_ERROR`** - Ошибки при обработке сообщений (MessageEvent)
|
|
172
|
+
- **`ServiceWorkerErrorType.UNHANDLED_REJECTION`** - Необработанные Promise rejection
|
|
173
|
+
- **`ServiceWorkerErrorType.REJECTION_HANDLED`** - Обработанные Promise rejection
|
|
174
|
+
- **`ServiceWorkerErrorType.PLUGIN_ERROR`** - Ошибки в обработчиках событий плагинов (fetch, install, etc.)
|
|
175
|
+
|
|
131
176
|
## 🔧 API
|
|
132
177
|
|
|
178
|
+
### ServiceWorkerErrorType
|
|
179
|
+
|
|
180
|
+
Перечисление типов ошибок Service Worker:
|
|
181
|
+
|
|
182
|
+
```typescript
|
|
183
|
+
enum ServiceWorkerErrorType {
|
|
184
|
+
ERROR = 'error', // JavaScript ошибки
|
|
185
|
+
MESSAGE_ERROR = 'messageerror', // Ошибки сообщений
|
|
186
|
+
UNHANDLED_REJECTION = 'unhandledrejection', // Необработанные Promise rejection
|
|
187
|
+
REJECTION_HANDLED = 'rejectionhandled', // Обработанные Promise rejection
|
|
188
|
+
PLUGIN_ERROR = 'plugin_error', // Ошибки в плагинах
|
|
189
|
+
}
|
|
190
|
+
```
|
|
191
|
+
|
|
133
192
|
### ServiceWorkerPlugin
|
|
134
193
|
|
|
135
194
|
Интерфейс плагина:
|
|
@@ -166,7 +225,11 @@ function initializeServiceWorker(
|
|
|
166
225
|
```typescript
|
|
167
226
|
interface ServiceWorkerConfig {
|
|
168
227
|
plugins?: ServiceWorkerPlugin[];
|
|
169
|
-
onError?: (
|
|
228
|
+
onError?: (
|
|
229
|
+
error: Error | any,
|
|
230
|
+
event: Event,
|
|
231
|
+
errorType?: ServiceWorkerErrorType
|
|
232
|
+
) => void;
|
|
170
233
|
}
|
|
171
234
|
```
|
|
172
235
|
|
|
@@ -448,9 +511,11 @@ const analyticsPlugin = {
|
|
|
448
511
|
|
|
449
512
|
## 🛡️ Обработка ошибок
|
|
450
513
|
|
|
451
|
-
-
|
|
452
|
-
-
|
|
453
|
-
-
|
|
514
|
+
- **Единый обработчик** - все типы ошибок обрабатываются через `config.onError`
|
|
515
|
+
- **Типизированные ошибки** - третий параметр `errorType` указывает тип ошибки
|
|
516
|
+
- **Глобальные события** - автоматическая обработка `error`, `messageerror`, `unhandledrejection`, `rejectionhandled`
|
|
517
|
+
- **Изоляция ошибок** - ошибка в одном плагине не останавливает выполнение других
|
|
518
|
+
- **Безопасность** - ошибки в самих обработчиках ошибок логируются в консоль
|
|
454
519
|
|
|
455
520
|
## 📄 Лицензия
|
|
456
521
|
|
package/dist/index.d.ts
CHANGED
|
@@ -1,3 +1,10 @@
|
|
|
1
|
+
export declare enum ServiceWorkerErrorType {
|
|
2
|
+
ERROR = "error",
|
|
3
|
+
MESSAGE_ERROR = "messageerror",
|
|
4
|
+
UNHANDLED_REJECTION = "unhandledrejection",
|
|
5
|
+
REJECTION_HANDLED = "rejectionhandled",
|
|
6
|
+
PLUGIN_ERROR = "plugin_error"
|
|
7
|
+
}
|
|
1
8
|
interface SyncEvent extends ExtendableEvent {
|
|
2
9
|
readonly tag: string;
|
|
3
10
|
readonly lastChance: boolean;
|
|
@@ -26,7 +33,7 @@ interface ServiceWorkerPlugin extends ServiceWorkerEventHandlers {
|
|
|
26
33
|
}
|
|
27
34
|
interface ServiceWorkerConfig {
|
|
28
35
|
plugins?: ServiceWorkerPlugin[];
|
|
29
|
-
onError?: (error: Error, event: Event) => void;
|
|
36
|
+
onError?: (error: Error | any, event: Event, errorType?: ServiceWorkerErrorType) => void;
|
|
30
37
|
}
|
|
31
38
|
export declare function createEventHandlers(plugins: ServiceWorkerPlugin[], config?: ServiceWorkerConfig): {
|
|
32
39
|
install: (event: ExtendableEvent) => void;
|
|
@@ -36,6 +43,10 @@ export declare function createEventHandlers(plugins: ServiceWorkerPlugin[], conf
|
|
|
36
43
|
sync: (event: SyncEvent) => void;
|
|
37
44
|
periodicsync: (event: PeriodicSyncEvent) => void;
|
|
38
45
|
push: (event: PushEvent) => void;
|
|
46
|
+
error: (event: ErrorEvent) => void;
|
|
47
|
+
messageerror: (event: MessageEvent) => void;
|
|
48
|
+
unhandledrejection: (event: PromiseRejectionEvent) => void;
|
|
49
|
+
rejectionhandled: (event: PromiseRejectionEvent) => void;
|
|
39
50
|
};
|
|
40
51
|
export declare function initializeServiceWorker(plugins: ServiceWorkerPlugin[], config?: ServiceWorkerConfig): void;
|
|
41
52
|
export {};
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,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,
|
|
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"}
|
package/dist/index.js
CHANGED
|
@@ -1,3 +1,11 @@
|
|
|
1
|
+
export var ServiceWorkerErrorType;
|
|
2
|
+
(function (ServiceWorkerErrorType) {
|
|
3
|
+
ServiceWorkerErrorType["ERROR"] = "error";
|
|
4
|
+
ServiceWorkerErrorType["MESSAGE_ERROR"] = "messageerror";
|
|
5
|
+
ServiceWorkerErrorType["UNHANDLED_REJECTION"] = "unhandledrejection";
|
|
6
|
+
ServiceWorkerErrorType["REJECTION_HANDLED"] = "rejectionhandled";
|
|
7
|
+
ServiceWorkerErrorType["PLUGIN_ERROR"] = "plugin_error";
|
|
8
|
+
})(ServiceWorkerErrorType || (ServiceWorkerErrorType = {}));
|
|
1
9
|
export function createEventHandlers(plugins, config = {}) {
|
|
2
10
|
const handlers = {
|
|
3
11
|
install: [],
|
|
@@ -32,10 +40,10 @@ export function createEventHandlers(plugins, config = {}) {
|
|
|
32
40
|
});
|
|
33
41
|
return {
|
|
34
42
|
install: (event) => {
|
|
35
|
-
event.waitUntil(Promise.all(handlers.install.map((handler) => Promise.resolve(handler(event)).catch((error) => config.onError?.(error, event)))));
|
|
43
|
+
event.waitUntil(Promise.all(handlers.install.map((handler) => Promise.resolve(handler(event)).catch((error) => config.onError?.(error, event, ServiceWorkerErrorType.PLUGIN_ERROR)))));
|
|
36
44
|
},
|
|
37
45
|
activate: (event) => {
|
|
38
|
-
event.waitUntil(Promise.all(handlers.activate.map((handler) => Promise.resolve(handler(event)).catch((error) => config.onError?.(error, event)))));
|
|
46
|
+
event.waitUntil(Promise.all(handlers.activate.map((handler) => Promise.resolve(handler(event)).catch((error) => config.onError?.(error, event, ServiceWorkerErrorType.PLUGIN_ERROR)))));
|
|
39
47
|
},
|
|
40
48
|
fetch: (event) => {
|
|
41
49
|
event.respondWith((async () => {
|
|
@@ -47,7 +55,7 @@ export function createEventHandlers(plugins, config = {}) {
|
|
|
47
55
|
}
|
|
48
56
|
}
|
|
49
57
|
catch (error) {
|
|
50
|
-
config.onError?.(error, event);
|
|
58
|
+
config.onError?.(error, event, ServiceWorkerErrorType.PLUGIN_ERROR);
|
|
51
59
|
}
|
|
52
60
|
}
|
|
53
61
|
return fetch(event.request);
|
|
@@ -64,10 +72,10 @@ export function createEventHandlers(plugins, config = {}) {
|
|
|
64
72
|
});
|
|
65
73
|
},
|
|
66
74
|
sync: (event) => {
|
|
67
|
-
event.waitUntil(Promise.all(handlers.sync.map((handler) => Promise.resolve(handler(event)).catch((error) => config.onError?.(error, event)))));
|
|
75
|
+
event.waitUntil(Promise.all(handlers.sync.map((handler) => Promise.resolve(handler(event)).catch((error) => config.onError?.(error, event, ServiceWorkerErrorType.PLUGIN_ERROR)))));
|
|
68
76
|
},
|
|
69
77
|
periodicsync: (event) => {
|
|
70
|
-
event.waitUntil(Promise.all(handlers.periodicsync.map((handler) => Promise.resolve(handler(event)).catch((error) => config.onError?.(error, event)))));
|
|
78
|
+
event.waitUntil(Promise.all(handlers.periodicsync.map((handler) => Promise.resolve(handler(event)).catch((error) => config.onError?.(error, event, ServiceWorkerErrorType.PLUGIN_ERROR)))));
|
|
71
79
|
},
|
|
72
80
|
push: (event) => {
|
|
73
81
|
event.waitUntil((async () => {
|
|
@@ -76,11 +84,43 @@ export function createEventHandlers(plugins, config = {}) {
|
|
|
76
84
|
await Promise.resolve(handler(event));
|
|
77
85
|
}
|
|
78
86
|
catch (error) {
|
|
79
|
-
config.onError?.(error, event);
|
|
87
|
+
config.onError?.(error, event, ServiceWorkerErrorType.PLUGIN_ERROR);
|
|
80
88
|
}
|
|
81
89
|
}
|
|
82
90
|
})());
|
|
83
91
|
},
|
|
92
|
+
error: (event) => {
|
|
93
|
+
try {
|
|
94
|
+
config.onError?.(event.error, event, ServiceWorkerErrorType.ERROR);
|
|
95
|
+
}
|
|
96
|
+
catch (error) {
|
|
97
|
+
console.error('Error in error handler:', error);
|
|
98
|
+
}
|
|
99
|
+
},
|
|
100
|
+
messageerror: (event) => {
|
|
101
|
+
try {
|
|
102
|
+
config.onError?.(event.data, event, ServiceWorkerErrorType.MESSAGE_ERROR);
|
|
103
|
+
}
|
|
104
|
+
catch (error) {
|
|
105
|
+
console.error('Error in messageerror handler:', error);
|
|
106
|
+
}
|
|
107
|
+
},
|
|
108
|
+
unhandledrejection: (event) => {
|
|
109
|
+
try {
|
|
110
|
+
config.onError?.(event.reason, event, ServiceWorkerErrorType.UNHANDLED_REJECTION);
|
|
111
|
+
}
|
|
112
|
+
catch (error) {
|
|
113
|
+
console.error('Error in unhandledrejection handler:', error);
|
|
114
|
+
}
|
|
115
|
+
},
|
|
116
|
+
rejectionhandled: (event) => {
|
|
117
|
+
try {
|
|
118
|
+
config.onError?.(event.reason, event, ServiceWorkerErrorType.REJECTION_HANDLED);
|
|
119
|
+
}
|
|
120
|
+
catch (error) {
|
|
121
|
+
console.error('Error in rejectionhandled handler:', error);
|
|
122
|
+
}
|
|
123
|
+
},
|
|
84
124
|
};
|
|
85
125
|
}
|
|
86
126
|
export function initializeServiceWorker(plugins, config) {
|
|
@@ -92,5 +132,9 @@ export function initializeServiceWorker(plugins, config) {
|
|
|
92
132
|
self.addEventListener('sync', handlers.sync);
|
|
93
133
|
self.addEventListener('periodicsync', handlers.periodicsync);
|
|
94
134
|
self.addEventListener('push', handlers.push);
|
|
135
|
+
self.addEventListener('error', handlers.error);
|
|
136
|
+
self.addEventListener('messageerror', handlers.messageerror);
|
|
137
|
+
self.addEventListener('unhandledrejection', handlers.unhandledrejection);
|
|
138
|
+
self.addEventListener('rejectionhandled', handlers.rejectionhandled);
|
|
95
139
|
}
|
|
96
140
|
//# sourceMappingURL=index.js.map
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"
|
|
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
|
@@ -1,3 +1,11 @@
|
|
|
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
|
+
|
|
1
9
|
interface SyncEvent extends ExtendableEvent {
|
|
2
10
|
readonly tag: string;
|
|
3
11
|
readonly lastChance: boolean;
|
|
@@ -32,7 +40,11 @@ interface ServiceWorkerPlugin extends ServiceWorkerEventHandlers {
|
|
|
32
40
|
|
|
33
41
|
interface ServiceWorkerConfig {
|
|
34
42
|
plugins?: ServiceWorkerPlugin[];
|
|
35
|
-
onError?: (
|
|
43
|
+
onError?: (
|
|
44
|
+
error: Error | any,
|
|
45
|
+
event: Event,
|
|
46
|
+
errorType?: ServiceWorkerErrorType
|
|
47
|
+
) => void;
|
|
36
48
|
}
|
|
37
49
|
|
|
38
50
|
type FetchResponse = Promise<Response | null>;
|
|
@@ -48,6 +60,10 @@ export function createEventHandlers(
|
|
|
48
60
|
sync: (event: SyncEvent) => void;
|
|
49
61
|
periodicsync: (event: PeriodicSyncEvent) => void;
|
|
50
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;
|
|
51
67
|
} {
|
|
52
68
|
const handlers = {
|
|
53
69
|
install: [] as ((event: ExtendableEvent) => void | Promise<void>)[],
|
|
@@ -91,7 +107,11 @@ export function createEventHandlers(
|
|
|
91
107
|
handlers.install.map((handler) =>
|
|
92
108
|
Promise.resolve(handler(event)).catch(
|
|
93
109
|
(error: unknown) =>
|
|
94
|
-
config.onError?.(
|
|
110
|
+
config.onError?.(
|
|
111
|
+
error as Error,
|
|
112
|
+
event,
|
|
113
|
+
ServiceWorkerErrorType.PLUGIN_ERROR
|
|
114
|
+
)
|
|
95
115
|
)
|
|
96
116
|
)
|
|
97
117
|
)
|
|
@@ -104,7 +124,11 @@ export function createEventHandlers(
|
|
|
104
124
|
handlers.activate.map((handler) =>
|
|
105
125
|
Promise.resolve(handler(event)).catch(
|
|
106
126
|
(error: unknown) =>
|
|
107
|
-
config.onError?.(
|
|
127
|
+
config.onError?.(
|
|
128
|
+
error as Error,
|
|
129
|
+
event,
|
|
130
|
+
ServiceWorkerErrorType.PLUGIN_ERROR
|
|
131
|
+
)
|
|
108
132
|
)
|
|
109
133
|
)
|
|
110
134
|
)
|
|
@@ -121,7 +145,11 @@ export function createEventHandlers(
|
|
|
121
145
|
return result;
|
|
122
146
|
}
|
|
123
147
|
} catch (error) {
|
|
124
|
-
config.onError?.(
|
|
148
|
+
config.onError?.(
|
|
149
|
+
error as Error,
|
|
150
|
+
event,
|
|
151
|
+
ServiceWorkerErrorType.PLUGIN_ERROR
|
|
152
|
+
);
|
|
125
153
|
}
|
|
126
154
|
}
|
|
127
155
|
return fetch(event.request);
|
|
@@ -145,7 +173,11 @@ export function createEventHandlers(
|
|
|
145
173
|
handlers.sync.map((handler) =>
|
|
146
174
|
Promise.resolve(handler(event)).catch(
|
|
147
175
|
(error: unknown) =>
|
|
148
|
-
config.onError?.(
|
|
176
|
+
config.onError?.(
|
|
177
|
+
error as Error,
|
|
178
|
+
event,
|
|
179
|
+
ServiceWorkerErrorType.PLUGIN_ERROR
|
|
180
|
+
)
|
|
149
181
|
)
|
|
150
182
|
)
|
|
151
183
|
)
|
|
@@ -158,7 +190,11 @@ export function createEventHandlers(
|
|
|
158
190
|
handlers.periodicsync.map((handler) =>
|
|
159
191
|
Promise.resolve(handler(event)).catch(
|
|
160
192
|
(error: unknown) =>
|
|
161
|
-
config.onError?.(
|
|
193
|
+
config.onError?.(
|
|
194
|
+
error as Error,
|
|
195
|
+
event,
|
|
196
|
+
ServiceWorkerErrorType.PLUGIN_ERROR
|
|
197
|
+
)
|
|
162
198
|
)
|
|
163
199
|
)
|
|
164
200
|
)
|
|
@@ -172,12 +208,64 @@ export function createEventHandlers(
|
|
|
172
208
|
try {
|
|
173
209
|
await Promise.resolve(handler(event));
|
|
174
210
|
} catch (error) {
|
|
175
|
-
config.onError?.(
|
|
211
|
+
config.onError?.(
|
|
212
|
+
error as Error,
|
|
213
|
+
event,
|
|
214
|
+
ServiceWorkerErrorType.PLUGIN_ERROR
|
|
215
|
+
);
|
|
176
216
|
}
|
|
177
217
|
}
|
|
178
218
|
})()
|
|
179
219
|
);
|
|
180
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
|
+
},
|
|
181
269
|
};
|
|
182
270
|
}
|
|
183
271
|
|
|
@@ -187,6 +275,7 @@ export function initializeServiceWorker(
|
|
|
187
275
|
): void {
|
|
188
276
|
const handlers = createEventHandlers(plugins, config);
|
|
189
277
|
|
|
278
|
+
// Регистрируем стандартные обработчики событий Service Worker
|
|
190
279
|
self.addEventListener('install', handlers.install);
|
|
191
280
|
self.addEventListener('activate', handlers.activate);
|
|
192
281
|
self.addEventListener('fetch', handlers.fetch);
|
|
@@ -194,4 +283,10 @@ export function initializeServiceWorker(
|
|
|
194
283
|
self.addEventListener('sync', handlers.sync);
|
|
195
284
|
self.addEventListener('periodicsync', handlers.periodicsync);
|
|
196
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);
|
|
197
292
|
}
|