@budarin/pluggable-serviceworker 1.5.2 → 1.5.4

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.
Files changed (2) hide show
  1. package/README.md +27 -57
  2. package/package.json +1 -1
package/README.md CHANGED
@@ -77,17 +77,16 @@ pnpm add @budarin/pluggable-serviceworker
77
77
  ### Базовое использование
78
78
 
79
79
  ```typescript
80
- // sw.js
80
+ // precacheAndServePlugin.js
81
81
  import {
82
- type PluginContext,
83
- type ServiceWorkerPlugin,
82
+ type Plugin,
84
83
  initServiceWorker,
85
84
  } from '@budarin/pluggable-serviceworker';
86
85
 
87
- function precacheAndServePlugin(config: {
86
+ export function precacheAndServePlugin(config: {
88
87
  cacheName: string;
89
88
  assets: string[];
90
- }): ServiceWorkerPlugin<PluginContext> {
89
+ }): Plugin {
91
90
  const { cacheName, assets } = config;
92
91
 
93
92
  return {
@@ -116,6 +115,11 @@ function precacheAndServePlugin(config: {
116
115
  },
117
116
  };
118
117
  }
118
+ ```
119
+
120
+ ```typescript
121
+ // sw.ts
122
+ import { precacheAndServePlugin } from './precacheAndServePlugin';
119
123
 
120
124
  initServiceWorker([
121
125
  precacheAndServePlugin({
@@ -125,22 +129,11 @@ initServiceWorker([
125
129
  ]);
126
130
  ```
127
131
 
128
- **Важно:**
129
-
130
- - для `fetch` плагину не нужно самому вызывать `fetch(event.request)` — если все плагины вернули `undefined`, фреймворк сам идёт в сеть.
131
- - конфиг плагина задаётся по месту вызова фабрики; в `options` только `logger?` и `onError?`.
132
-
133
- ### Фабрика плагинов
134
-
135
- **Плагин** — это объект с полем `name` и опциональными обработчиками (`install`, `fetch`, `activate` и т.д.). В массив `initServiceWorker(plugins, options)` передаются именно такие объекты.
136
-
137
- **Фабрика плагина** — функция, которая принимает конфиг и возвращает плагин (объект). Например: `precache(config)`, `serveFromCache(config)` или собственная `precacheAndServePlugin(config)` из примера выше. Конфиг задаётся по месту вызова фабрики; в общий `options` попадают только `logger?` и `onError?`.
138
-
139
132
  ## Демо
140
133
 
141
134
  В папке [demo/](demo/) — приложение **React + Vite** с пресетом **offlineFirst** и типовым сервис-воркером **activateOnSignal**. Запуск из корня: `pnpm start`. Подробности — в [demo/README.md](demo/README.md).
142
135
 
143
- ## `initServiceWorker(plugins, options)`
136
+ ## initServiceWorker(plugins, options)
144
137
 
145
138
  `initServiceWorker` — точка входа: регистрирует обработчики событий Service Worker (`install`, `activate`, `fetch`, …) и прогоняет их через список плагинов.
146
139
 
@@ -305,7 +298,13 @@ initServiceWorker(
305
298
  );
306
299
  ```
307
300
 
308
- ## 🔌 Интерфейс плагина
301
+ ## Плагины
302
+
303
+ **Плагин** — это объект с полем `name` и опциональными обработчиками (`install`, `fetch`, `activate` и т.д.). В массив `initServiceWorker(plugins, options)` передаются именно такие объекты.
304
+
305
+ **Фабрика плагина** — функция, которая принимает конфиг и возвращает плагин (объект). Например: `precache(config)`, `serveFromCache(config)` или собственная `precacheAndServePlugin(config)` из примера выше. Конфиг задаётся по месту вызова фабрики; в общий `options` попадают только `logger?` и `onError?`.
306
+
307
+ ### 🔌 Интерфейс плагина
309
308
 
310
309
  Плагин — объект, реализующий интерфейс `ServiceWorkerPlugin`. Во все обработчики вторым аргументом передаётся **logger** (всегда определён: из `options` или `console`). Специфичный для плагина конфиг задаётся при вызове **фабрики** плагина; в `options` только `logger?` и `onError?`. Параметр типа `_C` (например `PluginContext`) используется для типизации; по умолчанию контекст содержит только `logger`.
311
310
 
@@ -441,14 +440,9 @@ initServiceWorker(
441
440
  Пример фабрики, которая прерывает цепочку при неавторизованном доступе к защищённым путям:
442
441
 
443
442
  ```typescript
444
- import type {
445
- PluginContext,
446
- ServiceWorkerPlugin,
447
- } from '@budarin/pluggable-serviceworker';
443
+ import type { Plugin } from '@budarin/pluggable-serviceworker';
448
444
 
449
- function authPlugin(config: {
450
- protectedPaths: string[];
451
- }): ServiceWorkerPlugin<PluginContext> {
445
+ function authPlugin(config: { protectedPaths: string[] }): Plugin {
452
446
  const { protectedPaths } = config;
453
447
 
454
448
  return {
@@ -494,7 +488,6 @@ function authPlugin(config: {
494
488
  ### Примитивы (плагины)
495
489
 
496
490
  Один примитив — одна операция. Импорт: `@budarin/pluggable-serviceworker/plugins`.
497
-
498
491
  Примитивы с конфигом — **фабрики плагинов** (см. раздел «Фабрика плагинов»): конфиг передаётся при вызове по месту использования; в `options` в `initServiceWorker` попадают только `logger?` и `onError?`. Примитивы без конфига (`skipWaiting`, `claim`, …) — готовые объекты плагинов.
499
492
 
500
493
  | Название | Событие | Описание |
@@ -518,9 +511,7 @@ function authPlugin(config: {
518
511
 
519
512
  Обработчики одного типа (`install`, `activate` и т.д.) у разных плагинов выполняются **параллельно**. Если нужна строгая последовательность (например «сначала claim, потом перезагрузка клиентов»), соберите один плагин, который по очереди вызывает логику примитивов — для гарантии порядка.
520
513
 
521
- **Пример: claimAndReloadClients как композиция двух примитивов**
522
-
523
- Плагин **claimAndReloadClients** вызывает существующие примитивы **claim** и **reloadClients** по очереди:
514
+ Пример: claimAndReloadClients как композиция двух примитивов. Плагин вызывает существующие примитивы **claim** и **reloadClients** по очереди:
524
515
 
525
516
  ```typescript
526
517
  import { claim } from '@budarin/pluggable-serviceworker/plugins';
@@ -543,43 +534,24 @@ activate: (event, logger) =>
543
534
  // postsSwrPlugin.ts
544
535
  import type { Plugin } from '@budarin/pluggable-serviceworker';
545
536
 
546
- import {
547
- precache,
548
- serveFromCache,
549
- } from '@budarin/pluggable-serviceworker/plugins';
550
- import { initServiceWorker } from '@budarin/pluggable-serviceworker';
537
+ import { staleWhileRevalidate } from '@budarin/pluggable-serviceworker/plugins';
551
538
 
552
539
  function postsSwrPlugin(config: {
553
540
  cacheName: string;
554
541
  pathPattern?: RegExp;
555
542
  }): Plugin {
556
543
  const { cacheName, pathPattern = /\/api\/posts(\/|$)/ } = config;
544
+ const swrPlugin = staleWhileRevalidate({ cacheName });
557
545
 
558
546
  return {
559
547
  name: 'postsSwr',
560
548
  order: 0,
561
549
 
562
- fetch: async (event) => {
550
+ fetch: async (event, logger) => {
563
551
  if (!pathPattern.test(new URL(event.request.url).pathname)) {
564
552
  return undefined;
565
553
  }
566
-
567
- const cache = await caches.open(cacheName);
568
- const cached = await cache.match(event.request);
569
- const revalidate = fetch(event.request).then(async (response) => {
570
- if (response.ok) {
571
- await cache.put(event.request, response.clone());
572
- }
573
-
574
- return response;
575
- });
576
-
577
- if (cached) {
578
- void revalidate;
579
- return cached;
580
- }
581
-
582
- return revalidate;
554
+ return swrPlugin.fetch!(event, logger);
583
555
  },
584
556
  };
585
557
  }
@@ -625,14 +597,12 @@ initServiceWorker(
625
597
 
626
598
  ```typescript
627
599
  // sw.js — точка входа вашего сервис-воркера
628
- import { customLogger } from './customLogger';
629
600
  import { activateOnNextVisitServiceWorker } from '@budarin/pluggable-serviceworker/sw';
630
601
 
631
602
  activateOnNextVisitServiceWorker({
632
- assets: ['/', '/styles.css', '/script.js'],
633
603
  cacheName: 'my-cache-v1',
634
- logger: customLogger,
635
- onError: (err, event, type) => customLogger.error(type, err),
604
+ assets: ['/', '/styles.css', '/script.js'],
605
+ onError: (err, event, type) => console.error(type, err),
636
606
  });
637
607
  ```
638
608
 
@@ -661,7 +631,7 @@ activateOnNextVisitServiceWorker({
661
631
  "@budarin/pluggable-serviceworker": "^1.0.0"
662
632
  },
663
633
  "devDependencies": {
664
- "@budarin/pluggable-serviceworker": "^1.5.0"
634
+ "@budarin/pluggable-serviceworker": "^1.5.5"
665
635
  }
666
636
  }
667
637
  ```
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@budarin/pluggable-serviceworker",
3
- "version": "1.5.2",
3
+ "version": "1.5.4",
4
4
  "description": "Extensible via plugins service worker",
5
5
  "keywords": [
6
6
  "serviceworker",