@reidelsaltres/pureper 0.2.15 → 0.2.18

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 (40) hide show
  1. package/out/foundation/Fetcher.d.ts.map +1 -1
  2. package/out/foundation/Fetcher.js +8 -13
  3. package/out/foundation/Fetcher.js.map +1 -1
  4. package/out/foundation/Injection.d.ts +87 -0
  5. package/out/foundation/Injection.d.ts.map +1 -0
  6. package/out/foundation/Injection.js +149 -0
  7. package/out/foundation/Injection.js.map +1 -0
  8. package/out/foundation/Triplet.d.ts +30 -25
  9. package/out/foundation/Triplet.d.ts.map +1 -1
  10. package/out/foundation/Triplet.js +96 -115
  11. package/out/foundation/Triplet.js.map +1 -1
  12. package/out/foundation/TripletDecorator.d.ts +11 -0
  13. package/out/foundation/TripletDecorator.d.ts.map +1 -1
  14. package/out/foundation/TripletDecorator.js +25 -8
  15. package/out/foundation/TripletDecorator.js.map +1 -1
  16. package/out/foundation/component_api/UniHtml.d.ts +5 -1
  17. package/out/foundation/component_api/UniHtml.d.ts.map +1 -1
  18. package/out/foundation/component_api/UniHtml.js +23 -5
  19. package/out/foundation/component_api/UniHtml.js.map +1 -1
  20. package/out/foundation/worker/ServiceWorker.d.ts +48 -17
  21. package/out/foundation/worker/ServiceWorker.d.ts.map +1 -1
  22. package/out/foundation/worker/ServiceWorker.js +186 -119
  23. package/out/foundation/worker/ServiceWorker.js.map +1 -1
  24. package/out/index.d.ts +4 -3
  25. package/out/index.d.ts.map +1 -1
  26. package/out/index.js +3 -2
  27. package/out/index.js.map +1 -1
  28. package/package.json +1 -1
  29. package/src/foundation/Fetcher.ts +9 -14
  30. package/src/foundation/Injection.ts +183 -0
  31. package/src/foundation/Triplet.ts +114 -141
  32. package/src/foundation/TripletDecorator.ts +32 -8
  33. package/src/foundation/component_api/UniHtml.ts +26 -5
  34. package/src/foundation/worker/ServiceWorker.ts +203 -129
  35. package/src/foundation/worker/serviceworker.js +191 -0
  36. package/src/index.ts +8 -5
  37. package/out/foundation/worker/serviceworker.d.ts +0 -1
  38. package/out/foundation/worker/serviceworker.d.ts.map +0 -1
  39. package/out/foundation/worker/serviceworker.js +0 -2
  40. package/out/foundation/worker/serviceworker.js.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"file":"Triplet.js","sourceRoot":"","sources":["../../src/foundation/Triplet.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"Triplet.js","sourceRoot":"","sources":["../../src/foundation/Triplet.ts"],"names":[],"mappings":"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"}
@@ -1,4 +1,15 @@
1
1
  import { TripletStruct } from "./Triplet.js";
2
2
  export declare function ReComponent(settings: TripletStruct, tag: string): (ctor: Function) => void;
3
3
  export declare function RePage(settings: TripletStruct, route: string): (ctor: Function) => void;
4
+ /**
5
+ * Register an alternative implementation for an existing placeholder.
6
+ *
7
+ * ```ts
8
+ * @ReImplementation({ markupURL: './Fancy.hmle', cssURL: './Fancy.css' }, "re-button")
9
+ * class FancyButton extends Component { ... }
10
+ *
11
+ * // Then switch: Placeholder.switchTo("re-button", "FancyButton");
12
+ * ```
13
+ */
14
+ export declare function ReImplementation(settings: TripletStruct, target: string): (ctor: Function) => void;
4
15
  //# sourceMappingURL=TripletDecorator.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"TripletDecorator.d.ts","sourceRoot":"","sources":["../../src/foundation/TripletDecorator.ts"],"names":[],"mappings":"AACA,OAAgB,EAAc,aAAa,EAAE,MAAM,cAAc,CAAA;AAEjE,wBAAgB,WAAW,CAAC,QAAQ,EAAE,aAAa,EAAE,GAAG,EAAE,MAAM,IACpD,MAAM,QAAQ,UAezB;AACD,wBAAgB,MAAM,CAAC,QAAQ,EAAE,aAAa,EAAE,KAAK,EAAE,MAAM,IACjD,MAAM,QAAQ,UAezB"}
1
+ {"version":3,"file":"TripletDecorator.d.ts","sourceRoot":"","sources":["../../src/foundation/TripletDecorator.ts"],"names":[],"mappings":"AACA,OAAgB,EAAE,aAAa,EAAE,MAAM,cAAc,CAAA;AAErD,wBAAgB,WAAW,CAAC,QAAQ,EAAE,aAAa,EAAE,GAAG,EAAE,MAAM,IACpD,MAAM,QAAQ,UAYzB;AACD,wBAAgB,MAAM,CAAC,QAAQ,EAAE,aAAa,EAAE,KAAK,EAAE,MAAM,IACjD,MAAM,QAAQ,UAYzB;AAED;;;;;;;;;GASG;AACH,wBAAgB,gBAAgB,CAAC,QAAQ,EAAE,aAAa,EAAE,MAAM,EAAE,MAAM,IAC5D,MAAM,QAAQ,UAiBzB"}
@@ -7,10 +7,6 @@ export function ReComponent(settings, tag) {
7
7
  settings.class = ctor;
8
8
  const triplet = new Triplet(settings);
9
9
  triplet.register("markup", tag)
10
- .then(ok => {
11
- if (!ok)
12
- console.error(`[ReComponent:${tag}] registration returned false`);
13
- })
14
10
  .catch(err => console.error(`[ReComponent:${tag}] register failed`, err));
15
11
  };
16
12
  }
@@ -22,11 +18,32 @@ export function RePage(settings, route) {
22
18
  settings.class = ctor;
23
19
  const triplet = new Triplet(settings);
24
20
  triplet.register("router", route)
25
- .then(ok => {
26
- if (!ok)
27
- console.error(`[RePage:${route}] registration returned false`);
28
- })
29
21
  .catch(err => console.error(`[RePage:${route}] register failed`, err));
30
22
  };
31
23
  }
24
+ /**
25
+ * Register an alternative implementation for an existing placeholder.
26
+ *
27
+ * ```ts
28
+ * @ReImplementation({ markupURL: './Fancy.hmle', cssURL: './Fancy.css' }, "re-button")
29
+ * class FancyButton extends Component { ... }
30
+ *
31
+ * // Then switch: Placeholder.switchTo("re-button", "FancyButton");
32
+ * ```
33
+ */
34
+ export function ReImplementation(settings, target) {
35
+ return (ctor) => {
36
+ if (target == null || target.length === 0)
37
+ throw new Error("Invalid implementation target.");
38
+ if (settings.class === null || settings.class === undefined)
39
+ settings.class = ctor;
40
+ // Use the class name as the implementation name
41
+ const implName = ctor.name;
42
+ const triplet = new Triplet(settings, implName);
43
+ // Register adds the implementation to the existing placeholder (or creates one)
44
+ triplet.register(target.includes("-") ? "markup" : "router", target)
45
+ .catch(err => console.error(`[ReImplementation:${target}] register failed`, err));
46
+ console.info(`[ReImplementation:${target}] registered implementation "${implName}"`);
47
+ };
48
+ }
32
49
  //# sourceMappingURL=TripletDecorator.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"TripletDecorator.js","sourceRoot":"","sources":["../../src/foundation/TripletDecorator.ts"],"names":[],"mappings":"AACA,OAAO,OAAsC,MAAM,cAAc,CAAA;AAEjE,MAAM,UAAU,WAAW,CAAC,QAAuB,EAAE,GAAW;IAC5D,OAAO,CAAC,IAAc,EAAE,EAAE;QACtB,IAAI,GAAG,IAAI,IAAI,IAAI,GAAG,CAAC,MAAM,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,GAAG,CAAC;YACrD,MAAM,IAAI,KAAK,CAAC,kCAAkC,CAAC,CAAC;QAExD,IAAI,QAAQ,CAAC,KAAK,KAAK,IAAI,IAAI,QAAQ,CAAC,KAAK,KAAK,SAAS;YACvD,QAAQ,CAAC,KAAK,GAAG,IAA+B,CAAC;QAErD,MAAM,OAAO,GAAY,IAAI,OAAO,CAAC,QAAQ,CAAC,CAAC;QAE/C,OAAO,CAAC,QAAQ,CAAC,QAAQ,EAAE,GAAG,CAAC;aAC1B,IAAI,CAAC,EAAE,CAAC,EAAE;YACP,IAAI,CAAC,EAAE;gBAAE,OAAO,CAAC,KAAK,CAAC,gBAAgB,GAAG,+BAA+B,CAAC,CAAC;QAC/E,CAAC,CAAC;aACD,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC,OAAO,CAAC,KAAK,CAAC,gBAAgB,GAAG,mBAAmB,EAAE,GAAG,CAAC,CAAC,CAAC;IAClF,CAAC,CAAA;AACL,CAAC;AACD,MAAM,UAAU,MAAM,CAAC,QAAuB,EAAE,KAAa;IACzD,OAAO,CAAC,IAAc,EAAE,EAAE;QACtB,IAAI,KAAK,IAAI,IAAI,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,GAAG,CAAC;YAC7D,MAAM,IAAI,KAAK,CAAC,qBAAqB,CAAC,CAAC;QAE3C,IAAI,QAAQ,CAAC,KAAK,KAAK,IAAI,IAAI,QAAQ,CAAC,KAAK,KAAK,SAAS;YACvD,QAAQ,CAAC,KAAK,GAAG,IAA+B,CAAC;QAErD,MAAM,OAAO,GAAY,IAAI,OAAO,CAAC,QAAQ,CAAC,CAAC;QAE/C,OAAO,CAAC,QAAQ,CAAC,QAAQ,EAAE,KAAK,CAAC;aAC5B,IAAI,CAAC,EAAE,CAAC,EAAE;YACP,IAAI,CAAC,EAAE;gBAAE,OAAO,CAAC,KAAK,CAAC,WAAW,KAAK,+BAA+B,CAAC,CAAC;QAC5E,CAAC,CAAC;aACD,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC,OAAO,CAAC,KAAK,CAAC,WAAW,KAAK,mBAAmB,EAAE,GAAG,CAAC,CAAC,CAAC;IAC/E,CAAC,CAAA;AACL,CAAC"}
1
+ {"version":3,"file":"TripletDecorator.js","sourceRoot":"","sources":["../../src/foundation/TripletDecorator.ts"],"names":[],"mappings":"AACA,OAAO,OAA0B,MAAM,cAAc,CAAA;AAErD,MAAM,UAAU,WAAW,CAAC,QAAuB,EAAE,GAAW;IAC5D,OAAO,CAAC,IAAc,EAAE,EAAE;QACtB,IAAI,GAAG,IAAI,IAAI,IAAI,GAAG,CAAC,MAAM,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,GAAG,CAAC;YACrD,MAAM,IAAI,KAAK,CAAC,kCAAkC,CAAC,CAAC;QAExD,IAAI,QAAQ,CAAC,KAAK,KAAK,IAAI,IAAI,QAAQ,CAAC,KAAK,KAAK,SAAS;YACvD,QAAQ,CAAC,KAAK,GAAG,IAA+B,CAAC;QAErD,MAAM,OAAO,GAAY,IAAI,OAAO,CAAC,QAAQ,CAAC,CAAC;QAE/C,OAAO,CAAC,QAAQ,CAAC,QAAQ,EAAE,GAAG,CAAC;aAC1B,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC,OAAO,CAAC,KAAK,CAAC,gBAAgB,GAAG,mBAAmB,EAAE,GAAG,CAAC,CAAC,CAAC;IAClF,CAAC,CAAA;AACL,CAAC;AACD,MAAM,UAAU,MAAM,CAAC,QAAuB,EAAE,KAAa;IACzD,OAAO,CAAC,IAAc,EAAE,EAAE;QACtB,IAAI,KAAK,IAAI,IAAI,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,GAAG,CAAC;YAC7D,MAAM,IAAI,KAAK,CAAC,qBAAqB,CAAC,CAAC;QAE3C,IAAI,QAAQ,CAAC,KAAK,KAAK,IAAI,IAAI,QAAQ,CAAC,KAAK,KAAK,SAAS;YACvD,QAAQ,CAAC,KAAK,GAAG,IAA+B,CAAC;QAErD,MAAM,OAAO,GAAY,IAAI,OAAO,CAAC,QAAQ,CAAC,CAAC;QAE/C,OAAO,CAAC,QAAQ,CAAC,QAAQ,EAAE,KAAK,CAAC;aAC5B,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC,OAAO,CAAC,KAAK,CAAC,WAAW,KAAK,mBAAmB,EAAE,GAAG,CAAC,CAAC,CAAC;IAC/E,CAAC,CAAA;AACL,CAAC;AAED;;;;;;;;;GASG;AACH,MAAM,UAAU,gBAAgB,CAAC,QAAuB,EAAE,MAAc;IACpE,OAAO,CAAC,IAAc,EAAE,EAAE;QACtB,IAAI,MAAM,IAAI,IAAI,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC;YACrC,MAAM,IAAI,KAAK,CAAC,gCAAgC,CAAC,CAAC;QAEtD,IAAI,QAAQ,CAAC,KAAK,KAAK,IAAI,IAAI,QAAQ,CAAC,KAAK,KAAK,SAAS;YACvD,QAAQ,CAAC,KAAK,GAAG,IAA+B,CAAC;QAErD,gDAAgD;QAChD,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC;QAC3B,MAAM,OAAO,GAAY,IAAI,OAAO,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC;QAEzD,gFAAgF;QAChF,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,QAAQ,EAAE,MAAM,CAAC;aAC/D,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC,OAAO,CAAC,KAAK,CAAC,qBAAqB,MAAM,mBAAmB,EAAE,GAAG,CAAC,CAAC,CAAC;QAEtF,OAAO,CAAC,IAAI,CAAC,qBAAqB,MAAM,gCAAgC,QAAQ,GAAG,CAAC,CAAC;IACzF,CAAC,CAAA;AACL,CAAC"}
@@ -13,7 +13,6 @@ export default class UniHtml {
13
13
  * @param element Target container (usually shadowRoot.host)
14
14
  */
15
15
  load(element: HTMLElement | ShadowRoot): Promise<void>;
16
- private _postInit;
17
16
  private _init;
18
17
  protected preInit(): Promise<void>;
19
18
  /**
@@ -38,5 +37,10 @@ export default class UniHtml {
38
37
  */
39
38
  protected render(holder: TemplateHolder, renderTarget: HTMLElement | DocumentFragment): Promise<void>;
40
39
  dispose(): Promise<void>;
40
+ /**
41
+ * Reload this instance: dispose current state, then re-run the full lifecycle.
42
+ * Called automatically when the active Implementation is switched via Placeholder.
43
+ */
44
+ reload(): Promise<void>;
41
45
  }
42
46
  //# sourceMappingURL=UniHtml.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"UniHtml.d.ts","sourceRoot":"","sources":["../../../src/foundation/component_api/UniHtml.ts"],"names":[],"mappings":"AAAA,OAAO,UAAU,MAAM,oBAAoB,CAAC;AAC5C,OAAO,EAAE,cAAc,EAAE,MAAM,6BAA6B,CAAC;AAG7D;;;GAGG;AACH,MAAM,CAAC,OAAO,OAAO,OAAO;IACjB,OAAO,EAAE,UAAU,CAAC,aAAa,GAAG,SAAS,GAAG,OAAO,CAAC,CAAiC;IAChG,SAAS,CAAC,eAAe,CAAC,EAAE,cAAc,CAAC;IAE3C;;;;OAIG;IACU,IAAI,CAAC,OAAO,EAAE,WAAW,GAAG,UAAU,GAAG,OAAO,CAAC,IAAI,CAAC;YAsBrD,SAAS;YAGT,KAAK;cAIH,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC;IACxC;;;;;OAKG;cACa,OAAO,CAAC,MAAM,EAAE,cAAc;IAC9C;;;;;OAKG;cACa,QAAQ,CAAC,MAAM,EAAE,cAAc;IAC/C;;;;;OAKG;cACa,MAAM,CAAC,MAAM,EAAE,cAAc,EAAE,YAAY,EAAE,WAAW,GAAG,gBAAgB,GAAG,OAAO,CAAC,IAAI,CAAC;IA4B9F,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC;CAMxC"}
1
+ {"version":3,"file":"UniHtml.d.ts","sourceRoot":"","sources":["../../../src/foundation/component_api/UniHtml.ts"],"names":[],"mappings":"AAAA,OAAO,UAAU,MAAM,oBAAoB,CAAC;AAC5C,OAAO,EAAE,cAAc,EAAE,MAAM,6BAA6B,CAAC;AAG7D;;;GAGG;AACH,MAAM,CAAC,OAAO,OAAO,OAAO;IACjB,OAAO,EAAE,UAAU,CAAC,aAAa,GAAG,SAAS,GAAG,OAAO,CAAC,CAAiC;IAChG,SAAS,CAAC,eAAe,CAAC,EAAE,cAAc,CAAC;IAE3C;;;;OAIG;IACU,IAAI,CAAC,OAAO,EAAE,WAAW,GAAG,UAAU,GAAG,OAAO,CAAC,IAAI,CAAC;YAsBrD,KAAK;cAIH,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC;IACxC;;;;;OAKG;cACa,OAAO,CAAC,MAAM,EAAE,cAAc;IAC9C;;;;;OAKG;cACa,QAAQ,CAAC,MAAM,EAAE,cAAc;IAC/C;;;;;OAKG;cACa,MAAM,CAAC,MAAM,EAAE,cAAc,EAAE,YAAY,EAAE,WAAW,GAAG,gBAAgB,GAAG,OAAO,CAAC,IAAI,CAAC;IA4B9F,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC;IAOrC;;;OAGG;IACU,MAAM,IAAI,OAAO,CAAC,IAAI,CAAC;CAmBvC"}
@@ -13,9 +13,9 @@ export default class UniHtml {
13
13
  */
14
14
  async load(element) {
15
15
  this._status.setObject("loading");
16
+ this._lastRenderTarget = element;
16
17
  await this.preInit();
17
- const preHtml = await this._init();
18
- const html = await this._postInit(preHtml);
18
+ const html = await this._init();
19
19
  // ВАЖНО: preLoad() вызывается ДО монтирования в DOM/Shadow DOM.
20
20
  // Для компонентов (UniHtmlComponent) на этом этапе ещё нельзя полагаться на this.shadowRoot —
21
21
  // используйте переданный localRoot для подготовки DOM, данных и навешивания обработчиков.
@@ -30,9 +30,6 @@ export default class UniHtml {
30
30
  await this.postLoad(html);
31
31
  this._status.setObject("ready");
32
32
  }
33
- async _postInit(html) {
34
- throw new Error("Method not implemented.");
35
- }
36
33
  async _init() {
37
34
  throw new Error("Method not implemented.");
38
35
  }
@@ -86,5 +83,26 @@ export default class UniHtml {
86
83
  this._templateHolder = undefined;
87
84
  }
88
85
  }
86
+ /**
87
+ * Reload this instance: dispose current state, then re-run the full lifecycle.
88
+ * Called automatically when the active Implementation is switched via Placeholder.
89
+ */
90
+ async reload() {
91
+ const renderTarget = this.shadowRoot ?? this._lastRenderTarget;
92
+ await this.dispose();
93
+ this._status.setObject("constructed");
94
+ if (renderTarget) {
95
+ // Clear existing content
96
+ while (renderTarget.firstChild) {
97
+ renderTarget.removeChild(renderTarget.firstChild);
98
+ }
99
+ // Clear adopted stylesheets so the new implementation applies its own
100
+ if ('adoptedStyleSheets' in renderTarget) {
101
+ renderTarget.adoptedStyleSheets = [];
102
+ }
103
+ await this.load(renderTarget);
104
+ }
105
+ console.info(`[UniHtml]: Instance reloaded`);
106
+ }
89
107
  }
90
108
  //# sourceMappingURL=UniHtml.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"UniHtml.js","sourceRoot":"","sources":["../../../src/foundation/component_api/UniHtml.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"UniHtml.js","sourceRoot":"","sources":["../../../src/foundation/component_api/UniHtml.ts"],"names":[],"mappings":"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"}
@@ -1,25 +1,56 @@
1
+ import Observable from "../api/Observer.js";
2
+ export type ServiceWorkerConfig = {
3
+ scriptURL?: string;
4
+ scope?: string;
5
+ };
6
+ /**
7
+ * Client-side Service Worker manager for Purper SPA.
8
+ *
9
+ * Provides:
10
+ * - Registration with one call (`ServiceWorker.register()`)
11
+ * - Cache management: add / remove / list / clear
12
+ * - Connectivity detection with reactive `online` observable
13
+ *
14
+ * Usage:
15
+ * ```ts
16
+ * await ServiceWorker.register(); // defaults to './serviceworker.js'
17
+ * await ServiceWorker.addToCache('/data.json');
18
+ * await ServiceWorker.removeFromCache('/old.css');
19
+ * ServiceWorker.online.subscribe(v => console.log('online:', v));
20
+ * ```
21
+ */
1
22
  export default class ServiceWorker {
2
- /**
3
- * Sends a message to the service worker to cache a specific URL.
4
- * @param url The URL of the resource to cache.
5
- */
23
+ private static _registration?;
24
+ /** Observable connectivity state subscribe for real-time changes. */
25
+ static readonly online: Observable<boolean>;
26
+ private static _connectivityBound;
27
+ private static _bindConnectivity;
28
+ static register(config?: ServiceWorkerConfig): Promise<ServiceWorkerRegistration | undefined>;
29
+ private static _postMessage;
30
+ private static _request;
31
+ /** Add a single URL to the SW cache. */
6
32
  static addToCache(url: string): Promise<void>;
7
- /**
8
- * Asks the service worker to skip waiting and activate the new version.
9
- */
33
+ /** Add multiple URLs to the SW cache in one batch. */
34
+ static addAllToCache(urls: string[]): void;
35
+ /** Remove a URL from the SW cache. Returns true if it was found and deleted. */
36
+ static removeFromCache(url: string): Promise<boolean>;
37
+ /** Return all URLs currently in the SW cache. */
38
+ static getCacheKeys(): Promise<string[]>;
39
+ /** Wipe the entire SW cache. */
40
+ static clearCache(): Promise<boolean>;
41
+ /** Check whether a URL exists in the SW cache. */
42
+ static isCached(url: string): Promise<boolean>;
43
+ /** Ask the waiting SW to activate immediately. */
10
44
  static skipWaiting(): void;
11
- /**
12
- * Gets the version of the currently active service worker.
13
- * @returns A promise that resolves with the version string.
14
- */
45
+ /** Get the version string from the running SW. */
15
46
  static getVersion(): Promise<string>;
16
47
  /**
17
- * Checks if the given URL is present in the Service Worker's cache.
18
- */
19
- static isCached(url: string): Promise<boolean>;
20
- /**
21
- * Checks if the browser is online.
48
+ * Active connectivity probe makes a real network request.
49
+ * Unlike `online` observable (which relies on browser events), this
50
+ * detects captive portals and lie-fi.
22
51
  */
23
- static isOnline(): Promise<boolean>;
52
+ static isOnline(probeURL?: string): Promise<boolean>;
53
+ /** Current registration, if any. */
54
+ static get registration(): ServiceWorkerRegistration | undefined;
24
55
  }
25
56
  //# sourceMappingURL=ServiceWorker.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"ServiceWorker.d.ts","sourceRoot":"","sources":["../../../src/foundation/worker/ServiceWorker.ts"],"names":[],"mappings":"AAgEA,MAAM,CAAC,OAAO,OAAO,aAAa;IAC9B;;;OAGG;WACU,UAAU,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAqBnD;;OAEG;IACH,MAAM,CAAC,WAAW,IAAI,IAAI;IAM1B;;;OAGG;IACH,MAAM,CAAC,UAAU,IAAI,OAAO,CAAC,MAAM,CAAC;IAkBpC;;OAEG;IACH,MAAM,CAAC,QAAQ,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAmB9C;;OAEG;WACU,QAAQ,IAAI,OAAO,CAAC,OAAO,CAAC;CAQ5C"}
1
+ {"version":3,"file":"ServiceWorker.d.ts","sourceRoot":"","sources":["../../../src/foundation/worker/ServiceWorker.ts"],"names":[],"mappings":"AAAA,OAAO,UAAU,MAAM,oBAAoB,CAAC;AAE5C,MAAM,MAAM,mBAAmB,GAAG;IAC9B,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,KAAK,CAAC,EAAE,MAAM,CAAC;CAClB,CAAC;AAEF;;;;;;;;;;;;;;;GAeG;AACH,MAAM,CAAC,OAAO,OAAO,aAAa;IAC9B,OAAO,CAAC,MAAM,CAAC,aAAa,CAAC,CAA4B;IAEzD,uEAAuE;IACvE,MAAM,CAAC,QAAQ,CAAC,MAAM,EAAE,UAAU,CAAC,OAAO,CAAC,CAAoC;IAG/E,OAAO,CAAC,MAAM,CAAC,kBAAkB,CAAS;IAC1C,OAAO,CAAC,MAAM,CAAC,iBAAiB;WAenB,QAAQ,CAAC,MAAM,CAAC,EAAE,mBAAmB,GAAG,OAAO,CAAC,yBAAyB,GAAG,SAAS,CAAC;IA0CnG,OAAO,CAAC,MAAM,CAAC,YAAY;IAI3B,OAAO,CAAC,MAAM,CAAC,QAAQ;IAcvB,wCAAwC;WAC3B,UAAU,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAkBnD,sDAAsD;IACtD,MAAM,CAAC,aAAa,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,IAAI;IAI1C,gFAAgF;WACnE,eAAe,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAe3D,iDAAiD;WACpC,YAAY,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC;IAS9C,gCAAgC;WACnB,UAAU,IAAI,OAAO,CAAC,OAAO,CAAC;IAS3C,kDAAkD;WACrC,QAAQ,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAgBpD,kDAAkD;IAClD,MAAM,CAAC,WAAW,IAAI,IAAI;IAI1B,kDAAkD;WACrC,UAAU,IAAI,OAAO,CAAC,MAAM,CAAC;IAO1C;;;;OAIG;WACU,QAAQ,CAAC,QAAQ,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAuB1D,oCAAoC;IACpC,MAAM,KAAK,YAAY,IAAI,yBAAyB,GAAG,SAAS,CAE/D;CACJ"}
@@ -1,144 +1,211 @@
1
- const swSelf = self;
2
- // Автоматически генерируем CACHE_NAME из base.json
3
- //import base from '../../../data/base.json';
4
- const CACHE_NAME = `pureper-v1`;
5
- const STATIC_ASSETS = [
6
- '/index.html'
7
- ];
8
- /*if ('serviceWorker' in navigator) {
9
- window.addEventListener('load', () => {
10
- navigator.serviceWorker.register('./serviceWorker.js', { type: 'module' })
11
- .then((registration) => {
12
- console.log('ServiceWorker registration successful:', registration.scope);
13
- })
14
- .catch((error) => {
15
- console.error('ServiceWorker registration failed:', error);
16
- });
17
- });
18
- window.addEventListener('fetch', (event: FetchEvent) => {
19
- event.respondWith(
20
- caches.match(event.request).then((cachedResponse) => {
21
- console.log(`[ServiceWorker]: Fetching ${event.request.url}`);
22
- return cachedResponse || fetch(event.request);
23
- })
24
- );
25
- });
26
- }
27
-
1
+ import Observable from "../api/Observer.js";
28
2
  /**
29
- * Install event - cache static assets
3
+ * Client-side Service Worker manager for Purper SPA.
4
+ *
5
+ * Provides:
6
+ * - Registration with one call (`ServiceWorker.register()`)
7
+ * - Cache management: add / remove / list / clear
8
+ * - Connectivity detection with reactive `online` observable
9
+ *
10
+ * Usage:
11
+ * ```ts
12
+ * await ServiceWorker.register(); // defaults to './serviceworker.js'
13
+ * await ServiceWorker.addToCache('/data.json');
14
+ * await ServiceWorker.removeFromCache('/old.css');
15
+ * ServiceWorker.online.subscribe(v => console.log('online:', v));
16
+ * ```
30
17
  */
31
- /*window.addEventListener('install', (event: ExtendableEvent) => {
32
- console.log('ServiceWorker: Installing...');
33
- const assetsToCache = [
34
- ...STATIC_ASSETS
35
- ];
36
- // Remove duplicates
37
- const uniqueAssets = Array.from(new Set(assetsToCache));
38
- event.waitUntil(
39
- caches.open(CACHE_NAME)
40
- .then((cache: Cache) => {
41
- console.log('ServiceWorker: Caching static assets and SPA routes');
42
- return cache.addAll(uniqueAssets);
43
- })
44
- .then(() => {
45
- console.log('ServiceWorker: Installation complete');
46
- return swSelf.skipWaiting();
47
- })
48
- );
49
- });*/
50
18
  export default class ServiceWorker {
51
- /**
52
- * Sends a message to the service worker to cache a specific URL.
53
- * @param url The URL of the resource to cache.
54
- */
55
- static async addToCache(url) {
56
- if ('serviceWorker' in navigator && navigator.serviceWorker.controller) {
57
- navigator.serviceWorker.controller.postMessage({
58
- type: 'CACHE_URL',
59
- url: url
19
+ static _registration;
20
+ /** Observable connectivity state subscribe for real-time changes. */
21
+ static online = new Observable(navigator.onLine);
22
+ // ── Connectivity listeners (bound once) ─────────────────────────
23
+ static _connectivityBound = false;
24
+ static _bindConnectivity() {
25
+ if (this._connectivityBound)
26
+ return;
27
+ this._connectivityBound = true;
28
+ window.addEventListener('online', () => {
29
+ console.log('[ServiceWorker]: Browser went online');
30
+ this.online.setObject(true);
31
+ });
32
+ window.addEventListener('offline', () => {
33
+ console.log('[ServiceWorker]: Browser went offline');
34
+ this.online.setObject(false);
35
+ });
36
+ }
37
+ // ── Registration ────────────────────────────────────────────────
38
+ static async register(config) {
39
+ if (!('serviceWorker' in navigator)) {
40
+ console.warn('[ServiceWorker]: Service Workers are not supported in this browser');
41
+ return undefined;
42
+ }
43
+ this._bindConnectivity();
44
+ const scriptURL = config?.scriptURL ?? './serviceworker.js';
45
+ const scope = config?.scope ?? '/';
46
+ try {
47
+ const reg = await navigator.serviceWorker.register(scriptURL, { scope });
48
+ this._registration = reg;
49
+ console.log(`[ServiceWorker]: Registered "${scriptURL}" with scope "${reg.scope}"`);
50
+ reg.addEventListener('updatefound', () => {
51
+ const newWorker = reg.installing;
52
+ if (!newWorker)
53
+ return;
54
+ console.log('[ServiceWorker]: New version installing...');
55
+ newWorker.addEventListener('statechange', () => {
56
+ if (newWorker.state === 'activated') {
57
+ console.log('[ServiceWorker]: New version activated');
58
+ }
59
+ });
60
60
  });
61
+ // Wait for the controller to be available
62
+ if (!navigator.serviceWorker.controller) {
63
+ await new Promise((resolve) => {
64
+ navigator.serviceWorker.addEventListener('controllerchange', () => resolve(), { once: true });
65
+ });
66
+ }
67
+ return reg;
61
68
  }
62
- else {
63
- // Fallback: try to cache directly using the Cache API
64
- try {
65
- const cache = await caches.open('pureper-v1');
66
- const response = await fetch(url);
67
- if (response.ok) {
68
- await cache.put(url, response);
69
- console.log('[ServiceWorker]: Resource cached directly:', url);
70
- }
69
+ catch (err) {
70
+ console.error('[ServiceWorker]: Registration failed', err);
71
+ return undefined;
72
+ }
73
+ }
74
+ // ── Helpers ─────────────────────────────────────────────────────
75
+ static _postMessage(msg) {
76
+ navigator.serviceWorker?.controller?.postMessage(msg);
77
+ }
78
+ static _request(msg) {
79
+ return new Promise((resolve, reject) => {
80
+ if (!navigator.serviceWorker?.controller) {
81
+ reject('[ServiceWorker]: No active controller');
82
+ return;
71
83
  }
72
- catch (e) {
73
- console.warn('[ServiceWorker]: Failed to cache resource:', url, e);
84
+ const mc = new MessageChannel();
85
+ mc.port1.onmessage = (ev) => resolve(ev.data);
86
+ navigator.serviceWorker.controller.postMessage(msg, [mc.port2]);
87
+ });
88
+ }
89
+ // ── Cache Management ────────────────────────────────────────────
90
+ /** Add a single URL to the SW cache. */
91
+ static async addToCache(url) {
92
+ if (navigator.serviceWorker?.controller) {
93
+ this._postMessage({ type: 'CACHE_URL', url });
94
+ return;
95
+ }
96
+ // Fallback: use Cache API directly
97
+ try {
98
+ const cache = await caches.open('purper-v1');
99
+ const response = await fetch(url);
100
+ if (response.ok) {
101
+ await cache.put(url, response);
102
+ console.log('[ServiceWorker]: Resource cached directly:', url);
74
103
  }
75
104
  }
76
- }
77
- /**
78
- * Asks the service worker to skip waiting and activate the new version.
79
- */
80
- static skipWaiting() {
81
- if ('serviceWorker' in navigator && navigator.serviceWorker.controller) {
82
- navigator.serviceWorker.controller.postMessage({ type: 'SKIP_WAITING' });
105
+ catch (e) {
106
+ console.warn('[ServiceWorker]: Failed to cache resource:', url, e);
83
107
  }
84
108
  }
85
- /**
86
- * Gets the version of the currently active service worker.
87
- * @returns A promise that resolves with the version string.
88
- */
89
- static getVersion() {
90
- return new Promise((resolve, reject) => {
91
- if ('serviceWorker' in navigator && navigator.serviceWorker.controller) {
92
- const messageChannel = new MessageChannel();
93
- messageChannel.port1.onmessage = (event) => {
94
- if (event.data.error) {
95
- reject(event.data.error);
96
- }
97
- else {
98
- resolve(event.data.version);
99
- }
100
- };
101
- navigator.serviceWorker.controller.postMessage({ type: 'GET_VERSION' }, [messageChannel.port2]);
109
+ /** Add multiple URLs to the SW cache in one batch. */
110
+ static addAllToCache(urls) {
111
+ this._postMessage({ type: 'CACHE_URLS', urls });
112
+ }
113
+ /** Remove a URL from the SW cache. Returns true if it was found and deleted. */
114
+ static async removeFromCache(url) {
115
+ try {
116
+ const data = await this._request({ type: 'REMOVE_URL', url });
117
+ return data.deleted;
118
+ }
119
+ catch {
120
+ // Fallback
121
+ try {
122
+ const cache = await caches.open('purper-v1');
123
+ return await cache.delete(url);
102
124
  }
103
- else {
104
- reject('Service worker not available.');
125
+ catch {
126
+ return false;
105
127
  }
106
- });
128
+ }
107
129
  }
108
- /**
109
- * Checks if the given URL is present in the Service Worker's cache.
110
- */
111
- static isCached(url) {
112
- return new Promise((resolve) => {
113
- if ('serviceWorker' in navigator && navigator.serviceWorker.controller) {
114
- const mc = new MessageChannel();
115
- mc.port1.onmessage = (ev) => {
116
- if (ev.data && typeof ev.data.cached === 'boolean') {
117
- resolve(ev.data.cached);
118
- }
119
- else {
120
- resolve(false);
121
- }
122
- };
123
- navigator.serviceWorker.controller.postMessage({ type: 'HAS_URL', url }, [mc.port2]);
130
+ /** Return all URLs currently in the SW cache. */
131
+ static async getCacheKeys() {
132
+ try {
133
+ const data = await this._request({ type: 'GET_CACHE_KEYS' });
134
+ return data.keys;
135
+ }
136
+ catch {
137
+ return [];
138
+ }
139
+ }
140
+ /** Wipe the entire SW cache. */
141
+ static async clearCache() {
142
+ try {
143
+ const data = await this._request({ type: 'CLEAR_CACHE' });
144
+ return data.cleared;
145
+ }
146
+ catch {
147
+ return false;
148
+ }
149
+ }
150
+ /** Check whether a URL exists in the SW cache. */
151
+ static async isCached(url) {
152
+ try {
153
+ const data = await this._request({ type: 'HAS_URL', url });
154
+ return data.cached;
155
+ }
156
+ catch {
157
+ // Fallback: CacheStorage directly
158
+ try {
159
+ return !!(await caches.match(url));
124
160
  }
125
- else {
126
- // Fallback: try CacheStorage directly (same-origin only)
127
- caches.match(url).then(match => resolve(!!match)).catch(() => resolve(false));
161
+ catch {
162
+ return false;
128
163
  }
129
- });
164
+ }
130
165
  }
166
+ // ── Version & lifecycle ─────────────────────────────────────────
167
+ /** Ask the waiting SW to activate immediately. */
168
+ static skipWaiting() {
169
+ this._postMessage({ type: 'SKIP_WAITING' });
170
+ }
171
+ /** Get the version string from the running SW. */
172
+ static async getVersion() {
173
+ const data = await this._request({ type: 'GET_VERSION' });
174
+ return data.version;
175
+ }
176
+ // ── Connectivity ────────────────────────────────────────────────
131
177
  /**
132
- * Checks if the browser is online.
178
+ * Active connectivity probe makes a real network request.
179
+ * Unlike `online` observable (which relies on browser events), this
180
+ * detects captive portals and lie-fi.
133
181
  */
134
- static async isOnline() {
182
+ static async isOnline(probeURL) {
135
183
  try {
136
- const response = await fetch('./index.html', { cache: 'no-store' });
137
- return response && response.ok;
184
+ // Try SW-side probe first
185
+ const data = await this._request({
186
+ type: 'IS_ONLINE',
187
+ url: probeURL ?? '/index.html'
188
+ });
189
+ this.online.setObject(data.online);
190
+ return data.online;
138
191
  }
139
192
  catch {
140
- return false;
193
+ // Fallback: client-side probe
194
+ try {
195
+ const response = await fetch(probeURL ?? './index.html', { cache: 'no-store', method: 'HEAD' });
196
+ const result = response.ok;
197
+ this.online.setObject(result);
198
+ return result;
199
+ }
200
+ catch {
201
+ this.online.setObject(false);
202
+ return false;
203
+ }
141
204
  }
142
205
  }
206
+ /** Current registration, if any. */
207
+ static get registration() {
208
+ return this._registration;
209
+ }
143
210
  }
144
211
  //# sourceMappingURL=ServiceWorker.js.map